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

  <title><![CDATA[Bamboo Cyberdream]]></title>
  <link href="http://blog.shaneliesegang.com/atom.xml" rel="self"/>
  <link href="http://blog.shaneliesegang.com/"/>
  <updated>2013-08-04T18:06:47-04:00</updated>
  <id>http://blog.shaneliesegang.com/</id>
  <author>
    <name><![CDATA[Shane Liesegang]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Dialogue Tweaks: GoT 'Second Sons']]></title>
    <link href="http://blog.shaneliesegang.com/2013/05/dialogue-tweaks-got-second-sons/"/>
    <updated>2013-05-20T08:34:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2013/05/dialogue-tweaks-got-second-sons</id>
    <content type="html"><![CDATA[<p>Very frequently when I watch movies or TV shows, I find myself caught up on one particular bit of dialogue. As a writer, I’m more or less a hack, but I do like to think I have an ear for dialogue, particularly in how to make it sound like actual people are saying it. I’ve decided I’m going to try writing up these instances and how I’d improve the dialogue. By that, of course, I mean, I’m doing it this once. Let’s see if I actually make a pattern of it. My history of blogging is not encouraging in this regard. </p>

<p>What caught me in last night’s <em>Game of Thrones</em> episode (“Second Sons”), didn’t have anything to do with feeling natural; obviously the show takes place in a heightened and arkane reality where characters regularly use language that would sound stilted in more realistic or modern setting. Last night I stumbled on a bit that was two missed opportunities at once. </p>

<!-- more -->

<p>It’s our introduction to Daario Naharis. (It’s worth noting at this point that I haven’t yet read the books [yes, I know, bad nerd], so I have no idea where this character is actually going. I don’t know if this dialouge is taken from the books or was written new for the show. I’m writing this from the perspective considering <em>Game of Thrones</em> purely as a TV program.) He was seen briefly introducing himself to Danaerys, and then later we’re given a scene with him and the other captains of the Second Sons, meant to establish his personality. </p>

<p>The other captains are needling Daario about not sleeping with prostitutes.</p>

<blockquote>
  <p><strong>Dude:</strong> Daario Naharis, the whore who doesn’t like whores.<br />
<strong>Daario:</strong> I like them very much. I just refuse to pay them. And I am no whore, my friend.<br />
<strong>Dude:</strong> She sells her sheath [grabbing the crotch of the woman sitting on his  lap], and you sell your blade. What’s the difference?<br />
<strong>Daario:</strong> I fight for beauty.<br />
<strong>Other Dude:</strong> For beauty?<br />
<strong>Dude:</strong> We fight for gold.<br />
<strong>Daario:</strong> The gods gave men two gifts to entertain ourselves before we die. The  thrill of fucking a woman who wants to be fucked, and the thrill of killing a man  who wants to kill you.<br />
<strong>Dude:</strong> You’ll die young.<br /></p>
</blockquote>

<p>Now, this whole scene and back and forth is a little problematic, but keeping in the spirit of the way the show treats sex and sex workers. When I tweak dialogue or, it’s always an effort to make a better version of the story the writer wants to tell. This is not necessarily the story I would be trying to tell, but that’s ok in this context.</p>

<p>My focus here is Daario’s last line. This is a bit that is clearly meant to be quotable, memorable, and give us insight into his character. He’s a hard man with a playful edge, who sees the world in very simple terms. He speaks plainly and efficiently. </p>

<p>Two problems, though. Firstly, it misses an opportunity to have some mirrored language that would make the quote a bit more effective memetically. It’s akin to John McCain fumbling the “change we can believe in” turn of phrase in his speech after Barack Obama became his presumptive opponent. (Skip to about six minutes in.)</p>

<table style="font:11px arial; color:#333; background-color:#f5f5f5" cellpadding="0" cellspacing="0" width="512" height="340"><tbody><tr style="background-color:#e5e5e5" valign="middle"><td style="padding:2px 1px 0px 5px;"><a target="_blank" style="color:#333; text-decoration:none; font-weight:bold;" href="http://www.thedailyshow.com">The Daily Show with Jon Stewart</a></td><td style="padding:2px 5px 0px 5px; text-align:right; font-weight:bold;">Mon - Thurs 11p / 10c</td></tr><tr style="height:14px;" valign="middle"><td style="padding:2px 1px 0px 5px;" colspan="2"><a target="_blank" style="color:#333; text-decoration:none; font-weight:bold;" href="http://www.thedailyshow.com/watch/wed-june-4-2008/headlines---obama-makes-history">Headlines - Obama Makes History</a></td></tr><tr style="height:14px; background-color:#353535" valign="middle"><td colspan="2" style="padding:2px 5px 0px 5px; width:512px; overflow:hidden; text-align:right"><a target="_blank" style="color:#96deff; text-decoration:none; font-weight:bold;" href="http://www.thedailyshow.com/">www.thedailyshow.com</a></td></tr><tr valign="middle"><td style="padding:0px;" colspan="2"><embed style="display:block" src="http://media.mtvnservices.com/mgid:cms:item:comedycentral.com:171106" width="512" height="288" type="application/x-shockwave-flash" wmode="window" allowfullscreen="true" flashvars="autoPlay=false" allowscriptaccess="always" allownetworking="all" bgcolor="#000000" /></td></tr><tr style="height:18px;" valign="middle"><td style="padding:0px;" colspan="2"><table style="margin:0px; text-align:center" cellpadding="0" cellspacing="0" width="100%" height="100%"><tr valign="middle"><td style="padding:3px; width:33%;"><a target="_blank" style="font:10px arial; color:#333; text-decoration:none;" href="http://www.thedailyshow.com/full-episodes/">Daily Show Full Episodes</a></td><td style="padding:3px; width:33%;"><a target="_blank" style="font:10px arial; color:#333; text-decoration:none;" href="http://www.comedycentral.com/indecision">Indecision Political Humor</a></td><td style="padding:3px; width:33%;"><a target="_blank" style="font:10px arial; color:#333; text-decoration:none;" href="http://www.facebook.com/thedailyshow">The Daily Show on Facebook</a></td></tr></table></td></tr></tbody></table>

<p>The original line: </p>

<blockquote>
  <p>The gods gave men two gifts to entertain ourselves before we die. The thrill of fucking a woman who wants to be fucked, and the thrill of killing a man who wants to kill you.</p>
</blockquote>

<p>My simple edit, change in bold:</p>

<blockquote>
  <p>The gods gave men two gifts to entertain ourselves before we die. The thrill of fucking a woman who wants <strong>to fuck you</strong>, and the thrill of killing a man who wants to kill you.</p>
</blockquote>

<p>Win! Now the line matches in a more memorable way, yet still retains the character’s problematic worldview (ladies are for sexin’; dudes are for killin’).</p>

<p>But it also becomes a marginally less offensive line! Even seeing women as objects useful only for his pleasure, with this edit, he becomes a man who wants the woman to <strong>want</strong> to have sex with him. She no longer simply “wants to be fucked,” presumably by any phallus that happened to wander by; she is now willingly engaged in the moment with a partner she desires. </p>

<p>As I said, I haven’t read the books and am not sure where this character is headed. Given that his next meeting with Danaerys involves sneaking into her bath, holding her servant at knifepoint, and pledging his heart to her, it could be that he is someone who will take advantage of vulnerability. Maybe he shouldn’t be trusted. Maybe that odd skip in the line was intentional — this is a man who is not overly concerned with the consent of his partners, perhaps? </p>

<p>But, watching the show in the moment, it still bothered me that the line could have been made both more rhetorically interesting <strong>and</strong> less misogynistic with just one simple edit. </p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Avoid Comments]]></title>
    <link href="http://blog.shaneliesegang.com/2013/02/avoid-comments/"/>
    <updated>2013-02-24T13:11:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2013/02/avoid-comments</id>
    <content type="html"><![CDATA[<p><em>(Note: this is hastily slapped together while I’m on the road, not really edited or proofread. Please forgive any awkward turns of phrase, typos, or other grave offenses.)</em></p>

<p>A few months ago, in response to some Twitter conversations about how universally terrible the comments sections on various websites were, <a href="http://twitter.com/AvoidComments">I made a Twitter bot</a> that would, every day at 12:30pm Eastern Time, remind people to not read the comments. </p>

<p>The original plan was for it to simply say the same thing every day, but since (a) that would get boring and (b) part of my day job involves coming up with multiple, hopefully witty, ways of saying the same thing, I figured I’d enjoy the challenge of coming up with different ways of doing it. </p>

<p>Holy crap, this thing blew up, and became way more popular than I ever expected. </p>

<p>Anyway, after 100 tweets and 11,000 followers(!!!), it’s time for @AvoidComments to take a bow. From here on out it will repeat the same 100 things that it has to say, in random order, until they’re exhausted. Then it’ll shuffle the deck again and start over. I may pop in with something new from time to time if it’s timely or I’m inspired, but for the most part, this is it. </p>

<p>Some more quick, scattered thoughts as I’m writing this on an iPad in an airport terminal…</p>

<!-- more -->
<p>Maybe the best thing that happened was <a href="http://www.avclub.com/articles/a-new-twitter-handle-wages-war-on-internet-comment,90558/">getting written up in the AV Club</a>, which to me is the surest sign that you’ve made it in this sad modern world of ours. </p>

<p>I’ll admit that it proved a bit trying to have the thing say something new every day. There are a couple repeats in there (a simple “Don’t read the comments” was typically one of the most popular to retweet). Eventually I began outsourcing some of the content to trusted friends who are also good writers… somewhere around 20% of the content is not original to me, sadly. Probably your favorite ones. Sorry. </p>

<p>Along the way it picked up some pretty awesome followers like: </p>

<ul>
  <li>John Cheese (who sadly unfollowed before I could leverage my 15 minutes of fame into a lucrative career writing for Cracked)</li>
  <li>Mark-Paul Gosselaar (who also unfollowed, but it was SO cool to have Zak Morris following my robot, even briefly)</li>
  <li>Lindy West</li>
  <li>Chris Hardwick</li>
  <li>Veronica Belmont</li>
  <li>Caitlin Moran</li>
  <li>Richard Roeper</li>
  <li>Ryan Block</li>
  <li>Miguel de Icaza</li>
  <li>Anita Sarkeesian</li>
  <li>Tom Tomorrow</li>
  <li>Jacqui Cheng</li>
  <li>Justin McElroy</li>
  <li>Arthur Gies</li>
  <li>Ashley Esqueda</li>
  <li>Mike Doughty</li>
  <li>Nathan Rabin</li>
  <li>Fraser Spiers</li>
  <li>Mara Wilson</li>
  <li>Jane McGonigal</li>
  <li>Erin Robinson</li>
  <li>Brenda Brathwaite</li>
  <li>Daniel Rosenfled (C418)</li>
  <li>John Darnielle</li>
</ul>

<p>(Apologies to any awesome people that I forgot; these are just the ones who jumped out at me as people whose work I know and appreciate when I scanned the high-number followers.)</p>

<p>I wish there was a good way of finding out popular Twitter people who retweeted – on occasion I caught awesome folks like Jeri Ryan and Elizabeth McGovern passing on the thoughts of my robot, which made my day in each instance. </p>

<p>I was consistently amazed at the mentions that @AvoidComments would get on Twitter. By the end it was mostly people recommending it to their friends, but there would also be people replying to the robot, arguing with it. Inevitably, the people who would come on and insist that comments were awesome had, on average, 15 followers. </p>

<p>Two tweets I regret are the ones about Lindsay Lohan and Yoko Ono. Lohan is an easy target, but is pretty much always having a rough go of life and probably deserves sympathy more than ridicule. </p>

<p>I was shocked at how polarizing the Yoko tweet was. It was one of the most retweeted, but also the only one that inspired people to actually say they were unfollowing. Yoko is also an easy target, and I had forgotten that there is often a misogynist and/or racist overtone to critiques against her. </p>

<p>In any case, I didn’t delete either of those tweets because, hey, own your shit, but they won’t be included in the reruns. </p>

<p>Anyway, thanks to everyone who followed my silly little bot. Hope it provided some good advice or at least the occasional chuckle. Really, what else can you want from an only partially sentient AI? </p>

<p>(Uh oh, I don’t think I was supposed to say that last part…. uuuuuuh…… <em>SIGNAL LOST</em></p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Impressionist Gameplay]]></title>
    <link href="http://blog.shaneliesegang.com/2013/02/impressionist-gameplay/"/>
    <updated>2013-02-21T19:06:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2013/02/impressionist-gameplay</id>
    <content type="html"><![CDATA[<p><em>Edit: I had a major wire-cross in my brain and originally had this referring to expressionism where I instead meant impressionism. Hilarious. I assure you I am familiar with artistic movements.</em></p>

<p>You enter the capital city of a province, which is inhabited by less than a hundred people. You walk up to somebody and immediately know their name, as they begin telling you bits of trivia about the city. You’re able to walk from one side to the other in about two minutes, and from its highest point, you can see clear to the other side of the province. It would take about about an hour to walk there at a brisk pace. </p>

<p>You take a hefty-looking book from the shelf and find it contains only about five hundred words spanning a dozen pages. </p>

<p>In the course of a month or so, it’s possible for you to become a world-class expert in various forms of combat, lockpicking, archery, persuasion, and calling forth flames from your hands. In the same timeframe, you can be the simultaneous leader of many separate organizations of highly trained specialists, after joining them in the lowest ranks. </p>

<p>Certain elements of <em>Skyrim</em> strain credulity. </p>

<!-- more -->

<p>Yet I’ve been thinking lately about how the whole thing manages to hang together with a verisimilitude that almost rises to actual truth. </p>

<p>We’re pretty familiar with the idea of visual impressionism. </p>

<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/ImpressionSunrise.jpg" title="&#34;Impression Sunrise&#34; by Claude Monet" alt="&#34;Impression Sunrise&#34; by Claude Monet" /></p>

<p>And there are games (though precious few) that use it as a visual style. <em>Skyrim</em> isn’t one of them – it renders the world of Tamriel as realistically as possible given technological constraints. </p>

<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/Skyrim-MountainForestPath.jpg" title="A mountain path in Skyrim" /></p>

<p>But the realism exists in this kind of ever-shifting bubble around the player<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>. The area you see looks and feels as real as we can make it, but the relationships between things dilate and compress to accommodate a good gameplay experience. That mountain in the distance would likely be 10-20 miles away based on the amount of atmospheric color shifting going on, but in the game you could be there in a matter of minutes without even hitting the sprint button. </p>

<p>It all kind of hangs together because our brains aren’t great at processing long-term experiences at that same immediate level – realizing that it didn’t take you nearly long enough to reach the peak requires active reflection, and the game doesn’t really give you any reason to reflect on that particular experience (note how rarely characters make reference to how much time has passed since they met you or since you performed some action; that’s partially a side-effect of the fact that the player can do any activity in the game at their own pace, but it helps avoid drawing attention to the various distortions). </p>

<p><span class="pullquote-right" data-pullquote="The human brain is a fantastically aggressive pattern-recognition engine">
I’ve come to think of these kinds of experiential oddities as “impressionist gameplay.” The human brain is a fantastically aggressive pattern-recognition engine, and will quickly assume that what it’s seeing is similar to what it’s seen before. “Mountain in the distance. Looks about 15 miles away. Now I’m on top of it. Must have crossed that much distance. Works for me.” And we’re able to use this tendency to our advantage in building a world that feels bigger than the actual space it occupies. 
</span></p>

<p>Can this go further than just spatial representation, though? I think so. The Whiterun depicted in the game has <a href="http://www.uesp.net/wiki/Skyrim:Whiterun_People">about 70 residents</a>, but is the capital city of a major hold in the province. When the outlying villages have populations of about eight, that number does make relative sense, but they totally go against our notion of how many people should live in places we call “cities.” But unless you take the time to do your own census and consciously consider your expectations and the game’s presentation, it kind of feels all right. </p>

<p>Impressionism only works as a reflection of some reality, though – in this case, we have to posit the notion of some “real” Whiterun, with a population of thousands, that exists in the “actual” Tamriel. The game is only showing a representation of that city, as best it can. It’s brush strokes of experience that create a loose shape for your brain to fill in. The fact that, of course, there <strong>is</strong> no actual Whiterun either makes this thought exercise that much more pure or that much more wasteful. Your choice. (There’s probably some existing philosophical term to deal with the idea of multiple levels of representational remove from a reality that is fictional to begin with, but I don’t know it.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>)</p>

<p>What’s most fascinating to me from a media/theory perspective, though, is that impressionism arose in part because the rise of photography had removed the burden of realism from visual artists. Since a camera could depict pure reality better than the most skilled painter, painters were free to begin experimenting in other kinds of depiction. Conversely, gameplay impressionism is at least partially caused by production and technological realities; the number of people living in a city is as constrained by our ability to create stories and dialogue for them as it is how many AIs an Xbox 360 can healthily handle at once.<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> </p>

<p>(I don’t have numbers to support it, but my anecdotal experience seems to be that non-photorealistic games tend to increase as game consoles age, because PCs (and eventually shinier consoles) are able to push realism more. Maybe. I’m kind of talking out of my ass here.)</p>

<p>What other kinds of impressionist gameplay exist? Is it mechanical laziness or is there an aesthetic to the broad design brush-strokes? </p>

<hr />

<div class="footnotes">
  <ol>
    <li id="fn:1">
      <p>This image actually somewhat mirrors how the Creation Engine (and practically any other game engine of note) works, in terms of memory persistence, AI behavior, etc. shifting as the player moves through the world. <a href="#fnref:1" rel="reference">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>Though some of the deeper and more cosmological lore regarding the universe of the Elder Scrolls dabbles in some similar philosophical positions. <a href="#fnref:2" rel="reference">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>Obviously there are design tradeoffs that could be made which would ease that development burden – having characters without names/stories that simply fill in the city and make it feel more populous. But giving up that level of detail can draw attention to the fidelity drop, and your brain becomes more focused on your character and the environment than the people. This is the route taken by the <em>Assassin’s Creed</em> games, and that is precisely where they want you to be focusing.<a href="#fnref:3" rel="reference">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ten Years]]></title>
    <link href="http://blog.shaneliesegang.com/2013/02/ten-years/"/>
    <updated>2013-02-09T23:40:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2013/02/ten-years</id>
    <content type="html"><![CDATA[<p><em>I really want to get back to writing about games soon. I’ve got, like, 5 drafts queued up that I just need to finish and kick out. Next week.</em></p>

<p>I’ve spent most of my day trying to write this. I tried my usual muse-stimulators of Scotch, ice cream, naps, long showers, cello music, coding. I pushed hard, but was never able to come up with a clever opening, so this will have to suffice. The rest of it was so thoroughly something I had to say that I’m willing to forgive this. </p>

<p>Today is a strange day for me. February 9th is one of those days that kind of crosses my calendar and I’m never quite sure what to do with it. <strong>Because ten years ago today, my mother died.</strong></p>

<p>This is long and rambling, just like my last ten years. You’ve been warned. </p>

<!--more-->

<h2 id="i-said-goodbye">I said goodbye</h2>

<p>It was my third year of college. Mom had first gotten diagnosed about a year before, and we had more or less known that she wasn’t going to get better since December. Why the hell I was still in college for that semester… who knows. I just remember thinking “What else would I do?” I had spent the previous summer at home to take care of her, instead of staying around school like I did the rest of college. We ate breakfast and lunch and dinner together almost every day. She loved watching, in order, <em>The Sopranos</em>, <em>Jeopardy</em>, and whatever romantic comedy I could find that she hadn’t seen before. (This summer is why I’m kind of a rom-com connoisseur.) I pushed her around our neighborhood in her wheelchair, and drove her to the beach where we’d just sit and watch the waves. When school started again in the fall, she had reached a point where professional assistance was more appropriate, and it just… kind of made sense to go back to school. I think staying too much longer around my hometown with only my quickly evaporating mother for company would have driven me mad. </p>

<p>Anyway. So I was in school, but not. I was doing the 10 hour drive back home pretty much every weekend. Even at school, my brain was elsewhere. Yes, I was that guy who stepped out of class to take a cell phone call. Because (a) it was my first cell phone, given to me so I could know the instant something happened and (b) fuck you, professor, that call might be the last time I get to hear my mom’s voice, so yes, I’m going to take it. </p>

<p>(It was, actually. The last time. When I made it home the next day, she wasn’t talking anymore.)</p>

<p>I sat bleary eyed around a table with my brothers and dad as we talked about funeral schedules and proofread the obituary. In the bedroom, you could sometimes make out the sounds of her struggling to breathe. </p>

<p>“Struggling to breathe” is one of those common phrases that loses weight from repetition. But the effort-filled sound of her dragging the air across her lips is etched into my brain as one of the starkest and eeriest recollections I have. </p>

<p>The next morning, she was still there. Still making that same sound. And I had to go back to school. Thinking about it a decade on, I probably could have afforded to miss that Monday morning lecture. But my connection to reality was so tenuous that all I could do was abide by a schedule that the University computers had optimized months ago. What else would I do? </p>

<p>So I was leaving that morning. I walked into the bedroom. Just my brother Jason was in there. He looked up at me, knew what I was there to do, and walked out without saying a word. </p>

<p>I sat with my mother for the last time. I wanted to try and have some kind of small talk, just to lighten the mood, but there was nothing to talk about other than the fact that one of us was dying. Could she even hear me? For my own piece of mind, I’ve convinced myself that she could. This is why we’re given the powers of delusion: so that we can believe that we did the right things when we had the chance. </p>

<p>I held her hand. I listened to her breath. I leaned over to kiss her one more time, and I watched <em>my</em> tears roll down <em>her</em> cheek. I whispered to her, “Thank you for everything. I love you.”</p>

<p>I stood up and was walking out before I remembered one of the other beautiful powers we have as humans. I leaned back in and whispered, “I’m so sorry for anything I ever did to hurt you.” Then I drove away. </p>

<p>(Vague blanket apologies are typically not the best things to deliver, but under the circumstances and given the genuine sincerity behind it, I’m going to give 20 year-old Shane a pass on this.)</p>

<h2 id="i-said-hello">I said hello</h2>

<p>So I went back to school. (She died a few hours after I left, as I was crossing from Georgia into South Carolina.) And then went back the next weekend for the funeral. And then… technically, that was it. Nothing else occupying my time, right? I could focus back on school and work. </p>

<p>Right. </p>

<p>There is a huge difference between having a parent dying and having a parent dead. And the period of that transition is one of the most surreal times I think I’ve had in my life. </p>

<p>It’s a strange kind of existence during that window where everyone is trying to be nice to you because they know some terrible shit has just happened. I know for a fact that I was insufferable during this time: moody, impatient, unreliable. The worst part of it was when people would try to offer sympathy, because it often took the form of telling me about their grandparents dying. Now, don’t get me wrong, I’ve also lost three grandparents at this point and I know that is a pretty terrible thing. But the impatient Shane would seethe at this, shouting in the back of my mind. “THAT’S WHAT HAPPENS, THOUGH. GRANDPARENTS DIE. THEY’RE OLD. MY MOM WASN’T OLD AND I’M KIND OF TOTALLY LOST RIGHT NOW.” On the surface, I’d thank them for their thoughts. </p>

<p>Then it got interesting. A friend showed up at my doorway, having just heard the news. She looked at me, and I braced myself for the sympathy I’d been immersed in for a while, and all she did was look me in the eye and say “So, I lost my dad when I was sixteen.” And she sat on my couch, and we told stories about our parents, and laughed together and cried together. And that’s when I started realizing that there was what I came to know as a silent fraternity around me, of people who had experienced <strong>real</strong> loss. Someone who I never would have expected to have a non-joking thought came by to talk about his dad, and one professor’s office hours became a strangely emotional bonding session when she was telling me about her sister who died in high school. </p>

<p>I’ve now been on the other side of that conversation a couple times, watching friends suffer through losses like this. I know the rest of the world was well-intentioned and doing the best they could to provide support, but it seemed like only people who had been through it understood that sometimes you just want someone there to talk about anything <strong>other</strong> than the reality you just got punched with. </p>

<p>It’s something you never get over. You just get past. You keep swimming in the mundanities and eventually find yourself back in the land of the living. For me, it took another summer of working out of my apartment, living vampire hours, and talking to almost nobody. I watched the movies I loved, the movies she loved. I cooked the things she had taught me and imagined her correcting my technique. At the end of the summer, I came back for my last year at college recharged and raring to go. Bit by bit you get your life back. </p>

<h2 id="i-said-well">I said “well…”</h2>

<p>And so I’ve now survived a decade without my mom. I got accepted to grad school, graduated college, worked as an Imagineer, finished grad school, worked with Steven Spielberg, fell in love, watched two brothers get married, welcomed two nephews and a niece, shipped a consensus Game of the Year, and… </p>

<p>Hmmm. Damn. Hard to see what’s next. But with all of that, every step of it, every joy, every hardship, everything, my first instinct is still “I should talk to mom about this.” My mom was well known and respected in our town for her wisdom. I remember people coming to our house (which was not really convenient to anyone) just to ask her advice on something about their kids or their family or even their business. (These visits didn’t stop when she was on her deathbed, and up until she couldn’t talk anymore, she was still helping people.) My brothers have all told me how valuable her counsel was as they became adults. </p>

<p>And that’s something I kind of missed out on. I still remember the odd timing – just a week before she was diagnosed (before I had any inkling that something was wrong, but she knew there was trouble incoming) was the first time I ever opened up to her about my personal life. I’ll be damned if her advice wasn’t insightful and spot-on. A week later I first googled the words “glioblastoma multiforme” and uttered the first of many “fuck cancer”s. And I never got to hear her advice again. </p>

<p>I see the rest of my peer group getting their shit together – buying houses, getting married, having kids, starting companies. (No joke, as I was writing this, Facebook let me know that another ex got engaged just today. I think my mom would have liked her, probably even after we broke up. She would be happy for them, so I will be happy for them. I could do a lot worse than trying to react to things the way my mom would have.) And I feel kind of… broken. I wonder if the meager social skills I had in high school had actually been second-hand boosts from my mom, and how much I fail to understand people without her help. My close friends can attest to how frequently I bother them trying to understand inter-personal behavior. (I’m a bit of a robot.)<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<h2 id="ad-astra">Ad astra</h2>

<p>Oddly enough, losing my mom made me into an optimist. Because while it was, and remains, the worst thing that’s ever happened to me, now I have that benchmark. I periodically do this morbid exercise wherein I try to imagine the worst thing that could happen, given my current life conditions. With every scenario, I can measure it: “Would that be worse than losing my mom?” Thus far the answer has always been, “no.” And since I handled that, since I got past that, since I’ve incorporated that to the point where it no longer crushes me on a daily basis, I figure I can handle anything else that happens. </p>

<p>So, looking at it that way, it’s impossible for anything to happen that I couldn’t handle. So bring it on. </p>

<p>I’m confident that some day there will be something that would conceivably be worse. But in a weird way, that’s something to strive for. </p>

<p>The other bit of optimism is how quickly it happened. One day I got an email; less than a year later my mother was gone. If you had told me when I was graduating high school that my mom wouldn’t be around to see me graduate college, I wouldn’t have believed you. I would have gotten angry with you. But all that while, I was just a few years away from the worst parts of the story. </p>

<p>But hey, that means I could always be just around the corner from the best parts of the story, and also have no idea. Because <strong>five</strong> years ago today I was in the middle of what still stands as the <em>best</em> weekend of my life, and never would have seen it coming. Who’s to say where backstory ends and chapter 1 begins?  </p>

<p>Maybe tomorrow. Maybe yesterday. </p>

<hr />

<div class="footnotes">
  <ol>
    <li id="fn:1">
      <p>Seriously, friends are the best and are the only way I’ve gotten through all of this. From the ones who surprised me with a viewing of the Star Wars Holiday Special on my birthday to the one I saw dancing to (coincidentally) one of my mom’s favorite songs as the clock struck midnight last night and both our brains were lolling about in vodka and loud music, I’ve always had people who knew what I needed more than I did, and that’s just been sheer dumb luck on my part.<a href="#fnref:1" rel="reference">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Cleanup on Aisle Three]]></title>
    <link href="http://blog.shaneliesegang.com/2013/01/cleanup-on-aisle-three/"/>
    <updated>2013-01-30T07:21:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2013/01/cleanup-on-aisle-three</id>
    <content type="html"><![CDATA[<p>This weekend I found some strange files floating around my <a href="http://www.dreamhost.com">Dreamhost</a> directories. I was hacked! <a href="http://shaneliesegang.com">My web page</a> is pretty simple and non-dynamic, but I have a bunch of other sites that I host for friends and other side projects, and the current guess is that the hackers got in through an outdated version of Wordpress or the super old installation of Mediawiki that was hanging around. </p>

<p>(Worth noting that the folks at Dreamhost gave some top-notch customer service, helping me figure out where the hack came from, what it had done, and cleaning up the damage. Yeah, they’re a budget host, but I’ve always been pretty impressed as what they let you do and how they help you out when you need it.)</p>

<p>On top of <a href="http://wiki.dreamhost.com/How_to_Upgrade_a_One-Click_Install">updating all of the old web apps</a> and setting them to automatically update in the future, I started looking into making the whole shebang less dynamic so it would be less of a target for hackers. </p>

<p>It was a fun little project to do the conversion, and I’ve detailed it below the cut for anyone who’s interested. Either way, the upside is that this whole thing has me more excited about writing and blogging in general, so hopefully I can ride this enthusiasm to up my posting schedule beyond the meager 2-3 posts/year that it’s become. </p>

<!--more-->
<p>So, yeah. The blog has moved away from Wordpress and is now using <a href="http://octopress.org">Octopress</a>. I would <strong>in no way</strong> recommend Octopress for most people, but it’s fantastic if you’re comfortable with code and version control. The site you’re seeing right now is not dynamic; it’s just a bunch of static HTML files that gets generated every time I make a new post. No database, no formatting engine, and <a href="http://blog.shaneliesegang.com/no-comments">no comments</a>. But it should load faster, be easily portable to other hosts, etc. </p>

<h2 id="converting-posts">Converting Posts</h2>
<p>The first step up was getting my posts out of my Wordpress database and into the flat-file system that Octopress uses. The built-in <a href="https://github.com/mojombo/jekyll/wiki/blog-migrations">conversion scripts</a> that Octopress inherits from its underlying Jekyll engine (lord, talking about software projects quickly makes you sound ridiculous) worked pretty well for a first-pass at this. When it builds the site, Octopress just parses the files in a certain directory and turns them into posts. Something that’s not very well documented is that it uses the file’s extension to determine formatting. I haven’t pushed very far, but it looks like it recognizes <code>.html</code>, <code>.markdown</code>, and <code>.textile</code>. The Wordpress importer made a bunch of HTML files (since Wordpress is authored in HTML by default), but I had been using <a href="http://en.wikipedia.org/wiki/Textile_%28markup_language%29">Textile</a> for my blog, so it was just a matter of changing all their file extensions with a quick bit of shell scripting. </p>

<p>(I actually wasted a TON of time playing with automatic Textile-&gt;Markdown tools before I discovered that Jekyll handled Textile natively. My preferences in lightweight markup languages have shifted over the years, so I’ll probably be using Markdown from here on out. Thankfully, another advantage of the flat-file is that it’s easy to mix-and-match formatting styles as I go. Heck, maybe I’ll use raw HTML just for kicks once.)</p>

<h2 id="comments">Comments</h2>
<p>Right, so the new blog wasn’t going to have comments, but I wanted to preserve the old comments people had made. I looked into a lot of options for this, but in the end just ended up writing a little Python script that pulled them out of the database and applied some formatting to them. I then had to manually append them to their appropriate posts; I probably could have figured out some clever way of cross-referencing the Wordpress database with the Octopress files, but my blog is pretty damned small and it wasn’t too hard to figure out which comments went where. </p>

<p>The script is super ugly (just meant as a quick one-off hack to get the job done) but if anyone else might find it useful, here it is: </p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Formatting Wordpress comments straight from the database
</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
<span class="line-number">37</span>
<span class="line-number">38</span>
<span class="line-number">39</span>
<span class="line-number">40</span>
<span class="line-number">41</span>
<span class="line-number">42</span>
<span class="line-number">43</span>
<span class="line-number">44</span>
<span class="line-number">45</span>
<span class="line-number">46</span>
<span class="line-number">47</span>
<span class="line-number">48</span>
<span class="line-number">49</span>
<span class="line-number">50</span>
<span class="line-number">51</span>
<span class="line-number">52</span>
<span class="line-number">53</span>
<span class="line-number">54</span>
<span class="line-number">55</span>
<span class="line-number">56</span>
<span class="line-number">57</span>
<span class="line-number">58</span>
<span class="line-number">59</span>
<span class="line-number">60</span>
<span class="line-number">61</span>
<span class="line-number">62</span>
<span class="line-number">63</span>
<span class="line-number">64</span>
<span class="line-number">65</span>
<span class="line-number">66</span>
<span class="line-number">67</span>
<span class="line-number">68</span>
<span class="line-number">69</span>
<span class="line-number">70</span>
<span class="line-number">71</span>
<span class="line-number">72</span>
<span class="line-number">73</span>
<span class="line-number">74</span>
<span class="line-number">75</span>
<span class="line-number">76</span>
<span class="line-number">77</span>
<span class="line-number">78</span>
<span class="line-number">79</span>
<span class="line-number">80</span>
<span class="line-number">81</span>
<span class="line-number">82</span>
<span class="line-number">83</span>
<span class="line-number">84</span>
<span class="line-number">85</span>
<span class="line-number">86</span>
<span class="line-number">87</span>
<span class="line-number">88</span>
<span class="line-number">89</span>
<span class="line-number">90</span>
<span class="line-number">91</span>
<span class="line-number">92</span>
<span class="line-number">93</span>
<span class="line-number">94</span>
<span class="line-number">95</span>
<span class="line-number">96</span>
<span class="line-number">97</span>
<span class="line-number">98</span>
<span class="line-number">99</span>
<span class="line-number">100</span>
<span class="line-number">101</span>
<span class="line-number">102</span>
<span class="line-number">103</span>
<span class="line-number">104</span>
<span class="line-number">105</span>
<span class="line-number">106</span>
<span class="line-number">107</span>
</pre></td><td class="code"><pre><code class="python"><span class="line"><span class="kn">import</span> <span class="nn">sys</span>
</span><span class="line"><span class="kn">import</span> <span class="nn">os</span>
</span><span class="line"><span class="kn">import</span> <span class="nn">hashlib</span>
</span><span class="line"><span class="kn">import</span> <span class="nn">time</span>
</span><span class="line"><span class="kn">import</span> <span class="nn">textile</span>
</span><span class="line"><span class="kn">import</span> <span class="nn">MySQLdb</span>
</span><span class="line">
</span><span class="line">
</span><span class="line"><span class="n">comments</span> <span class="o">=</span> <span class="p">{}</span>
</span><span class="line">
</span><span class="line"><span class="n">con</span> <span class="o">=</span> <span class="bp">None</span>
</span><span class="line">
</span><span class="line"><span class="k">try</span><span class="p">:</span>
</span><span class="line">    <span class="n">con</span> <span class="o">=</span> <span class="n">MySQLdb</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s">&#39;***&#39;</span><span class="p">,</span> <span class="s">&#39;***&#39;</span><span class="p">,</span> <span class="s">&#39;***&#39;</span><span class="p">,</span> <span class="s">&#39;***&#39;</span><span class="p">)</span>
</span><span class="line">    <span class="n">cur</span> <span class="o">=</span> <span class="n">con</span><span class="o">.</span><span class="n">cursor</span><span class="p">(</span><span class="n">MySQLdb</span><span class="o">.</span><span class="n">cursors</span><span class="o">.</span><span class="n">DictCursor</span><span class="p">)</span>
</span><span class="line">    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&quot;SELECT * FROM wp_comments&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="n">rows</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
</span><span class="line">    <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
</span><span class="line">        <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="s">&quot;comment_post_ID&quot;</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">comments</span><span class="p">:</span>
</span><span class="line">            <span class="n">comments</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s">&quot;comment_post_ID&quot;</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
</span><span class="line">        <span class="n">comments</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s">&quot;comment_post_ID&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
</span><span class="line"><span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
</span><span class="line">    <span class="k">raise</span> <span class="n">e</span>
</span><span class="line"><span class="k">finally</span><span class="p">:</span>
</span><span class="line">    <span class="k">if</span> <span class="n">con</span><span class="p">:</span>
</span><span class="line">        <span class="n">con</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span><span class="line">
</span><span class="line"><span class="k">def</span> <span class="nf">comment_sort</span><span class="p">(</span><span class="n">comm1</span><span class="p">,</span> <span class="n">comm2</span><span class="p">):</span>
</span><span class="line">    <span class="n">d1</span> <span class="o">=</span> <span class="n">comm1</span><span class="p">[</span><span class="s">&quot;comment_date_gmt&quot;</span><span class="p">]</span>
</span><span class="line">    <span class="n">d2</span> <span class="o">=</span> <span class="n">comm2</span><span class="p">[</span><span class="s">&quot;comment_date_gmt&quot;</span><span class="p">]</span>
</span><span class="line">    <span class="n">stamp1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">mktime</span><span class="p">(</span><span class="n">d1</span><span class="o">.</span><span class="n">timetuple</span><span class="p">())</span>
</span><span class="line">    <span class="n">stamp2</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">mktime</span><span class="p">(</span><span class="n">d2</span><span class="o">.</span><span class="n">timetuple</span><span class="p">())</span>
</span><span class="line">
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="n">stamp1</span> <span class="o">&lt;</span> <span class="n">stamp2</span><span class="p">):</span>
</span><span class="line">        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="n">stamp1</span> <span class="o">==</span> <span class="n">stamp2</span><span class="p">):</span>
</span><span class="line">        <span class="k">return</span> <span class="mi">0</span>
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="n">stamp1</span> <span class="o">&gt;</span> <span class="n">stamp2</span><span class="p">):</span>
</span><span class="line">        <span class="k">return</span> <span class="mi">1</span>
</span><span class="line">
</span><span class="line">
</span><span class="line"><span class="n">outer_html</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;div class=&quot;comment-section-header&quot;&gt;</span>
</span><span class="line"><span class="s">&lt;span class=&quot;comment-header&quot;&gt;</span><span class="si">%i</span><span class="s"> archived comment</span><span class="si">%s</span><span class="s">&lt;/span&gt; &lt;span class=&quot;no-comments&quot;&gt;&lt;a href=&quot;/no-comments&quot;&gt;Why no more comments?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;</span>
</span><span class="line"><span class="s">&lt;ol id=&quot;comments&quot; class=&quot;commentlist&quot;&gt;</span>
</span><span class="line"><span class="si">%s</span><span class="s">&lt;/ol&gt;</span>
</span><span class="line"><span class="s">&quot;&quot;&quot;</span>
</span><span class="line"><span class="n">pingback_outer_html</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;&lt;div class=&quot;comment-section-header&quot;&gt;</span>
</span><span class="line"><span class="s">&lt;span class=&quot;comment-header&quot;&gt;</span><span class="si">%i</span><span class="s"> archived pingback</span><span class="si">%s</span><span class="s">&lt;/span&gt;&lt;/div&gt;</span>
</span><span class="line"><span class="s">&lt;ol id=&quot;pingbacks&quot; class=&quot;pingbacklist&quot;&gt;</span>
</span><span class="line"><span class="si">%s</span><span class="s">&lt;/ol&gt;</span>
</span><span class="line"><span class="s">&quot;&quot;&quot;</span>
</span><span class="line"><span class="n">comment_html</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;    &lt;li class=&quot;comment&quot;&gt;</span>
</span><span class="line"><span class="s">        &lt;span class=&quot;comment-author vcard&quot;&gt;&lt;img src=&#39;http://www.gravatar.com/avatar/</span><span class="si">%s</span><span class="s">?s=64&#39; class=&quot;photo avatar&quot; height=&quot;64&quot; width=&quot;64&quot;/&gt; &lt;span class=&quot;commenter-name&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/span&gt; wrote:&lt;/span&gt;</span>
</span><span class="line"><span class="s">        </span><span class="si">%s</span><span class="s"></span>
</span><span class="line"><span class="s">        &lt;span class=&quot;comment-meta&quot;&gt;Posted &lt;abbr class=&quot;comment-published&quot; title=&quot;</span><span class="si">%s</span><span class="s">&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/abbr&gt; &lt;/span&gt;</span>
</span><span class="line"><span class="s">    &lt;/li&gt;</span>
</span><span class="line"><span class="s">&quot;&quot;&quot;</span>
</span><span class="line"><span class="n">pingback_html</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;    &lt;li class=&quot;pingback&quot;&gt;</span>
</span><span class="line"><span class="s">        &lt;span class=&quot;pingback-meta vcard&quot;&gt;From &lt;span class=&quot;url&quot;&gt;&lt;a href=&#39;</span><span class="si">%s</span><span class="s">&#39; rel=&#39;external nofollow&#39;&gt;</span><span class="si">%s</span><span class="s">&lt;/a&gt;&lt;/span&gt; on &lt;abbr class=&quot;comment-published&quot; title=&quot;</span><span class="si">%s</span><span class="s">&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/abbr&gt;&lt;/span&gt;</span><span class="si">%s</span><span class="s"></span>
</span><span class="line"><span class="s">    &lt;/li&gt;</span>
</span><span class="line"><span class="s">&quot;&quot;&quot;</span>
</span><span class="line">
</span><span class="line"><span class="k">for</span> <span class="n">post</span> <span class="ow">in</span> <span class="n">comments</span><span class="p">:</span>
</span><span class="line">    <span class="n">post_comments</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">comments</span><span class="p">[</span><span class="n">post</span><span class="p">],</span> <span class="n">comment_sort</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="n">pingback_html_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span class="line">    <span class="n">comment_html_list</span> <span class="o">=</span> <span class="p">[]</span>
</span><span class="line">
</span><span class="line">    <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">post_comments</span><span class="p">:</span>
</span><span class="line">        <span class="n">hasher</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">()</span>
</span><span class="line">        <span class="n">hasher</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author_email&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
</span><span class="line">        <span class="n">mailhash</span> <span class="o">=</span> <span class="n">hasher</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
</span><span class="line">
</span><span class="line">        <span class="n">raw_gmt</span> <span class="o">=</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_date_gmt&quot;</span><span class="p">]</span>
</span><span class="line">        <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&quot;%Y-%m-</span><span class="si">%d</span><span class="s">T%H:%M:%S-0500&quot;</span><span class="p">,</span> <span class="n">raw_gmt</span><span class="o">.</span><span class="n">timetuple</span><span class="p">())</span>
</span><span class="line">        <span class="n">raw_local</span> <span class="o">=</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_date&quot;</span><span class="p">]</span>
</span><span class="line">        <span class="n">pretty_date</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&quot;%B </span><span class="si">%-d</span><span class="s">, %Y at %-I:%M%p&quot;</span><span class="p">,</span> <span class="n">raw_local</span><span class="o">.</span><span class="n">timetuple</span><span class="p">())</span>
</span><span class="line">
</span><span class="line">        <span class="k">if</span> <span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_type&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="s">&quot;pingback&quot;</span><span class="p">):</span>
</span><span class="line">            <span class="n">pingback_html_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pingback_html</span> <span class="o">%</span> <span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author_url&quot;</span><span class="p">],</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author&quot;</span><span class="p">],</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">pretty_date</span><span class="p">,</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_content&quot;</span><span class="p">]))</span>
</span><span class="line">        <span class="k">else</span><span class="p">:</span>
</span><span class="line">            <span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author_url&quot;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">):</span>
</span><span class="line">                <span class="n">author</span> <span class="o">=</span> <span class="s">&#39;&lt;a href=&quot;</span><span class="si">%s</span><span class="s">&quot; rel=&quot;external nofollow&quot;&gt;</span><span class="si">%s</span><span class="s">&lt;/a&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author_url&quot;</span><span class="p">],</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author&quot;</span><span class="p">])</span>
</span><span class="line">            <span class="k">else</span><span class="p">:</span>
</span><span class="line">                <span class="n">author</span> <span class="o">=</span> <span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_author&quot;</span><span class="p">]</span>
</span><span class="line">            <span class="n">comment_html_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">comment_html</span> <span class="o">%</span> <span class="p">(</span><span class="n">mailhash</span><span class="p">,</span> <span class="n">author</span><span class="p">,</span> <span class="n">textile</span><span class="o">.</span><span class="n">textile</span><span class="p">(</span><span class="n">comment</span><span class="p">[</span><span class="s">&quot;comment_content&quot;</span><span class="p">]),</span> <span class="n">timestamp</span><span class="p">,</span> <span class="n">pretty_date</span><span class="p">))</span>
</span><span class="line">
</span><span class="line">    <span class="n">exported_html</span> <span class="o">=</span> <span class="s">&#39;&lt;hr/&gt;</span><span class="se">\n</span><span class="s">&#39;</span>
</span><span class="line">
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">comment_html_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">):</span>
</span><span class="line">        <span class="n">exported_comment_list</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
</span><span class="line">        <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">comment_html_list</span><span class="p">:</span>
</span><span class="line">            <span class="n">exported_comment_list</span> <span class="o">+=</span> <span class="n">comment</span>
</span><span class="line">        <span class="n">exported_html</span> <span class="o">+=</span> <span class="n">outer_html</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">comment_html_list</span><span class="p">),</span> <span class="s">&quot;s&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">comment_html_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">exported_comment_list</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">pingback_html_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">):</span>
</span><span class="line">        <span class="n">exported_pingback_list</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
</span><span class="line">        <span class="k">for</span> <span class="n">pingback</span> <span class="ow">in</span> <span class="n">pingback_html_list</span><span class="p">:</span>
</span><span class="line">            <span class="n">exported_pingback_list</span> <span class="o">+=</span> <span class="n">pingback</span>
</span><span class="line">        <span class="n">exported_html</span> <span class="o">+=</span> <span class="n">pingback_outer_html</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">pingback_html_list</span><span class="p">),</span> <span class="s">&quot;s&quot;</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pingback_html_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">exported_pingback_list</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="n">exported_html</span>
</span><span class="line">
</span><span class="line">    <span class="n">exp</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">&quot;comments/</span><span class="si">%s</span><span class="s">.html&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">post</span><span class="p">),</span> <span class="s">&quot;w&quot;</span><span class="p">)</span>
</span><span class="line">    <span class="n">exp</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">exported_html</span><span class="p">)</span>
</span><span class="line">    <span class="n">exp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h2 id="sidebar">Sidebar</h2>
<p>Oddly enough, Octopress doesn’t have great support for posting a bunch of links in the sidebar. I took <a href="https://github.com/BalajiSi/octopress-blogroll">Balaji Sivaraman’s blogroll plugin</a> and modified it. Previously, it looked at a directory where each YAML file represents a different link. I really didn’t want to make a new file every time I wanted to add a link to the sidebar, so in my version, there’s a <code>_sidebar</code> directory in which each file represents a section of the sidebar. </p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>sidebar directory layout
</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
</pre></td><td class="code"><pre><code class="text"><span class="line">_sidebar
</span><span class="line">  |- 1.projects_and_miscellany.yml
</span><span class="line">  |- 2.nifty_places.yml
</span><span class="line">  |- 3.cool_people.yml
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>The number at the front of the file name is parsed out to determine the ordering in the sidebar, and the rest of the filename gets titlecased to become the section label. Inside each file are multiple YAML documents representing each link. Now to add a new link, it’s just modifying the file instead of having to add a new one. </p>

