<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Chris</title>
  <link rel="self" href="http://chris.iluo.net/rss/chris.xml"/>
  <updated>2008-08-28T08:36:40-07:00</updated>
  <author>
    <name>Chris</name>
    <email>AUTHOR_EMAIL@email.com</email>
    <uri>http://chris.iluo.net/rss/chris</uri>
  </author>
  <id>urn:tag:chris.iluo.net,USER18</id>

  <entry>
    <title>blog:2008-aug-28 - Texture calculation b</title>
    <link href="http://www.bundysoft.com/news/doku.php?id=blog:2008-aug-28"/>
    <id>http://yoursite/article/?i=9a44eb41db93ca037214e6bcb2058f16</id>
    <updated>2008-08-28T05:30:14-07:00</updated>
    <author>
      <name>http://www.bundysoft.com/news/do</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hi All,  With L3DT release 2.6 only a few weeks away, I thought this might be a good time to run some head-to-head comparisons of the new release (v2.6) against the previous release (v2.5c). In particular, I'm going to show you just how far we...</div></summary>
  </entry>

  <entry>
    <title>Podcast #19</title>
    <link href="http://blog.stackoverflow.com/2008/08/podcast-19/"/>
    <id>http://yoursite/article/?i=84fa8968ddd251909864852b830c6f64</id>
    <updated>2008-08-28T01:30:11-07:00</updated>
    <author>
      <name>http://blog.stackoverflow.com/20</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">This is the nineteenth episode of the StackOverflow podcast, wherein Joel and I discuss the following:

We&#8217;ve mapped our voting functionality to what you see in Digg and Reddit, but we&#8217;re a Q&amp;A site, not a link aggregation service. Should we allow voting on questions as well as the answers? Or should questions simply be taggable as favorites, which are a de-facto vote? I believe voting and favorites are related, but not quite the same thing.
How do you deal with meta-discussion about the site? Wikipedia has two distinct areas for any page: the page itself and the &#8220;behind the curtain&#8221; discussion about the page. We don&#8217;t quite have this.
Joel points out that Google&#8217;s dedication to the algorithm over human intervention is on display in the Google search results for &#8220;jew&#8221;.
The private beta is insular in a way that isn&#8217;t immediately apparent to the people participating. We figure a huge percentage of our audience will be the barely interested programmers who end up on a Stack Overflow page from a web search. Also, the type of developers that tend to get attracted to the beta are the best, elite developers. Once the site is public, we&#8217;ll have a far wider range of skills in play &#8212; and much less sophisticated users.
I realized that Joel has zero votes because we actually had a XSS vulnerability &#8212; theoretically &#8220;friendly&#8221; hacker beta users intercepted our cookies and were able to impersonate us! We&#8217;ve fixed it now, but there was some minor collateral damage, such as the deletion of Joel&#8217;s voting history. This is one of the challenges of developing a site for skilled (but bored) developers with time and ability on their hands. 
Joel cites Aaron Schwartz&#8217; blog entry How To Launch Software as perhaps a model we should follow.  The so-called &#8220;Hollywood Launch&#8221; tends to cause a huge, uncontrollable spike in traffic and then a massive drop as things don&#8217;t go to plan. See Cuil. We are both scared stiff about the amount of traffic we already have, so we&#8217;ll be proceeding carefully.
Our SQL Server deadlock problem was solved by switching to read committed snapshot. It turns out SQL Server is not tuned very well for typical web app loads, which consist of massive numbers of reads and miniscule numbers of writes.
The Stack Overflow database and webserver are currently the same machine. One easy scaling path for us is to buy another server and dedicating it to the database. I&#8217;m just unsure exactly where the transition point is for network latency versus the SQL calls staying in memory.
There is a huge difference between horrible legacy code by talented programmers and horrible legacy code by, well, horrible programmers. This is frequently measured in WTFs/minute.


We also answered the following listener questions:

Ryan Cox: &#8220;Can you talk about backup and disaster recovery plans?&#8221;

Ryan: &#8220;In developing database-centric software for multiple clients, why not use a single database rather than multiple databases for each client?&#8221;

Phil Howie: &#8220;How do you balance legacy code that nobody wants to update with programmers who want to use the latest and greatest stuff?&#8221;



If you&#8217;d like to submit a question to be answered in our next episode,
record an audio file (90 seconds or less) and mail it to podcast@stackoverflow.com. You can record a question using nothing but a telephone and a web browser.

The transcript wiki for this episode is available for public editing.
</div></summary>
  </entry>

  <entry>
    <title>Programming, Pictures, Presentations or </title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/376246166/pictures-presentations-prose"/>
    <id>http://yoursite/article/?i=ca1ab0091f5e58a271cfac2982098cd3</id>
    <updated>2008-08-27T09:30:09-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 
For this week&#8217;s discussion, Dave Mark introduces the subject of learning from different forms of media - in the context of game AI.  Do you think reading code is valuable or a waste of time?  Prefer downloading powerpoint slides?  Let us know below!

