<?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>Digitologist</title>
	<atom:link href="http://digitologist.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://digitologist.com</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Fri, 20 May 2011 03:39:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>o_0 and also :&#124;</title>
		<link>http://digitologist.com/2011/05/o_0-and-also/</link>
		<comments>http://digitologist.com/2011/05/o_0-and-also/#comments</comments>
		<pubDate>Fri, 20 May 2011 03:39:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[hobby electronics]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=304</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://digitologist.com/wp-content/uploads/2011/05/220564_10100411314499249_803888_57577383_665186_o1.jpg"><img class="alignright size-full wp-image-306" title="220564_10100411314499249_803888_57577383_665186_o" src="http://digitologist.com/wp-content/uploads/2011/05/220564_10100411314499249_803888_57577383_665186_o1.jpg" alt="" width="551" height="737" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/05/o_0-and-also/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eReader Salvage</title>
		<link>http://digitologist.com/2011/05/ereader-salvage/</link>
		<comments>http://digitologist.com/2011/05/ereader-salvage/#comments</comments>
		<pubDate>Wed, 18 May 2011 03:36:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[hobby electronics]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=299</guid>
		<description><![CDATA[Roommate gave me his old Pandigital eReader, which he never cared for, which gave me the perfect opportunity to take it apart and harvest its innards (and also have a cocktail!). A WiFi radio, two cute little speakers, a rechargeable battery, the LCD, and the digitizer &#8212; There&#8217;s good stuff in there. Once I figure [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://digitologist.com/wp-content/uploads/2011/05/disassembledPandigital.jpg"><img class="alignright size-full wp-image-300" title="disassembledPandigital" src="http://digitologist.com/wp-content/uploads/2011/05/disassembledPandigital.jpg" alt="" width="545" height="407" /></a></p>
<p>Roommate gave me his old Pandigital eReader, which he never cared for, which gave me the perfect opportunity to take it apart and harvest its innards (and also have a cocktail!).</p>
<p>A WiFi radio, two cute little speakers, a rechargeable battery, the LCD, and the digitizer &#8212; There&#8217;s good stuff in there.  Once I figure out how to break out the ribbon cables WATCH OUT, WORLD.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/05/ereader-salvage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nerding</title>
		<link>http://digitologist.com/2011/05/nerding/</link>
		<comments>http://digitologist.com/2011/05/nerding/#comments</comments>
		<pubDate>Thu, 12 May 2011 03:37:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[image analysis]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=286</guid>
		<description><![CDATA[So I hit a wall on my Image Analysis project, trying to get this damnable histogram specification section to work. Got it working in pure AS3, but it&#8217;s too slow to deploy and I can&#8217;t get it to work in Pixel Bender. It needs to sample the color value of a pixel in the source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://digitologist.com/wp-content/uploads/2011/05/Buzzer1.jpg" class="alignright"><img class="alignright size-full wp-image-291" title="Buzzer" src="http://digitologist.com/wp-content/uploads/2011/05/Buzzer1.jpg" alt="" width="300" height="402" /></a><br />
So I hit a wall on my Image Analysis project, trying to get this damnable histogram specification section to work.  Got it working in pure AS3, but it&#8217;s too slow to deploy and I can&#8217;t get it to work in Pixel Bender.  It needs to sample the color value of a pixel in the source image, and then use that value as the lookup index for another input vector, and it Just. Will. Not. Work.</p>
<p>Something in that the available range of pixel values in PB is [0,1], and the conversions are just not working out.</p>
<p>But! Anyway, in the meantime, while I bang my head against this wall, I&#8217;m a-learnin&#8217; my way through Make: Electronics as well.  This thing makes a noise, and I love it so.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/05/nerding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2.1.1 Histogram Expansion</title>
		<link>http://digitologist.com/2011/04/2-1-1-histogram-expansion/</link>
		<comments>http://digitologist.com/2011/04/2-1-1-histogram-expansion/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 20:45:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[histogram]]></category>
		<category><![CDATA[histogram expansion]]></category>
		<category><![CDATA[image analysis]]></category>
		<category><![CDATA[pixel bender]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=253</guid>
		<description><![CDATA[Background: I&#8217;m working my way through the book Practical Algorithms Image Analysis, and documenting my progress here. I remain WELL AWARE that I&#8217;m reinventing the wheel, and that nearly all of this is, you know, already built into Flash, but it&#8217;ll be a learnful experience. Building on my Histogram viewer, the next task is to [...]]]></description>
			<content:encoded><![CDATA[<p><em>Background: <a href="http://digitologist.com/2011/04/practical-algorithms-for-image-analysis-post-1/">I&#8217;m working my way through the book Practical Algorithms Image Analysis</a>, and documenting my progress here.  I remain WELL AWARE that I&#8217;m reinventing the wheel, and that nearly all of this is, you know, already built into Flash, but it&#8217;ll be a learnful experience. </em></p>
<p>Building on <a href="http://digitologist.com/2011/04/practical-algorithms-for-image-analysis-post-1/">my Histogram viewer</a>, the next task is to select a sub-range of the input intensity histogram and remap it to a full dynamic range in an output histogram, referred to by the text as &#8220;Histogram Expansion (H<sub>E</sub>)&#8221;.</p>
<p>The helpful linear mapping function to stretch the interval [x<sub>min</sub>, x<sub>max</sub>] to cover the full [0,255] range is provided as:</p>
<div><img title="HistogramExpansion" src="http://digitologist.com/wp-content/uploads/2011/04/HistogramExpansion.png" alt="" width="208" height="40" /></div>
<p class="clearboth">
Now, for this to work for color images, that function will have to be performed for each of the red, green, and blue intensity values for each pixel.  Solving this through <em>.getPixel()</em> and <em>.setPixel()</em> proved to be much too slow and processor-heavy, so I made a quick PixelBender kernel to get the job done.  Click through for a demo and explanation.</p>
<p><span id="more-253"></span><br />

<object width="610" height="510">
<param name="movie" value="http://digitologist.com/wp-content/uploads/2011/04/ImgAnalysis2_2.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<embed type="application/x-shockwave-flash" width="610" height="510" src="http://digitologist.com/wp-content/uploads/2011/04/ImgAnalysis2_2.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<p>So the thing is, you&#8217;re not really performing a calculation on the input histogram, getting an output histogram, and then building an output image out of it (since that doesn&#8217;t really make sense), you&#8217;re just observing the input histogram to pick the <em>[x<sub>min</sub>, x<sub>max</sub>]</em> range, and then using those values to perform the calculation on the input image, clipping the available intensity levels for each pixel so that they&#8217;re either <em>[0, x<sub>min</sub>:x<sub>max</sub>, 255]</em> which gets you to the output image, which then you create a NEW histogram from so that you can observe that the calculation, in fact, had the effect of stretching out that portion of the histogram. Just go with it.</p>
<p>Starting out, I made a function that takes the input value (between 0 and 255) and remaps it onto the range <em>[xmin,xmax]</em>:</p>
<pre class="brush: as3; title: ;">
protected function StretchAlgorithm(input:int, xmin:int, xmax:int):int {
	var output:Number
	if (input &lt; xmin) {
		output = 0;
	} else if (input &gt; xmax ) {
		output = 255;
	} else {
		output = ((input - xmin)/(xmax-xmin))*255;
	}
	return int(output);
}
</pre>
<p>Then I wrote the larger function that scans through the image&#8217;s <em>BitmapData() </em>in raster order and performs this function three times for each pixel, combines the result, and sets that pixel value in an output <em>BitmapData()</em>:</p>
<pre class="brush: as3; title: ;">
protected function HistogramStretch(input:BitmapData, xmin:int, xmax:int):BitmapData {
	var w:int = input.width;
	var h:int = input.height;
	var output:BitmapData = new BitmapData(w,h);
	input.lock();
	output.lock();

	for (var i:int = 0; i &lt; w; ++i) {
		for (var j:int = 0; j &lt; h; ++j) {
			var color:uint = input.getPixel(i,j);
			var red:int = StretchAlgorithm(color &gt;&gt; 16, xmin,xmax);
			var green:int = StretchAlgorithm(color &gt;&gt; 8 &amp; 0xFF, xmin,xmax);
			var blue:int = StretchAlgorithm(color &amp; 0xFF, xmin,xmax);
			var newColor:uint = red &lt;&lt; 16 | green &lt;&lt; 8 | blue;
			output.setPixel(i,j,newColor);
		}
	}
	input.unlock();
	output.unlock();

	return output;
}
</pre>
<p>For my example, I populate the <em>xmin</em> and <em>xmax</em> values by checking the position of the two sliders.  Trouble is, all those <em>.getPixel()</em> and <em>.setPixel()</em> calls start bogging down my wee little MacBook Air and make everything run at maybe 2 fps.  So knowing that this is precisely the kind of thing PixelBender is meant for, I came up with a Shader kernel that does it instead:</p>
<pre class="brush: plain; title: ;">
&lt;languageVersion : 1.0;&gt;

kernel HistogramExpansion

&lt;   namespace : &quot;digitologist.com&quot;;
    vendor : &quot;Jon Thompson&quot;;
    version : 1;
    description : &quot;A simple histogram expansion filter&quot;;
&gt;
{
    input image4 src;
    output pixel4 dst;
    parameter int Min &lt;
        minValue: 0;
        maxValue: 255;
        defaultValue: 0;
    &gt;;
    parameter int Max &lt;
        minValue: 0;
        maxValue: 255;
        defaultValue:255;
    &gt;;

    void
    evaluatePixel()
    {
        float xmin = float(Min / 255);
        float xmax = float(Max / 255);
        float4 inputColor = sampleNearest(src,outCoord());
        dst.a = inputColor.a;
        dst.rgb = (inputColor.rgb - float3(xmin)) / (xmax-xmin);
    }
}
</pre>
<p>(I&#8217;m still only learning the ins and outs of Pixel Bender, so it took annoyingly long to get the floats vs. ints and such right, and a loooong time before I finally remembered that PB color values range from [0, 1] instead of [0,255])  </p>
<p>This way I can just load that into Flash, store it as ExpansionShaderFilter and use <em>.applyFilter()</em> on the input <em>BitmapData()</em> thusly:</p>
<pre class="brush: as3; title: ;">
ExpansionShaderFilter.data.Min.value = [xmin];
ExpansionShaderFilter.data.Max.value = [xmax];

OutputBitmapData.applyFilter(stretchedData,new Rectangle(0,0,320,240),new Point(),new ShaderFilter(ExpansionShaderFilter));
</pre>
<p>So that&#8217;s that, an evenly-spaced stretching of a sub-range of intensity values to fill the full range of an output image. Next will be <em>un-</em>evenly spaced methods, like ramps or curves. </p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/2-1-1-histogram-expansion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical Algorithms for Image Analysis &#8211; Post #1</title>
		<link>http://digitologist.com/2011/04/practical-algorithms-for-image-analysis-post-1/</link>
		<comments>http://digitologist.com/2011/04/practical-algorithms-for-image-analysis-post-1/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 05:29:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[image analysis]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=219</guid>
		<description><![CDATA[I picked up this book, randomly, and I&#8217;m enjoying working my way through it. It starts off with the fundamentals, things like scaling and rotating images, but then quickly moves on to more complex stuff. I thought it might be a fun challenge to work through the book in Flash and Actionscript, not by just [...]]]></description>
			<content:encoded><![CDATA[<p><a class="alignright" href="http://www.amazon.com/Practical-Algorithms-Image-Analysis-CD-ROM/dp/0521660653"><img class=" size-full wp-image-220" title="Practical Algorithms for Image Analysis" src="http://digitologist.com/wp-content/uploads/2011/04/BookCover.jpg" alt="" width="207" height="300" /></a>I picked up this book, randomly, and I&#8217;m enjoying working my way through it. It starts off with the fundamentals, things like scaling and rotating images, but then quickly moves on to more complex stuff.</p>
<p>I thought it might be a fun challenge to work through the book in Flash and Actionscript, not by just porting over the existing code examples, but by analyzing the text and coming up with my own implementation from scratch.  Think I&#8217;ll learn more from rolling my own than if I&#8217;m just replacing calls for calls.</p>
<p>I&#8217;m especially excited for everyone to constantly remind me that Flash has helpfully taken care of the whole &#8220;rotating an image&#8221; thing.  I&#8217;m definitely not going to be the first, and I most assuredly won&#8217;t be the best, but doggone it, it&#8217;ll be fun to try.</p>
<p>First example starts easy enough: Histograms!  Specifically just, like, looking at them.</p>
<p>So I made my own histogram visualizer, based loosely on the graphs I use for the Pulse project.  Click through and I&#8217;ll walk you through it.<br />
<span id="more-219"></span></p>
<h3>Chapter 2.1: Intensity Histogram: Global Features</h3>
<p>The first lessons are about how to look at the histogram of an image and make some decision about it based just on that.  Things like, if there are two strong peaks in the histogram, they&#8217;re probably the foreground and the background.  Or if there&#8217;s there&#8217;s only one bin filled, then the image is going to be just an entirely featureless gray.</p>
<p>
<object width="610" height="260">
<param name="movie" value="http://digitologist.com/wp-content/uploads/2011/04/ImgAnalysis2_1.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<embed type="application/x-shockwave-flash" width="610" height="260" src="http://digitologist.com/wp-content/uploads/2011/04/ImgAnalysis2_1.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<pre class="brush: as3; title: ;">
protected function CreateHistogram(input:Bitmap,scale:Number=1):Bitmap {
	var HistogramData:Vector.&lt;Vector.&lt;Number&gt;&gt; = input.bitmapData.histogram();
	var maxHeight:int = 100;
	var channelCounter:int = 1;
	var Histogram:Bitmap = new Bitmap(new BitmapData(256,maxHeight, false,0x00000000));
	Histogram.bitmapData.lock()
	for (var i:int = 0; i &lt; 4; ++i) {
		var oneChannel:BitmapData = new BitmapData(256,maxHeight,false,0x00000000);
		for (var j:int = 0; j &lt; 256; ++j) {
			var height:int = Math.min(maxHeight,(HistogramData[i][j])/scale);
			oneChannel.fillRect(new Rectangle(j,maxHeight-height,1,height),0xFFFFFFFF);
		}
		Histogram.bitmapData.copyChannel(oneChannel,new Rectangle(0,0,256,maxHeight),new Point(),channelCounter,channelCounter);
		channelCounter *= 2;
	}
	oneChannel.dispose();
	Histogram.bitmapData.unlock();
	return Histogram;
}
</pre>
<p>First I take a shortcut and use the built-in BitmapData.histogram() function to actually get the data.  It gives you back a 4-row Vector, one each for red/green/blue/alpha, each with 256 bins that count up the sum total of the pixels of each of the 256 possible brightness levels for that channel. Then I create the output Bitmap and leave it blacked out.</p>
<p>Then I loop through the histogram data by channel (skipping the alpha because, whatever) and for each of the brightness levels, I draw a single-pixel column for its height onto a temporary BitmapData object, using 0xFFFFFFFF.  Then once I&#8217;ve gone through all 256 bins, I use BitmapData.copyChannel() to copy only a single color channel over to the final Histogram object.  I&#8217;ve seen examples that use all sorts of tricky color blending, but whatevs.  Pretty sure my way&#8217;s easier.</p>
<p>So there you have it.  Further steps are going to expand on this, or at least help you make decisions based on how the histogram is shaped.  More to follow.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/practical-algorithms-for-image-analysis-post-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>fastICA in AS3</title>
		<link>http://digitologist.com/2011/04/fastica-in-as3-2/</link>
		<comments>http://digitologist.com/2011/04/fastica-in-as3-2/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 02:03:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=213</guid>
		<description><![CDATA[[click the image above for a demonstration] I&#8217;m not going to spend a lot of time explaining what fastICA is, or what Independent Component Analysis is in general, but if you need it in Actionscript and you&#8217;ve been looking for it, here it is. I only vaguely understand how it works (for now!), but math [...]]]></description>
			<content:encoded><![CDATA[<p>[click the image above for a demonstration] </p>
<p>I&#8217;m not going to spend a lot of time explaining what <a href="http://en.wikipedia.org/wiki/FastICA" target="_blank">fastICA</a> is, or what <a href="http://en.wikipedia.org/wiki/Independent_component_analysis" target="_blank">Independent Component Analysis</a> is in general, but if you need it in Actionscript and you&#8217;ve been looking for it, here it is.  <span id="more-213"></span>I only vaguely understand how it works (for now!), but math is math and code is code, and once I had my Matrix Math package set up, it was just a matter of effort and optimization.</p>
<p>It&#8217;s ported it over from <a href="http://mdp-toolkit.sourceforge.net/" target="_blank">the MDP package in Python</a>.  It&#8217;s not the full implementation, just as much as I needed to make <a href="http://digitologist.com/2011/04/i-can-read-your-pulse-by-webcam-2/" target="_self">the Pulse project</a> work, so at some point I&#8217;m going to finish porting over the rest of the internal methods.  It&#8217;s mad slow, yo!  My next goal is to offload the heavier calculations to PixelBender, like I did with the Lomb-Scargle code <a href="http://digitologist.com/2011/04/i-can-read-your-pulse-by-webcam-2/" target="_self">the Pulse project</a> used, but until then, you&#8217;ll need to only run it against reasonably-small data sets if you want it to run with anything approaching &#8220;speed&#8221;.</p>
<p>While I work on getting a code repository set up, use the contact form or leave a message in the comments if you want me to send it to you, I want to share!  Click through, or on the image above, to launch a demo.</p>
<p>
<object width="610" height="678">
<param name="movie" value="http://digitologist.com/wp-content/uploads/2011/04/ICAFlex.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<embed type="application/x-shockwave-flash" width="610" height="678" src="http://digitologist.com/wp-content/uploads/2011/04/ICAFlex.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/fastica-in-as3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fastICA in AS3</title>
		<link>http://digitologist.com/2011/04/fastica-in-as3/</link>
		<comments>http://digitologist.com/2011/04/fastica-in-as3/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 02:02:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Blind Source Separation]]></category>
		<category><![CDATA[fastICA]]></category>
		<category><![CDATA[Independent Component Analysis]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=86</guid>
		<description><![CDATA[I&#8217;m not going to spend a lot of time explaining what fastICA is, or what Independent Component Analysis is in general, but if you need it in Actionscript and you&#8217;ve been looking for it, here it is.  I only vaguely understand how it works (for now!), but math is math and code is code, and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not going to spend a lot of time explaining what <a href="http://en.wikipedia.org/wiki/FastICA" target="_blank">fastICA</a> is, or what <a href="http://en.wikipedia.org/wiki/Independent_component_analysis" target="_blank">Independent Component Analysis</a> is in general, but if you need it in Actionscript and you&#8217;ve been looking for it, here it is.  I only vaguely understand how it works (for now!), but math is math and code is code, and once I had my Matrix Math package set up, it was just a matter of effort and optimization.</p>
<p>It&#8217;s ported it over from <a href="http://mdp-toolkit.sourceforge.net/" target="_blank">the MDP package in Python</a>.  It&#8217;s not the full implementation, just as much as I needed to make <a href="http://digitologist.com/2011/04/i-can-read-your-pulse-by-webcam-2/" target="_self">the Pulse project</a> work, so at some point I&#8217;m going to finish porting over the rest of the internal methods.  It&#8217;s mad slow, yo!  My next goal is to offload the heavier calculations to PixelBender, like I did with the Lomb-Scargle code <a href="http://digitologist.com/2011/04/i-can-read-your-pulse-by-webcam-2/" target="_self">the Pulse project</a> used, but until then, you&#8217;ll need to only run it against reasonably-small data sets if you want it to run with anything approaching &#8220;speed&#8221;.</p>
<p>While I work on getting a code repository set up, use the contact form or leave a message in the comments if you want me to send it to you, I want to share!  Click through, or on the image above, to launch a demo.</p>
<p><span id="more-86"></span></p>
<p>
<object width="610" height="678">
<param name="movie" value="http://digitologist.com/wp-content/uploads/2011/04/ICAFlex.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<embed type="application/x-shockwave-flash" width="610" height="678" src="http://digitologist.com/wp-content/uploads/2011/04/ICAFlex.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/fastica-in-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross-Country Snowball Fight!</title>
		<link>http://digitologist.com/2011/04/cross-country-snowball-fight/</link>
		<comments>http://digitologist.com/2011/04/cross-country-snowball-fight/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 17:37:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=199</guid>
		<description><![CDATA[Spring is fast approaching here in NYC, and snow showers are (hopefully) behind us. The LABS group, though, is saddened by this, because it means our interactive 2010 Holiday installation is officially out of season. The concept we settled on, coming from our initial brainstorms, was to set up some sort of live telepresence game [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/21654029?portrait=0" width="535" height="301" frameborder="0"></iframe><br />
Spring is fast approaching here in NYC, and snow showers are (hopefully) behind us.  The LABS group, though, is saddened by this, because it means our interactive 2010 Holiday installation is officially out of season.<br />
<span id="more-199"></span></p>
<p>The concept we settled on, coming from our initial brainstorms, was to set up some sort of live telepresence game between mcgarrybowen&#8217;s New York and Chicago offices.  We figured a snowball fight would be a fun diversion, but we had to decide on two things: How does a player <em>throw</em> a snowball, and how does a player <em>get hit</em> by a snowball?</p>
<p>We wanted a mobile device interface for players, but didn&#8217;t want anyone to have to download anything to play, so we chose to create a mobile site to serve as the &#8220;controller&#8221;, and gave it directional buttons to aim an on-screen target and a big &#8220;Throw&#8221; button to fire.</p>
<p>The challenge then became how to treat the experience of being &#8220;hit&#8221; with the snowball.  If it&#8217;s a video-based experience, we could put big &#8220;splat&#8221; animations on the incoming side&#8217;s screen, but that didn&#8217;t seem like enough.  We needed a more engaging experience, maybe something that the other side could try to dodge.  We had the great idea to hook up a projector, in addition to the video screen, shining down onto the users.  That way, the throw-er could move a projected target around the opposite city&#8217;s office and onto the throw-ee, and incoming snowballs could be projected down onto the floor and travel from the screen to the target.</p>
<p>The final setup included an rolling stand for the TV, but with a high shelf mounted above the TV with a mirror aiming the short-throw projector&#8217;s output back down onto the ground and the users.  We also included a joystick controller for non-smartphone users, and a bass shaker attached to the back that would rattle the screen whenever it was hit with a snowball.  Everything was hooked into a Mac Mini mounted to the back of the TV.</p>
<p>All told, we had over a 37,000 individual interactions with the mobile site including a total of 7,230 snowballs thrown, 5,314 coming from Chicago and 1,916 coming from NYC, enough to cover the office in a 12-foot mound of snow!</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/cross-country-snowball-fight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First test print with the MakerBot</title>
		<link>http://digitologist.com/2011/04/first-test-print-with-the-makerbot/</link>
		<comments>http://digitologist.com/2011/04/first-test-print-with-the-makerbot/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 07:10:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=193</guid>
		<description><![CDATA[Since I know I won&#8217;t be with the agency much longer, I thought it would be a great parting gift to assemble the MakerBot Thing-O-Matic the team had ordered, and along the way pick up tips and experience for when I buy my own for home. Some people get really cranky when they see me [...]]]></description>
			<content:encoded><![CDATA[<p><iframe class="alignright" src="http://player.vimeo.com/video/21960910?byline=0" width="400" height="711" frameborder="0"></iframe><br />
Since I know I won&#8217;t be with the agency much longer, I thought it would be a great parting gift to assemble the MakerBot Thing-O-Matic the team had ordered, and along the way pick up tips and experience for when I buy my own for home.  </p>
<p>Some people get really cranky when they see me working on it, demanding to know what it&#8217;s good for and pointing out that it&#8217;s not super-great resolution and all the blaugh-blaugh-I-DO-declare.  BALLS, I say.  I&#8217;m not going to be making ART with it, I&#8217;m going to be making tools and parts.  And as long as you can take a file and some sandpaper to it, the finish quality is kind of up to the operator, thank you very much.  </p>
<p>I managed to get one solid print out of it before the whole thing died in my arms yesterday.  Hopefully I can figure out what went wrong, I think it&#8217;s something with the power supply, and get it up and running permanently before I leave for good.  And mine&#8217;s in the mail!</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/first-test-print-with-the-makerbot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foursquare is basically just for marketers.</title>
		<link>http://digitologist.com/2011/04/foursquare-is-basically-just-for-marketers/</link>
		<comments>http://digitologist.com/2011/04/foursquare-is-basically-just-for-marketers/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 05:40:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://digitologist.com/?p=127</guid>
		<description><![CDATA[On any given day in NYC, something like half of all trending locations are going to be some sort of player in the marketing or media fields. I&#8217;m reminded that New York really only has five industries: Publishing, Advertising, Fashion, Finance, and TV. Guess which of those industries has a lot of free time on [...]]]></description>
			<content:encoded><![CDATA[<p><a class="alignright" href="http://digitologist.com/wp-content/uploads/2011/04/foursquare.jpg"><img class="alignright size-full wp-image-156" title="foursquare" src="http://digitologist.com/wp-content/uploads/2011/04/foursquare.jpg" alt="" width="240" height="766" /></a>
<p>On any given day in NYC, something like half of all trending locations are going to be some sort of player in the marketing or media fields.  I&#8217;m reminded that New York really only has five industries: Publishing, Advertising, Fashion, Finance, and TV.  Guess which of those industries has a lot of free time on its hands to diddle around on their iPhones.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitologist.com/2011/04/foursquare-is-basically-just-for-marketers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