<p>I also stripped out a bunch of dynamic JavaScript polling of RSS feeds and sorting based on most recent post, since it wasn’t really necessary for what I was doing. </p>

<p><a href="http://github.com/sjml/octopress-sidebar">My Octopress Sidebar plugin is now up on a GitHub repo</a>.</p>

<h2 id="git">Git</h2>

<p>I had to finally sit down and get comfortable with <a href="http://git-scm.com">Git</a>. Octopress is pretty much entirely based around using Git to manage the blog, to deploy, etc. Git’s main competition (though I don’t think that’s the right word in this context… the other software playing in their space?) is <a href="http://mercurial.selenic.com/">Mercurial</a>, and I’ve been using that a lot recently in developing <a href="http://angel2d.com">Angel</a>. It’s weird – the concepts are very similar, but Git comes at it from such a different angle. It’s been slow going so far as my brain adjusts to the Git way of doing things. </p>

<p>Mercurial still makes more intuitive sense to me, and I imagine it will be that way for a while, but GitHub’s popularity makes it hard to not at least try to get comfortable using it. So this proved a good motivator to buckle in and get to it. </p>

<h2 id="dropbox">Dropbox</h2>

<p>Finally, I don’t do it often, but I wanted to be able to write a blog post on the go when I had to. Usually when I travel these days, I don’t bring my laptop with me. For most of what I need on the road, my iPad serves me just fine, has way better battery life, is lighter, is harder to break, and doesn’t have to be taken out of my bag at airport security. </p>

<p>But, as is much lamented by the technoscenti, it’s hard to do development things like source control and arbitrary scripting on the iPad, and thus far nobody’s coded up an app that streamlines Octopress deployment from iOS. </p>

<p>Some would give up. I saw it as a challenge. </p>

<p>Luckily for me, so did <a href="http://instant-thinking.de/2012/08/03/synced-and-scheduled-blogging-with-octopress/">Dennis Wegner</a>. </p>

<p>He had a pretty clever set up which included monitoring a Dropbox folder that mapped into his blog’s repository, with different directories for Drafts, Queued Posts, and the normal Published ones. He also had to do some trickery because it had to run through his home Mac mini. Rather than trusting some home machine to always be on, I figured I’d try and leverage an existing server.</p>

<p>I didn’t want to tempt fate at Dreamhost, though, by setting up the Linux Dropbox daemon to run forever on my account there. (Shared hosting; I don’t want to be a bad neighbor.) Thankfully, a friend of mine from college has a server set up that pretty much just serves as the technical playground for our old nerd crew. (This server is called “the bear.”) I’d do all my hosting there if I didn’t love Dreamhost’s panel and One-Click installs so much, but for something that doesn’t need a <em>whole</em> lot of space, it’s great. </p>

<p>SO – my Dropbox account is now syncing on the bear, which also has a copy of the blog’s Git repository, symlinking its relevant directories into the Dropbox. These files could change one of two ways: </p>

<ol>
  <li>
    <p>They get updated from Dropbox, meaning I edited them on my iPad (or some other machine where it was easier to get to Dropbox than syncing Git). In this case, the watcher script (more on that in a second) notices the change, <em>automatically</em> commits the change to Git, regenerates the site, and deploys the static files to hosting. </p>
  </li>
  <li>
    <p>I push to the Git repository on the server from my laptop, which I’ll likely only do after running a deployment from it. In this case, the server repository automatically does an update on its working directory, thus updating the Dropbox files. </p>
  </li>
</ol>

<p>This does require a slight bit of maintenance on my part to remember that I either need to pull from the server (if I’ve updated the site via Dropbox magic) or to push to the server (if I’ve updated locally). That’s pretty similar to my usual workflow of pecking away at a project from multiple computers with source control as my go-between, so it’s not too bad. </p>

<p>Making the the Dropbox watcher script ended up being kind of fun. Once again, I modified someone else’s work, in this case I think adding a tiny bit more magic than was there previously. The original version of the script checked the <code>_drafts</code> folder for any file with a <code>published</code> attribute of <code>true</code>, then renamed it appropriately (so its filename matches the date) and moved it into the <code>_queue</code> folder. <strong>Then</strong> it would check the <code>_queue</code> folder for any posts with a published date set in the past, and move them into the <code>_posts</code> folder. If anything was set to be published, it rebuilds and deploys the site. </p>

