<?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>owenkellett.com &#187; Tech</title>
	<atom:link href="http://owenkellett.com/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://owenkellett.com</link>
	<description></description>
	<lastBuildDate>Mon, 06 Sep 2010 03:26:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Future Interrupted</title>
		<link>http://owenkellett.com/2010/07/20/future-interrupted/</link>
		<comments>http://owenkellett.com/2010/07/20/future-interrupted/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 19:11:21 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=627</guid>
		<description><![CDATA[I always thought of Java&#8217;s Future interface as a fairly elegant and effective way of dealing with asynchronous tasks.  It&#8217;s lightweight, gives you a mechanism to check if a task is finished, allows you to block until the task completes and retrieve its result, and also provides a hook to attempt to cancel the [...]]]></description>
			<content:encoded><![CDATA[<p>I always thought of Java&#8217;s <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/concurrent/Future.html">Future</a> interface as a fairly elegant and effective way of dealing with asynchronous tasks.  It&#8217;s lightweight, gives you a mechanism to check if a task is finished, allows you to block until the task completes and retrieve its result, and also provides a hook to attempt to cancel the task via interruption.  When used in conjunction with the various thread pool services in <code>java.util.concurrent</code> package, it becomes a simple, yet powerful tool.</p>
<p>Yesterday, though, I discovered a subtle distinction about the semantic behavior of the <code>Future</code> interface that slightly diminishes its power.  I found myself in a situation where I wanted to cancel a <code>Future</code>, but then still wait until its associated task has completed.  Initially I thought this might be accomplished with something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="java java" style="font-family:monospace;">    <span style="color: #666666; font-style: italic;">// send an interrupt to the task's thread</span>
    future.<span style="color: #006633;">cancel</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>;
&nbsp;
    <span style="color: #666666; font-style: italic;">// block until the task is complete</span>
    <span style="color: #000066; font-weight: bold;">boolean</span> finished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span>;
    <span style="color: #000066; font-weight: bold;">boolean</span> interrupted <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span>;
    <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>finished<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            future.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
            finished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span>;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>CancellationException ce<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// task has been cancelled, handle appropriately</span>
            finished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span>;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>ExecutionException ee<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// task completed with error, handle appropriately</span>
            finished <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span>;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">InterruptedException</span> ie<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// current thread has been interrupted, record and continue</span>
            interrupted <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span>;
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// re-interrupt this thread if we've been interrupted</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>interrupted<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Thread</span>.<span style="color: #006633;">currentThread</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">interrupt</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Essentially, call <code>cancel(true)</code> on the <code>Future</code> in order to send an interrupt to the associated task&#8217;s thread.  Then call <code>get()</code> on the <code>Future</code> in a loop to ensure that the task has properly handled the interruption and completed execution before proceeding.  However, the above code does not work as expected.  The problem is that once you call <code>cancel()</code> on a <code>Future</code>, the task&#8217;s thread will be sent an interrupt if it is running, but then the state associated with the task is completely cast aside.  Subsequent calls to <code>get()</code> on the same <code>Future</code> will <em>always</em> immediately throw a <code>CancellationException</code> and there is no available mechanism to block until the task&#8217;s thread has completed handling the interruption and finished its execution.</p>
<p>The worst part about this is that it is not immediately clear from the javadoc for the <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/concurrent/Future.html">Future</a> interface that this is the actual behavior.  The description of the <code>cancel()</code> method is very clear that if the task has not started, it will prevent it from starting, but if it has already started, it can make an attempt to &#8220;cancel&#8221; it via interruption of the task&#8217;s thread.  Of course, since in Java interrupting a thread is only a suggestion for it to actually stop what it&#8217;s doing, there&#8217;s no guarantee about when or if the task will actually stop unless you handle the interruption properly.  Therefore, I hoped that calling <code>get()</code> would wait for the computation to complete, <em>and then</em> throw a <code>CancellationException</code> if the thread was interrupted.  After testing it and also digging through the Java source code for the <code>Future</code> implementation, I discovered that that is definitely not the case.</p>
<p>I struggled for a bit to come up with a reasonable alternative mechanism for accomplishing this behavior short of re-implementing my own thread pool and managing the threads myself.  Fortunately, after speaking with a colleague, I was pointed to the <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#beforeExecute%28java.lang.Thread,%20java.lang.Runnable%29">beforeExecute</a> and <a href="http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#afterExecute%28java.lang.Runnable,%20java.lang.Throwable%29">afterExecute</a> hooks on the <code>ThreadPoolExecutor</code>.  It takes a little more work then I had hoped, but using those hooks allows you to augment the functionality of <code>ThreadPoolExecutor</code> to achieve this type of behavior.  I&#8217;ll leave the details of it up to you.</p>
<p>Anyhow, that&#8217;s my tidbit for the day.  Be careful when playing with the <code>Future</code>!</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2010/07/20/future-interrupted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rule 1 of Programming: It&#8217;s Always Your Fault (Almost)</title>
		<link>http://owenkellett.com/2009/11/12/rule-1-of-programming-its-always-your-fault-almost/</link>
		<comments>http://owenkellett.com/2009/11/12/rule-1-of-programming-its-always-your-fault-almost/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 16:21:25 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=551</guid>
		<description><![CDATA[Over the past week or so, I&#8217;ve been working on putting together some micro benchmarks for Project Darkstar.  There has been a significant uptick in forum activity lately relating to stress testing and performance issues.  In particular, we&#8217;ve seen many questions along the lines: &#8220;I can only connect X users to my darkstar [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past week or so, I&#8217;ve been working on putting together some micro benchmarks for <a href="http://www.projectdarkstar.com">Project Darkstar</a>.  There has been a significant uptick in <a href="http://www.projectdarkstar.com/forum/">forum activity</a> lately relating to stress testing and performance issues.  In particular, we&#8217;ve seen many questions along the lines: &#8220;I can only connect X users to my darkstar server, what&#8217;s wrong?&#8221;  First of all, this is great news.  It means that people are making significant progress with their darkstar based games/applications and are working to push the limits of the technology.  However, I also think that this is the completely wrong question to ask.  As <a href="http://owenkellett.com/2009/05/12/capacity-testing/">I&#8217;ve demonstrated before</a>, Project Darkstar has a pretty high ceiling for raw capacity in terms of number of users.  A properly tuned app with a light load can easily handle tens of thousands of users per node.  However, connecting mostly idle users to a mostly idle server is not very interesting.  These capacity numbers naturally decrease as the number of messages between the clients and server and the amount of processing per message increases.  This seems obvious, but people still ask the capacity question as though all games developed with darkstar are going to have identical limitations.  This is simply not the case.</p>
<p>With this said, though, we can still strive to identify upper bounds on Project Darkstar&#8217;s performance at a more fine-grained level.  Project Darkstar is an event driven transactional system, so all operations are not without cost.  With these micro benchmarks, I&#8217;m hoping that I can establish a relative cost to each of the operations using the DataManager, the ChannelManager, and the TaskManager.  For example, how expensive is it to retrieve an object using DataManager.getBinding() vs ManagedReference.get().  How much overhead is involved with each transaction?  How expensive is it to create a Channel or send a message on a Channel?  With more or less users?  While the cost of retrieving data from Darkstar&#8217;s data store should be an order of magnitude faster than using J2EE and a RDBMS, it is also likely an order of magnitude <em>slower</em> than retrieving data from a data structure that is already in memory and using no synchronization.  This is information that users really need to be aware of and be able to take into perspective when designing their game, structuring their tasks, and establishing their own expectations of what the performance should be like.</p>
<p>So over the past couple of days, I&#8217;ve been debugging a problem in these benchmarks.  In one particular test, I was attempting to measure the raw execution time per call to DataManager.getBinding() from the Project Darkstar API.  The test was pretty simple, I just set a large number of bindings in a single set of setup transactions.  Then I would time the execution of another set of transactions that would make some subset of calls to getBinding() on the names that I had just setup.  Taking into account previously measured transaction overhead I could then come up with a reasonable estimate of the cost per operation.  Seems easy right?  Well it turns out that I hit a snag.  In running this test, I was repeatedly getting a situation where a seemingly random name binding was not being set properly during setup.  Most of the calls to getBinding() would work fine, but a couple were throwing NameNotBoundException.  What?  This didn&#8217;t make much sense.  I went back and looked over my code many times, I tried a myriad of variations, logging output, and print lines, but still no luck.  I was still getting NameNotBoundException for what seemed like a random name in the sequence.  Hmmph.</p>
<p>At this point, I went through a whole series of exercises, all centered around one assumption, that my code was right.  I tested the native edition vs. the Java edition of BDB, suspecting maybe there was a weird bug in one of them: same result.  I tried longer transactions, more operations, larger serialized data objects: same result.  I tried running my benchmarks in different orders: same result.  I even started writing test cases for DataManager.setBinding() that simulated transaction rollback and retry, large numbers of consecutive calls to setBinding() and binding and rebinding of the same name.  I thought I was going to uncover some weird corner case bug.  But those tests were passing!  I was at a loss.  After probably two days of sporadic attempts at debugging this, I finally went back and looked really hard at my own test code.  And&#8230; I found a bug (doh!).  It turns out that I was being too cute with my setup transactions, and was modifying a non-local counter variable inside of my anonymous nested transaction class.  In random situations, this class would abort and retry (a normal darkstar operation), but since it was modifying a variable that lived outside of the task itself, this value was not being rolled back.  The result was that a name binding would be skipped periodically (exactly the behavior that I was seeing).</p>
<p>So here&#8217;s my question.  Why did I assume that code that I wrote in less than a day was more likely to be correct than Berkeley DB itself, a project that&#8217;s been developed and tested for a couple of decades?  Why did I assume that code that I wrote in less than a day was more likely to be correct than Project Darkstar&#8217;s Data Service code which has been developed and tested for years?  I mean, I knew better than to think that Tim&#8217;s code is the likely culprit, but I still started writing test cases thinking I was going to heroically find some obscure bug.  This, my friends, is a violation of the number 1 rule of programming: If you&#8217;re having problems, It&#8217;s Always Your Fault (almost).  I mean, don&#8217;t get me wrong, I&#8217;ve found (and reported) bugs in well established open source projects before, but those situations are actually few and far between.  I also don&#8217;t mean to suggest that Project Darkstar is bug free.  I do think, though, that sometimes it&#8217;s too tempting to conclude that there&#8217;s a bug in that library you&#8217;re using, or there&#8217;s a performance limitation in that technology that is fundamentally impossible to overcome.  Maybe that&#8217;s true, but 99% of the time, it&#8217;s your fault.</p>
<p>And with regard to those micro benchmarks, I&#8217;m hoping to publish some results soon (assuming I don&#8217;t get hung up with any more boneheaded mistakes!)</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/11/12/rule-1-of-programming-its-always-your-fault-almost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaOne: Signing Off</title>
		<link>http://owenkellett.com/2009/06/05/javaone-signing-off/</link>
		<comments>http://owenkellett.com/2009/06/05/javaone-signing-off/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 22:05:31 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=428</guid>
		<description><![CDATA[I just went to two more sessions here on the last day at JavaOne and they were actually both quite good.  The first was given by William Pugh who is one of the creators of the FindBugs static analysis tool.  We use FindBugs extensively in our build process with Project Darkstar and it [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/javaone.png" alt="javaone" title="javaone" width="150" height="56" class="alignleft size-full wp-image-429" />I just went to two more sessions here on the last day at <a href="http://java.sun.com/javaone">JavaOne</a> and they were actually both quite good.  The first was given by <a href="http://en.wikipedia.org/wiki/William_Pugh">William Pugh</a> who is one of the creators of the <a href="http://findbugs.sourceforge.net/">FindBugs</a> static analysis tool.  We use FindBugs extensively in our build process with Project Darkstar and it has proven to be quite useful.  It was interesting to see that a few of the bug examples given during this session actually had some overlap with Josh Bloch&#8217;s <em>Effective Java</em> talk that I attended earlier in the conference.  In addition to the FindBugs talk I also went to a talk on the ins and outs of the Java Virtual Machine.  I am certainly no JVM expert so this was an interesting talk for me to see some examples of how the JVM does speculative optimization, garbage collection, and some other neat tricks to speed up your code.</p>
<p>I have one more session on my schedule for today but this will likely be my final blog post on this year&#8217;s JavaOne conference.  A few closing thoughts:</p>
<ul>
<li>On the subject of <a href="http://www.projectdarkstar.com">Project Darkstar</a>, I would say it was a generally positive event.  Darkstar is a technology that clearly many have heard of, are interested in, and have a sincere desire to apply it for their own needs.  With DarkChat, the CommunityOne and JavaOne sessions, and the hands-on lab, this conference seemed to do a decent job of generating some additional buzz.</li>
<li>On a more general note, there&#8217;s obviously a bit of uncertainty surrounding the future of Java, JavaOne, and how <a href="http://www.oracle.com">Oracle</a> will handle its future direction.  I think that showed a bit at this conference, as there was no clear air of excitement and energy around anything in particular.  There weren&#8217;t really any groundbreaking announcements, no killer apps, no prototypes that can truly be considered game changers.  I did see many examples of fine engineering and innovation but nothing worthy of eliciting that &#8220;Wow&#8221; factor from a general audience.</li>
<li>Finally, on a personal note, I enjoyed coming to this conference and felt like I was able to connect a little more to the community than at the two GDC conferences I&#8217;ve been to this year.  While Project Darkstar is a technology targeted specifically at games, I wouldn&#8217;t say I consider myself a &#8220;game developer&#8221; at all.  I&#8217;m a Java developer, and more generally a software developer, and while it was a long and exhausting week, I was glad I got the opportunity to be here and expand my horizons a bit.</li>
</ul>
<p>So that&#8217;s it for my week at JavaOne 2009.  I hope you enjoyed following along.  Next week I&#8217;ll be back to my regularly scheduled Ultimate-playing ways.</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/05/javaone-signing-off/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaOne: Days 3 and 4</title>
		<link>http://owenkellett.com/2009/06/05/javaone-days-3-and-4/</link>
		<comments>http://owenkellett.com/2009/06/05/javaone-days-3-and-4/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 18:19:35 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=418</guid>
		<description><![CDATA[I&#8217;m here at the final day of the JavaOne conference and things are starting to wind down.  The pavilion floor is closed, there are only a few sessions left on the schedule, and people are starting to wrap things up.  Karl and Keith actually caught flights home this morning but this being my [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/javanet_logo.png" alt="javanet_logo" title="javanet_logo" width="168" height="60" class="alignright size-full wp-image-417" />I&#8217;m here at the final day of the <a href="http://java.sun.com/javaone">JavaOne</a> conference and things are starting to wind down.  The pavilion floor is closed, there are only a few sessions left on the schedule, and people are starting to wrap things up.  Karl and Keith actually caught flights home this morning but this being my first JavaOne (and last?), I wanted to stay for the whole thing.  What JavaOne will look like next year is anyone&#8217;s guess.</p>
<p>In any case, yesterday was a light day for me at the conference.  I attended a session which was essentially a survey of a grab-bag of small test tools and gizmos.  An interesting takeaway from that session was that testing Java code is not always best done using Java.  Often times certain necessary and useful features of the language (like private methods and security features) make things difficult to test.  Technologies like <a href="http://groovy.codehaus.org/">Groovy</a> and <a href="http://jruby.codehaus.org/">JRuby</a>, though, contain hooks that allow you to circumvent some of these features for the purposes of testing, without making your test code ugly, brittle, and difficult to maintain.  I think the case that was made was good in the case of some tools, but others just traded one piece of complicated (but recognizable) syntax, to another piece of complicated (and unrecognizable) syntax instead.  There were some things worth investigating though.</p>
<p>After that session, as mentioned I also recorded a quick podcast on <a href="http://www.projectdarkstar.com">Project Darkstar</a> at the <a href="http://wiki.java.net/bin/view/Javaone/CommunityCorner">java.net CommunityCorner</a>.  The podcast was in the form of a conversational type interview with one of the editors at java.net and he told me that he&#8217;ll be posting it and a blog of the event somewhere on <a href="http://www.java.net">java.net</a> within the next couple of weeks.  Stay tuned for that.</p>
<p>I didn&#8217;t do a lot Thursday afternoon.  I wandered the pavilion floor, talked with a few people, and handed out the rest of the hundred or so Project Darkstar pens that I brought with me to the conference.  I then met up with Keith, Karl, and Mike.  Mike and his wife offered their generous hospitality with a low-key, very nice get together at their house in Oakland Hills.</p>
<p>I attended James Gosling&#8217;s general session &#8220;Toy Show&#8221; this morning and there were some neat things showcased.  One of the cool innovations that was demoed was the mashup of a Wii remote, a <a href="http://www.sun.com/software/javafx/">JavaFX</a> application being projected onto a piece of transparent, frosted glass, and a glove with infrared sensors on the finger tips.  The result was a makeshift touch screen that gave a user interface similar to what they compared to as something out of the movie Minority Report.  Pretty slick.  There was also a more sobering presentation on how one company is using Java to do image recognition and analysis to identify images, including sharpening the ability to more quickly, easily, and accurately diagnose and identify cancer from biopsy images.  Other highlights included a Java powered, energy efficient, hybrid Lincoln Continental, and an Audi capable of driving itself.</p>
<p>I&#8217;m getting ready to attend a few more sessions before the conference draws to a close, and I&#8217;ll have some closing thoughts a little later.</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/05/javaone-days-3-and-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaOne: CommunityCorner</title>
		<link>http://owenkellett.com/2009/06/04/javaone-communitycorner/</link>
		<comments>http://owenkellett.com/2009/06/04/javaone-communitycorner/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 16:00:59 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=409</guid>
		<description><![CDATA[I&#8217;m writing this post from one of the hundreds of Sun Ray stations scattered throughout the Moscone Center at JavaOne.  If you don&#8217;t know what a Sun Ray is, it&#8217;s essentially a stateless thin client that, when I stick my JavaOne badge into, will pull up a virtual desktop associated with my JavaOne id [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/sunray.png" alt="sunray" title="sunray" width="250" height="250" class="alignleft size-full wp-image-412" />I&#8217;m writing this post from one of the hundreds of Sun Ray stations scattered throughout the Moscone Center at <a href="http://java.sun.com/javaone">JavaOne</a>.  If you don&#8217;t know what a Sun Ray is, it&#8217;s essentially a stateless thin client that, when I stick my JavaOne badge into, will pull up a virtual desktop associated with my JavaOne id from a centralized server.  In the case of these SunRays, JavaOne attendees have the option of using an <a href="http://www.ubuntu.com">Ubuntu</a>, <a href="http://www.opensolaris.org">OpenSolaris</a>, or <a href="http://www.microsoft.com">Windows Vista</a> desktop.  When I pull out my card, the desktop will be saved in its exact state, and I can pull it back up again from any other Sun Ray at the conference.  In my opinion, Sun Rays are only useful in a limited number of use cases, but a conference like this definitely qualifies as one of those use cases.  Instead of cracking open my laptop and trying to hook into wifi and not drain too much battery, I can just pop into one of these stations to check my email, register for sessions, or write a blog post!</p>
<p>Today at 11:30AM I&#8217;m going to be at the java.net <a href="http://wiki.java.net/bin/view/Javaone/CommunityCorner">CommunityCorner</a> located at booth 101 in the Pavilion.  A few other members of the Project Darkstar team should be joining me as well, and I&#8217;ll be doing a brief podcast on Project Darkstar.  If you&#8217;re here at the conference, please stop by to chat (and take a free pen!).</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/04/javaone-communitycorner/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaOne: Day 2</title>
		<link>http://owenkellett.com/2009/06/03/javaone-day-2/</link>
		<comments>http://owenkellett.com/2009/06/03/javaone-day-2/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 15:29:52 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=403</guid>
		<description><![CDATA[I&#8217;m back for another recap, this time of day two at JavaOne.  I managed to get up early again this morning and attend the morning keynote.  To be honest, it was a bit of a yawn today.  It was basically a marketing pitch for Sony Ericsson&#8217;s platform and how they are making [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/darkstar_logo.png" alt="darkstar_logo" title="darkstar_logo" width="288" height="60" class="alignright size-full wp-image-404" />I&#8217;m back for another recap, this time of day two at <a href="http://java.sun.com">JavaOne</a>.  I managed to get up early again this morning and attend the morning <strong>keynote</strong>.  To be honest, it was a bit of a yawn today.  It was basically a marketing pitch for Sony Ericsson&#8217;s platform and how they are making it easier to bring Java applications to their mobile platform.  I could tell it was a marketing pitch because Christopher David, who drove the session said at least four or five times during the hour: &#8220;&#8230; and this is not just a marketing pitch&#8221;.  It is true that mobile apps are just going to grow, though, so it is a good market to move into.  The session didn&#8217;t do it for me though.</p>
<p>After the keynote, I sat in on <a href="http://weblogs.java.net/blog/kohsuke/">Kohsuke Kawaguchi&#8217;s</a> session on bringing continuous integration in <a href="https://hudson.dev.java.net">Hudson</a> to the cloud.  This seemed intriguing and relevant since I maintain a Hudson instance internally for Project Darkstar builds and am looking for ways for us to expand its usefulness.  I was also interested to see what exactly he meant by using &#8220;the cloud&#8221;.  The term &#8220;cloud computing&#8221; is such an overloaded term these days and in fact I would suggest that a very small percentage of things that are named &#8220;cloud computing&#8221; actually qualify as such.  What Kohsuke has done for this session though, is one of those things.  Essentially, he&#8217;s built a Hudson plugin that will automatically provision, configure and use an <a href="http://aws.amazon.com/ec2/">Amazon EC2</a> instance as a Hudson build slave dynamically and <strong>on demand</strong> based on load.  So, if you have a Hudson build cluster, and your build machines are getting swamped with work, Hudson will spin up a new virtual build slave automatically and use it to help handle the additional demand.  When the build queue dies down, after a period of time the EC2 instances will shut themselves down and disappear.  Really slick.</p>
<p>After taking a break for lunch, as I mentioned yesterday I wanted to make sure I went to Josh Bloch&#8217;s session on <a href="http://java.sun.com/docs/books/effective/"><em>Effective Java</em></a>.  He talked about several topics including Java generics, enums, varargs, and serialization tricks.  It was all really useful stuff and it turns out that I clearly have never <em>really</em> learned how to properly use wildcards with Java generics.  In other words when to use <code>List&lt;? extends MyType&gt;</code>, <code>List&lt;? super MyType&gt;</code>, or just <code>List&lt;MyType&gt;</code>.  This &#8220;PECS&#8221; rule, as Josh called it, is so simple that it&#8217;s seems almost embarrassing that I didn&#8217;t know it.  Further incentive for me to read the rest of his book and overall a very worthwhile session.</p>
<p>In the late afternoon, I gave my newly tweaked <a href="http://www.projectdarkstar.com">Project Darkstar</a> talk.  I was actually really encouraged by this talk as we had I would say around 100 attendees in the room.  Additionally, after the talk (which seemed to go pretty well), there were quite a few good honest questions and several people came by afterwards who were genuinely interested in learning more and doing more with the technology.  In fact, there were more questions asked at the end of this talk then any other talk that I&#8217;ve attended so far at both CommunityOne and JavaOne this week.  It&#8217;s interesting too, that even though Project Darkstar is a technology specifically designed for games and game developers, I feel like it has had a much greater presence and interest at JavaOne, a <em>Java</em> developers conference, then at GDC, a <em>game</em> developers conference.  That could also simply be because of the quantity and prominence of the sessions and events going on that are related to it though (including DarkChat).</p>
<p>Overall, it was a good day but also pretty busy and exhausting.  I met up with Karl, Keith, Mike, and John for a good dinner and am now pretty much ready to crash.</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/03/javaone-day-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaOne: Day 1</title>
		<link>http://owenkellett.com/2009/06/02/javaone-day-1/</link>
		<comments>http://owenkellett.com/2009/06/02/javaone-day-1/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 02:24:14 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=397</guid>
		<description><![CDATA[Whew.  Technically it&#8217;s still only day one of the JavaOne conference and I already feel like I&#8217;ve put in a week&#8217;s worth of energy.  I just returned from running the Project Snowman hands-on lab this afternoon.  It was moderately successful with a few painful and time consuming hiccups &#8211; more on that [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/snowmanlab.png" alt="snowmanlab" title="snowmanlab" width="253" height="326" class="alignleft size-full wp-image-396" />Whew.  Technically it&#8217;s still only day one of the <a href="http://java.sun.com">JavaOne</a> conference and I already feel like I&#8217;ve put in a week&#8217;s worth of energy.  I just returned from running the <a href="https://project-snowman.dev.java.net">Project Snowman</a> hands-on lab this afternoon.  It was moderately successful with a few painful and time consuming hiccups &#8211; more on that in a minute.  First though, another quick rundown of my day:</p>
<p>The <strong>keynote</strong> was great.  <a href="http://blogs.sun.com/chrism">Chris</a>, of course, kicked off the event and introduced the <em>DarkChat</em> application that will be running throughout the conference.  It&#8217;s basically a simple social networking tool that shows off <a href="http://www.sun.com/software/javafx/">JavaFX</a>.  The other thing about it, though, is that the backend is built on Project Darkstar, and <a href="http://blogs.sun.com/kbt">Keith</a> is the one who had been spending a lot of his time recently getting that put together.  Chris also snuck in a plug for the Project Darkstar sessions during that intro (the Project Snowman lab was completely full this afternoon).</p>
<p>After that, obviously, he yielded to CEO <a href="http://blogs.sun.com/jonathan/">Jonathan Schwartz</a> who ran most of the show.  There were several announcements, including preview releases of JDK 7 and J2EE 6 and updates to JavaFX.  Perhaps the most interesting, though, is the launch of the <a href="http://store.java.com">Java Store</a> beta program.  The Java Store is essentially a distribution mechanism that taps into the huge install base of Java to deliver Java applications to consumers in a consistent manner.  Think iPhone&#8217;s app store except replace iPhone users with Java users.  Now, the concept behind the Java Store is not a new idea, but packaging and distributing Java applications has always been sort of a funny animal.  I actually think this is a great initiative and hope it takes off.</p>
<p>After the keynote, I attended two sessions.  The first was on using <a href="http://www28.cplan.com/cc230/session_details.jsp?isid=304010&#038;ilocation_id=230-1&#038;ilanguage=english">Java on game handhelds</a>.  This session caught my eye because the description claims that they were able to connect a Sony PSP to a Nintendo DSi using a Project Darkstar server as the game backend.  Wow that sounds cool right?  Well, it is cool, but not quite as cool as you think.  What they actually did is hack the PSP and DSi and put their own firmware on the devices which supports <a href="http://java.sun.com/javame/index.jsp">JavaME</a>.  They then wrote a game client using the JavaME darkstar client and hooked them both up to the same darkstar server.  After some finagling they did eventually get a PSP and two DSi clients logged into the same game, but they were not using anything native to the two devices.  A ways off from what we&#8217;d like to see but still pretty neat.</p>
<p>The <a href="http://www28.cplan.com/cc230/session_details.jsp?isid=305186&#038;ilocation_id=230-1&#038;ilanguage=english">second session</a> that I went to caught my attention because Josh Bloch was one of the presenters.  For a while now, I&#8217;ve been meaning to get my hands on and read all the way through his book <a href="http://java.sun.com/docs/books/effective/"><em>Effective Java</em></a>.  This session further solidified that desire.  During the session, he and Neal Gafter analyzed five or six Java code snippets that look correct but actually have tricky and subtle bugs.  Not only was the content interesting, but the back and forth banter style presentation format was entertaining and engaging.  I plan to attend another of Josh&#8217;s talks scheduled for tomorrow.</p>
<p>After a break, as I mentioned above, I proctored and ran the Project Snowman hands-on lab in the late afternoon (with the help of Dan, Keith, and a few other proctors as well).  Overall, I would say it ran ok.  There was one large and unfortunate problem at the beginning of the lab that reeked havoc throughout the remainder of the session.  Essentially, one of the first steps in the lab is to install and configure the <a href="http://maven.apache.org">Maven</a> plugin for <a href="http://www.netbeans.org">Netbeans</a>.  Unfortunately, when all 100 people in the room tried to do that, we overwhelmed something on the network (whether it was the outgoing pipe in the room, the Netbeans server, or what who knows).  Getting Maven up and configured for everyone took a while, and once it was up, network connectivity issues continued to plague the attendees as Maven would occasionally search for artifacts on the network causing it to pause or hang during builds.  The result is that running the session was not very smooth as I and the other proctors (special thanks to them btw) spent most of the time running around the room debugging these annoying Maven issues rather than Project Darkstar issues.  Regardless, though, I think many people did enjoy it and they were given all of the materials that they need to try to complete it on their own.</p>
<p>So that was my day.  There&#8217;s another session tonight on the Java Collections Framework that I&#8217;m currently signed up to attend.  But first, dinner.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/02/javaone-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CommunityOne</title>
		<link>http://owenkellett.com/2009/06/01/communityone/</link>
		<comments>http://owenkellett.com/2009/06/01/communityone/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 04:52:19 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=386</guid>
		<description><![CDATA[Getting to JavaOne early to test out the snowman lab actually gave me a chance to attend some of the sessions and events going on today at CommunityOne.  This is a free conference that is geared towards users and developers of open source technologies and software.  Here&#8217;s a rundown of what I did/saw:

The [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/06/communityone_logo.png" alt="communityone_logo" title="communityone_logo" width="280" height="165" class="alignright size-full wp-image-387" />Getting to <a href="http://java.sun.com/javaone">JavaOne</a> early to test out the snowman lab actually gave me a chance to attend some of the sessions and events going on today at <a href="http://developers.sun.com/events/communityone/2009/west/index.jsp">CommunityOne</a>.  This is a free conference that is geared towards users and developers of open source technologies and software.  Here&#8217;s a rundown of what I did/saw:</p>
<ul>
<li>The <strong>keynote</strong> this morning had two main focuses: cloud computing and <a href="http://www.opensolaris.org">OpenSolaris</a>.  There was some good stuff in there; Solaris has long had a bad reputation for being very unfriendly, making many oblivious to its core quality.  Solaris is consistently the best performer in many of the Project Darkstar benchmarks that we&#8217;ve run, for example.  I think OpenSolaris is slowly, but surely, making Solaris more accessible to the masses.</li>
<li>I attended two morning talks, one on the features in the latest <a href="http://subversion.tigris.org/">Subversion</a> release and one on a <a href="https://hudson.dev.java.net/">Hudson</a> use case.  Most of the material I was already aware of but looking at some of the things they were doing with Hudson, I think we should really investigate expanding our Hudson deployment.  Currently we have a Hudson server doing continuous integration builds on each commit to the Project Darkstar trunk.  However, it&#8217;s only deployed on a single Solaris machine so our continuous test platform is limited to that.  In the presentation, these guys were using Hudson to fire up multiple virtual machines representing various platforms on demand to do cross-platform testing of Netbeans.  This could also be an option for us.</li>
<li>In the afternoon, I went to <a href="http://blogs.sun.com/chrism/">Chris Melissinos&#8217;s</a> talk on Project Darkstar.  Chris is actually the Master of Ceremonies for the entire JavaOne conference and is one of the original promoters of the Project Darkstar project.  If you&#8217;ve ever met him, you know that he&#8217;s one of the most dynamic and outspoken people there is.  Which makes this next fact even more surprising in that <em>I actually ended up giving part of Chris&#8217;s talk</em>.  About five minutes before the session was about to start, I bumped into Chris and chatted with him for a few minutes.  Then he said something like &#8220;Oh good I&#8217;m glad you&#8217;re here, do you mind coming up and sitting on stage to answer any technical questions people might have?&#8221;  Um, sure?  The next thing I know some guy is putting a microphone on me and I&#8217;m sitting in front of these blinding lights.  <em>Then</em>, about halfway through the talk, Chris stumbles across some technical slides and says &#8220;Owen do you want to give this part of the presentation?  Better you then me butchering it.&#8221;  Ummmm, ok?  I spent the next fifteen minutes or so ad-libbing a sequence of presentation slides, having no idea what was coming next.  Thanks Chris!  The truth is, the presentation actually did turn out pretty well.  Chris was his usual dynamic and entertaining self and I managed to bring just enough technical depth to the show.  Karl suggested I stay away from Chris before he gives the JavaOne keynote tomorrow morning though!</li>
<li>During the keynote this morning I briefly heard them mention something about the <a href="http://jucr.opensolaris.org/home/">OpenSolaris Juicer</a>.  The Juicer is a service which allows anyone to submit a piece of software for OpenSolaris for test and review to be included in the official &#8220;contrib&#8221; repository of OpenSolaris packages.  Software packaging and distribution is interesting to me so I took a peak at their late afternoon session on the Juicer.  It&#8217;s good to see that OpenSolaris is <em>finally</em> approaching something close to the <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">apt</a> system that has been around for years on Debian and now Ubuntu.</li>
</ul>
<p>That&#8217;s about it for my day.  I met up with a few others for dinner and am now getting ready to go to sleep.  Big day tomorrow with the <a href="https://project-snowman.dev.java.net">Project Snowman</a> lab scheduled in the afternoon.</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/06/01/communityone/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaOne Prep</title>
		<link>http://owenkellett.com/2009/05/31/javaone-prep/</link>
		<comments>http://owenkellett.com/2009/05/31/javaone-prep/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 00:37:51 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=379</guid>
		<description><![CDATA[I&#8217;m back in San Francisco this week in the familiar downtown area near the Moscone Center where JavaOne is being held.  It wasn&#8217;t that long ago when I was here at the same spot for GDC, and now I&#8217;m back for another first time experience.  I&#8217;ve never been to JavaOne before, and what [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/05/javaone_logo.png" alt="javaone_logo" title="javaone_logo" width="263" height="108" class="alignleft size-full wp-image-380" />I&#8217;m back in San Francisco this week in the familiar downtown area near the <a href="http://www.moscone.com/site/do/index">Moscone Center</a> where <a href="http://java.sun.com/javaone">JavaOne</a> is being held.  It wasn&#8217;t that long ago when I was here at the same spot for <a href="http://www.gdconf.com/">GDC</a>, and now I&#8217;m back for another first time experience.  I&#8217;ve never been to JavaOne before, and what better way to gain my first exposure to it than as a first class citizen (speaker).</p>
<p>If you haven&#8217;t already seen it, John already gave an excellent run down of the Project Darkstar related activities in the <a href="http://blogs.sun.com/projectdarkstar/entry/project_darkstar_lineup_javaone">Project Darkstar team blog</a>.  At the risk of sounding repetitive, I&#8217;ll be participating in three of those events this week:</p>
<ul>
<li>On <strong>Tuesday</strong>, I&#8217;ll be running a <a href="http://www28.cplan.com/cc230/session_details.jsp?isid=305562&#038;ilocation_id=230-1&#038;ilanguage=english">hands on lab</a> on Project Darkstar.  The lab will essentially be a step-by-step tutorial on coding up the <a href="https://project-snowman.dev.java.net/">Project Snowman</a> game.  I just zipped through the actual lab on the actual lab machines earlier this afternoon and I think it&#8217;s going to turn out to be a pretty fun lab.</li>
<li>On <strong>Wednesday</strong>, I&#8217;ll be giving a newly tweaked version of my Project Darkstar <a href="http://www28.cplan.com/cc230/session_details.jsp?isid=304575&#038;ilocation_id=230-1&#038;ilanguage=english">technical talk</a>.  Taking a queue from <a href="http://www.dailymile.com/people/bk84">Brian</a> (award winning high school history teacher), I&#8217;ve worked in some verbal sci-fi references to go along with the visuals.  This should make it awesome.</li>
<li>On <strong>Thursday</strong>, I&#8217;ve been tagged to do a quickie podcast in the <a href="http://wiki.java.net/bin/view/Javaone/CommunityCorner">JavaOne Community Corner</a>.  I think it will be a pretty informal chat about Project Darkstar.</li>
</ul>
<p>So those are my responsibilities this week.  Other than that, I&#8217;ve scoped out and signed up for some other sessions that peaked my interest, including among others one on <a href="https://hudson.dev.java.net/">Hudson</a>, a few on unit testing, and a couple being given by the Java veteran <a href="http://en.wikipedia.org/wiki/Joshua_Bloch">Josh Bloch</a>.  Then there are the keynotes, general sessions, Java Pavilion, and probably too many other events going on for me to keep track of.  And of course I&#8217;ll try (and most certainly fail) at keeping up with the host of parties and bashes going on in the evenings.</p>
<p>It will be a busy week ahead but I&#8217;m pretty excited about it.  To be honest, a part of me was dreading this event.  Mostly because I&#8217;m not a very outspoken person, and often like to keep to the shadows.  Being put front and center for these sessions is essentially way outside of my comfort zone.  I was also talking to Katy last night about how travelling can be draining for me.  Between Austin, GDC, and now JavaOne, this is the third time I&#8217;ve travelled in a year&#8217;s time.  Small potatoes for some, but the most ever for me.  Now that I&#8217;m here, though, I&#8217;m ready for the challenge and am looking forward to a successful (and fun!) week at JavaOne.  Maybe I&#8217;ll see you there&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/05/31/javaone-prep/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Recap: GDC 2009</title>
		<link>http://owenkellett.com/2009/03/30/recap-gdc-2009/</link>
		<comments>http://owenkellett.com/2009/03/30/recap-gdc-2009/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 20:20:11 +0000</pubDate>
		<dc:creator>Owen</dc:creator>
				<category><![CDATA[Project Darkstar]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://owenkellett.com/?p=339</guid>
		<description><![CDATA[I spent most of last week in San Francisco attending the annual Game Developer&#8217;s Conference &#8211; a pure geek fest with all of the big names exhibiting like Nintendo and Sony, as well as many many smaller companies, independent developers, and students floating around.  Having only previously attended GDC Austin last September, this experience [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://owenkellett.com/blog/wp-content/uploads/2009/03/gdc.jpg" alt="gdc" title="gdc" width="387" height="264" class="alignleft size-full wp-image-340" />I spent most of last week in San Francisco attending the annual <a href="http://www.gdconf.com">Game Developer&#8217;s Conference</a> &#8211; a pure geek fest with all of the big names exhibiting like Nintendo and Sony, as well as many many smaller companies, independent developers, and students floating around.  Having only previously attended <a href="http://www.gdcaustin.com/">GDC Austin</a> last September, this experience was quite different without a <a href="http://www.projectdarkstar.com">Project Darkstar</a> booth on the expo floor.  On the one hand, I was able to attend more sessions, see more of the other booths and expos, and speak with more of the other attendees.  On the other hand, though, there was a distinct lack of presence that Project Darkstar clearly had down in Austin.  Here are some thoughts on the conference, in no particular order:</p>
<ul>
<li>It was <em>really</em> great to finally meet Esko, Jonathan, and Andres &#8211; three of the four contest winners from the <a href="http://www.projectdarkstar.com/developer-challenge-contest.html">Project Darkstar Developer Challenge</a>.</li>
<li>The aforementioned contest winners were interviewed on Chris Melissinos&#8217;s radio show <a href="http://www.blogtalkradio.com/stations/sunradio/shiftradio">SHIFT Radio</a> on Friday morning.  I found some time to <a href="http://www.blogtalkradio.com/stations/sunradio/shiftradio/2009/03/27/SHIFT-Radio-Episode-35-Project-Darkstar-winners-at-the-GDC">listen to it</a> after I returned, and honestly, it&#8217;s a great display of the internal gears of the Project Darkstar open source community at work.  Here we have three different people, from three different <em>countries</em>, all actively contributing to the Project Darkstar effort for three different reasons.  Esko, a student, is coming at it with academic curiosity and has independently built <a href="http://code.google.com/p/darkstar-exp/">a feature</a> into the core that many in the community have been clamoring for.  Jonathon, a game developer, has taken an active interest in Project Darkstar from a practical standpoint and put together an <a href="http://code.google.com/p/darkstar-as3/">ActionScript client</a> that inter-operates with a Project Darkstar server.  While Andres, an independent game developer, has built <a href="http://code.google.com/p/darkstris/">a real game</a> with Project Darkstar.  If you&#8217;re interested in Project Darkstar at all, have a listen.  On a side note, see if you can count how many times Chris says some form of the words ridiculous and awesome.</li>
<li>Probably the biggest splash that was made by a new player on the expo floor was the completely over-the-top <a href="http://www.onlive.com">OnLive</a> booth.  In twenty five words or less, OnLive is trying to make a grab for some of the console games market with a subscription based, games on demand model.  Rather than buying a console and then paying for shrink-wrapped games, consumers get a small, network enabled device that gives them access to the complete library of games that you play over the network for a monthly fee.  In terms of the business model, I think they have an approach that could take off (others seemed to disagree with me though).  However, I have my doubts that they&#8217;ll be able to iron out all of the technical issues with such a setup.  Essentially, the only thing happening on the client side is that it is sending controller actions in real time back to the server, the server is processing those actions, and then sending just the video feed back to the client.  The guys at the booth were talking mostly about their awesome video compression technology (and in fact I have no doubts that it is, in fact, awesome).  However, I don&#8217;t see that being the real problem.  Because the client and server are in complete, synchronous lock-step, it doesn&#8217;t matter how fast you can compress the video, the long tail by far is the network latency.  You can improve your chances of low latency by sprinkling OnLive servers all over the globe, but the internet is still prone to blips, spikes, and just general unpredictable latencies.  Add to that the fact that during peak demand, the OnLive servers could potentially have millions of users asking for not just processing power, but high performance graphics accelerator type processing power, and I just don&#8217;t see how it&#8217;s going to scale.</li>
<li>What&#8217;s the deal with so many countries and provinces having extravagant booths?  I saw booths for Canada, many of its provinces (Alberta, Newfoundland, etc), Korea, Germany, Scotland, Argentina&#8230;  I suppose many places see a real value in reaching out to this industry as it can serve as a boon for the economy, it can generate jobs, and it can just generally stir up interest in ways that maybe other industries just can&#8217;t do.</li>
<li>I did get a chance to make it to several sessions and lectures during the conference.  Most of the talks that I went to were mostly related to game design and less so on the technical programming problems that we focus on for Project Darkstar.  I still found them valuable, though, to get a general sense of the issues that <em>game developers</em> tend to think about.</li>
<li>Despite its simplicity, I found Hideo Kojima&#8217;s Thursday Keynote both really intriguing and really entertaining.  He basically chronicled the development lifecycle of the entire <a href="http://en.wikipedia.org/wiki/Metal_Gear_(series)">Metal Gear</a> series of games, from the original Metal Gear developed for the <a href="http://en.wikipedia.org/wiki/MSX">MSX2</a> platform, to Metal Gear Solid 4 developed for the Playstation 3.  I think what&#8217;s most interesting is that many of the game design choices and game play choices were heavily influenced by the capabilities (or lack thereof) of the hardware and software being used.</li>
</ul>
<p>Overall, GDC 2009 was a great experience.  I hope that we get some positive fallout from it.</p>
]]></content:encoded>
			<wfw:commentRss>http://owenkellett.com/2009/03/30/recap-gdc-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