In early July, I wrote in this space about how I was feeling a little inundated by the massive amount of research and discussion material that was out there lately. (My metaphor complained about how we had been getting hammered by severe weather in the plains states. My concerned readers will be happy to know that it hasn&#8217;t so much as rained here in a month. Be careful what you wish for, I suppose&#8230; I&#8217;m spending a fortune on watering my lawn.) My point was, it&#8217;s hard to decide what or how much to read. There must be a way of filtering things down so that I only use time on the most meaningful information. Do you try to touch on everything a little or do you just pick and choose things that you can get elbows deep into.
However, there has been something that has kind of fallen out of that original lament. I have begin realizing that a part of my filtering algorithm has been based around what format the information is delivered in. There are some things that work better in some formats whereas others are better delivered in other ways. Unfortunately, sometimes the information isn&#8217;t presented in that preferable format. Of course, sometimes that just isn&#8217;t possible. Still, I like it when people go the lengths to make digestion easy for me.

Less Code, Please
There are a few recent examples of how I just don&#8217;t have the calories to burn on something which should be very important to me. One such medium is SDKs or other forms of AI code. I downloaded the F.E.A.R. SDK a few months back &#8212; and I looked through it some. I also grabbed the AI source code for Civ 4 &#8212; which is really important to me with my specialization in strategy simulations. In neither case could I find the time to wade through it. I suppose I could have done it a little bit at a time&#8230; but just the act of remounting my brain to figure out where I left off is time-consuming. I often wish that there were road maps that pointed me straight to the important bits so I didn&#8217;t have to go through the mundane stuff. I want write-ups of what I&#8217;m looking at. I want diagrams of how the pieces and parts are working so I don&#8217;t have to assemble all the clues myself. (To be fair, I don&#8217;t even like looking through my old code that I haven&#8217;t touched in a while&#8230; but going through someone else&#8217;s sight-unseen is very tedious.)
More Code, Please

On the other hand, one thing I don&#8217;t like so much is presentations on what are ostensibly programming concepts (or programmable concepts) that don&#8217;t include code. Whether it be a book, whitepaper or blog article on a subject, there are times when grasping the concept would be just a touch easier, quicker&#8230; or at least more complete, if they were to include even simple code snippets. I will even accept pseudo-code at times. Now, I understand that for shorter things like blog posts, writing up sample code is asking a bit much. But I really appreciate the extra effort made by authors of books to show what they are talking about in code. In the AI Game Programming Wisdom books, for example, there is definately a premium on articles that have code &#8212; not just on the CD, but actually excerpted in the article itself.
Pretty Pictures, Please
Another form of explanation that really works for me is the visual side of things. If you can put example data in a table, do it. If you can assist in the presentation of a sequence of events by drawing a simple box and arrow diagram, do it. As I read on through the written material, my eyes will flicker back and forth to the diagram. In a way, it acts like an anchor for my thoughts. For more involved concepts such as entity relationships, this becomes even more important. If you are going to paint an example of how an agent will react in a situation, show me a simple representation of the situation. 

Uh, What Are These Pretty Pictures?
On the other hand, there&#8217;s only so much I can get from pretty pictures. Sometimes I really want to hear the person describe what they did (and by implication, what I should do). I find that I can often not only get more information quicker with a video or live presentation than I can get from a paper or code, but the quality of the transfer is better into my brain. I also know that he is not likely to bother saying or showing the fluff&#8230; but rather the sexy stuff. Coming full circle, however, there is going to be a wall in even the best presentation where I am going to want code to complete my immersion into the concept.

On a related note, there is nothing more frustrating than having some killer Powerpoint slides without the actual presentation available. You get all the teaser material but the content is missing. One of the best examples I saw of this recently was Damián Isla&#8217;s 2005 AIIDE presentation on &#8220;spatial competence&#8221; entitled &#8220;Dude, where&#8217;s my Warthog?&#8221; (7.1 MB ppt download) I was salivating in true Pavlovian style by going through the 44 slides of bulleted lists, images (many of which have multiple overlays per slide), and a one paragraph nod to &#8220;Grandfather Minsky&#8221;. However, without Damian&#8217;s dulcet tones to fill in the gaps between the bullets, I was left creating small puddles of drool on my desk. I needed more&#8230; I needed explanation&#8230; I needed it written out&#8230; I needed code. (BTW, my plan is to ply Damián with beer at October&#8217;s AIIDE Conference and get him to reprise this presentation.)
And The Verdict?
Another reason that this whole idea of various presentation methods has been important to me lately is&#8230; well&#8230; I can&#8217;t officially announce my reason yet. (Many of you know anyway - but give me a few more days before I go &#8220;on the record&#8221; with it.) Suffice to say, I will be doing some &#8220;presenting&#8221; of my own soon. I have had to ask myself over and over throughout the process (and will need to continue to do so), what is &#8220;the best way&#8221; of getting my point across? So, that brings me to my discussion question for the week&#8230; 
How do you like getting your educational information? When is code a good thing and when is it over the top? When do you want detailed text and when would you rather have a diagram handy? When do you just simply have to have Damián a live person armed with Powerpoint or simply a paper napkin and a pen?



Biologically Inspired AI for Computer Games

A book for developers wanting to bridge the gap between academic AI and the games industry, covering:


Evolutionary Algorithms
Neural Networks
Artificial Immune Systems
Particle Swarms


Includes simple explanations for beginners and case studies.  Click here for more details.</div></summary>
  </entry>

  <entry>
    <title>blog:2008-aug-27 - Tweaking the texture </title>
    <link href="http://www.bundysoft.com/news/doku.php?id=blog:2008-aug-27"/>
    <id>http://yoursite/article/?i=f2cfa59ffb01105819cbc9b63928fb61</id>
    <updated>2008-08-27T06:00:50-07:00</updated>
    <author>
      <name>http://www.bundysoft.com/news/do</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hi All,  I spent a few hours tonight working on the texture generation algorithm. More specifically, I've been looking at reducing the &lsquo;overheads' from the mosaic system that make mosaic texture generation slower than generating no...</div></summary>
  </entry>

  <entry>
    <title>Microsoft Ice House</title>
    <link href="http://bestpicsaround.com/pic-1674-Microsoft-Ice-House"/>
    <id>http://yoursite/article/?i=da83bf420a01325e1c01cbbbf8c22849</id>
    <updated>2008-08-26T21:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






























    
</div></summary>
  </entry>

  <entry>
    <title>House of Bottles</title>
    <link href="http://bestpicsaround.com/pic-1675-House-of-Bottles"/>
    <id>http://yoursite/article/?i=ad803ba2ad383bda5eb38434aa896276</id>
    <updated>2008-08-26T21:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>How to Destroy Guns</title>
    <link href="http://bestpicsaround.com/pic-1676-How-to-Destroy-Guns"/>
    <id>http://yoursite/article/?i=cbcaf6c30004d8d95dd33c9648b55a59</id>
    <updated>2008-08-26T21:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">












    
</div></summary>
  </entry>

  <entry>
    <title>The World's Tallest Snowman</title>
    <link href="http://bestpicsaround.com/pic-1677-The-Worlds-Tallest-Snowman"/>
    <id>http://yoursite/article/?i=f575da002a7c07c72409a66b321b0376</id>
    <updated>2008-08-26T21:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>Beijing 2008 Closing Ceremonies</title>
    <link href="http://bestpicsaround.com/pic-1672-Beijing-2008-Closing-Ceremonies"/>
    <id>http://yoursite/article/?i=0dd797f125ca549e7fe73bb3a87f07b9</id>
    <updated>2008-08-25T23:00:09-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">








































    
</div></summary>
  </entry>

  <entry>
    <title>Diamond Boxing Gloves</title>
    <link href="http://bestpicsaround.com/pic-1673-Diamond-Boxing-Gloves"/>
    <id>http://yoursite/article/?i=b8f48a2e0008af0d86891e5bb696ec4f</id>
    <updated>2008-08-25T23:00:08-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






    
</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p660"/>
    <id>http://yoursite/article/?i=a2ef9f868571ea0233d72ce633027fad</id>
    <updated>2008-08-25T13:30:44-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted 22 Aug 2008, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Also - many credits go to Svenstaro.  I forgot to mention this at first, since it kind of goes without saying, but I figured it'd make sense to mentioned it anyway.  Without Svenstaro I would've been stuck not knowing how to do much on Linux Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Stack Overflow on Herding Code</title>
    <link href="http://blog.stackoverflow.com/2008/08/stack-overflow-on-herding-code/"/>
    <id>http://yoursite/article/?i=0f28845d38965004f20a63fc968744ed</id>
    <updated>2008-08-25T09:30:20-07:00</updated>
    <author>
      <name>http://blog.stackoverflow.com/20</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I was invited to participate in the latest Herding Code podcast. 



This was a fun one for me because I&#8217;ve known the four hosts of the program &#8212; Jon Galloway, Kevin Dente, K. Scott Allen, and Scott Koon &#8212; through their blogs since forever, eventually meeting most of them in person. All of their blogs predate mine by years. I&#8217;d almost say we were blog buddies. If you could call people blog buddies. Which I don&#8217;t think you can.

At any rate, I go into quite a bit of technical depth on Stack Overflow and some of the features that we have yet to implement, but have been hotly requested &#8212; definitely worth a listen if you want to go deep.

Thanks for having me on!

(oh, and listen past the end for a little audio easter egg that&#8217;s sort of fun)
</div></summary>
  </entry>

  <entry>
    <title>Deadlocked!</title>
    <link href="http://www.codinghorror.com/blog/archives/001166.html"/>
    <id>http://yoursite/article/?i=7907cc37823848a71f46a1f460a5e78c</id>
    <updated>2008-08-25T08:00:31-07:00</updated>
    <author>
      <name>http://www.codinghorror.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
You may have noticed that my posting frequency has declined over the last three weeks. That's because I've been busy building that Stack Overflow thing we talked about.

It's going well so far. Joel Spolsky also seems to think it's going well, but he's one of the founders so he's clearly biased. For what it's worth, Robert Scoble was enthused about Stack Overflow, though it did not made him cry. Still, I was humbled by the way Robert picked this up so enthusiastically through the community. I hadn't contacted him in any way; I myself only found out about his reaction third hand.

That's not to say everything has been copacetic. One major surprise in the development of Stack Overflow was this recurring and unpredictable gem:


Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.


Deadlocked!

Deadlocks are a classic computer science problem, often taught to computer science students as the Dining Philosophers puzzle.




Five philosophers sit around a circular table. In front of each philosopher is a large plate of rice. The philosophers alternate their time between eating and thinking. There is one chopstick between each philosopher, to their immediate right and left. In order to eat, a given philosopher needs to use both chopsticks. How can you ensure all the philosophers can eat reliably without starving to death?


Point being, you have two processes that both need access to a scarce resource. There are lots of scarce resources in a PC or server, but this deadlock is coming from our database, SQL Server 2005. 

You can attach the profiler to catch the deadlock event and see the actual commands that are deadlocking. I did that, and found there was always one particular SQL command involved:


UPDATE [Posts]
SET [AnswerCount] = @p1, [LastActivityDate] = @p2, [LastActivityUserId] = @p3
WHERE [Id] = @p0


If it detects a deadlock, SQL Server forces one of the deadlocking commands to lose -- specifically the one that uses the least resources. The statement on the losing side varied, but in our case the losing deadlock statement was always a really innocuous database read, like so:


SELECT *
FROM [dbo].[Posts]
WHERE [ParentId] = @p0


(Disclaimer: above SQL is simplified for the purpose of this post). This deadlock perplexed me, on a couple levels.


How can a read be blocked by a write? What possible contention could there be from merely reading the data? It's as if one of the dining philosophers happened to glance over at another philosoper's plate, and the other philosopher, seeing this, screamed "meal viewing deadlock!" and quickly covered his plate with his hands. Yes, it's ridiculous. I don't want to eat your food -- I just want to look at it.
We aren't doing that many writes. Like most web apps, we're insanely read-heavy. The particular SQL statement you see above only occurs when someone answers a question. As much as I want to believe Stack Overflow will be this massive, rip-roaring success, there just cannot be that many answers flowing through the system in beta. We went through our code with a fine tooth comb, and yep, we're barely writing anywhere except when users ask a question, edit something, or answer a question.
What about retries? I find it hard to believe that little write would take so incredibly long that a read would have to wait more than a few milliseconds at most.


If you aren't eating -- modifying data -- then how can trivial super-fast reads be blocked on rare writes? We've had good results with SQL Server so far, but I found this behavior terribly disappointing. Although these deadlocks were somewhat rare, they still occurred a few times a day, and I'm deeply uncomfortable with errors I don't fully understand. This is the kind of stuff that quite literally keeps me up at night.

I'll freely admit this could be due to some peculiarities in our code (translated: we suck), and reading through some sample SQL traces of subtle deadlock conditions, it's certainly possible. We racked our brains and our code, and couldn't come up with any obvious boneheaded mistakes. While our database is somewhat denormalized, all of our write conditions are relatively rare and hand-optimized to be small and fast.

If you ever have to troubleshoot database deadlocks, you'll inevitably discover the NOLOCK statement. It works like this:


SELECT *
FROM [dbo].[Posts] with (nolock)
WHERE [ParentId] = @p0


It isn't just a SQL Server command -- it also applies to Oracle and MySQL. This sets the transaction isolation level to read uncommitted, also known as "dirty reads". It tells the query to use the lowest possible levels of locking.

But is nolock dangerous? Could you end up reading invalid data with read uncommitted on? Yes, in theory. You'll find no shortage of database architecture astronauts who start dropping ACID science on you and all but pull the building fire alarm when you tell them you want to try nolock. It's true: the theory is scary. But here's what I think: 


In theory there is no difference between theory and practice. In practice there is.


I would never recommending using nolock as a general "good for what ails you" snake oil fix for any database deadlocking problems you may have. You should try to diagnose the source of the problem first. But in practice adding nolock to queries that you absolutely know are simple, straightforward read-only affairs never seems to lead to problems. I asked around, and I got advice from a number of people whose opinions and experience I greatly trust who told me they've never seen any adverse reaction when using nolock -- as long as you know what you're doing. One even told me he worked with a DBA who told him to add it to every query he wrote.

With nolock / read uncommitted / dirty reads, data may be out of date at the time you read it, but it's never wrong or garbled or corrupted in a way that will crash you. And honestly, most of the time, who cares? If your user profile page is a few seconds out of date, how could that possibly matter?

Adding nolock to every one of our queries wasn't really an option. We added it to all the ones that seemed safe, but our use of LINQ to SQL made it difficult to apply the hint selectively.

I'm no DBA, but it seems to me the root of our problem is that the default SQL Server locking strategy is incredibly pessimistic out of the box:


The database philosophically expects there will be many data conflicts; with multiple sessions all trying to change the same data at the same time and corruption will result. To avoid this, Locks are put in place to guard data integrity ... there are a few instances though, when this pessimistic heavy lock design is more of a negative than a positive benefit, such as applications that have very heavy read activity with light writes.


Wow, very heavy read activity with light writes. What does that remind me of? Hmm. Oh yes, that damn website we're building. Fortunately, there is a mode in SQL Server 2005 designed for exactly this scenario: read committed snapshot:


Snapshots rely on an entirely new data change tracking method ...  more than just a slight logical change, it requires the server to handle the data physically differently. Once this new data change tracking method is enabled, it creates a copy, or snapshot of every data change. By reading these snapshots rather than live data at times of contention, Shared Locks are no longer needed on reads, and overall database performance may increase.


I'm a little disappointed that SQL Server treats our silly little web app like it's a banking application. I think it's incredibly telling that a Google search for SQL Server deadlocks returns nearly twice the results of a query for MySql deadlocks. I'm guessing that MySQL, which grew up on web apps, is much less pessimistic out of the box than SQL Server.

I find that deadlocks are difficult to understand and even more difficult to troubleshoot. Fortunately, it's easy enough to fix with read committed snapshot for our particular workload. But I can't help thinking our particular database vendor just isn't as optimistic as they should be.


[advertisement] Complimentary paperback book on lightweight peer code review.  10 essays from industry experts.  Free shipping.  Order Best Kept Secrets of Peer Code Review.


</div></summary>
  </entry>

  <entry>
    <title>Game AI Roundup Week #34 2008: 11 Storie</title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/373966903/2008-week-34"/>
    <id>http://yoursite/article/?i=d12c65807919f7b7a9e57ecdf4b62ad8</id>
    <updated>2008-08-24T22:30:21-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 
Weekends at AiGameDev.com are dedicated to rounding up smart links from the web relating to artificial intelligence and game development.  This week, there are many good articles and blog posts for you to read. Remember, there?s also lots of great content to be found in the forums here! (All you have to do is introduce yourself).
This post is brought to you mostly by Marcos Novacovsky (aka &#8220;Novack&#8221;). If you have any news or tips for next week, be sure to email them in to editors at AiGameDev.com.  Remember there?s a mini-blog over at news.AiGameDev.com (RSS) with game AI news from the web as it happens.




Why &#8220;AI Accelerators&#8221; Will Never Happen
Paul Tozour and another excellent article on the blog Game/AI. This time discussing some perspectives on the (non)posibility of the AI cards succeeding in the market.
You might have noticed I?ve been using this blog as my answer file. Every post answers a complicated question that?s too important to leave unanswered but too complicated to explain in casual conversation.
One question I run into is: ?Don?t you think we?re moving toward , in the same way that the ATI and nVidia GPUs accelerate 3D graphics??
This post explains why that will never happen, and why we should be happy that it won?t.


Game/AI: Why &#8220;AI Accelerators&#8221; Will Never Happen

Killzone 2 Adds Multiplayer Bot Action




Kotaku posted a comment on the announcement by Guerrilla Games about multiplayer AI bots on the upcoming Killzone 2.
I just got back from a hands on with Killzone 2 multiplayer, which I will tell you about in a bit, where Guerrilla Games multiplayer designer Eric Boltjes confirmed that Killzone 2 would indeed be featuring AI bots to help fill out online matches while allowing those who prefer the offline multiplayer experience someone fake to play with. Bots in Killzone 2 will actively try to react how a player would react, able to use all abilities, weapons, and participate in all mission types.

Killzone 2 Adds Multiplayer Bot Action

Mashing up tools
Eric Rice in his blog Spinfocalypse posted an article commenting on the idea of interlacing AIML, Inform 7, tag clouds and social network services as tools for game AI development, in relation to the Gamasutra article that I commented last week &#8220;Beyond AIML: Chatbots 102&#8243;
I?ve spent a lot of time recently pondering the creation of my own AI characters for use in my game/fiction/universe project. The idea of mashing up the four topics above are purely theoretical.

spinfocalypse - Mashup: AIML + Inform 7 + tag clouds + social network services

New project with xaitment technology
xaitment joined forces with Coreplay to begin the development of Swarm - First Contact.
xaitment GmbH, one of the leading developers and service providers of artificial intelligence for the games and simulation industries, and Coreplay, a development studio located in Munich, Germany, announced today that they have begun work together on a first person action game entitled ?Swarm - First Contact? for the PC and Xbox 360. In the game, players take on the roll of humans as they battle an attacking alien force that is bent on overrunning the earth and all of mankind. A demo of the game can be seen at this year?s Games Convention in Leipzig at xaitment?s booth, G20. The booth can be found in the Developer Village in Hall 2.

xaitment and Coreplay Begin Development on &#8220;Swarm - First Contact&#8221;

Quote of the week




AMD spokesman Dave Erskine, commented this to the Herald Sun, about Cinema 2.0 a technology to revolutionise how we play games..
?&#8230;Think video games that look as good as movies and movies you can interact with. Or use artificial intelligence (AI) so movies end differently every time&#8230;?

Wholly Jolie | Herald Sun

Jobs of the week
Three more jobs this week, two for the same studio Midway, which seems to be in process of a major personnel incorporation, and Rockstar, renewing the call for its recently acquired New England studio.
Rockstar: AI Programmer
Rockstar, the creators of such hits as Grand Theft Auto IV and Bully, has acquired a new studio; Rockstar New England (formerly Mad Doc® Software). With experience in every aspect of game development, and an unmatched expertise in Artificial Intelligence, Rockstar New England is a registered Xbox®, Xbox 360? and PlayStation®3 developer. Having recently completed the Xbox 360 adaption of Bully: The Scholarship Edition, the studio is working on exciting new projects, and looking for people who want to be part of one of the most successful and innovative developers of interactive entertainment.

Job: AI Programmer 

Surreal Software: AI Programmer
Surreal Software Inc. (a subsidiary of Midway and the studio which created The Suffering and Drakan) has an opening for a Senior Artificial Intelligence programmer to help develop the AI source base of projects including ?This is Vegas,? our new AAA-budget open-world title for Xbox 360, PS3 and PC.

Job: AI Programmer 

Midway: Senior AI Programmer
Midway Chicago has an opportunity for a smart, innovative Senior AI programmer who wishes to push the boundaries for a triple-A multi-platform game. We are looking for a senior software engineer who has top-to-bottom experience with AI game code, systems, and tools; someone who understands that good game AI is about far more than path finding and algorithms ? it is about bringing the world to life, making it believable, engaging the player and above all else, making it fun to play.

Job: Senior AI Programmer 

Iterations and vertical slices
Clinton Keith, on his blog Agile Game Development dedicated to agile software development methodologies in the game industry, posted an article exemplifying some techniques with the case of creating AI behaviors.
Iterations (or Sprints) are like mini projects by themselves. They often include design, coding, asset creation, tuning and debugging. However we are not always producing full vertical slices of a game every iteration. We?ll use a an example of what we might deliver for a team which is focused on creating AI behaviors: One of the most difficult aspects of AI behavior is navigation in a complex environment. The AI logic has to identify objects that will prevent the NPC from moving and calculate a path around them. Throw in some other moving characters and objects and the problem can become very complex to solve. Navigation can become the most riskiest problem to solve AI and therefore one the the riskiest problems to solve for the entire game.

Agile Game Development: Iterations and vertical slices

Serious AI




Serious games are increasingly using advances AI techniques, generally for training purposes on different disciplines. In this case helping with a very abstract concept: mantain and improve the Guanxi in China.
Gua-nxi is the first in a range of ?Serious Games?  is developing to overcome the challenges of learning foreign languages and new cultures. Players are immersed within virtual environments where they can actively learn and practice their foreign language and cultural awareness skills.
The use of AI (Artificial Intelligence) allows users to practice conversation skills and building rapport with characters as they would in the real world. Players can practice cultural etiquette and communication skills in a variety of different interactions.


FUTURE-MAKING SERIOUS GAMES: Serious Games Cutivate Gua-nXi For Successful Business in China

Left 4 Dead Interview




Voodoo Extreme bring us some more information on the upcoming Source based title Left 4 Dead. The most interesting part is about new info and elaboration around the AI Director concept, which is apparently much more than an AI director: is in charge of the whole ambience in the game, managing sounds, music, and visual effects.
The Director itself is controlling things like the visual effects. If you look at what a movie director does when they?re making a horror movie, they?re always inserting sound cues. Sometimes they?ll warn you, like they?ll put in a musical overture to indicate that something bad is going to happen, and they do that consistently. But then one time they won?t do that, to surprise you.
The Director will also use visual cues. When things are getting bad, you?ll notice that the colors are pulled out of the world, it desaturates the screen, and it?ll also lower the lighting level. That will stress you out, and make it harder for you to see. The Director is using those tricks, and we found it very useful to look to the language of cinema for ideas about how to create that shared experience.
But it has to be done procedurally, because you don?t know what the individual players are going to do. They?re four actors in a horror movie, and none of them have a copy of the script. So the world and the Director have to adapt to what it is that they?re doing. While we were playing, you could get a sense for some of the decisions that the Director was making.


Left 4 Dead Interview - Voodoo Extreme

Paper: March of the Froblins




Jeremy Shopf on his blog Level of Detail, linked a paper of a presentation that he and the group he work with at AMD made for this year&#8217;s SIGGRAPH. ?Froblins?, a talk covering using the GPU and DirectX 10.1 for scene management, occlusion culling, terrain tessellation, approximations to global illumination, character tessellation, and crowd simulation. Here is the chapter from the course notes on crowd simulation.

Simulation and Rendering Massive Crowds of Intelligent and Detailed Creatures on GPU
Chris Oat and Natalya Tatarchuk
2008
Download PDF


SIGGRAPH « Level of Detail

The Origami Killer




Ellie Gibson of Eurogamer wrote a preview on Heavy Rain the Quantic Dream&#8217;s long-awaited follow-up to Fahrenheit.
Cage reiterates that what we?ve just seen won?t be in the finished main game, but adds, ?There will be around 60 scenes like this, each one unique and contextual. Each fight is unique. Each situation is unique. You will never see the same animation twice. Each scene has its own story arc, its own interactivity.
?And all this in a very dark and mature thriller full of twists and turns,? says Cage. ?If you can imagine that, you will start to see what this project is about.?


Heavy Rain: The Origami Killer Preview

AI.implant becomes commercial once more




Develop brought us the latest news about AI.implant.
Standard licensing terms now available for PC, Xbox 360 and PS3 games.
Those who follow the middleware scene may remember a piece of AI middleware called AI.implant. They may also remember that it was then bought, then bought again, and suddenly its owners took more interest in the simulation field.

Also there is an article on the Tool Focus section of Develop commenting on this:
?More and more, we find our modelling and simulation customers are developing for consoles,? he explains. ?We see a lot of primary contractors on the military side looking at game platforms to put an element of fun into their products, particularly to appeal to the young users who have grown up using games.?

TOOL FOCUS: AI.implant
AI.implant becomes commercial once more | News by Develop

Meet ?Emily? - Image Metrics Tech Demo






Yes you read correctly, TECH demo. She&#8217;s fake. She IS the demo.
Until the 1:30 mark when they revert back to the source (the real actress), her entire face is being simulated by the technology.
Image Metrics Official Website: http://www.image-metrics.com


Meet &#8220;Emily&#8221; - Image Metrics Tech Demo

Artificial Technology unveils EKI One

There is a new AI middleware in the market: a new solution for implanting emotion into virtual characters by Artificial Technology, called EKI One.
Middleware start-up Artificial Technology has revealed details of its new solution for implanting emotion into virtual characters.
Known as EKI One, the modular middleware gives programmers and designers the ability to give characters intelligent and emotional behaviour, increasing the immersiveness of the game or virtual world.


Artificial Technology unveils EKI One | News by Develop


Stay tuned next week for more smart links from around the web!



21st Century Game Design

This book is an answer to two important questions: who are we designing games for and how do we do it best?

Click here for more details.</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p650"/>
    <id>http://yoursite/article/?i=a727d8b15fafd60b92ed5fe652ef417b</id>
    <updated>2008-08-24T20:30:36-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted 22 Aug 2008, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Also - many credits go to Svenstaro.  I forgot to mention this at first, since it kind of goes without saying, but I figured it'd make sense to mentioned it anyway.  Without Svenstaro I would've been stuck not knowing how to do much on Linux Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p649"/>
    <id>http://yoursite/article/?i=5cd8eeb3e9d9a353acd2e8982fcae1bc</id>
    <updated>2008-08-24T17:30:35-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted 22 Aug 2008, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Also - many credits go to Svenstaro.  I forgot to mention this at first, since it kind of goes without saying, but I figured it'd make sense to mentioned it anyway.  Without Svenstaro I would've been stuck not knowing how to do much on Linux Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Bird Thief</title>
    <link href="http://bestpicsaround.com/pic-1667-Bird-Thief"/>
    <id>http://yoursite/article/?i=49106e8915027ef4cedc1f4711c83d12</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






    
</div></summary>
  </entry>

  <entry>
    <title>Nail Watch</title>
    <link href="http://bestpicsaround.com/pic-1668-Nail-Watch"/>
    <id>http://yoursite/article/?i=e8ac4dccf8714e7b84a0a6f708d13c52</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






    
</div></summary>
  </entry>

  <entry>
    <title>The Middle of Nowhere</title>
    <link href="http://bestpicsaround.com/pic-1669-The-Middle-of-Nowhere"/>
    <id>http://yoursite/article/?i=6eb87833aea3a0df060ad96ac4b5b9ea</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>Chronic File</title>
    <link href="http://bestpicsaround.com/rssad.php?1670"/>
    <id>http://yoursite/article/?i=0a9478fb085517f5201d9b7255d8559f</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/rssad.</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Free photo sharing and hosting for your weed and pot pictures
    
</div></summary>
  </entry>

  <entry>
    <title>Why Men Aren't Car Models</title>
    <link href="http://bestpicsaround.com/pic-1670-Why-Men-Arent-Car-Models"/>
    <id>http://yoursite/article/?i=e72b406d78a6751d5f6295c25daf4e73</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">












    
</div></summary>
  </entry>

  <entry>
    <title>Inside YouTube Offices</title>
    <link href="http://bestpicsaround.com/pic-1671-Inside-YouTube-Offices"/>
    <id>http://yoursite/article/?i=0185e171a0d7129db2d59468b5aa57ee</id>
    <updated>2008-08-24T17:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">


















    
</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p648"/>
    <id>http://yoursite/article/?i=6a3276120ca354d331a10d0097acfbfa</id>
    <updated>2008-08-24T07:00:28-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted 22 Aug 2008, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Also - many credits go to Svenstaro.  I forgot to mention this at first, since it kind of goes without saying, but I figured it'd make sense to mentioned it anyway.  Without Svenstaro I would've been stuck not knowing how to do much on Linux Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Ralph Bakshi clip</title>
    <link href="http://casuallyhardcore.com/blog/2008/08/24/ralph-bakshi-clip/"/>
    <id>http://yoursite/article/?i=a45c0d637a5d9eb6b6f0fe23c67e1183</id>
    <updated>2008-08-24T05:30:09-07:00</updated>
    <author>
      <name>http://casuallyhardcore.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Wow. This will forever be immortalized.
</div></summary>
  </entry>

  <entry>
    <title>On prototyping</title>
    <link href="http://casuallyhardcore.com/blog/2008/08/24/on-prototyping/"/>
    <id>http://yoursite/article/?i=ab3e4b0e505508e4ac1c0c9f697c3244</id>
    <updated>2008-08-24T05:30:09-07:00</updated>
    <author>
      <name>http://casuallyhardcore.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Chris Hecker and Chaim Gingold spoke at GDC 2006 about prototyping and I&#8217;ve only recently discovered it. I wish I had read it before I began my prototype because they discuss some gnarly issues I&#8217;ve encountered.
The powerpoint slides and MP3 audio are available here, but I&#8217;ll summarize the juicy bits.
1) Game Design Documents are truly useless in answering questions about a game like &#8220;Will it be fun?&#8221;

And that&#8217;s why we always need to prototype - to answer some hard questions scientifically (rather based on hunches). I completely agree with I&#8217;ve tossed large parts of my original GDD away because the GDD was based on speculation on what would be fun/easy/simple/understandable - half of which was wrong.

2) All prototypes try to answer hard questions so those questions should have yes/no answers that can be falsifiable. There is no point in asking a question that can not have an answer.

- Can this cooking game mechanic be made compelling?
- Can the player control driving a car using a video camera (i.e can the player deal with video processing lag)?
One thing Hecker + Gingold emphasize is failing early. The prototype&#8217;s goal is to answer the question as quickly as possible. 
Quick == Cheap
Cheap is good!
3) Cost vs. Quantity&#8230; due to economics you can not just create a prototype will full-art and gameplay and in the end you DO NOT WANT TO. Hecker and Gingold talk about answering questions as CHEAPLY as possible - steal, use existing art tools, mock stuff up, etc&#8230; anything to avoid actually building a prototype with code + art.
Now, eventually you will need to program code and create art - the question is how much of each?
They say code is VERY EXPENSIVE and non-linear as you will need to build an engine, physics, rendering, input, etc. even before any &#8220;prototyping&#8221; begins. The cost of content is flat throughout the prototype (and game). It can contribute to answering the prototype&#8217;s question from the start.


