<?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>Ajar Productions &#187; tips</title>
	<atom:link href="http://ajarproductions.com/blog/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://ajarproductions.com/blog</link>
	<description>Animation &#124; Design &#124; Development</description>
	<lastBuildDate>Mon, 09 Jan 2012 17:30:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Quick Tip: Installing Adobe Extensions</title>
		<link>http://ajarproductions.com/blog/2011/11/16/installing-extensions-correct-version/</link>
		<comments>http://ajarproductions.com/blog/2011/11/16/installing-extensions-correct-version/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 20:33:56 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[extensions]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=1066</guid>
		<description><![CDATA[If you have multiple versions of Adobe (or Macromedia) software installed, you probably have multiple versions of Extension Manager, the application that helps you install and manage extensions. This can lead to some confusion. When you double-click an MXP (or ZXP) file, your operating system open your default version of Extension Manager. This may not [...]]]></description>
			<content:encoded><![CDATA[<p>If you have multiple versions of Adobe (or Macromedia) software installed, you probably have multiple versions of Extension Manager, the application that helps you install and manage extensions. This can lead to some confusion.</p>
<p>When you double-click an MXP (or ZXP) file, your operating system open your default version of Extension Manager. This may not be the version that you want, however. Suppose you have Flash Pro CS4 and Flash Pro CS5 installed. Your system will (probably) automatically launch Extension Manager CS5 when you attempt to install a new extension. This is okay if you want to install the extension in Flash CS5, but it will not be available in Flash CS4.</p>
<p>There are other issues that crop up when you have versions installed in multiple languages (and in some cases, if your language is not English). Luckily, there&#8217;s a simple way ensure that you&#8217;re using the correct version of Extension Manager.</p>
<ol>
<li>Launch the version of Flash Pro (or Dreamweaver, or Fireworks) in which you&#8217;d like to install the extension.</li>
<li>Go to <em>Help &gt; Manage Extensions&#8230;</em> and it will launch the matching installation of Extension Manager.</li>
</ol>
<p><img class="size-full wp-image-1051" title="Manage Extensions" src="http://ajarproductions.com/blog/wp-content/uploads/2011/11/manageExtensions.gif" alt="" width="358" height="284" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2011/11/16/installing-extensions-correct-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Features vs. Bandages</title>
		<link>http://ajarproductions.com/blog/2011/04/28/features-vs-bandages/</link>
		<comments>http://ajarproductions.com/blog/2011/04/28/features-vs-bandages/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 15:55:55 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=659</guid>
		<description><![CDATA[At my part time job with Pearson, I&#8217;m a member of a team that maintains a large template system for e-learning projects. This template system allows us to produce very large media-rich courses in a relatively short span of time. In these projects, as well as others, I try to teach and maintain a system [...]]]></description>
			<content:encoded><![CDATA[<p>At my part time job with Pearson, I&#8217;m a member of a team that maintains a large template system for e-learning projects. This template system allows us to produce very large media-rich courses in a relatively short span of time. In these projects, as well as others, I try to teach and maintain a system of adding features, rather than bandaging functionality that needs to change. When a client request comes in, I challenge myself and my colleagues to consider how this request could be made part of our permanent (and ongoing) system, rather jury rigging the current system to temporarily support new functionality. This feature-based approach has several long-term advantages that I will elaborate on this post.</p>
<p><span id="more-659"></span></p>
<p>What differentiates a feature from a bandage? Here are some characteristics of a feature:</p>
<ol>
<li>Can be turned on or off, usually with a single variable.</li>
<li>Does not interfere with existing functionality (i.e., when the feature is turned off, the application should function just as it did before adding the feature).</li>
<li>Easy to read code (i.e., dependent code can simply check to see if the feature is on, rather than testing several ambiguous conditions).</li>
</ol>
<p>Bandages have almost the exact opposite characteristics: can&#8217;t be easily reversed, interfere with existing functionality, and usually very difficult to read. Features also have the added advantage of being useful later. Even if you do not using the exact same code base, when your code is written as features, rather than cobbled together to serve a micro-specific purpose, it&#8217;s much easier to copy code from one project to another.</p>
<p>There are several techniques that differentiate feature-building. Consider the simple example that follows into in order to examine some of those techniques. Suppose your application includes the following 3 functions: <em>navigateTo</em>, <em>nextPage</em>, and <em>prevPage</em>. Your application plays start-to-finish automatically triggering the 3 aforementioned functions, but your client has indicated that they would like the application to pause when it reaches the end of a section. Additionally, the client wants the backward (e.g. when the user presses the back button) navigation to stop when the beginning of a section is reached.</p>
<h2>Bandage Approach</h2>
<p>First, have a look at a bandage approach. Since you know the page number that corresponds with each section, you could quickly hard-code these values into the respective functions.</p>
<p><code>function navigateTo(page) {<br />
//no change in functionality<br />
}</code></p>
<p><code>function nextPage(){<br />
if(currentPage == 11 || currentPage == 18 || currentPage == 24 || currentPage == 30) pause();<br />
else navigateTo(currentPage+1);<br />
}</code></p>
<p><code>function prevPage(){<br />
if(currentPage != 12 || currentPage != 19 || currentPage != 25 || currentPage != 31) navigateTo(currentPage-1);<br />
else /*do nothing*/;<br />
}</code></p>
<p>While this solution will work from the client&#8217;s point of view, it will get messy for you if a page needs to be added anywhere (lengthening a section and changing all of the relevant page numbers) or client decides that this feature is not needed after all. Even worse, what if the client loves it and wants more new functionality&#8230;now you&#8217;ll have to add bandages on top of bandages.</p>
<h2>Feature Approach</h2>
<p>One way to improve upon the bandage approach is to move the logic to a central location. This can be done in the example above by moving logic from the<em> nextPage</em> and <em>prevPage</em> functions to the single <em>navigateTo</em> function.</p>
<p><code>function navigateTo(page) {<br />
var sectionStart = (currentPage == 11 || currentPage == 18 || currentPage == 24 || currentPage == 30);<br />
var sectionEnd = (currentPage == 12 || currentPage == 19 || currentPage == 25 || currentPage == 31);<br />
if(sectionStart) {<br />
disableBackNav();<br />
} else if (sectionEnd) {<br />
pause();<br />
} else {<br />
//run normally<br />
}<br />
}</code></p>
<p><code>function nextPage(){<br />
navigateTo(currentPage+1);<br />
}</code></p>
<p><code>function prevPage(){<br />
navigateTo(currentPage-1);<br />
}</code></p>
<p>The purpose of this code is already slightly clearer than the bandage approach. The logic has moved out of multiple functions and into a single function that is called by the other two. Two variables are then created, <em>sectionStart</em> and <em>sectionEnd</em>, to test the location of the current page. The conditions that determine these values are adjusted based on the <em>currentPage</em> location, which will have already been altered by <em>nextPage</em> or <em>prevPage</em> (unlike the bandage example above). Additionally, the navigation will function properly even if it&#8217;s not triggered by the <em>nextPage</em> or <em>prevPage</em> functions, because all navigation is routed through <em>navigateTo</em>.</p>
<p>While jumping in with a bandage approach can seem quicker in the short run, you can see that difference in the amount of code required between these two examples is negligible. Additional improvements can be made to the code by moving the section start and end numbers out of the <em>navigateTo</em> function and to a location that is easy to find and edit (like the top of the code). Ideally, these numbers would not have to be present at all. If the data that contains page information, often stored in XML, clearly groups sections, section starts and ends can be determined dynamically, rather than hard-coding actual numbers that are likely to change.</p>
<p>A sample bit of XML might look something like this:<br />
<code>&lt;root&gt;<br />
&lt;section name='Introduction'&gt;<br />
&lt;page name='Welcome' id='010101' /&gt;<br />
&lt;page name='Course Navigation' id='010102' /&gt;<br />
&lt;page name='Initial Questions' id='010103' /&gt;<br />
&lt;/section&gt;<br />
&lt;section name='Tools'&gt;<br />
&lt;page name='Toolbar' id='010201' /&gt;<br />
&lt;page name='Calculator' id='010202' /&gt;<br />
&lt;page name='Navigation' id='01020' /&gt;<br />
&lt;page name='Selection' id='010204' /&gt;<br />
&lt;/section&gt;<br />
&lt;section name='Course Review'&gt;<br />
&lt;page name='Review Screen' id='010301' /&gt;<br />
&lt;page name='Close Course' id='010302' /&gt;<br />
&lt;page name='Submit Results' id='010303' /&gt;<br />
&lt;/section&gt;<br />
&lt;/root&gt;</code></p>
<p>As sections are added to the application structure, the application dynamically reads the section breaks from the clearly-defined XML data.</p>
<p>Further refinement would involve creation of variables like <em>pauseAtSectionEnd</em> and <em>lockBackNavAtSectionStart</em> that are set at the top of the code. Thus, each feature can easily be enabled or disabled without diving down into functions that contain other purposes. This has the additional benefit of reducing the chances that you might break something that was already working in the code, which can happen from deleting even 1 character accidentally.</p>
<p>In short, bandaging assumes on some level that you&#8217;ll never have to look at the code again&#8230;so what does it matter how organized it is, right? In my experience, this is almost never the case, bandaging will always come back to haunt the developer. Building features rather than applying bandages has made my life a lot easier as developer. Furthermore, it&#8217;s made me popular among my colleagues, because this type of code construction has facilitated easy updates and fixes when they&#8217;ve needed them in a hurry. I hope this post helps you to think about your projects in a new and helpful way.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2011/04/28/features-vs-bandages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Menu Items to Existing Menus with Adobe AIR</title>
		<link>http://ajarproductions.com/blog/2011/04/05/nativemenu-getitembyname/</link>
		<comments>http://ajarproductions.com/blog/2011/04/05/nativemenu-getitembyname/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 17:18:27 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=912</guid>
		<description><![CDATA[I&#8217;m working on a new desktop (Adobe AIR) application. More on that app in the months to come. In the process of putting together a prototype, I&#8217;ve found that NativeMenu.getItemByName doesn&#8217;t work (at least not on my system). I initially used the following code to try to add a menu item to the File menu: [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a new desktop (Adobe AIR) application. More on that app in the months to come. In the process of putting together a prototype, I&#8217;ve found that <em>NativeMenu.getItemByName</em> doesn&#8217;t work (at least not on my system). I initially used the following code to try to add a menu item to the <em>File</em> menu:</p>
<p><code>var nm:NativeMenu = NativeApplication.nativeApplication.menu;<br />
var nm0:NativeMenuItem = nm.getItemByName('File');<br />
var mi:NativeMenuItem = new NativeMenuItem("Export...");<br />
mi.addEventListener(Event.SELECT, exportSelected);<br />
nm0.submenu.addItem(mi);</code></p>
<p>Unfortunately, the menu item resolves to <em>null</em> in the above code and subsequently generates an error. Instead, I&#8217;m using the following code (that works):</p>
<p><code>var nm:NativeMenu = NativeApplication.nativeApplication.menu;<br />
var nm0:NativeMenuItem = getMenuItemByLabel(nm, 'File');<br />
var mi:NativeMenuItem = new NativeMenuItem("Export...");<br />
mi.addEventListener(Event.SELECT, exportSelected);<br />
nm0.submenu.addItem(mi);</code></p>
<p>The <em>getMenuItemByLabel</em> function is as follows:</p>
<p><code>function getMenuItemByLabel(menu:NativeMenu, labelName:String):NativeMenuItem {<br />
var count:uint = menu.items.length;<br />
for(var i:uint=0; i &lt; count; i++){<br />
var item:NativeMenuItem = menu.getItemAt(i);<br />
if(item.label === labelName) return item;<br />
}<br />
return null;<br />
}</code></p>
<p><img class="alignnone size-full wp-image-935" title="Item added to existing menu" src="http://ajarproductions.com/blog/wp-content/uploads/2011/04/air_filemenu.gif" alt="" width="213" height="68" /></p>
<p>That way I can get the menu by name and rest assured that I&#8217;ve added to the <em>File</em> menu (or any other existing menu) without having to guess its index.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2011/04/05/nativemenu-getitembyname/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Article Round-up</title>
		<link>http://ajarproductions.com/blog/2010/10/19/article-round-up/</link>
		<comments>http://ajarproductions.com/blog/2010/10/19/article-round-up/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 17:37:55 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=646</guid>
		<description><![CDATA[We&#8217;re keeping quite busy around here! Here&#8217;s a quick round-up of some recent articles that I&#8217;ve published. 5 Flash Animation tips in 5 days on the Peachpit blogs: Flash Animation Five Tips in Five Days: Tip 1 &#8211; Easing Flash Animation Five Tips in Five Days: Tip 2 &#8211; Distribute to Layers Flash Animation Five [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re keeping quite busy around here! Here&#8217;s a quick round-up of some recent articles that I&#8217;ve published.</p>
<p>5 Flash Animation tips in 5 days on the <a href="http://www.peachpit.com/blogs/index.aspx" target="_blank">Peachpit blogs</a>:</p>
<ul>
<li><a href="http://www.peachpit.com/blogs/blog.aspx?uk=Flash-Animation-Five-Tips-in-Five-Days-Tip-1--Easing" target="_blank">Flash Animation Five Tips in Five Days: Tip 1 &#8211; Easing</a></li>
<li><a href="http://www.peachpit.com/blogs/blog.aspx?uk=Flash-Animation-Five-Tips-in-Five-Days-Tip-2--Distribute-to-Layers" target="_blank">Flash Animation Five Tips in Five Days: Tip 2 &#8211; Distribute to Layers</a></li>
<li><a href="http://www.peachpit.com/blogs/blog.aspx?uk=Flash-Animation-Five-Tips-in-Five-Days-Tip-3--Bitmap-Masking" target="_blank">Flash Animation Five Tips in Five Days: Tip 3 &#8211; Bitmap Masking</a></li>
<li><a href="http://www.peachpit.com/blogs/blog.aspx?uk=Flash-Animation-Five-Tips-in-Five-Days-Tip-4--SWF-History" target="_blank">Flash Animation Five Tips in Five Days: Tip 4 &#8211; SWF History</a></li>
<li><a href="http://www.peachpit.com/blogs/blog.aspx?uk=Flash-Animation-Five-Tips-in-Five-Days-Tip-5--Targeting-Nested-Symbols-with-ActionScript" target="_blank">Flash Animation Five Tips in Five Days: Tip 5 &#8211; Targeting Nested Symbols with ActionScript</a></li>
</ul>
<p>Also on the Peachpit site, there&#8217;s an excerpt on <a href="http://www.peachpit.com/articles/article.aspx?p=1628184" target="_blank">Character Animation</a> from our recent <a href="http://ajarproductions.com/blog/books/animation-in-flash/" target="_blank">book</a> with <a href="http://mudbubble.com" target="_blank">Chris Georgenes</a>.</p>
<p>I also have a new video tutorial over at <a href="http://active.tutsplus.com/" target="_blank">ActiveTuts+</a> on <a href="http://active.tutsplus.com/tutorials/workflow/creating-advanced-motion-presets-in-flash-with-jsfl/" target="_blank">Creating Advanced Motion Presets in Flash with JSFL</a>.</p>
<p>In addition to the recent advice page I added on <a href="http://ajarproductions.com/blog/learning-flash/" target="_blank">Learning Flash</a>, I&#8217;m working on a page about becoming a graphic designer/Flash animator/digital artist. It includes some of my background and lessons learned. That article is pretty much on hold as we work toward the <a href="http://ajarproductions.com/blog/2010/08/27/smartmouth-sneak-peak/" target="_blank">SmartMouth</a> release (hopefully just another week), and I will pick it up after that.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2010/10/19/article-round-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe Flash Learning Links</title>
		<link>http://ajarproductions.com/blog/2010/08/20/adobe-flash-learning-links/</link>
		<comments>http://ajarproductions.com/blog/2010/08/20/adobe-flash-learning-links/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 22:49:27 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[adobe]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=614</guid>
		<description><![CDATA[I&#8217;ve had a number of users contacting me regarding ways to learn Adobe Flash Professional. There are a lot of great resources available for users interested in animation, design, and development in Flash.  Whether you&#8217;re an advanced user, or totally new to Flash, there are tons of resources available. Over the years, I&#8217;ve read dozens [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a number of users contacting me regarding ways to learn Adobe Flash Professional. There are a lot of great resources available for users interested in animation, design, and development in Flash.  Whether you&#8217;re an advanced user, or totally new to Flash, there are tons of resources available. Over the years, I&#8217;ve read dozens of books and visited hundreds of sites. So, I decided to put together a single page with many of my favorite <a href="http://ajarproductions.com/blog/learning-flash/">Flash learning links</a>. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2010/08/20/adobe-flash-learning-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E4X &#8216;Gotcha&#8217; With XML in Actionscript 3</title>
		<link>http://ajarproductions.com/blog/2009/04/01/e4x-gotcha-with-xml-in-actionscript-3/</link>
		<comments>http://ajarproductions.com/blog/2009/04/01/e4x-gotcha-with-xml-in-actionscript-3/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 23:28:10 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[e4x]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=352</guid>
		<description><![CDATA[Oftentimes, I like to trace pieces of data as I&#8217;m programming just to make sure everything is on track. When you&#8217;re trying to trace data using E4X (XML in Actionscript 3), don&#8217;t forget the toXMLString() function. In many cases, you won&#8217;t see anything if you forget to call this function. Your code will see the [...]]]></description>
			<content:encoded><![CDATA[<p>Oftentimes, I like to trace pieces of data as I&#8217;m programming just to make sure everything is on track. When you&#8217;re trying to trace data using E4X (XML in Actionscript 3), don&#8217;t forget the <em>toXMLString()</em> function. In many cases, you won&#8217;t see anything if you forget to call this function. Your code will see the data just fine, but you might not think it&#8217;s working and spend time trying to diagnose a non-existent problem.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color:#00ccff;">trace</span><span style="color:#ccc;">&#40;</span>xml<span style="color:#ccc;">.</span><span style="color:#00ccff;">children</span><span style="color:#ccc;">&#40;</span><span style="color:#ccc;">&#41;</span><span style="color:#ccc;">&#91;</span><span style="color:#ccc;">0</span><span style="color:#ccc;">&#93;</span><span style="color:#ccc;">&#41;</span> <span style="color:#ff6600;">//empty trace</span>
<span style="color:#00ccff;">trace</span><span style="color:#ccc;">&#40;</span>xml<span style="color:#ccc;">.</span><span style="color:#00ccff;">children</span><span style="color:#ccc;">&#40;</span><span style="color:#ccc;">&#41;</span><span style="color:#ccc;">&#91;</span><span style="color:#ccc;">0</span><span style="color:#ccc;">&#93;</span><span style="color:#ccc;">.</span><span style="color:#00ccff;">toXMLString</span><span style="color:#ccc;">&#40;</span><span style="color:#ccc;">&#41;</span><span style="color:#ccc;">&#41;</span> <span style="color:#ff6600;">//now we see it!</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2009/04/01/e4x-gotcha-with-xml-in-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>stage.width vs. stage.stageWidth in Actionscript 3</title>
		<link>http://ajarproductions.com/blog/2009/03/18/flash-stage-width-vs-stagewidth-in-actionscript-3/</link>
		<comments>http://ajarproductions.com/blog/2009/03/18/flash-stage-width-vs-stagewidth-in-actionscript-3/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 23:09:51 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[gotcha]]></category>
		<category><![CDATA[height]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[stage]]></category>
		<category><![CDATA[width]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=350</guid>
		<description><![CDATA[Careful with this one. It&#8217;s easy to miss if you&#8217;re accustomed to Actionscript 1 or 2. stage.width will return the width of the content on the stage and ignore any empty pixels around the edges. So if you only have a 100 px wide rectangle on stage, your stage.width will be 100. stage.stageWidth will give [...]]]></description>
			<content:encoded><![CDATA[<p>Careful with this one. It&#8217;s easy to miss if you&#8217;re accustomed to Actionscript 1 or 2.</p>
<p><a class="lightview" href="http://ajarproductions.com/blog/wp-content/uploads/2009/03/stagewidth.gif"><img title="Stage Width Example" src="http://ajarproductions.com/blog/wp-content/uploads/2009/03/stagewidth.gif" alt="Stage Width Example" width="530" height="351" /></a></p>
<p><em>stage.width</em> will return the width of the content on the stage and ignore any empty pixels around the edges. So if you only have a 100 px wide rectangle on stage, your <em>stage.width </em>will be 100<em>.<br />
</em></p>
<p><em>stage.stageWidth</em> will give you the size of the stage, more like <em>Stage.width</em> in Actionscript 2. Use <em>stage.stageWidth</em> if you&#8217;re trying to position elements relative to the stage.</p>
<p>Same goes for <em>stage.height</em> and <em>stage.stageHeight</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2009/03/18/flash-stage-width-vs-stagewidth-in-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hacking the Flash CS4 Motion Model to Create New Extensions</title>
		<link>http://ajarproductions.com/blog/2009/03/04/hacking-the-flash-cs4-motion-model-to-create-extensions/</link>
		<comments>http://ajarproductions.com/blog/2009/03/04/hacking-the-flash-cs4-motion-model-to-create-extensions/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 02:03:43 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[ExtendScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[jsfl]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[cs4]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[motion]]></category>
		<category><![CDATA[tween]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=337</guid>
		<description><![CDATA[This JSFL technique can be used in Flash CS4 in lieu of the non-existent timeline.createMotionObjectTween() command. I refer to this as a "hack" because it's an unsupported method, but given the complexity of what can be created with this new motion model, editing the XML is actually a fairly efficient way to go about creating/editing a tween. I used this technique to create the EaseCaddy, MotionSketch, and MotionBlur extensions.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quote from an email I sent to <a href="http://keyframer.com/" target="_blank">Chris Georgenes</a> and <a href="http://quip.net" target="_blank">David Stiller</a> on 9/29/08 about an extension idea that I had using the new motion tweens in Flash CS4 (before I&#8217;d even used the application):</p>
<blockquote><p>Given that the new motion tween creates a bezier path, I&#8217;m guessing that we&#8217;ll have access to creating such a path with JSFL. Which led me to think about creating that path in real-time, similar to the real-time drawing that I&#8217;d seen from <a href="http://www.keyframer.com/index.php/2007/07/05/scribblebot/" target="_blank">ScribbleBot</a> on Chris&#8217;s blog. Instead of scribbling a line in real-time, I&#8217;d be sketching a motion path. There would be a variable to determine &#8220;smoothness&#8221; so that it doesn&#8217;t create an unmananageable amount of new motion keyframes. And it could probably be done with a custom tool rather than a panel, so that the sketching could be done directly on the stage.</p>
<p>That also leads me to wonder if there&#8217;s a way to record the armature animation in real-time and convert it to a motion tween, similar to the feature that already exists in After Effects CS3.</p></blockquote>
<p>I know, I&#8217;m a nerd. The first idea there became <a href="http://ajarproductions.com/blog/2009/02/10/flash-extension-motionsketch/">MotionSketch</a>. I haven&#8217;t yet found a way to accomplish the second idea with the armature, but I have a few ideas.</p>
<p>Prior to the release of Flash CS4, I had gotten a little hooked on creating Flash extensions. It&#8217;s quite easy to create a classic motion tween with JSFL (Flash Javascript), you can simply make the following call: <em>timeline.createMotionTween()</em>. It was likely that <em>createMotionTween() </em>would remain for legacy support even though the name of the tween had changed from &#8220;motion&#8221; to &#8220;classic.&#8221; I&#8217;d seen all of the great <a href="http://flashthusiast.com/2008/09/22/the-new-way-of-tweening-in-flash-cs4-or-new-motion-in-flash-cs4-makes-your-animations-better-faster-stronger/" target="_blank">new motion features</a> demonstrated online, and I expected there might be an equivalent call for a new motion tween.  When Lee Brimelow <a href="http://theflashblog.com/?p=448" target="_blank">linked to the CS4 documentation</a>, I went right to the <a href="http://help.adobe.com/en_US/Flash/10.0_ExtendingFlash/index.html" target="_blank">Extending Flash</a> section to see what had been added. I didn&#8217;t see any additions for the motion features, but I had also previously seen <a href="http://theflashblog.com/?p=445" target="_blank">Lee&#8217;s post</a> on <a href="http://www.flashcamp.org/" target="_blank">Flash Camp</a> in San Francisco. Fortunately, I live close to San Francisco and I decided to head over try out the application early, and maybe get a chance to talk with some of the Flash team about any undocumented features.</p>
<p>While at Flash Camp, I spoke with <a href="http://blogs.adobe.com/rgalvan/" target="_blank">Richard Galvan</a> and he directed me to John Mayhew, the engineer behind the new motion model in Flash. John was very affable and willing to follow up with me, but he didn&#8217;t know of any undocumented features offhand. Unfortunately, adding features to the JSFL API is usually somewhat of an afterthought because so much of the development time is spent on the new features themselves. I had a few ideas to use the new 3D features while at Flash Camp as well, but they were similarly left out of the JSFL API.</p>
<p>So I let those ideas go for awhile and focused on a <a href="http://ajarproductions.com/blog/2008/10/12/flash-extension-combine-textfields/">different extension</a> as my Flash Camp project. A few weeks later, I got a little antsy and I starting digging around in the Flash configuration directory for clues. I noticed two files in the Javascript directory named <em>MotionXML.jsfl</em> and <em>MotionClipboard.xml</em>. I started looking around in the JSFL file for undocumented commands that I could use, but to little avail. I think I even put some trace calls into the JSFL to spit out info when copying motion from the Flash IDE. I noticed that even though copying and pasting a new motion tween appeared to work the same way in the Flash interface as copying and pasting a classic tween, a new motion tween was not triggering the calls in the JSFL file. Looking at the XML file, I found that even though copying a motion tween wasn&#8217;t using the same JSFL calls, it was saving XML to the same file&#8230;just different XML. The classic tweens were generating XML with a root tag of <em>&lt;Motion&gt;</em> and the new tweens were generating a root tag of <em>&lt;AnimationCore&gt;</em>.</p>
<p>Flash seemed to be able to discern which type of motion it was copying or pasting and acting accordingly. So it occurred to me that I could grab the data from the motion clipboard and alter it before pasting it back. Additionally, if I wanted data from an existing tween, I could run a Copy Motion command, available to JSFL as of Flash CS3 thanks to Robert Penner&#8217;s <a href="http://robertpenner.com/flashblog/2007/08/links-for-copy-motion-as-actionscript-3_10.html" target="_blank">Copy Motion feature</a>, then go about altering and pasting. These are the extensions that I&#8217;ve created thus far using that very technique:</p>
<ul>
<li><a href="http://ajarproductions.com/blog/2009/02/26/the-missing-flash-panel-easecaddy/">EaseCaddy</a></li>
<li><a href="http://ajarproductions.com/blog/2009/02/10/flash-extension-motionsketch/">MotionSketch</a></li>
<li><a href="http://ajarproductions.com/blog/2009/03/02/new-flash-extension-motionblur/">MotionBlur</a></li>
</ul>
<p>Below is a rundown of the steps I used in the extensions mentioned above. This technique can be used in lieu of the non-existent <em>timeline.createMotionObjectTween()</em> command. I refer to this as a &#8220;<a href="http://en.wikipedia.org/wiki/Hack_(technology)" target="_blank">hack</a>&#8221; because it&#8217;s an unsupported method, but given the complexity of what can be created with this new motion model, editing the XML is actually a fairly efficient way to go about creating/editing a tween. If the XML is not properly formed, it can cause Flash to crash when you try to paste the motion, or it can create some funky bugs in the Motion Editor. Be sure to test your code thoroughly before releasing anything for public consumption.  The language is <a href="http://help.adobe.com/en_US/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fe8.html" target="_blank">JSFL</a> (used to automate and manipulate the Flash authoring environment). There&#8217;s a link to documentation for the AnimationCore XML listed in step 3.</p>
<p><span id="more-337"></span></p>
<p><strong>Step 1:</strong> Store the motion clipboard so you can restore it when you&#8217;re done. In some cases, I store it as a file. In this example, I store it as a variable.</p>
<p><code>var MOTION_CLIPBOARD = fl.configURI + "Javascript/MotionClipboard.xml";<br />
var tl = fl.getDocumentDOM().getTimeline();<br />
var storedMotion = FLfile.read(MOTION_CLIPBOARD);</code></p>
<p><strong>Step 2(a):</strong> Copy motion to clipboard, retrieve the new clipboard contents and convert to XML. Use this step if you want alter an existing motion tween. The <a href="http://ajarproductions.com/blog/2009/02/28/new-flash-extension-motionblur/">MotionBlur</a> extension uses this step.</p>
<p><code>tl.copyMotion();<br />
var xmlstr = FLfile.read(MOTION_CLIPBOARD);<br />
var motionXML = new XML(xmlstr)</code></p>
<p><strong>Step 2(b)</strong>: Instead of copying the motion, you can create a new tween by loading a more or less blank motion XML template and adding content to it. The <a href="http://ajarproductions.com/blog/2009/02/10/flash-extension-motionsketch/">MotionSketch</a> extension uses this step.<a href="http://ajarproductions.com/blog/2009/02/10/flash-extension-motionsketch/"><br />
</a></p>
<p><strong>Step 3:</strong> The motion XML can then be altered using <a href="http://robertpenner.com/flashblog/2007/08/jsfl-updated-to-javascript-16-gains-e4x.html">E4X</a>. This portion of the code is different for each extension, depending on what the extension is trying to accomplish. Here&#8217;s the <a href="http://flashthusiast.com/2008/11/04/understanding-flash-cs4-motion-xml/" target="_blank">documentation on CS4 Motion XML</a> that Flash engineer John Mayhew graciously put together.</p>
<p><strong>Step 4:</strong> Write the altered XML to the motion clipboard.</p>
<p><code>FLfile.write(MOTION_CLIPBOARD, motionXML.toXMLString());</code></p>
<p><strong>Step 5:</strong> Paste the altered motion.</p>
<p><code>tl.pasteMotion();</code></p>
<p><strong>Step 6:</strong> Restore the motion clipboard for the user.</p>
<p><code>FLfile.write(MOTION_CLIPBOARD, storedMotion);</code></p>
<p>If you want to know if a motion tween has already been applied, you can retrieve the <em>tweenType</em> property from the current frame. A classic tween will return a value of &#8220;<em>motion</em>&#8221; and a new motion tween will return a value of &#8220;<em>motion object</em>&#8220;. If you use Step 2(a), you&#8217;ll want to check and make sure you have a &#8220;motion object&#8221; selected before proceeding.</p>
<p>And there you have it.</p>
<p>There are other ways to go about this process. You could, since motion presets are just motion XML files, run this process through the <a href="http://help.adobe.com/en_US/Flash/10.0_ExtendingFlash/WS6F01C4D8-31E3-4d68-BB08-2E4C116DA70E.html" target="_blank">Motion Presets panel&#8217;s JSFL calls</a>, but this would require more steps than the process laid out above.</p>
<p><b>Update (1/12/10)</b>: Flash CS5 now has direct JSFL access to the calls documented in this post. Check out this <a href="http://active.tutsplus.com/tutorials/workflow/creating-advanced-motion-presets-in-flash-with-jsfl/" target="_blank">video tutorial</a> that I produced on ActiveTuts for more info.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2009/03/04/hacking-the-flash-cs4-motion-model-to-create-extensions/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Creating Extension Manager Packages for Creative Suite Apps</title>
		<link>http://ajarproductions.com/blog/2009/03/01/extension-manager-for-cs4/</link>
		<comments>http://ajarproductions.com/blog/2009/03/01/extension-manager-for-cs4/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 22:10:35 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[extensions]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[abobe]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[package]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=333</guid>
		<description><![CDATA[If you&#8217;ve opened Extension Manager CS4, you might have noticed there&#8217;s a longer list of products available than there have been in previous versions. You can now package Illustrator, InDesign, Photoshop, InCopy, and Bridge scripts and SWF panels (yes, most of these apps can have SWF panels now!) as Extension Manager packages. Flash, Fireworks, and [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve opened Extension Manager CS4, you might have noticed there&#8217;s a longer list of products available than there have been in previous versions.</p>
<p><a class="lightview" href="http://ajarproductions.com/blog/wp-content/uploads/2009/03/xman.png"><img class="alignnone size-full wp-image-360" title="Extension Manager CS4" src="http://ajarproductions.com/blog/wp-content/uploads/2009/03/xman.png" alt="Extension Manager CS4" width="550" height="400" /></a></p>
<p>You can now package Illustrator, InDesign, Photoshop, InCopy, and Bridge scripts and SWF panels (yes, most of these apps can have <a href="http://blog.drwoohoo.com/?p=654" target="_blank">SWF panels</a> now!) as <a href="http://www.adobe.com/exchange/em_download/" target="_blank">Extension Manager</a> packages. Flash, Fireworks, and Dreamweaver have worked with Extension Manager for years (since they all used to be Macromedia products). Extension Manager comes free with any Adobe CS4 application, so CS4 users will already have it installed.  So far, I haven&#8217;t noticed Adobe making a big deal about this, but this is a great new capability for Adobe users and developers.</p>
<p><span id="more-333"></span></p>
<p>You may have noticed Extension Manager extension (.mxp) files showing up on my blog for Illustrator and InDesign scripts:</p>
<ul>
<li><a href="http://ajarproductions.com/blog/2008/11/23/merge-text-extension-for-illustrator/">Merge Text Extension for Adobe Illustrator</a></li>
<li><a href="http://ajarproductions.com/blog/2008/12/05/send-colors-from-indesign-and-illustrator-to-flash/">Send Colors from InDesign and Illustrator to Flash</a></li>
<li><a href="http://ajarproductions.com/blog/2008/11/28/merge-textframes-extension-for-adobe-indesign/">Merge TextFrames Extension for Adobe InDesign</a></li>
</ul>
<p>There are several advantages to using Extension Manager to install Extendscripts:</p>
<ul>
<li>Easy install: no complicated, cross-platform installation instructions needed</li>
<li>Easy uninstall</li>
<li>Version control</li>
<li>Extensions can also be disabled without uninstalling</li>
<li>A central location for extension instructions and credits</li>
<li>Built-in license agreement</li>
</ul>
<p>Packaging an extension can seem daunting, but it&#8217;s a fairly simple process to put one together. Especially if you&#8217;re already somewhat familiar <a href="http://en.wikipedia.org/wiki/Xml" target="_blank">XML</a> files. There are two main components in packaging an extension:</p>
<ul>
<li>MXI (XML) file</li>
<li>source files</li>
</ul>
<p>The MXI file is just an XML file with information about your extension, its author, (optional) license agreement information, and where to install the necessary files. You can also find complete details on the <a href="http://www.adobe.com/go/em_file_format" target="_blank">MXI file format</a>.</p>
<p>Don&#8217;t fret if you&#8217;re not familiar with XML. It&#8217;s a fairly readable text format, similar to HTML. XML differs in that it doesn&#8217;t have a restricted set of tags like HTML (tags are what appear between less than &#8220;&lt;&#8221; and great than &#8220;&gt;&#8221; brackets&#8211; <em>e.g.</em>, <em>&lt;body&gt;</em> is an HTML tag).</p>
<p>Lee Brimelow has a <a href="http://www.gotoandlearn.com/play?id=66" target="_blank">great video tutorial</a> on creating a SWF Panel extension in Flash. If you skip ahead to about 19 minutes in, you&#8217;ll see an example of an MXI file and how to create the MXP package using Extension Manager. You can also download his sample files from this page as well. This tutorial is what got me started making extensions.</p>
<p>Additionally, these two tutorials also have great step-by-step examples on how to populate an MXI file:</p>
<ul>
<li><a href="http://www.adobe.com/devnet/flash/articles/invisible_button_04.html">Adobe &#8211; Developer Center : Creating and packaging a professional JSFL command</a></li>
<li><a href="http://www.adobe.com/devnet/fireworks/articles/mxp_texture_ext.html">Adobe &#8211; Developer Center : Creating an MXP Texture Extension for Fireworks</a></li>
</ul>
<p>There are also tools that help you put together MXI files like this Flash panel: <a href="http://www.muzakdeezign.com/mxi_creator/download.asp" target="_blank">MXI file creator</a>.</p>
<p>One thing you&#8217;ll notice inside an MXI file is the <em>&lt;files&gt;</em> node. This node lists all of the files that will be installed to the user&#8217;s computer. The <em>&lt;files&gt;</em> node will contain individual <em>&lt;file&gt;</em> nodes which have a <em>source</em> attribute and a <em>destination</em> attribute.</p>
<p><code>&lt;files&gt;<br />
&lt;file source="Queasy Tools.swf" destination="$flash/WindowSWF" /&gt;<br />
&lt;/files&gt;</code></p>
<p>If your source files are in the same folder as your MXI file, you simply have assign the filenames of those files to your <em>source</em> attributes. The <em>destination</em> attribute is where much of the power of an MXI file is found, because it can contain special, platform-independent keywords. Each application has its own set of keywords. The keywords begin with a dollar sign ($) character (<em>$flash</em> in the example above refers to the Flash Configuration directory). A complete list of keywords for any of the enabled applications can be found in their respective <em>XManConfig.xml</em> file.</p>
<p>Here&#8217;s the Illustrator CS4 config from my system (<em>Applications/Adobe Illustrator CS4/Configuration/XManConfig.xml</em>):</p>
<p><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;Configuration&gt;<br />
&lt;VariableForExMan&gt;<br />
&lt;Data key="UserExtensionFolder"&gt;$InstallFolder/Configuration/Extensions&lt;/Data&gt;<br />
&lt;Data key="$illustrator"&gt;$InstallFolder&lt;/Data&gt;<br />
&lt;Data key="$plugin"&gt;$InstallFolder/Plug-ins.localized&lt;/Data&gt;<br />
&lt;Data key="$scripting"&gt;$InstallFolder/Scripting.localized&lt;/Data&gt;<br />
&lt;Data key="$presets"&gt;$InstallFolder/Presets.localized&lt;/Data&gt;<br />
&lt;Data key="DisplayName"&gt;Illustrator CS4&lt;/Data&gt;<br />
&lt;Data key="ProductName"&gt;Illustrator&lt;/Data&gt;<br />
&lt;Data key="ProductVersion"&gt;14.0&lt;/Data&gt;<br />
&lt;Data key="IconPath"&gt;Configuration/ai_exman_24x24.png&lt;/Data&gt;<br />
&lt;Data key="SupportedInSuite"&gt;CS4&lt;/Data&gt;<br />
&lt;Data key="DefaultLocale"&gt;en_US&lt;/Data&gt;<br />
&lt;Data key="EmStorePath"&gt;$SharedRibsDataFolder/Adobe/Extension Manager2/Illustrator CS4&lt;/Data&gt;<br />
&lt;/VariableForExMan&gt;<br />
&lt;/Configuration&gt;</code></p>
<p>One thing that hasn&#8217;t quite been perfected in CS4 is that, in some cases, a keyword takes you to a directory which has language/region-specific sub-directories. For example, if I take the <em>$presets</em> keyword from the Illustrator config file above for my <em>destination</em> attribute, in order to install a script in the proper location on my machine, the complete path would look like this:</p>
<p><em>destination=&#8221;$presets/en_us/Scripts&#8221;</em><br />
(these strings are case-insensitive in an MXI file)</p>
<p>The problem here, is that a user who didn&#8217;t install the US English version of Illustrator won&#8217;t be able to install this version of my extension. So it&#8217;s not perfect&#8230;yet&#8230;but still very useful, and I&#8217;m confident that Adobe will resolve this in CS5.</p>
<p>Once you&#8217;ve finished creating your MXI file, and you&#8217;ve got your scripts and/or SWFs that you want to package, you can create your extension. To create an MXP file, all you have to do is double-click your MXI file and Extension Manager will open, package the extension, and prompt you on where you&#8217;d like to save it. Your extension is now ready to distribute.<a href="http://www.muzakdeezign.com/mxi_creator/download.asp"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2009/03/01/extension-manager-for-cs4/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>LiveHTTPHeaders Firefox Addon: See what&#8217;s being loaded into your page</title>
		<link>http://ajarproductions.com/blog/2008/12/17/livehttpheaders-firefox-addon-see-whats-being-loaded-into-your-page/</link>
		<comments>http://ajarproductions.com/blog/2008/12/17/livehttpheaders-firefox-addon-see-whats-being-loaded-into-your-page/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 18:11:58 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[activity]]></category>

		<guid isPermaLink="false">http://ajarproductions.com/blog/?p=238</guid>
		<description><![CDATA[A while back, someone tipped my off to the Activity Window in Safari. This window is fantastic if you doing Flash development and need to debug on a live website. It will show you any images, videos, XML files, or anything else that&#8217;s getting loaded into your page. I&#8217;m a Firefox user, so I went [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, someone tipped my off to the <a href="http://www.macworld.com/article/56614/2007/03/safariactivity.html" target="_blank">Activity Window</a> in Safari. This window is fantastic if you doing Flash development and need to debug on a live website. It will show you any images, videos, XML files, or anything else that&#8217;s getting loaded into your page.</p>
<p>I&#8217;m a Firefox user, so I went looking for an add-on that would do the same thing in Firefox. While it&#8217;s not quite as organized (i.e., it isn&#8217;t structured in a tree menu like the Activity Window), the &#8220;generate&#8221; tab of <a href="http://livehttpheaders.mozdev.org/installation.html" target="_blank">livehttpheaders</a> is a pretty close substitution.</p>
<p>Originally found on <a href="http://whatdoiknow.org/archives/002166.shtml" target="_blank">What Do I Know</a>.</p>
<p><strong>UPDATE</strong>:  As Tim notes below, <a href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Firebug</a> also has this capability. It&#8217;s under the &#8216;net&#8217; section of the Firebug window. You have to choose to enable this feature before you see anything.</p>
<p><a href="http://livehttpheaders.mozdev.org/installation.html" target="_blank"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajarproductions.com/blog/2008/12/17/livehttpheaders-firefox-addon-see-whats-being-loaded-into-your-page/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

