<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Ariel Sommeria .com</title>
	
	<link>http://arielsommeria.com/blog</link>
	<description>Web Applications and Open Source</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:05:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/arielsommeria/blog" /><feedburner:info uri="arielsommeria/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Looping Audio in Flash, part 2</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/OwF76jtgvaw/</link>
		<comments>http://arielsommeria.com/blog/2012/02/01/looping-audio-in-flash-part-2/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:17:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=305</guid>
		<description><![CDATA[this is a follow up post to this one. I&#8217;ve continued building on http://blog.andre-michelle.com/2010/playback-mp3-loop-gapless/ . And I&#8217;ve come up with some improvements: make the loop a separate class allow switching from one loop to another seamlessly. fix a bug that what harmless in a browser but that broke the app on an iphone. In certain [...]]]></description>
			<content:encoded><![CDATA[<p>this is a follow up post to <a href="http://arielsommeria.com/blog/2012/01/18/looping-audio-in-flash/">this one</a>.</p>
<p>I&#8217;ve continued building on <a href="http://blog.andre-michelle.com/2010/playback-mp3-loop-gapless/">http://blog.andre-michelle.com/2010/playback-mp3-loop-gapless/</a> . And I&#8217;ve come up with some improvements:</p>
<ul>
<li>make the loop a separate class</li>
<li>allow switching from one loop to another seamlessly.</li>
<li>fix a bug that what harmless in a browser but that broke the app on an iphone. In certain cases the previous &#8220;extract&#8221; method would read beyond the buffer causing the looping to stop.</li>
</ul>
<p>See below for the code.</p>
<p><span id="more-305"></span></p>
<p>I apologize for the formatting, just copy and paste it and you should be able to read it properly.</p>
<p>To use it you still need to calculate the number of samples (see previous post).</p>
<p>For example:</p>
<p>const out: Sound = new Sound(); // Use for output stream</p>
<p>var loop:Mp3Loop = new Mp3Loop(out);</p>
<p>loop.loadMp3(&#8220;yourloop.mp3&#8243;, 213120l);</p>
<pre class="brush: php">

package
{
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.utils.ByteArray;

public class Mp3Loop
{
private const MAGIC_DELAY:Number = 2257.0; // LAME 3.98.2 + flash.media.Sound Delay

private const BUFFER_SIZE: int = 4096; // Stable playback
// Use for decoding
private var _activeMp3: Sound;
private var _inactiveMp3: Sound;
private var _inactiveMp3SamplesTotal:uint;
private var _activeMp3SamplesTotal:uint;

// Use for output stream
private var _out: Sound;

private var _samplesPosition: int = 0;

private var _swapPending:Boolean;

private var _isPlaying:Boolean;

public function Mp3Loop(outputSound:Sound)
{
_out = outputSound;
_out.addEventListener( SampleDataEvent.SAMPLE_DATA, sampleData );
_out.play();

}

public function loadMp3(url:String, samplesTotal:uint):void{
_inactiveMp3SamplesTotal = samplesTotal;
_inactiveMp3 = new Sound();
_inactiveMp3.addEventListener( Event.COMPLETE, mp3Loaded, false, 0, true );
_inactiveMp3.addEventListener( IOErrorEvent.IO_ERROR, mp3Error, false, 0, true );
_inactiveMp3.load( new URLRequest(url) );

}

private function swap():void{

_swapPending = false;
_activeMp3 = _inactiveMp3;
_inactiveMp3 = null;
_activeMp3SamplesTotal = _inactiveMp3SamplesTotal;
_inactiveMp3SamplesTotal = 0;

}

private function mp3Loaded( event:Event ):void
{

if(!_isPlaying){
swap();
_isPlaying = true;
}else{
//loop is playing, wait for end
_swapPending = true;
}

}

private function sampleData( event:SampleDataEvent ):void
{
if(_isPlaying )
{
extract( event.data, BUFFER_SIZE );
}
else
{
silent( event.data, BUFFER_SIZE );
}
}

/**
* This methods extracts audio data from the mp3 and wraps it automatically with respect to encoder delay
*
* @param target The ByteArray where to write the audio data
* @param length The amount of samples to be read
*/
private function extract( target: ByteArray, length:int ):void
{
while( 0 &amp;amp;amp;lt; length )
{
if( _samplesPosition + length + MAGIC_DELAY &amp;amp;amp;gt; _activeMp3SamplesTotal )
{
var read: int = _activeMp3SamplesTotal - _samplesPosition - MAGIC_DELAY;

_activeMp3.extract( target, read, _samplesPosition + MAGIC_DELAY );

_samplesPosition += read;

length -= read;

}
else
{
_activeMp3.extract( target, length, _samplesPosition + MAGIC_DELAY );

_samplesPosition += length;

length = 0;
}

if( _samplesPosition == _activeMp3SamplesTotal - MAGIC_DELAY) // END OF LOOP &amp;amp;amp;gt; WRAP
{
_samplesPosition = 0;
if(_swapPending){
swap();
}
}
}
}

private function silent( target:ByteArray, length:int ):void
{
target.position = 0;

while( length-- )
{
target.writeFloat( 0.0 );
target.writeFloat( 0.0 );
}
}

private function mp3Error( event:IOErrorEvent ):void
{
trace( event );
}

public function get isPlaying():Boolean
{
return _isPlaying;
}

public function stop():void{
_inactiveMp3 = _activeMp3 = null;
_inactiveMp3SamplesTotal = _activeMp3SamplesTotal = 0;
_isPlaying = false;
_samplesPosition = 0;
}

}
}
</pre>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/OwF76jtgvaw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2012/02/01/looping-audio-in-flash-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2012/02/01/looping-audio-in-flash-part-2/</feedburner:origLink></item>
		<item>
		<title>Packaging AIR Native Extensions is Horrible, but this Might Help</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/DhEMZoV9lQM/</link>
		<comments>http://arielsommeria.com/blog/2012/01/25/packaging-air-native-extensions-is-horrible-but-this-might-help/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 22:54:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=300</guid>
		<description><![CDATA[I&#8217;ve just spent the day learning about AIR Native Extensions. The idea is to build an Iphone app with a Flash Builder interface but using native Iphone audio capabilities. It seems that globally things have been well thought out and executed, but there&#8217;s one thing that comes across as amazingly pre-alpha craptastic: packaging your native [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just spent the day learning about AIR Native Extensions. The idea is to build an Iphone app with a Flash Builder interface but using native Iphone audio capabilities. It seems that globally things have been well thought out and executed, but there&#8217;s one thing that comes across as amazingly pre-alpha craptastic: packaging your native extension. It also happens to be the worst documented, and apparently the worst understood by Adobe&#8217;s own team as their articles on the subject are misguided and confused.</p>
<p>The basic bricks you need for an ios only native extension are :</p>
<ul>
<li>an XCode project where you code your native functionality</li>
<li>a Flash Builder Library project where you write the AS code that serves as a bridge</li>
</ul>
<p>And then you would expect that you could point the Library project to your compiled native library, and it would produce a ANE file, ready to use. Right? Right? No.</p>
<p>You have to use a command line tool called &#8216;adt&#8217;, that comes with your AIR SDK. Fair enough. Along with a descriptor XML file. Up to there you grudgingly admit that this is new technology and that you have to put up with half-finished stuff, but where things fall to pieces is where you start dealing with the mysterious &#8220;library.swf&#8221;.</p>
<p>This is actually a swf that you must yourself manually extract from the swc. WTF Adobe, can&#8217;t your adt tool do this itself? So anyway: take a command line tool like 7zip and extract library.swf from your swc, and then use it in your command line. The doc mentions that the library.swf file can be different for each targeted platform. Really, I can&#8217;t what design would justify having different AS3 APIs for different platforms, but I&#8217;m new to this. Still seems harebrained though.</p>
<p>So after jumping through all the hoops, I ended up with the following error:</p>
<p>Unable to build a valid certificate chain for the signer.</p>
<p>Fear not, what the tutorials don&#8217;t tell you is that signing an ANE is optional! So if your signing fails, you can still use your ANE yourself, just remove the signing.</p>
<p>One last (bonus) hoop: The packaging settings are supposed to detect whether or not an ANE is used. At least in my test here it says it isn&#8217;t being used even if it, so don&#8217;t hesitate to tell Flash Builder to include the ANE anyway.</p>
<p>This article helped me the most, even if it&#8217;s for Android, not Ios.</p>
<p><a href="http://www.adobe.com/devnet/air/articles/developing-native-extensions-air.html">http://www.adobe.com/devnet/air/articles/developing-native-extensions-air.html</a></p>
<p>So I worked with this example :</p>
<p><a href="http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/gyroscope.html">http://www.adobe.com/devnet/air/native-extensions-for-air/extensions/gyroscope.html</a></p>
<p>Below is my version of ./package.sh as mentioned in the article, in case it can help someone.</p>
<p><span id="more-300"></span>adt_directory=&#8221;/Applications/Adobe Flash Builder 4.6/sdks/4.6.0/bin&#8221;</p>
<p>root_directory=&#8221;/Users/arielsommeria-klein/Documents/workspaces/tests/Vibration/VibrationNEDeliverables&#8221;</p>
<p>library_directory=${root_directory}/VibrationActionScriptLibrary</p>
<p>native_directory=${root_directory}/VibrationiOSLibrary</p>
<p>#signing_options=&#8221;-storetype pkcs12 -keystore /Users/arielsommeria-klein/Documents/ios/certs/ariel-ios.p12&#8243;<br />
dest_ANE=NetworkInfo.ane<br />
extension_XML=${library_directory}/src/extension.xml<br />
library_SWC=${library_directory}/bin/VibrationActionScriptLibrary.swc</p>
<p>&#8220;${adt_directory}&#8221;/adt -package -target ane &#8220;${dest_ANE}&#8221; &#8220;${extension_XML}&#8221; -swc &#8220;${library_SWC}&#8221; -platform iPhone-ARM -C &#8220;${native_directory}&#8221; .<br />
#&#8221;${adt_directory}&#8221;/adt -package ${signing_options} -target ane &#8220;${dest_ANE}&#8221; &#8220;${extension_XML}&#8221; -swc &#8220;${library_SWC}&#8221; -platform iPhone-ARM -C &#8220;${native_directory}&#8221; .</p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/DhEMZoV9lQM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2012/01/25/packaging-air-native-extensions-is-horrible-but-this-might-help/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2012/01/25/packaging-air-native-extensions-is-horrible-but-this-might-help/</feedburner:origLink></item>
		<item>
		<title>amfPHP 2.0.1 is out!</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/3Ukuji-Ft-M/</link>
		<comments>http://arielsommeria.com/blog/2012/01/23/amfphp-2-0-1-is-out/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 21:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=298</guid>
		<description><![CDATA[Phew, that was hard! The goods here: http://www.silexlabs.org/131386/the-blog/blog-amfphp/amfphp-version-2-0-1-reloaded-is-out/]]></description>
			<content:encoded><![CDATA[<p>Phew, that was hard! The goods here: <a href="http://www.silexlabs.org/131386/the-blog/blog-amfphp/amfphp-version-2-0-1-reloaded-is-out/">http://www.silexlabs.org/131386/the-blog/blog-amfphp/amfphp-version-2-0-1-reloaded-is-out/</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/3Ukuji-Ft-M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2012/01/23/amfphp-2-0-1-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2012/01/23/amfphp-2-0-1-is-out/</feedburner:origLink></item>
		<item>
		<title>Looping Audio in Flash</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/FB_mHkpY78U/</link>
		<comments>http://arielsommeria.com/blog/2012/01/18/looping-audio-in-flash/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 15:13:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=290</guid>
		<description><![CDATA[You&#8217;d think looping audio in Flash would be trivial, right? think again. There&#8217;s enough info on the net to tell you what you need, but it&#8217;s a bit dispersed, so here it is condensed. Note that this is about looping audio that is on a server, not embedded in your swf. In that case it [...]]]></description>
			<content:encoded><![CDATA[<p>You&#8217;d think looping audio in Flash would be trivial, right? think again. There&#8217;s enough info on the net to tell you what you need, but it&#8217;s a bit dispersed, so here it is condensed. Note that this is about looping audio that is on a server, not embedded in your swf. In that case it works out of the box.</p>
<p>The first thing you need is an uncompressed wave file (.wav) that contains a loop. Flash doesn&#8217;t support playback of wav files, so you need to convert it to a compressed format. You have two options here: mp3 or aac.</p>
<p>Mp3 has the advantage to be easy to use in Flash but unfortunately contains padding so looping it as is won&#8217;t go smoothly.</p>
<p>AAC can be use in Flash 10 and onwards with some trickery described here : <a href="http://www.adobe.com/devnet/flashplayer/articles/hd_video_flash_player.html">http://www.adobe.com/devnet/flashplayer/articles/hd_video_flash_player.html</a>. It has the advantage of not containing padding, so it loops almost perfectly. If that&#8217;s enough for you, then good. If not, read on.</p>
<p>If you need perfect, then this post has a pretty good method for it. <a href="http://blog.andre-michelle.com/2010/playback-mp3-loop-gapless/">http://blog.andre-michelle.com/2010/playback-mp3-loop-gapless/</a> It however does not tell you how to get one necessary information: the number of samples in your loop. If you encode using LAME with the command line (binaries <a href="http://www.rarewares.org/mp3-lame-bundle.php">here</a> ), then it will tell you the number of frames. The number of samples per frame is constant with mp3s, it&#8217;s <span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: x-small;">1152. So total number of samples in loop = number of frames * 1152.</span></span></p>
<p><span style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: x-small;">Finally, I found this approach to create a loopable mp3 interesting, but I didn&#8217;t use it : </span></span><a href="http://www.compuphase.com/mp3/mp3loops.htm">http://www.compuphase.com/mp3/mp3loops.htm</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/FB_mHkpY78U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2012/01/18/looping-audio-in-flash/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2012/01/18/looping-audio-in-flash/</feedburner:origLink></item>
		<item>
		<title>amfPHP v2 Reloaded is out</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/dGcGrNFwX_w/</link>
		<comments>http://arielsommeria.com/blog/2011/09/26/amfphp-v2-reloaded-isout/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 17:49:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=288</guid>
		<description><![CDATA[the post: http://www.silexlabs.org/the-blog/amfphp-v2-reloaded-is-out/ the files: http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0.zip/download]]></description>
			<content:encoded><![CDATA[<p>the post:</p>
<p><a href="http://www.silexlabs.org/the-blog/amfphp-v2-reloaded-is-out/">http://www.silexlabs.org/the-blog/amfphp-v2-reloaded-is-out/</a></p>
<p>the files:</p>
<p><a href="http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0.zip/download">http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0.zip/download</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/dGcGrNFwX_w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/09/26/amfphp-v2-reloaded-isout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/09/26/amfphp-v2-reloaded-isout/</feedburner:origLink></item>
		<item>
		<title>Linked Resources in Flash Builder</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/8C_Q5dmLQkE/</link>
		<comments>http://arielsommeria.com/blog/2011/07/08/linked-resources-in-flash-builder/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 14:42:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=283</guid>
		<description><![CDATA[When projects relate to each other in Flash Builder, things get messy with paths. Sooner or later you end up with an absolute path in your build configuration, and that means your colleague won&#8217;t be able to build on checking out. Relative build paths would be nice, but in the meantime I found a fix [...]]]></description>
			<content:encoded><![CDATA[<p>When projects relate to each other in Flash Builder, things get messy with paths. Sooner or later you end up with an absolute path in your build configuration, and that means your colleague won&#8217;t be able to build on checking out. Relative build paths would be nice, but in the meantime I found a fix that alleviates the pain: Linked Resources. The name doesn&#8217;t say much, but what it comes down to is this:</p>
<p>You define a path as a constant, and use it everywhere in your build paths. That way, when your colleague checks out the various projects, the only place that needs to be changed is that constant. To define such a constant, go to Flash Builder Preferences -&gt; General -&gt; Workspace -&gt; Linked Resources. Add a constant, say WORKSPACE_ROOT = /Users/admin/Documents/workspace/, then use it in your project properties. For example to get a project to publish at /Users/admin/Documents/workspace/common, instead of putting that path in Flex Build Path -&gt; Output Folder, you can put ${WORKSPACE_ROOT}/common. In this way, when you set up a workspace, you don&#8217;t have to dig through project preferences, but just need to set the Linked Resource.</p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/8C_Q5dmLQkE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/07/08/linked-resources-in-flash-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/07/08/linked-resources-in-flash-builder/</feedburner:origLink></item>
		<item>
		<title>amfPHP v2 Reloaded Release Candidate 1 is out</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/XJHeJJxnuCI/</link>
		<comments>http://arielsommeria.com/blog/2011/06/24/amfphp-v2-reloaded-release-candidate-1-is-out/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 15:55:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=280</guid>
		<description><![CDATA[news at Silex Labs : http://www.silexlabs.org/the-blog/fr/2011/06/amfphp-v2-reloaded-release-candidate-1-is-out/ download at sourceforge: http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0RC1.zip/download]]></description>
			<content:encoded><![CDATA[<p>news at Silex Labs : <a href="http://www.silexlabs.org/the-blog/fr/2011/06/amfphp-v2-reloaded-release-candidate-1-is-out/">http://www.silexlabs.org/the-blog/fr/2011/06/amfphp-v2-reloaded-release-candidate-1-is-out/</a></p>
<p>download at sourceforge: <a href="http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0RC1.zip/download">http://sourceforge.net/projects/amfphp/files/amfphp/amfphp-2.0RC1.zip/download</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/XJHeJJxnuCI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/06/24/amfphp-v2-reloaded-release-candidate-1-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/06/24/amfphp-v2-reloaded-release-candidate-1-is-out/</feedburner:origLink></item>
		<item>
		<title>State of amfPHP</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/ZP5Kr8Iw3_Q/</link>
		<comments>http://arielsommeria.com/blog/2011/04/25/state-of-amfphp/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 09:59:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=273</guid>
		<description><![CDATA[http://www.silexlabs.org/the-blog/fr/2011/04/state-of-amfphp/]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.silexlabs.org/the-blog/fr/2011/04/state-of-amfphp/">http://www.silexlabs.org/the-blog/fr/2011/04/state-of-amfphp/</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/ZP5Kr8Iw3_Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/04/25/state-of-amfphp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/04/25/state-of-amfphp/</feedburner:origLink></item>
		<item>
		<title>Error Routing for AS3, a kind of design pattern and some code</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/9aN7beWABAA/</link>
		<comments>http://arielsommeria.com/blog/2011/04/14/error-routing-for-as3-a-kind-of-design-pattern-and-some-code/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 11:17:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=256</guid>
		<description><![CDATA[There&#8217;s this piece of code I keep on using, I thought I could share it here. The idea is to keep the displaying of error messages separate from their generation. The error router is a singleton that can be used to separate error generation from error display. Code generating an error can call ErrorRouter.getInstance().notifyError(errorData) A [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s this piece of code I keep on using, I thought I could share it here. The idea is to keep the displaying of error messages separate from their generation.</p>
<p>The error router is a singleton that can be used to separate error generation from error display. Code generating an error can call ErrorRouter.getInstance().notifyError(errorData)<br />
A visual object responsible for displaying error messages can implement IErrorDisplay and call ErrorRouter.getInstance().registerErrorDisplay(this)<br />
If no error display is registered, a simple trace is used.</p>
<p>I&#8217;d post the code if posting code in wordpress wasn&#8217;t such a pain. You can download it though</p>
<p><a href="http://arielsommeria.com/blog/content/error.zip">http://arielsommeria.com/blog/content/error.zip</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/9aN7beWABAA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/04/14/error-routing-for-as3-a-kind-of-design-pattern-and-some-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/04/14/error-routing-for-as3-a-kind-of-design-pattern-and-some-code/</feedburner:origLink></item>
		<item>
		<title>amfPHP at the “Tontons Flexeur”s Paris Flex User group</title>
		<link>http://feedproxy.google.com/~r/arielsommeria/blog/~3/pAyv-waao8s/</link>
		<comments>http://arielsommeria.com/blog/2011/03/25/amfphp-at-the-tontons-flexeurs-paris-flex-user-group/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 11:22:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://arielsommeria.com/blog/?p=253</guid>
		<description><![CDATA[Yesterday I presented amfPHP to a crowd of Flex developers, and they liked it! My slides, and a post about the evening, both in French: http://www.silexlabs.org/the-blog/fr/2011/03/les-slides-de-la-presentation-amfphp/ http://www.silexlabs.org/the-blog/fr/2011/03/silex-labs-presente-amfphp-aux-tontons-flexeurs-review/]]></description>
			<content:encoded><![CDATA[<p>Yesterday I presented amfPHP to a crowd of Flex developers, and they liked it!</p>
<p>My slides, and a post about the evening, both in French:</p>
<p><a href="http://www.silexlabs.org/the-blog/fr/2011/03/les-slides-de-la-presentation-amfphp/">http://www.silexlabs.org/the-blog/fr/2011/03/les-slides-de-la-presentation-amfphp/ </a></p>
<p><a href="http://www.silexlabs.org/the-blog/fr/2011/03/silex-labs-presente-amfphp-aux-tontons-flexeurs-review/">http://www.silexlabs.org/the-blog/fr/2011/03/silex-labs-presente-amfphp-aux-tontons-flexeurs-review/</a></p>
<img src="http://feeds.feedburner.com/~r/arielsommeria/blog/~4/pAyv-waao8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://arielsommeria.com/blog/2011/03/25/amfphp-at-the-tontons-flexeurs-paris-flex-user-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://arielsommeria.com/blog/2011/03/25/amfphp-at-the-tontons-flexeurs-paris-flex-user-group/</feedburner:origLink></item>
	</channel>
</rss>