They argue that content is preferred over code - that means trying stuff in Maya or Max or an art tool first. In my prototype, I&#8217;ve spent far too much time building tech and too little on the gameplay / asking-answering questions bit. Code is necessary in my specific case, but I should not be building scripting systems or anything that is more technology than necessary for the prototype:

The reason why you still need to code is to answer some technical questions like&#8230; Can I get 30fps with 1M polygons on the screen? 

Their rule is &#8220;Only spend code where you need understanding; throw content at the rest.&#8221;
In my prototype, I needed answers to some hard physics questions that could not be answered using Maya-based art mock ups. I also had some critical pipeline and schedule/timeframe questions that if the answers were negative would have killed the project immediately. Remember, fail early!</div></summary>
  </entry>

  <entry>
    <title>DNA Pictures</title>
    <link href="http://bestpicsaround.com/pic-1663-DNA-Pictures"/>
    <id>http://yoursite/article/?i=5e51adccf1863027406ed357efc49de8</id>
    <updated>2008-08-23T19:30:15-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">












    
</div></summary>
  </entry>

  <entry>
    <title>Painting on Leaves</title>
    <link href="http://bestpicsaround.com/pic-1664-Painting-on-Leaves"/>
    <id>http://yoursite/article/?i=4dd57e1a75a34fc28060596b916888b8</id>
    <updated>2008-08-23T19:30:14-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">


















    
