<?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>Zach Archer Blog</title>
	<atom:link href="http://blog.zacharcher.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zacharcher.com</link>
	<description>This blog is GO!</description>
	<lastBuildDate>Fri, 09 Jul 2010 23:02:45 +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>Brakebills, Twang, Stuff!</title>
		<link>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/</link>
		<comments>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 15:37:14 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Swag]]></category>
		<category><![CDATA[Synth]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[brakebills]]></category>
		<category><![CDATA[guitar]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[lev grossman]]></category>
		<category><![CDATA[modelling]]></category>
		<category><![CDATA[physical]]></category>
		<category><![CDATA[the magicians]]></category>
		<category><![CDATA[twang]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=229</guid>
		<description><![CDATA[Oh em gee. So much to report. First, do you know Lev Grossman? He's an incredibly talented author who recently toured Portland. If you haven't read his book The Magicians, then stop whatever you're doing and procure a copy immediately. Without trying to spoil anything, the major college in the book is named the Brakebills [...]]]></description>
			<content:encoded><![CDATA[<p>Oh em gee. So much to report.</p>
<p>First, do you know Lev Grossman? He's an incredibly talented author who recently toured Portland. If you haven't read his book <a href="http://www.amazon.com/Magicians-Novel-Lev-Grossman/dp/0452296293/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1277564831&amp;sr=8-1">The Magicians</a>, then stop whatever you're doing and procure a copy <em>immediately</em>. Without trying to spoil anything, the major college in the book is named the <strong>Brakebills College for Magical Pedagogy</strong>. Lev saw the Brakebills T-shirt that I designed for my sweetheart's birthday present:</p>
<p><a href="http://www.zazzle.com/brakebills_key_bee_tshirt-235460102699664916"><img class="aligncenter" title="Brakebills Shirt" src="http://zacharcher.com/lab/brakebills/brakebills_shirt.jpg" alt="" width="461" height="526" /></a></p>
<p>Long story short, <a href="http://levgrossman.com/2010/06/holy-crow-brakebills-shirts-are-here/">my Brakebills shirts are now officially endorsed by the author!</a> Please buy twenty of them, or thirty if the spirit moves you. Zazzle's print quality is great. The colors are vivid, and the ink has survived many washings. Rabid fans are buying and even <a href="http://twitter.com/PriceDoc_brett/status/17041429615">customizing them</a>! I love the internet.</p>
<p>Lev blogged some of my other work, too ("the guy who does this has the enviably fake-sounding name of Zach Archer"). It's true, I have an awesome pro wrestler name.</p>
<p>Second, my new iPhone app has landed in the App Store:</p>
<p style="text-align: center;"><a href="http://itunes.apple.com/us/app/twang/id353688232?mt=8"><img class="aligncenter" title="Twang" src="http://zacharcher.com/lab/twang/twang_screen2.png" alt="" width="480" height="320" /></a></p>
<p><a href="http://itunes.apple.com/us/app/twang/id353688232?mt=8">Twang</a> is a handheld guitar. It's easier to play than a real guitar, and is very expressive. Instead of using audio samples, Twang uses <a href="http://en.wikipedia.org/wiki/Physical_modelling_synthesis">physical modelling</a> techniques to create a more natural, dynamic sound. No two plucks are identical. <a href="http://www.youtube.com/watch?v=jnCMg6MAu8E">Watch my grainy first video</a> if you disbelieve.</p>
<p>In the next version of Twang, left-handed people will be able to switch Twang's orientation, and serious musicians can dampen or mute strings with their fingers. And probably more! This version is already in development, and may be submitted in a week or two? <a href="http://twitter.com/controlzinc">Follow Control Z, Inc on Twitter</a> if you have a ravenous thirst for updates!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;title=Brakebills, Twang, Stuff!' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;title=Brakebills, Twang, Stuff!' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;title=Brakebills, Twang, Stuff!' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Brakebills, Twang, Stuff!+http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Brakebills, Twang, Stuff!&amp;uri=http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2010/06/26/brakebills-twang-stuff/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Aquatic Sound Generator in Flash</title>
		<link>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/</link>
		<comments>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:07:48 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Synth]]></category>
		<category><![CDATA[aquasound]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[formant]]></category>
		<category><![CDATA[fs1r]]></category>
		<category><![CDATA[generative]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=219</guid>
		<description><![CDATA[Here's something from the vaults. Aquasound was built with these requirements in mind: Generate sounds that aquatic animals might make Sounds can be "combined" somehow Sounds can emote This was never used in production. I wonder if I could turn this into something? Like a paid iPhone app? ;) Double-click the envelopes to add/remove control [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://zacharcher.com/lab/aquasound/aquasound.swf"><img class="aligncenter" title="Aquasound" src="http://zacharcher.com/lab/aquasound/aquasound_pic.png" alt="" width="432" height="405" /></a></p>
<p>Here's something from the vaults. Aquasound was built with these requirements in mind:</p>
<ul>
<li>Generate sounds that aquatic animals might make</li>
<li>Sounds can be "combined" somehow</li>
<li>Sounds can emote</li>
</ul>
<p>This was never used in production. I wonder if I could turn this into something? Like a paid iPhone app? ;)</p>
<p>Double-click the envelopes to add/remove control points. Drag lines up &amp; down to change their curviture. The best feature is the "Combine With" dropdown, which splices the current sound with your selection. Also the "Emote" menu will play sounds with different expression.</p>
<p>The audio algorithm is reverse-engineered from <a href="http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/">my beloved FS1R</a>. I generated formants in two ways (toggle the "Tonal" checkbox to hear both), the "atonal" version is closer to ring modulation than actual formants. It's more fun if you don't understand what the controls are doing, but if you insist: Pitch controls the overall pitch of the sound. Freq controls the center frequency of the formant (like a bandpass filter). LFOFreq and LFOWeight control a low-frequency sine wave, which can be applied to other controls via their "___LFOAmt" curves. Amp is amplitude, Width is formant width (think: width of the bandpass filter), Skirt adds distortion. Each voice has two formant generators, check "Formant Active" to enable them.</p>
<p>May all your bloops and crackles be happy ones!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;title=Aquatic Sound Generator in Flash' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;title=Aquatic Sound Generator in Flash' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;title=Aquatic Sound Generator in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Aquatic Sound Generator in Flash+http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Aquatic Sound Generator in Flash&amp;uri=http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2010/06/16/aquatic-sound-generator/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reconstructing Images With Text</title>
		<link>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/</link>
		<comments>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 09:58:38 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[letters]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[reconstruction]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=203</guid>
		<description><![CDATA[I was inspired by Roger Alsing's supposed "genetic" image compression. It begs for further experimentation! Here's my second batch of image reconstruction using Times New Roman characters. The algorithm is a brute-force affair: New characters are colored &#38; positioned randomly. Any characters that make the canvas look more like the original image are saved. And [...]]]></description>
			<content:encoded><![CDATA[<p>I was inspired by <a href="http://rogeralsing.com/2008/12/11/genetic-gallery/">Roger Alsing's supposed "genetic" image compression</a>. It begs for further experimentation!</p>
<p>Here's my second batch of image reconstruction using Times New Roman characters. The algorithm is a brute-force affair: New characters are colored &amp; positioned randomly. Any characters that make the canvas look more like the original image are saved. And that's about it. Oh, and the font sizes start large (5120pt) and end small (10pt), so that fine details have a chance of survival.</p>
<p><a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_1.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_1.jpg" alt="monarch_1" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_2.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_2.jpg" alt="monarch_2" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_3.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_3.jpg" alt="monarch_3" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_4.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_4.jpg" alt="monarch_4" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_5.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_5.jpg" alt="monarch_5" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_6.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_6.jpg" alt="monarch_6" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMonarch_7.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMonarch_7.jpg" alt="monarch_7" /></a> <img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/monarch.jpg" alt="monarch_original" /></p>
<p><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/mona.jpg" alt="mona_original" /> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMona_204.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMona.jpg" alt="mona_reconstruction" /></a><br />
<a href="http://www.youtube.com/watch?v=RIB8QOytKcY&amp;fmt=14">Time lapse of the Mona Lisa reconstruction on YouTube, with silly music.</a></p>
<p><a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_0.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_0.jpg" alt="moth_0" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_1.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_1.jpg" alt="moth_1" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_2.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_2.jpg" alt="moth_2" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_3.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_3.jpg" alt="moth_3" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_4.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_4.jpg" alt="moth_4" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_5.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_5.jpg" alt="moth_5" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_6.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_6.jpg" alt="moth_6" /></a> <a href="http://zacharcher.com/lab/20100218_image_reconstruction/outMoth_7.png"><img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/outMoth_7.jpg" alt="moth_7" /></a> <img src="http://zacharcher.com/lab/20100218_image_reconstruction/thumbs/moth.jpg" alt="moth_original" /></p>
<p>My first batch uses a different algorithm. Each canvas allocates a certain quantity of letters, and progressively mutates them, trying to mimic the original image as closely as possible. This technique is more akin to image compression. This batch is still in progress, it's very slow. I'll post these when they're ready!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;title=Reconstructing Images With Text' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;title=Reconstructing Images With Text' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;title=Reconstructing Images With Text' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Reconstructing Images With Text+http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Reconstructing Images With Text&amp;uri=http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2010/02/18/reconstructing-images-with-text/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Here Comes the Metal Mouth</title>
		<link>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/</link>
		<comments>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 00:40:53 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Synth]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=195</guid>
		<description><![CDATA[My first iPhone app has been submitted to the app store for review! Metal Mouth is a text-to-speech synthesizer that mimics the talking devices of the 80's (Speak &#038; Spell, "Wizard needs food, badly", etc.) The functionality is similar to my Synthetic Speech In Flash demo, but with many new features (male &#038; female voices, [...]]]></description>
			<content:encoded><![CDATA[<p>My first iPhone app has been submitted to the app store for review! <strong>Metal Mouth</strong> is a text-to-speech synthesizer that mimics the talking devices of the 80's (Speak &#038; Spell, "Wizard needs food, badly", etc.) The functionality is similar to my <a href="http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/">Synthetic Speech In Flash demo</a>, but with many new features (male &#038; female voices, auto-tune, pitch &#038; time scratching) and a snappy interface with talking robots.</p>
<p><img src="http://zacharcher.com/lab/20100103_metal_mouth_preview/0_hello_doctor.png" alt="Hello, Doctor." /></p>
<p><img src="http://zacharcher.com/lab/20100103_metal_mouth_preview/1_inside_your_phone.png" alt="I'm inside your phone." /></p>
<p>This took about 5 weeks to develop. Meanwhile, I've started another app, and I envision releasing Metal Mouth 2.0 in a few months, with more voices, and the ability to record audio.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;title=Here Comes the Metal Mouth' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;title=Here Comes the Metal Mouth' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;title=Here Comes the Metal Mouth' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Here Comes the Metal Mouth+http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Here Comes the Metal Mouth&amp;uri=http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2010/01/03/here-comes-the-metal-mouth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strange Attractors in Flash</title>
		<link>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/</link>
		<comments>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 00:10:16 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[strange attractor]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=184</guid>
		<description><![CDATA[Have you seen (or played) the demo for Polynomial, the space shooter? Quick! Watch the video: I spent a couple hours generating strange attractors in Flash, just a simple 2D version for now. Click to play: Click the black region to generate new polynomial coefficients and redraw. You will have to click many times to [...]]]></description>
			<content:encoded><![CDATA[<p>Have you seen (or played) the demo for <a href="http://dmytry.pandromeda.com/games/index.html">Polynomial</a>, the space shooter? Quick! Watch the video:</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/2Q6RaOgmanc&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/2Q6RaOgmanc&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>I spent a couple hours generating strange attractors in Flash, just a simple 2D version for now. Click to play:<br />
<a href="http://zacharcher.com/lab/20091212_strange_attractor/StrangeAttractor.html"><br />
<img src="http://zacharcher.com/lab/20091212_strange_attractor/attractor_image.png" alt="Here Be Strange Attractors" /></a></p>
<p>Click the black region to generate new polynomial coefficients and redraw. <strong>You will have to click many times to generate something interesting</strong>. That's the nature of fractals, I'm afraid. Some coefficients are automatically thrown out if the drawing exceeds a certain size. Unfortunately, the inverse is not true: the code isn't smart enough to trash any drawings that shrink to microscopic size.</p>
<p>I believe that you can stabilize any coefficients by scaling the values of each coefficient, gradually nudging them larger/smaller until the drawing is stable. I'll try this when I get more time. I've been gung-ho on my first proper iPhone app, trying to finish it before Christmas! Stay tuned...</p>
<p>Also, <a href="http://zacharcher.com/lab/20091212_strange_attractor/strange_attractor.zip">here's the source code for the strange attractor harness</a>! Enjoy.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;title=Strange Attractors in Flash' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;title=Strange Attractors in Flash' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;title=Strange Attractors in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Strange Attractors in Flash+http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Strange Attractors in Flash&amp;uri=http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/12/12/strange-attractors-in-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hateful Bits T-Shirt</title>
		<link>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/</link>
		<comments>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 08:14:38 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Swag]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[hateful bits]]></category>
		<category><![CDATA[t-shirt]]></category>
		<category><![CDATA[zazzle]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=180</guid>
		<description><![CDATA[I designed a T-shirt! These are printed and sold through Zazzle. I can't wait to get mine: Hateful Bits (version 2) by zkarcher "I HATE YOU WITH ALL 4 OF MY BITS. GRRRRRRRRRRRR" &#160; More&#160;&#187;]]></description>
			<content:encoded><![CDATA[<p>I designed a T-shirt! These are printed and sold through Zazzle. I can't wait to get mine:</p>
<div style="text-align:center;line-height:150%"><a href="http://www.zazzle.com/hateful_bits_version_2_tshirt-235111331412809216?gl=zkarcher&amp;group=mens&amp;lifestyle=classic&amp;rf=238624978076471791"><img style="border:0;" src="http://rlv.zcache.com/hateful_bits_version_2_tshirt-d235111331412809216adc0r_325.jpg" alt="Hateful Bits (version 2) shirt" /></a><br />
<a href="http://www.zazzle.com/hateful_bits_version_2_tshirt-235111331412809216?gl=zkarcher&amp;group=mens&amp;lifestyle=classic&amp;rf=238624978076471791">Hateful Bits (version 2)</a> by <a href="http://www.zazzle.com/zkarcher*">zkarcher</a><br />
"I HATE YOU WITH ALL 4 OF MY BITS. GRRRRRRRRRRRR"</div>
<p>&nbsp;</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;title=Hateful Bits T-Shirt' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;title=Hateful Bits T-Shirt' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;title=Hateful Bits T-Shirt' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Hateful Bits T-Shirt+http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Hateful Bits T-Shirt&amp;uri=http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/09/09/hateful-bits-t-shirt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash 3D: A change of heart?</title>
		<link>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/</link>
		<comments>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 10:31:40 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[away3d]]></category>
		<category><![CDATA[game]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=173</guid>
		<description><![CDATA[Yesterday, I posted a damning critique of Flash's native 3D. Today I noticed that if you right-click on yesterday's SWF and show the redraw regions, you can see that it's redrawing the contents of the entire stage, even though I put the scene in a scrollRect. Is it seriously rendering a scene that's thousands of [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I posted <a href="http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/">a damning critique of Flash's native 3D</a>.</p>
<p>Today I noticed that if you right-click on <a href="http://zacharcher.com/lab/20090831_3d/09b_touch_to_glow.swf">yesterday's SWF</a> and show the redraw regions, you can see that it's redrawing the contents of the entire stage, even though I put the scene in a scrollRect. Is it seriously rendering a scene that's thousands of pixels wide before displaying it ?!?!?!? Oh, no. No they DIDN'T.</p>
<p>Today I ported the scene to the <a href="http://away3d.com/">Away3D</a> rendering engine. Here's the result:</p>
<p style="text-align: center;"><a href="http://zacharcher.com/lab/20090831_3d/10_away3d_follow.swf"><img class="aligncenter" title="Away3D screenshot" src="http://zacharcher.com/lab/20090831_3d/p/10_screenshot.png" alt="" width="453" height="339" /></a></p>
<p>It's beautiful, and provides access to low-level drawing routines, light sources, normal maps, ... It was speedy at first, then slowed down considerably when I added the glowing floors. (Each glow is 16+ triangles right now, for various reasons including: I can't render objects in my own custom order.) This makes <a href="http://zacharcher.com/lab/20090831_3d/09test.html">yesterday's version look performant</a>, I'm reluctant to admit.</p>
<p>Possible next steps:</p>
<ul>
<li>Reduce the native 3D rendering area, see if performance improves?</li>
<li>Grow beyond Flash, embrace the future and try <a href="http://unity3d.com/">Unity 3D</a>?</li>
<li>Dump this project, finish that iPhone game I started, make a million dollars in 2 weeks?</li>
</ul>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;title=Flash 3D: A change of heart?' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;title=Flash 3D: A change of heart?' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;title=Flash 3D: A change of heart?' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Flash 3D: A change of heart?+http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Flash 3D: A change of heart?&amp;uri=http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/09/04/flash-3d-a-change-of-heart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash 3D makes me sad</title>
		<link>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/</link>
		<comments>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 11:43:05 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[3d]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=164</guid>
		<description><![CDATA[I've been dabbling with Flash 10's native 3D support. Try my engine: Click to set the focus. Use the arrow keys to move. Touch blocks to illuminate. I'm disappointed with two things: 1). How much time is required to create a 3D engine, even a grid-based one like mine. I've been wrestling this project for [...]]]></description>
			<content:encoded><![CDATA[<p>I've been dabbling with Flash 10's native 3D support. Try my engine:</p>
<p><a href="http://zacharcher.com/lab/20090831_3d/09b_touch_to_glow.swf"><img class="aligncenter" title="Blue LEDs" src="http://zacharcher.com/lab/20090831_3d/p/09_screenshot.png" alt="" width="428" height="324" /></a></p>
<p>Click to set the focus. Use the arrow keys to move. Touch blocks to illuminate.</p>
<p>I'm disappointed with two things:</p>
<p>1). How much time is required to create a 3D engine, even a grid-based one like mine. I've been wrestling this project for 4+ hours every day, for a week. I feel like I must be lagging behind, but there are ten thousand things that will go wrong when developing in 3D. The paradigm is uniquely punishing, there are always edge cases where some polygons aren't drawn correctly. This project hasn't been a joy.</p>
<p>Also:</p>
<p>2). <strong>Flash's native 3D is not suited for a high-performance application like this one.</strong> It would be fine if I was only spinning a few DisplayObjects in space. However, the scene above displays up to 125 Bitmaps simultaneously. (Light all 25 bulbs (3 Bitmaps each), stand in the corner facing them, and the 25-segment walls.) 125 Bitmaps would be child's play in OpenGL. But after you light a few blocks, Flash Player chokes pretty hard.</p>
<p><a href="http://zacharcher.com/lab/20090831_3d/09c_glow_blendmode.swf">Here's another version that uses a BlendMode on the lightbulbs</a>. It looks great, but its performance is even less acceptable.</p>
<p><a href="http://zacharcher.com/lab/20090831_3d/02.swf">Here's an early version that uses my own 3D computations, and the Graphics API</a>. Also it has a limited field of view, which I widened for the latest builds. The performance is surprisingly high. I abandoned my custom 3D <a href="http://zacharcher.com/lab/20090831_3d/04.swf">when I reached this point</a>; drawing lines around each cube face was expensive, so I switched to Bitmaps, and the native 3D.</p>
<p>The cube faces are set to width &amp; height of 100. However, the bitmaps are higher resolution, a 200x200 region is shown. They're being downsampled at 100x100 before they're rendered, not by my choice.</p>
<p>At runtime, I get periodic warnings like these:</p>
<blockquote><p>Warning: 3D DisplayObject will not render.  Its dimensions (8238, 1628) are too large to be drawn.</p></blockquote>
<p>What?! How is this happening? I swear that any blocks behind the camera are being removed from the Stage. (Actually, this is difficult to verify. If I shrink the scene, Flash magically applies the 3D perspective with a weird projection, and distorts everything in Lovecraftian dimensions.) Please, Adobe, tell me that you're not rendering the scene at 8000 pixels wide, then scaling it down to my 700x400 window, frame after frame?</p>
<p>Also note that you, the developer, are responsible for drawing the DisplayObjects in the correct depth order (farthest to nearest), Flash doesn't handle it automatically. This is known as "<a href="http://en.wikipedia.org/wiki/2.5D">2.5D</a>", and it's wildly inconvenient.</p>
<p>So, I'm pretty disappointed with Flash 10's native 3D. Even with my limited 3D experience, I dislike how it renders the scene (<a href="http://summitprojectsflashblog.wordpress.com/2009/05/19/flash-10-cs4-native-3d-blurry/">I'm not alone in this</a>) and the performance is obviously sub-par. This technology will not bring 3D games to the web, it <em>cannot</em>.</p>
<p>I need to decide whether to endure its shortcomings for 4 more weeks, or if I should abandon this project altogether. There are moments when you realize you've outgrown something you used to love, and this may be one of mine.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;title=Flash 3D makes me sad' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;title=Flash 3D makes me sad' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;title=Flash 3D makes me sad' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Flash 3D makes me sad+http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Flash 3D makes me sad&amp;uri=http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/09/03/flash-3d-makes-me-sad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synthetic Speech in Flash</title>
		<link>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/</link>
		<comments>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 10:46:44 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Synth]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[linear predictive coding]]></category>
		<category><![CDATA[lpc]]></category>
		<category><![CDATA[speech]]></category>
		<category><![CDATA[synthesis]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=161</guid>
		<description><![CDATA[EDIT: I made an iPhone version, "Metal Mouth", with lots of features. Here it is on YouTube and the iTunes Store! Recently, I learned about Linear Predictive Coding ("LPC"). This technique is used in classic arcade games (such as Gauntlet) and the Speak &#38; Spell to synthesize speech. Here's my first attempt at LPC speech [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>EDIT:</strong> I made an iPhone version, "Metal Mouth", with lots of features. Here it is on <a href="http://www.youtube.com/watch?v=g2NwVMjrY2o">YouTube</a> and the <a href="http://itunes.apple.com/us/app/metal-mouth/id348741365?mt=8">iTunes Store</a>!</em></p>
<p>Recently, I learned about <a href="http://en.wikipedia.org/wiki/Linear_predictive_coding">Linear Predictive Coding ("LPC")</a>. This technique is used in classic arcade games (such as <em>Gauntlet</em>) and the <em>Speak &amp; Spell</em> to synthesize speech.</p>
<p>Here's my first attempt at LPC speech in Flash: (click &amp; explore)</p>
<p><a href="http://zacharcher.com/lab/20090827_lpc_speech/LPCsynth.swf"><img class="aligncenter" title="LPC harness" src="http://zacharcher.com/lab/20090827_lpc_speech/lpc_harness.png" alt="" width="236" height="254" /></a></p>
<p>It's great, except for one tiny problem: It sounds horrific. Can you feel the cold, robotic love? This voice will stalk your nightmares.</p>
<p>The phonemes were derived from an unrehearsed recording of my voice. I'm confident that it can be improved. Note that direct LPC encodings of my voice, <a href="http://zacharcher.com/lab/20090827_lpc_speech/zach_voice_test.mp3">such as this one</a>, sound more acceptable.</p>
<p><em><strong>EDIT:</strong> I made an iPhone version, "Metal Mouth", with lots of features. Here it is on <a href="http://www.youtube.com/watch?v=g2NwVMjrY2o">YouTube</a> and the <a href="http://itunes.apple.com/us/app/metal-mouth/id348741365?mt=8">iTunes Store</a>!</em></p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;title=Synthetic Speech in Flash' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;title=Synthetic Speech in Flash' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;title=Synthetic Speech in Flash' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Synthetic Speech in Flash+http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Synthetic Speech in Flash&amp;uri=http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/08/27/synthetic-speech-in-flash/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://zacharcher.com/lab/20090827_lpc_speech/zach_voice_test.mp3" length="264600" type="audio/mpeg" />
		</item>
		<item>
		<title>Toaster Bro alpha: 10 days later</title>
		<link>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/</link>
		<comments>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 08:23:54 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[nes]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[toaster bro]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=148</guid>
		<description><![CDATA[Did I mention my new game, "Toaster Bro"? Play Toaster Bro alpha version 1! (You will need Flash Player 10.) Ten days have elapsed since I shared this version with friends (who are unwittingly being used as play testers). It's time for a "wrap-up" meeting, because I want to examine what went wrong/right, and instead [...]]]></description>
			<content:encoded><![CDATA[<p>Did I mention my new game, "Toaster Bro"? <a href="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/ToasterBro_0.1alpha.swf">Play Toaster Bro alpha version 1!</a></p>
<p><a href="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/ToasterBro_0.1alpha.swf"><img src="http://zacharcher.com/lab/toaster_bro/20090309_alpha_1/p/instructions.png" alt="" /></a></p>
<p>(You will need Flash Player 10.)</p>
<p>Ten days have elapsed since I shared this version with friends (who are unwittingly being used as play testers). It's time for a "wrap-up" meeting, because I want to examine what went wrong/right, and instead of a meeting it's a blog post:</p>
<p><span id="more-148"></span>The <a href="http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/">tile engine has existed for half a year</a>. Toaster Bro began its life as "Roomhack", one of the pet projects <a href="http://blog.sixsided.org/">Miles</a> and I dreamed up -- could we create a game that was <a href="http://en.wikipedia.org/wiki/Turing_complete">Turing complete</a>? In the tradition of <a href="http://en.wikipedia.org/wiki/Robot_Odyssey">Robot Odyssey</a>, we wanted to create an experience that was both programmable and entertaining.</p>
<p>During the development of <a href="http://jayisgames.com/archives/2008/01/space_kitteh.php">Space Kitty</a>, we used its script engine to change the rules of the game at runtime. Once, we configured a cat to act as an "attack cat", which chased (and kicked) the player. We discovered new modes of gameplay -- how long can you say aloft? Can you slingshot yourself around a dense star? (Ultimately, we ran out of time before we could make the Kitty-verse bigger. We're currently discussing a Space Kitty sequel.)</p>
<p>The script engine whet our appetite -- what if the player could modify the rules of <em>the game itself</em>? What happens to the gameplay? Can it remain challenging and fun? We talked about this for days, weeks... Hashing out ideas for an "ultimate" hacker game. I think we're still talking about it.</p>
<p>I imagined such a game would resemble a dark, apocalyptic 3/4 view basement crawl, reminiscent of:</p>
<p><img src="http://i232.photobucket.com/albums/ee231/PapillonReel/Link%20to%20the%20Past%20Part%207/LegendofZelda-ALinktothePast149.png" alt="" /></p>
<p>So I built the tile engine. The plot &amp; aesthetic of the game were still unknown. Tavvv challenged me to invent a "missing" console from the NES-SNES era, devise hardware specs for it, and develop the game in accordance to the hardware specs. Constraints fuel creativity, right? I settled on SNES-era hardware, with a custom color engine, and improved sound. Television artifacts &amp; blur could be exaggerated to make the game creepier; bosses would have extra blur and distortions, so you couldn't get a clear image of them. <em>The lurking horror.</em> This concept was eventually dropped, once I realized that I'm not ready to develop a Turing-complete game... <em>yet</em>. I'll come back to this project in the future, I'm sure.</p>
<p>"The tile game" evolved into a shooter, much like Smash TV but with a heavy-handed political bent. That still didn't feel right, even with "a spider-tank with Richard Nixon's head" in tow. In the middle of this confusion, we realized that putting hackable terminals in a tile-based game detracted from the appeal of both. Is there a way to allow hacking, within the context of a tile engine? From this fray emerged the Toaster Bro mechanic. I rolled a quick proof-of-concept. It seemed like we were on to something.</p>
<p>Then the game sat in stasis for a few months, while I worked and tended to life. I wanted to finish one solid level, and I imagined a 4-week timeline:</p>
<ul>
<li><strong>Week 1: Engine Malarky.</strong> Moving between rooms, easier wire drawing, electricity &amp; fire shouldn't hurt you, remove crufty code.</li>
<li><strong>Week 2: Levels &amp; Art.</strong>. Finalize the plot &amp; characters, somewhat. Replace stand-in art with "real" art. On-screen text. Create a bunch of rooms.</li>
<li><strong>Week 3: Audio, splash screen, boss fight, begin testing.</strong></li>
<li><strong>Week 4: Music, ???</strong></li>
</ul>
<p>This seemed like a good plan. Work began, but here's how things really went down:</p>
<p><strong>Week 1:</strong> Plugged lots of holes in the engine, but a single week wasn't enough to tackle everything. There are major structural implications when you modify your game's core. Still no way to change blocks at runtime, yet. I need a scripting engine, but I want one with <a href="http://en.wikipedia.org/wiki/Infix_notation">infix notation</a> (Space Kitty used various <a href="http://en.wikipedia.org/wiki/Reverse_Polish_notation">postfix notation</a> languages, before Miles settled on an implementation of the <a href="http://en.wikipedia.org/wiki/PostScript">PostScript language</a> I think? It made my brain bleed.) I didn't allot time for creating a scripting engine, but clearly there was a need for it.</p>
<p><strong>Week 2:</strong> I'm not sure how the 8-bit NES aesthetic won out, but I liked it because it entailed <em>fewer artistic decisions</em>. The aesthetic had an entire era of gaming backing it. This seemed like a wise choice, because I'm not an accomplished artist, nor designer. I'm partially colorblind, in fact. Could I still cobble together pixel art?</p>
<p>I bought a Wacom tablet and books on animation, hoping to produce an acceptable look &amp; feel. By the way, nearly every graphic in the game has been redrawn at least once. You should have seen the original sideways animation for Toaster Bro, it took a few tries to make him look non-crippled.</p>
<p>So I had a decent lead on the art, but bugs kept popping up. Fundamental pieces of the puzzle were still missing (no scripting engine, no on-screen text, player can't die).</p>
<p><strong>Week 3:</strong> I caught a bad cold, so I spent most of this week supine on the couch. I forced the "game" on a few people, and collected their feedback. All the responses were valuable, and people raised issues that I hadn't considered. One tester said he couldn't view the entire window, he was on a MacBook with its standard (small) screen. Oops! Sorry about that... I reduced the console's "pixel" size.</p>
<p>The upshot of being sick was having lots of quiet time, during which I (slowly, groggily) puzzled out the scripting engine. Here's what the scripting language looks like now, this is extracted from the first room on the Dark Chocolate level:</p>
<pre><code>function clubDoor_electricity {
	i.isDoorOpen = true;
	call o.setBlock '__' 7 4; // empty space
	call o.setBlock '__' 7 5;
	call o.playSound 'doorOpen';
	call o.emotePlayer 'happy' 75;
}

function clubDoor_stop {
	if(i.isDoorOpen == true) {
		i.isDoorOpen = false;
		call o.setBlock '$L' 7 4; // lock
		call o.setBlock '$L' 7 5;
		call o.playSound 'doorClose';
		call o.emotePlayer 'sad' 75;
	}
}</code></pre>
<p>The interpreter supports a large syntax, including: loops, switch/case statements, tons of operators, enterFrame yields, userInput yields, recursion ... You get the idea. Variables are always referenced through a few specific objects, right now these are: <strong>t</strong>hread, <strong>i</strong>nterpreter, <strong>o</strong>wner (this is the Room that created the Interpreter instance), <strong>l</strong>evel, and <strong>g</strong>lobal (or <strong>g</strong>ame). (These are all dynamic objects except for <strong>o</strong>wner.) The script engine is decoupled from the code, I wrote a harness for it.</p>
<p>Also the <a href="http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/">8-bit NTSC artifacts</a> happened during week 3, somehow.</p>
<p>At this point, the game had a mere 3 rooms, all unsightly geometric slogs used for testing. Uh oh.</p>
<p><strong>Week 4:</strong> Still a bit sick, and my real-world work schedule poked its head in, and needed some attention. The list of bugs &amp; issues was huge; 30 items, including toughies like art and program flow.</p>
<p>I forced myself to draw the dreaded sprite animations. Infrequently, this was relaxing and zen-like. But in the wrong state of mind, it was taxing and disheartening. I'm using the <a href="http://blog.zacharcher.com/2007/10/13/understanding-colormatrixfilter/">palette swap trick</a> from Space Kitty, so I stared at grotesque red, green and blue images all day, and felt sorry for myself. Definitely out of my league.</p>
<p>Also I hacked together a level editor using Flex components, accessible through a magic keystroke. It's buggy and non-intuitive, but it's better than editing the room layouts as raw ascii! Here's how the final room in Mom's Kitchen is stored:</p>
<pre><code>[P,d [P,d [P,d [P,d [P,d [f,d ..,d ..,d ..,d ..,d [d,d [P,d [P,d [P,d [P,d [P,d
[P,d [P,d [P,d [P,d [P,d [f,d ..,d ..,a ..,a ..,d [d,d [P,d [P,d [P,d [P,d [P,d
[j,d [P,d [P,d [P,d [P,d [F,d ..,d ..,a ..,a ..,d [D,d [P,d [P,d [P,d [P,d [k,d
[J,d [h,d [h,d [h,d [h,d [i,d ..,d ..,d ..,d ..,d [g,d [h,d [h,d [h,d [h,d [K,d
[f,d ..;n ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;p [d,d
[f,d ..;q ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a #a,a #a,a #a,a #a,a ..,a ..,a ..,a ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a #a,a #a,a #t,a #a,a ..,a ..,a ..,a ..,d ..;q [d,d
[f,d ..;q ..,d ..,a ..,a ..,a __,a ..,a ..,a ..,a ..,a ..,a ..,a ..,d ..;q [d,d
[F,d ..;q __,d __,d __,d __,d ..,d ..,d ..,d ..,d ..,d ..,d ..,d __,d ..;q [D,d
[i,d ..;r ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;o ..;s [g,d</code></pre>
<p>I resolved to ride my bike every day, to avoid getting sick again. So far so good, but now I ride to coffee shops and spend a metric crapload of money dining out of the house. The hidden price of wellness...</p>
<p><strong>Week 5:</strong> The list grew even longer. Lots of bugs, lots of missing features that I didn't consider -- the heart containers, the health bar. Dark Chocolate's level was half done. The entity behaviors were unstable; the damage system was finicky, every Entity required too much configuration to properly interact with others. This needed an overhaul. I'd started thinking about unit testing, which I'd never tried before.</p>
<p>I drew Dark Chocolate, but with no behavioral code, he didn't move. Fun fact: I saw his animation in a dream.</p>
<p><strong>Week 6:</strong> Dark Chocolate's level was finished, mostly. The boss fight took a day and a half to get right. You still couldn't "win" a level. I always joked that the goal was to plug in a toaster. Hmmmmm...</p>
<p><strong>Weeks 7-9:</strong> Sound design, on-screen text, Mom's kitchen (the training level), giant toasters. Redrawing sprites. Bigger croissants (the laser-guards). Spotlights. Refactoring lots of code. The scripting engine is versatile, but not easy to use. In week 7, it was much clunkier than the syntax listed above. There were no <code>switch</code> statements, you had to write a list of consecutive <code>if</code> statements instead.</p>
<p>Days passed. The spit 'n polish phase took <em>forever</em>. I sympathize with whoever said, "your code is always 85% done". It sure felt that way.</p>
<p>Also I finally implemented unit testing. I tried <a href="http://www.asunit.org/">ASUnit</a> first, but it's not very Flash-like; I believe it's a direct port of JUnit (as evidenced by the Java code in its comments). If I'd realized <a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit">FlexUnit</a> was still in development, then I would have jumped on it, but... Long story short: I wanted to display failed tests on the stage, and ASUnit made that difficult. So I threw out the ASUnit code, kept my custom TestCase subclasses, and wrote my own Flash-centric versions of a TestRunner and TestCase (they both extend Sprite).</p>
<p>I can compile Toaster Bro in two ways: I have a Main.as class which will compile in the Flash IDE. But there's also a Roomhack.mxml wrapper which creates a "developer" build, integrating the testing framework and level editor. When the developer build is launched, it runs every TestCase. If a TestCase fails, and if it has added children, then it's displayed on the stage, with diagnostic messages &amp; an execution trace. Failed TestCases can be dismissed with a click. I'm not "in love" with unit testing yet, perhaps because writing the tests <em>after</em> the code was tedious. I'm sure it will save my butt in the future, tho.</p>
<p><strong>Week 10:</strong> Toaster Bro alpha is unleashed on the world!</p>
<p>Overall, feedback has been positive. Like Space Kitty, most people want the game to be longer. The negative feedback has been very helpful, pointing out specific problems which aren't obvious to me, since I view the application as a whole now.</p>
<p>So, after writing this gigantic treatise, I figured I'd have some insights on how to improve the process. And you know what? <em>I don't</em>.</p>
<p>Gamasutra had <a href="http://www.gamasutra.com/features/20051026/gabler_pfv.htm">an excellent article on rapid prototyping</a>, and their process echoes what we experienced on Toaster Bro and Space Kitty: Creativity can't be scheduled, and you'll spend a huge chunk of time germinating the idea in your head. We had 2 months to develop Space Kitty; we spent almost exactly 1 month dreaming up the idea. After that, the initial prototype took a day or two, and we were rolling.</p>
<p>With Toaster Bro, nearly half of the "serious" development time went towards polishing the game and making it presentable. This was a surprise, even though most of my interactive work has followed this pattern, too. The functional code is fairly easy to develop, but then you must meet the clients' standards, and hammer the UI to find the rough spots.</p>
<p>Sound effects gave Toaster Bro an air of legitimacy. The difference was like night and day. Without sound effects, it was a shaky graphics demo; with sound effects, it felt <em>alive</em>. Hard to explain unless you've witnessed it.</p>
<p>Testers will comment on all the broken windows they find. I still hear about the missing sound effects in Toaster Bro (and yes, there are plenty!) But that's okay, their feedback is always valuable. Occasionally they'll have solid ideas on how best to <em>fix</em> a broken window, too.</p>
<p>What happens now? I have to produce more levels, art, and script. I'd like to believe that my productivity will ramp up, with so much of the infrastructure and assets completed. Sadly, I don't think it works that way. I have big ideas for the remaining Toaster Bro levels, and these involve intense scripting. The second room of Mom's Kitchen (where Toaster Bro learns how to use a wire, via 4 simple dialogs) is 131 lines of script, and it's still not done -- Mom should rush in and cheer after you activate the toaster, right? I can only imagine the length of the equivalent code in AS3. I want big effects &amp; easter eggs. It will be difficult to develop and test these.</p>
<p>Whatever skills you have, I recommend bringing these into your projects, and emphasizing them, even leaning on them. I produce groovy electronic music, so <a href="http://zacharcher.com/lab/toaster_bro/chiptunes_test/">I made a bunch of chiptunes</a> early on, to help center my thinking. Some aren't useable for Toaster Bro, they're too active -- they have the pace of Mega Man, rather than Zelda. It was good to realize that, it helped shape my thinking.</p>
<p>More to come?...</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;title=Toaster Bro alpha: 10 days later' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;title=Toaster Bro alpha: 10 days later' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;title=Toaster Bro alpha: 10 days later' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Toaster Bro alpha: 10 days later+http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Toaster Bro alpha: 10 days later&amp;uri=http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/03/20/toaster-bro-alpha-10-days-later/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>8-bit NTSC artifacts using Pixel Bender</title>
		<link>http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/</link>
		<comments>http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 03:27:05 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=139</guid>
		<description><![CDATA[By request, here's a quick 'n dirty test harness, and sample code, for NTSC artifacts in the style of the 8-bit Nintendo Entertainment System (NES): Click the animation to change scale &#38; scroll speed. Source code &#38; .fla: nes_ntsc.zip The .pbk code is not optimized yet. The code is fairly explicit, I tried to explain [...]]]></description>
			<content:encoded><![CDATA[<p>By request, here's a quick 'n dirty test harness, and sample code, for NTSC artifacts in the style of the 8-bit Nintendo Entertainment System (NES):</p>
<p><a href="http://zacharcher.com/lab/20090315_nes_ntsc/nes_ntsc_harness.swf"><img class="alignnone" title="NES NTSC screencap" src="http://zacharcher.com/lab/20090315_nes_ntsc/nes_ntsc_screencap.png" alt="" width="301" height="249" /></a></p>
<p>Click the animation to change scale &amp; scroll speed.</p>
<p>Source code &amp; .fla: <a href="http://zacharcher.com/lab/20090315_nes_ntsc/20090315_nes_ntsc.zip">nes_ntsc.zip</a></p>
<p>The .pbk code is not optimized yet. The code is fairly explicit, I tried to explain how it works in the comments. <a href="http://slack.net/~ant/libs/ntsc.html">Blargg's pages</a> have better explanations tho.</p>
<p>The test harness lets you select two flavors of the effect. The numbers 8 and 12 denote the width of the lowpass window used for applying crosstalk. 12 is more processor-intensive, but will look "smoother", which may not be what you want. The mathematics can be reduced to a few (long) lines, which should reduce processor overhead; I want to do this in the future. <a href="http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/#comments">unic0rn left some nice comments</a> suggesting more routes to optimization.</p>
<p>The filter still needs some tuning. Areas of solid (non-black) color have diagonal stripes in them. I believe that normalizing the strengths of the filters will fix this.</p>
<p>To be continued...</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/&amp;title=8-bit NTSC artifacts using Pixel Bender' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/&amp;title=8-bit NTSC artifacts using Pixel Bender' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/&amp;title=8-bit NTSC artifacts using Pixel Bender' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=8-bit NTSC artifacts using Pixel Bender+http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=8-bit NTSC artifacts using Pixel Bender&amp;uri=http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/03/15/8-bit-ntsc-artifacts-using-pixel-bender/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tweetcoding: Round 1 Winners</title>
		<link>http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/</link>
		<comments>http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 00:43:21 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[obfuscation]]></category>
		<category><![CDATA[tweetcoding]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=135</guid>
		<description><![CDATA[Hooray, I'm a runner-up in the first Tweetcoding contest. My entry "Ghost Marquee" placed in the top 4. The code extracts certain bits from a string of jibberish, 6 bits at a time; when arranged on a grid, the bits form a message. Also I had 2 notable mentions with Sea Sphere and 3D Sketch. [...]]]></description>
			<content:encoded><![CDATA[<p>Hooray, <a href="http://www.gskinner.com/playpen/tweetcoding_0/">I'm a runner-up in the first Tweetcoding contest</a>. My entry "<a href="http://www.gskinner.com/playpen/tweetcoding_0/tc_1263383494.swf">Ghost Marquee</a>" placed in the top 4. The code extracts certain bits from a string of jibberish, 6 bits at a time; when arranged on a grid, the bits form a message.</p>
<p>Also I had 2 notable mentions with <a href="http://www.gskinner.com/playpen/tweetcoding_0/tc_1264481820.swf">Sea Sphere</a> and <a href="http://www.gskinner.com/playpen/tweetcoding_0/tc_1257410301.swf">3D Sketch</a>. I figured my entry <a href="http://tweetcoding.machine501.com/tc_1260723981.swf">The w00t Quilt</a> would have placed, but perhaps I'm just easily hypnotized...</p>
<p>I think the strongest entry was <a href="http://www.gskinner.com/playpen/tweetcoding_0/tc_1267109791.swf">Diagonal Snake</a> by <a href="http://twitter.com/tomee6">@tomee6</a>, which is (not coincidentally) also one of the winners. Move the mouse to attract the snake; you lose when the snake crosses itself or touches you. There's even a death animation. Amazing.</p>
<p>Here's looking forward to round 2...</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/&amp;title=Tweetcoding: Round 1 Winners' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/&amp;title=Tweetcoding: Round 1 Winners' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/&amp;title=Tweetcoding: Round 1 Winners' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Tweetcoding: Round 1 Winners+http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Tweetcoding: Round 1 Winners&amp;uri=http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/03/13/tweetcoding-round-1-winners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweetcoding!</title>
		<link>http://blog.zacharcher.com/2009/03/02/tweetcoding/</link>
		<comments>http://blog.zacharcher.com/2009/03/02/tweetcoding/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 05:46:55 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[tweetcoding]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=111</guid>
		<description><![CDATA[The challenge was steep: Build something interesting in Flash, using 140 characters or less. Check out the rules, and the results. Oh man, I was hooked. I admit, I'm suspicious of Twitter's usefulness in the grand scheme of things. You're allowed 140 characters, eh? You can only communicate the big picture; blipverts. Twitter is addictive [...]]]></description>
			<content:encoded><![CDATA[<p>The challenge was steep: Build something interesting in Flash, using 140 characters or less.</p>
<p>Check out <a href="http://gskinner.com/playpen/tweetcoding.html">the rules</a>, and <a href="http://tweetcoding.machine501.com/">the results</a>. Oh man, I was hooked.<br />
<span id="more-111"></span><br />
I admit, I'm suspicious of Twitter's usefulness in the grand scheme of things. You're allowed 140 characters, eh? You can only communicate the big picture; <a href="http://en.wikipedia.org/wiki/Blipvert">blipverts</a>. Twitter is addictive because it doesn't require any commitment -- it takes 10 seconds to "tweet". You can tweet like mad. You can tweet at any moment of the day, even from your phone. You can abuse the Twitter API, and post non-human-readable text (such as tweetcode), which will drive your friends crazy.</p>
<p>Having said that... It was stunning to watch everyone create beauty in the face of the 140-character limit. Constraints fuel creativity. Here's what I came up with:</p>
<ul>
<li><a href="http://tweetcoding.machine501.com/tc_1260723981.swf">The w00t Quilt</a></li>
<li><a href="http://tweetcoding.machine501.com/tc_1257410301.swf">3D Sketch</a></li>
<li><a href="http://tweetcoding.machine501.com/tc_1263383494.swf">Ghost Marquee</a></li>
<li><a href="http://tweetcoding.machine501.com/tc_1264481820.swf">Sea Sphere</a></li>
<li><a href="http://tweetcoding.machine501.com/tc_1268469008.swf">Sound Effects</a>. Move the mouse for FM synthesis. (Caution: kinda loud.)</li>
</ul>
<p>Many people posted entries that blew my mind. Some favorites:</p>
<ul>
<li><a href="http://twitter.com/oskitar">@oskitar</a>: <a href="http://tweetcoding.machine501.com/tc_1250258414.swf">The Day The Earth Stood Still</a></li>
<li><a href="http://twitter.com/og2t">@og2t</a>:<a href="http://tweetcoding.machine501.com/tc_1258007768.swf">My 1st Tweetcode</a></li>
<li><a href="http://twitter.com/flashpadawan">@flashpadawan</a>: <a href="http://tweetcoding.machine501.com/tc_1263655966.swf">3D Particle Emitter</a>. Custom 3D rendering!</li>
<li><a href="http://twitter.com/kalisnik">@kalisnik</a>: <a href="http://tweetcoding.machine501.com/tc_1262904228.swf">Grass in the Wind</a></li>
<li><a href="http://twitter.com/piXelero">@piXelero</a>: <a href="http://tweetcoding.machine501.com/tc_1238049748.swf">Inversemapping</a>, and <a href="http://tweetcoding.machine501.com/tc_1250044251.swf">Tweetcoding With Recursion</a> (probably my favorite examples of beautiful recursion)</li>
<li><a href="http://twitter.com/pantaa">@pantaa</a>: <a href="http://tweetcoding.machine501.com/tc_1236586119.swf">Alien Lifeform</a></li>
<li><a href="http://twitter.com/rmdesign">@rmdesign</a>: <a href="http://tweetcoding.machine501.com/tc_1239657440.swf">Jellycube</a></li>
<li><a href="http://twitter.com/Quasimondo">@Quasimondo</a>: <a href="http://tweetcoding.machine501.com/tc_1227966320.swf">Hyperdrive</a></li>
</ul>
<p>Who am I kidding, I have too many favorites to list. The most interesting aspect was watching  personalities emerge, as people submitted multiple entries.</p>
<p>I'm sure I could have crammed more features in my code; I remembered the comma operator late in the game, which lets you shorten</p>
<pre><code>if(condition){doThis;doThat}</code></pre>
<p>into</p>
<pre><code>if(condition)doThis,doThat</code></pre>
<p>You just saved two whole characters!! Epic savings, there. Now I find myself tightening up my "real" code: using multiple assignment, and increment/decrement operators within expressions. Back when I studied Perl, I feared this: You can cram an entire script onto one line, how clever!.. "Clever" code doesn't seem smart later, when you have to maintain it.</p>
<p>Cheers to <a href="http://www.gskinner.com/blog/">Grant Skinner</a> for developing the contest, and to all the judges who are about to wade through hundreds of entries -- we salute you. Here's looking forward to Tweetcoding: The Sequel!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/03/02/tweetcoding/&amp;title=Tweetcoding!' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/03/02/tweetcoding/&amp;title=Tweetcoding!' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/03/02/tweetcoding/&amp;title=Tweetcoding!' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Tweetcoding!+http://blog.zacharcher.com/2009/03/02/tweetcoding/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Tweetcoding!&amp;uri=http://blog.zacharcher.com/2009/03/02/tweetcoding/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/03/02/tweetcoding/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/03/02/tweetcoding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Synth review: The Head-Exploding FS1R</title>
		<link>http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/</link>
		<comments>http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:24:41 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Synth]]></category>
		<category><![CDATA[fm]]></category>
		<category><![CDATA[formant]]></category>
		<category><![CDATA[fs1r]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=93</guid>
		<description><![CDATA[In 1998, the Yamaha Corporation unleashed a product that was convoluted and bizarre like no other: The FS1R Synthesizer. Like the era-defining DX7, the FS1R is an FM Synthesizer, but it boasts a massive 8 operators per voice, compared to 6 in the DX. And the FS1R sports a new toy, Formant Synthesis, capable of [...]]]></description>
			<content:encoded><![CDATA[<p>In 1998, the Yamaha Corporation unleashed a product that was convoluted and bizarre like no other: The <a href="http://en.wikipedia.org/wiki/Yamaha_FS1R">FS1R Synthesizer</a>.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://zacharcher.com/lab/20090104_fs1r_demo_clips/fs1r.jpg" alt="" width="473" height="60" /></p>
<p>Like the era-defining <a href="http://en.wikipedia.org/wiki/DX7">DX7</a>, the FS1R is an <a href="http://en.wikipedia.org/wiki/Frequency_modulation_synthesis">FM Synthesizer</a>, but it boasts a massive 8 operators per voice, compared to 6 in the DX. And the FS1R sports a new toy, <a href="http://en.wikipedia.org/wiki/Formant_synthesis">Formant Synthesis</a>, capable of mimicking voices, human and otherwise! Waves and formants can modulate each other in 88 different configurations. Top that off with LFOs, filters, on-board effects... It's so flexible, and so complicated. So much power.</p>
<p><span id="more-93"></span>The FS1R was the last of Yamaha's FM synthesizers, and that's no accident. Even by 1998 standards, this thing dwells in a deep abyss of user-unfriendliness. Without a GUI, you must program 1,000+ parameters using 15 tiny buttons on the front panel. Fortunately, K_Take has developed <a href="http://www4.airnet.ne.jp/k_take/fs1r_editor_english.html">FS1R Editor Software</a> which lets you load/save patches, and twiddle the internals in real time (thanks K_Take!)</p>
<p>The unit sold poorly and was discontinued after 2 short years (long before a proper GUI emerged). I didn't know the FS1R existed, until Tavvv of the <a href="http://bdmonkeys.net/">Braindead Monkeys</a> mentioned it might be something my brain would enjoy -- Weird vocal effects! Technical crazy-sauce! Aural blasphemy!</p>
<p>Thus, the hunt was on. After two months, I had a single nibble -- a unit appeared on eBay, and I became its adoptive parent. (These units are scarce; only <a href="http://shop.ebay.com/items/_W0QQ_nkwZfs1rQQ_armrsZ1QQ_fromZR40QQ_mdoZ">two units are listed on eBay</a> at the time of this writing, and they're not getting any cheaper.) Was it worth it? Good question. If I had to describe this thing in one word, it would be: "Uhnnnhhhhh  ...  !!!"</p>
<p>After three months of use, I'm starting to comprehend this beast. With 8 operators (waves/formants) per voice, you must choose one of 88 algorithms. Here's a screenshot of a few (in K_Take's application):</p>
<p style="text-align: center;"><img class="aligncenter" src="http://zacharcher.com/lab/20090104_fs1r_demo_clips/fs1r_algorithms.png" alt="" width="453" height="350" /></p>
<p>Each operator has a zillion parameters: pitch and amplitude envelopes, a "skirt" (which makes the sound fuzzier), and wave shapes (sine, sawtooth-esque, square-ish, formants) which have another zillion parameters of their own. Also each voice has 8 "unvoiced" operators, which generate pitched noise. These imbue its "speech" with sibilance, and thus, consonants; A zillion more parameters.</p>
<p>Everything I just listed is actually quadrupled, as you control 4 voices per program. And you can use "formant sequences" to make the operators fly around and "talk", morphing into vowels and phonemes.</p>
<p>Yeah, it's pretty hectic. This is a saturation point of some sort. This must be what happens when synths fly too close to the sun.  <a href="http://www.sitepassenger.com/thomas/fs1r/files/fs1r15.mp3">Here</a> <a href="http://www.soundengine.com/html/products/Metathesis/celltime_20.mp3">are</a> <a href="http://www.soundengine.com/html/products/Metathesis/linmorph_60.mp3">some</a> <a href="http://www.dashsignature.com/products/dashsound/HQS1-mp3/ATM-IronPlanet-VK.mp3">sound</a> <a href="http://www.dashsignature.com/products/dashsound/HQS1-mp3/SEQ-ancientevenings-dk.mp3">samples</a> that demonstrate the madness. If you're brave, <a href="http://zacharcher.com/lab/20090104_fs1r_demo_clips/fs1r_demo_clips.mp3">here's a medley of my FS1R creations</a> spanning 3 months, oldest to newest.</p>
<p>What the hell can you <em>do</em> with this device, then? I tried using the FS1R in a "lead" role for months; carrying the melody, or standing in front of the other instruments, snarling aggressively at the listener. That's not what the FS1R excels at. It sports an impressive collection of waveforms, but compared to other synths I've used, the waves sound <em>soft</em>, and clean. Even with the "skirt" maxed out, the FS1R can't produce a sawtooth wave, or a square wave, or anything big and phat that resonates your rib cage. FM synthesis can sound harsh on other platforms (the <a href="http://en.wikipedia.org/wiki/Yamaha_TX81Z">Yamaha TX81Z</a>; the Sega Genesis) but the fidelity of the FS1R is apparently <em>too good</em>. You can't make this thing <em>scrape</em>, or scream.</p>
<p>This leaves you with a few options -- you can use it as a "background" instrument, or as a smooth pad. This is where the FS1R shines. It produces excellent <em>textures</em> that liven up a mix if they're used ornamentally. The FS1R could become my "secret weapon", adding that undefinable <em>something</em> to my sound universe. At least, I hope so. FM synthesis is hard to program because you don't <em>really</em> know what will happen when you twist that knob; little tweaks can send a patch spinning. The FS1R constantly surprises me, and that makes it <em>cool</em>. My best sounds come from building a patch using one algorithm (out of 88), and then clicking the other algorithms, arranging the operators into something that I couldn't have premeditated.</p>
<p>It has filters and on-board effects, too. Honestly, I've barely touched these, I'm still internalizing the other stuff. The filter seems unexciting; it's transparent and color-less, although it does offer three lowpass slopes (12, 18 and 24 db/octave), which is nice. The effects include several flavors of chorus &amp; reverb, delays, dynamics processors, and two distortions (although they're soft too, and neuter the sound more than give it teeth).</p>
<p>My wish list for a sequel (the "FS2R"?):</p>
<ul>
<li>New modulation types between operators -- ring modulation and hard sync. That way, "the kids" can play it in "the clubs".</li>
<li>More LFOs. You get 2 per voice, and 1 is reserved for the filter. More are needed!</li>
<li>Formant sequences should be editable, or better yet, <em>recordable</em>. The manual states that sequences cannot be edited, but <a href="http://www.xs4all.nl/~niff/fs1r/fseqedit/help/">of course they can</a> if you're willing to hack it a bit.</li>
</ul>
<p>Meanwhile, the FS1R will keep me busy with its steep learning curve. At this point, I have rare moments of clarity where I can plan, and (mostly) construct the sound I want. What will I produce after 3 more months? I have no idea, none at all. We shall see.</p>
<p>P.S. <a href="http://www.sitepassenger.com/thomas/fs1r/heart.html">Thomas Gruber explains how the FS1R's DSP works</a>, and it's spiffy.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/&amp;title=Synth review: The Head-Exploding FS1R' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/&amp;title=Synth review: The Head-Exploding FS1R' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/&amp;title=Synth review: The Head-Exploding FS1R' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Synth review: The Head-Exploding FS1R+http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Synth review: The Head-Exploding FS1R&amp;uri=http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2009/01/05/synth-review-the-head-exploding-fs1r/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://www.sitepassenger.com/thomas/fs1r/files/fs1r15.mp3" length="845949" type="audio/mpeg" />
<enclosure url="http://www.soundengine.com/html/products/Metathesis/celltime_20.mp3" length="832992" type="audio/mpeg" />
<enclosure url="http://www.soundengine.com/html/products/Metathesis/linmorph_60.mp3" length="321410" type="audio/mpeg" />
<enclosure url="http://www.dashsignature.com/products/dashsound/HQS1-mp3/ATM-IronPlanet-VK.mp3" length="453404" type="audio/mpeg" />
<enclosure url="http://www.dashsignature.com/products/dashsound/HQS1-mp3/SEQ-ancientevenings-dk.mp3" length="772096" type="audio/mpeg" />
<enclosure url="http://zacharcher.com/lab/20090104_fs1r_demo_clips/fs1r_demo_clips.mp3" length="9169897" type="audio/mpeg" />
		</item>
		<item>
		<title>Fractal Transform, made with Pixel Bender</title>
		<link>http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/</link>
		<comments>http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 09:06:11 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[julia]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=79</guid>
		<description><![CDATA[I made a Pixel Bender filter that performs Julia Set transformations on images. It looks great when it animates, the colors morph and twist like mathematical slime. Try it (Flash Player 10 required): JuliaTile.swf Source code: julia_tile_src.zip. Pixel Bender code is in src/shader/. The default image is Seattle's Space Needle. You can upload custom images. [...]]]></description>
			<content:encoded><![CDATA[<p>I made a Pixel Bender filter that performs Julia Set transformations on images. It looks great when it animates, the colors morph and twist like mathematical slime. Try it (Flash Player 10 required): <a href="http://zacharcher.com/lab/20081229_julia_filter/JuliaTile.swf">JuliaTile.swf<br />
</a></p>
<p><a href="http://zacharcher.com/lab/20081229_julia_filter/JuliaTile.swf"><img class="alignnone" title="Julia Set sample" src="http://zacharcher.com/lab/20081229_julia_filter/julia_sample.png" alt="" width="357" height="393" /></a></p>
<p>Source code: <a href="http://zacharcher.com/lab/20081229_julia_filter/julia_tile_src.zip">julia_tile_src.zip</a>. Pixel Bender code is in <code>src/shader/</code>.<a href="http://zacharcher.com/lab/20081229_julia_filter/julia_tile_src.zip"><br />
</a></p>
<p>The default image is Seattle's Space Needle. You can upload custom images. Very large images may set your processor on fire.</p>
<p><span id="more-79"></span>Parameters: <strong>Iterations</strong> sets how many times the Julia formula is applied per pixel. The iteration increments appear smooth, not stepped, because the code tweens across the destination coordinates of the two nearest iterations. <strong>Complex X&amp;Y</strong> are the real &amp; imaginary values of the transform constant. <strong>Bias X&amp;Y</strong> is something I hacked in, it skews the coordinates in a linear way, becoming more intense with each iteration.</p>
<p>The <strong>Fill Types</strong> are as follows:</p>
<ul>
<li>0: Pixels out of range are transparent; no fill.</li>
<li>1: Repeats the nearest edge pixel.</li>
<li>2: Repeats the source image, mirroring every other copy to create a smooth transition.</li>
<li>3: Repeats the source image without mirroring.</li>
</ul>
<p>The filter needs more features before it's "done", hopefully it's still enjoyable. The Pixel Bender code took about 30 minutes to write; the Flex wrapper took much longer.</p>
<p>Despite its limited feature set, Pixel Bender is pretty cool. My only misgiving is that Pixel Bender's runtime performance is never as good as I hope. I have another filter in the works that mimics NTSC television artifacts, but the performance is abysmal. The code can still be optimized; stay tuned.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/&amp;title=Fractal Transform, made with Pixel Bender' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/&amp;title=Fractal Transform, made with Pixel Bender' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/&amp;title=Fractal Transform, made with Pixel Bender' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Fractal Transform, made with Pixel Bender+http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Fractal Transform, made with Pixel Bender&amp;uri=http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/12/29/fractal-transform-in-pixel-bender/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NES Pixel Art</title>
		<link>http://blog.zacharcher.com/2008/11/04/nes-pixel-art/</link>
		<comments>http://blog.zacharcher.com/2008/11/04/nes-pixel-art/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 10:43:48 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[nes]]></category>
		<category><![CDATA[nintendo]]></category>
		<category><![CDATA[pixel art]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=70</guid>
		<description><![CDATA[My tile engine is getting a facelift, I'm scrapping the Atari 2600 palette, and switching to the glorious 56 colors of the Nintendo Entertainment System. Eventually I want to add NTSC artifacts using Pixel Bender. For now, I have to produce a small miracle of art assets, and use the tiny palette effectively. I never [...]]]></description>
			<content:encoded><![CDATA[<p>My <a href="http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/">tile engine</a> is getting a facelift, I'm scrapping the <a href="http://en.wikipedia.org/wiki/List_of_videogame_consoles_palettes#Atari_2600">Atari 2600 palette</a>, and switching to the glorious <a href="http://en.wikipedia.org/wiki/List_of_videogame_consoles_palettes#NES">56 colors of the Nintendo Entertainment System</a>.</p>
<p>Eventually I want to add <a href="http://blargg.fileave.com/ntsc-vs-palette/">NTSC artifacts</a> using Pixel Bender. For now, I have to produce a small miracle of art assets, and use the tiny palette effectively. I never thought I'd <em>study</em> old Nintendo games, but that's exactly how I spent my evening.</p>
<p>According to <a href="http://www.zoggles.co.uk/asp/tutorials.asp?tut=17">Tsugomo</a>, the eye perceives brighter colors as being closer. Most games with decent art have solid blocks brighter than the background.</p>
<div class="wp-caption aligncenter" style="width: 436px"><img title="Mega Man 3 - Needle Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm3_needle_2.png" alt="" width="426" height="281" /><p class="wp-caption-text">Mega Man 3 - Needle Man</p></div>
<p><span id="more-70"></span></p>
<div class="wp-caption aligncenter" style="width: 504px"><img title="Mega Man 3 - Shadow Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm3_shadow.png" alt="Mega Man 3 - Shadow Man" width="494" height="454" /><p class="wp-caption-text">Mega Man 3 - Shadow Man</p></div>
<p>Obviously, you can see what's solid, and what's not. But, there are other ways to make this distinction.</p>
<div class="wp-caption aligncenter" style="width: 492px"><img title="Mega Man 2 - Air Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm2_air.png" alt="Mega Man 2 - Air Man" width="482" height="455" /><p class="wp-caption-text">Mega Man 2 - Air Man</p></div>
<p>In this example, the noisy texture of the glass tiles sets them apart from the solid background.</p>
<div class="wp-caption aligncenter" style="width: 342px"><img title="Mega Man 2 - Bubble Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm2_bubble.png" alt="Mega Man 2 - Bubble Man" width="332" height="393" /><p class="wp-caption-text">Mega Man 2 - Bubble Man</p></div>
<p>The waterfall is a torrent of bright colors, so the solid platform has to be even brighter, mostly pure white. Mega Man is almost the same blue as the background, but stands out because in this case, he is darker.</p>
<div class="wp-caption aligncenter" style="width: 421px"><img title="Mega Man 2 - Flash Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm2_flash.png" alt="Mega Man 2 - Flash Man" width="411" height="423" /><p class="wp-caption-text">Mega Man 2 - Flash Man</p></div>
<p>Kinda pushing it here... Everything is blue. The platforms are bright enough to stand out, but Mega Man is almost lost in the background.</p>
<div class="wp-caption aligncenter" style="width: 504px"><img title="Mega Man 3 - Magnet Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm3_magnet.png" alt="Mega Man 3 - Magnet Man" width="494" height="464" /><p class="wp-caption-text">Mega Man 3 - Magnet Man</p></div>
<p>Interesting use of color. Lots of black pixels in this image, but the platforms have the brightest colors, and stand out.</p>
<div class="wp-caption aligncenter" style="width: 494px"><img title="Mega Man 3 - Needle Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm3_needle.png" alt="Mega Man 3 - Needle Man" width="484" height="332" /><p class="wp-caption-text">Mega Man 3 - Needle Man</p></div>
<div class="wp-caption aligncenter" style="width: 502px"><img title="Mega Man 3 - Needle Man" src="http://zacharcher.com/blog_pics/2008/nes_art/mm3_needle_3.png" alt="Mega Man 3 - Needle Man" width="492" height="450" /><p class="wp-caption-text">Mega Man 3 - Needle Man</p></div>
<p>These are tricky -- orange blocks are solid (they have bright highlights), green are background. They introduce this concept earlier in the level, too.</p>
<p>My game uses an overhead perspective, so I'm hunting for similar games with nice art. This screenshot is from the "Mission Impossible" Nintendo cartridge:</p>
<div class="wp-caption aligncenter" style="width: 491px"><img title="Mission Impossible - Stage 1" src="http://zacharcher.com/blog_pics/2008/nes_art/mi_1.png" alt="Mission Impossible - Stage 1" width="481" height="379" /><p class="wp-caption-text">Mission Impossible - Stage 1</p></div>
<p>I love the geometry and the crafty use of shadows. Almost every tile uses 4 shades of one particular hue, and the effect is striking. And again, the most significant objects have the brightest highlights (your character, the solid crates, the medical kit).</p>
<div class="wp-caption aligncenter" style="width: 499px"><img title="Mission Impossible - Stage 3" src="http://zacharcher.com/blog_pics/2008/nes_art/mi_2.png" alt="Mission Impossible - Stage 3" width="489" height="371" /><p class="wp-caption-text">Mission Impossible - Stage 3</p></div>
<p>More shadows, with varying lengths (compare the bench to the statue). This image uses a mere 14 colors, which surprises me.</p>
<p>One more from Mission Impossible, then it's bedtime:</p>
<div class="wp-caption aligncenter" style="width: 497px"><img title="Mission Impossible - Stage 3" src="http://zacharcher.com/blog_pics/2008/nes_art/mi_3.png" alt="Mission Impossible - Stage 3" width="487" height="453" /><p class="wp-caption-text">Mission Impossible - Stage 3</p></div>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/11/04/nes-pixel-art/&amp;title=NES Pixel Art' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/11/04/nes-pixel-art/&amp;title=NES Pixel Art' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/11/04/nes-pixel-art/&amp;title=NES Pixel Art' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=NES Pixel Art+http://blog.zacharcher.com/2008/11/04/nes-pixel-art/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=NES Pixel Art&amp;uri=http://blog.zacharcher.com/2008/11/04/nes-pixel-art/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/11/04/nes-pixel-art/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/11/04/nes-pixel-art/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Braindead Monkeys album #6</title>
		<link>http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/</link>
		<comments>http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 19:04:22 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[braindead monkeys]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=60</guid>
		<description><![CDATA[You dag-blasted crazy apes!!! The Braindead Monkeys: Space Donut After a 4-year hiatus, Space Donut arrives! It's their strongest album to date. Lots of head-nodding jams, and lots of smiles. Recommended tracks: #3: Parody of a popular 80's cartoon #4: TERRORISM! "The United States is currently at war with everything..." #7: Nintendo (NES) + marching [...]]]></description>
			<content:encoded><![CDATA[<p>You dag-blasted crazy apes!!!</p>
<p style="text-align: center;"><a href="http://bdmonkeys.net/BDM6_space_donut.phtml"><img class="aligncenter" title="Space Donut" src="http://bdmonkeys.net/i/BDM6_front.jpg" alt="Braindead Monkeys: Space Donut" width="400" height="400" /></a></p>
<p style="text-align: center;"><strong><a href="http://bdmonkeys.net/BDM6_space_donut.phtml">The Braindead Monkeys: Space Donut</a></strong></p>
<p>After a 4-year hiatus, Space Donut arrives! It's their strongest album to date. Lots of head-nodding jams, and lots of smiles.</p>
<p>Recommended tracks:</p>
<ul>
<li><a href="http://bdmonkeys.net/m/BDM-Space_Donut-03-He-Monkeys.mp3">#3</a>: Parody of a popular 80's cartoon</li>
<li><a href="http://bdmonkeys.net/m/BDM-Space_Donut-04-___TERRORISM___.mp3">#4</a>: TERRORISM! "The United States is currently at war with <em>everything</em>..."</li>
<li><a href="http://bdmonkeys.net/m/BDM-Space_Donut-07-NESplosion.mp3">#7</a>: Nintendo (NES) + marching band</li>
<li><a href="http://bdmonkeys.net/m/BDM-Space_Donut-05-Path_of_the_Donut.mp3">#5</a>, <a href="http://bdmonkeys.net/m/BDM-Space_Donut-13-25_Years_of_Crap_Dubs.mp3">#13</a>, <a href="http://bdmonkeys.net/m/BDM-Space_Donut-18-Waft_Punk.mp3">#18</a>: Delicious electro jamstep</li>
</ul>
<p>Grab a banana and an electric drill, and enjoy!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/&amp;title=Braindead Monkeys album #6' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/&amp;title=Braindead Monkeys album #6' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/&amp;title=Braindead Monkeys album #6' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Braindead Monkeys album #6+http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Braindead Monkeys album #6&amp;uri=http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/10/31/braindead-monkeys-album-6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-03-He-Monkeys.mp3" length="7264822" type="audio/mpeg" />
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-04-___TERRORISM___.mp3" length="6409891" type="audio/mpeg" />
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-07-NESplosion.mp3" length="8928320" type="audio/mpeg" />
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-05-Path_of_the_Donut.mp3" length="7174420" type="audio/mpeg" />
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-13-25_Years_of_Crap_Dubs.mp3" length="10835946" type="audio/mpeg" />
<enclosure url="http://bdmonkeys.net/m/BDM-Space_Donut-18-Waft_Punk.mp3" length="7742605" type="audio/mpeg" />
		</item>
		<item>
		<title>A Replacement for Spotlight</title>
		<link>http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/</link>
		<comments>http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 01:53:55 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[launchd]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Spotlight]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=27</guid>
		<description><![CDATA[Spotlight has a glut of nice features, but it still doesn't satisfy me. I have nearly 2 million files on my hard drive. Depending on what I'm working on (and my caffeine-to-blood ratio), hundreds of files may be updated every minute. Then Spotlight tries to index the drive at inopportune moments, then Ableton Live can't [...]]]></description>
			<content:encoded><![CDATA[<p>Spotlight has a glut of nice features, but it still doesn't satisfy me. I have nearly 2 million files on my hard drive. Depending on what I'm working on (and my caffeine-to-blood ratio), hundreds of files may be updated every minute. Then Spotlight tries to index the drive at inopportune moments, then Ableton Live can't access files because the drive is busy, and the music grinds to a halt, and .... well, I had to take Spotlight behind the shed, and put it down.</p>
<p>There are <a href="http://www.macosxhints.com/article.php?story=20071102215912892">many</a> <a href="http://aplawrence.com/foo-mac/remove-spotlight.html">ways</a> <a href="http://www.tuaw.com/2008/09/23/terminal-tips-disable-spotlight-in-menu-bar/">to</a> <a href="http://pseudogreen.org/blog/disable_spotlight_in_leopard.html">disable</a> Spotlight. I don't remember which combination worked for me, but the end result is that <code>mdutil</code> doesn't  run on this machine anymore, and my menu bar is devoid of a Spotlight icon. (Also I <a href="http://forums.macosxhints.com/showpost.php?p=485190&amp;postcount=23">disabled Quick Look</a>, since its indexing also caused problems.)</p>
<p>But I still want to search my files. My solution was to create an automated job that runs once a day, and saves the path of every file into a big text document. Then I created a little command-line alias called <code>search</code>, which prints any file paths that match a search term. Here's how to do it:</p>
<p><span id="more-27"></span>First things first... We need a script that will traverse the file system, and save the path of every file into a massive text document. This is pretty easy, the <code>find</code> utility can do the heavy lifting. Here's the script I wrote:</p>
<p><code>#!/bin/bash<br />
rm /Users/chaz/dev/search/tree.txt<br />
find / &amp;gt; /Users/chaz/dev/search/tree.txt</code></p>
<p>I saved this script as <code>/Users/chaz/dev/search/build_tree.sh</code> . Make sure it's executable, then run it:</p>
<p><code>$ chmod a+x build_tree.sh<br />
$ ./build_tree.sh</code></p>
<p>The first time through, the <code>rm</code> command will complain that it has no <code>tree.txt</code> to delete, but that's okay. <code>find</code> will throw some other warnings at you: it can't traverse every directory because it doesn't have permission. Again, that's okay -- I probably won't be hunting for files in such places.</p>
<p>Grab a beverage, this process takes a few minutes. When it's done, you'll have a (rather large) <code>tree.txt</code> file in the directory. How large, exactly?</p>
<p><code>$ wc tree.txt<br />
1719365 5761267 196118611 tree.txt</code></p>
<p>1,719,365 lines, so I just indexed 1,719,365 files. Awesome.</p>
<p>It would be nice if the indexing ran automatically, preferably when I'm asleep. Since <code>cron</code> is being phased out of OS X Leopard, we'll use <code>launchd</code> instead. I created this file, called <code>rebuild_search_tree.plist</code>:</p>
<p><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://ww w.apple.com/DTDs/PropertyList-1.0.dtd"&gt;<br />
&lt;plist version="1.0"&gt;<br />
&lt;dict&gt;<br />
&lt;key&gt;Label&lt;/key&gt;<br />
&lt;string&gt;chaz.search.tree.rebuild&lt;/string&gt;<br />
&lt;key&gt;ProgramArguments&lt;/key&gt;<br />
&lt;array&gt;<br />
&lt;string&gt;/Users/chaz/dev/search/build_tree.sh&lt;/string&gt;<br />
&lt;string&gt;daily&lt;/string&gt;<br />
&lt;/array&gt;<br />
&lt;key&gt;LowPriorityIO&lt;/key&gt;<br />
&lt;true/&gt;<br />
&lt;key&gt;Nice&lt;/key&gt;<br />
&lt;integer&gt;1&lt;/integer&gt;<br />
&lt;key&gt;StartCalendarInterval&lt;/key&gt;<br />
&lt;dict&gt;<br />
&lt;key&gt;Hour&lt;/key&gt;<br />
&lt;integer&gt;6&lt;/integer&gt;<br />
&lt;key&gt;Minute&lt;/key&gt;<br />
&lt;integer&gt;15&lt;/integer&gt;<br />
&lt;/dict&gt;<br />
&lt;/dict&gt;<br />
&lt;/plist&gt;</code></p>
<p>Save this into ~/Library/LaunchAgents . You may have to create that directory, and there's an added wrinkle: for both the LaunchAgents directory <em>and</em> the .plist file, the owner has to be <code>root</code>.</p>
<p><code>$ sudo chown -R root ~/Library/LaunchAgents</code></p>
<p>Register this script with <code>launchctl</code>:</p>
<p><code>$ sudo launchctl load -w ~/Library/LaunchAgents/rebuild_search_tree.plist</code></p>
<p>Now this launch agent will run automatically at 6:15 every morning.</p>
<p>Finally, we need a command-line tool to search the tree. I added this line to my <code>.profile</code>:</p>
<p><code>function search() { clear; cat /Users/chaz/dev/search/tree.txt | grep "$@" | more; }</code></p>
<p>And here's how you use it:</p>
<p><code>$ search test<br />
/Applications/Adobe Photoshop CS3/MATLAB/tests/teststats.m<br />
/Applications/Audacity folder/nyquist/test.lsp<br />
/Applications/iTunes.app/Contents/Resources/da.lproj/iTunes Help/gfx/gfx_test.gif<br />
...</code></p>
<p>For each file that matches your query, it displays the full path of the file. This could be made fancier, but for now this is all I need!</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/&amp;title=A Replacement for Spotlight' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/&amp;title=A Replacement for Spotlight' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/&amp;title=A Replacement for Spotlight' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=A Replacement for Spotlight+http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=A Replacement for Spotlight&amp;uri=http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/10/06/a-replacement-for-spotlight/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trainwreckin&#8217;</title>
		<link>http://blog.zacharcher.com/2008/07/19/trainwreckin/</link>
		<comments>http://blog.zacharcher.com/2008/07/19/trainwreckin/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 21:56:34 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[openmoko]]></category>
		<category><![CDATA[trainwreck]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=22</guid>
		<description><![CDATA[OpenMoko is a flavor of Linux for cell phones. It's also a UI nightmare for end users. Witness these videos: OpenMoko Train Wreck from Dave Fayram on Vimeo. More OpenMoko Train Wrecking (Now with Qt!) from Dave Fayram on Vimeo. There's a ton of literature describing best development practices out there. But I think case [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Openmoko">OpenMoko</a> is a flavor of Linux for cell phones. It's also a UI nightmare for end users. Witness these videos:</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1366042&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1366042&amp;server=www.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="400" height="302"></embed></object><br /><a href="http://www.vimeo.com/1366042?pg=embed&#038;sec=1366042">OpenMoko Train Wreck</a> from <a href="http://www.vimeo.com/user466448?pg=embed&#038;sec=1366042">Dave Fayram</a> on <a href="http://vimeo.com?pg=embed&#038;sec=1366042">Vimeo</a>.</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1366923&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1366923&amp;server=www.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="400" height="302"></embed></object><br /><a href="http://www.vimeo.com/1366923?pg=embed&#038;sec=1366923">More OpenMoko Train Wrecking (Now with Qt!)</a> from <a href="http://www.vimeo.com/user466448?pg=embed&#038;sec=1366923">Dave Fayram</a> on <a href="http://vimeo.com?pg=embed&#038;sec=1366923">Vimeo</a>.</p>
<p>There's a ton of literature describing best development practices out there. But I think case studies of failure, or good intentions gone horribly awry, are just as important. It's essential to recognize what <em>not</em> to do. I still regard <a href="http://thedailywtf.com/Default.aspx">The Daily WTF</a> as a learning resource, full of cautionary (and hilarious) case studies.</p>
<p>Also, there are no "________-killers," but that's a subject for a different day.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/07/19/trainwreckin/&amp;title=Trainwreckin&#8217;' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/07/19/trainwreckin/&amp;title=Trainwreckin&#8217;' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/07/19/trainwreckin/&amp;title=Trainwreckin&#8217;' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Trainwreckin&#8217;+http://blog.zacharcher.com/2008/07/19/trainwreckin/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Trainwreckin&#8217;&amp;uri=http://blog.zacharcher.com/2008/07/19/trainwreckin/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/07/19/trainwreckin/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/07/19/trainwreckin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tile engine is go!</title>
		<link>http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/</link>
		<comments>http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 10:11:10 +0000</pubDate>
		<dc:creator>Zach</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[roomhack]]></category>
		<category><![CDATA[tile]]></category>

		<guid isPermaLink="false">http://blog.zacharcher.com/?p=21</guid>
		<description><![CDATA[Homemade tile engine! Click to play. Move: Arrow keys, or WASD Shoot: Mouse button, or IJKL Make sure you grab a weapon in room #2, so you can shoot the orcs. Currently, there are 9 rooms for romping. Not one pixel of the art should be considered "final". Most sprites &#38; tiles have a ColorMatrixFilter [...]]]></description>
			<content:encoded><![CDATA[<p>Homemade tile engine!<a href="http://zacharcher.com/lab/20080711_roomhack/RoomHack.swf"><br />
</a></p>
<p><a href="http://zacharcher.com/lab/20080711_roomhack/RoomHack.swf"><img src="http://zacharcher.com/lab/20080711_roomhack/roomhack_screenshot.png" alt="screenshot" width="324" height="324" /></a></p>
<p><a href="http://zacharcher.com/lab/20080711_roomhack/RoomHack.swf">Click to play</a>.</p>
<ul>
<li>Move: Arrow keys, or WASD</li>
<li>Shoot: Mouse button, or IJKL</li>
</ul>
<p>Make sure you grab a weapon in room #2, so you can shoot the orcs. Currently, there are 9 rooms for romping.</p>
<p>Not one pixel of the art should be considered "final". Most sprites &amp; tiles have a ColorMatrixFilter that "skins" them with four particular colors (see <a href="http://blog.zacharcher.com/2007/10/13/understanding-colormatrixfilter/">my post detailing this technique</a>). In some respects, this is wonderful, as the colors can be randomized, and it's easy to change the palette of an entire room. Unfortunately, to maintain retro look &amp; feel, I chose the <a href="http://en.wikipedia.org/wiki/List_of_videogame_consoles_palettes#Atari_2600">Atari 2600 palette</a>. The dark colors are over-saturated, the pastels are unexciting, and the hue distribution is completely wrong (nearly half the colors could be considered "green"). This will be dealt with.</p>
<p>An <a href="http://blog.zacharcher.com/2008/05/24/flash-10-is-go/">earlier screenshot</a> shows some vector art. Unfortunately, the vectors currently require Flash 10. I've disabled this feature... <em>for now</em>.</p>
<div class='bookmarkify'><a name='bookmarkify'></a><div class='linkbuttons'><a href='http://del.icio.us/post?url=http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/&amp;title=Tile engine is go!' title='Save to del.icio.us' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/delicious.png' style='width:16px; height:16px;' alt='[del.icio.us] ' /></a> <a href='http://digg.com/submit?phase=2&amp;url=http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/&amp;title=Tile engine is go!' title='Digg It!' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/digg.png' style='width:16px; height:16px;' alt='[Digg] ' /></a> <a href='http://reddit.com/submit?url=http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/&amp;title=Tile engine is go!' title='Reddit' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/reddit.png' style='width:16px; height:16px;' alt='[Reddit] ' /></a> <a href='http://twitter.com/home/?status=Tile engine is go!+http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/' title='Save to Twitter' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/twitter.png' style='width:16px; height:16px;' alt='[Twitter] ' /></a> <a href='http://www.feedburner.com/fb/a/emailFlare?itemTitle=Tile engine is go!&amp;uri=http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/&amp;loc=en_US' title='Email this to a friend' onclick='target="_blank";' rel='nofollow'><img src='http://blog.zacharcher.com/wp-content/plugins/bookmarkify/email.png' style='width:16px; height:16px;' alt='[Email] ' /></a>  <a title='See more bookmark and sharing options...' href='http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/#bookmarkify' rel='nofollow'><small>More&nbsp;&raquo;</small></a></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zacharcher.com/2008/07/12/tile-engine-is-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
