<?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>Entertaining Code &#187; Code</title>
	<atom:link href="http://www.entertainingcode.com/tags/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.entertainingcode.com</link>
	<description>Coding and the games industry</description>
	<lastBuildDate>Mon, 28 Jun 2010 16:56:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Apple Voodoo</title>
		<link>http://www.entertainingcode.com/archives/the-apple-voodoo/</link>
		<comments>http://www.entertainingcode.com/archives/the-apple-voodoo/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 22:06:32 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=1179</guid>
		<description><![CDATA[I love the iPhone. As usual when it comes to Apple gadg [...]]]></description>
			<content:encoded><![CDATA[<p>I love the iPhone. As usual when it comes to Apple gadgets, the feeling for design and thinking outside the box produced a phone that finally made me see the point of a smart phone.</p>
<p>The one thing that&#8217;s always bothered me though is the App Store and conditions. A central directory of apps and central point of download is a good idea. A standardized update procedure is an even better idea, at once solving all the bullshit problems windows users have to put up with (how interested are you in updating Adobe Reader or Java all the time, really?)</p>
<p>The one thing I don&#8217;t agree with is <a href="http://www.pcworld.com/article/165880/step_by_step_apples_app_store_approval_process.html">the approval process</a>. And Apple just went from tolerably bad to intolerably worse on that one. I think it&#8217;s a bad decision to restrict what you may run on the phone and how, but it&#8217;s still a decision I can respect &#8212; their rules on how you execute stuff within the context of their operating system.</p>
<p>However, the new terms of service for iPhone OS 4 says this:</p>
<blockquote><p>Applications must be <strong>originally written</strong> in Objective-C, C, C++, or  JavaScript as executed by the iPhone OS WebKit engine, and only code  written in C, C++, and Objective-C may compile and directly link against  the Documented APIs</p></blockquote>
<p>Here&#8217;s where Apple has clearly and definitely stepped over the line. Not only must the resulting application conform to certain demands, now <em><strong>my development process</strong></em> must conform to certain demands?</p>
<p>Code generation is an incredibly useful technique, and they&#8217;re banning it simply to stop the Flash compiler and make a grand statement? Either way, how in the world are they planning to enforce this? Will this lead to an arms race between Apple trying to detect application code that has been compiled to C, C++ or Objective-C and a company like Adobe making a compiler that compiles Flash to those languages in a way that looks as close to human-written as possible? Unless I have to submit a full-length video of myself coding the entire thing, there is just no way to tell with a reasonable accuracy.</p>
<p>How much collateral damage is acceptable, Apple? How many other companies and customers will suffer over your crusade against Flash? How many developers will hate your guts before this is over? There are just so many pins the developer voodoo doll will take.</p>
<p>The iPhone app craze will eventually die as more people realize the <a href="http://www.escapistmagazine.com/news/view/90154-Indie-iPhone-Games-Not-So-Profitable">gold rush</a> <a href="http://jeff-vogel.blogspot.com/2009/10/i-hate-missing-gold-rushes.html">is over</a>. And at that point, Apple can keep its Objective-C Nazi corner, while the rest of us go back to using the best tools for the task at hand.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2919823884810618";
/* Links */
google_ad_slot = "5892302561";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/the-apple-voodoo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The broken web</title>
		<link>http://www.entertainingcode.com/archives/the-broken-web/</link>
		<comments>http://www.entertainingcode.com/archives/the-broken-web/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 22:14:41 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=1098</guid>
		<description><![CDATA[So I spent the day looking at web design again. I don't [...]]]></description>
			<content:encoded><![CDATA[<p>So I spent the day looking at web design again. I don&#8217;t do much of it anymore, but <a href="http://www.lethania.com">Lethania</a> does and so I tend to get pulled into it. I later ran into this ad, which I thought was kind of funny:</p>
<p><a href="http://www.entertainingcode.com/wp-content/uploads/2010/03/freeflash.jpg"><img class="aligncenter size-full wp-image-1099" title="Create FREE Flash Websites" src="http://www.entertainingcode.com/wp-content/uploads/2010/03/freeflash.jpg" alt="" width="250" height="239" /></a></p>
<p>I would be much happier if everyone could start creating flash-free websites. Anyway, today&#8217;s ordeal made me think back to the fine old days when everything was a table. HTML wasn&#8217;t made to display layout. The nice things about HTML, hyperlinks, worked just fine in regular text documents with some simple formatting, like bold and italic, its creator figured.</p>
<p>The nice things turned out to be really nice though, sparking an incredible development where pages got increasingly sophisticated layouts. The original HTML text format included tables, a fact which was quickly used to hack together all kinds of pages. A table could be used as a grid to stuff things into certain places, and a table inside a table could be used to create more interesting layouts, not to mention a table inside a table inside a table.</p>
<p>Because tables were meant to be (you know&#8230;) tables, different browsers rendered them slightly differently. Fine, if all you want is a table of text. Not so fine, if what you wanted was a pixel-perfect design. The solution to this was to add a whole slew of properties to each table, row and cell.</p>
<p>So after hacking together a sophisticated web site layout using table, the result was predictably a complete mess. The tables holding the text in place was mixed in with the text itself, making sites a nightmare to update or maintain, to not even mention changing the design.</p>
<p>A solution was clearly needed, to separate the design from the contents of web pages. So, why not adopt a language that wasn&#8217;t meant as a design language either? Sure thing, Cascading Style Sheets (CSS), a language meant for styling rather than layout was adopted during a long and slow process full of bugs, browser incompatibilities and new hacks.</p>
<p><a href="http://www.zazzle.com/css_is_awesome_mug-168716435071981928"><img class="aligncenter size-medium wp-image-1113" title="CSS is awesome" src="http://www.entertainingcode.com/wp-content/uploads/2010/03/css-297x300.png" alt="" width="297" height="300" /></a></p>
<p>Today&#8217;s standard of &#8220;good&#8221; for the web means using HTML strict (which few do) and control the appearance using CSS. The result is slightly less convoluted than the tables approach, but takes about 20 times as much effort to understand or write correctly, involves just as much hacking and is so fraught with peril that most people simply avoid it, going back to tables or mixing in horribly ugly JavaScript. Or, as seems to be extremely popular with games companies, insist on making the entire website in Flash, even though there&#8217;s absolutely no need for it.</p>
<p>So the page we were looking at today needed 3 columns of the same height. Let&#8217;s do it the old way with tables, for nostalgia&#8217;s sake:</p>
<pre lang="HTML" line=1>
&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;Column 1&lt;/td&gt;
    &lt;td&gt;Column 2&lt;/td&gt;
    &lt;td&gt;Column 3&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</pre>
<p>Okay. Not too bad. So how to do this with CSS? Generally, you&#8217;ll need 3 DIVs next to each other, all with float: left. This makes them each have an individual length though. There are several ways to get around this, but none of them are good. The first involves stretching images across the DIVs as background images, which means you&#8217;re now bound to the color of those images instead of a color value. Also, you can&#8217;t have borders.</p>
<p>The second way we tried involved a very complicated set of maneuvers using three extra panes and shuffling content out the left side of the screen and then back in. The <a href="http://matthewjamestaylor.com/blog/equal-height-columns-cross-browser-css-no-hacks">description</a> for how to do this was about 10 pages long. And oh, it turned out to not work with borders either. Sigh.</p>
<p>So finally we found <a href="http://www.ejeliot.com/blog/61">one way</a> that seemed to work with borders. Only it didn&#8217;t, since you didn&#8217;t get any bottom border that way. The good part is that you could hack around that by using an image.</p>
<p>So for the old horrible table version, you substitute a mess of nestled DIVs and several pages of CSS, and it doesn&#8217;t even work fully without adding a picture where you essentially paint the entire bottom of the border along the page (yes, you actually paint a snapshot of your entire webpage, 1 pixel high). Way to go.</p>
<pre lang="HTML" line=1>
&lt;style type="text/css"&gt;
      #container { float: left; background: url(images/example-6.gif)
          bottom center no-repeat; padding-bottom: 1px; }
      #inner { float: left; overflow: hidden; }
      #inner div { float: left; background: #ccc; border: 1px solid #000;
          width: 200px; margin-right: 5px; margin-bottom: -1000px;
          padding-bottom: 1000px; }
      #inner .col2 { background: #eee; }
      #inner .col3 { margin-right: 0; }
      .clear { clear: both; padding-top: 10px; }
&lt;/style&gt;
...
&lt;div id="container"&gt;
  &lt;div id="inner"&gt;
    &lt;div&gt;Column 1&lt;/div&gt;
    &lt;div class="col2"&gt;Column 2&lt;/div&gt;
    &lt;div class="col3"&gt;Column 3&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p class="clear"&gt;
</pre>
<p>That seems like a great way to code! Not to mention that part of your design is now locked up in <a href="http://www.entertainingcode.com/wp-content/uploads/2010/03/example-6.gif">the image</a>.</p>
<p>The best part about all of this is that it&#8217;s presented as &#8220;without CSS hacks&#8221;. Well, if having to use 6 nestled divs, large-number positive and negative margins and all kinds of bullshit like that isn&#8217;t an ugly hack, then I don&#8217;t know what is. The fact that the art of web design has advanced to the point where the normal thing you have to do is one big hack isn&#8217;t encuraging. And then they add the hacks on top of that&#8230;</p>
<p>I never liked tables, but at least they worked. In one of those memorable <a href="http://warpdrive.se/8565">IRC quotes</a> (in Swedish), someone said:</p>
<blockquote><p>&lt;sycon&gt; imagine 1000 ants, tables are like the cage that keeps them in place, in the right place<br />
&lt;sycon&gt; css is like a child with spasms trying to poke them all into place with chopsticks.</p></blockquote>
<p>After spending countless hours trying to do seemingly simple things, I think I agree. Something&#8217;s still broken with the web, and no one seems to care to fix it. Well, other than <a href="http://www.positioniseverything.net/articles/onetruelayout/equalheight">inventing more workarounds</a>.</p>
<p>But hey, at least you can draw <a href="http://www.hongkiat.com/blog/drawing-homer-simpson-in-css/">Homer Simpson</a> with it. So, ok, let the flak begin. Look, a <a href="http://www.ragestorm.net/erezsh/parrot.html">Parrot</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2919823884810618";
/* Links */
google_ad_slot = "5892302561";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = '409';
var flattr_url = 'http://www.entertainingcode.com';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'Entertaining Code';
var flattr_dsc = 'Coding and the games industry';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/the-broken-web/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Wordpress image upload bug fixed</title>
		<link>http://www.entertainingcode.com/archives/wordpress-image-upload-bug-fixed/</link>
		<comments>http://www.entertainingcode.com/archives/wordpress-image-upload-bug-fixed/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 21:32:31 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=1021</guid>
		<description><![CDATA[When upgrading my blogs to wordpress 2.9, I found that  [...]]]></description>
			<content:encoded><![CDATA[<p>When upgrading my blogs to wordpress 2.9, I found that the image upload broke. After some fiddling around I managed to get a proper error message out of it, I managed to track down the error to the file wp-admin/includes/file.php, which used a ctype_ function that, for some reason, was disabled on my php version.</p>
<p>Funnily, the exact same bug has apparently been a problem on wordpress before, on version 2.5, in a different file.</p>
<p>Anyway, I fixed the problem. If anyone wants the fixed file, here it is:</p>
<p><a href="http://www.entertainingcode.com/wp-content/uploads/2009/12/file.zip"></a> <a href="http://www.entertainingcode.com/wp-content/uploads/2009/12/file.zip">Download file.zip</a></p>
<p>Download the archive, unzip the file.php inside and replace the one in your wp-admin/includes folder with it.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2919823884810618";
/* Links */
google_ad_slot = "5892302561";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/wordpress-image-upload-bug-fixed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Web Form Verification for Dummies</title>
		<link>http://www.entertainingcode.com/archives/web-form-verification-for-dummies/</link>
		<comments>http://www.entertainingcode.com/archives/web-form-verification-for-dummies/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 22:42:17 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Passwords]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=870</guid>
		<description><![CDATA[The standard method for interaction with computer appli [...]]]></description>
			<content:encoded><![CDATA[<p>The standard method for interaction with computer applications has gone from being the command line to being the native GUI, to being the web form. We were awesome at verifying input when it came from the command line &#8212; that was simple. Then we were kind of ok verifying input in the native GUI, although quality varied a lot more.</p>
<p><strong>Now we suck at verifying user input from web forms. The current state of code that verifies user input has both managed to take us back to the kindness of the command line when it comes to freedom of input and manages to check all the wrong kinds of things. </strong>Why is it so hard to write these checks? I suspect because people don&#8217;t really think much about them, and I bet there are more interesting things out there than to write user input verification.</p>
<p>These problems aren&#8217;t some beginner coder errors either &#8212; they&#8217;re rampant on even the biggest sites out there like paypal.</p>
<p>The most common field to get me snared is the phone number field. In 99% of all cases, the site assumes that all phone numbers in the entire world are formatted like US phone numbers. Not, as one could imagine, because I&#8217;m claiming to live in America &#8212; I clearly just told the site that I live in a European country. So anyway, inputting my actual phone number causes an &#8220;invalid phone number&#8221; error. Not that there is any mention whatsoever on the site about what the correct format of a phone number is (there are, in fact, even several ways of writing a US phone number).</p>
<p>This sets off a wildly unamusing guessing game of how to &#8220;convert&#8221; my phone number into a format the site will accept. This practice often costs the sites money as I end up giving up and going somewhere else, frustrated and unable to make a simple online purchase that didn&#8217;t <em><strong>really</strong></em> require that phone number anyway, did it?</p>
<h3>Passwords</h3>
<p>Another highly amusing game is the one where web sites try to force users to choose &#8220;secure&#8221; passwords by enforcing the formats of passwords. &#8220;You must have at least 6 characters, with at least one letter and one number&#8221;. Sounds good, except in general these passwords are restricted to only contain letters and numbers. <strong>Hold on, isn&#8217;t it common wisdom to include at least one non-alphanumeric character in a secure password?</strong></p>
<p>As such, out of my set of passwords, the only password which tends to pass most password verifications is my least secure one. The idea that you could fix a social problem through technology is somewhat funny anyway &#8212; &#8220;password1&#8243; is not more secure than &#8220;password&#8221; in any way that really matters.</p>
<p><a href="http://www.entertainingcode.com/wp-content/uploads/2009/12/errormsg.jpg"><img class="aligncenter size-full wp-image-994" title="Error" src="http://www.entertainingcode.com/wp-content/uploads/2009/12/errormsg.jpg" alt="Error" width="500" height="157" /></a>The same thing applies to the old trick of forcing your users to change passwords every month. This can have two potential outcomes &#8212; users append a counter to the end of their password, and increment it every time they are forced to switch, or they keep a post-it note taped to their monitor with their current password. Neither outcome is a net gain in terms of security.</p>
<p>Some sites even let the user set a password which is then considered invalid when the user tries to log in (ebay, for instance,  has done this) &#8212; causing a prompt for a new password and much annoyance.</p>
<h3>Format wars</h3>
<p>Parsing stuff is what computers are good at. So forcing me to input something in a strict format is always a loss. Either separate the fields and force me to select the individual parts of a date separately or <strong>actually use all that computing power at your disposal to do your user a favor</strong>. Telling me you have no idea what I mean by &#8220;2009-12-21&#8243; because you expected &#8220;20091221&#8243; is annoying the user for no good reason, even if you told me to not include dashes.</p>
<p>If you find yourself in a situation where you need to verify input  from the web, take an extra minute to consider how you could make things as convenient as possible for the user, which ones of your assumptions only hold true for the region you live in&#8230; and when you&#8217;re done, whatever you do <strong>make sure you tell the user exactly what the expected format is</strong>.</p>
<p></p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = '409';
var flattr_url = 'http://www.entertainingcode.com';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'Entertaining Code';
var flattr_dsc = 'Coding and the games industry';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/web-form-verification-for-dummies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Black Box Black Box Testing</title>
		<link>http://www.entertainingcode.com/archives/black-box-black-box-testing/</link>
		<comments>http://www.entertainingcode.com/archives/black-box-black-box-testing/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 14:29:32 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=934</guid>
		<description><![CDATA[One of my friends is in College, and is currently feeli [...]]]></description>
			<content:encoded><![CDATA[<p>One of my friends is in College, and is currently feeling the full idiocy of a system that was only beginning to be rolled out as I left. Let me explain how it works.</p>
<p>Essentially, <a href="https://kattis.csc.kth.se/about">the system</a> is meant to test the students&#8217; solutions to homework problems. This is done by providing a solid definition of what the input and output of the application are supposed to be on the standard in/out channels, and setting up a whole bunch of test cases, including a memory limit and a CPU time limit. Students submit their source code to the system, which compiles it and runs all the test cases against the application in a black box test. So far, so good.</p>
<p>Seeing these guys at work, compared to me and my colleagues at work, makes a few things very apparent: even with a fairly solid grasp of algorithms and datastructure, their number one problem is code. Where professional programmers swim through code like sharks in the sea, the students appear to be more or less drowning. Theoretical learning aside, the education lacks practical programming, debugging, practical programming and some more practical programming.</p>
<p>It would seem that these programming exercises would be the perfect opportunity to get that kind of experience, if it wasn&#8217;t for the fact that the test system is itself a black box. You put in your code, and it tells you yes or no. It&#8217;s not quite a boolean pass/fail answer, but close enough: you will get told a result from the set: Didn&#8217;t compile, Passed, Failed, Crashed, Time Limit Exceeded. When I first heard of the system, it was motivated with the fact that sometimes in professional programming, that&#8217;s all you get.</p>
<p>I agree. Sometimes, you get gnarly bugs that give you less information than a world pro&#8217;s poker face. I&#8217;ve spent weeks tracking bugs like that sometimes, using all kinds of tools at my disposal to try to wring more  information out of the error, until finally the knot was untied. But &#8212; for all the bugs like that I&#8217;ve been through, none of them were eventually solved by guessing what was wrong and how to fix it.</p>
<p>Supposedly, the tool is meant to teach the students to debug their code&#8230; which it somehow does by disallowing all normal debugging tools. You can&#8217;t run a debugger on it, you can&#8217;t print traces, you&#8217;re not allowed to log to a file or socket, you&#8217;re not even allowed to know what input caused the error. The only tools you have at your disposal are your wit in coming up with your own test cases and code reviews.</p>
<p>Any attempts at normal debugging would be classified as cheating. If I was faced with a bug under those circumstances, I would do whatever I could to get more information out of it. Hey, I can crash it with different signals &#8212; that&#8217;s a few bits of information I could get back from it. All those kinds of tricks of the trade that real programmers use to, you know, solve problems&#8230; would be cheating.</p>
<p>This leads to a skewing of results&#8230; very simple bugs turn into monster problems, since you can&#8217;t identify and fix them. What they are learning is not how to debug their programs but how to painstakingly solve the very specific problem of pleasing the system. By artificially making easy things hard, the system has effectively found a way to avoid teaching the students essential skills in programming: simple debugging tools like tracing and breaking into a debugger. Instead, they learn programming by coincidence: poke something until you (hopefully, eventually) get a green light.</p>
<p>That&#8217;s not a lesson to learn.</p>
<p>The only way to go about this, faced by the obstacle made up of this system, is to learn a different skill: testing. More on that later.</p>
<p>More on studies: <a href="http://www.entertainingcode.com/archives/an-exceptionally-stupid-idea/">An Exceptionally Stupid Idea</a>, <a href="http://www.entertainingcode.com/archives/go-tinker/">Go Tinker</a>, <a href="http://www.entertainingcode.com/archives/whats-a-good-final-year-project/">What’s a Good Final Year Project?</a></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/black-box-black-box-testing/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Be an Open Source Douchebag</title>
		<link>http://www.entertainingcode.com/archives/dont-be-an-open-source-douchebag/</link>
		<comments>http://www.entertainingcode.com/archives/dont-be-an-open-source-douchebag/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 21:28:48 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Asshole]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=879</guid>
		<description><![CDATA[I love open source software. It provides both a neat tr [...]]]></description>
			<content:encoded><![CDATA[<p>I love open source software. It provides both a neat training ground for programmers, a good place to go <a href="http://www.entertainingcode.com/archives/go-tinker/">scratch that itch</a>. On the other side of things, it provides awesome software for people, including some software that would never come out of a big development house.</p>
<p>Still, there are some issues with free software that don&#8217;t really show up to the same degree with commercial software. One such thing is documentation. It&#8217;s painfully obvious that documentation is written by people who:</p>
<ol>
<li>Already know the software in and out.</li>
<li>Don&#8217;t like writing documentation.</li>
<li>Know nothing about how people learn.</li>
</ol>
<p>For instance, when I started a side project a few months back, I was looking for a build system. After settling on <a href="http://www.cmake.org/">CMake</a>, I set about trying to make sense of it. There&#8217;s the ever-present <a href="http://www.cmake.org/cmake/help/examples.html">getting started example</a>, of course. And then there&#8217;s the <a href="http://www.cmake.org/cmake/help/cmake2.6docs.html">full reference</a> of everything you could possibly want (almost).</p>
<p>But in between those, there&#8217;s nothing. Well, nothing except a book, which just goes to show you that there&#8217;s something missing &#8212; a professional writer could obviously make some money out of explaining things in a reasonable way.</p>
<p>The problem with this is that it <strong>doesn&#8217;t match how people learn</strong>. Getting started is a good step, but a relatively small one. Most of the time will be spent incrementally expanding the knowledge, moving from beginner to expert. Most time will thus be spend in some kind of zone in between the &#8220;getting started&#8221; and &#8220;reference of everything&#8221; levels.</p>
<p>Worse than that, some open source programmers have a tendency to view their full reference documentation as an appropriate resource for everyone. &#8220;It&#8217;s all in there,&#8221; right? But pointing a beginner at a 40-page document detailing all the options of some application when all they want is to run it properly isn&#8217;t very helpful. I&#8217;m sure you know what I&#8217;m talking about if you&#8217;ve ever used an open source command line tool.</p>
<p>That ends us up with the really dark side of free software culture. The true douchebags out there will not only be extremely smartass in their RTFM comments, they&#8217;ll also be incredibly sensitive and defensive about the software they&#8217;re working on.</p>
<p>I ran into a problem with cygwin&#8217;s SSHD implementation last week. In searching for the solution, I found <a href="http://www.mail-archive.com/cygwin@cygwin.com/msg99637.html">this mail list answer</a>:</p>
<blockquote>
<pre>  Wrong.  That is uninformed speculation and guesswork.  Stop
spreading misinformation.

  Cygwin SSHD has had the support for fully logging in as any
user since 1.7, as you have already been told and completely
ignored.  Go and read the manual.  The link was in the previous
email I sent in this thread.

  freesshd works exactly as Cygwin *used* to before it got
subauth support: when you log in with a key, rather than a
password, you just end up as an admin user.</pre>
</blockquote>
<p>Wow. This kind of answer is wrong on so many levels. First of all, while he makes it seem like the functionality has been there forever, cygwin 1.7 is still not even out of beta. The chance that an end user has it is about 0. So, with the current version (1.5),  supposedly cygwin sshd works just like freesshd. This is clearly false, because the original poster reports one working and the other not (which is, by the way, exactly the same results that I had).</p>
<p>So, a user reporting a problem about logging in gets pointed to a long documentation about security settings in a beta version, doesn&#8217;t understand a word from that document (no surprise there), and as a result gets told to &#8220;stop spreading misinformation&#8221;. Truth is, simply installed like any normal user installs applications, one works and the other doesn&#8217;t, something made quite clear by an answer from the original poster in a <a href="http://www.mail-archive.com/cygwin@cygwin.com/msg99616.html">different place</a> in the thread:</p>
<blockquote>
<pre>&gt; Are you talking about password or public key authentication?
&gt; If the latter, Have you tried the LSA authentication package
&gt; in Cygwin 1.7?</pre>
<pre>I don't know. I'll try to deciper that. Sounds complicated. In
the meantime, friend is using freesshd.</pre>
</blockquote>
<p>The essence of what he&#8217;s saying (which has been completely missed by the cygwin developers) is that the effort required to get cygwin to work like one would reasonably expect of it is much higher than the effort required to just google for something that <a href="http://www.codinghorror.com/blog/archives/000290.html">just works out of the box</a>. The fact that you could potentially make it work is irrelevant, because he&#8217;s not getting any help <em>actually making it work</em>.</p>
<p>He might as well just have said, &#8220;I don&#8217;t care about making it work for you. It works for me.&#8221;</p>
<p>Software companies usually compensate for their complete lack of useful technical support with a good (or at least reasonably decent) amount of help documentation. Free software usually has neither.</p>
<p>I encourage any programmer to practice their technical skills on an open source project. But while you do so, take the opportunity to practice your people skills a bit as well, or why not your writing skills? Don&#8217;t be an open source douchebag &#8212; someone reporting your software&#8217;s flaws is not attacking you personally.</p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = '409';
var flattr_url = 'http://www.entertainingcode.com';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'Entertaining Code';
var flattr_dsc = 'Coding and the games industry';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/dont-be-an-open-source-douchebag/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>What&#8217;s a Good Final Year Project?</title>
		<link>http://www.entertainingcode.com/archives/whats-a-good-final-year-project/</link>
		<comments>http://www.entertainingcode.com/archives/whats-a-good-final-year-project/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 20:20:43 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[The Games Industry]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Learning]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=861</guid>
		<description><![CDATA[Here's a question from the mailbag, coming from a stude [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a question from the mailbag, coming from a student doing games programming at a university, gearing up for his final-year project:</p>
<blockquote><p>The degree I&#8217;m doing currently has been very much centered around graphical programming, aswell as using various programming languages to bolster our CV&#8217;s I would imagine. We&#8217;ve not really touched on networking, or AI at all. Our main language in graphical programming has been OpenGL too, we&#8217;ve dabbled with DirectX a little, mostly managed directX with XNA.</p>
<p>As a programmer already in the industry, could you give me any advice on the type, and level of project I should aim for, for it to be a suitable demo project to show to prospective employers? It&#8217;s difficult enough as students to find our way into the games industry; if we don&#8217;t know what employers <em>want,</em> or what is considered worthy in the eyes of the employer, it lowers our odds tenfold.</p></blockquote>
<p>In a way, the answer to the question depends on what kind of position you&#8217;re trying for. I&#8217;ll try to answer with regards to as many positions as I know.</p>
<p>For starters, is graphics programming what you want to be doing? If it is, things like what graphics APIs you know become a lot more important. From what I know, most games studios that do windows game development have gravitated towards DirectX. With that in mind, having done a large(ish) project on DirectX could definitely be a plus. If all other things are equal, I&#8217;d definitely go for learning DirectX.</p>
<p>Not having experience with networking or AI isn&#8217;t all that much of an issue, unless you imagine going specifically for a networking or AI programming position (and even then, it&#8217;s more of a bonus than a requirement). One thing is clear however&#8230; if you&#8217;re looking to get into professional development at a large studio, you should be going for C++.</p>
<p>Now if we look past the technical requirements, there are a few things that can be said about such a project in itself. What you get from a good project is a nice entry into your demo reel &#8212; something to show off. This has a few implications, but most importantly something I&#8217;ve touched on before, in <a href="http://www.entertainingcode.com/archives/a-spectacular-failure/">A Spectacular Failure</a>: your project is going to be judged on emotional first impressions, not how technologically advanced it is or how nicely coded it is.</p>
<p>Your number one enemy is over-scoping the project, ending up with something that does lots of things, but does none of them in a great way. Come up with a good core gameplay for the game, and then polish it to a great shine. Fix all those annoying glitches and bugs, make sure everything looks as impressive as possible. It doesn&#8217;t need to be rocket science, as long as it&#8217;s well executed. In the end, what a games studio is looking for is a programmer who knows how to finish projects in a good way.</p>
<p>That doesn&#8217;t mean your project should be Space Invaders, but in general trying for something too big is more of a problem than overdoing something too small.</p>
<p>Finally, as an entry on your demo reel, make sure you make the game available in an easy manner. Have a page with plenty of screen shots, videos and preferably the game itself easily downloadable. Your coding ability will definitely be tested with some form of work sample as you apply to studios, so the code itself being available is less important. Reading code is hard, so <a href="http://www.entertainingcode.com/archives/trying-the-open-source-shortcut/">it&#8217;s unlikely that someone will have time to read yours</a>. However, having a finished game to show off is worth a lot, as is the experience of going through all the phases in finishing a game.</p>
<p>Other posts you may find interesting, relating to getting into the games industry and getting started with games:</p>
<ul>
<li><a href="http://www.entertainingcode.com/archives/getting-into-games-a-follow-up/">Getting Into Games</a></li>
<li><a href="http://www.entertainingcode.com/archives/an-exceptionally-stupid-idea/">An Exceptionally Stupid Idea</a></li>
<li><a href="http://www.entertainingcode.com/archives/lets-make-a-game-engine/">Let&#8217;s Make a Game Engine</a></li>
</ul>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/whats-a-good-final-year-project/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Getting Into Games &#8212; A Follow-up</title>
		<link>http://www.entertainingcode.com/archives/getting-into-games-a-follow-up/</link>
		<comments>http://www.entertainingcode.com/archives/getting-into-games-a-follow-up/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 16:14:12 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[The Games Industry]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=753</guid>
		<description><![CDATA[My post from a week or so ago about the differences bet [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.entertainingcode.com/archives/making-games/">My post from a week or so ago</a> about the differences between working as a software engineer in a games studio and in other places generated a fair number of interesting comments and questions, both here and at various syndication sites. In this post I will try to answer and comment on the most common and interesting ones.</p>
<h3>Working at a Games Studio</h3>
<p>Getting started with something I intentionally left out:</p>
<blockquote><p><em>Low pay. Good luck trying to buy a house.</em></p></blockquote>
<p>There&#8217;s a well known discrepancy between salary in your average programming gig and your average games programming gig. I left it out of the original post because of two factors:</p>
<ol>
<li>The difference is highly overstated. Salary varies much more within each class of work than between the two. While it is true I could probably get more money by switching to another job, the same is true for many others, and the difference wouldn&#8217;t be worth it to me.</li>
<li>It&#8217;s your choice. I expect you to make a well-informed choice on taking <em>any </em>job when it comes to what you get paid. Don&#8217;t just take any job because someone told you you get paid a lot in a certain business &#8212; make sure you get what you&#8217;re worth.</li>
</ol>
<p>A second issue from the same commenter (and several others):</p>
<blockquote><p><em>Yes, you have to come to work on Saturday and Sunday.</em></p></blockquote>
<p>This is an issue in the industry, and I&#8217;ve seen pretty bad cases of it. Since I started coding games, the working conditions have improved by far though &#8212; and this doesn&#8217;t only seem to be my situation but applies to many others I&#8217;ve spoken to at other studios (mainly within EA though &#8212; would be happy to hear the perspective of other people). At the moment, from where I&#8217;m sitting, things are looking pretty good.</p>
<p>I&#8217;m not saying crunches don&#8217;t happen, I&#8217;m just saying they&#8217;re reasonably few, have a good purpose and focused time span, and include a time off compensation after the deadline has been passed.</p>
<p>The most problematic part of this is that it&#8217;s extremely hard to figure out if this applies to any given studio without actually working there or knowing someone who does.</p>
<blockquote><p><em>I wouldn&#8217;t want to be the guy working on the next Madden game</em></p></blockquote>
<p>Well, I actually know <a href="http://twitter.com/ian_cummings">the guy working on the next Madden game</a> and he is incredibly dedicated and seemed to love what he was working with last time I saw him. About the comment, he told me &#8220;Well we don&#8217;t want that guy anyway,&#8221; which is very true &#8212; the reason there is a Madden game every year is because there are lots of people interested in a new Madden game every year, and among that crowd there will certainly be people who are interested enough to want to work on the game.</p>
<p>It&#8217;s funny, because I sometimes hear the exact opposite of this comment at work. &#8220;It&#8217;d be so awesome to work on an iterative title where you just got to improve things and do all those cool changes that we have to cut&#8221;. Working on Madden is a pretty sweet place to be if you love sports games.</p>
<p>People sometimes seem to think that innovation only means new game franchise. There are lots of interesting developments and innovations within franchises, even within a &#8220;plain old sequel&#8221;, and working on one of those titles avoids one of the great drawbacks of the games industry: half the time you&#8217;re semi-panicking because your game engine isn&#8217;t in a shippable state and there&#8217;s a whole game team trying to use it to create a game.</p>
<p>That way, working on Battlefield: Bad Company 2 is nicer than working with the first game: the same chance for innovation, but less problems with others not being able to innovate due to the state of the code.</p>
<h3>Getting started</h3>
<p>A question that keeps popping up is any version on this:</p>
<blockquote><p><em>I’m a frustrated web developer who’s always wanted to make the move into game development, but have yet to find the time to train myself and start shifting my skills over. </em></p>
<p><em>Any tips for someone looking to start out in that direction?</em></p></blockquote>
<p>I&#8217;ve touched on this subject before, in <a href="http://www.entertainingcode.com/archives/an-exceptionally-stupid-idea/">An Exceptionally Stupid Idea</a>, which tells the story of what I did. That post may be best applicable if you&#8217;re still in college, but there is a certain truth to it regardless of where you are. Time is money however, and with anything in life  you&#8217;ll need to do investments&#8230; so seeing where you could free up time is a first step.</p>
<p>What do do with the time once you have it? Well, the games industry is looking for a few things:</p>
<ul>
<li>Skilled programmers</li>
<li>&#8230; who know the language</li>
<li>&#8230; and with some experience of games</li>
</ul>
<p>The third is actually somewhat optional, though most recruiters would never admit that. Becoming a good programmer is a hard topic to cover &#8212; more than half the stuff on this blog is already devoted to that, so I&#8217;m not going to comment further on that one.</p>
<p>Chances are slim you&#8217;ll be coding anything but C++ if you code games, so if you&#8217;re not already very familiar with the language, you should get familiar with it. It&#8217;s often said that good programmers learn new languages quickly, and to a certain extent I agree with this&#8230; but if the problem is complicated enough, you need to be a language expert.</p>
<p>Finally, getting some form of portfolio is good, even if it&#8217;s &#8220;just a side project&#8221;. That could also be a good project to use as practice if you&#8217;re not too familiar with the language. Further, it helps if you&#8217;re a gamer and stay on top of what&#8217;s going on in the industry.</p>
<p>This actually ties into another comment, which was the most compact piece of information:</p>
<blockquote><p><em>C++</em></p></blockquote>
<p>If you dislike C++, turn elsewhere. I personally think it&#8217;s an extremely capable language once you learn to harness it properly. It is dangerous without the safety equipment though, and sadly some of that equipment doesn&#8217;t work with games.</p>
<p>Other languages are starting to appear when it comes to games coding. I&#8217;ve heard examples of LUA, java and C# being used as scripting languages, and of course there&#8217;s <a href="http://en.wikipedia.org/wiki/UnrealScript">UnrealScript</a>. These can be extremely beneficial for iteration times and such, but the grunt of the software is still going to be C++.</p>
<p><strong>Update</strong>: I should also mention another old post of mine about this: <a href="http://www.entertainingcode.com/archives/lets-make-a-game-engine/">Let&#8217;s Make a Game Engine!</a></p>
<h3>Games Programming</h3>
<p>I tried to avoid getting into the details of hardware and the coding that goes with it in the previous post, since I love talking about these sort of things and I didn&#8217;t want it to become a rant but hey, you asked!</p>
<blockquote><p><em>Console hardware (I&#8217;m looking at you, PS3) is made for pretty graphics demos, not simulation. If you work on the AI or physics, be prepared to focus your energy on low level optimisation and cache misses, because your AI code is never going to be any more sophisticated than a state machine.</em></p></blockquote>
<p>Well&#8230; I&#8217;m the lead AI coder on Frostbite, and while there are lots of things to be said about the Frostbite AI, &#8220;no more sophisticated than a state machine&#8221; is not one of them. I agree, some things (especially physics queries) are expensive on the hardware, but that simply means you need to re-think how you do stuff.</p>
<p>SPU code is a vastly different beast from your average code. There are some bad programming habits that can completely destroy your code for SPUs&#8230; and among those bad habits are the ones that would lead you to get stuck on low-level optimizations. Once you learn how it works, there is an incredible amount of power in the PS3. I&#8217;d dare to say it&#8217;s still relatively untapped, and that as time passes we&#8217;ll see more sophisticated uses of it.</p>
<p>The limitations of console hardware is <em>different</em>. That doesn&#8217;t mean you can&#8217;t implement physics or AI, it just means maybe you&#8217;ve got to challenge your assumptions about <em>how</em> you implement physics and AI.</p>
<blockquote><p><em>I guess the Parallelism approaches are a little different in both worlds. I bet you gamedev guys have been working with Data Parallelism for a while (i.e: programming the Playstation2 Vector units. I don’t think life is getting any easier on you guys with all those Cell SPEs to squeeze!).</em></p>
<p><em> In the enterprisey side, task parallelism is an emerging topic with languages like Erlang, Clojure and Haskell offering different abstractions for spreading computations over different hardware threads/cores.</em></p></blockquote>
<p>The vectorization units of the PS2 are a quite limited way to do data-parallel work, so I disagree with you here &#8212; with the SPUs on the PS3, it actually is easier, because it&#8217;s less limited in what you can do with them. Vectorization units and other primitive forms of data-parallelism often work in lockstep, whereas the PS3 actually has a bunch of individual, highly capable although slightly quirky processors.</p>
<p>Games are full of data-parallelisable problems as well. Rendering is the classic example &#8212; the reason GPUs have been such a hot development the last few years is that rendering lends itself so well to parallelism. But there are many other things as well &#8212; the aforementioned AI is ideal in some ways, as it tends to be made up of lots of separate processes for different actors or entities.</p>
<p>Task parallelism is also something that can be utilized to a great degree in games since there are simply so many orthogonal tasks to complete. Update the UI, do physics simulations, calculate character skinning, play audio&#8230; I can&#8217;t go into details on that, but we do a whole lot of it in Frostbite. Sadly, you do end up needing to care about many of the details that using an abstracted language would let you ignore though.</p>
<p>Still, it&#8217;s one of the most exciting aspects of coding for me, since games are one of those applications that can actually use all the power of parallel computers.</p>
<p></p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = '409';
var flattr_url = 'http://www.entertainingcode.com';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'Entertaining Code';
var flattr_dsc = 'Coding and the games industry';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/getting-into-games-a-follow-up/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Making Games</title>
		<link>http://www.entertainingcode.com/archives/making-games/</link>
		<comments>http://www.entertainingcode.com/archives/making-games/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 23:55:45 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[The Games Industry]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=722</guid>
		<description><![CDATA[I hear from programmers every now and then who are cons [...]]]></description>
			<content:encoded><![CDATA[<p>I hear from programmers every now and then who are considering trying to get into the games industry. Our projects are strange beasts that are similar to other software projects in some ways, yet vastly different in other ways. Still, if you look at it from outside, most of these differences will be hard to spot.</p>
<p>With this post, I will try to list what I see as the biggest differences between working on a game and working on a different kind of software project. If you have any questions related to it, please post them as comments and I&#8217;ll do a follow-up round.</p>
<h3>The Passion and Dedication</h3>
<p>It sounds like a cliché, but games are made by mostly gamers. In all the teams I&#8217;ve worked with spanning maybe a hundred, there&#8217;s only a few people that aren&#8217;t absolutely passionate about games, and completely dedicated to making kick-ass entertainment.</p>
<p>The enterprise coders I&#8217;ve worked with pretty much fall into two categories: the day job coders who don&#8217;t care much and the hackers that appreciate technical challenges. As you move into games, not only does just about everyone fall into the second category, but nearly everyone is also excited about the games themselves, regardless of the technical challenges involved.</p>
<p>If you&#8217;re looking for a place to work where your colleagues will be really cool, skilled people with a passion, then the games industry is where to look.</p>
<p>On a cynical note related to that, the abuse of this passion and dedication is what has given the games industry something of a bad reputation (and a well deserved one too). My impression is that working conditions have improved quite a lot across the board, even if there are still the occasional horror stories. If I were to give one piece of actual advice, it&#8217;d be to be rather thorough in your background checks on companies.</p>
<h3>Creativity</h3>
<p>Game developers live off creativity. Even the most simple churn-out-sequels factory will attract highly creative people, and studios will tend to cater to creativity to a much higher degree than most other software development companies.</p>
<p>If you&#8217;re highly creative, you will probably find it easy to fit in. My experience is that creative suggestions are almost universally appreciated regardless of source.</p>
<h3>Cross-discipline, Bleeding Edge Development</h3>
<p>Games teams are made up of a number of disciplines that vary depending on what type of game you&#8217;re making, but generally speaking you&#8217;ll at least have Designers, Graphical Artists, Animators, Sound Designers and Programmers. Our projects have Mission Designers, Environment Artists, Effects Designers and other disciplines as well.</p>
<p>In a way, this is no different than many other types projects where some end-users create some of the data for the system, but there is a major difference in the fact that the hardware platforms are either consoles or PCs with specs so high that they don&#8217;t even exist yet. The coders on the team will be creating a game framework, which is then populated with different kinds of content to produce the game.</p>
<p>The problem with this is that they&#8217;re using the software tools you&#8217;re building (like the editor and data processing pipeline) to create the game while you&#8217;re still trying to build the tools, only to run it in a game engine that is also not done yet.</p>
<p>It&#8217;s a bit like trying to produce a business application while part of your team is working on creating the source code editor you must use, and a different part of the team is building your compiler. In some magical way, the components must all mesh together so that not only are the tools done when it&#8217;s time to ship the product, but that content creators have time to do something useful with them as well.</p>
<p>This creates an extra layer of complexity to the projects that I haven&#8217;t seen anywhere else. Inter-discipline dependencies between disciplines that work in very different manners can cause common project management techniques for software development to break down, because most of the team isn&#8217;t developing software.</p>
<h3>Performance Focus and Hardware Platforms</h3>
<p>From a technical point of view, there is a heavy focus on code performance. This creates a different kind of environment, where some modern programming techniques are simply too expensive to use. It also means you tend to get good at optimizations after a while.</p>
<p>The hardware we run on is increasingly becoming paralell. Using all of the power in the PS3, for instance, requires a fairly well developed parallelism, forcing the shift from single-threaded to multi-threaded coding onto game programming long before most applications need to care all that much.</p>
<p>(Note that my view on the state of the industry is rather limited here. DICE is ahead with the Frostbite engine on current console tech, some other engines are hopelessly behind, but it&#8217;s always hard to tell what others have in development.)</p>
<p>The hardware platforms themselves can sometimes be immature and cause problems when you have to jump through hoops to get things working (simple example: graphics driver bugs).</p>
<p>The platforms themselves also impose other restrictions on your code, like the low memory cap of current generation consoles and extreme penalties for cache misses and branching.</p>
<h3>Playing Games at Work (!)</h3>
<p>I couldn&#8217;t leave that out, could I? Yes, we playtest our games at work. They&#8217;re a lot of fun, most of the time, so getting to play awesome games before anyone else is quite a perk. To be completely honest I must admit that there are times when it&#8217;s not much fun at all&#8230; but they are quite uncommon. And hey&#8230; you get to shoot your boss.</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/making-games/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Sunday Link Run</title>
		<link>http://www.entertainingcode.com/archives/2009-06-07-sunday-link-run/</link>
		<comments>http://www.entertainingcode.com/archives/2009-06-07-sunday-link-run/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 08:35:28 +0000</pubDate>
		<dc:creator>slicedlime</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Dante's Inferno]]></category>
		<category><![CDATA[E3]]></category>
		<category><![CDATA[Eddings]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[MMO]]></category>
		<category><![CDATA[Star Wars]]></category>

		<guid isPermaLink="false">http://www.entertainingcode.com/?p=670</guid>
		<description><![CDATA[A bit of a rush this weekend so I haven't been able to  [...]]]></description>
			<content:encoded><![CDATA[<p>A bit of a rush this weekend so I haven&#8217;t been able to finish the blog post I was hoping to post. Here are some links to keep you occupied for a bit though&#8230; I hope I&#8217;ll be able to post a full post the next few days.</p>
<ul>
<li>E3 has come and gone. I could link to a million things from there, but I&#8217;ll restrict myself to one: <a href="http://www.gametrailers.com/video/e3-09-star-wars/49937">The Star Wars &#8212; The Old Republic trailer</a>. That is one serious piece of awesome right there.</li>
<li>No, one more E3 mention actually: <a href="http://news.bigdownload.com/2009/06/03/e3-2009-protesters-go-after-eas-dantes-inferno-outside-conven/">You will burn in hell</a> for pretending to burn in hell.</li>
<li>In other game news, the new Red Faction <a href="http://dubiousquality.blogspot.com/2009/06/question-about-red-faction-guerilla.html">seems to be a good game</a>.</li>
<li>On the subject of MMOs, Jeff Vogel posted an interesting article about <a href="http://rpgvault.ign.com/articles/986/986323p1.html">addiction-based game design</a> and Eric at Eldergame posted an in-depth article on <a href="http://www.eldergame.com/2009/01/25/yes-the-industry-really-is-that-bad/">the health of the MMO industry</a>.</li>
<li>Sad news: <a href="http://news.bbc.co.uk/2/hi/entertainment/arts_and_culture/8085289.stm">Fantasy author David Eddings is dead</a>.</li>
<li>Here&#8217;s a concept display of a new kind of interface, <a href="http://www.dontclick.it/">used entirely without clicking</a>. I&#8217;m not sure if that&#8217;s the way of the future, but it&#8217;s interesting.</li>
<li><a href="http://alenacpp.blogspot.com/2009/06/c.html">Алёна C++</a> made <a href="http://img-fotki.yandex.ru/get/3502/jim1537.52/0_2805a_2b9e39ea_orig">this awesome map</a> of C++. Goes pretty nicely with <a href="http://www.xkcd.com/256/">xkcd&#8217;s</a> <a href="http://imgs.xkcd.com/comics/online_communities.png">map of the online communities</a> from a while back.</li>
<li>Speaks for itself: <a href="http://www.dirjournal.com/internet-journal/10-beautiful-and-creative-world-records">some beautiful world records</a>.</li>
<li>And the asshole of the week (frightening how easy it is to find these): <a href="http://kotaku.com/5273141/trademark-troll-gets-mobigames-edge-taken-down">the guy who thinks he owns the word &#8220;edge&#8221;</a>, and likes lawsuits about it &#8212; <a href="http://tigsource.com/articles/2009/05/29/tim-langdell-the-edge-of-insanity">Tim Langdell</a>.</li>
</ul>
<p></p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = '409';
var flattr_url = 'http://www.entertainingcode.com';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'Entertaining Code';
var flattr_dsc = 'Coding and the games industry';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.entertainingcode.com/archives/2009-06-07-sunday-link-run/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
