<?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>MentalPolyphonics &#187; Programming</title>
	<atom:link href="http://mentalpolyphonics.com/posts/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://mentalpolyphonics.com</link>
	<description>Committees exist to share blame.</description>
	<lastBuildDate>Wed, 08 Feb 2012 01:29:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Device Motion Event HTML5 Art Project</title>
		<link>http://mentalpolyphonics.com/posts/device-motion-event-html5-art-project</link>
		<comments>http://mentalpolyphonics.com/posts/device-motion-event-html5-art-project#comments</comments>
		<pubDate>Mon, 05 Dec 2011 02:26:23 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=16355</guid>
		<description><![CDATA[Go here with a Webkit HTML5 mobile browser. Shake to change the advice.]]></description>
			<content:encoded><![CDATA[<p><a href="http://mentalpolyphonics.com/advice/">Go here</a> with a Webkit HTML5 mobile browser. Shake to change the advice.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/device-motion-event-html5-art-project/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Coming ShakeWeb</title>
		<link>http://mentalpolyphonics.com/posts/the-coming-shakeweb</link>
		<comments>http://mentalpolyphonics.com/posts/the-coming-shakeweb#comments</comments>
		<pubDate>Wed, 09 Nov 2011 23:32:10 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=16164</guid>
		<description><![CDATA[Holy crap! If you&#8217;re on a device with accelerometers and a supported browser, HTML5 gets shake and orientation events &#8212; shit is about to get jiggly.]]></description>
			<content:encoded><![CDATA[<p>Holy crap! If you&#8217;re on a device with accelerometers and a supported browser, HTML5 gets shake and orientation events &#8212; shit is about to get jiggly.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/the-coming-shakeweb/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Coming VideoWeb</title>
		<link>http://mentalpolyphonics.com/posts/the-coming-videoweb</link>
		<comments>http://mentalpolyphonics.com/posts/the-coming-videoweb#comments</comments>
		<pubDate>Wed, 09 Nov 2011 02:02:01 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=16147</guid>
		<description><![CDATA[HTML5&#8242;s video and canvas elements combine to produce something amazing. If you&#8217;re a web coding person you should check it out &#8212; shit is about to get real.]]></description>
			<content:encoded><![CDATA[<p>HTML5&#8242;s video and canvas elements combine to produce something amazing. If you&#8217;re a web coding person you should check it out &#8212; shit is about to get real.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/the-coming-videoweb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 Video Backgrounds</title>
		<link>http://mentalpolyphonics.com/posts/html5-video-backgrounds</link>
		<comments>http://mentalpolyphonics.com/posts/html5-video-backgrounds#comments</comments>
		<pubDate>Wed, 02 Nov 2011 22:52:39 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=16045</guid>
		<description><![CDATA[Click through to an ugly proof-of-concept. Safari only. Makes noise (live Pink Floyd cover). What&#8217;s happening there is that a DSLR video (and crap audio) I captured around this time last year has been converted into a 3G-cellular-video-appropriate format and is playing under some of my simple Javascript canvas animations. But the concept is actually [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mentalpolyphonics.com/games/html5video/">Click through</a> to an ugly proof-of-concept. Safari only. Makes noise (live Pink Floyd cover).</p>
<p>What&#8217;s happening there is that a DSLR video (and crap audio) I captured around this time last year has been converted into a 3G-cellular-video-appropriate format and is playing under some of my simple Javascript canvas animations.</p>
<p>But the concept is actually kinda sweet (assuming further testing works): it means that I have interactive video up and running, and it was easy. It means anything you can do online you can link to video &#8212; like make a [redacted]. It&#8217;s not hard to, say, add 3D models to scenes on-the-fly (motion tracking, as always, will be an asspain). Or you could pre-load composites and trigger them in code &#8212; like have the characters wait until the viewer Tweeted them a certain go-code (not saying it&#8217;s a good idea &#8212; just that it&#8217;s possible).</p>
<p>If you didn&#8217;t try <a href="http://www.takethislollipop.com/"><em>Take This Lollipop</em></a> then go do it now and you&#8217;ll get it.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/html5-video-backgrounds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unsubscribe Link Best Practices</title>
		<link>http://mentalpolyphonics.com/posts/unsubscribe-link-best-practices</link>
		<comments>http://mentalpolyphonics.com/posts/unsubscribe-link-best-practices#comments</comments>
		<pubDate>Sun, 16 Oct 2011 22:45:19 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15660</guid>
		<description><![CDATA[I have no experience on this topic, but I have spent the last hour cleaning up my inbox and unsubscribing from bullshit. There seem to be two forms of unsubscribe link: one-click, and a page to &#8220;change preferences&#8221;. I would test Apple&#8217;s to find the best practice, but then I&#8217;d be unsubscribed from Apple. Maybe [...]]]></description>
			<content:encoded><![CDATA[<p>I have no experience on this topic, but I have spent the last hour cleaning up my inbox and unsubscribing from bullshit. There seem to be two forms of unsubscribe link: one-click, and a page to &#8220;change preferences&#8221;. I would test Apple&#8217;s to find the best practice, but then I&#8217;d be unsubscribed from Apple. Maybe I&#8217;ll make a fake account and try it out.</p>
<p>There&#8217;s a legal issue with the design of unsubscribe systems: some allow you to be added to the organization&#8217;s &#8220;do not contact&#8221; list, which in theory penalizes the business if contacts you again, intentionally or not. Keep in mind that local regulations might have something to say about how people unsubscribe from a system you build.</p>
<p>I look at the unsubscribe feature as a point of service failure, like having a dish sent back at a restaurant: the customer is unhappy with something you&#8217;ve done. It&#8217;s well known that successfully recovering from service failures can help create fierce brand loyalty. Any serious hospitality company and AppleCare are good examples of this.</p>
<p>I&#8217;m a fan of design simplicity, so I&#8217;m very biased against &#8220;preference changing&#8221; unsubscribe systems &#8212; ones where the link takes you to a page where you have to uncheck boxes and click buttons to continue the unsubscribe process. I wonder what the metrics are on these things: how many people click an unsubscribe link and then don&#8217;t change their preferences to unsubscribe from the mailout? How many try, fail, and try again? I bet the answers to those questions are, respectively, &#8220;almost none&#8221; and &#8220;way too many&#8221; &#8212; and I&#8217;m going to assume those going forward.</p>
<p>The one-click unsubscribe avoids these usability (and potential accessibility) issues but adds another &#8212; that users might accidentally unsubscribe from your service. I think this fear is what drives the prevalence of the &#8220;preferences model&#8221; (in my non-statistical sample preferences systems outnumbered one-clicks about 4:1).</p>
<p>Aside from all that, there are two main process design problems with both kinds of unsubscribe systems. First, they don&#8217;t try to recover from the service failure &#8212; they treat an unsubscription as an end of all communication with the customer. Second, at a wider scope, I think companies should avoid using email to talk to their clients en masse. Obviously you need to provide that kind of access if your customers want it, but email systems weren&#8217;t really designed with automatic mass communication in mind &#8212; one reason unsubscribe links need to exist in the first place.</p>
<p>My ideal newsletter unsubscription system would, at one click, take the customer to a page saying that they had been successfully unsubcribed from the service. It would have an undo link to handle the false-unsubscribe case. That&#8217;s the basic design, right there (plus invisible metrics, always).</p>
<p>To attempt a service failure recovery it could have a &#8220;click here to let us know why you unsubscribed&#8221; link. It&#8217;s possible to make this a text area on that first page with a submit button, but I feel that would over-clutter and confuse the page, given the prevalence of preference pages with submit buttons. An email link (or a link to a comment form page) is cleaner.</p>
<p>I&#8217;d also want to get people involved in my corporate community (another thing email is bad at &#8212; it&#8217;s one-way, not a connected graph) so I&#8217;d want people to connect with the community manager on Facebook and Twitter. &#8220;Question? Comment? Suggestion? Let us know on Facebook&#8221;, etc.</p>
<p>Community manager? Yes. All of this is predicated on having good communication in the first place &#8212; I might write more about that later &#8212; and, of course, using an unsubscribe page to trick a user into validating an address for resale is unadulterated cancer.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/unsubscribe-link-best-practices/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Animated Bezier Curves</title>
		<link>http://mentalpolyphonics.com/posts/animated-bezier-curves</link>
		<comments>http://mentalpolyphonics.com/posts/animated-bezier-curves#comments</comments>
		<pubDate>Mon, 10 Oct 2011 01:03:39 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15599</guid>
		<description><![CDATA[Click through to see something totally random I did to play with animating bezier curves in HTML5 and Javascript: it&#8217;s a pumpkin (sorta)!]]></description>
			<content:encoded><![CDATA[<p>Click through to see something totally random I did to play with animating bezier curves in HTML5 and Javascript: it&#8217;s a pumpkin (sorta)!</p>
<p><span id="more-15599"></span></p>
<p><iframe width="550px" height="550px" src="http://mentalpolyphonics.com/games/pumpkinFace/sunSpin.html" style="-moz-border-radius: 15px; -webkit-border-radius: 15px; border-radius: 15px;"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/animated-bezier-curves/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Of Coding Tests and Unfinished Lofts</title>
		<link>http://mentalpolyphonics.com/posts/of-coding-tests-and-unfinished-lofts</link>
		<comments>http://mentalpolyphonics.com/posts/of-coding-tests-and-unfinished-lofts#comments</comments>
		<pubDate>Sat, 08 Oct 2011 00:06:04 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15554</guid>
		<description><![CDATA[I&#8217;m not sure I like the idea of working in unfinished office space. That implies a kind of design sloppiness, an unfinished quality, that might end up in the products designed. OTOH I&#8217;ve worked in &#8220;finished&#8221; spaces and they imply a closure which is never really the case in software development. I suppose you need [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure I like the idea of working in unfinished office space. That implies a kind of design sloppiness, an unfinished quality, that might end up in the products designed. OTOH I&#8217;ve worked in &#8220;finished&#8221; spaces and they imply a closure which is never really the case in software development.</p>
<p>I suppose you need a mix: an architecture that allows expansion, but is sufficient (and non-lethal) at any given point in time.</p>
<p>Here&#8217;s a question from a coding test I just wrote:</p>
<blockquote><p>Question 4: There is a class of 30 students. Each specifies 3 students they would like to sit with and 3 they would not.</p>
<p>Table 1: 5 seats.<br />
Table 2: 7 seats.<br />
Table 3: 6 seats.<br />
Table 4: 5 seats.<br />
Table 5: 7 seats.</p>
<p>Describe how would you go about constructing a seating plan. The data are available in any format you like.
</p></blockquote>
<p>Click through for my answer and then fire away in the comments.</p>
<p><span id="more-15554"></span></p>
<p>Answer 1: Let the students seat themselves. Record the resulting plan.</p>
<p>Answer 2: The data are arranged in a graph of students, with low edge weights connecting friends and high edge weights connecting enemies. Use A* to find the lowest-cost paths through the graph.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/of-coding-tests-and-unfinished-lofts/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>High Performance Javascript</title>
		<link>http://mentalpolyphonics.com/posts/high-performance-javascript</link>
		<comments>http://mentalpolyphonics.com/posts/high-performance-javascript#comments</comments>
		<pubDate>Mon, 03 Oct 2011 03:45:49 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15463</guid>
		<description><![CDATA[Through the link is an HTML5/JS application that uses some high-performance calls to replicate something I once did and posted here in Flash (which might be dead). It loads some audio files and spins while detecting when the playing stops. It should work in all modern browsers on all modern platforms. You need iframes, brofeem! [...]]]></description>
			<content:encoded><![CDATA[<p>Through the link is an HTML5/JS application that uses some high-performance calls to replicate something I once did and posted here in Flash (which might be dead). It loads some audio files and spins while detecting when the playing stops. It should work in all modern browsers on all modern platforms.</p>
<p><span id="more-15463"></span></p>
<p><iframe height="550px" width="550px" style="border: 0px;" src="http://mentalpolyphonics.com/games/spinMed/sunSpin.html">You need iframes, brofeem!</iframe></p>
<p>The key to high-performance Javascript is to separate your physics updates from your animation updates and use a requestAnimationFrame call instead of a normal setTimeout for graphics. Essentially the application ends up with a &#8220;multithreaded&#8221; MVC pattern &#8212; and might need &#8220;mutexes&#8221; in future. In quotes because not really.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/high-performance-javascript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git is Awesome</title>
		<link>http://mentalpolyphonics.com/posts/git-is-awesome</link>
		<comments>http://mentalpolyphonics.com/posts/git-is-awesome#comments</comments>
		<pubDate>Sun, 02 Oct 2011 20:45:18 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15446</guid>
		<description><![CDATA[Good software engineering is mostly about doing a few fairly simple things very well, over and over again. One of the basics that every small project should have is version control and until recently I&#8217;ve been a Subversion guy. Since I&#8217;m getting back into game development I&#8217;ve started coding again and, frankly, svn sucks. Its [...]]]></description>
			<content:encoded><![CDATA[<p>Good software engineering is mostly about doing a few fairly simple things very well, over and over again.</p>
<p>One of the basics that every small project should have is version control and until recently I&#8217;ve been a Subversion guy. Since I&#8217;m getting back into game development I&#8217;ve started coding again and, frankly, svn sucks. Its interface is just not intuitive.</p>
<blockquote><p>&#8220;The slogan of Subversion for a while was &#8220;CVS done right&#8221;, or something like that, and if you start with that kind of slogan, there&#8217;s nowhere you can go. There is no way to do CVS right.&#8221; -Linus</p></blockquote>
<p>Several talented coders I know have been raving about <a href="http://en.wikipedia.org/wiki/Git_%28software%29">git</a> and something I wanted to install recently forced me to clone its repository off github and compile it manually. I decided to give it a spin for local development using <a href="http://tiredblogger.wordpress.com/2009/11/09/creating-local-git-repositories-yeah-its-that-simple/">this Windows git tutorial</a> as a guide.</p>
<p>It&#8217;s amazingly simple. I love it. All my future projects will now be git controlled. It should make it relatively easy to share too &#8212; soon if you want code for a game, you&#8217;ll be able to clone it. It might also make deployment awesome (how sweet would it be for a request for an HTML5 game page to first trigger a clone of all the latest code).</p>
<p>We could, perhaps, even start versioning MPF themes, which we should have been doing this whole time.</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/git-is-awesome/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Daz and Dorian&#8217;s Bass Buttons</title>
		<link>http://mentalpolyphonics.com/posts/daz-and-dorians-bass-buttons</link>
		<comments>http://mentalpolyphonics.com/posts/daz-and-dorians-bass-buttons#comments</comments>
		<pubDate>Wed, 14 Sep 2011 23:39:03 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[electronic music]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mentalpolyphonics.com/?p=15193</guid>
		<description><![CDATA[My buddy Daz and his buddy Dorian made The Bass Buttons, a Chrome extension under Daz&#8217;s Serious Business brand. It&#8217;s made for desk jockeys who dig their disco as much as they dig Chrome (or maybe more).]]></description>
			<content:encoded><![CDATA[<p>My buddy Daz and his buddy Dorian made <a href="https://chrome.google.com/webstore/detail/pmmdjnpbiilhfjknfabgoebakgnefake">The Bass Buttons</a>, a Chrome extension under Daz&#8217;s Serious Business brand.</p>
<p><iframe width="560" height="345" src="http://www.youtube-nocookie.com/embed/zplAEYQiyag" frameborder="0" allowfullscreen></iframe></p>
<p>It&#8217;s made for desk jockeys who dig their disco as much as they dig Chrome (or maybe more).</p>
]]></content:encoded>
			<wfw:commentRss>http://mentalpolyphonics.com/posts/daz-and-dorians-bass-buttons/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