<p>Pretty snazzy, but I added some more folds to it. </p>

<ol>
  <li>
    <p>If it comes across a <code>.txt</code> file in the _drafts folder, it renames it to the Octopress scheme using today’s date and the first few words of the file as a temporary title. It also sticks some boilerplate YAML frontmatter (including <code>published: false</code>) in so that its attributes can be parsed by the rest of the script, in addition to giving it a <code>.markdown</code> extension.</p>
  </li>
  <li>
    <p>It also checks the <code>_posts</code> folder for anything with a <code>published: false</code> attribute and moves it back to the <code>_drafts</code> folder. </p>
  </li>
  <li>
    <p>If it changes or moves any files, it does so through Git and automatically commits to the server repository. </p>
  </li>
</ol>

<p>The first point lets me use <a href="http://agiletortoise.com/drafts">Drafts</a> or <a href="http://nebulousapps.net/">Nebulous Notes</a> to make a quick start for a post and then just drop it into the <code>_drafts</code> directory on Dropbox without having to worry about the YAML frontmatter, the correct filename scheme, etc. Later, once I revise it and give the post a proper title, the system will be renaming it anyway. </p>

<p>The second point lets me effectively withdraw a post after it’s been published, in case I made some screwup or just didn’t mean it to go out yet.</p>

<p>The third addition just ensures that everything stays in sync across Dropbox, the server, and my home machine (through push/pulls).  </p>

<p>(I also made sure that it would only parse the metadata (for example <code>date: *</code>) in the designated area at the front of file, as I found when trying to deal with this very post that matching that regex multiple times could spell strange doom for the script.)</p>

