<?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>JustinLiew.Com</title>
	<atom:link href="http://justinliew.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://justinliew.com/blog</link>
	<description>Photography, Programming and Fatherhood</description>
	<lastBuildDate>Sun, 10 Apr 2011 20:12:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Long Time No Post</title>
		<link>http://justinliew.com/blog/?p=3192</link>
		<comments>http://justinliew.com/blog/?p=3192#comments</comments>
		<pubDate>Sun, 10 Apr 2011 20:12:42 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3192</guid>
		<description><![CDATA[I guess I can finally admit I can&#8217;t keep up with blog entries like I once did.  Here&#8217;s a quick rundown of some random stuff we&#8217;ve been up to: Had dinner at Vicky&#8217;s place with Harvey, Leslie and Shmom.  She made some great pulled pork and we watched some hockey. Ran the Ft. Langley Historic [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3192"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I guess I can finally admit I can&#8217;t keep up with blog entries like I once did.  Here&#8217;s a quick rundown of some random stuff we&#8217;ve been up to:</p>
<p>Had dinner at Vicky&#8217;s place with Harvey, Leslie and Shmom.  She made some great pulled pork and we watched some hockey.</p>
<p>Ran the Ft. Langley Historic Half 5K with Jess, Fran and her dad.  We all did pretty well for our first run of the year and a cold one at that!</p>
<p>Joy &amp; Paul came by for dinner and a nice evening.  We&#8217;re trying to see them more.  Paul is doing well with his contract work with Massive Bear and Joy is enjoying her new school.</p>
<p>Saw August: Osage County at the Stanley.  Was a good play but a bit long, and quite depressing.</p>
<p>Went to the Beach House for Jessica&#8217;s birthday.  Had a great dinner as usual.  They seem to be going for a more casual feel but the food is still just as good.   Also had a family get-together at Shmom&#8217;s place for her birthday.</p>
<p>Jess is going to Presentation House plays with Christina.</p>
<p>Saw Quidam at GM Place.  Was good but lost a bit in the arena setting.  Also had a family with a young screaming baby in front of us.</p>
<p>Finishing my squash box games every month and trying to get more friendlies in too.</p>
<p>Saw Richard &amp; Stephanie for some Rock Band 3.  Hopefully we&#8217;ll see them more this year.  Steph is great for him and we hope things work out.</p>
<p>Saw Haroon &amp; Raheel for board games at our place.</p>
<p>Christina &amp; Steve are having a baby!</p>
<p>Had a great dinner at The Boathouse for Christina &amp; Steve&#8217;s 1000 days of marriage celebration.  Saw most of the bridal party and were able to catch up with some awesome people we don&#8217;t see enough.</p>
<p>Work&#8217;s going well for both of us &#8211; I&#8217;m starting to get busy with my project, which is announced this week, and Jess is working hard on the school play which is also next week.</p>
<p>Spring break was a mixed bag &#8211; I took the first week off and had a great time at the Aquarium, pool and lots of activities.  Jess and Z were sick the 2nd week which made things hard for her on her own.</p>
<p>Went to Liyana&#8217;s First Birthday yesterday.  Was a great time and will have photos soon.</p>
<p>My birthday was last week.  Had the day off and took Z to storytime, had lunch with my parents, went to Digger Park, and then watched a 5-0 Minnesota win over pizza &amp; beer.  Perfect day!</p>
<p>Go Canucks Go!</p>
<p>Listening to:</p>
<ul>
<li>Cut Copy.</li>
<li>Tim Hecker.</li>
<li>Trey Anastasio&#8217;s Spring Tour.</li>
<li>The Tallest Man on Earth.</li>
<li>New Radiohead.</li>
<li>New Brad Mehldau.</li>
</ul>
<p>Playing:</p>
<ul>
<li>Starcraft II (PC)</li>
<li>Fallout: New Vegas (PC)</li>
<li>Rock Band 3 (360)</li>
<li>Angry Birds/Seasons/Rio (iPhone)</li>
<li>Dungeon Raid (iPhone)</li>
<li>Tactical Soldiers (iPhone)</li>
<li>Perfect Cell (iPhone)</li>
<li>Hunters (iPhone)</li>
</ul>
<p>Watching:</p>
<ul>
<li>The Tudors.</li>
<li>The Office (American)</li>
<li>Lie to Me.</li>
<li>Criminal Minds (both)</li>
<li>Glee.</li>
<li>The Wire.</li>
</ul>
<p>Watching upcoming:</p>
<ul>
<li>Dexter Season 5.</li>
<li>The Killing.</li>
<li>Sherlock.</li>
<li>Battlestar Galactica (finally!)</li>
<li>Generation Kill.</li>
<li>Boardwalk Empire.</li>
<li>Rome.</li>
<li>An Idiot Abroad.</li>
</ul>
<p>Reading:</p>
<ul>
<li>Re-reading The Wheel of Time.</li>
<li>Final Jeopardy.</li>
<li>Baby Brain Rules.</li>
<li>Mona Lisa Overdrive.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3192</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Review: The Little Schemer</title>
		<link>http://justinliew.com/blog/?p=3188</link>
		<comments>http://justinliew.com/blog/?p=3188#comments</comments>
		<pubDate>Sun, 10 Apr 2011 17:32:14 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3188</guid>
		<description><![CDATA[The Little Schemer is a cool little book.  It isn&#8217;t a traditional programming book for learning a language, but rather uses Scheme to teach programming constructs.  In this case, the main topic is recursion.  Information is posed in the form of questions and answers, which makes reading it quick and interesting.  Typically it presents a [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3188"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignnone" title="Schemer" src="http://ecx.images-amazon.com/images/I/51Pm9ijyRzL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="" width="300" height="300" /></p>
<p>The Little Schemer is a cool little book.  It isn&#8217;t a traditional programming book for learning a language, but rather uses Scheme to teach programming constructs.  In this case, the main topic is recursion.  Information is posed in the form of questions and answers, which makes reading it quick and interesting.  Typically it presents a function, parameters, and asks what it should return.  Then, once the answer is presented, the reader can then surmise as to the meaning or implementation.  It presents problems like this, then slowly gives use cases and helps fill in parts of the function.  It is a unique, straight forward way to involve the reader without the typical information-then-exercises format of programming books.  The topics are fairly simple, but I still felt like I learned a bit, and also re-familiarized myself with Scheme.  The method in which the book presented the information was as useful as the topics themselves.</p>
<p>Recommended.</p>
<p>8.5/10</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3188</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Review: Superfreakonomics</title>
		<link>http://justinliew.com/blog/?p=3125</link>
		<comments>http://justinliew.com/blog/?p=3125#comments</comments>
		<pubDate>Mon, 14 Mar 2011 17:08:48 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[society]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3125</guid>
		<description><![CDATA[Superfreakonomics follows on the highly successful book Freakonomics.  In this, the authors get into prostitution, the difficulty in rating doctors and teachers, car seats, washing hands and saving lives, and of course the much-maligned climate change section.  If you enjoyed Freakonomics, you&#8217;ll enjoy this book as it follows in much the same attitude and vein. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3125"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignnone" title="Superfreak" src="http://ecx.images-amazon.com/images/I/51R8rT4OrdL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="" width="300" height="300" /></p>
<div>Superfreakonomics follows on the highly successful book Freakonomics.  In this, the authors get into prostitution, the difficulty in rating doctors and teachers, car seats, washing hands and saving lives, and of course the much-maligned climate change section.  If you enjoyed Freakonomics, you&#8217;ll enjoy this book as it follows in much the same attitude and vein.  The stories are entertaining and for the most part informative, but unfortunately their credibility is marred by the vast <a href="http://scienceblogs.com/islandofdoubt/2009/10/superfreakonomics_how_did_they.php" target="_blank">criticism </a>from the Scientific community about their climate change chapter.  Ultimately, this destroyed the book for me as although everything else might be perfectly correct, I cannot take the book seriously knowing that they got things so wrong on the biggest issue in the book.</div>
<div></div>
<div>5/10</div>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3125</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batteries Revisited</title>
		<link>http://justinliew.com/blog/?p=3174</link>
		<comments>http://justinliew.com/blog/?p=3174#comments</comments>
		<pubDate>Mon, 28 Feb 2011 18:40:47 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[batteries]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3174</guid>
		<description><![CDATA[Did some research and updating of my battery needs.  With multiple flashes, triggers, and other various devices around the house, here&#8217;s what I&#8217;m using and why: 1. Alkalines.  Sure, we&#8217;re not supposed to use them because they&#8217;re bad for the environment and they&#8217;re not cost effective in the long run.  But they&#8217;re low dissipation and for [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3174"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Did some research and updating of my battery needs.  With multiple flashes, triggers, and other various devices around the house, here&#8217;s what I&#8217;m using and why:</p>
<p>1. Alkalines.  Sure, we&#8217;re not supposed to use them because they&#8217;re bad for the environment and they&#8217;re not cost effective in the long run.  But they&#8217;re low dissipation and for things that use next to no power, they&#8217;re adequate.  I use them for my triggers because with recyclables the AAAs don&#8217;t drain from usage, but mostly from dissipation.  I could use low dissipation EneLoops instead but for the amount of times I&#8217;ve charged my AAAs I feel it&#8217;s not worth the higher quality batteries.</p>
<p>2. <a href="http://www.eneloop.ca/" target="_blank">EneLoop</a>.  I&#8217;m getting into these now for my flashes, as I don&#8217;t use them as much these days.  EneLoops hold their charge much better than traditional NiMH batteries, so I won&#8217;t always end up with drained batteries if I go out for a quick shoot.</p>
<p>3. NiMh.  I still have around 5 sets of 4-AA NiMH batteries lying around.  I&#8217;ve labelled each set and plan to have 3 sets for my flashes as backups for the EneLoops, plus a couple of sets for various devices around the house such as the 360 controller which we use a lot.</p>
<p>Oh, and I use a Lacrosse <a href="http://www.lacrossetechnology.com/900/index.php" target="_blank">BC-900</a> charger which lets you trickle charge or fast charge batteries and also have discharge/refresh cycles for old batteries.  Works like a charm.</p>
<p>What&#8217;s your battery setup?</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3174</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Etymotics</title>
		<link>http://justinliew.com/blog/?p=3170</link>
		<comments>http://justinliew.com/blog/?p=3170#comments</comments>
		<pubDate>Wed, 16 Feb 2011 22:51:46 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[headphone earbud music]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3170</guid>
		<description><![CDATA[I picked up a pair of Etymotic hf5 earphones a few weeks back.  The decision came down to a few things: - my work headphones (Grado SR-125) are pretty decent, so I wanted earbuds that provided a similar level of quality.  The main thing I found was that the default Apple earbuds were such a [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3170"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I picked up a pair of Etymotic hf5 earphones a few weeks back.  The decision came down to a few things:</p>
<p>- my work headphones (Grado SR-125) are pretty decent, so I wanted earbuds that provided a similar level of quality.  The main thing I found was that the default Apple earbuds were such a step down from them that when I was commuting it was distracting to listen to.</p>
<p>- I decided I would make an effort to take care of them, rather than abusing them like I&#8217;ve done in the past.  Seems wasteful to me to go through a couple of pairs a year.  I chose Etymotics partly for the robustness of cable and earbud mentioned in reviews.</p>
<p>- I wanted something with great noise isolation, as I travel via busy transit and wait on a busy road.</p>
<p>The hf5&#8242;s (as most Etymotics) come with 4 different types of buds: small 3 flange, large 3 flange, gliders (similar to your typical in-ear bud) and foam.  I initially tried the flange ones as they&#8217;re supposed to provide the best noise isolation, but I found them uncomfortable.  Plus, they were almost TOO noise isolating and were quite disorienting to use.  Eventually I settled on the foam, as they are the least intrusive and once I figured out how to insert them correctly they work like a charm.  They provide the perfect amount of isolation &#8211; I can&#8217;t hear anyone talking but I do have a slight awareness of what&#8217;s going on around me.  The flange ones seem almost dangerous how isolating they are.</p>
<p>The sound quality once I got everything working correctly is great.  They even put the Grados to shame.  Much like Grado, they&#8217;re more of a &#8220;realistic&#8221; sound, in that they don&#8217;t boost the bass or do anything to artificially create a &#8220;better&#8221; sound (*ahem* Bose).  So things may not sound overly bright, or overly bass-y, but they reproduce the sound faithfully.  Makes audience live recordings sound shit, and they&#8217;re almost unusable on my PC at work since they tend to sound buzzy due to the electronics.  But the main win I&#8217;ve found is I can listen to my iPhone at 1/4 to 1/3rd volume, whereas previously I was usually up at 1/2 and above.  The quality plus the isolation allows this, and so I feel that they&#8217;re (counterintuitively at first) safer for my long term ear health.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3170</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Review: Life Guide to Digital Photography (McNally, Joe)</title>
		<link>http://justinliew.com/blog/?p=3166</link>
		<comments>http://justinliew.com/blog/?p=3166#comments</comments>
		<pubDate>Wed, 16 Feb 2011 22:38:50 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3166</guid>
		<description><![CDATA[Joe McNally is one of my favorite photographers.  He has written a number of books, posts interesting stories regularly on his blog, and can back up his great storytelling and teaching with 30 years of landmark photography.  He is arguably the leading ambassador of small flash lighting, and his previous books focused more on this [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3166"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignnone" title="Life" src="http://ecx.images-amazon.com/images/I/51KO0JGH5uL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="" width="300" height="300" /></p>
<p>Joe McNally is one of my favorite photographers.  He has written a number of <a href="http://www.amazon.com/gp/search/ref=sr_tc_2_0?rh=i:stripbooks,k:Joe+McNally&amp;keywords=Joe+McNally&amp;ie=UTF8&amp;qid=1297884087&amp;sr=8-2-ent&amp;field-contributor_id=B001I9N9XM" target="_blank">books</a>, posts interesting stories regularly on his <a href="http://www.joemcnally.com/blog/" target="_blank">blog</a>, and can back up his great storytelling and teaching with 30 years of landmark photography.  He is arguably the leading ambassador of small flash lighting, and his previous books focused more on this topic.  The LIFE Guide to Digital Photography takes a broader sweep and provides a beginner-to-intermediate big picture of photography.  Normally I&#8217;d pass on a book like this, but his writing combined with his photography, stories, humour, and insight on all things photography make this a worthwhile read for anyone.</p>
<p>He goes fairly deep into lighting &#8211; how quality, quantity and colour of light affect a photo.  He provides basic info, but also has sections that give exercises or alternative viewpoints into the basic subject, which I found to be the most interesting.  For example, he might provide a story of a time he arrived early to get the golden light, and relate that to a suggestion on how the reader might want to try it.</p>
<p>He spends a lot of time on lenses &#8211; how telephoto vs. wide angle affect technical aspects like DOF, as well as subjective decisions regarding composition.  His section on wide angle lenses in particular was super informative to me, having recently picked one up and struggle occasionally with clutter.</p>
<p>Design elements, colour and composition make up the latter part of the book.  These cover basics like texture, pattern, form, and the like, as well as colour temperature, rule of thirds, and types of shots (portraits, detail shots, etc)  These chapters read as more conversational which is where the book really shines.  The experiences he&#8217;s had shooting for National Geographic, People, Life, and more provide a rich background against which he presents examples and teachings.</p>
<p>Overall this is the best &#8220;survey&#8221; book on photography I&#8217;ve seen.  The stellar photography, stories and conversational writing make it more than just a pretty manual.</p>
<p>9/10</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3166</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Friends</title>
		<link>http://justinliew.com/blog/?p=3162</link>
		<comments>http://justinliew.com/blog/?p=3162#comments</comments>
		<pubDate>Thu, 10 Feb 2011 21:20:52 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3162</guid>
		<description><![CDATA[Busy January.  Jess back at work, Zayden to my parents every day, plus trying to see friends and the like. Jon was in town for a couple of weeks with his new girlfriend Carla.  We met up with them twice, once to hang out and then we had them over for dinner and games.  Was [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3162"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Busy January.  Jess back at work, Zayden to my parents every day, plus trying to see friends and the like.</p>
<p>Jon was in town for a couple of weeks with his new girlfriend Carla.  We met up with them twice, once to hang out and then we had them over for dinner and games.  Was really great to get to know Carla &#8211; she seems like a really great girl, and so perfect for Jon.  She&#8217;s a cook at the River Cafe, likes the outdoors, and has a compatible sense of humour.  We played <a href="http://boardgamegeek.com/boardgame/15987/arkham-horror" target="_blank">Arkham Horror</a>, a coop game that was probably a bit too geeky for the crowd.</p>
<p>Had a games night with Arieanna, Ianiv, Raheel &amp; Haroon at the Schwebers.  Ordered pizza and played a couple of new games: <a href="http://boardgamegeek.com/boardgame/39856/dixit" target="_blank">Dixit</a> and <a href="http://boardgamegeek.com/boardgame/68448/7-wonders" target="_blank">7 Wonders</a>.  Dixit is a Balderdash-Apples to Apples hybrid, involving coming up with phrases for abstract pictures and having people choose their interpretation from their hand, and then people vote on which one was the real one.  Really fun, but we all wished there were more cards.  7 Wonders is a San Juan-Dominion hybrid that runs fast.  Everyone plays simultaneously, so the time to play doesn&#8217;t scale with the number of players.  Hard to describe, but it&#8217;s great fun.</p>
<p>Also had a games night with Arieanna, Ianiv, Nicola and Dave.  Did it as a potluck, so we had some great jicama/apple salad, lasagna, and cookies and brownies.  We played a couple of more social games, Fluxx and Apples to Apples.  Had been a while since we&#8217;d hung out with the Beleznays, so it was fun to see them again, and have the 3 musketeers reunited.</p>
<p>Last Sunday we saw Steve &amp; Christina at Tomahawk for breakfast.  We never see them enough, so we really want to hang out more, especially since we&#8217;re only 10 minutes apart!</p>
<p>Went to Gareth &amp; Karina&#8217;s Super Bowl party last weekend as well.  Was a good time as usual.  We get to see people we don&#8217;t normally hang out with, and we always realize we never have enough time to see all our friends.   Especially lately, it&#8217;s been all about convenience &#8211; which babies nap when Zayden does, and who takes care of Zayden.  When we get time to ourselves, it&#8217;s usually to go out together, for dinner or a movie or something.  Most of our current group of friends either has kid(s) or wants to see Z when we get together.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3162</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Competitive Code</title>
		<link>http://justinliew.com/blog/?p=3146</link>
		<comments>http://justinliew.com/blog/?p=3146#comments</comments>
		<pubDate>Wed, 09 Feb 2011 19:43:23 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3146</guid>
		<description><![CDATA[I&#8217;ve always had in the back of my mind developing some sort of framework for enabling programmers to pit code against each other, similar to Waterloo&#8217;s AI Contest.  The aforementioned framework had some limitations that hindered development for me, namely that it took an executable but required language support on the server side, plus it [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3146"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve always had in the back of my mind developing some sort of framework for enabling programmers to pit code against each other, similar to <a href="http://ai-contest.com/" target="_blank">Waterloo&#8217;s AI Contest</a>.  The aforementioned framework had some limitations that hindered development for me, namely that it took an executable but required language support on the server side, plus it ran each executable once per frame of game, so everything was immutable.  Interesting, but not flexible enough for me.  I&#8217;d like to solidify my architecture before starting, so any suggestions on what worked would be nice!  Here&#8217;s what I&#8217;m thinking:</p>
<p>1. flexible enough to support multiple titles.  I&#8217;d love to see people pit something as simple as tanks in a 2d level, or something more complicated like Dominion AI or Super Mario.</p>
<p>2. always running.  This would likely mean some sort of executable/dll upload, so the server could continuously pit code against each other and generate ranks.  Then as people updated theirs, it would bubble them up (or down!) the rankings.</p>
<p>3. multiple language support.</p>
<p>4. multiple platform support?  I&#8217;d love to have an option for limiting memory, or execution time, or something.  That&#8217;s what we&#8217;re faced with in the games industry, so it should be an option.  Even running the server on PS3 and making each AI an SPU ELF might be interesting.</p>
<p>Any thoughts on how people would want this to work?  Or have people submitted or used something similar that worked/didn&#8217;t work?  Comments are encouraged!</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3146</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Debugging Tools</title>
		<link>http://justinliew.com/blog/?p=3157</link>
		<comments>http://justinliew.com/blog/?p=3157#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:00:13 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[To Categorize]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3157</guid>
		<description><![CDATA[At a base level, the debugger and print statement are essential tools for debugging features and fixing bugs. &#160;They have been around since the beginning and are well understood by programmers from every discipline. &#160;In games, however, there are many useful tools and utilities at a higher level that make common cases easier to work [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3157"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<div class='posterous_autopost'>
<p>At a base level, the debugger and print statement are essential tools for debugging features and fixing bugs. &nbsp;They have been around since the beginning and are well understood by programmers from every discipline. &nbsp;In games, however, there are many useful tools and utilities at a higher level that make common cases easier to work with. &nbsp;In no particular order, here are some I&#8217;ve found useful throughout the years:</p>
<p><span style="font-size: large;"><strong>Macro</strong></span></p>
<p>I&#8217;m grouping together a series of tools that provide have multi-purpose use, and do not provide in and of themselves any specific functionality.</p>
<p><span style="font-size: medium;">Live Tuning</span></p>
<p>Live tuning is the ability to connect a tool to the game while it is running and utilize bi-directional data to aid in development or debugging.</p>
<p>Examples of data flowing from the tool to the game could be, but are not limited to:</p>
<ul>
<li>editing world object properties in the level editor and seeing changes in game immediately.</li>
<li>sending commands to the game to carry out tasks such as loading a level or jumping to a location in the world.</li>
<li>telling the game to display certain classes of objects and their properties in game.</li>
</ul>
<p>Examples of data flowing from the game to the tool could be, but are not limited to:</p>
<ul>
<li>displaying a list of all NPCs alive in the world in an external viewer.</li>
<li>&nbsp;the state of global objects such as quest states or time of day.</li>
<li>for visual scripting systems, displaying which nodes are currently active and what links have been followed.</li>
<li>debugging script.</li>
</ul>
<p>Having a common system for connecting which makes it easy for a new tool to add live tuning functionality to tools and the game is key. &nbsp;Having this up and running early in a game&#8217;s life cycle enables many more complex tasks to be carried out fairly easily.</p>
<p><span style="font-size: medium;">Telemetry</span></p>
<p>Telemetry is the ability for a game to log info discretely as it runs. &nbsp;The first requirement is that telemetry data shouldn&#8217;t increase the memory footprint or reduce performance in any substantial way. &nbsp;Another ideal requirement is that it log info to a central database without user intervention, so data can be gathered in the background as the game is developed, and analyzed using the large suite of database tools available. &nbsp;There are two main classes of telemetry data: development data and playtest data:</p>
<p>Development data is useful for fixing functional aspects of the game, and might include things such as: where the game has crashed the most, which asserts have fired the most, which level loads are the longest, where the player got stuck in level geometry, and the like. &nbsp;They are data that can be captured irrespective of the kinds of things developers are doing. &nbsp;Playtest data is useful for experience balancing and tuning, and can include how long quests took, where players stood still the longest, and which dialogue options were chosen. &nbsp;The main point to note is that you don&#8217;t want to capture playtest data during normal development, as when testing a bug most developers tend to repeat the same steps over and over again, which skews playtest data.</p>
<p><span style="font-size: medium;">Logging, including synched logs</span></p>
<p>Logging is a subset of telemetry. &nbsp;Usually logs are written out to file, and at a minimum should have the ability to write to different channels at different verbosity levels, so gameplay engineers, for example, don&#8217;t have to see rendering logs. &nbsp;As well, having a way to merge logs from different consoles when doing multiplayer testing is useful, as a lot of your debugging will likely involve matching up when data was sent from one machine and when it reached another. &nbsp;This merge should take into account some sort of synched time, which is not perfect, but is usually good enough. &nbsp;Another alternative would be to have a tool that can connect to all running consoles and capture data as they run, which gives you the merge for free. &nbsp;&nbsp;</p>
<p><span style="font-size: medium;">Ini Files,&nbsp;In Game Debug Menu, and&nbsp;Command Console</span></p>
<p>The ability to change properties of the game is important for debugging. &nbsp;You might want to set the aggressiveness of your monsters, or disable lighting effects to increase framerate, or turn on an unfinished feature for testing. &nbsp;.Ini files let you do this at startup, while an in-game debug menu and a command console provide different ways to change properties or run functions at runtime. &nbsp;Ideally any combination of these systems you implement should use the same underlying system, so you can get access to the same functionality in a consistent manner. &nbsp;Ideally the debug menu and command console are configurable externally, so engineers don&#8217;t always have to edit code to add items. &nbsp;</p>
<p><span style="font-size: medium;">Replay</span></p>
<p>The ability to rewind and fast forward your game is vital to fixing sequencing bugs &#8211; animation state changes, for example. &nbsp;Anything with states can really benefit from replay, alongside having debug output of the state for each character involved. &nbsp;That way, when playing through a game, you can rewind and replay a boss battle in slow motion to see what conditions caused changes in state. &nbsp;This is also good when getting a bug from QA, as you can see the last few moves that were performed before a crash or anomaly. &nbsp;The main consideration for replay is balancing the size of the replay buffer and quality of replay (what is saved). &nbsp;The actual technical details of replay are an article unto themselves, so I will not go into it further.</p>
<p><span style="font-size: medium;">Crash Dumps and Auto-Reporting</span></p>
<p>This is a no brainer. &nbsp;When the game crashes on a QA or content creator&#8217;s machine, having the callstack of the crash is of vital importance. &nbsp;Ideally, this hooks into the telemetry system and/or the bug tracking system and automatically logs the crash, along with the crash dump, callstack, and info about what level the player was in and other game-specific data. &nbsp;Ideally, your telemetry system or auto-reporting handler can filter on duplicate callstacks and group them together. &nbsp;Perhaps in your bug database the &#8220;repro rate&#8221; or &#8220;occurrence count&#8221; can be updated so if a crash is happening frequently these numbers will go up and the priority can potentially be automatically raised.</p>
<p><span style="font-size: medium;">Soak Tests</span></p>
<p>When finaling a game, it is always those pesky soak test crashes that only happen after 8 hours of gameplay that threaten the patience of the SE team. &nbsp;Having a soak test system in place that makes it easy for everyone on the team to run them on their machines every night, as well as gather pertinent data about the run, is of vital importance. &nbsp;Having some of the above tools, specifically telemetry, logging, replay and crash dumps, will enable SEs to see what happened throughout the run and work backwards to figure out the problem. &nbsp;Logging info such as memory highwater marks, fragmentation and the like can be useful for out of memory conditions. &nbsp;The type of data you save during soak tests is endless! &nbsp;Soak tests can run pre-recorded replays, or they can randomly press buttons either in-game or in the UI. &nbsp;These button presses can be configured for frequency so that more common buttons (A/Cross) can be pressed more often, while directions can be held longer to simulate more common human control.</p>
<p><strong><span style="font-size: large;">Micro</span></strong></p>
<p><span style="font-size: small;">The functions below are more specific, and usually utilize a feature from the macro section above.</span></p>
<p><span style="font-size: medium;">Skip X</span></p>
<p>The ability to skip various portions of your game is key in saving time. &nbsp;Skipping the front end, for example, and directly loading into a level can make it faster to run tests or reproduce bugs. &nbsp;Skipping the bootup screens can let you test the UI quicker. &nbsp;Just make sure everyone tests features within the context of the entire game before deeming them fixed or finished. &nbsp;</p>
<p><span style="font-size: medium;">Auto connect for online</span></p>
<p>When developing a multiplayer title, a lot of time is spent navigating the matchmaking or invite flow, getting players into game, only to test a bug for 30 seconds. &nbsp;Added up over the project, this is a huge time hit. &nbsp;Using various macro tools, the ability to configure the game to launch as a host and start up a multiplayer game, and launch on another console as a client and connect to the host, can be a huge help. &nbsp;Just ensure that you&#8217;re doing final testing through the proper UI.</p>
<p><span style="font-size: medium;">Teleporting Players/NPCs</span></p>
<p><span style="font-size: x-small;">I&#8217;ve seen this useful in a couple of instances. &nbsp;When doing multiplayer testing, especially for coop games, it&#8217;s sometimes useful to be able to bring the other coop player to the current player&#8217;s location. &nbsp;When testing locally, it can help avoid having to move both players manually to locations in the world. &nbsp;Instead, just move one player, then use a debug key combo to teleport the other player(s) to where you are. &nbsp;The second instance is when you want to interact with an NPC, but their spawn location isn&#8217;t fixed in the world. &nbsp;It might be easier to teleport them nearer to the player, if applicable. &nbsp;Obviously for a boss who uses its environment in some meaningful way this isn&#8217;t cool, but for a generic battle or conversation it can speed up testing.</span></p>
<p><span style="font-size: x-small;">That&#8217;s all I have for now! &nbsp; I&#8217;m sure readers have other great ideas, so let&#8217;s hear them in the comments!</span></p>
<p>&nbsp;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3157</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Reviews Going Forward</title>
		<link>http://justinliew.com/blog/?p=3129</link>
		<comments>http://justinliew.com/blog/?p=3129#comments</comments>
		<pubDate>Thu, 27 Jan 2011 21:10:24 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[To Categorize]]></category>
		<category><![CDATA[book review]]></category>

		<guid isPermaLink="false">http://justinliew.com/blog/?p=3129</guid>
		<description><![CDATA[I&#8217;m going to try doing more detailed book reviews going forward. I&#8217;m not reading as much these days, so my goal is to try to encapsulate more information in my reviews so I remember more about what I read. I&#8217;d like to have a &#8220;review&#8221; as well as a &#8220;what I learned&#8221; and a &#8220;further [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fjustinliew.com%2Fblog%2F%3Fp%3D3129"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m going to try doing more detailed book reviews going forward.  I&#8217;m not reading as much these days, so my goal is to try to encapsulate more information in my reviews so I remember more about what I read.  I&#8217;d like to have a &#8220;review&#8221; as well as a &#8220;what I learned&#8221; and a &#8220;further reading&#8221; section, as I often struggle between giving away the plot or salient points in my review vs. being more informative.  I&#8217;d also like to have a little blurb that I can put with the facebook/twitter link to provide a teaser, as I&#8217;ve seen this done recently on Twitter to good effect.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinliew.com/blog/?feed=rss2&amp;p=3129</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