</div></summary>
  </entry>

  <entry>
    <title>Emotional Animals</title>
    <link href="http://bestpicsaround.com/pic-1665-Emotional-Animals"/>
    <id>http://yoursite/article/?i=762dda70b5cd9ca5391450bb9fd6a45d</id>
    <updated>2008-08-23T19:30:14-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">


















    
</div></summary>
  </entry>

  <entry>
    <title>Chocolate Fountain</title>
    <link href="http://bestpicsaround.com/pic-1666-Chocolate-Fountain"/>
    <id>http://yoursite/article/?i=13ad596855f1c7c77cf7e7412a8303b7</id>
    <updated>2008-08-23T19:30:14-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p647"/>
    <id>http://yoursite/article/?i=3141026bd3842f551b736d9a604a8e7a</id>
    <updated>2008-08-23T16:00:40-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted Yesterday, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>UNF Game Development Camp and Pandora ne</title>
    <link href="http://freegamer.blogspot.com/2008/08/unf-game-development-camp-and-pandora.html"/>
    <id>http://yoursite/article/?i=acd6e17ba60d780e727e4786ca81c896</id>
    <updated>2008-08-23T07:00:22-07:00</updated>
    <author>
      <name>http://freegamer.blogspot.com/20</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">

Quad Fighter
Approximately 50 high school students from Denmark have participated in the UNF Game Development Camp, and two of the results have been published under some of the Creative Commons Licenses.

The seven teams' common tool was Blender and it's game engine. While the results seem very amateurish, I rather like the idea of involving children in the design of toys. Especially when preformed by non-profit organizations.


Pandora logo

The ultra-mega-super-duper portable Pandora, the ultimate open source handheld device, seems to become a reality.

Playing Quake 2 on a device slightly wider than a CD? Sounds uncomfortable. But in connection with a real keyboard and mouse, this device might be quite fun. In my opinion portable stuff just can't get small enough.



Pandora in action. Or get a good-resolution video.</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p646"/>
    <id>http://yoursite/article/?i=d7121090efd89cf76e46b150f3c246c9</id>
    <updated>2008-08-23T05:30:17-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted Yesterday, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>blog:2008-aug-23 - L3DT version 2.6 beta</title>
    <link href="http://www.bundysoft.com/news/doku.php?id=blog:2008-aug-23"/>
    <id>http://yoursite/article/?i=5b92addbda63a3783e7108fe69bb2a1b</id>
    <updated>2008-08-23T02:30:28-07:00</updated>
    <author>
      <name>http://www.bundysoft.com/news/do</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Hi Everyone,  The beta release of L3DT version 2.6 is now available for download, in both Standard and Professional flavours. The expected release date for the final build of L3DT version 2.6 is nominally mid-September.   If you're not sure ho...</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p645"/>
    <id>http://yoursite/article/?i=a24dfb2839bf9972ccb5ea41a837690b</id>
    <updated>2008-08-22T20:30:20-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted Yesterday, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Portalized Running on Ubuntu Hardy</title>
    <link href="http://www.portalized.org/forum/viewtopic.php?f=14&amp;t=88#p643"/>
    <id>http://yoursite/article/?i=b4297e0e721c14cf343cf5b702f373d7</id>
    <updated>2008-08-22T11:00:39-07:00</updated>
    <author>
      <name>http://www.portalized.org/forum/</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">by null (Posted Today, 17:34)Well, here:Porting process wasn't too bad, everything went smoothly except for luabind, which GCC 4 didn't really like much by default.  I'm actually rather impressed by how everything Just Works, I was expecting rather odd issues arising.  Well, one did arrise: closing the window doesn't end the process for some reason  (will be fixed)Oh, and yes, it's missing the fancy SSAO and what-not.  I simply wanted to to make sure everything worked as it should before porting over the shaders (easy, I'll just have to get friendly with GLSL since so far I've been using mostly HLSL and CG, and CG's GL support is rather ... crappy).Read Main Topic</div></summary>
  </entry>

  <entry>
    <title>Wall of Motherboards</title>
    <link href="http://bestpicsaround.com/pic-1658-Wall-of-Motherboards"/>
    <id>http://yoursite/article/?i=59b1a2a593e50e1341fa4b6b2e589fef</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">














    
</div></summary>
  </entry>

  <entry>
    <title>New Olympic Logos</title>
    <link href="http://bestpicsaround.com/pic-1659-New-Olympic-Logos"/>
    <id>http://yoursite/article/?i=be59b6019ead6905c11f480c18986d21</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






































    
</div></summary>
  </entry>

  <entry>
    <title>Mother Gorilla Grieves Over Her Dead Chi</title>
    <link href="http://bestpicsaround.com/pic-1660-Mother-Gorilla-Grieves-Over-Her-Dead-Child"/>
    <id>http://yoursite/article/?i=8f3d3ec5d33794cbc0239de131fa9ad3</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






    
</div></summary>
  </entry>

  <entry>
    <title>Chronic File</title>
    <link href="http://bestpicsaround.com/rssad.php?1660"/>
    <id>http://yoursite/article/?i=a89fa5fd41d04df691a8900c641dc0a9</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/rssad.</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Free photo sharing and hosting for your weed and pot pictures
    
</div></summary>
  </entry>

  <entry>
    <title>World's Fattest Man Visits The Beach</title>
    <link href="http://bestpicsaround.com/pic-1661-Worlds-Fattest-Man-Visits-The-Beach"/>
    <id>http://yoursite/article/?i=420203f5f3bf4329777c8030bca4ade7</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>Extreme Haircuts</title>
    <link href="http://bestpicsaround.com/pic-1662-Extreme-Haircuts"/>
    <id>http://yoursite/article/?i=810cbde4d7f5d7ce0cdb582882487aa7</id>
    <updated>2008-08-21T11:30:12-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
























    
</div></summary>
  </entry>

  <entry>
    <title>Check In Early, Check In Often</title>
    <link href="http://www.codinghorror.com/blog/archives/001165.html"/>
    <id>http://yoursite/article/?i=69e0b77a0ef0f327f5ceacb479019199</id>
    <updated>2008-08-21T06:00:47-07:00</updated>
    <author>
      <name>http://www.codinghorror.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I consider this the golden rule of source control:

Check in early, check in often.

Developers who work for long periods -- and by long I mean more than a day -- without checking anything into source control are setting themselves up for some serious integration headaches down the line. Damon Poole concurs:


Developers often put off checking in. They put it off because they don't want to affect other people too early and they don't want to get blamed for breaking the build. But this leads to other problems such as losing work or not being able to go back to previous versions.

My rule of thumb is "check-in early and often", but with the caveat that you have access to private versioning. If a check-in is immediately visible to other users, then you run the risk of introducing immature changes and/or breaking the build.


I'd much rather have small fragments checked in periodically than to go long periods with no idea whatsoever what my coworkers are writing. As far as I'm concerned, if the code isn't checked into source control, it doesn't exist. I suppose this is yet another form of Don't Go Dark; the code is invisible until it exists in the repository in some form.

I'm not proposing developers check in broken code -- but I also argue that there's a big difference between broken code and incomplete code. Isn't it possible, perhaps even desirable, to write your code and structure your source control tree in such a way that you can check your code in periodically as you're building it? I'd much rather have empty stubs and basic API skeletons in place than nothing at all. I can integrate my code against stubs. I can do code review on stubs. I can even help you build out the stubs!

But when there's nothing in source control for days or weeks, and then a giant dollop of code is suddenly dropped on the team's doorstep -- none of that is possible.

Developers that wouldn't even consider adopting the old-school waterfall method of software development somehow have no problem adopting essentially the very same model when it comes to their source control habits. 

Perhaps what we need is a model of software accretion. Start with a tiny fragment of code that does almost nothing. Look on the bright side -- code that does nothing can't have many bugs! Test it, and check it in. Add one more small feature. Test that feature, and check it in. Add another small feature. Test that, and check it in. Daily. Hourly, even. You always have functional software. It may not do much, but it runs. And with every checkin it becomes infinitesimally more functional.



If you learn to check in early and check in often, you'll have ample time for feedback, integration, and review along the way. And who knows -- you might even manage to accrete that pearl of final code that you were looking for. 


[advertisement] Peer Code Review. No meetings. No busy-work. Customizable workflows and reports. Try Jolt Award-winning Code Collaborator.


</div></summary>
  </entry>

  <entry>
    <title>Podcast #18</title>
    <link href="http://blog.stackoverflow.com/2008/08/podcast-18/"/>
    <id>http://yoursite/article/?i=487b1f4bb57121ee8ea84c23b48d8808</id>
    <updated>2008-08-20T19:30:10-07:00</updated>
    <author>
      <name>http://blog.stackoverflow.com/20</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
This is the eighteenth episode of the StackOverflow podcast, wherein Joel and I discuss the following:

We finally get to meet Michael Pryor, the co-founder of Fog Creek Software, who is a special guest on this episode!
Joel had good luck browsing our beta site using Opera Mini. I&#8217;m still incredibly impressed with the Mobile Safari browser on the iPhone, which renders our JavaScript-heavy site perfectly, as far as I can tell.
Joel posted a Regex question on the Stack Overflow beta, and I can&#8217;t help bringing up RegexBuddy, my favorite (and still best) regular expression tool for developers.
Social websites are a bit unpredictable to build &#8212; we intended Stack Overflow as a relatively straightforward question / answer site, but there&#8217;s quite a bit of demand for inter-answer discussion. Our system is designed to float the best answers to the top via voting, but this makes conversations in the answers difficult to follow.
Stack Overflow is a hybrid of a discussion forum, a wiki system, and a voting/reputation system. It&#8217;s been a hit so far, but we are running into some design issues resulting from this unusual combination.
I had the opportunity last week to meet Merlin Mann, who Joel and I are big fans of. Joel particularly enjoys their podcast, You Look Nice Today. Turns out Merlin is a fan of Joel&#8217;s as well. We should form a mutual admiration society!
If you&#8217;d like to sign up for the Stack Overflow private beta, which will run until the end of the month, use our Google Docs signup form.

