<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>valthonis.net</title>
	<atom:link href="http://valthonis.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://valthonis.net</link>
	<description>a blog</description>
	<lastBuildDate>Sat, 05 Dec 2009 02:29:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to revive dry Play-Doh</title>
		<link>http://valthonis.net/2009/12/04/how-to-revive-dry-play-doh/</link>
		<comments>http://valthonis.net/2009/12/04/how-to-revive-dry-play-doh/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 10:24:46 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Parenting]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=96</guid>
		<description><![CDATA[A parenting miracle from Jason Kottke.  Use it to teach your child a science lesson&#8230; or simply convince them that you&#8217;re capable of magic.  Either way, you&#8217;re a hero.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://kottke.org/09/12/how-to-revive-dry-play-doh">A parenting miracle</a> from Jason Kottke.  Use it to teach your child a science lesson&#8230; or simply convince them that you&#8217;re capable of magic.  Either way, you&#8217;re a hero.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/12/04/how-to-revive-dry-play-doh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Trading hairdo for can-do&#8221;</title>
		<link>http://valthonis.net/2009/12/04/trading-hairdo-for-can-do/</link>
		<comments>http://valthonis.net/2009/12/04/trading-hairdo-for-can-do/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 09:54:25 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[DROID]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=76</guid>
		<description><![CDATA[Verzion gets vicious in their latest holiday season offensive on the iPhone, and make no mistake here: they&#8217;re assaulting the iPhone here, not AT&#38;T as a competitor.  The telling thing here is that rather than selling the DROID on its own merits, Verizon feels they have to belittle the entrenched competition to get mindshare. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.engadget.com/2009/12/03/verizon-ad-confirms-droid-is-a-not-quite-pretty-racehorse-duct/">Verzion gets vicious</a> in their latest holiday season offensive on the iPhone, and make no mistake here: they&#8217;re assaulting the iPhone here, not AT&amp;T as a competitor.  The telling thing here is that rather than selling the DROID on its own merits, Verizon feels they have to belittle the entrenched competition to get mindshare.  Usually when a competitor has to resort to &#8220;why the other guy sucks&#8221; instead of &#8220;this is why I&#8217;m awesome,&#8221; they&#8217;ve already lost the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/12/04/trading-hairdo-for-can-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave Impressions</title>
		<link>http://valthonis.net/2009/12/03/google-wave-impressions/</link>
		<comments>http://valthonis.net/2009/12/03/google-wave-impressions/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 02:57:51 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=58</guid>
		<description><![CDATA[
Thanks to one friendly and helpful Michael Henriksen I was invited to the Google Wave preview about three weeks ago. It is a very interesting communication and collaboration tool that has the potential to change the way we interact with others online, but it is not without it&#8217;s flaws.
What is Google Wave?
Google Wave is aimed [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-medium wp-image-61" title="google_wave_logo_final" src="http://valthonis.net/wp-content/uploads/2009/12/google_wave_logo_final-440x374.jpg" alt="google_wave_logo_final" width="440" height="374" /></p>
<p style="text-align: justify; ">Thanks to one friendly and helpful <a href="http://michaelhenriksen.dk/">Michael Henriksen</a> I was invited to the Google Wave preview about three weeks ago. It is a very interesting communication and collaboration tool that has the potential to change the way we interact with others online, but it is not without it&#8217;s flaws.<span id="more-58"></span></p>
<h2>What is Google Wave?</h2>
<p style="text-align: justify; "><a href="http://wave.google.com">Google Wave</a> is aimed to improve synchronous and asynchronous communication on the web.  The service is built around the concept of a hosted communique called a <em>wave</em>.  A wave is equal parts conversation and document, and participants can collaborate via rich text, images, video, Google Maps, and other types of data. In addition, a participant can jump in anywhere within the message to edit or add content, or even add new participants to the wave.  There is a playback feature that allows new users to catch up on what they missed by rewinding the wave to the start and view how it developed. On top of all that, a wave is a live transmission in addition to being a hosted record of previous exchanges. Any participants on a wave can see edits made by other participants in real-time if they happen to be logged in simultaneously.</p>
<p style="text-align: justify; ">In addition, Google is planning on releasing Wave as <a href="http://en.wikipedia.org/wiki/Google_Wave#Protocol">an open-source protocol</a>.  Service providers will be able to offer their own hosted Wave services for users who don&#8217;t wish for Google to host their communications.</p>
<h2>Umm&#8230; what?</h2>
<p style="text-align: justify; ">It quickly becomes obvious from the above explanation that Google Wave is complex, which is a departure from most Google products.  The overarching theme of Google&#8217;s services to date has been one of <em>power through simplicity</em>. Google&#8217;s search dominance was built on a powerful algorithm beneath a spartan white HTML form. GMail became the webmail king with massive storage, free POP3 support, and a simple blue and white interface.  So when an excited Google user gets their invite to the Wave preview and sees this:</p>
<p><a href="http://valthonis.net/wp-content/uploads/2009/12/wave_complex.png"><img class="alignnone size-medium wp-image-64" title="wave_complex" src="http://valthonis.net/wp-content/uploads/2009/12/wave_complex-440x354.png" alt="wave_complex" width="440" height="354" /></a></p>
<p style="text-align: justify; ">&#8230;it&#8217;s understandable that they&#8217;re going to be slightly overwhelmed.</p>
<p style="text-align: justify; ">It is far easier to understand Google Wave&#8217;s complexity by understanding the depth of the problem it is attempting to solve: e-mail.  In both work and personal exchanges, folks have lengthy discussions over e-mail with pieces of important work flying to and fro for days or weeks before things get nailed down. New participants are added to the e-mail exchange later and later into the process, and catching up on what&#8217;s transpired prior to your participation is a study in text-only archaeology.  To make matters worse, the conversation fragments into multiple parallel shards that make it far too easy for participants to be out-of-sync.  It&#8217;s a huge pain, and it has caused many delays and headaches in hundreds of team projects.</p>
<p>Or more succinctly:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/rDu2A3WzQpo&amp;rel=0&amp;color1=0x202020&amp;color2=0x353535&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/rDu2A3WzQpo&amp;rel=0&amp;color1=0x202020&amp;color2=0x353535&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: justify; ">Addressing e-mail&#8217;s inability to elegantly handle the communications logistics of growing collaborative projects is the goal of Google Wave.  From my own casual usage, it seems to do a good job at fixing the major problems.  My Dungeons &amp; Dragons group has been using waves to disseminate background information and enter into light role-play exchanges between our monthly play sessions in ways that a traditional e-mail thread or even a web forum couldn&#8217;t easily emulate.  In fact, waves solve the collaboration problem so thoroughly that <a href="http://arstechnica.com/gaming/news/2009/10/google-wave-we-came-we-saw-we-played-dd.ars" target="_blank">entire role-playing games have sprung up</a> on the service that allow folks to play remotely and at their own leisure.  The use-case extends easily from the hobbyist&#8217;s play to the salaryman&#8217;s work, though, and that&#8217;s<a href="http://lifehacker.com/5381219/google-waves-best-use-cases"> just scratching the surface</a>.</p>
<h2>So what&#8217;s wrong with it?</h2>
<p>Google Wave is clearly an alpha product.  It lacks the stability and polish of Google&#8217;s other services, and its complex interface could probably stand to be simplified further with user feedback.  Simple actions like moving waves into folders (akin to the same action in GMail) is spotty.  The longer you keep a Wave session open in your browser, the slower it seems to get as tons of Javascript and asynchronous XHR traffic flows behind the scenes.  When I first started using the service, there was a persistent problem with &#8220;unsynced waves,&#8221; but that seems to have been addressed.  Once a user is added to a wave, there is currently no way to <em>remove</em> them from it, so compartmentalizing information is difficult without starting a new wave or a private reply.  As I think on it, though, information compartmentalization is one of the problems the service is meant to prevent.</p>
<p>These problems are not condemning.  Google Wave attempts to do what no serious contender has done in the last forty years: replace our aging e-mail system.  More thoughts to come as I continue to use Wave and the folks at Google continue to develop and refine the service.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/12/03/google-wave-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solidarity</title>
		<link>http://valthonis.net/2009/05/26/solidarity/</link>
		<comments>http://valthonis.net/2009/05/26/solidarity/#comments</comments>
		<pubDate>Tue, 26 May 2009 20:11:01 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Culture]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Same-Sex Marriage]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=32</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<div class="topcolumn"><p><br />
<img src="http://valthonis.net/wp-content/uploads/2009/05/equality-440x293.jpg" alt="Solidarity" title="Solidarity" width="440" height="293" class="alignnone size-medium wp-image-48" /></p>
<p>Today, in a shameful display of intolerance and craven concession to wealthy social conservative interests, the California Supreme Court upheld a ban same-sex marriages.  This ban, known as Proposition 8 and passed by popular vote last November by a 4-point (52-48) margin, is in direct opposition to a May 2008 decision by the same body that asserted gay and lesbian couples retained the basic civil right to marry.</p>
<p>Typically, I would be expected to endorse such a ban.  It is well-known that African-American culture is intensely homophobic, and Caribbean culture even moreso: in places like Jamaica violence against homosexuals is so intense that gay rights groups cannot even publish the address of their headquarters publicly for fear of murderous reprisals.  However, I would like to point out an interesting parallel between the events of today and a bit of historical trivia that would directly impact myself along with millions of other black folk; a concept that is so intertwined with both what we endured and that which our homosexual fellow citizens are stalwartly fighting now: discrimination.</p></div> <span id="more-32"></span><br />
<div class="leftcolumn"><p>Let&#8217;s learn a new word, shall we?</p>
<p><span style="font-weight:bold;">mis•ce•ge•na•iton</span> (n.) a mixture of races; <em>especially</em>: marriage, cohabitation, or sexual intercourse between a white person and a member of another race.<br />
irregular from Latin <em>miscere</em> to mix + <em>genus</em> race.</p>
<p>As early as the American Colonial period, laws banned the intermarriage of whites and blacks… indeed, they forbade the intermarriage of whites with any other race.  During the rise of the Abolitionist movement prior to the Civil War social conservatives concocted the term <em>miscegenation</em> to discredit progressive debate.  Much like the &#8220;boogy men&#8221; that contemporary conservatives trot out to make the prospect of same-sex marriage a frightening prospect to the electorate, the pro-slavery parties of the time used the spectre  of interracial marriage to scare the populace with threat of religious sin.  Even after the war, anti-miscegenation statutes remained (or in some states, were newly enacted) along with the Jim Crow laws that enforced racial segregation.  Some, like Representative Seaborn Roddenberry of Georgia, even tried to introduce a constitutional amendment to make interracial marriage illegal nationwide in the interest of maintaining the purity and sancitity of the Caucasian race.</p>
<p>If this story doesn&#8217;t yet sound familiar, you are not paying attention.</p></div> 
<div class="rightcolumn"><p>Luckily, such efforts at further institutionalized nationwide bigotry were never successful. Anti-miscegenation laws persisted, however, for over 50 years after Roddenberry&#8217;s amendment proposal.  After World War II the laws were finally called into question when the California Supreme Court, in a case whose ironic connection to today&#8217;s events would likely be lost on the current justices, struck down their own state&#8217;s anti-miscegenation law as a violation of Amendment XIV.  Following this, the floodgates were opened and anti-miscegenation laws were overturned in state after state during the 1950s… except in the South.</p>
<p>After the Little Rock racial integration flap of 1957, political theorist Hannah Arendt wrote in her <em>Reflections on Little Rock</em> that free choice of a spouse was &#8220;an elementary human right&#8221;:</p>
<blockquote><p>Even political rights, like the right to vote, and nearly all other rights enumerated in the Constitution, are secondary to the inalienable rights to &#8220;life, liberty and the pursuit of happiness&#8221; proclaimed in the Declaration of Independence; and to this category the right to home and marriage unquestionably belongs.</p></blockquote>
<p>All bans on interracial marriage were liften only after an interracial couple, Richard and Mildred Loving, began fighting in 1963 for the repeal of the anti-miscegenation law that prevented them from living as a married couple in their home state of Virginia. They had married in Washington, D.C. to evade Virginia&#8217;s law, but they were arrested in their own bedroom upon their return.  A judge suspended their sentence, which would have been severe, on the condition that they accept exile from Virginia for <em>twenty-five years</em>.  The Lovings took their appeal all the way to the Supreme Court, which ruled unanimously that:</p>
<blockquote><p>Marriage is one of the &#8220;basic civil rights of man,&#8221; fundamental to our very existence and survival… To deny this fundamental freedom on so unsupportable a basis as the racial classification embodied in these statutes, classifications so directly subversive of the principle of equality at the heart of the Fourteenth Amendment, is surely to deprive all the State&#8217;s citizens of liberty without due process of law.  The Fourteenth Amendment requires that the freedom of choice to marry not be restricted by invidious racial discriminations.  Under our Constitution, the freedom to marry, or not to marry, a person of another race resides with the individual and cannot be infringed by the State.</p></blockquote>
<p>All anti-miscegenation laws nationwide were struck down by this ruling, and citizens of any color were finally free to marry as they wished with equal rights under the law.</p>
<p>The California Supreme Court ruling today, and the discriminatory leanings of those voters and political action groups who supported Proposition 8, are in direct opposition to the spirit of civil rights and equality that the U.S. Supreme Court embraced in <em>Loving v. Virginia</em>.  Every American citizen in any sort of interracial relationship should feel a deep kinship with American gays and lesbians today. California and several other states are indulging in the same sort of supremacist hate that would have rendered our own loving partnerships impossible had brave Americans not fought for the equal rights afforded us under the Constitution.</p>
<p>If homosexuals are not guaranteed the right to marry under the law, than neither are any two American citizens of disparate social, political, or racial groups.  We may as well go back to the days of anti-miscegenation; the &#8220;sanctity of marriage&#8221; is an equally spurious argument in either situation.  What is next down this line of flawed logic and intolerant rhetoric?  Prohibiting rich from marrying poor, Republican from marrying Democrat… or even limiting marriage to national ethnicity, with only the English-Americans marrying English-Americans, and Indian-Americans limited to other Indian-Americans?  Under Amendmant XIV, all citizens are guaranteed equal protection of the law, and those protections we take from <em>any</em> of our citizens we take from <em>all</em> of our citizens.</p>
<p>I urge you to consider this the next time you look your own girlfriend, boyfriend, wife, husband or otherwise partner in the eye.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/05/26/solidarity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Parsing a CSV file within a ZIP archive with Python</title>
		<link>http://valthonis.net/2009/04/28/parsing-a-csv-file-within-a-zip-archive-with-python/</link>
		<comments>http://valthonis.net/2009/04/28/parsing-a-csv-file-within-a-zip-archive-with-python/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 16:51:54 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=29</guid>
		<description><![CDATA[I recently had need to parse a large (100 MB) CSV file with Python and was pleased with how speedy it was.  However, the test machine I was using was strapped for disk space and a 100 MB file was, shall we say, less than welcome. Zipping the file compressed it down to 5 [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had need to parse a large (100 MB) CSV file with Python and was pleased with how speedy it was.  However, the test machine I was using was strapped for disk space and a 100 MB file was, shall we say, less than welcome. Zipping the file compressed it down to 5 MB, which was far more reasonable.</p>
<p>Parsing CSV in Python is straightforward&#8230; and reading file contents from a ZIP archive is as well.  Unless you&#8217;re using Python 2.6 or higher, though, getting the file contents out of the ZIP archive in a way csv.reader() likes it (as a file-like object) is not as simple ZipFile.open(). All you get in Python 2.5 is ZipFile.read(), which returns the file contents in string form.  Since disk space was a premium, unarchiving the CSV even temporarily was out of the question. Using StringIO, it is possible to take the string contents of the CSV within the ZIP archive and make a file-like object that csv.reader() will be happy with.</p>
<p><span id="more-29"></span></p>
<p>Assume that you have a ZIP archive, test.csv.zip, with a single file in it, test.csv. Here&#8217;s the code:</p>
<blockquote><p>
import csv<br />
import StringIO<br />
import zipfile</p>
<p>dataFile = &#8216;test.csv&#8217;<br />
archive = &#8216;.&#8217;.join([dataFile, 'zip'])</p>
<p>filehandle = open(archive, &#8216;rb&#8217;)<br />
zfile = zipfile.ZipFile(filehandle)<br />
data = StringIO.StringIO(zfile.read(dataFile))<br />
reader = csv.reader(data)</p>
<p>for row in reader:<br />
&nbsp;&nbsp;&nbsp;&nbsp;print row</p>
<p>zfile.close()<br />
filehandle.close()
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/04/28/parsing-a-csv-file-within-a-zip-archive-with-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WHERE I Ask About JOIN Statements ON My Blog</title>
		<link>http://valthonis.net/2009/03/18/where-i-ask-about-join-statements-on-my-blog/</link>
		<comments>http://valthonis.net/2009/03/18/where-i-ask-about-join-statements-on-my-blog/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 14:00:07 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=28</guid>
		<description><![CDATA[I ran into an interesting discussion at work yesterday regarding SQL and how a sane DBMS would handle the following:

SELECT * FROM a
INNER JOIN b
ON a.id = b.game_id
WHERE a.name = 'wow'

Jeff Atwood has provided a very handy visual guide to how SQL joins work, and I feel I have a good grasp on the basics. [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an interesting discussion at work yesterday regarding SQL and how a sane DBMS would handle the following:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;">
<b style="color:#DFB098;">SELECT</b> * <b style="color:#DFB098;">FROM</b> a
<b style="color:#DFB098;">INNER JOIN</b> b
<b style="color:#DFB098;">ON</b> a.id = b.game_id
<b style="color:#DFB098;">WHERE</b> a.name = 'wow'
</pre>
<p><a href="http://www.codinghorror.com/">Jeff Atwood</a> has provided <a href="http://www.codinghorror.com/blog/archives/000976.html">a very handy visual guide to how SQL joins work</a>, and I feel I have a good grasp on the basics.  What his examples do not show, however, is how these joins are performed when you throw a WHERE clause into the mix.  I <a href="http://twitter.com/valthonis/status/1342667479">asked about this on Twitter</a> yesterday, and I&#8217;m pretty sure that 140 bytes isn&#8217;t enough to clearly state the question.<br />
<span id="more-28"></span><br />
Let&#8217;s populate our tables for illustrative purposes.  First table &#8220;a&#8221;:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;">
id name
__ ____
0  halo
1  halo2
2  halo3
3  wow
</pre>
<p>Then table &#8220;b&#8221;:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;">
user_id game_id rating
_______ _______ ______
0       2       5
5       3       2
7       0       3
14      3       5
</pre>
<p>The result of a naked INNER JOIN produces only the set of records that match in both tables:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;"><b style="color:#DFB098;">SELECT</b> * <b style="color:#DFB098;">FROM</b> a
<b style="color:#DFB098;">INNER JOIN</b> b
<b style="color:#DFB098;">ON</b> a.id = b.game_id

id name   user_id game_id rating
__ ____   _______ _______ ______
0  halo   7       0       3
2  halo3  0       2       5
3  wow    5       3       2
3  wow    14      3       5
</pre>
<p>Adding a WHERE clause to that can reduce the result set even further:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;"><b style="color:#DFB098;">SELECT</b> * <b style="color:#DFB098;">FROM</b> a
<b style="color:#DFB098;">INNER JOIN</b> b
<b style="color:#DFB098;">ON</b> a.id = b.game_id
<b style="color:#DFB098;">WHERE</b> a.name = 'wow'

id name   user_id game_id rating
__ ____   _______ _______ ______
3  wow    5       3       2
3  wow    14      3       5
</pre>
<p>In the interests of performance, I&#8217;m curious about when in the execution of this query the WHERE clause is taken into account.  Specifically, does the naked join occur before the WHERE is even applied, or are most DBMSes smart enough to reduce the working set <em>early</em> like so:</p>
<pre style="font-family:courier, monospace;font-size:1.2em;"><b style="color:#DFB098;">SELECT</b> * <b style="color:#DFB098;">FROM</b> (<b style="color:#DFB098;">SELECT</b> * <b style="color:#DFB098;">FROM</b> a <b style="color:#DFB098;">WHERE</b> a.name = 'wow') x
<b style="color:#DFB098;">INNER JOIN</b> b
<b style="color:#DFB098;">ON</b> x.id = b.game_id
</pre>
<p>&#8230;and only perform the join on the rows we know we want from the left side of the join?</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/03/18/where-i-ask-about-join-statements-on-my-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still Alive</title>
		<link>http://valthonis.net/2009/01/30/still-alive/</link>
		<comments>http://valthonis.net/2009/01/30/still-alive/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 18:56:46 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=27</guid>
		<description><![CDATA[I&#8217;m here.  I&#8217;m around.  Been on Twitter a lot, so catch me there if you want to keep up.
Thinking about what I want to do with this place.  We&#8217;ll see.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m here.  I&#8217;m around.  Been on <a href="http://twitter.com/valthonis/">Twitter</a> a lot, so catch me there if you want to keep up.</p>
<p>Thinking about what I want to do with this place.  We&#8217;ll see.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2009/01/30/still-alive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Band Names</title>
		<link>http://valthonis.net/2007/12/18/band-names/</link>
		<comments>http://valthonis.net/2007/12/18/band-names/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 19:19:08 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Band Names]]></category>
		<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=26</guid>
		<description><![CDATA[I have this habit of concocting &#8220;band name&#8221;-worthy phrases based on things I read, hear, or discuss in my daily life.  I was suggesting to my co-worker Todd that I should get a notebook and write them all down.  He suggested something even better: blog them.  So, every time I think of [...]]]></description>
			<content:encoded><![CDATA[<p>I have this habit of concocting &#8220;band name&#8221;-worthy phrases based on things I read, hear, or discuss in my daily life.  I was suggesting to my co-worker Todd that I should get a notebook and write them all down.  He suggested something even better: blog them.  So, every time I think of a noteworthy name, I&#8217;ll throw it up here on the Asides section.  Everyone&#8217;s invited to critique, discuss, and otherwise flame my choice of names; interaction is the object here, people!</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2007/12/18/band-names/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Band Name #1: Hippy Filter</title>
		<link>http://valthonis.net/2007/12/18/band-name-1-hippy-filter/</link>
		<comments>http://valthonis.net/2007/12/18/band-name-1-hippy-filter/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 19:16:45 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Band Names]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=25</guid>
		<description><![CDATA[Discuss.
]]></description>
			<content:encoded><![CDATA[<p>Discuss.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2007/12/18/band-name-1-hippy-filter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Super Mario Galaxy</title>
		<link>http://valthonis.net/2007/11/18/super-mario-galaxy/</link>
		<comments>http://valthonis.net/2007/11/18/super-mario-galaxy/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 01:39:09 +0000</pubDate>
		<dc:creator>Duane Sibilly</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://valthonis.net/?p=24</guid>
		<description><![CDATA[It&#8217;s been a long time since we&#8217;ve had a bona fide Mario platformer for a home console.  Super Mario Sunshine came out for the GameCube in 2002, and seemed to leave critics a tad disappointed.  The franchise got some much needed (and well-received) attention in the last year with New Super Mario Bros. [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since we&#8217;ve had a bona fide Mario platformer for a home console.  <em>Super Mario Sunshine</em> came out for the GameCube in 2002, and seemed to leave critics <a href="http://www.gamespot.com/gamecube/action/supermariosunshine/review.html?">a tad disappointed</a>.  The franchise got some much needed (and well-received) attention in the last year with <em>New Super Mario Bros.</em> for the DS and <em>Super Paper Mario</em> for the Wii.  Both were delicious experiences, albeit rather short, but neither seemed to scratch the itch Mario fans have had since the groundbreaking <em>Super Mario 64</em> over a decade ago.  Nearly a year after the release of the Wii, we finally get this console generation&#8217;s true Mario offering: <em>Super Mario Galaxy</em>.  Did Nintendo manage to find the same inspiration for it that they did for their other recent Mario games?<span id="more-24"></span></p>
<p>The premise for <em>Galaxy</em> will sound familiar to anyone whose ever picked up a controller to take control of the world&#8217;s most famous plumber: Princess Peach is kidnapped by a megalomaniacal Bowser bent on world (and this time, galactic) domination in addition to forced betrothal.  After Peach, castle and all, are flown away into the depths of space, Mario finds himself on a whirlwind adventure through the cosmos to rescue the princess as well as reclaim Power Stars from Bowser&#8217;s nefarious forces.  If this sounds an awful lot like <em>Super Mario 64 in Space</em>, then you&#8217;re not far off the mark: <em>Galaxy</em> takes several cues from the venerable Nintendo 64 platformer.  Seeing as how it was the original 3D platformer and is <a href="http://www.gamerankings.com/htmlpages2/198848.asp">one of the top ten games of all time</a>, this was a wise move.  Things differ from <em>Galaxy</em>&#8217;s ancestor in several key ways, though.</p>
<p>First, there is the &#8220;luma,&#8221; a race of star beings led my the enigmatic girl Rosalina.  As part of what&#8217;s essentially an eternal cosmic grand tour, Rosalina and her luma were passing near the Mushroom Kingdom when Bowser and his cronies sucked all the star power out of their comet-starship.  Stuck in orbit when the signature kidnapping takes place, Rosalina offers to help Mario find the Peach in exchange for his help freeing the stars from the evil lizard king&#8217;s clutches.  This plot, while not significantly thicker than any Mario game this side of the story-heavy <em>Paper Mario</em> series, serves as decent motivation for the adventuring to follow; it&#8217;s a far better hook than the way <em>Super Mario 64</em> dropped you outside Peach&#8217;s castle on a hide-n-seek hunt for stars.  The unfolding of Rosalina&#8217;s story will be compelling to all but the most jaded gamer, and a brigade of refugee toadstools from the Mushroom Kingdom provide chuckle-inducing comic relief.</p>
<p>Second, the level design is without a doubt the most inspired thing to come out of Nintendo&#8217;s development houses since <em>The Legend of Zelda: The Ocarina of Time</em>&#8230; and coming from a Zelda-freak like me, that&#8217;s high praise.  Gameplay takes place on myriad levels called &#8220;galaxies,&#8221; each consisting of one or more planetoids in relatively close proximity to each other.  Some are large and expansive, with horizontal planes that provide traditional platforming feel.  Others, though, are wacky spheroids and other irregular curvilinear shapes with wildly different features that will force players to shift their assumptions about how the game is played.  Managing things like gravity and momentum plays a big part in progress, as does the usual 3D problem solving.  Each galaxy typically requires flying from planet to planet via star-assisted boost jumps, with either a puzzle or a boss fight standing between Mario and Power Star.  Like <em>Super Mario 64</em>, each stage contains multiple stars and requires more than one play-through to obtain them all.  Upon entering a galaxy you&#8217;re presented with a choice of available stars to pursue, and depending on which is chosen the stage changes slightly.  The familiar meadow of the Honey Bee galaxy, for example, gains some extra menace when overrun with angry beetles while questing for that stage&#8217;s third star.  These variations get plenty of mileage out of the level designs without getting tired or repetitive, and there are nooks and crannies in each stage that cannot be found in a single run; part of the fun is finding them all as you progress farther into the game.</p>
<p>It also cannot be stressed enough that the feeling you&#8217;ll get when your zooming across the stage from planet to planet is just pure gaming joy.  It&#8217;s something I haven&#8217;t felt from a game since the NES days: happy pixel-induced wonder.</p>
<p>Lastly, the play control in <em>Galaxy</em> is the best on the console, surpassing even <em>Wii Sports</em> and <em>Metroid Prime 3: Corruption</em>.  Nintendo cribbed almost the entire control design from <em>Mario 64</em> to the point where any veteran of that game will immediately feel right at home here.  The usual Wii control components, such as Wiimote pointing and waggling, are present but not overdone.  Unlike <em>Metroid Prime 3</em>, which I could not play for longer than an hour or so without my Wiimote arm getting tired, the motion controls in <em>Galaxy</em> are as understated as they are immersive.  The developers did not fall into the trap of adding motion control for the sake of motion control, and the title is better for it.  In fact, it&#8217;s been pared down to it&#8217;s most essential elements and integrated into the gameplay in such a way that I could not imagine playing this with the same amount of enjoyment on a traditional controller.</p>
<p>There&#8217;s much more to this than what&#8217;s been covered above: there&#8217;s a handful of new suit-based power-ups Mario can use to best his enemies and explore the environment, an automatic camera that perfectly frames the action on-screen without player management, a vibrant soundtrack that pays homage to all the best music in the series across generations, and even a limited-but-fun multiplayer feature where a partner can jump in with a second Wiimote and help retrieve tiny star fragments.  The best part, though, is while the game is replete with pieces of the Mario universe, it doesn&#8217;t need them; a title with this kind of design and gameplay would have been a smash hit with or without the iconic mustachioed hero.  All this combines to become the answer to many a Mario fan&#8217;s hopes: <em>Super Mario Galaxy</em> is the definitive must-have Wii game, and a true heir to the franchise legacy.</p>
]]></content:encoded>
			<wfw:commentRss>http://valthonis.net/2007/11/18/super-mario-galaxy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