<p>The watcher script runs as a cron job every 5 minutes. </p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>A modified watcher script that periodically does blog maintenance on designated directories
</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
<span class="line-number">37</span>
<span class="line-number">38</span>
<span class="line-number">39</span>
<span class="line-number">40</span>
<span class="line-number">41</span>
<span class="line-number">42</span>
<span class="line-number">43</span>
<span class="line-number">44</span>
<span class="line-number">45</span>
<span class="line-number">46</span>
<span class="line-number">47</span>
<span class="line-number">48</span>
<span class="line-number">49</span>
<span class="line-number">50</span>
<span class="line-number">51</span>
<span class="line-number">52</span>
<span class="line-number">53</span>
<span class="line-number">54</span>
<span class="line-number">55</span>
<span class="line-number">56</span>
<span class="line-number">57</span>
<span class="line-number">58</span>
<span class="line-number">59</span>
<span class="line-number">60</span>
<span class="line-number">61</span>
<span class="line-number">62</span>
<span class="line-number">63</span>
<span class="line-number">64</span>
<span class="line-number">65</span>
<span class="line-number">66</span>
<span class="line-number">67</span>
<span class="line-number">68</span>
<span class="line-number">69</span>
<span class="line-number">70</span>
<span class="line-number">71</span>
<span class="line-number">72</span>
<span class="line-number">73</span>
<span class="line-number">74</span>
<span class="line-number">75</span>
<span class="line-number">76</span>
<span class="line-number">77</span>
<span class="line-number">78</span>
<span class="line-number">79</span>
<span class="line-number">80</span>
<span class="line-number">81</span>
<span class="line-number">82</span>
<span class="line-number">83</span>
<span class="line-number">84</span>
<span class="line-number">85</span>
<span class="line-number">86</span>
<span class="line-number">87</span>
<span class="line-number">88</span>
<span class="line-number">89</span>
<span class="line-number">90</span>
<span class="line-number">91</span>
<span class="line-number">92</span>
<span class="line-number">93</span>
<span class="line-number">94</span>
<span class="line-number">95</span>
<span class="line-number">96</span>
<span class="line-number">97</span>
<span class="line-number">98</span>
<span class="line-number">99</span>
<span class="line-number">100</span>
<span class="line-number">101</span>
<span class="line-number">102</span>
<span class="line-number">103</span>
<span class="line-number">104</span>
<span class="line-number">105</span>
<span class="line-number">106</span>
<span class="line-number">107</span>
<span class="line-number">108</span>
<span class="line-number">109</span>
<span class="line-number">110</span>
<span class="line-number">111</span>
<span class="line-number">112</span>
<span class="line-number">113</span>
<span class="line-number">114</span>
<span class="line-number">115</span>
<span class="line-number">116</span>
<span class="line-number">117</span>
<span class="line-number">118</span>
<span class="line-number">119</span>
<span class="line-number">120</span>
<span class="line-number">121</span>
<span class="line-number">122</span>
<span class="line-number">123</span>
<span class="line-number">124</span>
<span class="line-number">125</span>
<span class="line-number">126</span>
<span class="line-number">127</span>
<span class="line-number">128</span>
<span class="line-number">129</span>
<span class="line-number">130</span>
<span class="line-number">131</span>
<span class="line-number">132</span>
<span class="line-number">133</span>
<span class="line-number">134</span>
<span class="line-number">135</span>
<span class="line-number">136</span>
<span class="line-number">137</span>
<span class="line-number">138</span>
<span class="line-number">139</span>
<span class="line-number">140</span>
<span class="line-number">141</span>
<span class="line-number">142</span>
<span class="line-number">143</span>
<span class="line-number">144</span>
<span class="line-number">145</span>
<span class="line-number">146</span>
<span class="line-number">147</span>
<span class="line-number">148</span>
<span class="line-number">149</span>
<span class="line-number">150</span>
<span class="line-number">151</span>
<span class="line-number">152</span>
<span class="line-number">153</span>
<span class="line-number">154</span>
<span class="line-number">155</span>
<span class="line-number">156</span>
<span class="line-number">157</span>
<span class="line-number">158</span>
<span class="line-number">159</span>
<span class="line-number">160</span>
<span class="line-number">161</span>
<span class="line-number">162</span>
<span class="line-number">163</span>
<span class="line-number">164</span>
<span class="line-number">165</span>
<span class="line-number">166</span>
<span class="line-number">167</span>
<span class="line-number">168</span>
<span class="line-number">169</span>
<span class="line-number">170</span>
<span class="line-number">171</span>
<span class="line-number">172</span>
<span class="line-number">173</span>
<span class="line-number">174</span>
<span class="line-number">175</span>
<span class="line-number">176</span>
<span class="line-number">177</span>
<span class="line-number">178</span>
<span class="line-number">179</span>
<span class="line-number">180</span>
<span class="line-number">181</span>
<span class="line-number">182</span>
<span class="line-number">183</span>
<span class="line-number">184</span>
<span class="line-number">185</span>
<span class="line-number">186</span>
<span class="line-number">187</span>
</pre></td><td class="code"><pre><code class="ruby"><span class="line"><span class="c1">#!/usr/bin/env ruby</span>
</span><span class="line">
</span><span class="line">
</span><span class="line"><span class="c1"># Based on Dennis Wegner&#39;s it_queue.rb (https://github.com/derdennis/it_queue)</span>
</span><span class="line">
</span><span class="line"><span class="nb">require</span> <span class="s1">&#39;rubygems&#39;</span>
</span><span class="line"><span class="nb">require</span> <span class="s1">&#39;fileutils&#39;</span>
</span><span class="line"><span class="nb">require</span> <span class="s1">&#39;time&#39;</span>
</span><span class="line">
</span><span class="line"><span class="nb">require</span> <span class="s1">&#39;../plugins/titlecase&#39;</span>
</span><span class="line">
</span><span class="line"><span class="n">empty_yaml</span> <span class="o">=</span> <span class="o">&lt;&lt;</span><span class="no">EOC</span>
</span><span class="line"><span class="sh">---</span>
</span><span class="line"><span class="sh">layout: post</span>
</span><span class="line"><span class="sh">title: %s</span>
</span><span class="line"><span class="sh">tags:</span>
</span><span class="line"><span class="sh">- Bamboo Cyberdream</span>
</span><span class="line"><span class="sh">status: draft</span>
</span><span class="line"><span class="sh">type: post</span>
</span><span class="line"><span class="sh">date: %s</span>
</span><span class="line"><span class="sh">published: false</span>
</span><span class="line"><span class="sh">meta: {}</span>
</span><span class="line"><span class="sh">---</span>
</span><span class="line"><span class="no">EOC</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Determine directory in which we live</span>
</span><span class="line"><span class="vi">@script_dir</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">__FILE__</span><span class="p">))</span>
</span><span class="line">
</span><span class="line"><span class="c1"># This get&#39;s set to 1, if we find a post to publish</span>
</span><span class="line"><span class="n">build</span> <span class="o">=</span> <span class="mi">0</span>
</span><span class="line">
</span><span class="line"><span class="c1"># This is the deploy command for octopress</span>
</span><span class="line"><span class="n">deploy_cmd</span> <span class="o">=</span> <span class="s2">&quot;rake gen_deploy&quot;</span>
</span><span class="line"><span class="c1"># This is the dir where octopress lives</span>
</span><span class="line"><span class="n">build_folder</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="vi">@script_dir</span><span class="p">,</span> <span class="s2">&quot;..&quot;</span><span class="p">))</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Folders where the content lives</span>
</span><span class="line"><span class="n">drafts_folder</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">build_folder</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">,</span> <span class="s2">&quot;_drafts&quot;</span><span class="p">)</span>
</span><span class="line"><span class="n">queue_folder</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">build_folder</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">,</span> <span class="s2">&quot;_queue&quot;</span><span class="p">)</span>
</span><span class="line"><span class="n">posts_folder</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">build_folder</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">,</span> <span class="s2">&quot;_posts&quot;</span><span class="p">)</span>
</span><span class="line"><span class="c1"># Maybe check for the upload of referenced images?</span>
</span><span class="line"><span class="n">images_folder</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">build_folder</span><span class="p">,</span> <span class="s2">&quot;source&quot;</span><span class="p">,</span> <span class="s2">&quot;images&quot;</span><span class="p">,</span> <span class="s2">&quot;blog_images&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Let&#39;s go to the drafts_folder!</span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">drafts_folder</span><span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;Now checking for finished drafts...&quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line"><span class="c1"># Check for drafts in _drafts which were set to &quot;published:true&quot;</span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">entries</span><span class="p">(</span><span class="no">Dir</span><span class="o">.</span><span class="n">pwd</span><span class="p">)</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">post</span><span class="o">|</span>
</span><span class="line">    <span class="k">next</span> <span class="k">if</span> <span class="n">post</span><span class="o">.</span><span class="n">start_with?</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="c1"># Tell me at which post you are looking</span>
</span><span class="line">    <span class="nb">print</span> <span class="s2">&quot;Checking post &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">
</span><span class="line">    <span class="k">if</span> <span class="n">post</span><span class="o">.</span><span class="n">end_with?</span><span class="p">(</span><span class="s2">&quot;.txt&quot;</span><span class="p">)</span>
</span><span class="line">        <span class="nb">print</span> <span class="s2">&quot;Prepping text file &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">        <span class="n">first_line</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">post</span><span class="p">,</span> <span class="o">&amp;</span><span class="ss">:readline</span><span class="p">)</span>
</span><span class="line">        <span class="n">first_line</span><span class="o">.</span><span class="n">gsub!</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span class="line">        <span class="n">bits</span> <span class="o">=</span> <span class="n">first_line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
</span><span class="line">        <span class="n">file_title</span> <span class="o">=</span> <span class="n">bits</span><span class="o">[</span><span class="mi">0</span><span class="o">.</span><span class="n">.</span><span class="mi">5</span><span class="o">].</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">downcase</span> <span class="c1"># max of 6 words</span>
</span><span class="line">        <span class="n">time_string</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-%d %H:%M&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class="line">        <span class="n">date_string</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-%d&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class="line">        <span class="n">text_title</span> <span class="o">=</span> <span class="n">bits</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span><span class="o">.</span><span class="n">titlecase</span>
</span><span class="line">
</span><span class="line">        <span class="n">yaml_out</span> <span class="o">=</span> <span class="n">empty_yaml</span> <span class="o">%</span> <span class="o">[</span><span class="n">text_title</span><span class="p">,</span> <span class="n">time_string</span><span class="o">]</span>
</span><span class="line">        <span class="n">filename</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">#{</span><span class="n">date_string</span><span class="si">}</span><span class="s2">-</span><span class="si">#{</span><span class="n">file_title</span><span class="si">}</span><span class="s2">.markdown&quot;</span>
</span><span class="line">        <span class="n">filename</span><span class="o">.</span><span class="n">gsub!</span><span class="p">(</span><span class="sr">/^.*(\\|\/)/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
</span><span class="line">        <span class="n">filename</span><span class="o">.</span><span class="n">gsub!</span><span class="p">(</span><span class="sr">/[^0-9A-Za-z.\-]/</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">        <span class="n">file_text</span> <span class="o">=</span> <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">post</span><span class="p">,</span> <span class="o">&amp;</span><span class="ss">:read</span><span class="p">)</span>
</span><span class="line">        <span class="n">file_text</span> <span class="o">=</span> <span class="n">yaml_out</span> <span class="o">+</span> <span class="n">file_text</span>
</span><span class="line">
</span><span class="line">        <span class="no">FileUtils</span><span class="o">.</span><span class="n">remove_file</span><span class="p">(</span><span class="n">post</span><span class="p">)</span>
</span><span class="line">        <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">file_text</span><span class="p">)</span> <span class="p">}</span>
</span><span class="line">
</span><span class="line">        <span class="sx">%x{git add </span><span class="si">#{</span><span class="n">filename</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">        <span class="sx">%x{git commit -m &quot;Watcher script processing new file.&quot;}</span>
</span><span class="line">
</span><span class="line">        <span class="n">post</span> <span class="o">=</span> <span class="n">filename</span>
</span><span class="line">    <span class="k">end</span>
</span><span class="line">
</span><span class="line">    <span class="c1"># Get the post date from inside the post</span>
</span><span class="line">    <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span> <span class="n">post</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
</span><span class="line">        <span class="n">frontmatter</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;---&quot;</span><span class="p">)</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
</span><span class="line">        <span class="n">frontmatter</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">grep</span><span class="p">(</span> <span class="sr">/^date: /</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span>
</span><span class="line">            <span class="vi">@post_date</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/date: /</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/\s.*$/</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span class="line">            <span class="k">break</span>
</span><span class="line">        <span class="k">end</span>
</span><span class="line">    <span class="k">end</span>
</span><span class="line">
</span><span class="line">    <span class="c1"># Get the post title from the currently processed post</span>
</span><span class="line">    <span class="vi">@post_title</span> <span class="o">=</span> <span class="n">post</span><span class="o">.</span><span class="n">to_s</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/\d{4}-\d{2}-\d{2}/</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="c1"># Build the new filename</span>
</span><span class="line">    <span class="vi">@new_post_name</span> <span class="o">=</span> <span class="vi">@post_date</span> <span class="o">+</span> <span class="vi">@post_title</span>
</span><span class="line">
</span><span class="line">    <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span> <span class="n">post</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
</span><span class="line">        <span class="n">frontmatter</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;---&quot;</span><span class="p">)</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
</span><span class="line">        <span class="n">frontmatter</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">grep</span><span class="p">(</span> <span class="sr">/^published: true/</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span>
</span><span class="line">            <span class="c1"># Move these post to the _queue-folder</span>
</span><span class="line">            <span class="nb">print</span> <span class="s2">&quot;Moving post &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot; to queue folder, &quot;</span><span class="p">,</span> <span class="s2">&quot;renaming to &quot;</span><span class="p">,</span> <span class="vi">@new_post_name</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">            <span class="c1"># FileUtils.mv(post, queue_folder + &#39;/&#39; + @new_post_name)</span>
</span><span class="line">            <span class="sx">%x{git mv </span><span class="si">#{</span><span class="n">post</span><span class="si">}</span><span class="sx"> </span><span class="si">#{</span><span class="n">queue_folder</span><span class="si">}</span><span class="sx">/</span><span class="si">#{</span><span class="vi">@new_post_name</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">            <span class="sx">%x{git add </span><span class="si">#{</span><span class="n">queue_folder</span><span class="si">}</span><span class="sx">/</span><span class="si">#{</span><span class="vi">@new_post_name</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">            <span class="sx">%x{git commit -m &quot;Watcher script moving draft to queue folder.&quot;}</span>
</span><span class="line">
</span><span class="line">            <span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line">            <span class="k">break</span>
</span><span class="line">        <span class="k">end</span>
</span><span class="line">    <span class="k">end</span>
</span><span class="line"><span class="k">end</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Let&#39;s go to the posts_folder!</span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">posts_folder</span><span class="p">)</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;Checking to see if there are any published posts which need to get pulled back...&quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line"><span class="c1"># Check to see if any of these have been set to &quot;published: false.&quot;</span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">entries</span><span class="p">(</span><span class="no">Dir</span><span class="o">.</span><span class="n">pwd</span><span class="p">)</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">post</span><span class="o">|</span>
</span><span class="line">    <span class="k">next</span> <span class="k">if</span> <span class="n">post</span><span class="o">.</span><span class="n">start_with?</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="nb">print</span> <span class="s2">&quot;Checking post &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">    <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span> <span class="n">post</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
</span><span class="line">        <span class="n">frontmatter</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;---&quot;</span><span class="p">)</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
</span><span class="line">        <span class="n">frontmatter</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">grep</span><span class="p">(</span> <span class="sr">/^published: false/</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span>
</span><span class="line">            <span class="c1"># Move these back to the _drafts-folder</span>
</span><span class="line">            <span class="nb">print</span> <span class="s2">&quot;Moving retracted post &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot; back to drafts folder.</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">            <span class="c1"># FileUtils.mv(post, drafts_folder + &#39;/&#39; + post)</span>
</span><span class="line">            <span class="sx">%x{git mv </span><span class="si">#{</span><span class="n">post</span><span class="si">}</span><span class="sx"> </span><span class="si">#{</span><span class="n">drafts_folder</span><span class="si">}</span><span class="sx">/</span><span class="si">#{</span><span class="n">post</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">            <span class="sx">%x{git commit -m &quot;Watcher script moving retracted post to drafts folder.&quot;}</span>
</span><span class="line">            <span class="n">build</span> <span class="o">=</span> <span class="mi">1</span>
</span><span class="line">
</span><span class="line">            <span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line">            <span class="k">break</span>
</span><span class="line">        <span class="k">end</span>
</span><span class="line">    <span class="k">end</span>
</span><span class="line"><span class="k">end</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Let&#39;s go to the queue_folder!</span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">queue_folder</span><span class="p">)</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;Now checking for queued posts, which are ready for publishing...&quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot; &quot;</span>
</span><span class="line"><span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line"><span class="c1"># Check for the &quot;date: &quot; part of the posts inside of queue. </span>
</span><span class="line"><span class="no">Dir</span><span class="o">.</span><span class="n">entries</span><span class="p">(</span><span class="no">Dir</span><span class="o">.</span><span class="n">pwd</span><span class="p">)</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">post</span><span class="o">|</span>
</span><span class="line">    <span class="k">next</span> <span class="k">if</span> <span class="n">post</span><span class="o">.</span><span class="n">start_with?</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line">    <span class="nb">print</span> <span class="s2">&quot;Checking post &quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">    <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span> <span class="n">post</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span>
</span><span class="line">        <span class="n">frontmatter</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;---&quot;</span><span class="p">)</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
</span><span class="line">        <span class="n">frontmatter</span><span class="o">.</span><span class="n">lines</span><span class="o">.</span><span class="n">grep</span><span class="p">(</span> <span class="sr">/^date: /</span> <span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">line</span><span class="o">|</span>
</span><span class="line">            <span class="c1"># Show me the filename and the matching line</span>
</span><span class="line">            <span class="c1"># Build a Time-object out of the date string</span>
</span><span class="line">            <span class="n">post_date</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/date: /</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">gsub</span><span class="p">(</span><span class="sr">/\n$/</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
</span><span class="line">            <span class="n">now_date</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span>
</span><span class="line">            <span class="nb">print</span> <span class="s2">&quot;Post date: &quot;</span><span class="p">,</span> <span class="n">post_date</span><span class="o">.</span><span class="n">inspect</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">            <span class="nb">print</span> <span class="s2">&quot;Now date: &quot;</span><span class="p">,</span> <span class="n">now_date</span><span class="o">.</span><span class="n">inspect</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span class="line">
</span><span class="line">            <span class="k">if</span> <span class="n">post_date</span> <span class="o">&lt;</span> <span class="n">now_date</span>
</span><span class="line">                <span class="nb">puts</span> <span class="s2">&quot;Post date is in the past. Publish!&quot;</span>
</span><span class="line">                <span class="c1">#puts &quot;Moving post to posts folder...&quot;</span>
</span><span class="line">                <span class="c1"># FileUtils.mv post, posts_folder</span>
</span><span class="line">                <span class="sx">%x{git mv </span><span class="si">#{</span><span class="n">post</span><span class="si">}</span><span class="sx"> </span><span class="si">#{</span><span class="n">posts_folder</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">                <span class="sx">%x{git add </span><span class="si">#{</span><span class="n">posts_folder</span><span class="si">}</span><span class="sx">/</span><span class="si">#{</span><span class="n">post</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line">                <span class="sx">%x{git commit -m &quot;Watcher script publishing queued post.&quot;}</span>
</span><span class="line">                <span class="c1"># Set build variable to 1</span>
</span><span class="line">                <span class="n">build</span> <span class="o">=</span> <span class="mi">1</span>
</span><span class="line">            <span class="k">else</span>
</span><span class="line">                <span class="nb">puts</span> <span class="s2">&quot;Post date is in the future. Do nothing.&quot;</span>
</span><span class="line">            <span class="k">end</span>
</span><span class="line">            <span class="nb">puts</span> <span class="s2">&quot;=&quot;</span> <span class="o">*</span> <span class="mi">50</span>
</span><span class="line">            <span class="k">break</span>
</span><span class="line">        <span class="k">end</span>
</span><span class="line">    <span class="k">end</span>
</span><span class="line"><span class="k">end</span>
</span><span class="line">
</span><span class="line"><span class="c1"># Do a deployment if we need to. </span>
</span><span class="line"><span class="k">if</span> <span class="n">build</span> <span class="o">==</span> <span class="mi">1</span>
</span><span class="line">    <span class="nb">puts</span> <span class="s2">&quot;We build the site!&quot;</span>
</span><span class="line">    <span class="no">Dir</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">posts_folder</span><span class="p">)</span>
</span><span class="line">    <span class="n">output</span> <span class="o">=</span> <span class="sx">%x{</span><span class="si">#{</span><span class="n">deploy_cmd</span><span class="si">}</span><span class="sx">}</span>
</span><span class="line"><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h2 id="whew">Whew!</h2>

<p>Now I got a fancy new blog, and I had some fun doing it. (Yes, this is my idea of fun. I’m a professional nerd, what do you want? No, I won’t fix your computer. Did you reboot it, yet?)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Violent Video Games]]></title>
    <link href="http://blog.shaneliesegang.com/2012/12/violent-video-games/"/>
    <updated>2012-12-17T20:49:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2012/12/violent-video-games</id>
    <content type="html"><![CDATA[<p>I&#8217;ve never experienced violence in any real way.</p>
<p>I&#8217;ve lived a pretty good life &#8212; I was lucky enough to grow up in a nice neighborhood and be sent to a good high school which took me to a quiet suburban college. I&#8217;ve lived in cities cities since then, but my experiences with crime have been limited to having electronics stolen from my car. I can count on one hand the number of times I&#8217;ve been in a fight, and of those fights, nobody ever left with more significant injuries than some scrapes and bruises.</p>
<p>I was lucky to find employment and thus was not forced to join the military<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup>. I always participated in non-contact sports. I was a theater kid. Shit, I think I was even involved in Amnesty International at one point?</p>
<p>I have no idea what it&#8217;s like to genuinely fear for your life. I&#8217;ve never been in a situation where the stakes of the crisis were actual lives. I don&#8217;t know what violence is. <!--more--></p>
<p>But it was always part of my life in some simulated form. I&#8217;ve cheered at football games ever since I watched my brother win a state championship for our high school. I&#8217;ve seen <cite>Star Wars</cite> more times than I can truly count. I read adventure books, watched Saturday morning cartoons, saw horrible things in movies, and play-acted some (retrospectively) pretty intense scenarios.</p>
<p>And then there were, of course, the video games.</p>
<p>I was a junior in high school when the Columbine massacre happened. The media had been amped up about violent video games for a long time, but this was the first time it reached a head while I was mentally aware enough to understand the discussion. I remember having a talk with my mom afterwards &#8212; she was always a lot more savvy than I gave her credit for, and had a pretty good understanding of the role games and movies played in my life. More than anything, she was puzzled about why I, a pretty good kid who had never really shown aggressive behavior, enjoyed those things.</p>
<p>&#8220;I think it&#8217;s about having a sense of power, of being able to do something I&#8217;m not able to do in real life.&#8221; Even then, I was hustling power fantasies and escapism.</p>
<p>&#8220;But why would you want to do those things?&#8221;</p>
<p>Sorry, mom. I still don&#8217;t have a good answer for that one<sup class="footnote" id="fnr2"><a href="#fn2">2</a></sup>.</p>
<hr />
<p>I&#8217;ve often taken the position that media is a reflection of a culture more than it is an active agent within it. That it&#8217;s an artifact of it&#8217;s particular society; that people&#8217;s actions are not influenced by it. As with most opinions that I formed when I was a teenager, I&#8217;ve come to realize that it&#8217;s much more complicated and subtle than that. Even if the wingnut theories about Klebold and Harris mistaking real life for <cite><span class="caps">DOOM</span></cite> were just paranoid fantasies, they still lived in a culture immersed in depictions of heroic individualism, often manifested in its most physical acts.</p>
<p>Michael Moore has never really appealed to me &#8212; I found him overly bombastic, smug, and often moved to incoherence by a self-righteous belief in his own intelligence.</p>
<p>However. </p>
<p>The night of the 2003 Oscars, he said something that has stuck with me. Most people remember him from that night (if they remember at all) being upset about the start of the Iraq war, and yelling, &#8220;shame on you, Mr. Bush!&#8221; during his acceptance speech, to the apparent shock of the other nominees who he had invited to come up with him. Regardless of my agreeing or not agreeing with him, this struck me as tasteless, but whatever, it&#8217;s Michael Moore and it&#8217;s what he does.</p>
<p>But then, backstage, he cooled off a little bit. The interview afterwards is what echoes in me. After a brief attempt to spin the fact that he was booed during his acceptance speech, he posed (and answered) a question:</p>
<blockquote>
<p>What was the lesson that we taught the children of Columbine this week? This was the lesson: that violence is an acceptable means to resolve a conflict.</p>
</blockquote>
<p>Of course, he&#8217;s right. Parents, teachers, religious leaders, and role models take such pains to impress upon children the importance of using their words, of not hitting, of being nice to each other. And then the adults turn around and declare war. And cheer a hard-hitting football game. And laugh at the scene where Indiana Jones shoots that guy who was playing with his sword.</p>
<hr />
<p>So I&#8217;ve never really been a part of violence. And I&#8217;ve long felt uncomfortable with the role of violence in my society. But here I am, working in the most readily vilified form of media we have today.</p>
<p>I don&#8217;t know what responsiblity we have as game developers. I have a responsibility to my leads to produce compelling work. I have a responsibility to my producer to do it on time. I have a responsibility to the other departments to make their stuff look good. Is it also my responsibility to try and improve the collective psyche of my culture? Is it wild hubris to even think that&#8217;s possible?</p>
<p>We, as developers, have plenty of defense mechanisms for skirting our larger responsibilities. We all get the question about violence from people outside the industry &#8212; I&#8217;ve gotten it from romantic interests, from older relatives, from former teachers, from priests, and from strangers. I usually babble something about the importance of choice, and how providing the option of violence adds weight to player choices, and how we strive to show the consequences of violent choices. I say that I&#8217;m personally more interested in other forms of gameplay but emotional and story games are unsolved problems and that&#8217;s why it&#8217;s a really exciting time to be a designer, <em>et cetera</em>.</p>
<p>But come on, folks. We all know that&#8217;s bullshit.</p>
<p>After the Sandy Hook shootings, I found some measure of self-serving relief in remembering that I&#8217;d never made a game where the player could use a gun. Not ten seconds later I felt that horrible wave of guilt that follows conscious self-delusion. My games may not have guns, but they&#8217;ve included beheadings, crotch kicks, defenestrations, and incinerations, all as direct player actions. And of course, someone with the right magic spell could cause as much mayhem as any school shooter<sup class="footnote" id="fnr5"><a href="#fn5">5</a></sup>.</p>
<p>I see trailers for interesting games reduce the wide-ranging gameplay to a highlight reel of inventive murders. I walk down the aisles at E3 and see row after row after row of gun porn and roundhouse kicks.</p>
<p>As developers, we like to point out the violence in films, TV, books, Shakespeare, the Bible, etc, hoping that deflection will absolve games. But even the most hopeful among us has to acknowledge the stark disparity in Percentage of Time Devoted to Violent Acts among the different kinds of media. Even in a summer action flick, the amount of time spent punching and shooting things is substantially lower than it is in the video game tie-in for that same summer action flick. (I don&#8217;t have any actual numbers here and am going strictly by my own perceptions; if anyone does have hard data, I&#8217;d love to see it.)</p>
<p>I still believe that games aren&#8217;t the problem. But every time I say that, and every time I hear another developer say that, it sounds a little closer to the rhetoric of the gun lobby insisting that guns are not the problem. I don&#8217;t think guns themselves are the problem either. But I don&#8217;t think anybody who isn&#8217;t lying to themselves <span class="caps">DOES</span> know what the problem is, and in the meanwhile, maybe we could just start asking ourselves questions about why we do what we do?</p>
<ul>
	<li>I&#8217;ve had numerous positive, safe experiences with guns. I think responsible gun ownership is not only possible, but likely even the norm. At the same time, I also think there is no reason for a civilian to have access to a gun only designed for killing large numbers of other humans.</li>
	<li>I&#8217;ve had wonderful, empowering, memorable experiences with violent acts in video games. I think most people are capable of distinguishing fantasy from reality and not have their virtual actions bleed over into their real lives. At the same time, I have to ask myself why the things we make are so focused on causing harm to other living things.</li>
</ul>
<p>The answers are predictable: it&#8217;s what we know how to simulate; it&#8217;s what people will buy; it&#8217;s what players want to do. But these are just answers. Answers are easy. Solutions are hard.</p>
<hr />
<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> In my last semester of college, I made a long list of my options for after school, ordered by my preference. The penultimate one was joining the Army (with aspirations of being an intelligence officer), right above moving back home. It was far from something I wanted to do, but I was genuinely open to the possibility.</p>
<p class="footnote" id="fn2"><a href="#fnr2"><sup>2</sup></a> My mom was famously good at disarming her kids during tough discussions. When my oldest brother wouldn&#8217;t tone down his language and exhorted someone to &#8220;Turn up the fucking volume!&#8221; she looked at him and said &#8220;You&#8217;re smarter than that. Why would you say that? The volume can&#8217;t fuck.&#8221; He also didn&#8217;t have an answer for that<sup class="footnote" id="fnr3"><a href="#fn3">3</a></sup>.</p>
<p class="footnote" id="fn3"><a href="#fnr3"><sup>3</sup></a> Hmmm. I may just be proving here that the Liesegang boys are easily stymied<sup class="footnote" id="fnr4"><a href="#fn4">4</a></sup>.</p>
<p class="footnote" id="fn4"><a href="#fnr4"><sup>4</sup></a> We are.</p>
<p class="footnote" id="fn5"><a href="#fnr5"><sup>5</sup></a> Oh my, how would you even regulate dangerous magic spells? Imagine someone barging into a Tamriel classroom wielding <a href="https://www.youtube.com/watch?v=bcVVaTZOTZo">Flames</a>. At least in our world it&#8217;s <em>possible</em> to control firearms, but how would you protect a world where anyone can learn to literally make fire come from their arms?</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">4 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/ab17cd2435bab32de87932e4ff2037fe?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Rachel Klimmek</span> wrote:</span>
            <p>Thank you Shane. I thought this was a very thoughtful, even funny post on a topic that is not only politically-fraught but also not that funny. It&#8217;s nice to hear that people in your world are grappling with these issues, even if you do not have all the answers. [Full disclosure &#8211; while I enjoyed my share of gaming growing up, I gravitated more towards Ecco the Dolphin and Atari Winter Olympics than, let&#8217;s say, Mortal Kombat or, in more recent years, the first-person shooters that have become such blockbusters on the market and also occupy a significant portion of my husband&#8217;s free time.] What happened last Friday was tragic &#8211; so much so that people in town have had to create spreadsheets just to figure out how they can possibly attend all the funerals of the children and staff and families they know affected by the shooting. And only half of the memorials have even been scheduled so far, because that&#8217;s all they could accomodate in so many days. In the end, I don&#8217;t think there will ever be any one thing anyone can point to and say, &#8220;This is why this happened&#8221;. Nothing will ever take away the grief and pain and loss that has occurred. And perhaps none of the steps taken in the wake of this latest mass shooting will actually prevent future, similar tragedies. But to have thoughtful people such as yourself coming together, starting conversations about what might help &#8211; not necessarily to prevent a future Newtown or Aurora or Columbine &#8211; but to make the communities we live in better places for each other and especially for the generation coming behind us &#8211; twenty of whom were taken Friday &#8211; that, to me, is a first step towards healing.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-12-18T02:36:47-0500">December 17, 2012 at 9:36PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/f0f65d2a782ff65e8e3e5a140e1a2c0f?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">:) Jen</span> wrote:</span>
            <p>Hi Shane,</p>

    <p>I really do appreciate the beautiful stories that game developers tell.  I played <span class="caps">WOW</span> for a few months, and I always appreciated the creativity, attention to detail, and freedom of choice that it afforded.  You know I would have been all over Skyrim in a hot minute if I had the time.  </p>

    <p>One thing I did notice while playing was that I started to drive my car like I rode my horse.  </p>

    <p>I don&#8217;t think video games are the only source of the problem.  I do think that viewing violence repeatedly, in any form, is harmful.  Unfortunately, we have a generation of young people who have absorbed the implicit message that fear is an emotion to be sought out.  How do we wean them off of that emotional high?  </p>

    <p>:)  Jen</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-12-18T03:15:05-0500">December 17, 2012 at 10:15PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/645afc6dd245e2cfbdad31c66894ed46?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.brettdouville.com" rel="external nofollow">Brett Douville</a></span> wrote:</span>
            <p>Well written piece, Shane (even though the bit about you being in high school when Columbine happened made me feel about 8000 years old).</p>

    <p>I struggle with this myself, and blogged about it just a few days before the horror in Connecticut last week. I don&#8217;t have any answers and I wish I did. The truly compelling and memorable moments in videogames are buried under a lot of&#8230; well, let&#8217;s just say less compelling moments. </p>

    <p>Thanks for the further thoughts. I feel like these are things we should talk about at work on occasion.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-12-18T10:15:05-0500">December 18, 2012 at 5:15AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/f86d787fa202976aca35579620c0da0b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.swimpony.org" rel="external nofollow">Adrienne</a></span> wrote:</span>
            <p>Nice article. </p>

    <p>I think any artist worth their salt has to question what good their art is to anyone else. Unless you do it only for yourself, you are responsible for what you make. Even if you don&#8217;t totally understand it. Which is great and sucks at the same time. </p>

    <p>I&#8217;m a girl. For the record: I haven&#8217;t every really had urges to pick up a stick and pretend to shoot something with it. I was out of the loop for most of the development of gaming until recently I played <span class="caps">SKYRIM</span>. I enjoyed the shit out of it. I also noticed something:</p>

    <p>When I first played, a giant spider would jump out at me and I&#8217;d scream and throw the controls across the room. A week later a spider would jump out at me and I&#8217;d blast it with a fireball and scream &#8220;Oh my god I killed it.&#8221; A couple weeks later, I took a perverse glee in slamming him with my newly heightened firepower across a room. 400 hours of game play later, I annoyedly said &#8220;Get the fuck out of my way&#8221; and destroyed his eight friends without so much as a pulse quickening. </p>

    <p>To me that&#8217;s just habituation. Which isn&#8217;t bad, or good. It just is. I habituated to a situation in which, when a giant spider jumps out at me, I know that I need to destroy it to move forward. </p>

    <p>I am pretty confident that I will never walk down the street and see some guy jump out at me and confuse that guy with a giant spider. </p>

    <p>Am I as interested in spending 400 hours of gameplay habituating myself to shoot people? Personally, no. But I also don&#8217;t think my fiancee is going to confuse a guy who jumps out at him for the Nazi in the game he&#8217;s currently playing.</p>

    <p>As with all art, there&#8217;s a spectrum of metaphor, intensity and responsibility. There&#8217;s probably a level of detail and realistic portrayal of violence that could possibly habituate one to something closer to real life. There&#8217;s probably an amount of interface with violence that increases one&#8217;s general tolerance. We all know people less able to create responsible boundaries between their inner lives and other people. And there are many many factors that add up to a person creating an incredibly poor decision, any one of which removed might change the outcome.  </p>

    <p>And that&#8217;s not totally your responsibility, nor does it absolve you from the question of what kind of mark do you want your work to leave on those who engage with it. But you&#8217;re a smart thinking person. And as long as you stay a smart thinking person, you can be a leader in charting the course for where your medium heads to in the future.</p>

    <p>I have some friends in town that made a piece in line with some of the stuff you&#8217;re talking about here. Check it out, I think you might enjoy:<br />http://teamsunshineperformance.com/portfolio/punchkapow/</p>

    <p>Also, sorry that Philly stole your <span class="caps">GPS</span>.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-12-22T15:16:43-0500">December 22, 2012 at 10:16AM</abbr> </span>
    </li>
</ol>
<div class="comment-section-header">
<span class="comment-header">3 archived pingbacks</span></div>
<ol id="pingbacks" class="pingbacklist">
    <li class="pingback">
        <span class="pingback-meta vcard">From <span class="url"><a href='http://waltmcgough.com/2012/12/20/when-there-are-no-solutions/' rel='external nofollow'>When There Are No Solutions | Walt McGough</a></span> on <abbr class="comment-published" title="2012-12-21T03:08:48-0500">December 20, 2012 at 10:08PM</abbr></span>[&#8230;] inestimable Shane, a friend and video game designer, has a wonderful and ruminative post up on his blog that shares some thoughts from his perspective on video games, violence and media [&#8230;]
    </li>
    <li class="pingback">
        <span class="pingback-meta vcard">From <span class="url"><a href='http://swimponypa.wordpress.com/2012/12/22/responsibility/' rel='external nofollow'>Responsibility |</a></span> on <abbr class="comment-published" title="2012-12-22T21:07:49-0500">December 22, 2012 at 4:07PM</abbr></span>[&#8230;] friend of mine who works for a well known video game design company recently posted a thoughtful article on violence in video games. Reading this got me thinking about responsibility in art [&#8230;]
    </li>
    <li class="pingback">
        <span class="pingback-meta vcard">From <span class="url"><a href='http://www.chriszamanillo.com/2012/12/this-week-in-videogame-bloggingdecember-23rd/' rel='external nofollow'>CHRISZAMANILLO.COM &raquo; This Week in Videogame Blogging:December 23rd</a></span> on <abbr class="comment-published" title="2012-12-24T06:16:41-0500">December 24, 2012 at 1:16AM</abbr></span>[&#8230;] in his personal blog, developer Shane Liesegang shares his own reflections and addresses his fellow developers in regards to defending the prevalence of violence in [&#8230;]
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Talking to Press]]></title>
    <link href="http://blog.shaneliesegang.com/2012/08/talking-to-press/"/>
    <updated>2012-08-03T16:39:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2012/08/talking-to-press</id>
    <content type="html"><![CDATA[<p>My Twitter feed was oddly divided this afternoon, with lots of emotion and opinions swirling around a pair of articles from <a href="http://kotaku.com/5928663/gamings-biggest-problem-is-that-nobody-wants-to-talk">Kotaku</a> and <a href="http://penny-arcade.com/2012/08/03/systemica">Penny Arcade</a>. In short it comes down to Kotaku wishing more people in the industry would talk with press honestly, and Penny Arcade calling them childish for expecting that.</p>
<p>As rarely as I find myself saying it these days, I found myself on the side of Penny Arcade. The other developers I know (either in real life or via the large communal break room of Twitter) were fairly split on the issue, but I noticed a pretty clear pattern: small developers agree with Kotaku, and large developers agree with Penny Arcade. (There are exceptions, of course; I&#8217;m making a gross generalization.) <!--more--></p>
<p>I&#8217;m a game designer, so I tend to see most things in terms of incentive structures. What it comes down to, I think, is the perspective of the given studio. What&#8217;s the incentive to speak with the press? For a small studio, you get exposure; for a large studio, you have some more risks. Because the press wants something <em>newsworthy</em>, and the larger the company gets, the more likely it is that &#8220;newsworthy&#8221; == &#8220;negative.&#8221; Since most small games fail, it&#8217;s newsworthy when one does well, so the press (rightly) wants to tell that story. When a large company screws up, that&#8217;s more of a story than &#8220;Great company releases another great game.&#8221; And honestly, there&#8217;s already more than enough coverage of positive news from big companies (because, well, marketing and PR departments exist), so to find a scoop, you&#8217;ve got to find dirt.</p>
<p>(I&#8217;m speaking mostly of the enthusiast press here, rather than more in-depth journalist pieces; I have friends in both types of games writing, and hope I&#8217;m not offending either here.)</p>
<p>I don&#8217;t blame journalists for this; it&#8217;s just the nature of the beast. Deliver an interesting, unique story that will draw in readers. Sometimes that means finding one negative quote and twisting it out of context to form a compelling headline. I&#8217;m not so cynical that I think the press is lying in wait wanting to trap us in gotchas, but from a game design perspective, their incentive system is set up to <strong>make</strong> us suspicious.</p>
<p>This is why large studios have just a couple mouthpieces, and they&#8217;re almost always the people at the top. Usually they&#8217;re at the top because they&#8217;re good, but they&#8217;re also able to speak authoritatively about the game. Our team at Bethesda is huge and I honestly don&#8217;t know everything that everyone is working on. If I were to offer any kind of speculation, I&#8217;d have to be honest and say &#8220;I don&#8217;t know how [New Feature X] is going to turn out,&#8221; and no matter what I said around that, it could be construed as &#8220;Bethesda designer skeptical of marquee feature.&#8221;</p>
<p>Like most issues worthy of discussion, it&#8217;s not simple, and there&#8217;s no easy solution. I personally would <strong>love</strong> to see more interviews with people lower down the chain, simply for my own selfish reasons of wanting to hear the perspectives of people at similar positions to my own. The way Ken Levine relates to <cite>Bioshock</cite> is so different from the way I relate to <cite>Skyrim</cite> that reading interviews with him actually doesn&#8217;t teach me a whole lot. I&#8217;d love to read interviews with junior designers or artists, but I completely understand why Irrational doesn&#8217;t want to have that happen. There&#8217;s just so little upside.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">2 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/567a2fac519d4f9a0c644793c240b2a9?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Jim Lawrence</span> wrote:</span>
            <p>Interviews with junior designers would of great interest to me, but the would only really be viable after the game&#8217;s release, which would make them not &#8220;newsworthy&#8221;.  An article about the experiences of designers during production of a game that is already out would have a much smaller target audience than one that is reporting on what games are going to be &#8216;must plays&#8217; for the summer, and would unfortunately that leads to much less incentive for a news site to post.  And like you said, journalists main incentives for wanting information would be looking for negatives&#8230;because if they are positives, they would be in the company&#8217;s press release.  </p>

    <p>More information can be a great thing, but most people don&#8217;t realize that every person&#8217;s communication will be filtered by their own motivations.  Sure Kotaku isn&#8217;t out to get big developers, but intention doesn&#8217;t really matter when the motivation is for them to attract readers.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-08-03T21:47:07-0500">August 3, 2012 at 5:47PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/4feba91f77b43c3e0a24e9418c91bf1b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Hoobler</span> wrote:</span>
            <p>I know I&#8217;m behind the curve here, but I was thinking about this issue the other day and I had a thought &#8212; isn&#8217;t the core problem here that games media is so obsessed with unfinished products? I agree that there&#8217;s no real upside for developers to talk to external media in mid development, but why aren&#8217;t there more &#8220;post-mortem&#8221; interviews? Why hasn&#8217;t there been a series of interview with Skyrim&#8217;s designers (for example) discussing why they did what they did in the various parts of the world that everyone is now completely familiar with? I can&#8217;t help feel that part of the reason that gaming isn&#8217;t more respected as an art [oh god I can&#8217;t believe I went there, please no one focus on that in a response] is that there&#8217;s so little focus on analyzing and exploring published works that everyone who&#8217;s a part of the community (developers, journalists, and public) can all talk about and form opinions on.</p>

    <p>In this sense, I think that <span class="caps">GDC</span> is a much better reflection of what games &#8220;media&#8221; should be rather than E3.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-08-15T18:41:00-0500">August 15, 2012 at 2:41PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Waking Up]]></title>
    <link href="http://blog.shaneliesegang.com/2012/06/waking-up/"/>
    <updated>2012-06-25T11:35:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2012/06/waking-up</id>
    <content type="html"><![CDATA[<p><em>Note: this blog is usually about video games. This time it&#8217;s not. If you want to read about video games, skip this post. Similarly, if you like this post, it doesn&#8217;t necessarily mean you will like the rest of this blog. It is usually about video games.</em></p>
<p>I graduated from the University of Virginia, which was one of the first public universities anywhere in the world. I didn&#8217;t grow up in Virginia, but quickly came to think of U.Va. and indeed the entire state as my home. When I moved to the DC area from California, I first chose to live on the Virginia side, even though my work was in Maryland. The state and its flagship school are closely bound up in my present identity.</p>
<p>There&#8217;s not a whole lot I can add to the discourse surrounding the series of dramatic events that have unfolded in Charlottesville over the last few weeks. I have a journeyman&#8217;s interest in (and a much-less-than-journeyman&#8217;s knowledge of) business history and theory. I have no formal training or experience running a company, but I dive into books about the subject and drink in stories of what made certain companies rise and others fall. So when the phrase &#8220;strategic dynamism&#8221; was getting thrown around frequently in the commentary around Teresa Sullivan&#8217;s forced resignation, I did a bit of research on the subject to see what, presumably, the University was lacking. <!--more--></p>
<p>(Note: I put only 1-2 hours of research into this subject, if I&#8217;m being generous. This time was also spent eating and being distracted by other things on the internet. I would not consider my knowledge of strategic dynamism sufficient to feel comfortable passing judgment on someone&#8217;s implementation of it, but if I were on the board of a company which had devoted itself to strategic dynamism as a strategy, I would put a more substantial effort into educating myself. Lack of knowledge should indicate caution; the Board of Visitors seems to believe that their lack of knowledge and experience in higher education endows them with incisive outsider clarity. I point you to <a href="http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect">the Dunning-Kruger effect</a>.)</p>
<p>As far as I can tell, strategic dynamism is a process of abandoning a methodical approach to long-term planning in favor of many radical short-term alterations with the hope of finding improvements. Again, I have no business training, so there&#8217;s probably more to it than this, but the buzzword articles I&#8217;ve seen on it lead me here.</p>
<p>So, in short, it&#8217;s a slightly formalized version of panic. Of flailing until you stumble across something that works, like the blind squirrel finding a nut. But both recent and long-term business history show us that successful companies are ones which know their core competencies and play to their strengths. This doesn&#8217;t imply a conservative approach, or a lack of change, but a considered process of adapting to changing markets. The companies that attempt to reinvent themselves radically while forgetting what they do well end up out of business far more frequently than they succeed.</p>
<p>Gah. I hate talking and thinking like this. It&#8217;s why I haven&#8217;t gone to business school.</p>
<p>My point is this: U.Va. did not and does not need to panic. Like all higher educational institutions, it&#8217;s facing pressures and change. Higher education has <strong>always</strong> faced challenges. There was never a golden age when education spending was unquestioned and alumni donations rolled in without effort and compromise. But what has kept the University of Virginia solid for nearly 200 years has been that it hasn&#8217;t forgotten where its strengths lie. We now offer degrees in subjects that hadn&#8217;t been invented in 1819. We excel at sports that had never been played. We educate students who weren&#8217;t considered worthy of voting rights. We&#8217;ve changed, and we will change again.</p>
<p>But we make the smart changes. The ones that the community deems necessary for the mission. The reason I can meet another U.Va. grad and feel a kinship with him or her is that I have some confidence that the place we graduated from is the same place, no matter how much time passed between the two of us walking the Lawn. I hope to have that same confidence in twenty years.</p>
<p>I&#8217;ve been referring to U.Va. in the first person a bit. Up until this month, I would say I was a fairly typical alumnus. I cheered for Virginia sports teams, attended local events, and gave irregularly and negligibly to the annual giving campaigns. I didn&#8217;t know what a rector or provost even was, beyond some vague notion of a high-ranking leader of a university. If you had asked me who the U.Va. president was, I would have stumbled for a bit. Then you would have prompted me, &#8220;Teresa Sullivan?&#8221; and I would have said, &#8220;that&#8230; sounds&#8230; right?&#8221;</p>
<p>No more.</p>
<p>I am now far more educated on university governance than I ever was. I know who Teresa Sullivan is. I will know who the next president is, and the next. For the rest of my life, I will be an engaged alumnus who follows, cares about, and supports his alma mater. This is not a pledge; this is a statement of the change that has happened. My mind, my heart, my efforts, and my checkbook will be devoted.</p>
<p>I&#8217;m not the only one who&#8217;s woken up this way. The University has an incredible chance here to focus this newly roused alumni energy and change the place in unimaginable ways.</p>
<p>But all of that opportunity will go away if we start to worry that we&#8217;ll no longer recognize the U.Va. of the future.</p>
<p>I genuinely have no idea if Teresa Sullivan was or would be an effective president. But the methods and reasons for making a change like this have to stay tied to the traditions that have earned the University the reputation it has. The Board has a chance to do something right on Tuesday. Very few of us get second chances; think about how much you&#8217;d give up for the ability to correct a few key mistakes in your life. All the members of the board have such a chance before them. I implore them to make the right choice.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">2 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/785dd74cedf1ac7ec8b8069fa90df906?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Lauren</span> wrote:</span>
            <p>Well put, Shane!!  Let&#8217;s hope the <span class="caps">BOV</span> feels similarly.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-06-25T16:11:44-0500">June 25, 2012 at 12:11PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/ef67ddeee094102eb857e964dc240f9c?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">JR</span> wrote:</span>
            <p>From reading articles written about President Sullivan&#8217;s tenure thus far, it strikes me that there is a resemblance to a leader taking over an organization that has been stretched past capacity for some time. </p>

    <p>I don&#8217;t know if this was a conscious approach by Pres. Sullivan or if this is just her natural style, but I do think that if they install someone who is looking to move short distances in random directions at high speeds (and the organization was running at or above capacity) that they will quickly lose buy-in and people will either leave or get used up. This may have been to what Prof. Wolf referred in his (rather brusque) resignation letter.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2012-06-26T17:40:45-0500">June 26, 2012 at 1:40PM</abbr> </span>
    </li>
</ol>
<div class="comment-section-header">
<span class="comment-header">1 archived pingback</span></div>
<ol id="pingbacks" class="pingbacklist">
    <li class="pingback">
        <span class="pingback-meta vcard">From <span class="url"><a href='http://www.grandelusions.net/blog/2012/06/26/scars-and-stitches-bury-me/' rel='external nofollow'>Scars and stitches bury me | GranDelusions</a></span> on <abbr class="comment-published" title="2012-06-26T19:34:22-0500">June 26, 2012 at 3:34PM</abbr></span>[&#8230;] My really good friend Shane wrote a nice blog about the issues going on at UVA right now. It&#8217;s likely to be resolved shortly (in one way or [&#8230;]
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Procedural Orders]]></title>
    <link href="http://blog.shaneliesegang.com/2011/12/procedural-orders/"/>
    <updated>2011-12-04T19:58:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2011/12/procedural-orders</id>
    <content type="html"><![CDATA[<p>Oh wow, I haven&#8217;t blogged in a while. The last time I did it was met with a small shitstorm of people passionately agreeing and passionately disagreeing with me. So I guess I touched a nerve?</p>
<p>Anyway, in the meanwhile, I helped put out <a href="http://www.elderscrolls.com/skyrim/">a game</a>. It&#8217;s doing pretty well. You should play it. Also, in place of a love letter to <cite>Marathon</cite>, I&#8217;m doing a whole <a href="http://frogblasttheventcore.net/">blog series</a> with <a href="http://www.burningnorth.com/">George Kokoris</a> and <a href="http://critdamage.blogspot.com/">Brendan Keogh</a>. Both of them are inimitable and excellent, and I&#8217;m looking forward to seeing where we go with this.</p>
<p>I am now about to make the most pointy-headed blog post I&#8217;ve ever made or likely will make. Fair warning.<!--more--></p>
<p>I&#8217;ve spent a lot of my professional career (and a lot of my academic studies before that) thinking about procedural story. It&#8217;s a topic near and dear to my heart, and I was thrilled by how much of it we managed to squeeze into Skyrim (even if it&#8217;s just scratching the surface). If you&#8217;ve ever heard me start expounding on this topic (especially if I&#8217;ve had a few), you may have heard me mention this notion I have of &#8220;orders&#8221; for procedural stories.</p>
<p>In my mind, it&#8217;s essentially a way to break down various degrees of procedurality so that they can be more productively discussed. I&#8217;ve seen way too many purists dismiss something as &#8220;not <em>really</em> procedural&#8221; because it doesn&#8217;t hit their particular standard. But the only way this tech will get pushed forward (and eventually disrupt, as I still believe is possible) is if we can acknowledge that there&#8217;s a continuum and that a game&#8217;s specific position on that continuum need not disqualify it from discussion and study.</p>
<p>With these orders, I&#8217;m thinking very specifically of narrative and story at a high level, and not terribly interested in lower-level action-driven experiences. Yes, you could argue that a chase sequence in <cite>Assassin&#8217;s Creed</cite> contains procedural story-like substance, but if we go down that road than any executable code could be seen as a type of procedural story. Once everything is everything, it&#8217;s not as fun to talk about.</p>
<p>OK, so here are the orders as I&#8217;ve defined them. I know I&#8217;ve got some academics who will read this and might have their own definitions that conflict &#8212; awesome, let&#8217;s talk more! Tell me what about this is useful or not useful. I hate getting bogged down in semantics (I&#8217;m sure I&#8217;m out of synch with the current academic definitions of &#8220;narrative&#8221; vs. &#8220;plot&#8221; vs. &#8220;story&#8221;), but think high-level frameworks for discussion are immensely useful. (Obviously, my thoughts on this have been pretty thoroughly influenced by the way our tech works on <cite>Skyrim</cite>. <a href="http://en.wikipedia.org/wiki/Linguistic_relativity">Sapir-Whorf</a> and all that.)</p>
<h2>0th Order</h2>
<p><em>Authored Content with Procedural Role-Filling</em><br />
<hr /><br />
This is where you take a traditional, authored game story, and give it flexibility to swap specifics based on the player&#8217;s history in the game. So the typical &#8220;The President has been kidnapped by ninjas&#8221; plot becomes &#8220;[Character X] has been kidnapped by [baddies Y]&#8221; with some algorithm used to fill in X and Y.</p>
<p><strong>Potential Uses:</strong> Guiding the player towards unseen content; allowing quests to proceed if key characters are not available; adding variety to different playthroughs; providing a degree of repeatable content (though the seams become apparent fairly quickly).</p>
<h2>1st Order</h2>
<p><em>Localized, Responsive, Event-Driven Scenarios</em><br />
<hr /><br />
Similar to 0th order, but it&#8217;s kicked off in the game in direct response to the player&#8217;s actions. This needs to be something beyond just &#8220;playing a scene because the player hit a trigger&#8221; &#8212; there needs to be data from the player&#8217;s action that helps populate the moving pieces of the content. The &#8220;localized&#8221; part of it means that it doesn&#8217;t have a long-lasting impact on the overall play experience. This is the situation where the player drops an item and a child comes and brings it back, or an <span class="caps">NPC</span> hiring assassins to deal with the player in response to a theft.</p>
<p><strong>Potential Uses:</strong> Giving NPCs richer (if still very bespoke) reactions to the player&#8217;s immediate actions; providing interesting responses to player&#8217;s higher-level choices.</p>
<h2>2nd Order</h2>
<p><em>Chained 1st Order Content</em><br />
<hr /><br />
Adds persistent knowledge to 1st order content so that it can be chained together into a larger, more cohesive experience. At a tech level, this is simple. At a design level, it&#8217;s hard, especially if you want each phase of the experience to contain the same levels of variation. If we stick with our previous example of an <span class="caps">NPC</span> sending assassins after the player, a 2nd order narrative could allow the player to pay off the assassins, and then help them kill the original <span class="caps">NPC</span>, which angers his sister, who curses you, etc. etc. (Note that with sufficiently dense 1st order content, this has the potential to emerge naturally; I&#8217;m mostly thinking of something slightly more intentional on the designer&#8217;s part.)</p>
<p><strong>Potential Uses:</strong> Giving the player a full story experience with a range of expression, while allowing for the same levels of variation we get from 2nd order and lower.</p>
<h2>3rd Order</h2>
<p><em>Game-Directed Experience Management Using Procedural Tools</em><br />
<hr /><br />
The game has some awareness where interesting 2nd order content might be, and it uses 1st and 0th order content to nudge the player towards it. Note that &#8220;where&#8221; is not necessarily a 3d location, but also includes the more abstract &#8220;story space,&#8221; or if there&#8217;s a particularly deep <span class="caps">NPC</span>, the emotional space. Imagine that a particular <span class="caps">NPC</span> is very close to some threshold in her &#8220;Respect&#8221; variable with regard to the player, and if the value crosses that threshold, it will be the inciting incident for some 2nd order content. The game then uses the lower order content to create opportunities for the player to affect this variable.</p>
<p>(Of course, the same algorithm could deploy 0th and 1st order content to direct towards purely authored story as well.)</p>
<p>I recognize that this order may seem like the odd man out in the continuum, but I think some level of dramatic awareness and management is key in making procedural story even worth discussing.</p>
<p><strong>Potential Uses:</strong> Making sure the player is having a good time; having a higher percentage of content seen; detecting experiences the player enjoys (a difficult task in itself) and helping direct towards similar ones.</p>
<h2>4th Order</h2>
<p><em>Chained Content Constructed from End-State</em><br />
<hr /><br />
The game has a specific set of &#8220;desirable&#8221; end-states, and it uses a large pool of 3rd order content to assemble and guide towards those states. (This is essentially 2nd order content working backwards.) &#8220;Desirable&#8221; in this case just means &#8220;interesting from a story perspective,&#8221; which could very well be a &#8220;bad&#8221; ending.</p>
<p>It&#8217;s important not to think of this as &#8220;the game forcing the player along a set path,&#8221; but rather allowing a broad range of story experiences that lead to a defined conclusion. Imagine a <cite>Lord of the Rings</cite> game, where the player allows Gollum to steal and escape with the ring. Currently this leads to an awkward &#8220;Game Over; Try Again; <span class="caps">LOL</span>.&#8221; But with 4th order procedural content, the game can look at the current state of the world and devise multiple ways the player could still get to the end state of &#8220;Player destroys the ring.&#8221;</p>
<p>I&#8217;m starting to get handwavey here. That&#8217;s because this is hard. If it was easy to talk about in a few paragraphs, a lot more games would do it. :-) It&#8217;s worth noting, though, that even moderately experienced pen-and-paper game masters can do this kind of thing on a regular basis.</p>
<p><strong>Potential Uses:</strong> Letting the player never make a true &#8220;mistake,&#8221; and just incorporating actions into a larger story that can still be narratively interesting; letting the player own their experience at a very high-level of decision making.</p>
<h2>5th Order</h2>
<p><em>Autonomous Assembly of Lower-Order Content from Parameterized Input</em><br />
<hr /><br />
Remember the <cite>Star Trek: The Next Generation</cite> episode <a href="http://en.memory-alpha.org/wiki/Elementary,_Dear_Data_%28episode%29">Elementary, Dear Data</a>? Geordi tells the computer to make a holodeck experience in the style of the Sherlock Holmes stories, with a villain capable enough to defeat Data. (Spoilers: Hilarity ensues when Moriarty achieves sentience.)</p>
<p>That&#8217;s 5th order content right there. Letting the game system construct an experience, using all the tools of 0th-4th order content to fulfill a set of high-level goals that are given as inputs.</p>
<p>Honestly, I could have just labeled this as &#8220;∞ Order,&#8221; since I pretty much just described the holy grail of procedural story, and there are almost certainly other incremental steps between 4th and there.</p>
<p><strong>Potential Uses:</strong> Fulfillment of the dreams of every procedural games researcher ever; effectively removing &#8220;game designer&#8221; from the list of useful professions; providing individually tuned entertainment experiences to everyone in the world.</p>
<h2>So what?</h2>
<p>While I didn&#8217;t mention the holodeck until 5th/∞ order, I really started getting into that turf around the 4th order. While there are examples of 0th-3rd at varying levels of fidelity today, I don&#8217;t know if anyone is even realistically attempting 4th.</p>
<p>In <cite>Skyrim</cite> we did a boatload of 0th, a good amount of 1st, and just started sniffing around 2nd. I think the tools are there for more, though, and that&#8217;s one of the reasons I&#8217;m excited for the <a href="http://www.bethblog.com/2011/12/01/skyrim-what-were-working-on/">impending release of the Creation Kit</a> ; I can&#8217;t wait to see what smart people do with Radiant Story systems.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">4 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/0d17bc5e6c2e0444c11fb66fa20ad5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://twitter.com/bendotc" rel="external nofollow">Ben C.</a></span> wrote:</span>
            <p>Thanks for this.</p>

    <p>You got me thinking. I wonder if another useful way to slice it is to discuss the inputs and outputs of the procedural systems. Usually when we talk about AI, we&#8217;re talking about procedural generation of behavior of individual actors or groups of actors. However, the Left 4 Dead AI director famously uses monster and resource placement (rather than behavior) as its output, and a model of player tension and resources as its input, roughly speaking. And roguelikes traditionally use a simple <span class="caps">RNG</span> for input and generate entire level composition as their output. All of these have some degree of authored input as well.</p>

    <p>If I understand you correctly then, in these terms the difference between orders 0 and 1 are whether player behavior is part of the system&#8217;s input. And orders 1 and 2 differ by the degree of feedback* in the system (how much output is in the input). Order 3 and 4 are abstractions that seem to output order 2 and 3 systems, respectively, though it&#8217;s a bit more complicated than that. In a broad sense, the AI director is a sibling to the third order system, in that it takes the same inputs, though I&#8217;m not sure whether its outputs quite count for third order in your system.</p>

    <p>(*: When I talk about feedback, I&#8217;m really thinking of the procedural element being something which itself generates a mechanic, which is then acted upon by a player, so feedback is the result of the mechanic acted upon by the player feeding back into the input of the system &#8212; not necessarilly just the system feeding back on itself in the absense of input, though that&#8217;s possible too.)</p>

    <p>Sorry for the abstract pseudo-mathematical blather. I should go try to break down the inputs and outputs of some games in more concrete terms. It feels like there&#8217;s some fruitful space nearby that we could find just by picking different inputs and outputs, even with fairly straight-forward, manageable procedures.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-12-05T05:29:49-0500">December 5, 2011 at 12:29AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>No worries about getting into pseud-math land. I termed them as orders because they naturally build on each other, and I think your recognizing this as defined via inputs and outputs is insightful. It could probably lead to some more concrete definitions and (even more usefully) help extrapolate what the higher orders might be. </p>

    <p>The L4D director is definitely some relation to a 3rd order system, but its operating a lower level in the play experience. I remember Clint Hocking numbering and defining his levels of player choice, from &#8220;I am pushing this button&#8221; to &#8220;I am saving the world.&#8221; Unfortunately, some googling has not been able to find a written version of them. I bring them up as I&#8217;m wanting convenient vocabulary reference points, so I could say &#8220;The director is operating at Hocking level 4; I&#8217;m thinking more about level 7 and up&#8221; or something like that. </p>

    <p>That said, perhaps by defining the orders by the inputs, outputs, and reflexivity, this structure could overlay onto each Hocking level and create a 2d grid defining all potential procedural gameplay. That may end up being a sparse matrix as far as meaningful analysis goes, and I&#8217;m not sure what the point of it would be, but now I really want to construct it.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-12-05T12:37:50-0500">December 5, 2011 at 7:37AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/4feba91f77b43c3e0a24e9418c91bf1b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan</span> wrote:</span>
            <p>I think the AI community (specifically behavior/motion synthesis) has a lot in common with what you have state above. Please bear with me talking about &#8220;actions&#8221; and &#8220;objectives&#8221;, as I think the approaches and ways of thinking are applicable to non-behavioral work like this.</p>

    <p>Often, the common approach is to generate a set of &#8220;primitives&#8221;, which comprise all the possible actions the agent perform to manipulate the state of the world and which describe how the world is affected by the action based on its input state. Above that, you have &#8220;motion/path planning&#8221; algorithms that take an initial state and a set of primitives and try to find a chain of actions that result in a desired end state (i.e. meeting an objective). Finally, at the highest level, you have &#8220;objective selection&#8221; algorithms that take a high level goal and determine what objectives need to be met to achieve that goal.</p>

    <p>There are a lot of approaches to fill these niches that vary based on the context; however, I think there are three main characteristics to this field that make it worth comparing:</p>

    <p>1) Actions are black boxes &#8212; essentially, just opaque transformations on the world. This means that they can be discrete actions (&#8220;turn on the light&#8221;), parameterized actions (&#8220;move X feet this way&#8221;), or nested sets of other actions &#8212; perhaps even described by some sort of regular grammar. </p>

    <p>2) The methods are generally inherently hierarchical. Often, a solver consists of a method of placing potential actions/objectives/meta-objectives into a graph as nodes, finding reasonable ways to connect those nodes (&#8220;after you walk 10 feet to the cliff, you can jump or sit down&#8221;) and using a stock graph traversal algorithm to find the most appropriate path from your start point to your end point. This method works at the action planning level and the objective selection level &#8212; the difference is just what you use to define the nodes and interpret the transitions to be.</p>

    <p>3) There has been a lot of work done in using training data to automatically generate nodes (which can later be edited) meaning that you can provide an example of what you want the final product to be like and have the system generate something similar that meets external objectives based on the example&#8217;s components.</p>

    <p>So, taking all of this into account, consider that you can replace the &#8220;actions&#8221; with your 0th and 1st orders (along with whatever other primitives you come up with like procedural scene / character generation) and &#8220;objectives&#8221; with designer-driven goals (&#8220;get the player to the Thieves&#8217; Guild&#8221;) procedural goals (&#8220;the players have been milling about, so encourage them to advance to keep tension high&#8221;) or a combination of both.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-12-05T16:56:10-0500">December 5, 2011 at 11:56AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/4feba91f77b43c3e0a24e9418c91bf1b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan</span> wrote:</span>
            <p>Oh, and one quick distinction: the AI community is generally concerned with finding the &#8220;best&#8221; (or at least &#8220;a good&#8221;) way of transition from state A to state B. In this case though, that&#8217;s not really necessary &#8212; you just want to ensure that it&#8217;s possible to move from A (&#8220;in jail&#8221;) to B (&#8220;on a mountain top fighting the world eater&#8221;) via one or more paths, preferably ones that are appropriate to the player&#8217;s story so far.</p>

    <p>This means you can incorporate other procedural methods like random walks or &#8220;on-demand&#8221; generation as you move from one state to the next, and have multiple paths available at any given point.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-12-05T17:04:33-0500">December 5, 2011 at 12:04PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Game Ideas]]></title>
    <link href="http://blog.shaneliesegang.com/2011/03/game-ideas/"/>
    <updated>2011-03-29T21:12:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2011/03/game-ideas</id>
    <content type="html"><![CDATA[<p><em>Blatantly inspired by Josh Olson&#8217;s excellent <a href="http://blogs.villagevoice.com/runninscared/2009/09/i_will_not_read.php">I Will Not Read Your Fucking Script</a>, which is worth your time. I am not as foul-mouthed or incisive as he is, unfortunately.</em></p>
<p>I meet you at a party. Or a wedding. Or a bar. Doesn&#8217;t matter. Maybe we have mutual friends, or just struck up conversation over some humorous occurrence that we both witnessed. We&#8217;ll talk movies, football, the weather, and music. Eventually, you ask what I do for a living.</p>
<p>&#8220;I&#8217;m a game developer.&#8221;</p>
<p>&#8220;Oh, let me tell you &#8212; I have the <strong>best</strong> idea for a game.&#8221;<br />
<!--more--></p>
<p>It&#8217;s at this point that our interaction has become terribly unpleasant for me. Let&#8217;s go through the possible outcomes here.</p>
<h2>Your idea is bad</h2>
<p>In all honesty, this is the most likely status of your idea. This is nothing personal; the vast overwhelming majority of ideas are bad. I know you&#8217;re convinced that your combination of <cite>Prince of Persia</cite> with <cite>Call of Duty</cite> is obviously and undeniably awesome, but there&#8217;s a reason new genres come along so rarely. And that really sweet character you have in your head, the one who&#8217;s the ninja with a heart-of-gold but a dark past out to rescue his pet elephant? That&#8217;s not a game, and neither is your pre-apocalyptic caveman story. Your vague notion about color matching (but on Facebook, you know, like <cite>Farmville</cite>!) is even less a game than the previous ideas.</p>
<p>And now I have to respond. I try not to be an asshole, so here&#8217;s what you&#8217;ll see. The eye contact that I was previously maintaining will be broken as I stare at a point just beyond your left shoulder. My eyes widen, my lips purse, and I&#8217;ll start nodding a lot. This is as close as I&#8217;ll come to telling you that this idea is terrible. Eventually I&#8217;ll emit a few chuckles and try to change the subject.</p>
<p>Thanks for adding a big dose of awkward to my night, and making me a lot less likely to accept your Facebook request.</p>
<h2>Your idea is good</h2>
<p>Congratulations, you have an awesome idea! Nobody has ever topped <a href="http://www.oreillynet.com/onlamp/blog/2005/08/ideas_are_just_a_multiplier_of.html">Derek Sivers&#8217;s explanation</a> of why ideas by themselves are worthless, so go read his post and come back.</p>
<p>But now you&#8217;ve left me to explain that to you. And how vanishingly few games are made by a single person, especially if that person has no programming experience (which you invariably don&#8217;t have). If I was an amateur developer, you might be lucky enough to have a partner in your hobby, but no, I will not leave my steady job with its world-class co-workers and 401(k) to help you make this game.</p>
<p>I&#8217;ll recommend a lot of resources for learning to make games, and you&#8217;ll either be discouraged by how little those first projects resemble what you have in your mind, or you won&#8217;t even look at those resources and continue to try and attract some people by posting on game dev forums about how you &#8220;just need a few programmers and maybe an artist&#8221; to get it off the ground. The role of the &#8220;idea person&#8221; is a sexy one, and you&#8217;re convinced that could be you. My warning of how that&#8217;s not really a role in any creative industry go unheeded and you chalk me up as a jerk trying to destroy your dreams.</p>
<p>Man, it would have been way easier to just tell you your idea sucked. But then I would be lying!</p>
<p>Even if your idea is <strong>so</strong> good that I want to help you, what now? I am not an executive at my company, and thus can&#8217;t do anything to bring you in there. Even if the few people I know who fund game development are interested in a pure idea (which strains the definition of &#8220;long shot&#8221;), I&#8217;ve never worked with you and thus am not willing to stake my reputation on vouching for you to those people. So now I&#8217;m an asshole for killing your dream, <strong>and</strong> I feel guilty for not being able to help you.</p>
<p>Once again, this is at minimum a pretty awkward blip in the graph of my evening.</p>
<h2>Your idea is really good</h2>
<p>Then there&#8217;s the final and most awkward possibility. Your idea is so good that I already had it myself. Or my company&#8217;s had it. Maybe I&#8217;m scheduled to work on it next week. Maybe I just finished it today. Either way I can&#8217;t tell you about it, but I&#8217;m going to immediately want you to stop talking, like 5 seconds ago.</p>
<p>Because intellectual property laws in this country are nuts and plenty of lawyers are willing to take the case of anyone claiming they have a suit against a deep-pocketed company, I have to consider the possibility that you might sue me or my company for stealing your idea.</p>
<p>I know, I know. You wouldn&#8217;t do that! You&#8217;re cool! That&#8217;s great, but remember, we just met, and I don&#8217;t know that you&#8217;re cool. I&#8217;ve been sued before (non-IP related matter) and it&#8217;s not fun, even with good lawyers and someone else footing the bill. Don&#8217;t make me call up those memories.</p>
<p>(I fell into this trap myself once &#8212; as a grad student excitedly having lunch with some Imagineers, I was talking up the cool robotic puppeteering interface I was working on when the lead got very quiet and said, &#8220;Be very careful what you say to me.&#8221; Later I would see the interface they use for their &#8220;living characters initiative&#8221; and well, remember the bit about ideas versus execution. They can execute like mad.)</p>
<p>And now I&#8217;ve had to extricate myself from the conversation, and do the IP calculus of whether I need to talk to our legal people on Monday to make sure we&#8217;re protected.</p>
<h2>To sum up</h2>
<p>I will not listen to your game idea.</p>
<p>OK, actually I will. But our interaction is now ruined, and I will want another drink, most likely.</p>
<p>Don&#8217;t drive me to drink, please.</p>
<p>If you have an awesome idea, quit talking about it to strangers at parties and go start making it. Learn to program, learn to animate, learn to write. And then go make your game. And let me know about it!</p>
<p>Because while I will not listen to your game idea, I absolutely would <strong>love</strong> to play your game.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">11 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/873c7e580b03b337e554fa31337e4d2a?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://ricealwayswins.com" rel="external nofollow">ashley cheng</a></span> wrote:</span>
            <p>Plus it&#8217;s hard to talk to the ladies when there&#8217;s a dude pitching his game idea to you.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-30T13:08:26-0500">March 30, 2011 at 9:08AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/8c2348a889bcd8791d900f20c89b77ac?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://brandonshire.wordpress.com" rel="external nofollow">Brandonshire</a></span> wrote:</span>
            <p>Well said, and as you pointed out with the script-related link at the start, this applies to a lot of industries and ideas. Especially in any sort of creative industry.</p>

    <p>It&#8217;s almost certainly no less boring to hear someone talk about, but to some degree I&#8217;m glad that the closest I usually come to coming up with new &#8220;game ideas&#8221; is in the realm of settings, or adventures, or even rules subsystems and such, for table-top RPGs. If I ever decide I really like an idea it&#8217;s something I can actually try to develop myself and don&#8217;t have to find &#8220;just a few programmers and maybe an artist.&#8221; So at least I&#8217;m not asking random people at parties to help me out, instead I&#8217;m just boring them with bad ideas that no one else cares about!</p>

    <p>Note: In reality I don&#8217;t think I&#8217;ve ever done anything like this to someone I didn&#8217;t already know pretty well, and (I hope) not so much in totally inappropriate situations like at parties.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-30T14:55:17-0500">March 30, 2011 at 10:55AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/470fdfeb0b56da8ac085578f99269011?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.frasermacinnes.com" rel="external nofollow">Fraser MacInnes</a></span> wrote:</span>
            <p>Ok, first off I just want to say, I&#8217;m totally with you on this. Telling people you work in the games industry does invariably prompt some sort of half-baked idea from the other person, followed by awkwardness by you. Either that or the other person says &#8220;wow, I&#8217;ll bet you just get to sit around playing games all day&#8221;. Both very annoying and tedious.</p>

    <p>Having said that, one thing that has consistently irked me about the games industry (I&#8217;m a game designer for Gameforge by the way &#8211; I&#8217;m working on MMOs) is that it often confuses game designers with game developers.</p>

    <p>To me the distinction is, game designers don&#8217;t <span class="caps">NEED</span> to know how to code. Sure it doesn&#8217;t hurt if they can at least script (Lua, Python or whatever), or even understand the advantages of using programming language X instead programming language Y. But the idea that a game designer needs to be an expert in C++, Maya, 3DS Max etc. and other high-end languages and tools, isn&#8217;t strictly fair. I know a lot of people who conducted interviews for major software houses, where the interviewees were required to be proficient at coding in C++, despite the fact that the game designer job they were applying for didn&#8217;t require any coding at all. It can all get a bit exclusionary.</p>

    <p>To my mind, the key tools of a good game designer are Word, Excel, Whiteboards, intermediate Photoshop, Mind Mapping tools, Google Sketch-up and maybe a bit of low level scripting as mentioned earlier. That and a good quality filter (ideas are cheap, everyone has them &#8211; try to have 100 a day and be prepared to bin 99 of them is my rule). </p>

    <p>It&#8217;s horses for courses of course, but I do feel that so long as the ideas person is willing to accept that being an ideas person i.e. game designer, could be as much about coming up with an amazing concept for an in-game shop interface (and being able to document it clearly using the aforementioned tools, so a developers/artist can make it happen), as opposed to realizing their own extravagantly conceived pet projects, then they don&#8217;t have to be these one man game making machines the industry (particularly in the UK) so often demands.</p>

    <p>I could go on and on, so I&#8217;ll stop. Great article, not trying to stamp on it, just want to keep the flame alive for would be designers out there who are consistently being scared off by towering CV requirements.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-30T15:15:04-0500">March 30, 2011 at 11:15AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/fd68f23d9a0b51dcbfe81c4394f69c0f?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.EndlesslyCurious.com" rel="external nofollow">Daniel</a></span> wrote:</span>
            <p>I couldn&#8217;t agree more its not the idea that counts but the execution of the idea!</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-30T20:06:37-0500">March 30, 2011 at 4:06PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/21f85624b10b6d33d6f3302487fc3fc4?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Chucho</span> wrote:</span>
            <p>What you wrote:<br />&#8220;Oh, let me tell you &#8211; I have the best idea for a game.&#8221;</p>

    <p>What I read:<br />&#8220;Oh, let me tell you &#8211; I want to steer this conversation back towards myself&#8221; </p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-30T22:22:59-0500">March 30, 2011 at 6:22PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/bf491b71b880ff840681d8ec561cd1e1?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.hardcoregaming101.net/" rel="external nofollow">Sketcz</a></span> wrote:</span>
            <p>I&#8217;ll be honest, if you said you were a game developer to me, I&#8217;d probably counter with something like:<br />&#8220;That&#8217;s nice. Have another drink, on me.&#8221;</p>

    <p>And then 10 minutes later I&#8217;d subtly reveal I&#8217;m actually a journalist, and attempt to pry juicy gossip out of you for my next news column.</p>

    <p>How about them shenanigans, eh? You&#8217;ll never feel safe in the pub again.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-03-31T15:05:29-0500">March 31, 2011 at 11:05AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/1e614fec4ac24d6d0fd5584f7f1d564b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Abused_Dog</span> wrote:</span>
            <p>You, sir, are an arrogant, high-minded prick. Be thankful that someone is interested enough in your profession to want to discuss and indeed have ideas of their own about it.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-04-01T09:34:36-0500">April 1, 2011 at 5:34AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a3a684d7f77b0a4cedbf80ace32270eb?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://kathrynhulick.com/" rel="external nofollow">Kathryn</a></span> wrote:</span>
            <p>This is true of the children&#8217;s writing industry as well&#8230; I&#8217;ve met many editors and writers who hate telling people what they do because they dread the inevitable &#8220;I have a great idea for a picture book!&#8221; that follows&#8230; </p>

    <p>The bizarre thing is that people seem to think that we who are out there executing books/games/screenplays/etc. are in need of more ideas. The truth is, I have hundreds more ideas than I could ever hope to execute, and the hard part is focusing on one and actually doing the work.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-04-01T13:31:21-0500">April 1, 2011 at 9:31AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/1e614fec4ac24d6d0fd5584f7f1d564b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Abused_Dog</span> wrote:</span>
            <p>On reflection, I have to apologize to everyone &#8211; and the author in particular &#8211; for my post #7. </p>

    <p>Unfortunately I have a low tolerance-threshold for pompous condescension, but that is no excuse for vulgarity and rudeness on my part. I&#8217;m sorry.</p>

    <p>As I&#8217;ve already outstayed my welcome I&#8217;ll depart by noting how sad this item makes me feel. As an academic working in realms of thought often so rarefied as to have no practical utility whatsoever, it is depressing to be reminded that every idea and fantasy must be twisted towards utility and profit, or else be dismissed as worthless.</p>

    <p>Yours,</p>

    <p>Santa Claus<br />x</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-04-02T18:58:43-0500">April 2, 2011 at 2:58PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/27fe8c29fdb384bca5447e35902ce337?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://wherethepretzelsat.blogspot.com" rel="external nofollow">sensibletron</a></span> wrote:</span>
            <p>Sharing your ideas with another individual is a very personal act&#8212;you are revealing something about yourself that is not immediately visible on the surface.</p>

    <p>This is something I encounter a lot as a writing tutor&#8212;people are very insecure about their writing, and the act of showing your stuff to a stranger makes a person vulnerable.  The way that I deal with and honor this is to be as professional and considerate as possible. As anyone who&#8217;s submitted to a peer review in a writing class can tell you, presenting your work to someone who&#8217;s not really trained to respond in a constructive way can be&#8230;wounding. Their criticisms feel careless.</p>

    <p>Perhaps part of what is happening is that people are presenting you with something they obviously value very highly at a very early stage in your relationship; they are basically over-sharing. As a reasonably sensitive person and a creative professional as well, part of you may recognize that they are offering you a gift of themselves to which you cannot give justice.</p>

    <p>I would be very uncomfortable if someone found out I did writing-related work at a party and tried to show me a poem.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-04-05T17:10:25-0500">April 5, 2011 at 1:10PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/da05c6c142368ddd0dbb70e350962c0b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Kevin B</span> wrote:</span>
            <p>I have to disagree with you here.  We happen to work in an industry that some people find interesting, and I personally believe that you should be thankful that someone wants to share their ideas with you, even if they are bad ones. In doing so, they are in some sense seeking your validation &#8212; it&#8217;s an indirect form of being your fan.  The fact that you find this kind of situation uncomfortable is unfortunate, but that&#8217;s your issue, not theirs.  When you rant about it in the way you&#8217;ve done, it comes across as a bit arrogant, even if the root of the issue is anxiety on your part.  In short, it comes across as if they are the ones inflicting this anxiety on you, when in reality, they are not &#8212; you are.</p>

    <p>I think you should perhaps find a better way of dealing with these conversations so that they cease being uncomfortable to you.  If educating them is too uncomfortable to you, then perhaps try find a way where you can politely get out of these kinds of conversation.  I doubt that you&#8217;re being rude to the people you talk to, but you might want to take into consideration the reasons that they want to talk about this with you in the first place.</p>

    <p>We choose what conversations we want to be in, and this post reflects social anxiety on your part.  I would recommend trying to find ways to better deal with these situations, rather than complaining that someone is interested in what you do and therefore wants to tell you about their uneducated ideas.  Just my $0.02.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2011-04-11T20:14:43-0500">April 11, 2011 at 4:14PM</abbr> </span>
    </li>
</ol>
<div class="comment-section-header">
<span class="comment-header">1 archived pingback</span></div>
<ol id="pingbacks" class="pingbacklist">
    <li class="pingback">
        <span class="pingback-meta vcard">From <span class="url"><a href='http://tinysubversions.com/2011/04/optimistic-indie-developer/' rel='external nofollow'>Optimistic Indie Developer</a></span> on <abbr class="comment-published" title="2011-04-01T12:55:48-0500">April 1, 2011 at 8:55AM</abbr></span>[&#8230;] Paging Shane Liesegang&#8230;      Cancel reply [&#8230;]
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Yes, Virginia]]></title>
    <link href="http://blog.shaneliesegang.com/2010/12/yes-virginia/"/>
    <updated>2010-12-24T00:33:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2010/12/yes-virginia</id>
    <content type="html"><![CDATA[<p><em>(A more modern and rationalized take on this subject can be found in the <a href="http://www.straightdope.com/columns/read/1370/is-there-a-santa-claus">Straight Dope archives</a> if you find comparisons to fairies and whatnot distasteful. The image of ants in an anthill is particularly persuasive to my mind. :-) )</em><br />
<hr /></p>
<blockquote>
<p>Dear Editor: <br />
I am 8 years old. <br />
Some of my little friends say there is no Santa Claus. <br />
Papa says &#8220;If you see it in <cite>The Sun</cite> it&#8217;s so.&#8221; <br />
Please tell me the truth; is there a Santa Claus?  <br />
&#8212; Virginia O&#8217;Hanlon, 115 West Ninety-Fifth Street</p>
</blockquote>
<p><!--more--><br />
Virginia, your little friends are wrong. They have been affected by the skepticism of a skeptical age. They do not believe except they see. They think that nothing can be which is not comprehensible by their little minds. All minds, Virginia, whether they be men&#8217;s or children&#8217;s, are little. In this great universe of ours man is a mere insect, an ant, in his intellect, as compared with the boundless world about him, as measure by the intelligence capable of grasping the whole of truth and knowledge.</p>
<p>Yes, Virginia, there is a Santa Claus. He exists as certainly as love and generosity and devotion exist, and you know that they abound and give to your life its highest beauty and joy. Alas! how dreary would be the world if there were no Santa Claus. It would be as dreary as if there were no Virginias. There would be no childlike faith then, no poetry, no romance to make tolerable this existence. We should have no enjoyment, except in sense and sight. The eternal light with which childhood fills the world would be extinguished.</p>
<p>Not believe in Santa Claus! You might as well not believe in fairies! You might get your papa to hire men to watch in all the chimneys on Christmas Eve to catch Santa Claus, but even if they did not see Santa Claus coming down, what would that prove? Nobody sees Santa Claus, but that is no sign that there is no Santa Claus. The most real things in the world are those that neither children nor men can see. Did you ever see fairies dancing on the lawn? Of course not, but that&#8217;s no proof that they are not there. Nobody can conceive or imagine all the wonders there are unseen and unseeable in the world.</p>
<p>You may tear apart the baby&#8217;s rattle and see what makes the noise inside, but there is a veil covering the unseen world which not the strongest man, nor even the united strength of all the strongest men who ever lived, could tear apart. Only faith, fancy, poetry, love, romance, can push aside that curtain and view and picture the supernal beauty and glory beyond. Is it all real? Ah, Virginia, in all this world there is nothing else real and abiding.</p>
<p>No Santa Claus! Thank God! he lives, and he lives forever. A thousand years from now, Virginia, nay, ten times ten thousand years from now, he will continue to make glad the heart of childhood.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">1 archived comment</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/4a1824ac1f1a5a558b5d69ad21a5568f?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Tim Sweeney</span> wrote:</span>
        	<p>I am reminded personally of this monologue from Man of La Mancha:</p>

	<p>&#8220;I have lived nearly forty years, and I have seen life as it is. Pain, misery, hunger &#8230; cruelty beyond belief. I have heard the moans from bundles of filth on the streets. I have been a soldier and a slave. I&#8217;ve seen my comrades fall in battle &#8230; or die more slowly under the lash in Africa. I have held them in my arms at the final moment. These were men who saw life as it is, yet they died despairing. No glory, no brave last words &#8230; only their eyes filled with confusion, questioning &#8220;Why?&#8221;<br />I do not think they asked why they were dying, but why they had ever lived. When life itself seems lunatic, who knows where madness lies? Perhaps to be too practical is madness. To surrender dreams &#8211; this may be madness. To seek treasure where there is only trash. Too much sanity may be madness &#8211; and maddest of all: to see life as it is, and not as it should be!&#8221; </p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-12-25T13:50:59-0500">December 25, 2010 at 8:50AM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Love Letter #1 -- Sly 2: Band of Thieves]]></title>
    <link href="http://blog.shaneliesegang.com/2010/11/love-letter-1-sly-2-band-of-thieves/"/>
    <updated>2010-11-08T19:04:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2010/11/love-letter-1-sly-2-band-of-thieves</id>
    <content type="html"><![CDATA[<p><em>Thanks Jeff, for <a href="http://twitter.com/#!/fuzzybinary/status/382171499991040">calling me out</a>, otherwise I might never have blogged again.</em></p>
<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/sly_2box_art.jpg" title="(Sly 2 Box Art!)" ></p>
<p>Back when I wrote my post about <a href="http://blog.shaneliesegang.com/2009/06/games-of-my-life/">Games of My Life</a>, I had intended to go back and break down each one and say <strong>why</strong> it was so impactful. This is belated, but I&#8217;m going to get started now. In honor of tomorrow&#8217;s re-release of <cite>The Sly Collection</cite>, I&#8217;m going to start of with <cite>Sly 2: Band of Thieves</cite>, which I&#8217;ve previously referred to as &#8220;the most perfect and under-discussed game of the 2000&#8217;s.&#8221; A bold claim, and it&#8217;s time to back it up.</p>
<p><!--more--><br />
Like most game designers, I like to think of the game experience in levels, from the lowest (I am pressing a button to jump) to the highest (I am trying to stop the Klaww Gang from reassembling Clockwerk) and everything in between (I am trying to get to to the end of this level, I am collecting money to buy an upgrade, <em>et cetera</em>).</p>
<p><cite>Sly 2</cite> provides an almost impeccably balanced experience at each of these levels, and, most impressively, manages to have them reinforce each other and support the emotional themes of the story.</p>
<h2>Run &#8216;n&#8217; Jump</h2>
<p>At its heart, <cite>Sly 2</cite> is a cartoony action platform game. The team at <a href="http://suckerpunch.com/">Sucker Punch</a> has shown themselves to be incredibly skilled at creating smooth, flowing control for such gameplay, and making your anthropomorphic raccoon<sup class="footnote" id="fnr1"><a href="#fn1">1</a></sup> zip through the world is effortless.</p>
<p>Contrast this with the control of Sam Fisher in the <cite>Splinter Cell</cite> games. Sam is supposed to be a hyper-capable secret agent who single handedly saves the world, yet I could not for the life of me make him consistently do a wall split. Instead he flails about bouncing off the walls until the guards come and investigate him. Not very sneaky, Sam!</p>
<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/sly_n_sam.jpg" title="(Sly 'n' Sam)" ><br />
<em>(Which one of them would win in a fight? Depends on whether I&#8217;m the one controlling them.)</em></p>
<p><cite>Sly 2</cite>, like its predecessor, provides blue sparkles through the world where you can simply press the circle button to have Sly automatically do a thief-y move at that location. You can argue that this is dumbing down the gameplay, or the mark of a kiddie game. I argue that it&#8217;s making my onscreen avatar&#8217;s behavior match his authored character more closely.</p>
<p>At the lowest level, <cite>Sly 2</cite> is almost identical to the first game in the series. So why do I hold it up? For that, we need to look at what it changed.</p>
<h2>I Can See For Miles</h2>
<p>The biggest shift between the first <cite>Sly Cooper</cite> and <cite>Sly 2</cite> is the move to open worlds instead of linear levels. Each world is the area around the home base of one of the villains, and your goal there is pull off a big heist and steal the Clockwerk piece that they possess. The worlds are elaborately structured so that you do a series of prep-work (taking recon photos, sabotaging alarm systems) before the final caper. There&#8217;s some innovative planning here that would put Danny Ocean to shame.</p>
<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/sly_world.jpg" title="(Sly's World)" ></p>
<p>All these objectives are laid out to you with a series of bat-signal-like beacons projecting into the sky &#8212; this activates the &#8220;cleanup/gotta catch&#8217;em all&#8221; compulsion loop in a fundamental way. Seeing them blip out as you complete each objective is rewarding to the lizard brain.</p>
<p>This is also where the layers of gameplay come in handy &#8212; <cite>Sly 2</cite> gets away with highly repetitive gameplay at one layer (you spend a lot of time pickpocketing keys, for instance) by having the lower layers polished (the simple but very predictable stealth system) and the higher layers varied (why you need the keys).</p>
<h2>Lets Do the Twist</h2>
<p>What keeps bringing me back to <cite>Sly 2</cite>, though, and why I play it probably once a year, is the way it unfolds its story. The characters are compelling and familiar tropes from Saturday morning cartoons. But there is such care given to the writing of those characters that it retains the feel of some of the best cartoon shows. This is closer to <cite>Kim Possible</cite> than <cite>SpaceCats</cite> (and if you don&#8217;t think that cartoons can be examples of quality writing, then we probably just don&#8217;t have much to debate). There is an unmistakable panache to the dialogue which indicates to me that someone on the staff cared about the writing <strong>immensely</strong>.</p>
<p>At the higher level, the story never forgets that it is a story <em>for a game</em>. The cutscenes are all payoffs for gameplay, and never include a moment that I wish I could have played out myself. Sucker Punch knows that when the cool stuff starts happening, I want the controller in my hands, and wisely gives me that agency.</p>
<p>Finally, the story toys with player assumptions with enviable prowess. As you start the third world, you feel like you&#8217;ve got the pattern down. Bentley gives you the plan with a slideshow, you carry out a bunch of missions, you do a big heist, boss fight, on to the next world. But just a few steps into the third big heist, things go horribly wrong. Everyone except Bentley (the weakest, slowest, character, who the player has likely not enjoyed controlling during his missions) is captured, the mission is aborted, and you&#8217;re sidetracked into a jailbreak mission without any of the skills you&#8217;ve honed.</p>
<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/bentley.jpg" title="(Bentley)" ></p>
<p>It&#8217;s a great reversal from a story perspective, and the fact that the game strips away so many familiar mechanics simultaneously means the player&#8217;s emotional state (vulnerable, alone) matches the characters&#8217;. When you free Sly and Murray, each one feels like a tremendous burden lifted, and the joy the player feels at regaining access to a core gameplay feature mirrors the joy the friends feel at being reunited.</p>
<p>It matches gameplay mechanics to emotional story beats in a way I have seen no other game do nearly as consistently. Positively masterful.</p>
<h3>And the Rest</h3>
<p>I could go on. The consistent presentation (even the pause menu says &#8220;We&#8217;ll be right back!&#8221;), the superb level design of both the hub worlds and the individual mission areas (&#8220;no right angles&#8221;), the varying gameplay (even if the vehicle missions can get tiring).</p>
<p><cite>Sly 2</cite> is an exemplary instance of how to expand on solid gameplay concepts for a sequel while retaining what made the original worthy of continuation. The third game in the series was a slight let down, with a little <strong>too</strong> much gameplay variety and not as much polish on the plotting and writing. But that, too, serves as a lesson in design, and draws the successes of <cite>Sly 2</cite> into sharper relief.</p>
<p><img class="center" src="http://blog.shaneliesegang.com/images/blog_images/0.jpg" title="(Sly with a key)" ></p>
<p>So why doesn&#8217;t anyone talk about this game? Maybe because it&#8217;s not seen as terribly innovative, or because it gets filed in with the kiddie games, or because its lack of difficulty means the hardcore players (which most designers are) stayed away. But just as I think most people would be fools to ignore quality movies or books because they are &#8220;kiddie fare,&#8221; the Sly Cooper series should serve as an example for how much craftsmanship can be stuffed into one experience. It may not do anything you haven&#8217;t seen before, but what it does is a paragon of execution.</p>
<hr />
<p class="footnote" id="fn1"><a href="#fnr1"><sup>1</sup></a> I will say that one of the downsides of the game is that it attracts the love of furries. Nothing against furries, but it makes trying to find fan communities a bit more difficult.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">2 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/0aa6662849bc787c63a6adb4ff6ce2be?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.darrentorpey.com" rel="external nofollow">Darren Torpey</a></span> wrote:</span>
            <p>I also felt this game is a great example of an open-world + platforming/stealth style game.</p>

    <p>I think it&#8217;s overlooked because of the combination of:
    <ul>
        <li>Being seen as a kiddie game</li>
        <li>Being such a hybrid of genres</li>
        <li>Not having the macho sex appeal of, say, God of War</li>
    </ul></p>

    <p>Sad as it may be, that&#8217;s a deadly recipe for being overlooked by our rather myopic mass games media.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-11-09T10:59:31-0500">November 9, 2010 at 5:59AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>Good call, Darren. Sadly, I think it&#8217;s probably the third point more than any other. </p>

    <p>I take some comfort in the fact that it was very successful sales-wise. </p>

    <p>(The bullet points in your comment also inspired me to finally fix the <span class="caps">CSS</span> weirdness in this WP theme.)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-11-09T12:23:09-0500">November 9, 2010 at 7:23AM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Spiritual Games]]></title>
    <link href="http://blog.shaneliesegang.com/2010/05/spiritual-games/"/>
    <updated>2010-05-03T22:47:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2010/05/spiritual-games</id>
    <content type="html"><![CDATA[<p>I wonder, from time to time, why there aren&#8217;t more spiritual games. To clarify right out of the gate, I&#8217;m categorically <strong>not</strong> talking about religious games. Those exist, and I&#8217;m aware of them, but even they aren&#8217;t really hitting the target I&#8217;m talking about, generally preferring game-y reenactments of biblical or rapture events.</p>
<p>No, the spirituality I&#8217;m talking about is the sort that appeals even to the most secular of us. Consider <cite>The Shawshank Redemption</cite> <del>- a movie about perseverance, dignity, and a type of freedom that can never be taken away from us. The end of this movie fills you with the joy of being human, after spending several hours slowly dripping you into a state of hopeless nihilism. <br />
&lt;!</del>-more&#8212;&gt;</p>
<p>I&#8217;ve never felt that from a game. Honestly, most games would be lucky to just get to the nihilism.</p>
<p>Lots of games tell good stories, but I worry as creators that we&#8217;re still catering to the same fantasies of the same teenage boys.</p>
<p>Where are the games that remind me of the sheer force of a community believing in someone ( <cite>It&#8217;s a Wonderful Life</cite> ), or how a person can change and improve themselves ( <cite>Groundhog Day</cite> )? (The last one is an interesting example, as the structure of the movie mirrors most game experiences&#8230;)</p>
<p>I know that we can point to things like <cite>Flower</cite> or <cite>Shadow of the Colossus</cite> as attempting to evoke higher emotions &#8212; but they haven&#8217;t really burst through to mainstream popularity. The films I&#8217;ve mentioned have all met with strong commercial success, even if it waited until the <span class="caps">DVD</span> with <cite>Shawshank</cite>. (Is this a sign of what the market expects or of what they&#8217;ve come to expect from us? Would it be possible to raise the emotional expectations of the market bit-by-bit?)</p>
<p>Really, in mainstream games, the closest we come to spiritual expression is a kind of tepid environmentalism or a vague transcendentalism that&#8217;s fairly well divorced from the mechanics &#8212; I&#8217;m thinking most of <cite>Final Fantasy <span class="caps">VII</span></cite> with both of these examples, but really we tend to stick to overt power fantasies.</p>
<p>I guess what I&#8217;m saying is that simply conquering evil doesn&#8217;t sate me anymore. It&#8217;s not enough to destroy the Ring; I should learn the power of fellowship on the journey.</p>
<p>I want to play games that embody these concepts. I want to <em>make</em> them, too.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">5 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/fb291a2a6b655ad6dec4fb97a3ec4d5a?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Chris</span> wrote:</span>
            <p>Interesting.  I think you&#8217;ve really hit the nail on the head here.  It would seem to me that you necessarily would have to make your players feel the distinct motivation of the character and force them to take the internal journey (change) along with them.  I would argue that Hard Rain came very close in the realm of forcing me to understand what the characters wanted and why, and they did it in a way that didn&#8217;t make me feel that it was pure exposition.  During play, I felt that I got less of the cut-scene story explaining why we should care.  Looking back, I&#8217;m not sure I recall the decrease of exposition correctly, but I certainly felt that way, which means it did a pretty good job.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-05-04T12:14:35-0500">May 4, 2010 at 8:14AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/8c2348a889bcd8791d900f20c89b77ac?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://droct.vox.com" rel="external nofollow">Stephen</a></span> wrote:</span>
            <p>Your mention of Groundhog Day reminded me of a text based game I played on my iPhone this past winter (or I guess the prefered term is &#8220;interactive fiction.&#8221; whatever.) called Spider and Web.</p>

    <p>This is only tangential to your point, since the point of the game isn&#8217;t to make you feel the things you&#8217;re talking about, but it does have a very Groundhog Day like mechanic to it which I think could very easily be used for something like what you&#8217;re talking about.</p>

    <p>It&#8217;s also very clever and pretty fun, I highly recommend it.*</p>

    <p>In fact, some of the more innovative games and ideas I&#8217;ve read about recently (though most of the games aren&#8217;t that recent, many being made in the 80&#8217;s or even mid to late 90&#8217;s) are in the text-based genre.  It wouldn&#8217;t surprise me at all if there are a few that might hit the mark you&#8217;re looking for that are coming out of, or have come out of, the indy text-based community.  There&#8217;s one I started a while back but need to finish called A Change in the Weather that is apparently pretty interesting and is apparently at least partially about just enjoying or experiencing a day.</p>

    <p>If you want some inspiration I&#8217;d highly recommend checking that scene out.  (The iPhone app I have is called Frotz, and it comes with and is able to download a huge number of games, most of them free and made by the community).</p>

    <ul>
        <li>A few notes on Spider and Web if possible might recommend playing on something other than an iPhone, as typing sometimes got a little frustrating on there, since typos tend to mess up the text interpreter.  Also while I suggest getting as far as you can on your own (the journey of figuring out what&#8217;s going on is A <span class="caps">LOT</span> of the fun of the game), if you get frustrated don&#8217;t worry about looking at an <span class="caps">FAQ</span> for a hint about that particular section of the game, the text interpreters aren&#8217;t perfect and sometimes you just need the right phrasing to do what you want to do (ie you were trying to do something that&#8217;s an option but you were using the wrong words to try to do it).</li>
    </ul>

    <p>I&#8217;ve also considered trying to run Spider and Web as a free-form tabletop <span class="caps">RPG</span> solo game with someone as I think it&#8217;d be pretty interesting and fun, and would get around a lot of the text interpreter issues.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-05-04T14:22:50-0500">May 4, 2010 at 10:22AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/8c2348a889bcd8791d900f20c89b77ac?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://droct.vox.com" rel="external nofollow">Stephen</a></span> wrote:</span>
            <p>Wow, the formatting on my comment up there got pretty messed up.  The bit after the bullet was all supposed to be part of one idea, and should all have been basically a note connected with the * listed above.  Oh well.  The blag was too smart with it&#8217;s formatting for me!</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-05-04T18:48:49-0500">May 4, 2010 at 2:48PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/517e032f7fd07f96bb3aa6e330e13ada?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://tinysubversions.com" rel="external nofollow">Darius K.</a></span> wrote:</span>
            <p>&#8220;Where are the games that remind me of the sheer force of a community believing in someone&#8221;</p>

    <p>The end of EarthBound comes to mind for that one. I cried, just like I did the first time I saw Shawshank Redemption.</p>

    <p>(<span class="caps">YEAH</span> <span class="caps">GAMES</span> <span class="caps">THAT</span> <span class="caps">MAKE</span> <span class="caps">YOU</span> CRY! You worked on one of those right?!?!11?)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-05-12T16:16:16-0500">May 12, 2010 at 12:16PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/32940416860f06cbd0ab1012ad2e61ee?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Conner</span> wrote:</span>
            <p>Man, when the robot died in Planetfall, it was totally the saddest.  And he sings you that song about the heroic space miners&#8230;</p>

    <p><span class="caps">THAT</span> is a game that makes me tear up whenever I think about it.  Makes that stupid heart cube look like crap.  That for me was a moment all about friendship and sacrifice.</p>

    <p>I realize it is lame to cite ancient games I played as a kid and have probably embellished heavily in the intervening years, but that&#8217;s what lept into my mind when I read your post, so there it is.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-05-13T22:49:15-0500">May 13, 2010 at 6:49PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[GDC 2010 pt. 3 - And the Rest]]></title>
    <link href="http://blog.shaneliesegang.com/2010/03/and-the-rest/"/>
    <updated>2010-03-18T20:42:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2010/03/and-the-rest</id>
    <content type="html"><![CDATA[<p>One more <span class="caps">GDC</span> post, a quick roundup of the remaining talks which I found significant and some other general folderol.</p>
<p><!--more--></p>
<h2>Writer&#8217;s Roundtable</h2>
<p>Every year I attend <span class="caps">GDC</span>, I go to the Writer&#8217;s Roundtable at least one of the days. Every year I walk away disappointed. I think this year I realized why &#8212; it&#8217;s because it&#8217;s the <em>Writer&#8217;s</em> Roundtable, rather than the <em>Writing</em> Roundtable. I&#8217;d love to have a greater focus on the craft, but it seems like just a lot of whinging about the plight of writers in the games industry. Questions like &#8220;how do you unify tone across seven writers&#8221; are just met with blank stares when most people are struggling to get their studios to hire <strong>one</strong> full-time writer.</p>
<p>&lt;shrug&gt; I&#8217;d love this session to be more relevant, but I don&#8217;t know how to accomplish that. Getting people to listen to each other and stay more on topic would be a start.</p>
<p>(Also: writers complain that they&#8217;re not respected in <strong>every</strong> creative industry. Not unique to game writers. Try talking to screenwriters sometime about &#8220;possessive credits.&#8221;)</p>
<h2>Permadeath</h2>
<p><a href="http://www.escapistmagazine.com/news/view/99115-GDC-2010-Game-Design-Challenge-Real-Life-Perma-death">The Game Design Challenge this year</a> was an odd one for me, the first time I&#8217;ve felt truly at odds with the prevailing opinion of the crowd. While I appreciated how he was able to infuse the scenario with humor, Jenova Chen&#8217;s Facebook game built around real people&#8217;s deaths really struck me as distasteful and borderline offensive. Assigning numeric value to human life (even as part of a game to help memorialize those lives) is just something I find inherently slimy, and I grew increasingly uncomfortable as he went on.</p>
<p>I thought Kim Swift, on the other hand, presented a thoughtful, reasoned game that had the potential to actually do some good. A prescription game to help people come to terms with their impending death and put positive energy into the world is the kind of thing we could use more of. All games teach, whether we want them to or not, and the lessons she proposed are some of the most important we can learn as humans. Should make us all think about what lessons our own games are teaching. I had some design quibbles, but she was tackling an incredibly hard subject as a solo designer, so I didn&#8217;t mind it.</p>
<p>The crowd, however, seemed to have the exact opposite reaction to the one I did &#8212; humor wins the day, as usual. That&#8217;s OK. Kim Swift, I salute you, and you win the official Shane Liesegang Game Design Challenge Award.</p>
<h2>Overhead <span class="caps">SMASH</span></h2>
<p>My old creative director from <span class="caps">EALA</span>, Randy Smith, gave a talk about how he founded and runs <a href="http://www.tigerstylegames.com/">Tiger Style</a>. It could essentially be called &#8220;how to run a studio without becoming a business douchebag.&#8221; I&#8217;m not looking to start my own studio (at least not in the foreseeable future), but it seemed like there were lots of indie aspirationals in the audience who were inspired. As always, Randy gave an engaging, understandable, practical talk &#8212; the kind of nuts-and-bolts affair that I think <span class="caps">GDC</span> should do more often.</p>
<h2>Building Open Worlds</h2>
<p>Nate Fox, from <a href="http://suckerpunch.com/">Sucker Punch</a> (a studio on which I have an eternal crush), gave a superlative talk on how they built their open world city for <cite>inFAMOUS</cite>. It was just chock-full of little pragmatic nuggets of useful techniques. Sightlines, weenies (the Disney kind, not the hot dogs or the dirty kind), hex-grids, border alignment, etc. Made some good points about cutting corners on the in-between stuff so they can spend more time on &#8220;evil lairs,&#8221; or the parts that the players remember and care about more. Probably the most useful session I attended this year.</p>
<p>(My notes say &#8220;slides available on the internet,&#8221; but I can&#8217;t seem to find them now, which makes me sad.)</p>
<h2>Train</h2>
<p>Brenda Brathwaite&#8217;s talk has been well covered <a href="http://www.destructoid.com/gdc-10-the-holocaust-board-game-166862.phtml">elsewhere</a> so I won&#8217;t go into too much detail. Suffice to say, I was shocked by how emotionally affected I was &#8212; I think due to Brenda&#8217;s honesty in portraying and discussing her own emotional journey while creating it.</p>
<p>She repeated the assertion that &#8220;games don&#8217;t have to be fun&#8221; that I&#8217;ve heard before, citing <cite>Schindler&#8217;s List</cite> as an example from another medium. I agree with the assertion, and that&#8217;s obviously a great movie, but I also wonder how that fits in with the different place games occupy in our culture. Everyone in our society watches movies. Everyone. To be considered a literate adult citizen, you are simply expected to have seen movies like <cite>Schindler&#8217;s List</cite>. If you are involved in filmmaking, you would be actively shunned for <strong>not</strong> having seen it.</p>
<p>Games don&#8217;t occupy that same station &#8212; even among game developers, I don&#8217;t think there are games you are <strong>expected</strong> to have played. (Sure, we all assume you know <cite>Tetris</cite>, <cite>Civilization</cite>, <cite>Super Mario Bros.</cite>, etc., but they&#8217;re more as a foundation to the medium than as &#8220;something you simply <em>must</em> experience.&#8221; [I would say <cite>Heavy Rain</cite> comes close to that category, but obviously it falls short of <cite>Schindler&#8217;s List</cite> in execution. {No shame in that.}])</p>
<p>I wonder if we can do non-fun games without having that sense of compulsory consumption. Or rather, if they would gain as wide consumption as non-fun works do in other media.</p>
<p>(Definitely don&#8217;t think we should stop trying to make non-fun, serious, affecting work &#8212; just wondering if it&#8217;s futile to try and get them to a wider audience. To her credit, Brenda Brathwaite is unconcerned with audience size for these particular games, and so my bringing this up is a bit of an unfair tangent.)</p>
<p>In any event, her talk is the kind that makes you look at your own work and wonder if you could elevate it to a more substantial level.</p>
<h2>Gender Breakdown</h2>
<p>One final observation. We hear constantly about the gender breakdown in the industry, how more women developers would be good for the industry. I agree with this wholeheartedly; more perspectives will help up make better games. The boys&#8217; club is a self-reinforcing environment, and breaking down those walls will help us create more relevant art.</p>
<p>I noticed that there was a pretty high number of female conference associates at <span class="caps">GDC</span>, though. CAs, to my understanding, are predominantly aspiring developers, though there are some full-timers among them as well. On the other hand, the non-yellow shirts at the conference were the expected ratio of men to women (about 20:1) for a games conference.</p>
<p>This is clearly not scientific data in the slightest, but it would seem to indicate that there are a healthy number of women who would like to work in the industry, but they don&#8217;t seem to make it in. Why is there such a disparity of gender ratio between aspiring game developers and actual game developers? I&#8217;m not sure we can use the &#8220;girls don&#8217;t want in to our industry&#8221; excuse anymore (and it was always pretty weak). Now we need to figure out why that next step is missing.</p>
<p>There are lots of potentially confounding variables here: CA selection could be weighted towards women; professional women may be less likely to attend <span class="caps">GDC</span> than their male counterparts; etc. In any case, it makes you wonder.</p>
<p>I think this is one of the biggest problems facing our industry. I often wonder if, 20 years from now, games are like movies (everyone participates) or like comic books (small but devoted fanbase). If we stay predominantly white, predominantly male, predominantly immature, the answer is obvious.</p>
<h2>Apologies</h2>
<p>Once more, I&#8217;ve got to clarify something from <a href="http://blog.shaneliesegang.com/2010/03/my-rant-against-rants/">my first <span class="caps">GDC</span> post</a>. I&#8217;ve updated the original article, but wanted to apologize for not giving credit for the initial idea of post-rant group confession to <a href="http://www.artyponderer.com/">Darren Torpey</a>. We had a good discussion at <span class="caps">GDC</span> that was the impetus for that post, and I was remiss to have not given him a shout-out.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">9 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/7c5737f3c36e584079bd1c3559251675?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Piazza</span> wrote:</span>
            <p>Great to hear your thoughts, Shane. A couple of responses.</p>

    <p>&#8220;writers complain that they&#8217;re not respected in every creative industry&#8221;</p>

    <p>The focus needs to shift away from the fact of complaining and towards the structural and cultural factors that make the situation of game writers much more demoralizing in the game industry than others. I don&#8217;t know if you intended it, but this comment sounded like excuse-making and the implication of an equivalency between the difficulties writers have in the game industry and other media. If such an equivalency was intended, we should be aware that that&#8217;s misleading. Especially when you note in the same post that most game companies are struggling to hire &#8220;one&#8221; writer, it hardly seems like such a situation is comparable to what goes on in film and television. We should focus on the particular challenges writers in the game industry face, because they <span class="caps">ARE</span> different, both in quality and degree. The first principle of such a recognition must be that writing is fare <span class="caps">MORE</span> marginalized and far <span class="caps">LESS</span> understood and respected than in almost any other medium. This should be an unmitigated source of <span class="caps">SHAME</span> for the game industry, one that shouldn&#8217;t be lessened by any false happy talk or false equivalencies. Because only when everyone in the industry, from financiers to project leads share that sense of shame, will anything change.</p>

    <p>This relates to your other point about &#8220;must see&#8221; movies, or movies as cultural literacy. Film didn&#8217;t reach this point by accident, because people suddenly decided to think of them as culturally important. Film has reached this point because thousands of working artists decided, against their financial, psychological, and sometimes even physical self-interest, put the art of filmmaking and screenwriting <span class="caps">FIRST</span>, above all other concerns. Until there are such similar massive acts of heroism and selflessness in the game industry, driven by the integrity and self-respect of game designers who believe in an ethic of game design, no one in the game industry, at any level, in any position, has any right to either complain about the relative low cultural status of games.</p>

    <p>What&#8217;s more, I think your logic inverts things. Game designers can&#8217;t <span class="caps">WAIT</span> until games are respected as culturally important to take risks in making games that aren&#8217;t <span class="caps">FUN</span>. It is <span class="caps">ONLY</span> the taking of those risks that have a chance of ever elevating the cultural importance of games.</p>

    <p>The risks come first. Then the respect.</p>

    <p>Instead what we get from today&#8217;s game industry is a constant and stultifying effort to manage and minimze risk, combined with complaining about people&#8217;s relative lack of respect for games as some kind of &#8220;prejudice&#8221; or unfair snobbery.</p>

    <p>That&#8217;s just not the way it works. If the game industry has the self-respect to make culturally important games, then the public consciousness <span class="caps">WILL</span> change. The question is, then, not &#8220;When will games be respected?&#8221; The question is, when will the game industry begin to care enough and become mature enough to empower those artists who have the will and creative vision to make games <span class="caps">WORTHY</span> of respect.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T21:08:54-0500">March 19, 2010 at 5:08PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>I&#8217;m not quite sure how to respond to this &#8212; I think I specifically said that games&#8217; current stature is not an excuse and shouldn&#8217;t be a reason not to try hard things. I was just pointing out that the someone overly simple assertion &#8220;other media get to have serious works that aren&#8217;t pigeonholed&#8221; comes from real market forces. </p>

    <p>In other words, I agree with you, but perhaps not as forcefully. :-)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T21:22:38-0500">March 19, 2010 at 5:22PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/4feba91f77b43c3e0a24e9418c91bf1b?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Hoobler</span> wrote:</span>
            <p>Games aren&#8217;t art because they aren&#8217;t created by artists! Game makers aren&#8217;t artists because their games aren&#8217;t culturally relevant!</p>

    <p>Ad infinitum, ad nauseum.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T21:27:58-0500">March 19, 2010 at 5:27PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/7c5737f3c36e584079bd1c3559251675?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Piazza</span> wrote:</span>
            <p>If you think that words like &#8220;art&#8221; and &#8220;artists&#8221; are simply semantics and have no meaning, or that they are provisionally defined and entirely subjective, then you simply don&#8217;t know anything about art or the history of art, Hoob.</p>

    <p>I&#8217;m so tired of game developers whining about the judgments made of their work without taking up any inquiry into what the history of art is or has meant to artists, critics, and cultures.</p>

    <p>It&#8217;s called simple ignorance. Talk about ad nauseam.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T21:48:47-0500">March 19, 2010 at 5:48PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>Hey guys &#8212; remember the #1 rule of commenting on Shane&#8217;s blog. It&#8217;s called the Bill & Ted Rule. </p>

    <p><strong>Be excellent to each other!</strong></p>

    <p>A really important and fascinating topic, but let&#8217;s remember that one. :-)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T22:06:46-0500">March 19, 2010 at 6:06PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/7c5737f3c36e584079bd1c3559251675?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Piazza</span> wrote:</span>
            <p>&#8220;I was just pointing out that the someone overly simple assertion &#8216;other media get to have serious works that aren&#8217;t pigeonholed&#8217; comes from real market forces.&#8221;</p>

    <p>But I was trying to point out that what appears to be an effect of contemporary market forces is the outcome of a historical tradition that constantly fought for craft and cultural values against the market.</p>

    <p>That history is important.</p>

    <p>The market is not an inevitability. We can allow it or not allow it to determine everything that games can be.</p>

    <p>But very few game designers &#8211; indie or industry &#8211; seem to have a belief in or a desire to make games directly outside the market, or to create or change markets.</p>

    <p>Other media have also been affected by this larger trend, but to a lesser extent than the game industry.</p>

    <p>It used to be kids formed a band because they were pissed off and wanted to emulate their heroes. Then one day they became aware of the possibility of making money.</p>

    <p>Now kids have MySpace pages for their band before they even write one song. They&#8217;re promoting themselves before they&#8217;ve even played a show.</p>

    <p>However, video games really got off the ground when Nolan Bushnell decided he could make a lot of money off of Ralph Baer and Steve Graetz&#8217;s games. Almost from the very beginning, then, they have been all about the market.</p>

    <p>Now, there were a few other things going on in the early-to-mid-70s. Role-players playing &#8220;D&amp;D&#8221; before they&#8217;d even bought one of TSR&#8217;s little white books. Hackers putting up &#8220;Dungeon&#8221; games almost before they&#8217;d even played D&amp;D. Wargamers have always had a tiny niche based on love and not dollars.</p>

    <p>In germany, Hasbro and Park Bros. hadn&#8217;t cornered the market on board games and colonized our understanding of what board games could be, so a thriving community and game design ethic was born there that could arguably never have emerged in America.</p>

    <p>But what little independent spirit the game industry ever had has been so totally cannibalized by market forces at this point, that it remains to be seen whether an ethic of game design can ever emerge that isn&#8217;t always taking dollars and cents into account.</p>

    <p>So yes, I guess we agree about market forces, but do we agree that finding a way to find and embrace values that have nothing to do with markets is the only way for video games to grow?</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T22:10:33-0500">March 19, 2010 at 6:10PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>Like I said, this is a really interesting topic, but likely not the best forum for discussion of it. I have some disagreements with your historical interpretation and don&#8217;t think the modern situation is quite as bad as you paint it, but then I tend to be an optimist. &lt;shrug&gt;</p>

    <p>Intelligent people can disagree on such matters. Perhaps we should just leave it at that. :-)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T22:16:44-0500">March 19, 2010 at 6:16PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/7c5737f3c36e584079bd1c3559251675?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Nathan Piazza</span> wrote:</span>
            <p>Don&#8217;t worry, Shane. Hoob and I have insulted each other before, and probably will again. :-)</p>

    <p>And I appreciate your desire to keep things civil.</p>

    <p>But I&#8217;m totally serious when I say that one thing that has made movies great is that people have been willing to risk job security and a little impolitness for the sake of the form. In fact, as I already mentioned, in many cases they&#8217;ve been willing to risk a lot more than that.</p>

    <p>Intelligent people can and will disagree about a lot of things, but intelligent people who aren&#8217;t willing to fight for what they believe in are sheep like any other.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-19T22:40:26-0500">March 19, 2010 at 6:40PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/27fe8c29fdb384bca5447e35902ce337?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Conner!</span> wrote:</span>
            <p>If someone asked me to write in a tone similar to 6 other writers (all of whom I&#8217;d assume are perfectly talented and all that) I think what I&#8217;d want to work from is a starter text, so I know what tone to establish and the sorts of language I&#8217;d be using.</p>

    <p>If you&#8217;re ever interested in talking about writing, I am totally game.  It&#8217;s my job!</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-22T01:00:05-0500">March 21, 2010 at 9:00PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[GDC 2010 pt. 2 - Sid's Keynote and Rant Clarification]]></title>
    <link href="http://blog.shaneliesegang.com/2010/03/sids-keynote-and-rant-clarification/"/>
    <updated>2010-03-17T21:08:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2010/03/sids-keynote-and-rant-clarification</id>
    <content type="html"><![CDATA[<p>Before I get into the second part of my <span class="caps">GDC</span> reaction, I need to clarify my view of the rant after <a href="http://blog.shaneliesegang.com/2010/03/my-rant-against-rants/">yesterday&#8217;s post</a>. I definitely think they are a net good, getting people talking about these important issues. There&#8217;s a danger in catharsis, though &#8212; remember that it comes from the Greek word for &#8220;purge&#8221; or &#8220;cleanse.&#8221; When we cheer at the rant, it potentially triggers the &#8220;I did something&#8221; part of our brains, when in fact, all we did was cheer. I would actually advocate <strong>against</strong> catharsis in this case, since we should take these issues with us when we leave. Hence my suggestion for a structured self-examination.</p>
<p>Anyway, some thoughts on Sid Meier&#8217;s keynote.<br />
<!--more--><br />
I generally don&#8217;t take notes at the big sessions since they&#8217;re the most thoroughly covered elsewhere. But something Sid said made me rush to pull out my laptop and get a thought down.</p>
<p>Sid is at his best when talking about his failures (if you&#8217;ve never seen his talk on the three attempts to make a game about dinosaurs, it&#8217;s worth trying to track down), so his section entitled &#8220;My Bad&#8221; was fairly illuminating. The tidbit that interested me was his revelation that the original concept and implementation of <cite>Civilization</cite> was a real-time game, but they found that it made the player into too much of an observer. Switching to turn-based play lead to a higher level of player engagement.</p>
<p>Now, as he described a real-time <cite>Civilization</cite>, I was playing through it in my head, and 100% agreed that it was easy for the player to just sit and watch stuff happen. But the thing is, we typically associate real-time play with <strong>higher</strong> levels of engagement. So why was that not the case for <cite>Civ?</cite></p>
<p>The oft-cited &#8220;one-more-turn&#8221; phenomenon associated with the <cite>Civ</cite> games comes from the basic notion of delayed results. I start building a unit; it completes in 5 turns. I research pottery; it completes in 10 turns. I have my workers build a mine; it completes in 2 turns. With enough plates spinning, I&#8217;m always just a turn (or two) away from something interesting happening. The game is thus always keeping you from finding a good stopping point. It&#8217;s really a mastery of interlocking sine waves that keeps it from having no pacing whatsoever.</p>
<p>If the game was in real-time, you&#8217;d lose that quantization of the play experience, but more importantly, you wouldn&#8217;t have to do anything to move it forward. Each turn in <cite>Civ</cite>, you <strong>have</strong> to do something, even if that something is just issuing &#8220;Wait&#8221; commands or slapping the spacebar to advance to the next turn. It&#8217;s impossible to just sit back and let things happen, and while you&#8217;re engaging to advance time, you might as well <strong>do</strong> something in the world, which sets more plates spinning, etc.</p>
<p>(There&#8217;s a similar effect at work in the player-<span class="caps">NPC</span> bonding during <cite>Planetfall</cite>, but I&#8217;ll save that for the love letter I plan to post about that game at some point.)</p>
<p>There&#8217;s almost certainly more to real-time vs. turn-based <cite>Civ</cite>; I&#8217;m not satisfied that I&#8217;ve gotten to the bottom of it. But at least I&#8217;ve now recorded my thought process on an interesting design problem after giving it a modicum of attention. Need to do that more often.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">1 archived comment</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/0b7188721a2cc2639f02b0f2f7f7ad03?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Jordan</span> wrote:</span>
        	<p>Ah, the exact opposite of Sim City, where I would get a city started, turn off disasters, and just let it run as fast as possible overnight so that I could have as much money and, therefore, progress as fast as possible (if only, of course, to fight off natural/unnatural disasters once my masterpiece was complete). But it&#8217;s amazing, I&#8217;d never thought of Civilization that way, but now that I do&#8230;</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-18T03:03:17-0500">March 17, 2010 at 11:03PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[GDC 2010 pt. 1 - My Rant Against Rants]]></title>
    <link href="http://blog.shaneliesegang.com/2010/03/my-rant-against-rants/"/>
    <updated>2010-03-16T08:04:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2010/03/my-rant-against-rants</id>
    <content type="html"><![CDATA[<p>I&#8217;ve got several things to say about <span class="caps">GDC</span> 2010, which was, I think, one of the better GDCs I&#8217;ve attended. I usually go chronologically, but in this case I need to get something off my chest.</p>
<p>Every year I attend <a href="http://blogsearch.google.com/blogsearch?oe=utf-8&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;hl=en&amp;q=gdc+rant&amp;scoring=d">the rant</a>. I find it simultaneously rousing and infuriating, and here&#8217;s why.</p>
<p>The rant does an excellent job at bringing up important issues. Chris Hecker admonishing game jammers to try and explore depth over speed. Paul Bettner sharing the very personal story of how crunch destroyed his love for games and ultimately, his studio. Heather Chaplin calling us all out for being immature man-children. Nichol Bradford issuing a call for game developers to do more to encourage math and science education. <em>Et cetera</em>.</p>
<p><!--more--><br />
But here&#8217;s what bothers me. Every year, we listen to the rants. We applaud wildly at their populist assertions and give standing ovations to their celebrations of the yet-unrealized potential of the medium.</p>
<p><strong>Then we all go back to our jobs and don&#8217;t change a damned thing.</strong></p>
<p>The rants are just pure catharsis without actually encouraging action. We listen, we debate, we argue over their merits, we deliver mini-rants against them, we blog about how right they are, and we noticeably modify our respect meters for the developers giving them.</p>
<p>But we don&#8217;t change ourselves.</p>
<p>All the steering committees, whitepapers, and surveys in the world won&#8217;t make as much of a difference as individuals making changes in the choices they make in their daily lives.</p>
<p>So I propose the following.</p>
<p>Next year, after the rant session, while all the impassioned speeches are still fresh in your post-catharsis mind, go out with some fellow developers. Have a few drinks. (This proposal is made easier because it&#8217;s leveraging something we all do anyway.) <br />
<br />
<br />
<br />
<br />
<em>And then confess your sins.</em><br />
<br />
<br />
<br />
<br />
Determine which of the rants most applies to you. Of which crime against games are you most guilty. Then offer a suggestion for how <strong>you</strong>, <span class="caps">YOU</span> <span class="caps">PERSONALLY</span> can work to not commit that sin in the coming year. This is not the time for &#8220;the industry needs more women developers&#8221; but rather the time for &#8220;I will consider gendered perspectives of my own work and strive to make my games less sexually biased and demeaning.&#8221;</p>
<p>Then, the following year, meet up with those same developer friends at <span class="caps">GDC</span>. Recall your post-rant discussions of a year earlier, and share how you have atoned for your sins. If you have failed to do so, feel no shame, for these are difficult matters. But share the difficulty of your efforts so that we can all become more aware of just how large these mountains are.</p>
<p>If anything, it will keep the important elements of the rants alive longer than it takes for their effects to stop rippling through the blogosphere.</p>
<p>There&#8217;s nothing stopping you, of course, from doing this right now. No need to wait until next year&#8217;s rant &#8212; do the same exercise. You&#8217;ll have less time for atonement since <span class="caps">GDC</span> falls earlier in 2011.</p>
<p>Which just means you&#8217;d better get cracking. Let&#8217;s fix our industry. <br />
<br />
<br />
<hr /><br />
I am an enormous cad for, in the initial version of this post, failing to credit <a href="http://www.artyponderer.com/">Darren Torpey</a> for the original idea of post-rant get-togethers, to which I added the next-year-followup. He is much smarter and better looking than I am, both of which I forgot in the alcohol-fueled haze in which I initially wrested these thoughts into written form.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">2 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/44f09f146256fd4bfbccf19872fba67c?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Christy</span> wrote:</span>
            <p>Did you see the blog response to Bettner from a former coworker of his? Craaaziness. </p>

    <p>http://insidevoice.com/?p=203</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-17T02:57:11-0500">March 16, 2010 at 10:57PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>I had not seen that &#8212; thanks! Always good to have additional datums.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-03-17T03:50:20-0500">March 16, 2010 at 11:50PM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Programming Languages]]></title>
    <link href="http://blog.shaneliesegang.com/2010/02/programming-languages/"/>
    <updated>2010-02-19T10:10:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2010/02/programming-languages</id>
    <content type="html"><![CDATA[<p>I realized today that since 1998 I&#8217;ve learned at least one new programming language every year. I consider myself as &#8220;knowing&#8221; a language if either of the following is true:</p>
<ol>
	<li>I used it to complete a non-trivial project</li>
	<li>I spent the majority of my day in it for over a year</li>
</ol>
<ol start="1">
	<li>Means I have to have actually gotten into the guts of it and made it work for me. For example, while I had toyed with <a href="http://www.python.org">Python</a> several times while in grad school, it wasn&#8217;t until I integrated it into <a href="http://angel2d.com">Angel</a> that that I could really say I knew it, thus it gets a date of 2008.</li>
</ol>
<ol start="2">
	<li>allows me to include languages I learned for games that haven&#8217;t shipped. :-)</li>
</ol>
<p><!--more--></p>
<ul>
	<li>1998: <a href="http://tibasicdev.wikidot.com/">TI-<span class="caps">BASIC</span></a></li>
	<li>1999: <a href="http://en.wikipedia.org/wiki/Visual_Basic">Visual Basic</a></li>
	<li>2000: <a href="http://devworld.apple.com/applescript/">AppleScript</a></li>
	<li>2001: <a href="http://en.wikipedia.org/wiki/C_%28programming_language%29">C</a> and <a href="http://www2.research.att.com/~bs/C++.html">C++</a></li>
	<li>2002: <a href="http://en.wikipedia.org/wiki/X86_assembly_language">x86 Assembly</a></li>
	<li>2003: <a href="http://developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html">Objective-C</a> and <a href="http://php.net"><span class="caps">PHP</span></a></li>
	<li>2004: <a href="http://developer.nvidia.com/page/cg_main.html">Cg</a></li>
	<li>2005: <a href="http://www.adobe.com/devnet/actionscript/">ActionScript</a>, <a href="http://java.com/en/">Java</a>, <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, and <a href="http://msdn.microsoft.com/en-us/vcsharp/default.aspx">C#</a></li>
	<li>2006: <a href="http://udn.epicgames.com/Three/KismetUserGuide.html">Unreal Kismet</a> (yeah, I&#8217;ll call it a programming language)</li>
	<li>2007: <a href="http://www.ruby-lang.org/">Ruby</a></li>
	<li>2008: <a href="http://www.python.org">Python</a></li>
	<li>2009: Whatever we call the game scripting language we use at <a href="http://bethsoft.com">Bethesda</a></li>
</ul>
<p>So now the question is&#8230; what should I learn this year? Everything else has been inspired by a project (either personal or professional), and I don&#8217;t have anything on the horizon that would necessitate learning something new.</p>
<p>So I ask you, internet, what is worth learning? What new paradigm should I consider? What will expand my mind and my programming chops?</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">3 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a0b1340653a55e7709f5bf019f4bcc8e?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">jvance</span> wrote:</span>
            <p>Oh man. I remember the TI-Basic stuff. Well, not remember. Just remember using it. </p>

    <p>I&#8217;d almost say go back to one of the older ones (C, C++, <span class="caps">PHP</span>, Obj-C) and learn it really well. Unless you use them from day to day still. In which case, I don&#8217;t know.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-02-19T15:23:52-0500">February 19, 2010 at 10:23AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/0d17bc5e6c2e0444c11fb66fa20ad5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://10games10months.blogspot.com/" rel="external nofollow">Ben Cummings</a></span> wrote:</span>
            <p>As I said via Twitter, I&#8217;m still up for running through Structure and Interpretation of Computer Programs with you, and learning some scheme along the way. I&#8217;ve also been interested in OCaml (and by association, F#). In my mind, I&#8217;m also interested in evaluating Erlang as a replacement for C++ in certain <span class="caps">MMORPG</span> server processes, but in actuality, that ain&#8217;t happenin&#8217; here.</p>

    <p>I heartily endorse watching this talk by Rob Pike (http://video.google.com/videoplay?docid=810232012617965344#) and then picking up Stackless Python.  The threadlet-and-channel model for doing Hoare&#8217;s Communicating Sequential Processes is, I think, the programming abstraction of the future.  I&#8217;m still skeptical of some basic things about Google&#8217;s Go, though, so I&#8217;ll stick to Stackless.  I&#8217;m honestly still trying to get the knack of thinking that way, but I think it can be incredibly powerful.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-02-19T16:11:53-0500">February 19, 2010 at 11:11AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/8c2348a889bcd8791d900f20c89b77ac?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://droct.vox.com" rel="external nofollow">Stephen</a></span> wrote:</span>
            <p>COBOL! It&#8217;s the wave of the future!</p>

    <p>Actually I have absolutely no idea, but I do enjoy reading about programming and such so keep me updated, especially if you come up with any fun projects to do with whatever you decide on.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2010-02-19T16:23:12-0500">February 19, 2010 at 11:23AM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Disruptive Construction]]></title>
    <link href="http://blog.shaneliesegang.com/2009/11/disruptive-construction/"/>
    <updated>2009-11-08T22:40:00-05:00</updated>
    <id>http://blog.shaneliesegang.com/2009/11/disruptive-construction</id>
    <content type="html"><![CDATA[<p>Last week I was invited to speak at the <a href="http://www2.lib.virginia.edu/scholarslab/">UVa Scholars&#8217; Lab</a> on, more or less, the topic of my choice. I was thrilled to get asked to speak at my alma mater, but picking a topic was tricky.</p>
<p>It had to be something:</p>
<ul>
	<li>broad enough to appeal to digital humanities scholars who may not necessarily follow games</li>
	<li>engaging enough to interest people who <strong>do</strong> follow games and would likely end up coming to the talk because they saw &#8220;game designer&#8221; on the poster</li>
	<li>unrelated enough to my work at Bethesda that I could talk about it without tipping our hand as to our current project</li>
</ul>
<p><!--more--><br />
In the end I decided to talk about procedural content, its current place in game development, and where it might be going in the future. I could try to sum it up, but here&#8217;s a video of my slides set over the audio from the talk.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7526911&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7526911&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="450"></embed></object></p>
<p>My own feedback:</p>
<ul>
	<li>I still talk way too fast.</li>
	<li>When speaking off-the-cuff, I have a tendency to preface too many statements with &#8220;I mean.&#8221; I should to work on that.</li>
	<li>The &#8220;character choices&#8221; segment is still pretty hazy and doesn&#8217;t make its case very well.</li>
	<li>My final conclusion could benefit some from more concrete examples, even if they have to be hypothetical.</li>
	<li>I need to do better keeping up with the blogosphere, even when spending all my free time prepping a presentation, since I only found out <em>after</em> the presentation that <a href="http://clicknothing.typepad.com/">Clint Hocking</a> has been making most of my final points, in a characteristically far more thoughtful and articulate way as part of his Click Nothing Tour &#8217;09. Ah well.</li>
</ul>
<p><strong><span class="caps">BIG</span> <span class="caps">THANKS</span></strong> to:</p>
<ul>
	<li><a href="http://scholarslab.lib.virginia.edu/index.php/contributors/jfg9x/">Joe Gilbert</a> and <a href="http://nowviskie.org/">Bethany Nowviskie</a> from the Scholars&#8217; Lab for inviting me.</li>
	<li><a href="http://lizupclose.com">Liz Bernard</a> for making an example animation for me.</li>
	<li>Jesse Schell, who first introduced me to the Innovator&#8217;s Dilemma.</li>
	<li>Joel Burgess and Ben Cummings, who served as <em>invaluable</em> sounding boards and test audiences. If you didn&#8217;t like it in its current state, you would have <em>hated</em> it before these guys were able to tell me all the problems it had. :-)</li>
</ul>
<hr/>
<div class="comment-section-header">
<span class="comment-header">5 archived comments</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a02c26011fcf7a9d39cd813fbeb02cf1?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">J. L. Sabino</span> wrote:</span>
            <p>Loved the talk, Shane!!  I don&#8217;t feel qualified to comment on the content but I, novice that I am, was totally engaged.  I think my main criticism is an aesthetic one: I think the slide background you chose is a distractor, but I&#8217;m not sure why (maybe it&#8217;s the texture? Maybe I need more sleep?)  I am getting that Christensen book you recommended asap!</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-11-10T04:56:04-0500">November 10, 2009 at 12:56AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/003eb035f7f576e4bf2e01bab51a64e5?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Jessica M.</span> wrote:</span>
            <p>I only heard the unpolished version pre-presentation, but I learned a lot and thought the slides were very well done!</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-11-10T06:56:22-0500">November 10, 2009 at 2:56AM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/da713e0f2dee1d97e73f740e62dfe1a4?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Shoa</span> wrote:</span>
            <p>Thank you for posting this presentation! I actually liked how fast you talked &#8211; coupled with the animation in the slides the presentation kept my non-video-gamer interest.  Do you recommend Facade?</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-11-11T03:59:34-0500">November 10, 2009 at 11:59PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a831f03a29043c6eeb05ec94ac1bf5b0?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://shaneliesegang.com" rel="external nofollow">sjml</a></span> wrote:</span>
            <p>&#8220;Recommend&#8221; might not be the best word. But it is free and interesting and certainly worth checking out. They do a lot right, but a lot wrong. I&#8217;m happy to discuss in more depth at some point. :-)</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-11-11T18:26:21-0500">November 11, 2009 at 1:26PM</abbr> </span>
    </li>
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a3b2d58910a66267bedef736c0c83dca?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name">Chris</span> wrote:</span>
            <p>Shane!  I loved your talk.  My little bro listened to it too.  As someone inundated by Powerpoint presentations, thank you for being an excellent and interesting presenter, both auditorily and visually.  Sometimes at school, I fantasize about Powerpoint never having been made.  But it is truly the presenter, not the program, at fault.  </p>

    <p>Remind me to ask you about that Dwarf game.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-11-22T13:28:39-0500">November 22, 2009 at 8:28AM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Boston GameLoop 2009]]></title>
    <link href="http://blog.shaneliesegang.com/2009/08/boston-gameloop-2009/"/>
    <updated>2009-08-17T20:09:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2009/08/boston-gameloop-2009</id>
    <content type="html"><![CDATA[<p><em>(A long post; mostly a brain dump of my experience at a conference last weekend.)</em></p>
<p>This past weekend my friend Benji and I made the long trek from the Capital Wasteland up to Boston for a new-ish un-conference called <a href="http://www.bostongameloop.com">GameLoop</a>. Apart from seriously misunderestimating the amount of traffic that would slow us down, the trip itself was uneventful. I did score a gold medal in the &#8220;going through a toll booth without having to come to stop&#8221; game, though, which was a great moment of victory.</p>
<p>As for the event itself &#8212; it was terribly cool. <a href="http://tinysubversions.blogspot.com">Darius Kazemi</a> and <a href="http://www.macguffingames.com/">Scott Macmillan</a> made the thing happen by sheer force of will, and I heartily applaud them for it. They more than doubled the attendance from last year, and based on what I saw, I imagine it will continue to grow for some time to come.</p>
<p><!--more--><br />
GameLoop is essentially a games-specific version of <a href="http://en.wikipedia.org/wiki/BarCamp">BarCamp</a> &#8212; if that doesn&#8217;t mean anything to you, just know that it&#8217;s a sort of ad-hoc organized-as-you-go conference. The day starts with about an hour of people standing at a whiteboard saying &#8220;I&#8217;d like to do a session on X&#8221; or &#8220;can we get a roundtable to talk about Y?&#8221; Then you just <strong>do</strong> it. The second spiritual element of an un-conference is that if you&#8217;re sitting in a session and you feel you&#8217;re not getting anything out of it, you vote with your feet and head to something else; nobody gets offended, everybody learns.</p>
<p>Due to the inherent mutex lock on me, I could only go to one session in each timeslot, and in some cases <a href="http://www.bostongameloop.com/2009-event-recap">the choices were hard</a>.</p>
<h2>Session 1: Designer/Player Trust-Building</h2>
<p>I wasn&#8217;t quite sure what to make of this session &#8212; I felt like we were discussing good game design principles, but couldn&#8217;t necessarily see how they were specifically related to trust. You want to have understandable level designs, make sure your player understands their goals, etc. Maybe the point was that trust is so endemic to game design that the two <strong>can&#8217;t</strong> be separated. I felt like mid-way through we ended up just naming examples of games that made us trust the designers (I was guilty of this as well, contributing <cite>Donkey Kong Country</cite>), and, as was pointed out by one of my colleagues later that evening, it&#8217;s not the most productive form of discourse.</p>
<h2>Session 2: Prototyping</h2>
<p>I had given a talk on Prototyping back when I worked at EA, had originally considered dusting it off (and removing EA-specific portions), but just didn&#8217;t have time to get it together. Darius sneakily (and a bit cheekily :-) ) put it up on the board anyway, and it received enough support that we pretty much <strong>had</strong> to do it. So I pushed it towards a round-table format as much as I could.</p>
<p>This was a really productive session, at least for me. It made me feel better to hear that everyone seems to have the trouble of execs/producers mistaking prototypes for shipping code, and we talked about strategies for mitigating that. We stopped short of saying actively sabotage your code, but writing it in a different language from the shipping game was one of the cuter strategies.</p>
<p>I think my slightly controversial view that prototypes are science experiments and should only answer single questions did exactly what it should do &#8212; spark discussion as some people agreed with me and others disagreed. Most people in the session were contributing, and it felt like everyone was learning, so I felt like this was a win.</p>
<p>I walked away thinking it would be fun to de-EA-ize my old prototyping talk and do it at events like these. At least a 10 minute version to help frame give-and-take like we had here.</p>
<p>(I also met <a href="http://www.darrentorpey.com/">Darren Torpey</a> for the first time &#8212; he worked porting <a href="http://angel2d.com">Angel</a> to <span class="caps">XNA</span>, so it was cool to finally shake hands with one of the folks with whom I communicate semi-frequently.)</p>
<h2><span class="caps">LUNCH</span></h2>
<p>Very tasty sandwiches. Very large cookies. Above average coffee.</p>
<h2>Session 3: &#8220;Programmer Designer&#8221; vs. &#8220;Designer Programmer&#8221; + Game Design Basics</h2>
<p>Early on in my career I had to make the call as to whether I would be a programmer with design skills or a designer with programming skills. I went the design route and have been pretty happy with it, and this discussion was exploring that boundary and how people on either side of it felt.</p>
<p>I definitely think as games become more systemic that this line is going to get blurrier, if never dissolve completely. It&#8217;s also been my experience that it&#8217;s far easier for designers to get input on programming issues than for programmers to get input on design issues, though that&#8217;s largely an individual studio culture thing and case-by-case. One engineer said that he felt he couldn&#8217;t make any change to a system without getting clearance from a designer, and that the process was more of a handoff than a collaboration. That made me sad, but from what I heard, it&#8217;s pretty much the general state of the industry.</p>
<p>I&#8217;m not sure where the talk went after that, because I decided to bounce and go into the &#8220;Game Design Basics&#8221; talk and share my vast reams of knowledge. :-) For the most part it was a &#8220;how to break into design&#8221; roundtable, which always interests me, <a href="http://blog.shaneliesegang.com/2009/03/design-interviews/">as you might remember</a>, dear reader.</p>
<h2>Session 4: Procedural Story &amp; Emergent Narrative</h2>
<p>Another roundtable type thing that I was attempting to run. I felt really bad about this one because I think I did crappy job with it &#8212; it&#8217;s obviously an overly broad topic and there are lots of quagmires hiding in there waiting to drag a discussion down for hours. I warned that I was going to shut down lines of conversation if I thought they were going in that direction, but then defined the problem so loosely that the rest of the session was spent trying to better define it, which was the chief quagmire I was wanting to avoid.</p>
<p>&lt;sigh&gt;</p>
<p>I could tell there were some equally frustrated people wanting to get it back on track, but it&#8217;s hard to control a passionate crowd who wants to talk definitions. This is definitely a situation where a 10-minute prepared opening could have <strong>really</strong> helped.</p>
<h2>Session 5: Meaning in Games &amp; Interactive Metaphor</h2>
<p>On the long drive up, somewhere, I think, in Delaware, Benji and I got talking about <a href="http://hcsoftware.sourceforge.net/passage/">Passage</a>, which I described as the best, possibly only example I could give of &#8220;interactive metaphor,&#8221; something where the mechanics themselves are metaphorical. It inspired Benji to run this roundtable, the last of the day, to get people talking around this issue. There was some confusion over exactly what was being discussed, but to be fair, this is a complex and hard to grasp issue. A lot of people latched onto the moral choices of <cite>Fallout</cite> and <cite>Bioshock</cite>, but I think we all at least walked away willing to acknowledge that some more subtlety in those choices would be more interesting.</p>
<p>Of course, moral choices are not necessarily interactive metaphor. Perhaps the fact that we couldn&#8217;t come up with <strong>any</strong> other examples means that this is still an area ripe for development.</p>
<h2>Post-Conference Shenanigans</h2>
<p>Afterwards, most people headed over to <a href="http://www.cambridgebrewingcompany.com/">a local watering hole</a> for some refreshment. Sat down with Scott and spent a lot of time talking about his game <a href="http://www.macguffingames.com/games/">Heritage</a>, which I&#8217;m really excited to actually see in action when finished. Also met (or re-met possibly) <a href="http://marctenbosch.com/">Marc ten Bosch</a>, talked about indie games, multi-dimensional thought, and the pros and cons of EA. At least I think we did. The beer at that place was good.</p>
<p>Ended the evening at the office of <a href="http://orbusgameworks.com/">Orbus Gameworks</a>, playing my first round of <cite>Race to the Galaxy</cite>, which I found delightful, if a bit non-orthogonal for my tastes. I think more mastery of it might reveal systems I didn&#8217;t see before. We schemed about ways to make next year&#8217;s GameLoop even better. Which I guess means that I have to go back next year. :-)</p>
<p>On the drive back Benji and I debated the merits of doing a DC area GameLoop (Capital GameLoop?) &#8212; there&#8217;s not much of a scene in the area, but maybe a smaller event could snowball and eventually draw in folks from North Carolina and Philly. Anything is possible; it would definitely be good to see more game development community in the area.</p>
<hr/>
<div class="comment-section-header">
<span class="comment-header">1 archived comment</span> <span class="no-comments"><a href="http://blog.shaneliesegang.com/no-comments">Why no more comments?</a></span></div>
<ol id="comments" class="commentlist">
    <li class="comment">
        <span class="comment-author vcard"><img src='http://www.gravatar.com/avatar/a77150d0a3bbf62c4c7411f6a6def1e4?s=64&d=retro' class="photo avatar" height="64" width="64"/> <span class="commenter-name"><a href="http://www.macguffingames.com" rel="external nofollow">Scott Macmillan</a></span> wrote:</span>
        	<p>Holy crap.  You just used a mutex to describe a personality quirk.  That&#8217;s pretty fantastic.</p>

	<p>Thank you guys for coming! I feel like the conference (and definitely the post conf drinking, games, and feedback) were categorically better because you guys came.  I seriously hope you make it back next year.</p>
        <span class="comment-meta">Posted <abbr class="comment-published" title="2009-08-18T13:50:11-0500">August 18, 2009 at 9:50AM</abbr> </span>
    </li>
</ol>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Games of My Life]]></title>
    <link href="http://blog.shaneliesegang.com/2009/06/games-of-my-life/"/>
    <updated>2009-06-27T12:58:00-04:00</updated>
    <id>http://blog.shaneliesegang.com/2009/06/games-of-my-life</id>
    <content type="html"><![CDATA[<p>I&#8217;ve been trying to break down exactly what I value in games. What I find fun, what kinds of games I&#8217;m drawn to. It&#8217;s a hard thing to quantify exactly what makes a game good, especially trying to determine a trend across all the games I&#8217;ve liked. So I&#8217;m making this page as a kind of analysis and breakdown of the games that have been strong, memorable parts of my life. <br />
<!--more--><br />
As I find more interesting metrics, I plan to post them, as well as update this post. But hopefully the 10 games themselves will remain static, unless there&#8217;s some moment of &#8220;<span class="caps">HOW</span> ON <span class="caps">EARTH</span> <span class="caps">COULD</span> I <span class="caps">FORGET</span> TO <span class="caps">INCLUDE</span> <cite><span class="caps">CATWOMAN</span>?</cite>!&#8221;</p>
<h2>Unordered 10 Impactful Games</h2>
<ul>
	<li><cite>Rez</cite></li>
	<li><cite>Sly 2: Band of Thieves</cite></li>
	<li><cite>Portal</cite></li>
	<li><cite>Braid</cite></li>
	<li><cite>Marathon</cite></li>
	<li><cite>Super Mario World</cite></li>
	<li><cite>Castlevania: Symphony of the Night</cite></li>
	<li><cite>Civilization</cite></li>
	<li><cite>Final Fantasy VI</cite></li>
	<li><cite>Planetfall</cite></li>
</ul>
<p>These are the games that, over my life, I played the hell out of. Ones that I was obsessed with. Ones that impressed me to my core. That haunted my dreams when I wasn&#8217;t playing them. Ones that I will evangelize to people who haven&#8217;t played them.</p>
<p>There are many other games I loved, enjoyed immensely, and replay from time to time. But in the interests of keeping the list to 10, I just went with the ones that had a profound impact or rose to the level of obsession for me.</p>
<p>Note that I&#8217;ve limited this list to video and computer games, or else I would have to include <cite>Dungeons &amp; Dragons</cite>, <cite>Diplomacy</cite>, and several others.</p>
<p>(Not meant to be a &#8220;top 10&#8221; of any sort or a declaration of industry impact or anything.)</p>
<h2>Metacritic</h2>
<ul>
	<li>93: <cite>Castlevania: Symphony of the Night</cite></li>
	<li>93: <cite>Braid</cite></li>
	<li>92: <cite>Super Mario World</cite></li>
	<li>92: <cite>Final Fantasy VI</cite></li>
	<li>91: <cite>Rez</cite></li>
	<li>90: <cite>Portal</cite></li>
	<li>88: <cite>Sly 2: Band of Thieves</cite></li>
</ul>
<p>In places where a game had more than one rating due to remakes or multiple platform releases, I went with the highest rating. <cite>Marathon</cite>, <cite>Civilization</cite>, and <cite>Planetfall</cite> have no Metacritic rankings. The <cite>Super Mario World</cite> and <cite>Final Fantasy VI</cite> rankings come from the GameBoy Advance re-releases.</p>
<p>This yields an average Metacritic ranking of 91.2, which would seem to indicate that the games which mattered most to me are also games that the industry as a whole (or at least the press) also consider to be paragons.</p>
<h2>Chronologically Sorted</h2>
<ul>
	<li>1983: <cite>Planetfall</cite></li>
	<li>1990: <cite>Super Mario World</cite></li>
	<li>1991: <cite>Civilization</cite></li>
	<li>1994: <cite>Final Fantasy VI</cite></li>
	<li>1994: <cite>Marathon</cite></li>
	<li>1997: <cite>Castlevania: Symphony of the Night</cite></li>
	<li>2001: <cite>Rez</cite></li>
	<li>2004: <cite>Sly 2: Band of Thieves</cite></li>
	<li>2007: <cite>Portal</cite></li>
	<li>2008: <cite>Braid</cite></li>
</ul>
<p>At first I was troubled that there was too much clustering in recent years, but this has an average of 2.8 years between games. If you throw out the first 7-year gap, that drops to 2.25. I would be comfortable with either number.</p>
<h2>Genres and Demographics</h2>
<ul>
	<li><cite>Rez</cite>: music-based rail shooter</li>
	<li><cite>Sly 2: Band of Thieves</cite>: adventure platformer</li>
	<li><cite>Portal</cite>: first-person puzzler</li>
	<li><cite>Braid</cite>: puzzle platformer</li>
	<li><cite>Marathon</cite>: first-person shooter</li>
	<li><cite>Super Mario World</cite>: action platformer</li>
	<li><cite>Castlevania: Symphony of the Night</cite>: action exploration <span class="caps">RPG</span></li>
	<li><cite>Civilization</cite>: strategy simulation</li>
	<li><cite>Final Fantasy VI</cite>: <span class="caps">RPG</span></li>
	<li><cite>Planetfall</cite>: text adventure</li>
</ul>
<p>So breaking that down:</p>
<ul>
	<li>3 games that could be classified as platformers</li>
	<li>2 first-person games</li>
	<li>7 games with strong story elements</li>
	<li>4 games where the story is absolutely endemic to the game&#8217;s quality</li>
	<li>2 shooters (and one had very strong story)</li>
	<li>5 games with gameplay focused around puzzles</li>
	<li>3 games with majority gameplay focused around puzzles</li>
	<li>4 games made by Japanese developers</li>
	<li>6 games made by American developers</li>
	<li>0 games made by anyone else</li>
	<li>2 games that lose a substantial amount of (if not all) impact after first play-through</li>
	<li>1 game that is <strong>meant</strong> to be played through multiple times for most enjoyment</li>
	<li>3 games that expose fairly complex numerical models to the player</li>
	<li>4 games that are continuing titles in a series</li>
	<li>3 games that kicked off a series</li>
	<li>1 game that is rumored to be the start of a series</li>
	<li>2 games that stand alone</li>
	<li>4 PC/Mac games</li>
	<li>6 console games
	<ul>
		<li>1 Dreamcast game (I played on PS2 originally)</li>
		<li>1 PlayStation 2 game</li>
		<li>1 Xbox 360 game</li>
		<li>2 Super Nintendo games</li>
		<li>1 PlayStation game</li>
	</ul></li>
</ul>]]></content>
  </entry>
  
</feed>