We didn&#8217;t get to any listener questions this episode, but we&#8217;ll remedy that next time!
If you&#8217;d like to submit a question to be answered in our next episode, record an audio file (90 seconds or less) and mail it to podcast@stackoverflow.com. You can record a question using nothing but a telephone and a web browser.

The transcript wiki for this episode is available for public editing.

 </div></summary>
  </entry>

  <entry>
    <title>How to Tie a Tie</title>
    <link href="http://bestpicsaround.com/pic-1652-How-to-Tie-a-Tie"/>
    <id>http://yoursite/article/?i=ecfb2df48851c8fb95f14e48048e4f98</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">










    
</div></summary>
  </entry>

  <entry>
    <title>The Price of Chinese Olympics</title>
    <link href="http://bestpicsaround.com/pic-1653-The-Price-of-Chinese-Olympics"/>
    <id>http://yoursite/article/?i=d932b9110adc0fcbd3a5aacf53502100</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>Hillary Clinton and The Axe Effect</title>
    <link href="http://bestpicsaround.com/pic-1654-Hillary-Clinton-and-The-Axe-Effect"/>
    <id>http://yoursite/article/?i=be4eec124712ee578243bc0245f133ea</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




    
</div></summary>
  </entry>

  <entry>
    <title>Star Trek 2009 Posters</title>
    <link href="http://bestpicsaround.com/pic-1655-Star-Trek-2009-Posters"/>
    <id>http://yoursite/article/?i=2a87efc7efa20a18fbc2ad1b0caa9527</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">










    
</div></summary>
  </entry>

  <entry>
    <title>Lego Olympics in Beijing 2008</title>
    <link href="http://bestpicsaround.com/pic-1656-Lego-Olympics-in-Beijing-2008"/>
    <id>http://yoursite/article/?i=dcb56cda6427da4e8e908b44b6d01624</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">






























    
</div></summary>
  </entry>

  <entry>
    <title>Olympic Hair</title>
    <link href="http://bestpicsaround.com/pic-1657-Olympic-Hair"/>
    <id>http://yoursite/article/?i=1654285815d66e8eb7980b7c37a4cdff</id>
    <updated>2008-08-20T17:30:07-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">










    
</div></summary>
  </entry>

  <entry>
    <title>Puppet Strings, Remote Control, or Hands</title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/370354396/puppet-strings-remote-control"/>
    <id>http://yoursite/article/?i=55a48c11d616a6ad1865410d9d7e8659</id>
    <updated>2008-08-20T16:30:23-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 
In this week&#8217;s developer discussion on AiGameDev.com, Dave Mark sets the scene for a polarized discussion of methodologies.  Let everyone know which camp you fall into and post a comment below!

I have recently been privy to a discussion amongst a very learned and experienced group of AI developers. They were all expressing their opinions on a subject that seems to be ever lurking in the virtual halls of the AI world. That subject is, in a broad sense, how much control should we have over our AI agents? Alternately, how much is even necessary? Interestingly, the answers to the &#8220;should&#8221; and &#8220;necessary&#8221; questions differ significantly depending on whom you ask. There are a number of schools of thought in this regard. I will try to touch on them here (although this will not be an exhaustive list, I&#8217;m sure.

First, there is the &#8220;script everything&#8221; crowd. The belief here is that conveyance of the designers intent and vision as well as a properly presented level of entertainment is only possible if the agents in the game are treated much the same as actors in a film. We hand them not just the plot and screenplay but also micromanage what they say, how they say it, how they move around the set, how they even more their hands and face. The director of the film is analogous to the designers in the game world.
Second, there is the &#8220;autonomous agent&#8221; lobby. These are people that believe in the complete hands off approach. Design independent agents with the ability to perceive the world model, analyze their goals, and act on those goals without any intervention whatsoever. I suppose this maps over rather well to the &#8220;reality TV&#8221; model. You can populate your world with agents about which you have a general notion &#8212; but you can only vaguely guess at what they will do based on your perception of their &#8220;personality&#8221;. Once you toss a bunch of independent agents in a room, you never really know what you are going to get.

A third group, however, is what came up in this discussion. This group was based on more of a &#8220;repeat after me&#8221; model. The idea was that using various technologies, game entities could be shown how they were supposed to act by example. In some cases, this involved neural nets learning situational based responses. In other cases, this was based on a rough equivalent of what MoCap is to animation&#8230; i.e. &#8220;this is the way it is supposed to look.&#8221;
Obviously, this triangle is not composed of three completely disjoint points but rather outline a continuum of possibilities. The most common word that illustrates this would be &#8220;except&#8221;. For example, I want my agent to be completely autonomous except under this particular circumstance when I need it to be scripted. There is a wide range of possible combinations at that point&#8230; and yet it is deciding where that word &#8220;except&#8221; needs to be that seems to be the problem. Each of the above methods has its advantages and shortcomings&#8230; far more numerous than what I can delve into in this column. (After all, one could make the claim that I have been doing too much &#8220;research&#8221; this week.) Suffice to say that none of them are a &#8220;silver bullet&#8221;. At least not yet. 
Much of the separation seems to appear along genre lines. Not the genre as a whole, but rather the genre role that any given agent is playing at one time. For example, you could have RPG elements mixed into an FPS game. During those times, strictly using a solution that is good for an FPS agent would fall significantly short of providing a solution for the RPG needs. One example that was given in the discussion I mentioned before was particularly poignant&#8230; a solution that involves the &#8220;let me show you how to do this&#8221; approach &#8212; which is suited well to fighting games &#8212; would be tedious if it were applied to an NPC shopkeeper whose daily life involves baking bread, putzing around his store and serving customers that came in to his humble establishment. (Of course, I have seen plenty of people in MMOs who were perfectly happy to live out their online lives doing exactly this. I admit that in the first week after the release of Ultima Online, I made a killing by dying people&#8217;s clothes for them. Was that really 10 11 years ago?) 
So, my question for the week is along the lines of ferreting out where those dividing lines are. What benefits are there to each of those three approaches? What caveats exist? As there merit in the industry slowly drifting towards any one of those three apexes?



21st Century Game Design

This book is an answer to two important questions: who are we designing games for and how do we do it best?

Click here for more details.</div></summary>
  </entry>

  <entry>
    <title>The Perils of FUI: Fake User Interface</title>
    <link href="http://www.codinghorror.com/blog/archives/001164.html"/>
    <id>http://yoursite/article/?i=97790204c54bd91c477cd363faf79cf1</id>
    <updated>2008-08-18T06:00:31-07:00</updated>
    <author>
      <name>http://www.codinghorror.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
As a software developer, tell me if you've ever done this:


Taken a screenshot of something on the desktop
Opened it in a graphics program
Gone off to work on something else
Upon returning to your computer, attempted to click on the screenshot as if it was an actual program.


And let's not forget the common goating technique where you take a screenshot of someone's desktop, make it the desktop background, then proceed to hide every UI element on the screen. The anguished cries as users desperately double-triple-quadruple click on pixels that look exactly like real userfaces can typically be heard for miles.

I bring this up to generate some sympathy. I get fooled by my own FUI -- Fake User Interface -- at least once a month. If it can happen to us, it can happen to anyone. Which means FUI can be quite dangerous in the wrong hands. Consider Ryan Meray's story:


Okay, so here's an interesting one. My girlfriend is researching stuff on lilies, so she's trying to find the website for the Michigan Regional Lily Society.

The website address is http://www.mrls.org/

Feel free and browse there directly, there's nothing wrong with it. But if you don't remember the URL, your first response is to Google it. We google and get this:

http://www.google.com/search?q=Michigan+Regional+Lily+Society

Now, if you're in Firefox, everything is fine. You click that first result, and you get to their website, and you learn about lilies.

However, if you are using IE, be aware, you are about to have a Spyware/Virus alert. 


Obviously, the poor Michigian Regional Lily Society has fallen prey to website hackers. (Note that it may have been fixed by the time I'm writing this -- but I duplicated everything I'm about to show you.)

The first clever point is that the website appears fine if you navigate there directly. The malicious JavaScript code inserted into the page checks the referer and does something different if you arrive there via a web search engine. This means the people who own the website, and never arrive there through Google, would be scratching their heads, wondering what all the fuss is about. Which means the hack survives longer.

But if you do arrive at the MLS site through a search engine, like a huge percentage of the world does, you're redirected to:

http://scanner.antivir64.com/?aff=1050

The very first thing this page does is minimize the browser (Firefox 3, in this case) and present us with this JavaScript alert:



I'm juxtaposing the browser and the dialog here, but the browser is in the very lower right corner of the display and that dialog is in the middle. It is not at all clear that the dialog originated from that web page. It's a primitive technique, but it is surprisingly effective.

I didn't have the guts to click OK here; I clicked the close button. The browser then expanded to show this convincing "real time virus scan".



The static screenshot does not do it justice; the scrollbar moves, the list of files fly by as they are "scanned", and the web page rather successfully simulates an ersatz UI somewhere between Windows XP and Windows Vista. Of course, we know this Fake User Interface is completely invalid, because it is running in the browser, not on our PC. You and I may understand that distinction, but what about your parents? Your wife? Your children? Your less technically savvy friends? Will they understand this scary, authentic looking virus warning coming from an "encrypted secure site" is all a lie?

Honestly, whose PC doesn't "run slower than normal"? Maybe I would want to know if my computer is infected with Viruses, Adware or Spyware. It's all part of the culture of fear that security software companies -- and let's be honest, Windows security software companies --  cultivate so they can rake in millions of dollars per year hawking their software. The difference here, of course, is that it's increasingly difficult to tell the good guys from the bad guys. Unfortunately, that's the downside of fear as a selling point: it cuts equally well in both directions.

Woe betide the poor user who is convinced through the trickery of FUI to install this "antivirus" software. The page does its darndest to convince you to run its payload executable. Any click on the page, no matter where, is interpreted as a download request.



The page also attempts a drive-by download, though those have been auto-blocked for years now.



It's tempting to put this down as yet another iteration of phishing, the forever hack. To be fair, this is exactly the sort of thing web browser phishing filters were designed to prevent. This site was already in the Firefox 3 phishing filter -- but it was not caught by the Internet Explorer 7 phishing filter, so I reported it.



I am all for phishing filters as another important line of defense, but like all distributed blacklists, they're only so effective.

What I'm more concerned about here is how well the user interface was spoofed. The browser FUI was convincing enough to even make me -- possibly the world's most jaded and cynical Windows user -- do a bit of a double-take. How do you protect naive users from cleverly designed FUI exploits like this one? Can you imagine your mother doing a web search on flowers -- flowers, for God's sake -- clicking on the search results to a totally legitimate website, and correctly navigating the resulting maze of fake UI, spurious javascript alerts, and download dialogs?

I know I can't. As much as I admire distributed phishing blacklist efforts, there's no way they can possibly keep pace with the rapid setup and teardown of hacked websites. How many compromised websites are out there? How many unsophisticated users surf the internet every day?

As always, we can lay a big part of the blame at Microsoft's doorstep for not adopting the UNIX policy of non-administrator accounts for regular users. But then again, if the spoofing is good enough, the FUI extra-convincing, even a Linux or OS X user could be coerced into entering their admin password for a "system security scan". Or maybe they just wanted to see the dancing bunnies.

And then, like Ryan, you're likely to end up with the same infected computer, and the same distraught spouse.

Short of user education, which is a neverending, continuous uphill battle -- how would you combat a perfectly spoofed FUI presented to a naive user?


[advertisement] Peer code review without meetings, paperwork, or stopwatches?  No wonder Code Collaborator won the Jolt Award.


</div></summary>
  </entry>

  <entry>
    <title>Game AI Roundup Week #33 2008: 10 Storie</title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/367657066/2008-week-33"/>
    <id>http://yoursite/article/?i=552a394b8cd0f2583bb8a6ab0ef2a861</id>
    <updated>2008-08-17T19:30:18-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 
