<?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/" version="2.0">

<channel>
	<title>Blog » Orland Media Ltd» Blog « Orland Media Ltd</title>
	
	<link>http://www.orlandmedia.com/blog</link>
	<description>The blog of Orland Media Ltd</description>
	<lastBuildDate>Tue, 18 May 2010 22:35:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/orlandmedia" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="orlandmedia" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>iFail</title>
		<link>http://www.orlandmedia.com/blog/adobe-flash/ifail/</link>
		<comments>http://www.orlandmedia.com/blog/adobe-flash/ifail/#comments</comments>
		<pubDate>Sun, 02 May 2010 12:03:47 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=466</guid>
		<description><![CDATA[If you are among the group of people, like Mr Jobs of Apple, who would rather not see Flash on any devices currently, and would instead prefer only HTML 5, please see here for a demo of the latter&#8217;s awesome power and go and buy yourself an iPad. Not only can it not support Flash, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="blogImage" title="iPad" src="http://www.cuttingedgegroup.com/media/common/uploads/ipad.jpg" alt="iPad" width="141" height="102" />If you are among the group of people, like <a href="http://www.theregister.co.uk/2010/04/30/jobs_flash_letter_deconstructed/">Mr Jobs of Apple</a>, who would rather not see Flash on any devices currently, and would instead prefer only HTML 5, please see <a href="http://www.youtube.com/watch?v=rfmbZkqORX4">here</a> for a demo of the latter&#8217;s awesome power and go and buy yourself an iPad. Not only can it not support Flash, but it doesn&#8217;t have a keyboard either.</p>
<p>Also, forget about using <a href="http://www.google.com/analytics/">Google Analytics</a> on your iPad: it utilizes Flash, as do hundreds of thousands of sites across the web.</p>
<p>Apple appears to think it can dictate to consumers and developers alike which technologies they will and will not use. Although we at Orland Media would be happy to refocus if required, it is in fact highly doubtful that Flash &#8211; 13 years evolving &#8211; is going anywhere soon, except <a href="http://mashable.com/2010/04/27/android-flash/">straight onto Apple&#8217;s competitors&#8217; mobile devices</a>.</p>
<p>iPad users will experience half of what the web has to offer &#8211; they&#8217;d better get used to <a href="http://www.gskinner.com/blog/assets/blueLego.gif">this image</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/adobe-flash/ifail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Choosing a Flash video format for pseudostreaming</title>
		<link>http://www.orlandmedia.com/blog/adobe-flash/choosing-a-flash-video-format-for-pseudostreaming/</link>
		<comments>http://www.orlandmedia.com/blog/adobe-flash/choosing-a-flash-video-format-for-pseudostreaming/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 21:17:57 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=432</guid>
		<description><![CDATA[Objective
We&#8217;ve been spending a lot of time recently examining the different video codecs available for Flash and conducting various tests. Our objective has been to choose the best quality video format which also enables pseudostreaming &#8211; without using custom servers such as Lighttpd.
What is pseudostreaming?
Pseudostreaming means imitating the behaviour of a RTMP streaming server such [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Streaming" src="/images/streaming.jpg" alt="Streaming" width="450" height="79" /></p>
<h2 style="margin-top: 0px;">Objective</h2>
<p>We&#8217;ve been spending a lot of time recently examining the different video codecs available for Flash and conducting various tests. Our objective has been to choose the best quality video format which also enables <em>pseudostreaming</em> &#8211; without using custom servers such as <a href="http://www.lighttpd.net/">Lighttpd</a>.</p>
<h2>What is pseudostreaming?</h2>
<p>Pseudostreaming means imitating the behaviour of a RTMP streaming server such as <a href="http://www.osflash.org/red5">Red5</a> or <a href="http://www.adobe.com/products/flashmediaserver/">Flash Media Server</a> by simply using a PHP script such as <a href="http://stream.xmoov.com/download/xmoov-php/">xmoov.php</a>. Using such a solution does not enable the broadcast live webcam streams, for example, but it does allow jumping ahead to parts of a video which have not yet downloaded. This is probably the benefit most people seek from a streaming server solution and it is much easier to set up than a streaming server. It is the choice of <a href="http://www.youtube.com/">YouTube</a> and <a href="http://video.google.com/">Google Video</a>.</p>
<h2>What&#8217;s required for pseudostreaming?</h2>
<p>Pseudostreaming requires a video format which supports it and a video player which supports it too. Two leading open source video players, <a href="http://www.longtailvideo.com/players/jw-flv-player/">JW Player</a> and <a href="http://flowplayer.org/">Flowplayer</a> both support it, because they send a request indicating how much of the video file should be sent back.</p>
<p>Flowplayer requires a <a href="http://flowplayer.org/plugins/streaming/pseudostreaming.html#download">plugin SWF</a>. This player is configured using JSON. JSON is not especially complicated but we found this config method fairly verbose. It also uses <a href="http://flowplayer.org/tools/flashembed.html">its own flash embed routine</a>. You have to get the config exactly right for pseudostreaming via xmoov to work with Flowplayer. There are scarce resources on the web. <a href="http://flowplayer.org/plugins/streaming/pseudostreaming.html">The main one</a> points to <a href="http://richbellamy.com/wiki/Flash_Streaming_to_FlowPlayer_using_only_PHP">this page</a>, which is now outdated, but it can be done, and if you need to know how, ask us.</p>
<p>We find JW Player easier to configure for pseudostreaming with xmoov. The info page is <a href="http://www.longtailvideo.com/support/tutorials/HTTP-Video-Streaming">here</a> and after we pointed out a fault with the player, <a href="http://www.longtailvideo.com/support/forum/Setup-Problems/22056/HTTP-Streaming-Problems-with-xmoov-php">here</a>, the latest release works properly with pseudostreaming.</p>
<h2>Comparing video formats</h2>
<p>Okay, so perhaps we will use JW Player as our player, but we&#8217;re still no closer to deciding which video format to use.</p>
<h3>H.264 &amp; F4V</h3>
<p>It seems safe to say that the best quality format for the web at the moment is the H.264 standard. We are seeking to encode video using Adobe Media Encoder, which is included with Creative Suite 4. This program uses the MainConcept H.264 Video codec and using this codec it can encode into either MP4 format or F4V format. At least Flash Player 9.0.115.0 is required to play back this standard.</p>
<p>F4V was created by Adobe in order to address shortcomings in the FLV format. It determines additional file meta data and enables the embedding of H.264 video in this custom format.</p>
<p>At the time of writing, according to our research, you can forget about using H.264 for pseudostreaming unless you have shell access to your Linux server and wish to try compiling a PHP module like <a href="http://codeblog.palos.ro/2008/11/13/pseudo-streaming-mp4h264-video-from-php/">this</a> or you are using <a href="http://www.lighttpd.net/">lighttpd</a> as your web server.</p>
<p>Neither Flowplayer nor JW Player support pseudostreaming of either F4V or MP4 videos using the H.264 standard along with xmoov.php.</p>
<p class="announcement" style="margin-bottom: 25px;">Eric Lorenzo Benjamin Jr of xMoovStream also offers <a class="no_icon" href="http://stream.xmoov.com/examples/xmoovstream-video-player/">his own video player</a>, which looks good, and a separate <a class="no_icon" href="http://stream.xmoov.com/features/">streaming server solution</a>. This can stream MP4 (H.264) files to Apple&#8217;s iPhone and Quicktime, but not to Flash Player. We&#8217;re still limited to FLVs with this player.</p>
<h3>F4V problems</h3>
<p>A little more about F4Vs while we are on the topic: the format currently <a href="http://theflashblog.com/?p=748">appears to be faulty</a> &#8211; at least when encoded by Adobe Media Encoder CS4:</p>
<ul>
<li>It does not add keyframes at navigation cue point times</li>
<li>It does not trigger cue point event listeners in the expected manner</li>
<li>It does not respect custom keyframe intervals</li>
</ul>
<p>Some more reasons not to use this format yet, perhaps, despite Adobe having urged everybody to switch to it. If you wish to have high quality video without xmoov pseudostreaming, use MP4 instead for now. (Under our tests, MP4s embed seekpoints correctly whereas F4Vs do not.)</p>
<p>We&#8217;re left only with trusty old FLV as the format we can pseudostream.</p>
<h2>Setting up FLVs for pseudostreaming</h2>
<h3>Choosing a codec</h3>
<p>You have a choice of two different codecs when exporting FLVs using Adobe Media Encoder: Sorenson Spark or On2 VP6. The latter is the later, recommended, codec.</p>
<h3>Choosing a keyframe interval</h3>
<p>Notice the option to &#8220;Set Keyframe Distance&#8221; in the Export Settings under Video → Advanced Settings. When using pseudostreaming the player can only jump to the closest keyframe. The more keyframes, the more precise your pseudostreaming will be, but the larger your file will be.</p>
<p>The default is a keyframe interval of 30. If you take this down to 10 you will see a lot more precision and about a 17% rise in file size. If you take it down to 1, though, you will see a 1000% rise in file size along with your optimal precision. You will also find that the video player takes a long time reading the meta data of the FLV before it plays it. We are happy with the compromise of a keyframe interval of 10.</p>
<p>So you export the video using whatever quality you like, and this keyframe interval. You stream it into your player using referring to the config links above. You try seeking to a part of the video which has not yet downloaded. The playhead simply jumps back to the beginning of the video. What&#8217;s going on?</p>
<h3>Inserting meta data</h3>
<p>Well, it&#8217;s not enough to have the keyframes in the video. What Adobe Media Encoder unfortunately does not do is insert meta data in the FLV indicating where those frames are. <strong>This is vital for php pseudostreaming to work.</strong> (Adobe: please provide the option for this in the next release of AME.)</p>
<p>Luckily, there is quite a dated freeware tool from Buraks, of the ActionScript Viewer, which still does the job well: <a href="http://www.buraks.com/flvmdi/">FLVMDI</a>. There is even a GUI available so you don&#8217;t need to start working on the command line, and <a href="http://www.buraks.com/flvmdv/">another tool</a> enabling you to view the meta data without tracing it out using Flash.</p>
<p>Once you have exported your FLV file with the ideal keyframe interval, you&#8217;ll need to run it through FLVMDI to insert the meta data. Be sure to tick the &#8220;Include &#8216;keyframes&#8217; object&#8221; option. It performs this task quickly, then, when you use the file with JWPlayer and xmoov, you should find you can move the playhead to any location and the file will &#8220;stream&#8221; from there.</p>
<h2>Conclusion</h2>
<p>The conclusions to be drawn at this point, we believe, are as follows:</p>
<ul>
<li>F4V is a no-go area as there are problems with the format.</li>
<li>MP4 (H.264) is the optimal format if you do not require pseudostreaming via xmoov.</li>
<li>FLV remains the best format to use if you do wish to pseudostream using these players.</li>
</ul>
<p>Since pseudostreaming is highly desirable, then, and xmoov is a quick and easy solution, we find FLV to be still the best format.</p>
<p>Here&#8217;s a table presenting most of our findings:</p>
<table style="margin-top: 20px; margin-bottom: 20px;" border="0" cellspacing="1" cellpadding="10" width="400" align="center" bgcolor="#999999">
<tbody>
<tr>
<td align="center" valign="middle" bgcolor="#333333"><strong>CAPABILITIES / FORMAT</strong></td>
<td align="center" valign="middle" bgcolor="#252525"><strong>FLV</strong></td>
<td align="center" valign="middle" bgcolor="#252525"><strong>F4V</strong></td>
<td align="center" valign="middle" bgcolor="#252525"><strong>MP4</strong></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Can use H.264 standard codec</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Works with xmoov.php</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Embeds  cuepoints (correctly)</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Can have embedded keyframe meta data</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Requires separate injection of the meta data</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Respects custom keyframe interval</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
</tr>
<tr>
<td valign="middle" bgcolor="#252525">Supports alpha channel</td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_tick.gif" alt="Tick" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
<td align="center" valign="middle" bgcolor="#000000"><img src="/images/table_cross.gif" alt="Cross" width="16" height="16" /></td>
</tr>
</tbody>
</table>
<p>We hope this article helps get you up and running with Flash video including pseudostreaming. If you spot any problems with it do let us know, and if the article proves popular we may expand on it and insert relevant images. <img src='http://www.orlandmedia.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/adobe-flash/choosing-a-flash-video-format-for-pseudostreaming/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Passing parameters to a MouseEvent listener</title>
		<link>http://www.orlandmedia.com/blog/actionscript-3/passing-parameters-to-a-mouseevent-listener/</link>
		<comments>http://www.orlandmedia.com/blog/actionscript-3/passing-parameters-to-a-mouseevent-listener/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 14:27:05 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=415</guid>
		<description><![CDATA[Problem:
Here is how we construct a MouseEvent handler in ActionScript 3.0:

myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:MouseEvent):void
{
   navigateToURL(new URLRequest(&#34;http://www.mysite.com&#34;), &#34;_blank&#34;);
}

Note that we set the fourth parameter, useWeakReference, to true. This ensures that if this listener is the the only reference to the myButton remaining, myButton can still be garbage collected if required.
The trouble [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Mouse Event" src="/images/mouse_event.jpg" title="Mouse Event" class="alignnone" width="450" height="80" /><br/></p>
<h4>Problem:</h4>
<p>Here is how we construct a MouseEvent handler in ActionScript 3.0:</p>
<pre class="brush: as3;">
myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:MouseEvent):void
{
   navigateToURL(new URLRequest(&quot;http://www.mysite.com&quot;), &quot;_blank&quot;);
}
</pre>
<p class="announcement">Note that we set the fourth parameter, <code>useWeakReference</code>, to true. This ensures that if this listener is the the only reference to the <code>myButton</code> remaining, <code>myButton</code> can <a href="http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html">still be garbage collected</a> if required.</p>
<p>The trouble with this is that every time <code>myButton</code> is clicked, the same URL will open. We can&#8217;t easily pass a parameter to the function which is acting as a listener. How can the same function be used by many buttons to open a different URL for each button? How can we pass a parameter?</p>
<h4>Solution 1: Custom events (won&#8217;t work):</h4>
<p>It would be nice if we could dispatch a <a href="http://www.xllusion.net/ed/2008/01/21/as3-custom-event-for-passing-unlimited-parameters/">custom event</a> on mouse click. Custom events extend the event class enabling us to dispatch an event with additional properties (like a URL). This event is received by the handler then the property is accessed. The trouble is this approach won&#8217;t work here because the Flash Player automatically dispatches MouseEvents, we don&#8217;t dispatch them ourselves. (If anyone sees a way this may be done, please comment below.)</p>
<h4>Solution 2: Embed the function call (not advised):</h4>
<p>An interesting strategy is used <a href="http://cookbooks.adobe.com/post_Pass_variables_through_a_MouseEvent_Listener-16685.html">here</a>, whereby a call to a function is used as the event handler, and this returns the function to use, including the desired parameter. The trouble with this approach is that it is not really good form, in that there is no way we can reference the handler if we did want to remove it using <code>removeEventListener()</code>.</p>
<p>We&#8217;re beginning to see that there is actually no way to &#8220;pass&#8221; a parameter, really. We have to rather detect the button-specific value by &#8220;association&#8221;. The following solutions all achieve this by using the MouseEvent&#8217;s <code>target</code> property:</p>
<h4>Solution 3: Use a switch statement on the event&#8217;s target property</h4>
<p>When the button is clicked, providing there is no further mouse-enabled object inside it, that button is the event&#8217;s target. We can say it <em>dispatched</em> the event. We can access the target object that dispatched the event using a property of the event itself:</p>
<pre class="brush: as3;">
myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:MouseEvent):void
{
   trace(e.target + &quot;dispatched this event!&quot;);
   navigateToURL(new URLRequest(&quot;http://www.mysite.com&quot;), &quot;_blank&quot;);
 }
</pre>
<p>If we can access the target we can decide what to do in the handler depending on the target:</p>
<pre class="brush: as3;">
myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:MouseEvent):void
{
   var u:URLRequest = new URLRequest;

   switch(e.target)
   {
      case myButton:
         u.url = &quot;http://www.mysite.com&quot;;
         break;

      case myOtherButton:
         u.url = &quot;http://www.myothersite.com&quot;;
         break;

      default:
         throw new Error(&quot;No URL set for &quot; + e.target);
         return;
   }

   navigateToURL(u, &quot;_blank&quot;);
}
</pre>
<p>This works well.</p>
<h4>Solution 4: Use a public custom property inside the dispatching object</h4>
<p>We could avoid a switch statement and instead have a property inside the dispatching class which can then be detected. So if our button extends Sprite, let&#8217;s say, we could have an instance property in there called <code>url</code> and we could detect that, as follows:</p>
<pre class="brush: as3;">
myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:Event):void
{
   var u:URLRequest = new URLRequest;
   navigateToURL(new URLRequest(e.target.url), &quot;_blank&quot;);
 }
</pre>
<p>This is fine too, but we might need to throw an error if the object dispatching the event doesn&#8217;t have a <code>url</code> property.</p>
<h4>Solution 5: Use a dictionary object to track variables</h4>
<p><a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/Dictionary.html">Dictionary objects</a> in ActionScript are similar to associative arrays but they can accept complex objects, as opposed to strings, as their keys. After creating our button we could push a reference to it into a dictionary and specify a value to associate with it, like this:</p>
<pre class="brush: as3;">
var dict:Dictionary = new Dictionary(true);  // use weak references to the objects
var myButton:Sprite = new Sprite;
dict[myButton] = &quot;http://www.mysite.com&quot;;
addChild(myButton);

myButton.addEventListener(MouseEvent.CLICK, openURL, false, 0, true);

private function openURL(e:MouseEvent):void
{
   navigateToURL(new URLRequest(dict[e.target]), &quot;_blank&quot;);
}
</pre>
<p>This is perfectly workable too.</p>
<p>Solutions 3, 4 and 5 all seem equally good solutions to this problem. There is just one final option, which is to avoid the problem altogether by using separate listeners for each button. But that, of course, is what we were trying to solve in the first place. <img src='http://www.orlandmedia.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/actionscript-3/passing-parameters-to-a-mouseevent-listener/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flash course in London</title>
		<link>http://www.orlandmedia.com/blog/actionscript-3/flash-course-in-london/</link>
		<comments>http://www.orlandmedia.com/blog/actionscript-3/flash-course-in-london/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 14:20:36 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=405</guid>
		<description><![CDATA[We are tentatively scheduling our next ActionScript 3.0 training course for 17th -19th February in central London.
As a start to the new year, we&#8217;re applying a 25% discount for all trainees &#8211; and an additional 25% for those who are self funded!
If you would like to attend the course please get in touch.  
]]></description>
			<content:encoded><![CDATA[<p>We are tentatively scheduling our next <a href="http://www.orlandmedia.com/training/flash/applied_as3/">ActionScript 3.0 training course</a> for 17th -19th February in central London.</p>
<p class="announcement">As a start to the new year, we&#8217;re applying a <strong>25% discount</strong> for all trainees &#8211; and an <strong>additional 25%</strong> for those who are self funded!</p>
<p>If you would like to attend the course please <a href="/contact/">get in touch</a>. <img src='http://www.orlandmedia.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/actionscript-3/flash-course-in-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where to install SWCs for Flash CS4</title>
		<link>http://www.orlandmedia.com/blog/adobe-flash/where-to-install-swcs-for-flash-cs4/</link>
		<comments>http://www.orlandmedia.com/blog/adobe-flash/where-to-install-swcs-for-flash-cs4/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:56:04 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=391</guid>
		<description><![CDATA[Something we use here is the Google Maps API for Flash, which is delivered as an SWC file. SWC files are ActionScript classes which have been pre-compiled into an SWF. The fact they are pre-compiled means you don&#8217;t have to re-compile them every time you export your application. Another benefit of  SWCs is that they [...]]]></description>
			<content:encoded><![CDATA[<p>Something we use here is the <a href="http://code.google.com/apis/maps/documentation/flash/">Google Maps API for Flash</a>, which is delivered as an SWC file. SWC files are ActionScript classes which have been pre-compiled into an SWF. The fact they are pre-compiled means you don&#8217;t have to re-compile them every time you export your application. Another benefit of  SWCs is that they enable you to deliver functionality while keeping your source code obfuscated to some degree.</p>
<p>In <a href="http://code.google.com/apis/maps/documentation/flash/tutorial-flash.html#SettingUp">their instructions</a>, Google say you should install the SWC files to the following location:</p>
<p class="output">C:\Program Files\Adobe\Adobe Flash CS3\language\Configuration\Components</p>
<p>What if you&#8217;re using Flash CS4? Well, in this version of Flash the ActionScript 3.0 Settings dialogue has changed (both the publish settings version and the global preferences version). You can specify a &#8220;library path&#8221; &#8211; this may be any folder on your computer. This is supposed to be a repository for your SWC files; you can set this and drop an SWC in here.</p>
<p>This will allow you to access the classes compiled into the SWC, however the SWC does not show up in the Components panel in Flash. If you are working visually in the Flash IDE and would like it to do so, you will need to forget about the library path option and instead drop SWCs into this folder:</p>
<p class="output">C:\Program Files\Adobe\Adobe Flash CS4\Common\Configuration\Components</p>
<p>Restart Flash and the component should be there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/adobe-flash/where-to-install-swcs-for-flash-cs4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash Player on mobile devices</title>
		<link>http://www.orlandmedia.com/blog/adobe-flash/flash-player-on-mobile-devices/</link>
		<comments>http://www.orlandmedia.com/blog/adobe-flash/flash-player-on-mobile-devices/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 21:32:49 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=380</guid>
		<description><![CDATA[Adobe Technical Evangelist James Ward here presents a great tour of cutting edge developments in the evolution of the Flash platform:

]]></description>
			<content:encoded><![CDATA[<p>Adobe Technical Evangelist <a href="http://www.jamesward.com/2009/12/16/exciting-flash-platform-advancements/">James Ward</a> here presents a great tour of cutting edge developments in the evolution of the Flash platform:</p>
<p><object width="408" height="256"><param name="movie" value="http://images.tv.adobe.com//swf/player.swf"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="FlashVars" value="fileID=4141&#038;context=76&#038;embeded=true&#038;environment=production"></param><embed src="http://images.tv.adobe.com//swf/player.swf" flashvars="fileID=4141&#038;context=76&#038;embeded=true&#038;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="408" height="256"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/adobe-flash/flash-player-on-mobile-devices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash ActionScript 3 course in London</title>
		<link>http://www.orlandmedia.com/blog/actionscript-3/flash-actionscript-3-course-in-london/</link>
		<comments>http://www.orlandmedia.com/blog/actionscript-3/flash-actionscript-3-course-in-london/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 12:14:50 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=374</guid>
		<description><![CDATA[We&#8217;ve scheduled our next Applied ActionScript 3 training course for 25th-27th November here in London. The course teaches how to build a real-world application entirely using ActionScript 3.
If you&#8217;d like to attend the course please get in touch.
]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve scheduled our next <a href="http://www.orlandmedia.com/training/flash/applied_as3/">Applied ActionScript 3 training course</a> for 25th-27th November here in London. The course teaches how to build a real-world application entirely using ActionScript 3.</p>
<p>If you&#8217;d like to attend the course please <a href="http://www.orlandmedia.com/contact/">get in touch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/actionscript-3/flash-actionscript-3-course-in-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arthropod Debugger</title>
		<link>http://www.orlandmedia.com/blog/actionscript-3/arthropod-debugger/</link>
		<comments>http://www.orlandmedia.com/blog/actionscript-3/arthropod-debugger/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 23:05:59 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=361</guid>
		<description><![CDATA[Problem
You want to be able to see trace statements etc. whether your application is in Test Movie mode, running locally over HTTP or running remotely over HTTP in the browser plug-in. You don&#8217;t want to use the the Flash Debugger and you don&#8217;t want to have to install Flash Debug players. You just want to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Problem</strong></p>
<p>You want to be able to see trace statements etc. whether your application is in Test Movie mode, running locally over HTTP or running remotely over HTTP in the browser plug-in. You don&#8217;t want to use the the Flash Debugger and you don&#8217;t want to have to install Flash Debug players. You just want to see <code>trace()</code> statements &#8211; in a more aesthetically pleasing window if possible..</p>
<p><strong>Solution</strong></p>
<p><a title="Arthropod Debugger" href="http://arthropod.stopp.se/index2.php/" target="_blank"><img title="Arthropod" src="/images/blog/arthropod.jpg" alt="" width="200" height="65" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/actionscript-3/arthropod-debugger/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cannot install Flash Player on Windows?</title>
		<link>http://www.orlandmedia.com/blog/adobe-flash/cannot-install-flash-player-on-windows/</link>
		<comments>http://www.orlandmedia.com/blog/adobe-flash/cannot-install-flash-player-on-windows/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 23:01:59 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Adobe Flash]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=363</guid>
		<description><![CDATA[Problem
You&#8217;re having trouble installing the Flash Player Active X control on Windows. Every time you run the installer it quits, recommending an Adobe Technote. The trouble is this doesn&#8217;t solve the problem either. You&#8217;ve uninstalled the previous player, quit all apps, still no joy.
Solution
In this situation the cause is probably incorrect registry permissions. You can [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Problem</strong></p>
<p>You&#8217;re having trouble installing the Flash Player Active X control on Windows. Every time you run the installer it quits, recommending <a href="http://www.adobe.com/go/tn_19166">an Adobe Technote</a>. The trouble is this doesn&#8217;t solve the problem either. You&#8217;ve uninstalled the previous player, quit all apps, still no joy.</p>
<p><strong>Solution</strong></p>
<p>In this situation the cause is probably incorrect registry permissions. You can correct this by using Microsoft&#8217;s <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E8BA3E56-D8FE-4A91-93CF-ED6985E3927B&amp;displaylang=en">SubInACL</a> tool. It is available <a href="http://www.supportflash.com/reset_min.zip">here</a> bundled with a script which will whip through your registry granting full permissions to administrators for the appropriate keys. You should then have no problem running the Flash Player installer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/adobe-flash/cannot-install-flash-player-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why use init methods in AS3</title>
		<link>http://www.orlandmedia.com/blog/actionscript-3/why-use-init-methods-in-as3/</link>
		<comments>http://www.orlandmedia.com/blog/actionscript-3/why-use-init-methods-in-as3/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 22:43:26 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>

		<guid isPermaLink="false">http://www.orlandmedia.com/blog/?p=354</guid>
		<description><![CDATA[Checking our stats, we just saw that some people are searching for &#8220;why use init methods as3&#8243;. There are several reasons to consider using init methods in AS3, rather than have all of your initialisation code in your constructor functions:

Constructor functions run slower than &#8220;regular&#8221; methods. (See here for details.)
You might want to re-run initialisation [...]]]></description>
			<content:encoded><![CDATA[<p>Checking our stats, we just saw that some people are searching for &#8220;why use init methods as3&#8243;. There are several reasons to consider using init methods in AS3, rather than have all of your initialisation code in your constructor functions:</p>
<ul>
<li>Constructor functions run slower than &#8220;regular&#8221; methods. (See <a href="http://blog.pixelbreaker.com/flash/as30-jit-vs-interpreted/">here</a> for details.)</li>
<li>You might want to re-run initialisation code without recreating the instance.</li>
<li>You might want to run delayed initialisation code, for example once an object has been added to the Display List. (See our post <a href="http://www.orlandmedia.com/blog/actionscript-3/added_to_stage-event-fires-twice/">here</a> regarding this issue.)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.orlandmedia.com/blog/actionscript-3/why-use-init-methods-in-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
