<?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>T=Machine &#187; databases</title>
	<atom:link href="http://t-machine.org/index.php/category/databases/feed/" rel="self" type="application/rss+xml" />
	<link>http://t-machine.org</link>
	<description>Internet Gaming, Computer Games, Technology, MMO, and Web 2.0</description>
	<lastBuildDate>Tue, 20 Jul 2010 09:43:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Speaker Evaluations &#8211; GDC Austin 2009</title>
		<link>http://t-machine.org/index.php/2009/11/21/speaker-evaluations-gdc-austin-2009/</link>
		<comments>http://t-machine.org/index.php/2009/11/21/speaker-evaluations-gdc-austin-2009/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 21:59:18 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[conferences]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[massively multiplayer]]></category>
		<category><![CDATA[network programming]]></category>
		<category><![CDATA[system architecture]]></category>

		<guid isPermaLink="false">http://t-machine.org/?p=738</guid>
		<description><![CDATA[Conferences don&#8217;t make these public.
But they should.
So &#8230; here are the evaluations (from the audience) for our panel session at AGDC 09.
Judge for yourself whether you want to attend any future sessions featuring us again (Adam Martin, Bill Dalton, Rick Lambright, Joe Ludwig, Marty Poulin).
Head Count: 74; Evaluations: 32 (43% response rate)

Overall rating of the [...]]]></description>
			<content:encoded><![CDATA[<p>Conferences don&#8217;t make these public.</p>
<p>But they should.</p>
<p>So &#8230; here are the evaluations (from the audience) for <a href="http://t-machine.org/index.php/2009/09/20/agdc-2009-killing-the-sacred-cows-of-mmo-technology/" >our panel session at AGDC 09</a>.</p>
<p>Judge for yourself whether you want to attend any future sessions featuring us again (Adam Martin, Bill Dalton, Rick Lambright, Joe Ludwig, Marty Poulin).</p>
<h4>Head Count: 74; Evaluations: 32 (43% response rate)</h4>
<ul>
<li>Overall rating of the presentation &#8211; 88% (AVG: 86%)
<li>How relevant was the topic to you? &#8211; 86% (AVG: 84%)
<li>How well did this class meet your expectations? &#8211; 94% (AVG: 84%)
<li>Would you recommend this session to a colleague? &#8211; 90% (AVG: 84%)
<li>Evaluate the speakers&#8217; ability to communicate &#8211; 94% (AVG: 86%)
<li>If there were visual aids (slides) how were they? &#8211; 74% (AVG: 60%)
</ul>
<p>All of those are above average, and I&#8217;m glad that a particularly high number would recommend the session to their colleagues.</p>
<p>It seems that we did particularly well on fulfilling the remit (very high number for &#8220;met expectations&#8221;), and that our speakers had an awesome ability to communicate (almost 10% higher than average for the other speakers at the conference).</p>
<h4>Audience Comments</h4>
<ol>
<li>The most entertaining session I attended, but didn&#8217;t sacrifice information value.
<li>Interesting format, I wouldn&#8217;t mind seeing more of this, but it is time consuming
<li>Good stuff
<li>Slow, confused start lost valuable time for Q&#038;A
<li>Should have done middleware
<li>Only 3 topics covered. Expected others
</ol>
<p>Comment 4 &#8211; yeah, something I&#8217;m unhappy about too, (it wasn&#8217;t our fault, it was the people running the conference), but there was nothing for it but to grin and carry on. Someone screwed-up the radio microphones, and we lost a lot of time at the start waiting for them to fix it. There was nothing we could do &#8211; they had connected the mics from a different room to *our* speakers. We didn&#8217;t find out until the person in the other room started talking, and it all came out through our speakers :(.</p>
<p>Comment 6 &#8211; we covered 4 topics (oops, audience can&#8217;t count :P). We all wanted to do more, but at GDC conferences, the organizers only give us 1-hour slots. With 4 speakers + moderator, I think that was pretty good, especially considering the time we lost at the start.</p>
<p>Perhaps someone will clone this format for a future conference (seems a good idea), and try to get a 2-hour slot for it?</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2009/11/21/speaker-evaluations-gdc-austin-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Export spreadsheet to plain XML with OpenOffice 3.x (works!)</title>
		<link>http://t-machine.org/index.php/2009/06/10/export-spreadsheet-to-plain-xml-with-openoffice-3x-works/</link>
		<comments>http://t-machine.org/index.php/2009/06/10/export-spreadsheet-to-plain-xml-with-openoffice-3x-works/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 18:24:19 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[databases]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://t-machine.org/?p=572</guid>
		<description><![CDATA[Microsoft Office:

Costs stupid amounts of money
Isn&#8217;t very good
Is only available on windows
&#8230;but &#8220;usually&#8221; works

OpenOffice:

Is completely free
Is an almost exact clone of Microsoft Office circa Office 2000/XP
Is open-source (so that sometimes you can easily fix it yourself, quite surprisingly!)
&#8230;but apart from the Microsoft Word part, &#8220;often doesn&#8217;t work&#8221;

I&#8217;ve been using OpenOffice&#8217;s Word clone as a complete [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft Office:</p>
<ol>
<li>Costs stupid amounts of money</li>
<li>Isn&#8217;t very good</li>
<li>Is only available on windows</li>
<li>&#8230;but &#8220;usually&#8221; works</li>
</ol>
<p>OpenOffice:</p>
<ol>
<li>Is completely free</li>
<li>Is an almost exact clone of Microsoft Office circa Office 2000/XP</li>
<li>Is open-source (so that sometimes you can easily fix it yourself, quite surprisingly!)</li>
<li>&#8230;but apart from the Microsoft Word part, &#8220;often doesn&#8217;t work&#8221;</li>
</ol>
<p>I&#8217;ve been using OpenOffice&#8217;s Word clone as a complete replacement for Word for the past 3 years, and it&#8217;s been perfect. Previously, I used to use Word *and* OpenOffice, because the latter had some big bugs left in it.</p>
<p>Sadly, OpenOffice&#8217;s Excel clone is &#8230; often shockingly buggy. I won&#8217;t go into the details. But this post is about one missing/broken feature in particular: OpenOffice by default saves / exports XML which (for most people, and all simple uses) is unusable/unreadable &#8211; and is very hard to convert with XSLT. Read on for a script that will fix this for you&#8230;<br />
<span id="more-572"></span></p>
<h4>An Obsession, with Compression&#8230;</h4>
<p>In a well-intentioned-but-actually-stupid attempt to make the filesize slightly smaller, it implements a trivial form of compression that &#8211; in any imperative programming language &#8211; would be easy to decompress.</p>
<p>Sadly, the primary language for XML processing is XSLT &#8211; which is a functional language. Functional languages fundamentally (I keep using this word, but it&#8217;s true &#8211; this is a core part of the theory of the basic precepts of the language!) *cannot* handle that form of decompression. By design. By mathematical proof.</p>
<p>NB: you can workaround this, of course, but doing so within a functional language is difficult for most people.</p>
<p>There is no option in OO to &#8220;not use this optimization&#8221;. The file format for OO requires that the output XML file be compressed as a ZIP file anyway! So this compression trick is pointless!, maybe? (unless you are using non-XSLT code to process it. Which is pretty sad, since XSLT/XML are designed to be used together)</p>
<p>Several people have tried to provide exporters for OO to get around this (hmm. It&#8217;s a tad ironic that the built-in file-format is so hard to work with that people have to write custom exporters instead). Unfortunately, most of these exporters WILL FAIL on any real spreadsheet and WILL CORRUPT THE DATA, because the exporter-authors didn&#8217;t look carefully enough at the incoming data.</p>
<p>I&#8217;ve found one instance of an otherwise quite nice exporter that has the data corruption bug here &#8211; <a href="http://digitalimprint.com/misc/oooexport/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://digitalimprint.com/misc/oooexport/');">http://digitalimprint.com/misc/oooexport/</a> (NB: I&#8217;ve emailed my fixed version to the author of that page &#8211; hopefully they will replace their version with the fixed one)</p>
<p>I&#8217;ve found one instance of a &#8220;fixed&#8221; exporter that worksaround some of the data corruption, BUT &#8230; is missing the basic features everyone wants of &#8220;use the column label as the XML tag&#8221;.</p>
<p>And I&#8217;ve found loads and loads of broken attempts :(.</p>
<h4>FIXED: an XML exporter that seems to work even on large, complex spreadsheets</h4>
<p>So &#8230; after dusting off my XSLT skills, I&#8217;ve taken the former one, rewritten most of it, and here&#8217;s a fixed exporter for OpenOffice that will write your spreadsheet out as simple XML. I&#8217;ve been using this to convert XL spreadsheets to various things, including custom SQL databases (XLS can be opened directly in OpenOffice; OO exports as XML using my script; I then run a final XSLT from the command line using SAXON which converts the XML into a series of SQL INSERT/CREATE/UPDATE statements, as appropriate).</p>
<p>To install this, you need to follow the instructions at the http://digitalimprint.com/misc/oooexport/ site, but overwrite the &#8220;generic_xml.xslt&#8221; file that creates with the one provided here: (sorry, I haven&#8217;t got around to packaging it myself yet &#8211; I&#8217;m hoping this gets adopted by the digitalimprint folks!)</p>
<blockquote><p>
<i>Download this file, save it as &#8220;generic_xml.xslt&#8221;, and copy it over the top of the one that oooexport installed; NB: different Operating Systems will install that file in different locations</i><br />
<a href='http://t-machine.org/index.php/2009/06/10/export-spreadsheet-to-plain-xml-with-openoffice-3x-works/generic_xml-adam-martin-2009/' rel='attachment wp-att-573'>generic_xml.xslt</a>
</p></blockquote>
<p>I have some unit tests, but I&#8217;m trying to work out where to put them online for easy download (I&#8217;m almost tempted to start an SF.net project page just to hold them. Unless there&#8217;s somewhere better, I&#8217;ll probably do that)</p>
<p>Oh, BTW &#8211; here&#8217;s a small design flaw in OO: when you run an export in OO, any error messages are ignored and replaced with a useless error dialog that just says &#8220;writing to file failed&#8221; (it doesn&#8217;t even give the filename!). Those error messages are hiding on the serial console &#8211; if you&#8217;re a sufficiently advanced unix sysadmin to know what a serial console is, and how to read it.</p>
<p>Anyway, if you try running the exporter and it fails, now you know where to look&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2009/06/10/export-spreadsheet-to-plain-xml-with-openoffice-3x-works/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MMO Blogger Round-up</title>
		<link>http://t-machine.org/index.php/2008/11/14/mmo-blogger-round-up/</link>
		<comments>http://t-machine.org/index.php/2008/11/14/mmo-blogger-round-up/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 02:24:42 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[computer games]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dev-process]]></category>
		<category><![CDATA[games design]]></category>
		<category><![CDATA[games industry]]></category>
		<category><![CDATA[massively multiplayer]]></category>
		<category><![CDATA[network programming]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[recruiting]]></category>

		<guid isPermaLink="false">http://t-machine.org/?p=287</guid>
		<description><![CDATA[On this site I have a rather subtly-hidden Blog Roll. When I started blogging, the site had less on it, and the roll was easy to find &#8211; and short. Now it&#8217;s not. And it&#8217;s long. And each link on there has been carefully considered. There&#8217;s some gems in there (although a lot of them [...]]]></description>
			<content:encoded><![CDATA[<p>On this site I have a rather subtly-hidden Blog Roll. When I started blogging, the site had less on it, and the roll was easy to find &#8211; and short. Now it&#8217;s not. And it&#8217;s long. And each link on there has been carefully considered. There&#8217;s some gems in there (although a lot of them are updated so infrequently few people track them).</p>
<p>So it&#8217;s time to call-out some of the interesting things to be found in the blogging world of MMO people.</p>
<p>By the way &#8230; you can tell who&#8217;s working on uber-secret or personally exciting projects these days because they&#8217;ve suspiciously stopped blogging for months at a time. Lazy slackers, the lot of them. The more you do, the more you should blog! :P</p>
<p>There are some that should be on the blogroll but aren&#8217;t (yet), and some other bloggers I should mention (but I&#8217;m sticking to the blogroll only for this post &#8211; I&#8217;ll go through others next time). Feel free to add your own recommended reading in the comments.</p>
<p>Blogs to read:<br />
<a href="http://nabeel.typepad.com/brinking" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://nabeel.typepad.com/brinking');">Brinking (Nabeel Hyatt)</a><br />
* Who? serial entrepreneur, raised funding and sold companies<br />
* What? currently running a funk-tastic social / music / games company with a bunch of Harmonix guys<br />
* Why? big commentator on the games/apps/making money/predictions parts of All Things Facebook</p>
<p><a href="http://brokentoys.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://brokentoys.org');">Broken Toys (Scott Jennings / LTM)</a><br />
* Who? became infamous in the early days of MMOs as a player of Ultima Online who ranted publically, amusingly, and sometimes even insightfully<br />
* What? ex-NCsoft, now doing intriguing web games at John Galt Games<br />
* Why? In his heart Scott&#8217;s still a player, and more than anyone else I&#8217;ve seen he interprets the world of MMO design, development, and playing through the players&#8217; eyes. Interesting point: he&#8217;s mostly concerned with life-after-launch. Funny that. Players kind of find that bit the most interesting. Also keeps a close eye on community-management screw-ups, and WoW generally</p>
<p><a href="http://bruceongames.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://bruceongames.com');">Bruce Everiss</a><br />
* Who? ex-head of marketing for Codemasters<br />
* What? um, I&#8217;m not sure what he&#8217;s doing these days, apart from becoming a &#8220;professional blogger&#8221;<br />
* Why? he aims to comment on every single interesting piece of news in the mainstream games industry. That&#8217;s a lot of commentary. Always something to read! IMHO he is often completely wrong about anything online-games, and a lot of business and &#8220;future of industry&#8221; stuff &#8211; Bruce is from an older age of the industry. But &#8230; he says a lot of interesting things and sparks a lot of interesting debates in the process. Worth reading. Just remember he is extremely (deliberately, I&#8217;m sure) provocative, and don&#8217;t take it too seriously.</p>
<p><a href="http://cokeandcode.com/kevsblog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://cokeandcode.com/kevsblog');">Coke and Code (Kevin Glass)</a><br />
* Who? A programmer working in mainstream IT<br />
* What? An insanely prolific author of casual games &#8220;in his free time, as a hobby&#8221;<br />
* Why? Because he&#8217;s better at making games than many professionals I&#8217;ve met, and he is very very prolific, making new libraries, toolsets, editors, games, game engines &#8211; and commenting on it all as he goes, and throwing up new games for you to play all the time</p>
<p><a href="http://erikbethke.livejournal.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://erikbethke.livejournal.com');">Erik Bethke</a><br />
* Who? ex-Producer for Interplay<br />
* What? CEO of GoPets, an online casual virtual world that&#8217;s especially big in Asia (and based in South Korea)<br />
* Why? A hardcore WoW player who analyses the game-design as he goes, and relates very honestly a stream of both emotional experiences and seminal events in the game that should give you lots of things to be thinking about, especially if you&#8217;re a designer, business person, or product manager.</p>
<p><a href="http://danhon.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://danhon.com');">Extenuating Circumstances (Dan Hon)</a><br />
* Who? ex-MindCandy, current CEO of SixToStart<br />
* What? one of the first Bloggers (on the whole of the internet!) in the UK, and an awe-inspiring assimilator of &#8220;everything happening on the internet, with technology, with media, with entertainment and the future of the world&#8221; for all of the ten years I&#8217;ve known him.<br />
* Why? He&#8217;s still an excellent tracker of all those things, and finds memes very quickly. Nowadays he just auto-posts links (lots of them, every day) with a few words of commentary scattered here and there (del.icio.us descriptions) &#8211; making his blog a ready-made news filter for you :)</p>
<p><a href="http://fishpool.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://fishpool.org');">Fishpool (Osma Ahvenlampi)</a><br />
* Who? CTO of Sulake (makers of Habbo Hotel)<br />
* What? a very technical commentator, often in great detail, on the issues of running a 100-million user virtual world, with observations about Habbo&#8217;s community, business, and culture thrown in<br />
* Why? He posts very rarely, but when he does, they&#8217;re usually full of yummy detail</p>
<p><a href="http://andrewchenblog.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://andrewchenblog.com/');">Futuristic Play (Andrew Chen)</a><br />
* Who? ex-VC (Mohr-Davidow Ventures)<br />
* What? entrepreneur with a web-background who&#8217;s come into the games industry and bringing lots of useful stuff with him<br />
* Why? blogs a LOT on advertising (and how to make money out of it in games and web and casual), and on metrics, and how you can use them to run you games or web business better. Also has a long fascination with what are the best parts of the games industry, and the best of the web industry, and how we can each put those best bits together to be even better</p>
<p><a href="http://hartsman.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://hartsman.com');">Off the Record &#8211; Scott Hartsman</a><br />
* Who? ex-Everquest, ex-Simutronics<br />
* What? Senior Producer for MMOs &#8211; but previously an MMO lead developer, and once (apparently) a Game Designer.<br />
* Why? he&#8217;s funny, he knows his stuff, and he&#8217;s worked on some of the most important MMO projects outside Asia, so he&#8217;s got an interesting perspective going there.</p>
<p><a href="http://orbusgameworks.com/blog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://orbusgameworks.com/blog');">Orbus Gameworks (Darius Kazemi)</a><br />
* Who? ex-Turbine, now CEO of Orbus (a games-metrics middleware company)<br />
* What? Likes the colour orange *a lot*, infamous for networking his ass off at games conferences (*everyone* knows Darius), very friendly, generous &#8211; and mildly obssessed with the use of metrics and stats to improve the creativity and success of game design (in a good way)<br />
* Why? If you liked the Halo heatmaps when they came out, you&#8217;ll love some of the stuff they post on the Orbus company blog. A year ago they were posting heatmaps-on-steroids. If you thought &#8220;metrics&#8221; equalled &#8220;spreadsheets of data&#8221; then prepare to have your view changed pretty thoroughly.</p>
<p><a href="http://blog.prospectblogs.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.prospectblogs.com');">Prospect Magazine/First Drafts (Tom Chatfield)</a><br />
* Who? section-editor of the highly respected socio-political print magaine Prospect<br />
* What? a highly-accomplished English Literature post-grad (bear with me here) &#8230; who also happens to have been a lifelong hardcore game player, I think the only person I know who got a hardcore character to level 99 on Diablo2, and now plays WoW a lot.<br />
* Why? although Prospect only very rarely (like, only a few times ever) covers games, it&#8217;s very interesting to see what the rest of the world &#8211; especially the highly educated and highly intelligent but non-technical, older generations &#8211; thinks of us. And a bit of culture in your blog reading is probably good for you, too.</p>
<p><a href="http://psychochild.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://psychochild.org');">Psychochild (Brian Green)</a><br />
* Who? ex-3DO/M-59, now the owner and designer of the revamped, relaunched, more modern Meridian-59<br />
* What? an MMO game designer who disingenuously describes himself as an indie MMO designer but like most of the others has probably spent too long doing this and knows too much (compared to many of the modern &#8220;mainstream&#8221; MMO designers) for that to be true any more<br />
* Why? lots and lots of great design ideas and commentary here for anyone wanting to do MMO design</p>
<p><a href="http://scottbilas.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://scottbilas.com');">Scott Bilas</a><br />
* Who? programmer on Duneon Siege<br />
* What? &#8230;in particular, responsible for the Entity System (one of my main areas of interest)<br />
* Why? Scott&#8217;s phased in and out of blogging, but when he does blog he tends to do good meaty programming posts that contain lots of source code and some useful lesson or algorithm.</p>
<p><a href="http://sulka.net" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://sulka.net');">Sulka’s Game (Sulka Haro)</a><br />
* Who? lead designer for Sulake (Habbo Hotel)<br />
* What? more of a Creative Director than game designer, more of a web background than games, but above all a community/product/creative person who knows his stuff. Also a big player of MMORPGs<br />
* Why? are you cloning Club Penguin or Habbo Hotel and want some pointers about revenue models, community management, and how to be successful with virtual-item sales? You might want to read his posts ;)</p>
<p><a href="http://jimpurbrick.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://jimpurbrick.com');">The Creation Engine No.2 (Jim Purbrick)</a><br />
* Who? ex-Codemasters, ex-Climax (both times working on MMO projects)<br />
* What? originally a network / MMO academic researcher, then a network coder, and now the person who runs Linden Lab (Second Life) in the UK. Very big proponent of all things open-source, always doing interesting and innovative things with technology<br />
* Why? Keep an eye on the more innovative technology things that are done with Second Life (stuff you don&#8217;t tend to read about in the news but &#8211; to a tech or games person &#8211; is a heck of a lot more interesting by a long long way), and get some insight into the life of serious open-source programmers who succeed in living and breathing this stuff inside commercial environments</p>
<p><a href="http://forge.ironrealms.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://forge.ironrealms.com');">The Forge (Matt Mihaly)</a><br />
* Who? developer of one of the earliest commercially successful text MUDs, now CEO of Sparkplay Media<br />
* What? spent many years running Achaea, a text-only MUD that made a healthy profit from pioneering the use of itemsales (virtual goods) &#8211; and the things weren&#8217;t even graphical &#8211; and has now finally (finally!) moved into graphical games with the MMO he&#8217;s developing<br />
* Why? one of the few MMO professionals who talks a lot about his experiences playing on consoles (especially Xbox), which makes for a refreshing alternate view &#8211; especially from the perspective of an MMO person talking about social and community issues in those games. Just like Brian Green, claims to be an indie MMO designer, but probably knows far far too much for that to be even vaguely justifiable</p>
<p><a href="http://vexappeal.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://vexappeal.com');">Vex Appeal (Guy Parsons)</a><br />
* Who? ex-MindCandy<br />
* What? Guy is an extremely creative &#8230; guy &#8230; who had a small job title but a big part in inventing and rolling out a lot of the viral marketing stuff we did for Perplex City (online game / ARG from a couple of years ago)<br />
* Why? Awesome place to go for ideas and info on the cutting edge of doing games stuff with social networks. Usually. Also &#8230; just makes for a fun blog to read</p>
<p><a href="http://lietcam.com/blog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://lietcam.com/blog');">We Can Fix That with Data (Sara Jensen Schubert)</a><br />
* Who? ex-Spacetime, currently SOE<br />
* What? MMO designer, but like Lum / Scott Jennings, comes from a long background as player and commentator, and shorter background as actually in the industry. Like Darius Kazemi, spent a lot of time in doing metrics / data-mining for MMOs<br />
* Why? Take Darius&#8217;s insight into metrics for MMOs, and Scott&#8217;s knowledge of what players like, don&#8217;t like, and ARE like, and you get a whole bunch of interesting posts wandering around the world of metrics-supported-game-design-and-community-management. Good stuff.</p>
<p><a href="http://zenofdesign.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://zenofdesign.com');">Zen of Design (Damion Schubert)</a><br />
* Who? ex-EA (Ultima Online), currently at Bioware (MMO)<br />
* What? MMO designer who&#8217;s been around for a long time (c.f. UO)<br />
* Why? Damion writes long detailed posts about MMO design, what works, what doesn&#8217;t, practicalities of geting MMO development teams to work together, how the playerbase will react to things, etc. He also rather likes raiding in MMORPGs &#8211; which is fascinating to see (given his heavy background as a pro MMO *designer*)</p>
<p><a href="http://ncanson.livejournal.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://ncanson.livejournal.com');">[NC] Anson (Matthew Wiegel)</a><br />
* Who? ex-NCsoft<br />
* What? Dungeon Runners team<br />
* Why? was doing lots of interesting and exciting things with data-mining/metrics in the free-to-play low-budget NCsoft casual MMO. Watch this space&#8230;</p>
<p>People with nothing to do with games, but you might want to watch just because they&#8217;re interesting:<br />
<a href="http://renanse.com/blog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://renanse.com/blog');">Bard’s World (Joshua Slack)</a><br />
* ex-NCsoft<br />
* Josh is one of the key people behind Java&#8217;s free, hardware-accelearted, game engine (JME)<br />
<a href="http://janusanderson.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://janusanderson.com');">Janus Anderson</a><br />
* Who? ex-NCsoft<br />
* What? um, he&#8217;s been taking a lot of photos recently<br />
* Why? watch this space<br />
<a href="http://markagrant.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://markagrant.com');">Mark Grant</a><br />
* Who? non-Games industry<br />
* What? an entrepreneur, web-developer, and Cambridge Engineer<br />
* Why? very smart guy, and interesting posts on web development (no games tie-in)</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2008/11/14/mmo-blogger-round-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Analysis Tools: what&#8217;s free?</title>
		<link>http://t-machine.org/index.php/2008/09/28/web-analysis-tools-whats-free/</link>
		<comments>http://t-machine.org/index.php/2008/09/28/web-analysis-tools-whats-free/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 14:21:08 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[databases]]></category>
		<category><![CDATA[dev-process]]></category>
		<category><![CDATA[games design]]></category>
		<category><![CDATA[massively multiplayer]]></category>
		<category><![CDATA[server admin]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://t-machine.org/?p=252</guid>
		<description><![CDATA[This is a quick review of free tools for web analytics / stats-analysis / weblog analysis. I&#8217;ll follow up with some more detailed posts about non-web tracking. Follow-up posts will extend this into game development, but this post is purely about web stuff.

Where to start with analysing data?
Analysis of data about what your consumers are [...]]]></description>
			<content:encoded><![CDATA[<p>This is a quick review of free tools for web analytics / stats-analysis / weblog analysis. I&#8217;ll follow up with some more detailed posts about non-web tracking. Follow-up posts will extend this into game development, but this post is purely about web stuff.<br />
<span id="more-252"></span></p>
<h4>Where to start with analysing data?</h4>
<p>Analysis of data about what your consumers are doing is invaluable to any company looking to optimize their sales and profitability, especially so for online games. But today (2008) there is little or nothing in the way of credible products for doing analysis suitable for games. Many companies have built proprietary systems, with all the costs and horros that come with that. But that&#8217;s way out of the reach of startups and games studios.</p>
<p>So, where can we start? Well, website analysis is a mass-market use for these tools which has a lot in common, so there should be a good range of free software, and open-source stuff too.</p>
<h4>Free webstats: Historical Perspective</h4>
<p>(not *just* boring history :) &#8211; this briefly explains something fundamental about the different types and complexities of stats analysis tools that will be useful background knowledge for future posts)</p>
<p>A little over ten years ago, when I was still a student, and didn&#8217;t want to spend money on anything if I didn&#8217;t have to, I wrote my own web log analyser, that would run over my Apache and/or IIS logfiles and tell me lots of fascinating things about who was visiting my web site.</p>
<p>There were commercial alternatives at the time, varying from cheap ($50-$150) that lacked basic features I quickly wrote for myself, to expensive ($500-$1000) that had everything I could ever want and a lot more. I soon gave up maintaining my proprietary software (lack of time, real job &#8211; and the assumption that good analyser software would come down in price). I started using the open-source analysers, because they were &#8220;almost good enough&#8221; for very basic usage, and &#8211; in theory &#8211; they would improve over time.</p>
<p>The cheap stuff compared to free was mostly better just because it had pretty graphs and convenient user interfaces for &#8220;1st order&#8221; data. i.e. anything that could be determined merely by looking directly at raw data, e.g.</p>
<ul>
<li>total number of visitors
<li>which countries visitors came from
<li>sites that linked to yours
</ul>
<p>The expensive stuff compared to the cheap stuff was mostly better for having &#8220;2nd order&#8221; data, i.e. things that could only be calculated by looking at raw data BUT ALSO by using some pre-calculated 1st order data, e.g.</p>
<ul>
<li>percentage of visitors from each site (requires you to count number of visitors from each site AND ALSO to calculate the total number of visitors who came from any site)
</ul>
<p>&#8230;and also &#8220;higher order&#8221; data, i.e. things that could only be calculated by using 1st order and/or 2nd order data and combining it in new ways, e.g.</p>
<ul>
<li>number of visitors from each site who did NOT also come in from another site (requires you to first generate a list of visitors from each site, then start again from start of the logs checking for each one whether they ALSO came in from a site that was NOT the original one)
</ul>
<p>Most famously, the most desired piece of higher-order data was &#8220;find out where each user is going, the sequence of pages they click through whilst on the site, from the first page they visit to the last page&#8221;. None of the free stuff did that, and most of the cheap stuff didn&#8217;t do it, or did it very badly.</p>
<h4>So &#8230; what is free today?</h4>
<p>10 years later AWStats is not noticeably better now than it was then, despite being actively maintained. It&#8217;s picked up some &#8211; IMHO &#8211; relatively frivolous features and still hasn&#8217;t gained the most basic of analysis features from the commercial products of 10 years ago: it still can&#8217;t/won&#8217;t track for you the progress of a user through the site.</p>
<p><a href="http://www.analog.cx/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.analog.cx/');">Analog</a> and <a href="http://www.mrunix.net/webalizer/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mrunix.net/webalizer/');">Webalizer</a>, the two other free analysers I tried around the time I stopped doing my own, both of which were vastly inferior even to AWStats, don&#8217;t seem to have gone anywhere in that time either (although someone has <a href="http://www.stonesteps.ca/projects/webalizer/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.stonesteps.ca/projects/webalizer/');">forked Webalizer to make a slightly improved version</a>)</p>
<p>Has *no-one* been playing with the source of these tools and adding basic features? I know a few sites- like <a href="http://www.internetofficer.com/awstats/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.internetofficer.com/awstats/');">the excellent InternetOfficer page on AWStats</a> &#8211; have been adding and sharing basic hacks to vastly improve it, but these really just scratch the surface of what is needed. (if you&#8217;re using AWStats and you haven&#8217;t added the IO stuff, I highly recommend looking at them and cherrypicking some you like &#8211; although it&#8217;s a real PITA to add more than one hack because of the stupid config system used by AWStats &#8211; you have to remember to manually increment a unique ID for each module you add. ARGH!)</p>
<p>For the record: I have been using AWStats continuously for the last 6 or 7 years, and have hacked a lot of stuff to work with it. *I* don&#8217;t have problems with it, but it&#8217;s disappointingly lacking in areas where I need more.</p>
<p>So, I thought it was time to have a look around at what else is out there.</p>
<h4>Google Analytics</h4>
<p>When Google bought Urchin, I thought maybe this would mean we wouldn&#8217;t need to rely on AWstats any more. The truth turned out to be a bit different &#8211; Google Analytics is, in many ways, as &#8220;almost but not quite enough&#8221; as AWStats. In particular, getting meaningful Referrer analsysis out of GA is a nightmare (I have no idea why <a href="http://www.reubenyau.com/google-analytics-hack-obtaining-full-referring-url/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.reubenyau.com/google-analytics-hack-obtaining-full-referring-url/');">we&#8217;re still having to hack in custom regexps just to get one of the most fundamental pieces of info out of GA</a> &#8211; and note that the manual regexp additions still don&#8217;t work for a lot of sites: I&#8217;ve sometimes set it up on a GA site and nothing happens, for no apparent reason).</p>
<p>GA is awesome for some things &#8211; like marketing-centric tracking &#8211; and is adaptable (as above) &#8211; but it&#8217;s still missing so much that it&#8217;s no surprise to me that other alternatives continue to be heavily used. Apart from the many things you need to make custom strings to track (like the referrers above), it:</p>
<ul>
<li>is several days behind &#8220;live&#8221; data (at least in Europe, it&#8217;s nearly always more than 24 hours behind)
<li>over-simplifies reports (very litle data is provided for most reports)
<li>provides no easy way to combine output of one report with output of another &#8211; no mashups allowed! &#8211; c.f. Yahoo Pipes for an example of what GA could trivially provide to the user to become totally awesome
</ul>
<p>Now, if there&#8217;s a chance GA might be &#8220;good enough&#8221; for you, then I suggest you take that route and run with it &#8211; GA &#8220;can do&#8221; a lot (if you muck around with it a lot), it&#8217;s owned by Google, and it&#8217;s very well-known. You can google for a lot of tips on using it, and I suggest reading things like <a href="http://andrewchenblog.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://andrewchenblog.com/');">Andrew Chen&#8217;s blog</a> which has a lot of tips on what you should be looking for when doing your web metrics. I&#8217;ll be coming back to the topic of &#8220;what you should be looking for&#8221; in another post &#8211; but first I want to get the basic state of tools out of the way.</p>
<h4>Free Alternatives &#8211; a future?</h4>
<p>What&#8217;s on the scene today? Here&#8217;s 6 other free webstats analysers I found (in addition to the market-leader (AWStats) and the aforementioned Analog and Webaliser (which you really shouldn&#8217;t bother looking at).</p>
<h4>Microsoft&#8217;s <a href="http://advertising.microsoft.com/search-advertising/adcenter-analytics" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://advertising.microsoft.com/search-advertising/adcenter-analytics');">adCenter Analytics</a></h4>
<p>This seems to be being pitched as a direct competitor to GA, right down to similar naming and presentation (as well as being free to use, and requiring the creation of a Microsoft account to be eligible for using it).</p>
<p>I tried signing up, but then I got this very disappointing response:</p>
<blockquote><p>
Thank you for registering for the Microsoft adCenter AnalyticsBeta project.<br />
You will receive your adCenter Analytics invitation as capacity allows.
</p></blockquote>
<p>This is pretty fricking stupid: if you&#8217;re competing against Google, you shouldn&#8217;t go around offering users access to your program and then getting all high and mighty about how you might deign to allow them to use it at some non-specified future time of your choosing.</p>
<p>So, for now: Microsoft&#8217;s product is effectively vaporware. Sigh.</p>
<h4>labsmedia&#8217;s <a href="http://www.labsmedia.com/clickheat/index.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.labsmedia.com/clickheat/index.html');">ClickHeat</a></h4>
<p>&#8220;ClickHeat is a visual heatmap of clicks on a HTML page, showing hot and cold click zones.&#8221; &#8211; i.e. it tracks exactly where the user clicked the mouse on your page, and then shows you an aggregate of &#8220;all clicks by all people&#8221;, with places that were clicked more often showing up in a lighter colour than places clicked less often. Heatmaps are a great visualization tool for aggregate data like this.</p>
<p><img src="http://www.labsmedia.com/images/clickheat-screenshot.png"></p>
<p>They have <a href="http://www.labsmedia.com/clickheat/index.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.labsmedia.com/clickheat/index.php');">a nice live demo that you can try out</a>, and see what happens on their site &#8211; use the username &#8220;demo&#8221; and password &#8220;demo&#8221; &#8211; although it defaults to showing clicks from &#8220;today&#8221; which for their site is too few to be interesting, you can just click on the &#8220;month&#8221; button in the navbar at the top to see an interesting map of their site.</p>
<p>In particular, the way you can change the transparency level in real time is awesome &#8211; if a map gets too bright in one area, and you can&#8217;t see what people were clicking on, change the transparency to get a better look.</p>
<h4><a href="http://wettone.com/code/slimstat" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://wettone.com/code/slimstat');">Slimstats</a></h4>
<p>Works fine, but &#8230; this is nothing more or less than a simplified view of the AWStats core data &#8211; it&#8217;s got less data than AWStats but makes it easier to read all in one place.</p>
<p>Oh, well.</p>
<h4><a href="http://bbclone.de/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://bbclone.de/');">BBClone</a></h4>
<p>This is a first-order analyser only. That makes it a complete waste of time, IMHO. Any first order stats I want to track I can do *from the command line* in linux by typing something about this long:</p>
<blockquote><p><code><br />
cat "access*.log" | cut -d=" " -f7,9 | uniq -c<br />
</code></p></blockquote>
<p>&#8230;which looks obscure and obtuse, but you can google to find premade ones that do what you want, and then you only need to change the numbers 7 and 9 in there to change what data summaries are provided. And when you use linux regularly, you can remember the whole command line off the top of your head easily, bung it in a script, and you&#8217;re done.</p>
<h4>Roxr Software&#8217;s <a href="http://getclicky.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://getclicky.com/');">Clicky Analytics</a></h4>
<p><span style="color: #ff0000">EDIT: DECEIVED! This one isn&#8217;t free at all; it&#8217;s like a bunch of the commercial ones today that &#8220;pretend&#8221; to be free, but have absurdly low limits on the free usage; if my niche blog is enough to go over their daily limits (hint: yes, it does), then the service is clearly a waste of time</span></p>
<p>This one looks really good. The only problem I can see so far is that it won&#8217;t work for sites with &#8220;more than 100,000 daily page views&#8221; &#8211; that&#8217;s not going to be a problem for anyone here; when your site gets that popular, you should have the spare manpower to build/spare money to buy whatever you need.</p>
<p>I&#8217;ve only just started using this, so I can&#8217;t comment on it yet. But I do want to point out they are nice enough to <a href="http://getclicky.com/widgets/wordpress.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://getclicky.com/widgets/wordpress.zip');">provide a Wordpress plugin</a> for you that automatically adds the tracking stuff to each page as required, so that makes life easier for anyone wanting to track their WP blogs.</p>
<h4><a href="http://www.reinvigorate.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.reinvigorate.net/');">Reinvigorate</a></h4>
<p>This used to be a web stats analyser, I know a few people who used to swear by it, but apparently not any more &#8211; they&#8217;ve replaced it with a desktop application that is &#8220;powered by REinvigorate&#8221; but appears to be a lot less what we want here than the old Reinvigorate stats analysis.</p>
<p>There appears to be no way to get access to the *actual* Reinvigorate, the product we wanted to use; all links just go back to the download site for the desktop application instead. Oh, well.</p>
<h4><a href="http://www.woopra.com/features/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.woopra.com/features/');">Woopra</a></h4>
<p>Looks promising &#8211; but (like the Microsoft product) it&#8217;s currently an invite-only beta, with a low limit on the number of daily pageviews, so although it *could become* totally awesome, for now it&#8217;s a case of &#8220;may work for you &#8211; IF you can get into the beta &#8211; and IF the final product doesn&#8217;t turn out too expensive&#8221;. Some big unknowns there. But worth a look, IMHO.</p>
<h4>If you need something doing properly, you gotta do it yourself?</h4>
<p>So, although this started off as a review of free web tools, now that I&#8217;ve got this far I&#8217;m considering digging out the source code for my old proprietary web server log analyser and starting to use it again. Maybe even share it with other people if anyone&#8217;s interested.</p>
<p>It was very fast (at least for some uses it was much faster than AWStats), although I think the latest version I was doing some slightly nasty and interesting-but-silly things with using the local file system as a dynamic database &#8211; not flat files, but on-disk hashes, to be able to process arbitrarily complex relationships (&#8221;show all users who did X after doing Y more than twice in the previous week, but only if they used Internet Explorer on their first visit&#8221;) large files in very low memory (hey, back then my server had about 64Mb RAM; memory was at a premium!).</p>
<p>This time, I think it would be interesting to do the whole thing in SQL instead, and run against an in-memory SQL DB like <a href="http://hsqldb.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://hsqldb.org/');">HSQLDB</a>.</p>
<p>(really, though, I&#8217;m hoping that this absurd suggestion &#8211; that I might write a log analyser myself :) &#8211; will poke at least one person into pointing out how ignorant and unobservant I am for not noticing some open-source tool out there already which rocks and does the few things that GA doesn&#8217;t :))</p>
<h4>Followups&#8230;</h4>
<p>For another time, I want to cover some of this:</p>
<p>How is this useful for game developers (apart from the obvious)?<br />
What other options are there for people doing online games?<br />
If you&#8217;re going to roll your own metrics for games development, how should you do it?</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2008/09/28/web-analysis-tools-whats-free/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entity Systems are the Future of MMOs Part 4</title>
		<link>http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-future-of-mmos-part-4/</link>
		<comments>http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-future-of-mmos-part-4/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 23:00:20 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[computer games]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[games design]]></category>
		<category><![CDATA[massively multiplayer]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[system architecture]]></category>

		<guid isPermaLink="false">http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-future-of-mmos-part-5/</guid>
		<description><![CDATA[Massively Multiplayer Entity Systems: Introduction
So, what&#8217;s the connection between ES and MMO, that I&#8217;ve so tantalisingly been dangling in the title of the last three posts? (start here if you haven&#8217;t read them yet).
The short answer is: it&#8217;s all about data. And data is a lot harder than most people think, whenever you have to [...]]]></description>
			<content:encoded><![CDATA[<h4>Massively Multiplayer Entity Systems: Introduction</h4>
<p>So, what&#8217;s the connection between ES and MMO, that I&#8217;ve so tantalisingly been dangling in the title of the last three posts? (<a href="http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/" >start here if you haven&#8217;t read them yet</a>).</p>
<p>The short answer is: it&#8217;s all about data. And data is a lot harder than most people think, whenever you have to deal with an entire system (like an MMO) instead of just one consumer of a system (like the game-client, which is the only part of an MMO that traditional games have).</p>
<p>Obviously, we need to look at it in a lot more detail than that. First, some background&#8230;<br />
<span id="more-134"></span></p>
<h4>Massively Multiplayer Game Development 101</h4>
<p>There&#8217;s a few key things you need to be aware of in MMO development. Many professional game developers know some or all of these already, but seeing as I&#8217;ve even met MMO developers who didn&#8217;t know them all, and much of what I&#8217;m going to say later on won&#8217;t make sense without it, I&#8217;m going to do a quick recap. Bear with me; I&#8217;ll have to do some gross generalization to keep this short (so it won&#8217;t be 100% true or accurate).</p>
<h4>1. The vast majority of the cost of MMO development is content</h4>
<p>Content is:<br />
 &#8211; quests (missions, storylines, scripted events)<br />
 &#8211; 3D areas (meshes, textures and logic for: zones, dungeons, towns, landscapes)<br />
 &#8211; loot (item graphics, drop rates, item stats, item abilities)</p>
<p>Content is NOT:<br />
 &#8211; Fancy 3D graphics<br />
 &#8211; Physics engines<br />
 &#8211; AI<br />
 &#8211; Core game rules</p>
<p>&#8230;which tend to make up the bulk of non-MMO games.</p>
<p>As Raph Koster (amongst others, but IIRC Raph was one of the first to come up with a clear concise description) pointed out close to 10 years ago, the rate at which players consume content vastly excedes the rate at which developers generate it &#8211; you have perhaps 50 people working purely on content generation on a modern MMO, and you have perhaps 500,000 people consuming it. The problem is, those 500,000 use Thottbot, so they *share* their discoveries, and consume at a rate proportional to the square of their number, whereas it&#8217;s generally produced at a rate more directly proportional to the number of developers.</p>
<p>There are many ways to work around this issue, but most of them end up producing or managing vast amounts of content (they just get more cunning in exactly how that content is generated).</p>
<h4>2. The vast majority of the development of an MMO takes place AFTER launch</h4>
<p>The ten-year-old MMO&#8217;s have been releasing expansions and content updates every 6 to 18 months; modern MMO&#8217;s release new content every 3 to 12 months. &#8220;New content&#8221; in this context generally means entirely new 3D areas with entirely new quests and entirely new items, not to mention entirely new special abilities and new plotlines. i.e. complete &#8220;miniature MMOs&#8221;.<br />
The only bits you don&#8217;t need to keep rewriting are the technology, although nearly all MMOs have done minor updates throughout their lifetime, usually when a new expansion pack is released as a retail boxed product (if you buy and install the expansion, not only do you get the bonus content, but all the &#8220;old&#8221; content becomes higher resolution / more pretty / added sparkly bits). Although &#8230; I long wished there was more updating of tech, and three major MMOs are currently doing huge updates: Ultima Online (1997) <a href="http://www.uoherald.com/kingdomreborn/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.uoherald.com/kingdomreborn/');">recently massively renovated their 10-year old graphics as Kingdom Reborn</a>, Eve Online (2001) just completed their &#8220;shininess and detailed spaceships with added humanoids&#8221; update known as <a href="http://www.eve-online.com/trinity/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.eve-online.com/trinity/');">Trinity</a>, and Anarchy Online (2001) recently previewed <a href="http://www.mmorpg.com/gamelist.cfm?GAMEID=10&#038;SETVIEW=features&#038;LOADFEATURE=1718&#038;bhcp=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mmorpg.com/gamelist.cfm?GAMEID=10&#038;SETVIEW=features&#038;LOADFEATURE=1718&#038;bhcp=1');">massive sweeping changes to their very poor detail and draw distance client</a> (they say &#8220;the current engine was designed before there really were GPUs to utilize&#8221; but that is blatantly false as the GeForce had been on sale for almost 2 years when they launched, and the TNT,Voodoo, et al for years before that. Yes, I was bitter that when it launched the most recent hardware it supported was 5 years old :)). All represent major changes to the look and feel of the games &#8211; it&#8217;s hard to overestimate the visual impact of these. Runescape did their mega update (&#8221;Runescape 2&#8243;) a couple of years ago.</p>
<p>However &#8230; all are bringing games that were NOT cutting edge at launch up to a standard that is still well short of what is cutting edge now. This is important to understand: graphical quality is (according to what the successful MMO&#8217;s deploy) definitely not the main selling point for these games, unlike almost all other successful games you can possibly buy.</p>
<p>So &#8230; what is that &#8220;development&#8221; that takes place after launch? It&#8217;s content, not engine. And even when it&#8217;s engine (better graphics, better physics) it&#8217;s always a minimal improvement by the standards of standalone PC and console titles of the time.</p>
<p>For reference, many MMO&#8217;s after launch end up with LARGER development teams than they had in the 3-5 years of development leading up to the launch. All that extra content requires a lot of people (not to mention keeping all the old content working, updating it where it conflicts with new content, etc).</p>
<p>On top of all that, though, there is the issue of customer support. When you launch a traditional game, that&#8217;s it. Done. Over the last 15 years there&#8217;s been a trend towards launching occasional &#8220;patches&#8221; and even minor content updates &#8211; but mostly bugfixes &#8211; which, incidentally, I suspect has been largely driven by publishers learning from the MMOs: releasing a content patch for an old game is a good way to get extra marketing / publicity and increase some sales. Bethesda&#8217;s TES4/Oblivion even went as far as to <a href="http://en.wikipedia.org/wiki/The_Elder_Scrolls_IV:_Knights_of_the_Nine" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://en.wikipedia.org/wiki/The_Elder_Scrolls_IV:_Knights_of_the_Nine');">charge for the patches</a>.</p>
<p>MMO&#8217;s require a lot more work than that: since MMO&#8217;s are all monetized off continuous play (i.e. the more each player plays, the more money the publisher makes), either through monthly subscriptions or through in-game commerce, it is imperative to keep all the players playing as long as possible. If a player plays your MMO for 12 months instead of 6, you&#8217;ll make twice as much profit; if they play your console title for 12 months instead of 6, you&#8217;ll make no more money and will probably cannibalize your sales of the sequel.</p>
<p>So. Total lifetime development cost is a lot more important, financially, to an MMO than the pre-launch development cost.</p>
<h4>3. The way the core logic works now is not how it will work forever</h4>
<p>Sooner or later, you <a href="http://www.urbandictionary.com/define.php?term=nerf" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.urbandictionary.com/define.php?term=nerf');">nerf</a>.</p>
<p>Usually because you(r players) discover a disproportionately powerful game tactic in PvP that you didn&#8217;t think of which is unbalancing and ruining the game, and so you &#8220;have&#8221; to fix it.</p>
<p>Sooner or later, you choose to break every absolute rule of your game logic, because a new expansion wants to slightly redefine and &#8220;freshen&#8221; the core game.</p>
<p>And that means you have to be able to break every rule you ever hardcoded into the game-logic. Worse, it means you have to be able to handle the fallout (all the bugs that the change introduces, plus all the invisible bugs that were originally there but had no noticeable effect and now suddenly have visible effect, the new security holes, etc).</p>
<p>Since the ongoing development of the game (post launch) is greater than the initial development in scope and cost, over the lifetime of the game it is more important to make it easy to change the core logic &#8211; and to react to side effects of that change &#8211; than to be able to make the core logic easily in the first place.</p>
<h4>4. Even a moderately successful MMO generates gigabytes of data every 24 hours</h4>
<p>The progress of every player of the MMO has to be uniquely independently tracked, so that the game can remember for each player which quests they&#8217;ve completed, which equipment they have, etc. With 100,000 players, that data racks up quickly. A lot of it can be thrown away every day (for instance, you don&#8217;t generally need the history of how many hitpoints you had at the end of every day), but a lot of it has to be kept forever (whether you completed a given quest, and for some quests how exactly you completed it).</p>
<p>However, the trend at the moment is towards keeping ALL this data, in the form of historical records of your personal game experience &#8211; e.g. the automatic &#8220;blog&#8221; that is created whilst you play Vanguard, which e.g. updates every time you level up, or kill a monster, or die, etc.</p>
<p>This latter kind of data alone is generated at the rate of around 30Gb every 24 hours.</p>
<p>And any of that data that gets used in-game (e.g. even if just referenced in a conversation with an NPC) has to be programmatically accessible.</p>
<p>Ultimately, MMOs have to store, retrieve, and update vast databases. There is a huge decades-old industry that specializes in providing software to manage databases of this size and larger, but <a href="http://t-machine.org/index.php/2008/02/21/gdc08-sql-considered-harmful/" >MMO developers don&#8217;t like SQL and Relational programming</a>. This is a real problem &#8211; relational databases can handle the load, but relational programming is fundamentally incompatible with Object-Oriented programming. The net effect is that programmers who have to write their data to disk find it boring, difficult, and irritating to do &#8211; and that leads to mistakes and greatly increased bugs, as well as reduced functionality (because no-one wants to write or add to the code to add the new features more than they absolutely have to).</p>
<h4>MMO Development Priorities</h4>
<p>The net effect of these aspects of MMO development is that the long term profitability of an MMO can be greatly affected by a bunch of simple issues:</p>
<ul>
<li>How much effort is required to change the data used to describe an in-game item</li>
<li>How much effort is required to add (or remove) new (old) types of in-game item</li>
<li>How re-usable is the content</li>
<li>How easy it is in practice (i.e. how much coding is needed) to re-use re-usable content</li>
<li>How much specialist knowledge of the game code, overall game design, and details of the game systems is needed to modify the content and logic (can new team members be effective as the team who originally wrote the game pre-launch?)</li>
<li>How exportable is the data generated by playing the game (progress, achievements, player-history, etc)</li>
<li>How analysable is the game-data generated by playing (to make decisions about what to change, and check that game improvements have improed things)</li>
<li>How modifiable the core-content is</li>
<li>How easy it is to change individual rules and check the side-effects of the changes</li>
<li>How many of all the above changes can be done WITHOUT requiring a programmer (can designers change code themselves? can artists?)</li>
<li>How much can third-party specialist systems be utilised for server-side service provision</li>
</ul>
<p>Leading to a few rules of thumb that are often adopted by commercial MMOs:</p>
<ol>
<li>Use commercial databases for all persistent data-storage</li>
<li>Use Relational Databases and allow arbitrary general data requests</li>
<li>Implement as much as possible of the game-logic as raw data rather than as compiled data (and preferably as data rather than source code)</li>
<li>Use standard but simple to learn scripting languages where data isn&#8217;t expressive enough</li>
<li>Do lots and lots of testing during development</li>
<li>Do even more testing post-launch EVERY SINGLE TIME you consider changing ANYTHING on the live servers</li>
</ol>
<p>Some of those aren&#8217;t very effective (too vague), others are horrifically expensive (it takes a lot of people to &#8220;test EVERYTHING&#8221; every time you make a change to a live game). None of them are great for performance in and of themselves (although they can be made highly performant, that requires extra work), and none of them are &#8220;programmer friendly&#8221; &#8211; in fact, they&#8217;re all deliberately programmer UNfriendly, being in there for the benefit of non-programmers.</p>
<p>NB: this is in no way a comprehensive or exhaustive list; I&#8217;m trying to give merely a flavour of the thing here for people who aren&#8217;t familiar with typical MMO dev processes. I don&#8217;t know any real MMO that faces only those challenges and uses only those rules of thumb, but they are indicative of what is used, and very very roughly explain why those things are used.</p>
<p>And so on to Entity Systems, and how they can affect the typical MMO development process by helping with problems or making the current solutions more programmer-friendly&#8230; (which is going to be Part 5. This is getting long enough already).</p>
<p>NEXT: <a href="http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/>Part 5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-future-of-mmos-part-4/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Improving your dev process: Automating collection of game-crash info</title>
		<link>http://t-machine.org/index.php/2008/03/02/improving-your-dev-process-automating-collection-of-game-crash-info/</link>
		<comments>http://t-machine.org/index.php/2008/03/02/improving-your-dev-process-automating-collection-of-game-crash-info/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 23:31:33 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[databases]]></category>
		<category><![CDATA[dev-process]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://t-machine.org/index.php/2008/03/02/improving-your-dev-process-automating-collection-of-game-crash-info/</guid>
		<description><![CDATA[(As spotted in last month&#8217;s Game Developer magazine&#8217;s Inner Product column. Good enough that I wanted to draw some attention to it, and hopefully add a bunch more of these good ideas as I come across them / remember them)
Most games, when they crash hard enough, memory dump. The customer (or internal tester during development) [...]]]></description>
			<content:encoded><![CDATA[<p>(As spotted in last month&#8217;s Game Developer magazine&#8217;s Inner Product column. Good enough that I wanted to draw some attention to it, and hopefully add a bunch more of these good ideas as I come across them / remember them)</p>
<p>Most games, when they crash hard enough, memory dump. The customer (or internal tester during development) can then be requested by the dev team to find a specific file in a specific directory (the mem dump) and email it to them for analysis.</p>
<p>Some games actually popup a dialogue to the user, to tell them about this file, and where to find it, and who to email it to.</p>
<p>Some even include some contextual information automatically (&#8221;the user was on Level 3, and has the following DirectX hardware info&#8221;). Most just ask the user to fill in a field &#8220;telling us what you were doing when it crashed&#8221;.</p>
<p>Most games, during development, automatically either popup &#8211; or display in a custom textarea &#8211; a message every time somethign unexpected happens, something that MIGHT be a symptom of a bug. There are even conference talks about <a href="http://scottbilas.googlepages.com/optimizing_the_development_pipeline.ppsx" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://scottbilas.googlepages.com/optimizing_the_development_pipeline.ppsx');">how to avoid making your playtesters so sick of error messages that they stop bothering to read them</a>, and hence the messages become mostly a waste of time.</p>
<p>How many games do a simple call to the SQL client library to send to the local SQL server a simple detailed report of what happened, when, why, and how bad it was? This information is ALL already available, but how hard is it to copy/past the following into your source code and execute it as an SQL command?</p>
<blockquote><p>INSERT INTO reports.errors (time, problem, severity, stacktrace, user, IP, clientversion) values (TIMENOW(), &#8220;+assertion.getMessage()+&#8221;, &#8220;+assertion.getLevel()+&#8221;, &#8220;+assertion.getStacktrace()+&#8221;, &#8220;+assertion.getUsername()+&#8221;, &#8220;+system.getLocalIPAddress()+&#8221;, &#8220;+client.getVersion()&#8221; );</p></blockquote>
<p>Nice idea &#8211; free, detailed, metrics on exactly why, when, and where your game exe is crashing, any unexpected problems, anyone who&#8217;s running an out-of-date version, etc.</p>
<p>And with the dev team no longer having to rely on users *actually bothering to tell them* when they see big flashing warnings and errors, we might avoid some of the programmer/artist antipathy (&#8221;[artist] hey, can you help me with something?&#8221; &#8220;[programmer] its got an error! no wonder it doesnt&#8217; work!&#8221;, &#8220;oh, ignore that, it always does that&#8221;, &#8220;um, how long has it been &#8216;always&#8217; doing that?&#8221;, &#8220;ever since around the time the game started running really slowly, 2 months ago. It sucks &#8211; now everything takes me twice as long to test. But that&#8217;s just life, I guess&#8221; [cue: programmer grinds teeth, smashes forehead on desk, or similar]).</p>
<p>NB: I have nothing against artists. They are just an easy scapegoat for a not-very-funny-but-actually-quite-painful-if-you&#8217;ve-been-there joke. No artists were harmed in the making of this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2008/03/02/improving-your-dev-process-automating-collection-of-game-crash-info/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>GDC08: SQL Considered Harmful</title>
		<link>http://t-machine.org/index.php/2008/02/21/gdc08-sql-considered-harmful/</link>
		<comments>http://t-machine.org/index.php/2008/02/21/gdc08-sql-considered-harmful/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 01:14:38 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[GDC 2008]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[computer games]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[massively multiplayer]]></category>

		<guid isPermaLink="false">http://t-machine.org/index.php/2008/02/21/gdc08-sql-considered-harmful/</guid>
		<description><![CDATA[Summary
Speaker: Shannon Posniewski, Cryptic
I was expecting something shockingly naive and/or stupid from the title of the session. The first thing the speaker said was that the title was completely wrong, so I ran with that. With that out of the way, the talk was fine, although small things kept coming out during the talk that [...]]]></description>
			<content:encoded><![CDATA[<h4>Summary</h4>
<p>Speaker: Shannon Posniewski, Cryptic</p>
<p>I was expecting something shockingly naive and/or stupid from the title of the session. The first thing the speaker said was that the title was completely wrong, so I ran with that. With that out of the way, the talk was fine, although small things kept coming out during the talk that were hard to believe or worrying claims.</p>
<p>So it was going OK, until &#8230; right at the end, just before the Q&#038;A, and partly during the Q&#038;A, the speaker dropped some serious shockers:<br />
<span id="more-113"></span><br />
 &#8211; they&#8217;ve never actually used this custom DB: everything that the speaker says RDBMS&#8217;s can&#8217;t do he doesn&#8217;t yet know for sure that his proprietary DB server can do either<br />
 &#8211; they never bothered to try alternative SQL servers, they just used MS SQL Server<br />
 &#8211; they&#8217;d never heard of Versant until after they&#8217;d developed this proprietary DB &#8211; apparently they never did any evaulating of other possible DB engines<br />
 &#8211; they&#8217;ve created their own proprietary query language based on C and C syntax, and don&#8217;t find any value in using SQL</p>
<p>Disclaimer: I recently started to work for the company that published CoH/CoV, and apparently forced the speaker into using SQL and an RDBMS in the first place. I didn&#8217;t join the company until a long time after this had all happened, and I work in a different division in a different continent, so everything in this talk was new to me (although I admit I&#8217;d be fascinated to hear what NCsoft&#8217;s thoughts were on these development directions)</p>
<p>My own commentary in [ square brackets ], any mistakes/misunderstandings my own fault :).</p>
<h4>Title</h4>
<p>The title is deliberately wrong and provocative &#8211; it&#8217;s really that current vendor solutions are inappropriate for the needs of MMOs</p>
<h4>Databases 101</h4>
<p>[Adam: spent 15 mins explaining basics of modern database usage:</p>
<p>ACID explanation</p>
<p>Relational explanation</p>
<p>SQL explanation</p>
<p>Keys explanation]</p>
<p>SQL DBMSs are safe, tested, used by practically everyone, lots of experience of using them exists.</p>
<h4>Why not use it [SQL + RDBMS]?</h4>
<p>SQL is optimized for the general case, and is generally &#8220;OK&#8221; &#8211; it will never be terrible. It will always work..</p>
<p>Sometimes queries take a long time to setup &#8211; creating an index automatically, etc.</p>
<p>It self-optimizes on the fly with caching etc, but that introduces stalls at unpredictable times. Unpredictable latency caused by this is very bad because sometimes you e.g. try to pick up something in the game world from within the game client, and nothing happens, so user is confused &#8211; because of that latency.</p>
<p>[Adam: if this strikes you as very strange behaviour for an RDBMS, you are not alone. It might help to know that the end of the talk, the speaker revealed that they'd only ever used Microsoft SQL Server and hadn't bothered trying out any alternative RDBMS's, and didn't really know much about the others]</p>
<p>Inserts are extremely slow &#8211; just for each single row that you insert. Because of all the overhead of checking for consistency etc, inserts are slow.</p>
<p>Once you&#8217;ve got data into the database, the per-row overhead to update anything in the row is also fairly expensive (although you can do several changes per row at once for almost no extra penalty).</p>
<h4>Object-Relational Impedance Mismatch</h4>
<p>Trying to map OO systems into Relational databases is painful and shoehorning it comes with lots of performance loss.</p>
<p>Every class I&#8217;ve ever seen in database architecture talks about normalizing all your data. Doing it that way &#8211; the &#8220;right way&#8221; &#8211; can really backfire on you.</p>
<p>[Adam: ... apart from all the other classes in DBA, the ones that also talk about DE-normalizing data. I went to different database classes than the speaker, apparently :) ]</p>
<p>On COH we had this idea that we&#8217;d store statistics on each individual player &#8211; how many times did they pick stuff up, how many times did they kill people, how long they spent online, the number of times they trash-talked in chat, etc.</p>
<p>[Adam: i.e. gameplay metrics, a la the work done by Bungie with Halo heatmaps, or by various 3rd party companies at the moment in the games industry. Cool stuff]</p>
<p>We made a table where there was one row-insert per player PER piece of data that had changed. Some of those stats change all the time, like &#8220;how long have they been online&#8221;.</p>
<p>So the traffic to the database was extremely high, because each thing had to be updated constantly.</p>
<p>[Adam: Well ... IME this isn't the *normal* way of dealing with that use-case, so I'm not surprised it bombed. If they'd approached it in a more standard way, using simple multi-server database organization, I suspect it might have worked out fine from the start]</p>
<p>So &#8230; we threw out all the tranditional DB concepts, and made one column per stat, with no actual names for columns, instead just have &#8220;Stat 1 value&#8221;, &#8220;stat 2 value&#8221;, etc.</p>
<p>[Adam: I really don't get how this ever even seemed like a sensible idea, but there was a long queue of people asking questions at the end so I didn't manage to ask before I had to go to next session]</p>
<p>In the interests of performance, we were twisting our data, either in code, or in the DB, or in both places. This became a huge impedance to our development process.</p>
<h4>Solution: Caching</h4>
<p>Problems:<br />
 &#8211; unexpected unpredictable 1-second and multi-second latencies</p>
<p>[Adam: I'm really suspcipious about this problme - where is it coming from?]</p>
<p>Solution:<br />
 &#8211; created a server process that all DB calls from other server processes were indirected through<br />
 &#8211; it had a second thread that was busy writing stuff out to the DB<br />
 &#8211; appeared that all writes were instantaneous, but they were being buffered.<br />
 &#8211; i.e. write-through cache<br />
 &#8211; all changes you made in game-server memory would show instantly as having been committed</p>
<p>Problems2:<br />
 &#8211; throughput was still far too slow, although at least now there was no latency</p>
<p>Solution:<br />
 &#8211; instead of updating every stat every time it changes, we did &#8220;snapshots&#8221; and only occasionally save them<br />
 &#8211; &#8230;but means that there was no ACID properties being used any more except for Durability</p>
<p>Since that was shot anyway, we went whole-hog, basically. What we decided was we&#8217;d keep all the data for the players on a given map on that game server. The database was being used just as a storage engine instead of as a transaction engine. The business logic is now all inside the game-server, and we just periodically flush it all out to the DB.</p>
<p>Problems3:<br />
 &#8211; lost data<br />
 &#8211; server-server comms</p>
<p>Solution:<br />
 &#8211; flush data faster</p>
<p>Conclusion: we optimized the servers, the database engine, to the point that we lost all the benefits of RDBMSs. All the ACID stuff etc had just become a hindrance to us.</p>
<h4>Final solution: Cryptic DB</h4>
<p>Requirements<br />
 &#8211; regain ACID benefits<br />
 &#8211; low predictable latency<br />
 &#8211; high read/write throughput<br />
 &#8211; minimize code-db impedance (the schemas changed very often, and that was very painful)<br />
 &#8211; backup and restore easily</p>
<p>[Adam: suggests that hiring a professional DBA, and using a commercial OODB, would be the best option to start with]</p>
<p>Relaxations<br />
 &#8211; offline character access is unimportant<br />
 &#8211; domain integrity became the responsibility of the programmer<br />
 &#8211; general ad-hoc queries can be slow (we don&#8217;t use them)<br />
 &#8211; SQL not needed</p>
<h4>Background &#8211; some stuff they&#8217;d already done</h4>
<p>In CoX we took all static data (mission data, character class template etc) and didn&#8217;t put it into a DB. We stored it on disk and loaded it into memory manually.</p>
<p>To help us do this, we created a &#8220;StructParser&#8221; [just a serialization tool]. This was what we used to start building Cryptic DB. We wrote a pre-parser that looked at our C structs in the source code and wrote out parserss/serializers for it.</p>
<p>Using this for live data as well as static gave us benefits of not having two different storage systems in parallel.</p>
<p>[Adam: in general, that's a pretty good thing to achieve]</p>
<p>Allowed us to create generic mutators, because we know the datatypes and memory layout. So, now we have a generic mutator database. Only simple operations at this point, like mathematical addition of a single counter.</p>
<p>Complicated things like checking whether to allow a trade (lots of rules and things to check) need business logic. We decided to sepaaret the data and logic away from the database, and put it into our game server.</p>
<p>A particular game server owns the data for an entity. E.g. a team server would know about teams, and anything that has to do with teams will be held on that server. It knows how to modify those entities.</p>
<p>[architecture diagram]</p>
<p>Most transactional actions are now being done locally only, so execute extremely fast.</p>
<p>To make it easier to develop, we created auto-transactions. These instrument and change the code so that transactions are written in C. We did field-level locking on the items we were modifying.</p>
<p>[C code with a bunch of special macros implementing a basic transaction, but mostly written in C]</p>
<p>[Adam: here he gave a simple example of distributed transaction processing (although he didn't call it that), enough to convey the general idea, although he ommitted the details that make DTP hard / interesting technically]</p>
<p>Cryptic DB uses basic journal-based techniques for data consistency longterm.</p>
<h4>Conclusion</h4>
<p>We&#8217;ve tried stored procedures etc, doesn&#8217;t work. Other MMO devs have had to resort to using solid-state disks etc to make it work fast enough. So, don&#8217;t just believe what they say in database classes.</p>
<p>[Adam: the mention of SSD is disingenuous: only one MMO company has decided to try that, and their from Iceland so they're a bit odd anyway (/me ducks and runs for cover) - but seriously for them it's part of an overall game-design and/or technology strategy - they aimed for and achieved gameplay that Cryptic hasn't (single-server world)]</p>
<h4>Q: Did you look at federated data as a solution?</h4>
<p>We looked a little, didn&#8217;t try to implement it, because we&#8217;d worked out a proprietary solution already that we reckoned would work.</p>
<p>Latency would still be a problem anyway with it.</p>
<h4>Q: How do you handle corruption of data in your DTP?</h4>
<p>There&#8217;s certain things we relax &#8211; we don&#8217;t worry about cosmic rays flipping bits randomly.</p>
<p>Within the database, everything is checksummed.</p>
<h4>Q: what&#8217;s the throughput of your cross-server transactions? How many of your servers are local versus distributed?</h4>
<p>I would say at a guess we have a very small number of distributed TP&#8217;s. We have a zoned games, so almost everything is local, probably less than 5%.</p>
<p>I have no idea how much slower cross-server transactions are. I don&#8217;t think they&#8217;re particuarly slower, the biggest problem is just the overhead of having to wait for the locking of data. Probably a couple of times slower, but not an order of magnitude.</p>
<h4>Q: you&#8217;re saying that with your proprietary &#8220;Cryptic DB&#8221; you keep all data in memory. What do you do when you hit the limit of RAM in a machine?</h4>
<p>It&#8217;s a pretty straightforward task to virtualize your memory. If you&#8217;re WoW you&#8217;ve got no chance of fitting it all into memory, so you only keep in memory the working set of characters that are online right now.</p>
<p>If you still run out, then we make a second shard. We&#8217;re talking tens and hundreds of thousands of simultaneous players before we get to that problem.</p>
<h4>Q: Do you cluster machines to make the DB?</h4>
<p>It&#8217;s one giant machine with a lot of memory in it</p>
<p>[Adam: which would suggest you could benefit from SSD, maybe... :P]</p>
<h4>Q: Have you considered co-locating the data cache with the servers themselves?</h4>
<p>No. We haven&#8217;t needed to consider it yet.</p>
<p>You can compress the data in memory and other tricks, so it&#8217;s not a problem yet.</p>
<h4>Q: how do you do backups?</h4>
<p>A set of three servers work together to make sure they can handle the load and so that they can ensure they are being back up correctly.</p>
<p>These are effectively zipped flat files, for simplicity. There&#8217;s one server frontend to rest of games, responding to read requests and making in-memory changes for transactions that come through. The second server is slaved to it, and every once in a while writes out an image of it&#8217;s DB in a safe way. The last server picks up the things that have been changed and merges them into the master DB. Master DB is then copied back to first and second servers.</p>
<p>At any one spot in the change the data is consistent within that one machine. There may be a huge journal at some point, but it will be consistent.</p>
<p>It turns out that MMO players care more about not being able to play than about losing ten minutes of game data. By about an order of magnitude.</p>
<p>When someone claims they lost a Sword of Death, don&#8217;t worry too much, just give them a new sword, because you save a lot of pain and money in customer support costs.</p>
<h4>Q: Sounds like you&#8217;ve made an OODB, how does that compare with Objectivity or Versant? And the disadvantage of an OODB seems to be the loss of querying ability, so you can&#8217;t research behaviour or do metrics to examine your gameplay etc &#8211; how do you sovle that?</h4>
<p>When we started working on this we didn&#8217;t know that Versant existed. We only found out when we first spoke about it publically.</p>
<p>Other ones we knew about but we already had what we wanted from a previous game that was fully tested by us and used in produciton. We were going to have to worry about learning the vendor specifics, and converting our data and pipeline stuff.</p>
<p>I&#8217;m also not convinced that an OODB would have worked for the stuff we&#8217;re trying to do. We&#8217;re writing a lot of code, and the fact you can write AUTO_TRANSACT at the top of a function, and knowing it will Just Work is worht it&#8217;s weight in gold.</p>
<p>Re: adhoc queries, we have created a proprietary query language that looks a lot more like C than it does like SQL.</p>
<p>If for some reason we lack a feature we need in our DB, it&#8217;s so easy for the DB to interact with C code that you could just write the damn thing in C and have the DB execute that.</p>
<h4>Q: Is this in production?</h4>
<p>No</p>
<h4>Q: How do you test it?</h4>
<p>We eat our own dogfood. The true test will be the next time we have a game that goes live.</p>
<p>We have a zillion stress tests, and run that stuff routinely, of course. Right now we just have test-harnesses that fake it.</p>
<h4>Q: Could you have made Cryptic DB from the start, or did you only learn it by using SQL from the start? Did you get anyt benefit from SQL?</h4>
<p>We got nothing from SQL, it was forced upon us by our publisher who forced us to use SQL. NCsoft were doing network operations and backups etc, so they said look we already know how to use it, and go ahead with it.</p>
<p>I have no idea if we&#8217;d have used it given free chance.</p>
<p>We learnt from it that variant latency is a killer, and learnt where the major bottlenecks were in MMO data writing, so we did learn a lot by working with SQL that was transferable knowledge.</p>
<h4>Q: How do you handle verisoning on the data, like schema changes?</h4>
<p>The actual DB if it sees a field that it doesn&#8217;t know, it just ignores it silently. If we add a field that isn&#8217;t there, it silently creates it.</p>
<p>We set things to zero or null to create them.</p>
<h4>Q: Do you have a central contorl of the DB design, the schema?</h4>
<p>Every programmer can add whatever fields they want. We haven&#8217;t run into any problems with it yet.</p>
<p>There&#8217;s a certain data structure which is the character definition. At the start of the project someone sat down and designed that, and that doesn&#8217;t change often. What does change is the occasional adding of a new data field every now and then [i.e. no additional tables being added]</p>
<h4>Q: How much did it cost in money and hours to build?</h4>
<p>Whole system from start to finish was two people for maybe a year.</p>
<h4>Q: Did you try multiple implementations of your SQL server? Different vendors?</h4>
<p>No, we did not. There was no indication to us why different ones would ever be faster, so it didn&#8217;t seem worth investigating it. I think it is problems endemic to all databases in general.</p>
<p>unless, maybe, you just spent huge amounts of time and effort on database administration. We don&#8217;t know how many players we will have, so we can&#8217;t actually define optimal schemas and things in advance.</p>
<p>One of our main goals was to spend more time on game coding and less on database coding.</p>
<h4>Q: did you spend a lot of time profiling your SQL server?</h4>
<p>I think we tried profiling everything, automatically created indexes, stored procedures, etc. We got maybe 15%, 20% improvement, and DBA&#8217;s think that&#8217;s great, but we were looking for multiple hundreds of percent improvement in performance.</p>
<h4>Q: Does your new DB store quests?</h4>
<p>It stores state for how you&#8217;re progressing through, but not yet the actual quest template data.</p>
<h4>Q: Have you looked at any vertical file DB systems?</h4>
<p>No.</p>
<p>It&#8217;s entirely possible that it&#8217;s much faster than using Relational. We were already used to using SQL so we kept in that direction.</p>
<h4>Q: will you be releasing this as a third-party DB?</h4>
<p>Maybe &#8211; but not at least until we&#8217;ve put it into production for ourselves!</p>
]]></content:encoded>
			<wfw:commentRss>http://t-machine.org/index.php/2008/02/21/gdc08-sql-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>