Weekends at AiGameDev.com are dedicated to rounding up smart links from the web relating to artificial intelligence and game development.  This week, we have more jobs, and a variety of topics: as always, there are good articles and blog posts for you to read. Remember to visit the recently released Wiki! Also don&#8217;t forget the Twitter account for random thoughts!
This post is brought to you mostly by Marcos Novacovsky (aka &#8220;Novack&#8221;). If you have any news or tips for next week, be sure to email them in to editors at AiGameDev.com.  Remember there?s a mini-blog over at news.AiGameDev.com (RSS) with game AI news from the web as it happens.




Beyond AIML: Chatbots 102
Bruce Wilcox wrote a technical article for Gamasutra about his current work, which consist on NPC text chatbots for Avatar Reality&#8217;s Blue Mars. Wilcox discusses his adventures in AI markup language to create effective human-text interaction.




Avatar Reality (www.avatar-reality.com), a virtual world company built from the ashes of the Square USA Honolulu office, wants to use chatbots to represent a user while that user is absent from the Blue Mars world - a CryEngine 2-using online environment set on a terraformed Mars. My job is to provide them with the appropriate chatbot technology.
AIML is one such technology, but for my purposes it is simply a woefully inadequate tool and once again I find myself building a new scripting language (see Reflections on Building Three Scripting Languages, a prior Gamasutra article). Hence Chatbots 102. 


Beyond AIML: Chatbots 102

IndyHall Lectures




Independents Hall has started a series of lectures, the first of which sounds very interesting: Battlefield Game AI: Grids, Guts, and Guns, in charge of some folks from Relic Entertainment, reposable from the state-of-the-art RTS Company of Heroes.
This month we begin the IndyHall Lecture series, and we?re kicking it off with something completely new: a discussion of video game artificial intelligence, specific to battlefield games.
That?s right. IndyHall member Chris Jurney, who works for Relic Entertainment, is going to talk to us about some of the underlying AI systems behind one of the games he?s worked on, Company of Heroes.


Independents Hall » IndyHall Lectures!

Machine Invasion. Human Outsmarted?
More comments were issued about the series of news around the net on the Machine vs Man competitions, specially on the GO games (see previous Roundups). Waq, in his blog Waq?s Words and World posted some interesting clarifications and thoughs on the matter.
By the way, it was a 9-stone handicap game, meaning that the computer was allowed to move 9 times before the human made his first. The positions of these handicap stones are usually predetermined to spread evenly over the board. So yea, humans are still that much better than machines in Go.

Machine Invasion. Human Outsmarted? « Waq?s Words and World

Computer Poker Program Knows When to Hold &#8216;Em
And following the trend of the Machine vs Man topic, some more comments, this time on the poker side. The interesting part is that poker-playing artificial intelligence systems, developed by a researcher at the University of California, San Diego School of Medicine, have been released for free use by the public.
Ian Fellows, M.S., entered his program, called ?Fell Omen 2? in the 2008 Computer Poker Competition sponsored by the Association for the Advancement of Artificial Intelligence (AAAI) at its annual conference last month in Chicago, where it placed second in a three-way tie.

Computer Poker Program Knows When to Hold &#8216;Em
Fell Omen Home Page

Journalist rant of the Week




This week, the rant is for PC Advisor where heavy artillery were shooted over Bus Simulator 2008 in the game review column. 
Artificial Intelligence is another key area in which Bus Simulator 2008 performs woefully. In essence, there is none. Cars don?t seem to realise that you?ve actually bothered to stop at a red light and frequently just carry on driving until they crash into you, whereas people are like zombies. At their worst, people have even been known get run over by your stationery bus by walking into it at random locations.

Bus Simulator 2008 review - PC Advisor

New Massive release: 3.5

Massive Software has released Massive 3.5, a new upgrade to Massive, the artificial intelligence (AI)-driven animation system at SIGGRAPH 2008.
Massive 3.5 follows on Massive 3.0 with new features, including Agent Fields, improved integration, and hair and fur dynamics. Massive enables artists to create and direct anything from CG humanoids to birds, animals, cars, and more to deliver realistic and emotive virtual performances. Massive ?agents? are 3D characters that use sight, sound, and touch to interpret and react autonomously to the world around them. Massive incorporates procedural animation and AI, and is used by professionals in animation, visual effects, and design visualization.

Massive 3.5 Debuts at SIGGRAPH 2008

Disney ramps up new technologies

Ed Catmull at Siggraph, the world&#8217;s largest computer graphics conference, was in charge of spread the word: Disney is ramping up its quest for innovative technologies.
Aside from improved ways for fans and online users to interact with robotic and virtual Disney characters, Marks said research would include ?sports visualization for ESPN, sports simulation for Disney Interactive Games, radios and antennas for handheld devices for the parks, and artificial intelligence for park attractions and games.?

Disney ramps up new technologies

Jobs of the week
Another set of AI Game Development related jobs, courtesy of Gamasutra Jobseeker. This week we have very interesting positions, in Rockstar (for his new New England studio), Microsoft GS and Kaos Studios (this one has been for weeks on the board).
Kaos Studios: Senior AI Programmer
Kaos Studios is located in the heart of New York City and is mere blocks from the Empire State Building and the thrill of Midtown Manhattan. Along with the opportunity to live in one of the most exciting cities in the world, we also just finished up one of the most exciting FPS titles to date. Frontlines: Fuel of War (PC/XBOX360) is already receiving great press and that?s just the beginning! We also offer competitive salaries, comprehensive health benefits, and an excellent compensation package. We are always looking for talented artists, developers, and designers to join our growing team, so check out our job postings and let us know what interests you!

JobSeeker: Senior AI Programmer

Rockstar: AI Programmer
Rockstar, the creators of such hits as Grand Theft Auto IV and Bully, has acquired a new studio; Rockstar New England (formerly Mad Doc® Software). With experience in every aspect of game development, and an unmatched expertise in Artificial Intelligence, Rockstar New England is a registered Xbox®, Xbox 360? and PlayStation®3 developer. Having recently completed the Xbox 360 adaption of Bully: The Scholarship Edition, the studio is working on exciting new projects, and looking for people who want to be part of one of the most successful and innovative developers of interactive entertainment.

JobSeeker: Programmers: AI

Microsoft Games Studios: Senior AI Developer
Microsoft Games Studios is looking for experienced game developers to work on next generation Xbox platform titles and Windows games for the first-party publishing team. Come join the publishing teams that worked on games such as Jade Empire, Fable, Conker, PGR3, Rise of Nations, Zoo Tycoon, Dungeon Siege, Vanguard, and RalliSport Challenge. Work with our top first-party development partners to help ship a great first-party line up for next generation Xbox platform.

JobSeeker: Senior AI Developer

Dave on Damian on Halo

Dave Mark, on his site IA on AI, posted some comments on the talk from Damian Isla at the Develop Conference about Halo hystory (which we covered last week).
Damian Isla of Bungie spoke at the recent Develop conference in the UK. He covered a lot of the history of Halo and some of the design decisions that were made in the franchise. Here?s a story from Gamasutra that covers a lot of good stuff.
Specifically, there?s a couple of things I want to touch on.


IA on AI: Damian on Halo at the Develop Conference

The latest in game in Alice 2.0 « 




One more post at Kryotech, commenting some AI advances on its game project. Although simple, this work represents one of the most advanced developments on game AI based on Alice Sofware Project.
This game uses a new AI, that can sense how many allies are left and how badly it is damaged to retreat. This AI also tries to flank you and makes sure that you can?t flank it.

The latest in game in Alice 2.0 « Kryotech

Godfather II AI built on a low-tech card game




Gamester published an interesting article where Gieson Cacho surprisingly reveal: the mob artificial intelligence is created in base of a card game, that senior designer James Agay created.
?It?s how we get the AI to play like real people,? he said. The whole idea started a year ago and it morphed from a prototype tool to a demo tool to something that everyone at the studio plays.

Godfather II AI built on a low-tech card game - Gamester - Where work is all play

Artificial General Intelligence: Now Is the Time
An interesting Google Tech Talk, about the Dr. Ben Goertzel works on Artificial General Intelligence.






When the AI field was founded over 50 years ago, it was squarely focused on the grand dream of creating software displaying general intelligence at the human level or beyond. Since that time the field has drifted in a direction Ray Kurzweil has called &#8220;Narrow AI&#8221;: the creation of intelligent software applications carrying out highly particular functions. The relationship between this sort of narrow AI and &#8220;artificial general intelligence&#8221; (AGI) as in the original dreams of the AI field, is an issue of dispute among experts.

Artificial General Intelligence: Now Is the Time Video
Artificial General Intelligence: Now Is the Time Essay


Stay tuned next week for more smart links from around the web!



Biologically Inspired AI for Computer Games

A book for developers wanting to bridge the gap between academic AI and the games industry, covering:


Evolutionary Algorithms
Neural Networks
Artificial Immune Systems
Particle Swarms


Includes simple explanations for beginners and case studies.  Click here for more details.</div></summary>
  </entry>

  <entry>
    <title>Chronic File</title>
    <link href="http://bestpicsaround.com/rssad.php?1650"/>
    <id>http://yoursite/article/?i=26911680ec3b47138c15008ac00dcfc4</id>
    <updated>2008-08-17T12:00:27-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/rssad.</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Free photo sharing and hosting for your weed and pot pictures
    
</div></summary>
  </entry>

  <entry>
    <title>Cork Costume</title>
    <link href="http://bestpicsaround.com/pic-1650-Cork-Costume"/>
    <id>http://yoursite/article/?i=3f5bbb66a13b17ce623ab39754000da5</id>
    <updated>2008-08-17T12:00:27-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">










    
</div></summary>
  </entry>

  <entry>
    <title>The Art of Smoke</title>
    <link href="http://bestpicsaround.com/pic-1651-The-Art-of-Smoke"/>
    <id>http://yoursite/article/?i=41054b7b88336c2026c27b5e9d502255</id>
    <updated>2008-08-17T12:00:27-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">




















    
</div></summary>
  </entry>

  <entry>
    <title>jClassicRPG's major breakthrough in the </title>
    <link href="http://freegamer.blogspot.com/2008/08/jclassicrpgs-major-breakthrough-in.html"/>
    <id>http://yoursite/article/?i=ed45b78308c178d136836c2db687ede3</id>
    <updated>2008-08-16T16:00:43-07:00</updated>
    <author>
      <name>http://freegamer.blogspot.com/20</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">jClassicRPG detail

jClassicRPG 'Vigilante Eye' is out for us to get. The game engine is nearing completeness, dialogs and a quest system need implementing. Then we'll be able to slay our first 15 foxes for the lazy shepherd Osgar Lindquist. The following features all-ready work:

Fighting: Bash (monsters) and be bashed (by monsters)!
Items: Collect gold and pieces of wood from slain foxes!
Camping: Rest to regenerate health, energy and mana!
Leveling: Spend hours deciding on what stat to increase!

And this is where you come into play! Get the release. Timong is waiting for your bug reports, patches and feature requests! =D

The visual (and aural) and performance improvements that happened lately are pretty much wow. The terrain now looks very natural compared to earlier versions, there are new animated models, there is a tropical background sound loop. I created a rather long video that shows off some of the new features. (Direct download, 118 MB, recommended)

SF.net data mining (har har)

I'm currently working on a simple categorization of all the stable and or mature game-related projects hosted by SourceForge.net. Not fun. But the results will hopefully be.

I will try to learn from Edwart Tufte's The Visual Display of Quantitative Information (which should have shipped today) to create some nice graphical overviews. If you can recommend me a statistical data visualization application, please do!



Block Attack b.q. (before qubodup)

I started a theme for the Tetris Attack-clone block attack. The current status can be seen in this video. Criticism is welcome. :)

The LÖVE smiley competition, in which you can win an awesome comic book, will end in two weeks.

PS: our new-found friends at TIGSource are having a remakes competition. This contestant appears to be willing to release his yet-unnamed game's code and media as free code and art!</div></summary>
  </entry>

  <entry>
    <title>Sushi Made of Legos</title>
    <link href="http://bestpicsaround.com/pic-1649-Sushi-Made-of-Legos"/>
    <id>http://yoursite/article/?i=cb9d89e7cf04780abe1efeeb669e070d</id>
    <updated>2008-08-16T13:30:10-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">














    
