<?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>Almer/Blank Labs</title>
	<atom:link href="http://labs.almerblank.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.almerblank.com</link>
	<description>Blog of the Talent at Almer/Blank</description>
	<lastBuildDate>Tue, 02 Mar 2010 17:25:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Welcome to Synthia</title>
		<link>http://labs.almerblank.com/2010/03/welcome-to-synthia-2/</link>
		<comments>http://labs.almerblank.com/2010/03/welcome-to-synthia-2/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 17:25:17 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Synthia]]></category>
		<category><![CDATA[ludi]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1328</guid>
		<description><![CDATA[We are back from FITC Amsterdam, and it was, as usual, a really great time.

While in Amsterdam, Almer/Blank debuted <a href="http://music.almerblank.com" target="_blank">Synthia</a>, the first publicly usable musical instrument to emerge from Project Ludi at Almer/Blank Labs.

<object width="320" height="240"><param name="movie" value="http://music.almerblank.com/ludi/synthia_v1/synthia_webShareViewer.swf?id=272"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://music.almerblank.com/ludi/synthia_v1/synthia_webShareViewer.swf?id=272" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"></embed></object>

Synthia, on the web, is a Flash 10 application that translates pictures into music -- infinite classical canons -- using a small set of rules that establish key, restricted notes within the key, tempo, instrumentation and the score. Synthia was actually developed as a demonstration app to accompany R Blank's talk, 'Hearing Pictures', but the results were so fun to play with, that we decided to make it a publicly usable web-application, where anyone can upload any picture, have Synthia turn it into music, and then share it with your friends and embed it in any web page.

We will be posting a lot more about Synthia in the coming weeks, and updating her rules and features over the coming months. But, for now, I'd encourage all of you to play around with the <a href="http://music.almerblank.com/composer">Synthia Composer</a> (just upload an image and listen), or just <a href="http://music.almerblank.com/gallery">browse the gallery</a> to hear what other pictures sound like.

And, if while playing with Synthia, you have some ideas on how we might commercialize her, <a href="http://music.almerblank.com/suggest">share your thoughts and ideas</a> and have a chance to win an iPad.

Share and enjoy!

-r
]]></description>
			<content:encoded><![CDATA[<p>We are back from FITC Amsterdam, and it was, as usual, a really great time.</p>
<p>While in Amsterdam, Almer/Blank debuted <a href="http://music.almerblank.com" target="_blank">Synthia</a>, the first publicly usable musical instrument to emerge from Project Ludi at Almer/Blank Labs.</p>
<p><object width="320" height="240"><param name="movie" value="http://music.almerblank.com/ludi/synthia_v1/synthia_webShareViewer.swf?id=272"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://music.almerblank.com/ludi/synthia_v1/synthia_webShareViewer.swf?id=272" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"></embed></object></p>
<p>Synthia, on the web, is a Flash 10 application that translates pictures into music &#8212; infinite classical canons &#8212; using a small set of rules that establish key, restricted notes within the key, tempo, instrumentation and the score. Synthia was actually developed as a demonstration app to accompany R Blank&#8217;s talk, &#8216;Hearing Pictures&#8217;, but the results were so fun to play with, that we decided to make it a publicly usable web-application, where anyone can upload any picture, have Synthia turn it into music, and then share it with your friends and embed it in any web page.</p>
<p>We will be posting a lot more about Synthia in the coming weeks, and updating her rules and features over the coming months. But, for now, I&#8217;d encourage all of you to play around with the <a href="http://music.almerblank.com/composer">Synthia Composer</a> (just upload an image and listen), or just <a href="http://music.almerblank.com/gallery">browse the gallery</a> to hear what other pictures sound like.</p>
<p>And, if while playing with Synthia, you have some ideas on how we might commercialize her, <a href="http://music.almerblank.com/suggest">share your thoughts and ideas</a> and have a chance to win an iPad.</p>
<p>Share and enjoy!</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2010/03/welcome-to-synthia-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZamfBrowser 1.2 and ZendAmfServiceBrowser Update</title>
		<link>http://labs.almerblank.com/2010/02/zamfbrowser-1-2-and-zendamfservicebrowser-update/</link>
		<comments>http://labs.almerblank.com/2010/02/zamfbrowser-1-2-and-zendamfservicebrowser-update/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 21:58:42 +0000</pubDate>
		<dc:creator>Omar Gonzalez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code & Samples]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Zamf]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[ZendAMF]]></category>
		<category><![CDATA[ZendAMF Service Browser]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1321</guid>
		<description><![CDATA[Over the weekend I updated both the ZamfBrowser application and the ZendAmfServiceBrowser class that gives the ZamfBrowser information about your ZendAMF services set up.  The ZendAmfServiceBrowser class now supports using the Zend_Amf_Server-&#62;addDirectory() method.  I also integrated some optimization suggestions submitted by Marijn Huizendveld.  Thanks for your contributions Marijn!  ZamfBrowser got updates to fix all the [...]]]></description>
			<content:encoded><![CDATA[<p>Over the weekend I updated both the ZamfBrowser application and the ZendAmfServiceBrowser class that gives the ZamfBrowser information about your ZendAMF services set up.  <span id="more-1321"></span>The ZendAmfServiceBrowser class now supports using the Zend_Amf_Server-&gt;addDirectory() method.  I also integrated some optimization suggestions submitted by Marijn Huizendveld.  Thanks for your contributions Marijn!  ZamfBrowser got updates to fix all the currently reported bugs.  You can get more info about what exactly was updated, as well as download the source, at http://zamfbrowser.riaforge.com.  Info on the ZendAmfServiceBrowser class update can be found at http://www.zamfbrowser.org</p>
<p>If you have suggestions for enhancements or more bug fixes please do report them at http://zamfbrowser.riaforge.com  If you don&#8217;t want to sign up for RIAForge just send me an email to omar@almerblank.com, I&#8217;d really like to hear your suggestions and bug reports!</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2010/02/zamfbrowser-1-2-and-zendamfservicebrowser-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Welcome To Synthia</title>
		<link>http://labs.almerblank.com/2010/02/welcome-to-synthia/</link>
		<comments>http://labs.almerblank.com/2010/02/welcome-to-synthia/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 16:48:53 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Synthia]]></category>
		<category><![CDATA[ludi]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1326</guid>
		<description><![CDATA[Howdy:

As I write this, I'm also packing up to head off to Amsterdam in the morning, to debut Synthia at <a href="http://fitc.ca/amsterdam" target="_blank">FITC Amsterdam</a>, so I will unfortunately have to be brief.

I will be posting more information in the coming weeks, as we, at <a href="http://labs.almerblank.com" target="_blank">Almer/Blank Labs</a> continue plugging away, refining Synthia and adding more features to the site.

Until then, I've posted <a href="http://music.almerblank.com/about">a few notes</a> on how Synthia works and how she came about. But, of course, we know that what you really want to do is play with Synthia. So, go ahead, <a href="http://music.almerblank.com/composer">start composing now</a>, or <a href="http://music.almerblank.com/gallery">browse the gallery of other compositions</a>. 

And, of course, let all your friends know about Synthia!

Share and enjoy,

-r
]]></description>
			<content:encoded><![CDATA[<p>Howdy:</p>
<p>As I write this, I&#8217;m also packing up to head off to Amsterdam in the morning, to debut Synthia at <a href="http://fitc.ca/amsterdam" target="_blank">FITC Amsterdam</a>, so I will unfortunately have to be brief.</p>
<p>I will be posting more information in the coming weeks, as we, at <a href="http://labs.almerblank.com" target="_blank">Almer/Blank Labs</a> continue plugging away, refining Synthia and adding more features to the site.</p>
<p>Until then, I&#8217;ve posted <a href="http://music.almerblank.com/about">a few notes</a> on how Synthia works and how she came about. But, of course, we know that what you really want to do is play with Synthia. So, go ahead, <a href="http://music.almerblank.com/composer">start composing now</a>, or <a href="http://music.almerblank.com/gallery">browse the gallery of other compositions</a>. </p>
<p>And, of course, let all your friends know about Synthia!</p>
<p>Share and enjoy,</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2010/02/welcome-to-synthia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSMF Sample Player Update</title>
		<link>http://labs.almerblank.com/2010/02/osmf-sample-player-update/</link>
		<comments>http://labs.almerblank.com/2010/02/osmf-sample-player-update/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 22:36:05 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code & Samples]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[OSMF]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1317</guid>
		<description><![CDATA[Some of you may have checked out the courses I posted over on the Adobe Developer Connection on building <a href="http://www.adobe.com/devnet/flash/articles/video_osmf.html" target="_blank">progressive</a> and <a href="http://www.adobe.com/devnet/flash/articles/video_osmf_streaming.html" target="_blank">streaming video players</a> with the Adobe Open Source Media Framework (OSMF).

Unfortunately, even those courses are relatively new, the code in them no longer works, because OSMF has advanced a few sprints. We're now at OSMF sprint 9, and the framework continues to shift quite a bit.

Because there are almost no examples on the web of using OSMF with Flash (as opposed to Flex), and I've had several people email me asking if I had time to update the code.

And, so, finally I did. At least for the progressive player. So you can download the <a href="http://www.adobe.com/devnet/flash/articles/video_osmf/osmf9_progressive_players_cs4.zip" target="_blank">Flash CS4 source code to build an OSMF player with the Sprint 9 framework</a> from the <a href="http://www.adobe.com/devnet/flash/articles/video_osmf.html" target="_blank">article on Building progressive video players in Flash with OSMF</a>.

Share and enjoy!

]]></description>
			<content:encoded><![CDATA[<p>Some of you may have checked out the courses I posted over on the Adobe Developer Connection on building <a href="http://www.adobe.com/devnet/flash/articles/video_osmf.html" target="_blank">progressive</a> and <a href="http://www.adobe.com/devnet/flash/articles/video_osmf_streaming.html" target="_blank">streaming video players</a> with the Adobe Open Source Media Framework (OSMF).</p>
<p>Unfortunately, even those courses are relatively new, the code in them no longer works, because OSMF has advanced a few sprints. We&#8217;re now at OSMF sprint 9, and the framework continues to shift quite a bit.</p>
<p>Because there are almost no examples on the web of using OSMF with Flash (as opposed to Flex), and I&#8217;ve had several people email me asking if I had time to update the code.</p>
<p>And, so, finally I did. At least for the progressive player. So you can download the <a href="http://www.adobe.com/devnet/flash/articles/video_osmf/osmf9_progressive_players_cs4.zip" target="_blank">Flash CS4 source code to build an OSMF player with the Sprint 9 framework</a> from the <a href="http://www.adobe.com/devnet/flash/articles/video_osmf.html" target="_blank">article on Building progressive video players in Flash with OSMF</a>.</p>
<p>Share and enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2010/02/osmf-sample-player-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on PureMVC Mediators</title>
		<link>http://labs.almerblank.com/2010/02/thoughts-on-puremvc-mediators/</link>
		<comments>http://labs.almerblank.com/2010/02/thoughts-on-puremvc-mediators/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 05:01:52 +0000</pubDate>
		<dc:creator>Omar Gonzalez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Code & Samples]]></category>
		<category><![CDATA[code examples]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1302</guid>
		<description><![CDATA[A common practice amongst PureMVC developers when creating PureMVC Mediator implementations is the &#8220;view getter&#8221;, a getter method that returns the instance of the view object that the Mediator is coupled with.  As an example I will use an imaginary media player with a playlist. In a PlaylistMediator class the method would be something [...]]]></description>
			<content:encoded><![CDATA[<p>A common practice amongst PureMVC developers when creating PureMVC Mediator implementations is the &#8220;view getter&#8221;, a getter method that returns the instance of the view object that the Mediator is coupled with.  As an example I will use an imaginary media player with a playlist.<span id="more-1302"></span> In a PlaylistMediator class the method would be something like below.</p>
<p>ex. PlaylistMediator</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> com.project.view
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.patterns.mediator.Mediator;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PlaylistMediator extends Mediator
	<span style="color: #000000;">&#123;</span>
		static <span style="color: #0033ff; font-weight: bold;">public</span> const NAME<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;PlaylistMediator&quot;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> PlaylistMediator<span style="color: #000000;">&#40;</span> viewComponent<span style="color: #000000; font-weight: bold;">:</span>PlaylistView <span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span> NAME, viewComponent <span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> playlistView<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span>PlaylistView
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> getViewComponent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> PlaylistView;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>As I&#8217;ve worked on PureMVC projects with other developers I&#8217;ve had the opportunity to see different approaches at writing application code in a PureMVC setting.  The view getter was a pretty common practice, but as I&#8217;ve seen the way its used, and abused, I started wondering to myself, why?  Why is this method necessary?  Well obviously, it is necessary to retrieve the view component, without having to cast the type each time its needed.  The real question is, why is it public?</p>
<p>The purpose of the Mediator is to listen for events on the view and send notifications to the Controller, and to provide an API to manipulate the view.  And to a lesser extent, to listen to notifications that should update the view.  However, I am not a fan of this either, and I try to keep notification handling in Mediators to a minimum.  But that is beside the point I am trying to make about the view getter.  With an API to the view provided by the Mediator I feel like the view getter should actually be protected or private, instead of public.</p>
<p>ex. PlaylistMediator</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> com.project.view
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.patterns.mediator.Mediator;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PlaylistMediator extends Mediator
	<span style="color: #000000;">&#123;</span>
		static <span style="color: #0033ff; font-weight: bold;">public</span> const NAME<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;PlaylistMediator&quot;</span>;
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> PlaylistMediator<span style="color: #000000;">&#40;</span> viewComponent<span style="color: #000000; font-weight: bold;">:</span>PlaylistView <span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span> NAME, viewComponent <span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0033ff; font-weight: bold;">protected</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> playlistView<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span>PlaylistView
		<span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">return</span> getViewComponent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> PlaylistView;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Using protected or private enforces that you should manipulate the view via the Mediator&#8217;s API, and also stops promoting code like this:</p>
<p>ex. PlaylistLoadedCommand</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> com.project.controller.command
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> com.project.view.PlaylistMediator;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.interfaces.INotification;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.patterns.command.SimpleCommand;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PlaylistLoadedCommand extends SimpleCommand
	<span style="color: #000000;">&#123;</span>
		override <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> execute<span style="color: #000000;">&#40;</span> notification<span style="color: #000000; font-weight: bold;">:</span>INotification <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> playlist<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = notification.getBody<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Array</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> playlistMediator<span style="color: #000000; font-weight: bold;">:</span>PlaylistMediator = facade.retrieveMediator<span style="color: #000000;">&#40;</span> PlaylistMediator.NAME <span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> PlaylistMediator;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> playlistItemView<span style="color: #000000; font-weight: bold;">:</span>PlaylistItemView;
			<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0</span>; i <span style="color: #000000; font-weight: bold;">&amp;</span>lt; playlist.<span style="color: #004993;">length</span>; i<span style="color: #000000; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span>
			<span style="color: #000000;">&#123;</span>
				playlistItemView		= <span style="color: #0033ff; font-weight: bold;">new</span> PlaylistItemView<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				playlistItemView.<span style="color: #004993;">data</span>		= playlist<span style="color: #000000;">&#91;</span> i <span style="color: #000000;">&#93;</span>;
				playlistItemView.<span style="color: #004993;">x</span>		= <span style="color: #000000; font-weight:bold;">0</span>;
				playlistItemView.<span style="color: #004993;">y</span>		= playlistItemView.<span style="color: #004993;">height</span> <span style="color: #000000; font-weight: bold;">*</span> i;
				playlistMediator.playlistView.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span> playlistItemView <span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>And instead, promotes code like this:</p>
<p>ex. PlaylistLoadedCommand &#8211; Registered to a notification sent when a Proxy is done loading playlist data</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> com.project.controller.command
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> com.project.view.PlaylistMediator;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.interfaces.INotification;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.patterns.command.SimpleCommand;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PlaylistLoadedCommand extends SimpleCommand
	<span style="color: #000000;">&#123;</span>
		override <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> execute<span style="color: #000000;">&#40;</span> notification<span style="color: #000000; font-weight: bold;">:</span>INotification <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> playlist<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = notification.getBody<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Array</span>;
			<span style="color: #6699cc; font-weight: bold;">var</span> playlistMediator<span style="color: #000000; font-weight: bold;">:</span>PlaylistMediator = facade.retrieveMediator<span style="color: #000000;">&#40;</span> PlaylistMediator.NAME <span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> PlaylistMediator;
			playlistMediator.updatePlaylist<span style="color: #000000;">&#40;</span> playlist <span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>In this example the Command simply calls the updatePlaylist() method on the PlaylistMediator, which encapsulates the logic required to actually update the playlist.  The PlaylistMediator can now also offer this functionality to another application system if it is required later in development due to another action.  Perhaps when the playlist is done and a refresh call is made, or if the user manually refreshes the playlist.</p>
<p>ex. In PlaylistMediator&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> updatePlaylist<span style="color: #000000;">&#40;</span> playlist<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> playlistItemView<span style="color: #000000; font-weight: bold;">:</span>PlaylistItemView;
	<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">0</span>; i <span style="color: #000000; font-weight: bold;">&amp;</span>lt; playlist.<span style="color: #004993;">length</span>; i<span style="color: #000000; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
		playlistItemView		= <span style="color: #0033ff; font-weight: bold;">new</span> PlaylistItemView<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
		playlistItemView.<span style="color: #004993;">data</span>		= playlist<span style="color: #000000;">&#91;</span> i <span style="color: #000000;">&#93;</span>;
		playlistItemView.<span style="color: #004993;">x</span>		= <span style="color: #000000; font-weight:bold;">0</span>;
		playlistItemView.<span style="color: #004993;">y</span>		= playlistItemView.<span style="color: #004993;">height</span> <span style="color: #000000; font-weight: bold;">*</span> i;
&nbsp;
		playlistView.<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span> playlistItemView <span style="color: #000000;">&#41;</span>;
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>This was just a small example, where I only showed accessing one mediator.  There are instances where a notification might need to update two or three views.  Instead of writing 10-20 lines in a Command per Mediator that needs to have a view updated, its much neater and easier to read to simply call a method on each Mediator.  This has other benefits other than short code.  If you are following some code that you are trying to debug it is easier to understand what happens if a notification is handled directly by a Command, since you will be able to see all affected actors, Mediators, Proxies, in a single centralized location.  Listening to the notifications within all the mediators makes it more difficult to find all of the places that a single notification effects, as the example illustrates below.  The alternative would be to listen to the notifications in each mediator, and have a command that triggers the proxy method.  I think its more maintainable and easier to debug if all notifications go directly to a command.  It makes more commands, and its more tedious, but in the end its far more maintainable and easier to debug.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> com.project.controller.command
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> com.project.view.PlaylistMediator;
	<span style="color: #0033ff; font-weight: bold;">import</span> com.project.view.MenuMediator;
	<span style="color: #0033ff; font-weight: bold;">import</span> com.project.model.proxy.ApplicationDataProxy;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.interfaces.INotification;
	<span style="color: #0033ff; font-weight: bold;">import</span> org.puremvc.as3.patterns.command.SimpleCommand;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> PlaylistLoadedCommand extends SimpleCommand
	<span style="color: #000000;">&#123;</span>
		override <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> execute<span style="color: #000000;">&#40;</span> notification<span style="color: #000000; font-weight: bold;">:</span>INotification <span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> playlist<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = notification.getBody<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> <span style="color: #004993;">Array</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> playlistMediator<span style="color: #000000; font-weight: bold;">:</span>PlaylistMediator = facade.retrieveMediator<span style="color: #000000;">&#40;</span> PlaylistMediator.NAME <span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> PlaylistMediator;
			playlistMediator.updatePlaylist<span style="color: #000000;">&#40;</span> playlist <span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> menuMediator<span style="color: #000000; font-weight: bold;">:</span>MenuMediator = facade.retrieveMediator<span style="color: #000000;">&#40;</span> MenuMediator.NAME <span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> MenuMediator;
			menuMediator.resetMenu<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> applicationDataProxy<span style="color: #000000; font-weight: bold;">:</span>ApplicationDataProxy = facade.retrieveMediator<span style="color: #000000;">&#40;</span> ApplicationDataProxy.NAME <span style="color: #000000;">&#41;</span> <span style="color: #0033ff; font-weight: bold;">as</span> ApplicationDataProxy;
			applicationDataProxy.getPlaylistInfo<span style="color: #000000;">&#40;</span> playlist <span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2010/02/thoughts-on-puremvc-mediators/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multi-bitrate Streaming in Adobe OSMF</title>
		<link>http://labs.almerblank.com/2009/12/multi-bitrate-streaming-in-adobe-osmf/</link>
		<comments>http://labs.almerblank.com/2009/12/multi-bitrate-streaming-in-adobe-osmf/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 19:31:53 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Code & Samples]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[training]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[flash video]]></category>
		<category><![CDATA[OSMF]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1299</guid>
		<description><![CDATA[My new online video course on Dynamic Multi-bitrate Streaming with Adobe Open Source Media Framework (OSMF) has just gone live on Adobe Developer Connection.
It&#8217;s 35 minutes across five lessons and takes you through the process of converting the progressive OSMF video player (which we create in the first installment of this course on Building Progressive [...]]]></description>
			<content:encoded><![CDATA[<p>My new online video <a href="http://www.adobe.com/devnet/flash/articles/video_osmf_streaming.html" target="_blank">course on Dynamic Multi-bitrate Streaming with Adobe Open Source Media Framework</a> (OSMF) has just gone live on Adobe Developer Connection.</p>
<p>It&#8217;s 35 minutes across five lessons and takes you through the process of converting the progressive OSMF video player (which we create in the first installment of this course on <a href="http://www.adobe.com/devnet/flash/articles/video_osmf.html" target="_blank">Building Progressive Video Players with Adobe OSMF</a>, into a dynamic multi-bitrate streaming player. Multi-bitrate streaming occurs when you program your Flash to deliver the highest quality video a viewer can see (dependent on their bandwidth). *<strong>Dynamic</strong>* multi-bitrate streaming is similar, with the additional feature of having your player constantly meters the bandwidth throughout viewing, to adjust the playback between multiple videos seamlessly, as the viewer&#8217;s bandwidth may fluctuate.<span id="more-1299"></span></p>
<blockquote><p><strong>Please note:</strong> that the first course on progressive video players was built with OSMF Sprint 5. The second course on streaming with OSMF was built with OSMF Sprint 7. I spend the first lesson of the new course updating the progressive player to work with Sprint 7, and I wrote a few notes about <a href="http://www.rblank.com/2009/11/10/quick-note-on-osmf-0-7/" target="_blank">the major differences between OSMF 0.5 and 0.7 in a post on my personal blog</a> last month. Also note that, by the time the course was published by Adobe, OSMF had already moved forward to Spring 8.</p></blockquote>
<p>When I wrote the first course on building a progressive video player with OSMF, I was struck by two things:<br />
1) OSMF is clean &#8212; really clean &#8212; and it just works well in ways that the AS3 video API does not &#8212; for instance, with OSMF setting volume is a matter of talking to the volume property of the MediaPlayer<br />
2) OSMF felt like a bit of overkill &#8212; you need a lot of imports and classes (a MediaPlayer, a MediaElement, a NetLoader and a URLResource) just to build the simplest of progressive video players &#8212; that would be simple enough, requiring seven lines of code with raw AS3 if you knew it</p>
<p>But, I had a hunch that #2 above was due to the fact that I was using approximately 0.05% of this powerful framework &#8212; like trying to use a nuclear bomb when a shovel would do just fine.</p>
<p>Well, when I started learning how to write the code to build dynamic multi-bitrate streaming player, I quickly learned that my hunch was right. The benefits of OSMF really kick in once you do anything beyond the most basic video player.</p>
<p>In the case of streaming, to convert your progressive OSMF video player to a streaming OSMF video player, all you do is change the URL! Seriously, that&#8217;s it. OSMF is smart enough to know that when you try to load a video from an RTMP server, you&#8217;re trying to stream &#8212; and it takes care of the rest.</p>
<p>That was pretty neat. But the benefits really kicked in when I beefed my regular streaming OSMF video player to one that supports dynamic multi-bitrate streaming. All it took was just a few extra lines of code to turn my regular video player into one that supports dynamic multi-bitrate streaming. If you want to learn those lines of code, I&#8217;d recommend checking out the course.</p>
<p>As I say, I&#8217;m still just barely cracking the surface of OSMF, and I&#8217;m really looking forward to digging deeper into its support for layouts, playlists and monetization. But, even with this second course, the massive time, workflow and standardization features of OSMF are already revealing themselves.</p>
<p>Share and enjoy!</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2009/12/multi-bitrate-streaming-in-adobe-osmf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Flash to Turn Pictures into Music</title>
		<link>http://labs.almerblank.com/2009/12/using-flash-to-turn-pictures-into-music/</link>
		<comments>http://labs.almerblank.com/2009/12/using-flash-to-turn-pictures-into-music/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 01:06:07 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ludi]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1291</guid>
		<description><![CDATA[I&#8217;ve just publicly released the first available output from the Synesthesizer &#8212; a side-project, executed in Flash, that translates pictures into music. The Synesthesizer is the first tangible product of Project Ludi, an internal skunkworks project here at Almer/Blank, the goal of which is to translate any type of media into any other type of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just publicly released the first available output from the Synesthesizer &#8212; a side-project, executed in Flash, that translates pictures into music. The Synesthesizer is the first tangible product of Project Ludi, an internal skunkworks project here at Almer/Blank, the goal of which is to translate any type of media into any other type of media.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="430" height="260" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.rblank.com/wp-content/uploads/2009/12/synesthesizer_output1_demo1.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="430" height="260" src="http://www.rblank.com/wp-content/uploads/2009/12/synesthesizer_output1_demo1.swf" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>The Synesthesizer is a Flash 10 musical synthesizer that relies on <a href="http://en.wikipedia.org/wiki/Synesthesia" target="_blank">synesthesia</a>-inspired translation metaphors.</p>
<p><span id="more-1291"></span>I&#8217;m only a few short months into what is a very long-term endeavor, and I&#8217;ve had precious few hours to spend on the project in that time, but I always set the benchmark definition of version 1.0 of the synesthesizer as &#8216;a system that produces something approximating music&#8217;, and even though I haven&#8217;t invested nearly the amount of time as I&#8217;d like, I believe that the current Synesthesizer meets this definition. And thus, I feel I have Synesthesizer 1.0.</p>
<p>The Synesthesizer is a Flash 10 application that translates pictures into music in real-time. What I&#8217;ve included with this post is a rendering of the output of the application &#8212; not the Synesthesizer itself. I&#8217;ll let you judge the quality for yourself &#8212; and please feel free to let me know what you think.</p>
<p>Now, of course, there is far more to do here, but what I found most amazing about this process was how easy it was to get to a point of generating &#8216;music&#8217; instead of &#8217;sound&#8217;. In effect, I apply something along the order of six rules to get to this point. The addition of each rule to the Synesthesizer brings us closer to the generation of music, instead of raw sound.</p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/12/hearingPictures_20091129_b.001.png"><img class="alignnone size-medium wp-image-798" style="margin-right: 10px;margin-bottom: 10px;" title="Hearing Pictures" src="http://www.rblank.com/wp-content/uploads/2009/12/hearingPictures_20091129_b.001-300x225.png" alt="Hearing Pictures" width="300" height="225" align="left" /></a>To get a bit more insight into the Synesthesizer, you should check out my talk, <em>Hearing Pictures</em>, which I&#8217;ll be presenting <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=101&amp;presentation_id=1103" target="_blank">at FITC Amsterdam in February</a> and <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=102&amp;presentation_id=1108" target="_blank"> at FITC Toronto in April</a>.</p>
<p>In this talk, I describe the process I followed to get the Synesthesizer to this point. Using the 1943 Hermann Hesse novel, <a href="http://en.wikipedia.org/wiki/The_Glass_Bead_Game" target="_blank"><em>The Glass Bead Game</em></a> (also published under the title <em>Magister Ludi</em>, the protagonist of the novel, from whom Project Ludi derives its name), as a starting point, and proceeding through a discussion of <a href="http://en.wikipedia.org/wiki/Synesthesia" target="_blank">synesthesia</a>, the <a href="http://deutsch.ucsd.edu/" target="_blank">aural illusions of Professor Diana Deutsch</a>, the <a href="http://artsites.ucsc.edu/faculty/cope/experiments.htm" target="_blank">Experiments in Musical Intelligence by Professor David Cope</a>, the <a href="http://www.npr.org/templates/story/story.php?storyId=112444869" target="_blank">music of Tamarin Monkeys</a>, and many other stepping points, I walk through the thought process required to assume an odd endeavor such as the cross-modal translation of pictures into music.</p>
<p>Share and enjoy!</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2009/12/using-flash-to-turn-pictures-into-music/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010 ActionScript 3 Workshops in Amsterdam and Toronto</title>
		<link>http://labs.almerblank.com/2009/12/2010-actionscript-3-workshops-in-amsterdam-and-toronto/</link>
		<comments>http://labs.almerblank.com/2009/12/2010-actionscript-3-workshops-in-amsterdam-and-toronto/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 00:01:42 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[training]]></category>
		<category><![CDATA[Actionscript]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1289</guid>
		<description><![CDATA[Our CTO, R Blank, will be teaching &#8216;ActionScript 3 Events&#8217; in Amsterdam on February 21st, 2010 (the day before FITC Amsterdam) and &#8216;Practical ActionScript 3&#8242; in Toronto on April 24, 2010 (the day before FITC Toronto).
For a bit more information about these courses, check out R&#8217;s post.
]]></description>
			<content:encoded><![CDATA[<p>Our CTO, R Blank, will be teaching <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=101&amp;presentation_id=1081" target="_blank">&#8216;ActionScript 3 Events&#8217; in Amsterdam on February 21st, 2010</a> (the day before <a href="http://www.fitc.ca/events/about/?event=101" target="_blank">FITC Amsterdam</a>) and <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=102&amp;presentation_id=1158" target="_blank">&#8216;Practical ActionScript 3&#8242; in Toronto on April 24, 2010</a> (the day before <a href="http://www.fitc.ca/events/about/?event=102" target="_blank">FITC Toronto</a>).</p>
<p>For a bit more information about these courses, check out <a href="http://www.rblank.com/2009/12/10/2010-actionscript-3-workshops-in-amsterdam-and-toronto/" target="_blank">R&#8217;s post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2009/12/2010-actionscript-3-workshops-in-amsterdam-and-toronto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RMI Launches New Forums</title>
		<link>http://labs.almerblank.com/2009/12/rmi-launches-new-forums/</link>
		<comments>http://labs.almerblank.com/2009/12/rmi-launches-new-forums/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 22:44:12 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[RMI]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1286</guid>
		<description><![CDATA[The Rich Media Institute (an Almer/Blank partner company) is very pleased to announce the launch of the new General Forums.
I included some detail about this launch here, in my inaugural posting. But I wanted to include a few additional notes here.
The RMI, which is now over four years old, has continued to mature, and now, [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.richmediainstitute.com" target="_blank">Rich Media Institute</a> (an Almer/Blank partner company) is very pleased to announce the launch of the new <a href="http://learn.richmediainstitute.com/mod/forum/index.php?id=1" target="_blank">General Forums</a>.</p>
<p>I included some detail about this launch <a href="http://learn.richmediainstitute.com/mod/forum/discuss.php?d=14" target="_blank">here, in my inaugural posting</a>. But I wanted to include a few additional notes here.</p>
<p><span id="more-1286"></span>The RMI, which is now over four years old, has continued to mature, and now, in addition to our physical facilities in Los Angeles and Toronto, where we host the majority of our live workshops, we&#8217;ve established a respectable selection of on-demand titles in our <a href="http://learn.richmediainstitute.com" target="_blank">online training catalog</a>.</p>
<p>Because of the addition of a new type of training to our business, the needs of our website have also shifted over time. And we&#8217;ve attempted to keep pace, having built, modified and maintained two versions of our site of the past few years.</p>
<p>Now, we are in the process of rolling out the 3rd version of our site. Unlike with the previous two versions of the RMI site, this one will be released over time, with new features scheduled for release throughout 2010. These forums are just the first minor feature release, with more significant enhancements to come shortly after the holidays.</p>
<p>The RMI has traditionally maintained forums with all of our on-demand courses (though, those are temporarily disabled during this transition), specifically for the use of students to ask questions of their instructors in our asynchronous, online training environment.</p>
<p>These new forums are intended for a different purpose. Instead of supporting the learning process of students already enrolled in courses, these new forums are intended to foster more of an active sense of community around our website.</p>
<p>Anyone who has attended our live workshops in Los Angeles or Toronto knows that the RMI strives to provide a unique experience &#8212; not just in the topics we select, but also in the comfortable (and somewhat unusual) environments we create to bring you those topics. The forums, while representing a minor feature in the scheme of RMI V3, are an important step in helping us create the kind of environment around our website, that we like to create in our physical facilities.</p>
<p>We&#8217;ve chosen a few specific forums to start with, and we&#8217;ve chosen them to coincide both with the focus of our online training catalog, and also with the expertise of some of our resident faculty members who will be kind enough to monitor these forums on an on-going basis. So if you have any questions on Adobe Flash, Flex or ActionScript, working with PureMVC, or business practices, please feel free to head on over to the <a href="http://learn.richmediainstitute.com/mod/forum/index.php?id=1" target="_blank">new RMI forums</a> and we&#8217;ll do our best to help you out.</p>
<p>Share and enjoy!</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2009/12/rmi-launches-new-forums/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hearing Pictures &#8211; Homebrew Microphone Edition</title>
		<link>http://labs.almerblank.com/2009/11/hearing-pictures-homebrew-microphone-edition/</link>
		<comments>http://labs.almerblank.com/2009/11/hearing-pictures-homebrew-microphone-edition/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 03:48:12 +0000</pubDate>
		<dc:creator>rblank</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hearing pictures]]></category>

		<guid isPermaLink="false">http://labs.almerblank.com/?p=1278</guid>
		<description><![CDATA[This coming Wednesday, December 2nd, I'll be giving my new talk, <em>Hearing Pictures</em> at the <a href="http://laflash.eventbrite.com" target="_blank">LA Flash End-Of-Year Party</a>. This will be only the second time I've given this talk -- I first gave it at the <a href="http://www.fitc.ca/events/about/?event=100" target="_blank">FITC Unconference at MAX 2009</a>. Since I was speaking at an unconference (a less formal environment, with very different criteria for acceptability than the normal conference tracks), I used the opportunity to create a brand new talk on a sort of crazy idea that's been nagging me for a few years -- the idea of translating anything into anything.

But, that's not what this post is about.

One key limitation of this entire process is that I'm working with digital information. Now, I'm not complaining -- the fact that all information is digital is what permits us to execute the cross-modal translations with relative ease (i.e., it's easier to translate a picture into music, if both the picture and music are stored as 0s and 1s). However, working in digital is also a bit creatively limiting. When composing music on the computer, I'm composing from audio information already stored on the computer -- more like playing a synthesizer than a piano. Again, that's fine, but I thought it would be fun to start experimenting with analog inputs and outputs (which I can read and control from Flash using my <a href="http://makezine.com/controller/" target="_blank">MakingThings Controller Board</a>).

About a month ago, I picked up a copy of <a href="http://www.amazon.com/Handmade-Electronic-Music-Hardware-Hacking/dp/0415975921" target="_blank">Handmade Electronic Music: The Art of Hardware Hacking</a>, which describes, in a series of clearly written chapters, how to go about assembling synthesizers from inexpensive, easily available hardware.

[...]

]]></description>
			<content:encoded><![CDATA[<p>This coming Wednesday, December 2nd, I&#8217;ll be giving my new talk, <em>Hearing Pictures</em> at the <a href="http://laflash.eventbrite.com" target="_blank">LA Flash End-Of-Year Party</a>. This will be only the second time I&#8217;ve given this talk &#8212; I first gave it at the <a href="http://www.fitc.ca/events/about/?event=100" target="_blank">FITC Unconference at MAX 2009</a>. Since I was speaking at an unconference (a less formal environment, with very different criteria for acceptability than the normal conference tracks), I used the opportunity to create a brand new talk on a sort of crazy idea that&#8217;s been nagging me for a few years &#8212; the idea of translating anything into anything.</p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/hearingPictures_20091129_b.001.png"><img style="border: 0px initial initial;" title="Hearing Pictures by R Blank" src="http://www.rblank.com/wp-content/uploads/2009/11/hearingPictures_20091129_b.001-300x225.png" alt="Hearing Pictures by R Blank" width="300" height="225" /></a></p>
<p><span id="more-1278"></span>The idea originated from a 1943 Hermann Hesse novel, <a href="http://en.wikipedia.org/wiki/The_Glass_Bead_Game" target="_blank"><em>The Glass Bead Game</em></a> (also published under the title, <em>Magister Ludi</em>, after the protagonist). The novel focuses around the life of Magister Ludi, who is a member of a monastic-style order at a time in the future.</p>
<p>The central activity of the order is the Glass Bead Game &#8212; it is their form of meditation. Although it is the central activity of the order, it is rather vaguely defined over the course of the text. Despite the lack of detail, the game has fascinated me since I read the novel. In the game, a glass bead represents an idea &#8212; any idea &#8212; such as an historical event, a work of music, a painting, a philosophical concept, anything. When it&#8217;s your turn, you must play a bead &#8212; that is, you must play an idea on the game board. But the idea you play (the bead you place) must be related to the idea (bead) placed by the previous player, thus over the course of an entire game creating a thread uniting widely disparate parts of human knowledge and experience. In this way, being a successful player of the game requires an agile intellect with the capacity to relate any idea to a wide variety of other &#8212; seemingly unrelated &#8212; ideas. Playing the game well requires fluency in math, music, language, history, art and science.</p>
<p>Ever since I started working with Flash 11 years ago, I&#8217;d always sort of envisioned Flash as a mini-Glass Bead Game. The term isn&#8217;t really used any more, but when Flash was young, it was considered a <strong><em>multimedia</em></strong> tool. And, Flash took the idea of multimedia to a new level &#8212; that is, despite its drawbacks, Flash has, since version 4, made it <strong>ludicrously simple</strong> to work with information of many different kinds. Flash supports character animation, motion design, text, audio, video, images, 3D data, live data, interactivity &#8212; Flash basically supports any type of digital information (this is, more or less, literally true with the Flash Player 10 FileReference powers). So, using Flash, we can establish relationships between different types of information (which is what many of the early Flash luminaries did, in one form or another). Hence, my picture of Flash as a mini-Glass Bead Game.</p>
<p>The fact that, especially early on (until Flash 9), the most successful Flashers also tended to be the most eclectic, only strengthened this notion for me. Flash is really the only technology in the world that could give birth to a significant population of designer/developer hybrids (a.k.a., the deselopers), which speaks to the multi-disciplinary nature of the tool and the unique skill-sets that lead to success within Flash.</p>
<p>So, the idea of Flash as a Glass Bead Game kept percolating in my head for years, until I eventually decided to start trying to formalize the notion. The notion of creating a computer program that could translate anything into anything.</p>
<p>But of course, that&#8217;s an insanely complex endeavor. So, I wanted to find a more focused niche that could serve as a starting point.</p>
<p>Then, Flash 9 came out, with its enhanced sound powers. All of a sudden you started seeing real-time audio analysis in Flash movies &#8212; sound visualizers translating sound into pictures. Now, of course, sound visualizers have been around for a while, but now I could build them myself, using the ActionScript code I already knew. And the thought occurred to me to create a machine that worked in reverse &#8212; translating pictures into music. Still, even with Flash 9&#8217;s powers, it was a frustrating go. But, when Flash 10 came out, with the SampleDataEvent, I lost all excuses and picked things back up.</p>
<p>Of course, with the amount of time I&#8217;ve been able to spend on the project, it&#8217;s not even properly called a &#8216;hobby&#8217;. And so, I&#8217;m now six months into what I consider to be a 40 year endeavor, and I have a few little experiments to show for the effort. Those experiments &#8212; and the thought that went into them &#8212; is what <a href="http://laflash.eventbrite.com" target="_blank">my talk at Wednesday&#8217;s LA Flash End-Of-Year Party</a> is about.</p>
<p>But, that&#8217;s not what this post is about.</p>
<p>One key limitation of this entire process is that I&#8217;m working with digital information. Now, I&#8217;m not complaining &#8212; the fact that all information is digital is what permits us to execute the cross-modal translations with relative ease (i.e., it&#8217;s easier to translate a picture into music, if both the picture and music are stored as 0s and 1s). However, working in digital is also a bit creatively limiting. When composing music on the computer, I&#8217;m composing from audio information already stored on the computer &#8212; more like playing a synthesizer than a piano. Again, that&#8217;s fine, but I thought it would be fun to start experimenting with analog inputs and outputs (which I can read and control from Flash using my <a href="http://makezine.com/controller/" target="_blank">MakingThings Controller Board</a>).</p>
<p>About a month ago, I picked up a copy of <a href="http://www.amazon.com/Handmade-Electronic-Music-Hardware-Hacking/dp/0415975921" target="_blank">Handmade Electronic Music: The Art of Hardware Hacking</a>, which describes, in a series of clearly written chapters, how to go about assembling synthesizers from inexpensive, easily available hardware.</p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/IMG_0492.jpg"><img class="alignnone size-medium wp-image-641" title="An Electret Condenser Mic in Progress" src="http://www.rblank.com/wp-content/uploads/2009/11/IMG_0492-225x300.jpg" alt="An Electret Condenser Mic in Progress" width="225" height="300" /></a></p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/IMG_0492.jpg"></a>I&#8217;m not done with the book yet, but in the early chapters, you learn how to build your own microphones &#8212; a few different types, including contact mics, compressor mics &#8212; even electromagnetic mics (microphones that &#8216;play&#8217; the sounds of the electromagnetic fields that surround the microphone).</p>
<p>When I rewrote the <em>Hearing Pictures</em> presentation this past weekend I found a neat way to integrate one of these piezo contact microphones into my talk. A contact microphone is one that can pick up vibrations in a surface, but not from the air. So, you can plug the contact mic into an amplifier, then hold the contact mic up to something that is vibrating and you will hear the vibration through the amp. They&#8217;re fun to play around with (you can even hear the sound of metal heating up with these mics).</p>
<p>The simple, cheap (&lt;$1.50) contact microphone that I&#8217;ve built relies on a <a href="http://en.wikipedia.org/wiki/Piezoelectric_sensor" target="_blank">Piezo disc, or piezo sensor</a> (~$0.75). These Piezo sensors rely on the Piezoelectric effect (discovered by Pierre and Marie Curie in 1880, but not industrialized as a sensor until the 1950s) to convert pressure, acceleration, strain or force into an electrical signal.</p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/IMG_0488.jpg"><img class="size-medium wp-image-642" title="The Contact Mic Ready To Go" src="http://www.rblank.com/wp-content/uploads/2009/11/IMG_0488-225x300.jpg" alt="The Contact Mic Ready To Go" width="225" height="300" /></a></p>
<p>You need a:</p>
<ul>
<li>Piezo disc</li>
<li>An amp</li>
<li>An audio jack (that fits your amp)</li>
<li>A little bit of audio cabling</li>
</ul>
<p>Audio cables are composed of two wires.</p>
<p>Step 1) Take one wire and solder it to the outer plate of the piezo disc, and solder the other end to one hookup in the audio jack.</p>
<p>Step 2) Then take the other wire and solder it to the inner plate of the piezo disc, and then solder the other end to the 2nd hookup in the audio jack.</p>
<p>Step 3) Plug the jack into the amp, and start rubbing your piezo disc against things to see how they sound</p>
<p>That&#8217;s it! You don&#8217;t even need a battery to power this mic. As you&#8217;ll quickly see, you can not pick up any vibrations from the air &#8212; so it&#8217;s totally unusable as a traditional mic (read the chapter on building a condenser mic if you&#8217;re interested in that). But, if you place it on the end of a styrofoam cup, and then speak into the cup, you have a neat Halloween microphone!</p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/meAndContactMic_20091116.jpg"><img style="border: 0px initial initial;" title="Applying Styrofoam to the Contact Mic to Fake a Condenser Mic" src="http://www.rblank.com/wp-content/uploads/2009/11/meAndContactMic_20091116-300x259.jpg" alt="Applying Styrofoam to the Contact Mic to Fake a Condenser Mic" width="300" height="259" /></a></p>
<p><a href="http://www.rblank.com/wp-content/uploads/2009/11/meAndContactMic_20091116.jpg"></a>If you&#8217;re interested to see how I integrated this contact mic into my talk, well then, all I can say is, show up on Wednesday. It&#8217;s free, and it&#8217;ll be a really cool and interesting talk. (Oh, and there&#8217;s free beer &#8212; did I mention that?).</p>
<p>Share and enjoy!</p>
<p>-r</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.almerblank.com/2009/11/hearing-pictures-homebrew-microphone-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