</div></summary>
  </entry>

  <entry>
    <title>Hamster Olympics</title>
    <link href="http://bestpicsaround.com/pic-1648-Hamster-Olympics"/>
    <id>http://yoursite/article/?i=27b16ad47f58e641e8c5d5b97e4a3e88</id>
    <updated>2008-08-15T17:00:16-07:00</updated>
    <author>
      <name>http://bestpicsaround.com/pic-16</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
















    
</div></summary>
  </entry>

  <entry>
    <title>Hierarchical Logic and Multi-threaded Ga</title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/365642340/hierarchical-logic-multi-threading"/>
    <id>http://yoursite/article/?i=79743ccb5654744192fdb3109f4ca2ec</id>
    <updated>2008-08-15T06:00:49-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 

These days, the topic of multi-threading comes up rather frequently.  You&#8217;ll either hear sensationalist doomsday scenarios about how incredibly hard it is to implement, or how some language researcher has invented a revolutionary new technology that solves all the world&#8217;s concurrency problems.  Meanwhile, in the background, game developers have been innovating quietly, squeezing more and more performance out of their multi-core hardware&#8230;
With the troublesome first generation of games on modern consoles out of the way, it&#8217;s fair to say that developers have generally achieved a good grasp of multi-threading technology.  It&#8217;s not quite perfect yet, but there&#8217;s a solid base to build upon.  This article looks at ways that multi-threading is currently applied to artificial intelligence in games, and sets the scene for a series of articles that will investigate the process of applying parallelism to hierarchical logic (e.g. behavior trees or task network planners).
NOTE: You can sign-up here (free) to the brand new Insider&#8217;s Area at AiGameDev.com and read the next tutorial in the series - along with its C++ source code.  You&#8217;ll see various benchmarks of a proof-of-concept hierarchical planner built with  Intel&#8217;s Threaded Building Blocks library.

Typical Approach to Multi-threading
In practice, game AI is threaded in a very pragmatic manner: ?What part of the code is taking the most time and how can it be optimized??  This approach has allowed developers to find bits of code that are well suited to being threaded, such as:

Pathfinding, when it&#8217;s low-level enough and doesn&#8217;t require callbacks to the main AI.
Sensory systems processes such as: line of sight checks, many-to-many proximity checks.
High-level combat decisions where appropriate, such as terrain &#038; situation analysis.

You can do relatively well with multi-threading by opportunistically offloading such computations to different threads when performance becomes a problem [PDF, 1].  But with a bit of experience, these systems can be designed upfront so they are better suited to being multi-threaded.  This is particularly the case with heterogeneous architectures like the PS3; since you have only one main PPU and multiple smaller SPUs with very limited memory, you&#8217;ll typically need to architect your code &#038; data so it can fit in SPU memory upfront.


Screenshot 1: Line of sight calculations are relatively easy to multi-thread, and it&#8217;s even possible to offload such computations to dedicated hardware (demo).

With that in mind, developers increasingly build simple frameworks to multi-thread their games [PDF, 2].  This typically includes a way to pass around computation (as function pointers) with their data (as references or pointers), and a mechanism for passing back the result of the computation.  Such frameworks work on most hardware, but particularly shine on homogeneous architectures like the Xbox360 or PC since it&#8217;s so easy to apply anywhere in the code with little hassle.
Even though these techniques work very well in practice, beyond separating sensory processing and path-finding calculations, the AI decision making is not typically handled in a multi-threaded fashion.  Is there room for improvement here?  Would multi-threading the AI&#8217;s reasoning process benefit games in terms of increased performance or improved intelligence?

A Game­play Architecture for Performance [1]
Terrance Cohen, Insomniac Games
Download PDF (390 Kb)


Dragged Kicking and Screaming: Source Multicore [2]
Tom Leonard, Valve Software
Download PDF (235 Kb)

Motivation &#038; Challenges
Over the last few years, the best AI systems have slowly moved towards a more uniform and automated approach to generating behavior.  These days, the cutting edge systems that are being developed are typically STRIPS planners or behavior trees.  (Of course, not everyone has such systems in place, but in AAA studios that emphasize solid AI, such solutions are increasingly common.)
The main motivation for this series of articles is to leverage such uniform AI frameworks to provide an equally uniform approach to multi-threading that could benefit the AI across the board ? with little more work than it takes to create the AI system in the first place.
What does this mean in practice?  This kind of technology could potentially:

Reduce the time taken to figure out which new behavior should be executed in the current context, if there&#8217;s currently no behavior running.
Decrease the cost of checking alternative course of actions to see if they are higher priority, or guaranteeing that the current behavior up-to-date.
Speed up the actual execution of behaviors too, as long as they offer a certain level of parallelism (e.g. procedurally animating different body parts).



Figure 2: Preliminary theoretical benchmarks that show the effectiveness of parallelizing typical AI code depending on its ratio of sequential to parallel logic (source, free registration required).

However, the problem with multi-threading AI computation compared to other approaches is the following:

There are restrictions in the order of the computations, imposed by data dependencies that need to be passed from one task to another.  This rules out straightforward solutions based on data parallelism.
The structure of these dependencies are only fully known at runtime while the AI is reasoning.  This also rules out solutions crafted manually by programmers development time.

Effectively, the challenge here is computing the correct dependencies, threading what&#8217;s possible and making sure the rest is executed according to the specification.
Background
This series of articles will draw from a multitude of different technologies, mixing and matching where appropriate.

Planners

Planners can be as simple as implementing as a basic graph search.  If the state used by this planner is self-contained and does not use using blocking procedures on shared variables, then the search can be parallelized by duplicating the state for every parallel search of a sub-graph.
Suggested Reading: STRIPS, F.E.A.R.&#8217;s SDK

Hierarchical Planners

Hierarchical Task Network (HTN) planners provide a useful and elegant way to model dependencies implicitly using sequences of behaviors.  You can also model indirect dependencies thanks to the direct-acyclic graph structure of the domains (i.e. you just link to a shared behavior). This allows you to structure your logic and the order of the computation with much less effort that it would require to model pre-conditions and side-effects.
Suggested Reading: SHOP, AI Planning Course

Behavior Trees

HTN planners are very similar to behavior trees, except that behavior trees do less planning and focus more on reactive monitoring and control - also known as reactive planning.  What&#8217;s useful about behavior trees in the context of multi-threading is that they are structured as latent procedures that execute over time, and the whole logic is built to deal with any-time behavior.
Suggested Reading: Behavior Trees for Next-Gen AI


Task Schedulers

The final ingredient in the mix is a task scheduler.  This technique makes it easy to implement things like behavior trees in an event driven way, such that little time is wasted polling and querying tasks, instead there&#8217;s a nice callback mechanism that helps parent tasks figure out when the child computation is done. (My article in AI Wisdom 4 shows how this can be done.)
Suggested Reading: Threaded Building Blocks, AI Wisdom 4


Put everything together and you&#8217;ll start to get an idea of multi-threaded prototypes that can be built with this technology, for example simple hierarchical planners that&#8217;s built as a hierarchy of tasks with their computation managed centrally by a scheduler.
Coming Soon&#8230;
Over the next few months, on this blog (RSS) and in the Insider&#8217;s Area (free sign-up), you&#8217;ll learn about various different prototypes that combine this technology, and find out more about the relative benefits and pitfalls.  In particular, the articles will tackle:

Theoretical performance boost of threading sequences to selectors in typical AI logic, when searching the whole tree (worst case).
Over-head of memory allocations, for tasks and copies of state state.  Multi-threading friendly memory allocations.
Expected performance boost in the average case, assuming that the whole tree won&#8217;t be searched exhaustively.
Strategies to improve the cache coherence during multi-threading, by running similar computations in the same thread.

The first article is already online here!  If you have any suggestions or comments, feel free to post them below!



21st Century Game Design

This book is an answer to two important questions: who are we designing games for and how do we do it best?

Click here for more details.</div></summary>
  </entry>

  <entry>
    <title>Secrets of the JavaScript Ninjas</title>
    <link href="http://www.codinghorror.com/blog/archives/001163.html"/>
    <id>http://yoursite/article/?i=d4c748ba02b4140f924603236b27e12a</id>
    <updated>2008-08-14T07:30:22-07:00</updated>
    <author>
      <name>http://www.codinghorror.com/blog</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
One of the early technology decisions we made on Stack Overflow was to go with a fairly JavaScript intensive site. Like many programmers, I've been historically ambivalent about JavaScript:


The Power of "View Source"
The Day Performance Didn't Matter Any More
JavaScript and HTML: Forgiveness by Default
JavaScript: The Lingua Franca of the Web
The Great Browser JavaScript Showdown


However, it's difficult to argue with the demonstrated success of JavaScript over the last few years. JavaScript code has gone from being a peculiar website oddity to -- dare I say it -- delivering useful core features on websites I visit on a daily basis. Paul Graham had this to say on the definition of Web 2.0 in 2005:


One ingredient of its meaning is certainly Ajax, which I can still only just bear to use without scare quotes. Basically, what "Ajax" means is "Javascript now works." And that in turn means that web-based applications can now be made to work much more like desktop ones. 


Three years on, I can't argue the point: JavaScript now works. Just look around you on the web.

Well, to a point. We can no longer luxuriate in the -- and to be clear, I mean this ironically -- golden age of Internet Explorer 6. We live in a brave new era of increasing browser competition, and that's a good thing. Yes, JavaScript is now mature enough and ubiquitous enough and fast enough to be a viable client programming runtime. But this vibrant browser competition also means there are hundreds of aggravating differences in JavaScript implementations between Opera, Safari, Internet Explorer, and Firefox. And that's just the big four. It is excruciatingly painful to write and test your complex JavaScript code across (n) browsers and (n) operating systems. It'll make you pine for the good old days of HTML 4.0 and CGI.

But now something else is happening, something arguably even more significant than "JavaScript now works". The rise of commonly available JavaScript frameworks means you can write to higher level JavaScript APIs that are guaranteed to work across multiple browsers. These frameworks spackle over the JavaScript implementation differences between browsers, and they've (mostly) done all the ugly grunt work of testing their APIs and validating them against a host of popular browsers and plaforms.


The JavaScript Ninjas have delivered their secret and ultimate weapon: common APIs. They transform working with JavaScript from an unpleasant, write-once-debug-everywhere chore into something that's actually -- dare I say it -- fun.



Frankly, it is foolish to even consider rolling your own JavaScript code to do even the most trivial of things in a browser now. Instead, choose one of these mature, widely tested JavaScript API frameworks. Spend a little time learning it. You'll ultimately write less code that does more -- and (almost) never have to worry a lick about browser compatibility. It's basically browser coding nirvana, as Rick Strahl noted:


I've kind of fallen into a couple of very client heavy projects and jQuery is turning out to be a key part in these particular projects. jQuery is definitely one of those tools that has got me really excited as it has changed my perspective in Web Development considerably from dreading doing client development to actually looking forward to applying richer and more interactive client principles.


There are several popular Javascript API frameworks to choose from:


Prototype and Script.aculo.us
JQuery
Yahoo UI Library
ExtJS
Dojo
MooTools


I don't profess to be an expert in any of these. Far from it. But I will echo what Rick said: using JQuery while writing Stack Overflow is probably the only time in my entire career as a programmer that I have enjoyed writing JavaScript code. 

It's sure pleasant to write code against solid, increasingly standardized JavaScript API libraries that spackle over all those infuriating browser differences.  I, for one, would like to thank John Resig and all the other JavaScript Ninjas who share their secrets -- and their frameworks -- with the rest of the community.


[advertisement] Read the largest case study ever published about lightweight peer code review in Best Kept Secrets of Peer Code Review.  Free book, free shipping.


</div></summary>
  </entry>

  <entry>
    <title>Play First… Code AI Later</title>
    <link href="http://feeds.aigamedev.com/~r/AiGameDev/~3/364233918/play-first-code-later"/>
    <id>http://yoursite/article/?i=d1d9b33d6bbe4d2d59f635ed4d9b9495</id>
    <updated>2008-08-13T16:00:45-07:00</updated>
    <author>
      <name>http://feeds.aigamedev.com/~r/Ai</name>
      <email>AUTHOR_EMAIL@email.com</email>
    </author>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Copyright &#0169; AiGameDev.com, 2008. 
This week, Dave Mark tries to take a break from thinking about AI, but ends up doing it anyway!  Do you play your games this extensively before implementing the AI?   Join the discussion below by posting a comment.

An interesting thing happened to me on the way to the second capture point the other day&#8230; I was playing Team Fortress 2 as I have been inclined to do when I am burnt out and need a break from AI, coding, writing my book, writing this column or whatever. However, I have found that it is not that easy to shut of my AI-inclined brain. As I am racing about the various maps in an elaborate dance that is a peculiar mixture of repetitiveness and instantaneous reaction, I find that I am not just thinking about what I am doing&#8230; I&#8217;m also thinking about how an AI agent would &#8220;think&#8221; about what I am doing. 
This may seem a triviality &#8212; and, in a way, a sort of skill set that is necessarily endemic to game AI designers and programmers. However, there was a different cast to what I was doing. When I play single player games, for example, I am always analyzing not only my own play, but that of the enemies. I even write (irregularly) about my observations on one of my blogs, Post-Play&#8217;em. In a non-symmetrical game such as Halo (no Damian, I haven&#8217;t written about it yet), these two streams of thought are somewhat disjoint. I can analyze what I do and what they do. In a reasonably symmetrical game such as Civ 4 (No Soren, I haven&#8217;t written about it yet), however, those two analyses tend to merge somewhat. What I am doing (or should be doing) is something that can be mapped over rather well to what they are doing (or should be doing). This, of course, gives me enormous insight into the possibilities of how the AI was designed and coded. 
&#8220;If the player looses, he should at least know why and learn from it.&#8221;
Using Civ 4 as an example (OK fine, Soren&#8230; now I&#8217;m writing about it, aren&#8217;t I?) (Note to everyone else, he told me that he has been patiently waiting&#8230; so I&#8217;m tweaking him a little here.), I can look at things like the influence maps that are very exposed in the game interface and see how the AI may be making decisions on troop dispositions. I can look at all the different values for food, trade, and production that are being generated and see how the AI may be making decisions on what to do with certain squares in the city radius. Thankfully, the AI seems to be making reasonable decisions in this manner &#8212; which allows me to let the city managers do the same for me for the most part. Still, it is interesting to watch the decisions change over time&#8230; allowing me to infer formulaic thresholds and whatnot. The point is, I can learn a lot&#8230; not only about the AI&#8217;s design but about my own play as well. (Soren quote: &#8220;If the player looses, he should at least know why and learn from it.&#8221; Apparently my education is ongoing. *sigh*)

On-the-Job Training
Back to TF2&#8230; as I mentioned, I have found myself noting a lot of things as I play. For starters, as I originally started playing a few months back, I had to look to other people to learn some of the tactics that were specific to the different maps and the different classes that you can play. I have been more successful with some classes than others. I still can&#8217;t get a handle on being a good Spy, for example. I don&#8217;t know why. Being a good Scout still seems to evade me &#8212; so to speak. As you can see from my Steam ID, I tend to alternate between Engineer and Demoman depending on whether my team is offense or defense at the time. (Upon careful observation, you can also determine that I&#8217;m not very good at the twitchy stuff. My teenagers tell me it&#8217;s because I&#8217;m old&#8230; usually when they are pwning me on Halo 3.) Now that I&#8217;m a bit more familiar with the game and I know the maps (2Fort, Dustbowl and Goldrush being my usually playgrounds), I can definitely speak to tactics, however.
And that&#8217;s where I get annoyed. This time, however, it is not at a computer AI&#8230; it is with real people. Some of the things that people do completely fascinate me in their ineptness and, really, lack of comprehension. This is nothing new, though. I sometimes get the same feeling driving my car or waiting at a fast food counter. What really gave me the epiphany in this whole process was the fact that the types of errors that I was watching live people making looked like the errors that AI agents would make. And that made the whole process of trying to determine how to &#8220;solve&#8221; the problem a lot more challenging and interesting.
Allow me to toss out a few anecdotes (which will, admittedly, read like a rant or a list of pet peeves):

Shooting Blind
As I mentioned, I play as a demoman a lot. I mean a LOT. Why is that? Because I like the indirect nature of the attacks. In fact, I excel at that. What confuses me is that other people do not even consider it. Unlike most of the other classes in the game&#8230; or many other games, for that matter&#8230; the demoman&#8217;s weapons don&#8217;t go in a straight line.  They go up and come down. Welcome to Gravity 101. What this means is that I can shoot over stuff like walls and even entire buildings. If I know there are bad dudes on the others side of that wall, I will just stand back and lob pipe bombs over the top. As visually pleasing as animated carnage is at times, I don&#8217;t need to see dude die. I will be dutifully notified by the indicator in the upper right corner of the screen. I have used this tactic in so many situations on so many maps, it is silly. On the last level of Goldrush, for example, as you make the final turn to the base, there is a building with an elevated path behind it. From there, I can lob over the building all the way into the base area. What&#8217;s more, if your team is fighting around that corner (and anyone knows you can kill 15 minutes there), none of the defenders are likely to pester you back there. Get a dispenser, and you are in business&#8230; just keep spraying stuff back and forth like a killer lawn sprinkler! But how come no one seems to do that?
&#8220;It seems that there is this subconscious need to see what they are shooting at.&#8221;
On the other hand, I watch demomen keep walking around corners and pitching bombs down alleys just like this one when they could have safely lobbed those same bombs over the corner of a wall. It seems that there is this subconscious need to see what they are shooting at. Sure, if you are trying to take down a sentry, it helps to be accurate. But if you are just trying to make a mess of the guys that are milling about, accuracy is overrated&#8230; by the time your bomb gets there, they are going to be gone. So why do you need, to see what you are shooting? Especially if it is quite likely that it will shoot back? 
Taking that to AI, I realized that this is a similar problem that we face when deciding when to shoot. Our natural instinct is to cast a ray and see if there is a LOS to the target&#8230; just like the human player is doing. Calculating the ability to hit someone in ballistic fashion, is a bit more complicated, of course. What&#8217;s more, we also have to put in the logic that we are quite willing to take a &#8220;blind barrage&#8221; approach rather than a &#8220;shoot to kill&#8221; approach.

Pipe Bomb in the Side Pocket
The same can be said for the fun ability to shoot around corners. If we were creating a pool (i.e. billiards&#8230; not swimming) simulation, we would be very cognizant of the fact that we have to take bank shots into account. However, if we were creating the AI for the demoman, this would be a little more obscure. Of course, if you have played a demoman for anything length of time, you have likely realized the power of the bounce. Not only off of walls, but even off of posts and railings. But, surprisingly, many people don&#8217;t use it. Is it because they don&#8217;t even think in those terms? Is it because they can&#8217;t intuitively calculate where they need to shoot in order to hit the desired area?
Again, this would be a similar problem in AI. Calculating where to shoot is trivial for a computer. It&#8217;s a simple exercise in geometry and physics. However, having an AI agent determine that those calculations should even be started is another matter entirely. When is it reasonable? This is similar to the problem above.

Why Don&#8217;t You Just Paint a Target on that Sentry
Next pet peeve&#8230; engineers who put sentries out in the open &#8212; especially when there is a long distance shot right at the sentry. I&#8217;ve often voiced the point that &#8220;Uh&#8230; demomen and soldiers can shoot a lot farther than your sentry, folks!&#8221; But what are the calculations for this? Obviously, there is a control radius for a sentry and you don&#8217;t want the enemy to have a straight shot at you from beyond that area. It sounds simple, but I can see it getting kinda funky.
Sticking with engineers, it is amazing how powerful a network of cross-facing sentries are. This is especially helpful in dealing with spies that enjoy wrecking machinery. As the spy comes visible next to one sentry, the 2nd one can take him out. And yet people seem to not realize the value of this. 

From an AI design standpoint, both of these problems could be solved somewhat by cheating&#8230; that is, tagging the map with desired sentry locations. However, that really isn&#8217;t AI, is it? Part of being an intelligent agent is that determination process of &#8220;what should work&#8221; and &#8220;what doesn&#8217;t work&#8221;. It would seem that there needs to be a calculation that would involve the good place for a sentry when paired with another sentry.
&#8220;One level 3 sentry is better than three level 1 sentries!&#8221;
One last note on Engies&#8230; one level 3 sentry is better than three level 1 sentries. Sheesh&#8230; it&#8217;s math, people! And yet, many guys are blissfully pounding away on their own little sentry rather than using the valuable resource of metal and, more importantly, time to work together and build sentries one at a time. (BTW, 5 engies working on the same sentry can be built to level 3 in about 8 seconds, I believe.) And yet how many times have we seen AI agents doing the same thing? No awareness of each other&#8217;s projects that may be futile when taken individually.
Now is Not the Time&#8230;
Another thing that fascinates me is watching how an engineer will build a dispenser or a teleporter when there is less than a minute to go in the round. What is it you are trying to accomplish here? It&#8217;s like how some cultures would bury food with a dead body. Ya know, the thought is nice, but it probably is going to go uneaten.
AI Solution? A quick fix is a check of the timer&#8230; if the time remaining is less than a particular threshold, don&#8217;t build a certain unit. However, is there more of a comprehensive way of approaching this? If you were to combine the above notion with another observation, we may have an answer. Read on&#8230;
If you are pinned down defending the final capture point on a level, you and your buds are probably not going to be running very far. Sometimes, it&#8217;s all of 20 steps from the spawn door to where the action is. Why the heck would someone be building a teleporter entrance? Sure, they are handy to use to get up to sniper platforms or something, but not as urgent as some other things. And I certainly wouldn&#8217;t leave my sentry and dispenser combo unattended to go and accomplish this. So maybe there would have to be a general &#8220;what is the utility of a teleporter&#8221; value. If you aren&#8217;t going to have time to use it or if it won&#8217;t be worth using it to go all of 30 feet, then don&#8217;t bother.
&#8230; the Time is NOW
&#8220;It&#8217;s not just about killing people&#8230; it&#8217;s about killing the right people!&#8221;
I have often been heard saying two things. When there is about 2 minutes left in a level and my team is defending, I will often remind people to &#8220;tighten up&#8230; let them come to us&#8221;. Sure, I&#8217;m channeling Sun Tzu to an extent, but it makes sense. The worst thing that can happen is for your team members to go wandering off, over-extend, maybe get killed off, and therefore let people through the cracks to capture the control point, push the cart or whatever. I can&#8217;t tell you how many times I have seen a massive push in the last 30 seconds because people were out running around trying to be heroes and, when 2/3 of our team is dead, there is no one left to defend the base. On the other team, if you need to push the cart with 20 seconds left, everyone should be on that cart&#8230; snipers, spies, engineers&#8230; they can&#8217;t kill &#8216;em all. And yet I see people standing around doing their usual gig figuring someone else will capture the point or whatever.
On a related note, I have also been heard after a spectacular loss saying &#8220;It&#8217;s not just about killing people&#8230; it&#8217;s about killing the right people!&#8221; This can be applied to a lot of situations. If there are two people about to capture a control point, the sniper back in the hall is not terribly important. If a single Soldier or Demoman is wreaking havoc on all your Engy&#8217;s equipment from some perch (1st stage of Goldrush is notorious for this), he is a high priority assignment. Take him down. If there is a Medic/Heavy combo cruising around&#8230; don&#8217;t try and kill the Heavy while he is being killed&#8230; kill the Medic first &#8212; that Heavy will be a lot easier when he isn&#8217;t receiving a constant stream of steroids.

You would think all of this is obvious, but people just don&#8217;t seem to get it. But how would I do it in AI? Obviously, the proximity issue is something that can be solved by proximity&#8230; especially when combined with time. If the clock is almost out, building that teleporter or sapping a remote dispenser isn&#8217;t high priority. So all of the values that we would normally assign to a task need to be indexed to the remaining time somehow. The AI for a spy would normally have &#8220;pushing the cart&#8221; as his lowest priority&#8230; as the timer clicked down to the end of the round, however, it would suddenly be a serious consideration.

A similar sort of value system would be put into place for killing enemies. That Soldier killing all the sentries from up on the balcony? Never mind the dude you are chasing around all over the place, lob some grenades up there, would ya? The guy on the cart gets a priority b