<?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>daklab</title>
	<atom:link href="http://derekknox.com/daklab/feed/" rel="self" type="application/rss+xml" />
	<link>http://derekknox.com/daklab</link>
	<description>Design and Development Tips, Tricks, and Experiments</description>
	<lastBuildDate>Sat, 04 Feb 2012 21:11:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tutorial: Tracking Browser Content Window Size with Google Analytics (2 of 2)</title>
		<link>http://derekknox.com/daklab/2012/02/04/tutorial-tracking-browser-content-window-size-with-google-analytics-2-of-2/</link>
		<comments>http://derekknox.com/daklab/2012/02/04/tutorial-tracking-browser-content-window-size-with-google-analytics-2-of-2/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 21:11:41 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Browser Content Window]]></category>
		<category><![CDATA[GA]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Sizing]]></category>
		<category><![CDATA[Tracking]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=344</guid>
		<description><![CDATA[* This post assumes you have a Google Analytics account. Introduction This is a follow up to my previous post Tutorial: Tracking Browser Content Window Size with Google Analytics (1 of 2) where I explained how to incorporate a tracking scheme to read and record your site&#8217;s visitors browser dimensions (as opposed to screen resolution). This is powerful because [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This post assumes you have a Google Analytics account.</em></p>
<p><strong>Introduction</strong></p>
<p>This is a follow up to my previous post <em><a title="Tracking Browser Content Window Size with Google Analytics (1 of 2)" href="http://derekknox.com/daklab/2012/01/25/tutorial-tracking-browser-content-window-size-with-google-analytics/">Tutorial: Tracking Browser Content Window Size with Google Analytics (1 of 2)</a></em> where I explained how to incorporate a tracking scheme to read and record your site&#8217;s visitors browser dimensions (as opposed to screen resolution). This is powerful because you get data which informs you of the viewing area of the browsers of your visitors. You can come to your own conclusions with how to use your data, but you can quickly get an idea if certain content is out of your visitors viewing area and/or if your layout and design are as efficient as they could be. That said, I will now explain how to view this data in Google Analytics.</p>
<p><span id="more-344"></span></p>
<p><strong>Icon</strong></p>
<p><em><a href="http://derekknox.com/daklab/wp-content/uploads/2012/02/ArrowDot.jpg"><img class="alignleft size-full wp-image-359" title="ArrowDot" src="http://derekknox.com/daklab/wp-content/uploads/2012/02/ArrowDot.jpg" alt="" width="60" height="69" /></a></em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This icon is used in the images below and it highlights the areas of focus referenced in the steps.</p>
<p><strong>Step 1 &#8211; Log In and Standard Reporting</strong></p>
<p>First you need to log in to your Google Analytics account that you&#8217;ve synced with the Tracking ID that you set up via the previous post. Then you need to ensure you are viewing the <em>Standard Reporting </em>(<em>icon 1</em>) tab as shown below.</p>
<p><a href="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step1.jpg"><img class="alignleft size-full wp-image-390" title="GA_Tracking_2_of_2_step1" src="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step1.jpg" alt="" width="780" height="500" /></a></p>
<p>&nbsp;</p>
<p><strong>Step 2 &#8211; Content and Overview</strong></p>
<p>Then you need to select the <em>Content (<em>icon 1</em>) </em>drop down and select <em>Overview (<em>icon 2</em>)</em>.  Again here is an image for reference.</p>
<p><a href="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step2.jpg"><img class="alignleft size-full wp-image-393" title="GA_Tracking_2_of_2_step2" src="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step2.jpg" alt="" width="780" height="500" /></a></p>
<p>&nbsp;</p>
<p><strong>Step 3 &#8211; Event Category and Browser Dimensions</strong></p>
<p>Next you need to select <em>Event Category (<em>icon 1</em>) </em>followed by the selection of <em>Browser Dimensions (<em>icon 2</em>). </em>From here you will be able to view the stats of the Event Actions that have been tracked. Again, these are <em>Initial Size</em> and <em>Resize.</em></p>
<p><a href="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step3.jpg"><img class="alignleft size-full wp-image-394" title="GA_Tracking_2_of_2_step3" src="http://derekknox.com/daklab/wp-content/uploads/2012/02/GA_Tracking_2_of_2_step3.jpg" alt="" width="780" height="193" /></a></p>
<p>&nbsp;</p>
<p>That is it. If you have any questions feel free to comment. Peace.</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2012/02/04/tutorial-tracking-browser-content-window-size-with-google-analytics-2-of-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Tracking Browser Content Window Size with Google Analytics (1 of 2)</title>
		<link>http://derekknox.com/daklab/2012/01/25/tutorial-tracking-browser-content-window-size-with-google-analytics/</link>
		<comments>http://derekknox.com/daklab/2012/01/25/tutorial-tracking-browser-content-window-size-with-google-analytics/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 03:40:19 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Browser Content Window]]></category>
		<category><![CDATA[GA]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Sizing]]></category>
		<category><![CDATA[Tracking]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=287</guid>
		<description><![CDATA[* This post assumes you are familiar with Google Analytics. It also assumes you are familiar with HTML and Javascript. Introduction Google Analytics is super powerful and the fact it is free is amazing. If you don&#8217;t know what it is and you work in Web Development it is a must that you introduce yourself to [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This post assumes you are familiar with Google Analytics. It also assumes you are familiar with HTML and Javascript.</em></p>
<p><strong>Introduction</strong></p>
<p>Google Analytics is super powerful and the fact it is free is amazing. If you don&#8217;t know what it is and you work in Web Development it is a must that you introduce yourself to it (or some other form of analytic strategy). Check it out at <a href="http://www.google.com/analytics/" target="_blank">http://www.google.com/analytics/</a>. If you are here because you want to add Browser Size (as opposed to Screen Resolution) tracking to your Google Analytics account(s) then you&#8217;ve come to the right place. Enjoy.</p>
<p><span id="more-287"></span></p>
<p><strong>Step 1 &#8211; Download resizeTracker.js</strong></p>
<p>First you need to download <a title="resizeTracker.js" href="http://derekknox.com/downloads/resizeTracker.zip">resizeTracker.js</a>.</p>
<p><strong>Step 2 &#8211; Update resizeTracker.js with your Google Analytics Tracking ID</strong></p>
<p>Next you need to open the downloaded resizeTracker.js file and update it. To update it simply do a <em>Find and Replace f</em>or &#8220;YOUR_TRACKING_ID&#8221; and replace it with your actual Google Analytics tracking id. Simple.</p>
<p><strong>Step 3 &#8211; Upload resizeTracker.js and Update your HTML page(s) </strong></p>
<p>Next you need to add the following script tags just under your &lt;title&gt; element of your HTML page(s). Like so&#8230;</p>
<p>[javascript]<br />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script><br />
<script type="text/javascript" src="http://YOUR_WEBSITE.com/YOUR_PATH_TO_RESIZETRACKER.JS/resizeTracker.js"></script><br />
[/javascript]</p>
<p>Line 1 is important because resizeTracker.js uses jQuery and this line ensures it is loaded in the page. Line 2 is responsible for ensuring resizeTracker.js gets loaded in the page.</p>
<p>* Make sure your correctly set up the <em>src</em> attribute on Line 2 to reflect where you&#8217;ve actually uploaded your resizeTracker.js copy. In other words make sure you replace the strings YOUR_WEBSITE and YOUR_PATH_TO_RESIZETRACKER with their respective string values.</p>
<p>Finally you drop the following script after your closing &lt;/body&gt; tag of your HTML page(s). This checkInitialSize() call is what tracks the Browser Content Window size when the page first loads. Any subsequent resizes will be tracked via resizeTracker.js. Here is the script example.</p>
<p>[javascript]<br />
<script>		
	//initial check call
	$(function()
	{
		checkInitialSize();
	});
</script><br />
[/javascript]</p>
<p>That&#8217;s it. Simple eh? In part 2 I will show you how to access the results in Google Analytics.</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2012/01/25/tutorial-tracking-browser-content-window-size-with-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Crocus Modeller &#8211; Simple, Efficient, and Fun UML Tooling</title>
		<link>http://derekknox.com/daklab/2011/12/11/review-crocus-modeller-simple-efficient-and-fun-uml-tooling/</link>
		<comments>http://derekknox.com/daklab/2011/12/11/review-crocus-modeller-simple-efficient-and-fun-uml-tooling/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 21:36:03 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Crocus Modeller]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Unified Modelling Language]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=261</guid>
		<description><![CDATA[Introduction UML (Unified Modelling Language) is used to organize coding and development projects visually while being language agnostic. This is powerful because you can greatly decrease development time by creating a high level map of your entire program. In essence you create a visual map that defines class packages, class relationships, and the core methods and properties [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p><a title="UML" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML</a> (Unified Modelling Language) is used to organize coding and development projects visually while being language agnostic. This is powerful because you can greatly decrease development time by creating a high level map of your entire program. In essence you create a visual map that defines class packages, class relationships, and the core methods and properties of those classes. In doing so you have a visual map of your program that you can reference to plan your development strategy and timing. UML is nothing new, but the implementation as well as the features of Crocus Modeller make UML simple, efficient, and fun.</p>
<p><strong>Crocus Modeller</strong></p>
<p>Crocus Modeller is an AIR (Adobe Integrated Runtime) application that really empowers development. It is designed specifically for the Flash Platform, but in communicating with the developer via email, they are considering supporting languages other than just Actionscript 3. You can read about the tool at the official website <a href="http://crocusmodeller.com/">http://crocusmodeller.com/</a> to learn more and test drive the application. Below I&#8217;m simply going to point out my favorite features of the tool.</p>
<p><span id="more-261"></span></p>
<p><strong>Favorite Features</strong></p>
<p><em>Diagram to Code</em></p>
<p style="padding-left: 30px;">This feature is <span style="text-decoration: underline;">super</span> powerful, it enables you to auto create packages, classes, and the defined properties and method signatures that you&#8217;ve defined in your UML map. Take a test drive <a title="Test Drive" href="http://crocusmodeller.com/free/" target="_blank">here</a> and see how awesome this is for yourself.</p>
<p><em>Code to Diagram</em></p>
<p style="padding-left: 30px;">This feature is just as powerful but enables you to create a UML map based on a preexisting project structure. This enables you to see the entire program from a bird&#8217;s eye view to understand the project without having to dig deeply into the source code.</p>
<p><em>Type Completion</em></p>
<p style="padding-left: 30px;">Crocus Modeller actually auto-completes AS3, Flex, and your custom types. This is a must for any developer.</p>
<p>These three features are very powerful and extremely helpful. There are many other features that play a large role in Crocus Modeller, but these are the stand-outs in my book. Check out the rest of the features at <a href="http://crocusmodeller.com/features.html">http://crocusmodeller.com/features.html</a>. I highly recommend you at least take the <a title="Test Drive" href="http://crocusmodeller.com/free/" target="_blank">test drive</a> for Crocus Modeller to see if it will help you. I have a strong hunch that it will as it is a very helpful and powerful tool. It also accomplishes something that isn&#8217;t an easy task&#8230; it makes using UML fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2011/12/11/review-crocus-modeller-simple-efficient-and-fun-uml-tooling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: How to Pinch and Zoom in Android using AndEngine</title>
		<link>http://derekknox.com/daklab/2011/11/28/tutorial-how-to-pinch-and-zoom-in-android-using-andengine/</link>
		<comments>http://derekknox.com/daklab/2011/11/28/tutorial-how-to-pinch-and-zoom-in-android-using-andengine/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 06:58:56 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[AndEngine]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[IOnSceneTouchListener]]></category>
		<category><![CDATA[IPinchZoomDetectorListener]]></category>
		<category><![CDATA[Pinch]]></category>
		<category><![CDATA[Pinch and Zoom]]></category>
		<category><![CDATA[SmoothCamera]]></category>
		<category><![CDATA[Zoom]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=128</guid>
		<description><![CDATA[* This post assumes an intermediate knowledge of AndEngine and Java for Android. The assumption that the Scene and Engine have been initialized is also made. Introduction I&#8217;ve been working and experimenting with AndEngine for a little over a year now and I wanted to share some information regarding the &#8220;Pinch and Zoom&#8221; functionality built into [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This post assumes an intermediate knowledge of AndEngine and Java for Android. The assumption that the Scene and Engine have been initialized is also made.</em></p>
<p><strong>Introduction</strong></p>
<p>I&#8217;ve been working and experimenting with <a title="AndEngine" href="http://www.andengine.org/" target="_blank">AndEngine</a> for a little over a year now and I wanted to share some information regarding the &#8220;Pinch and Zoom&#8221; functionality built into the engine. The engine itself makes it pretty easy to utilize multi-touch pinch and zoom, but documentation explaining how to do so is lacking. There are examples which will help developers understand the intended purposes of many of the engine&#8217;s core concepts, and they can be found at <a href="http://code.google.com/p/andengineexamples/">http://code.google.com/p/andengineexamples/</a> .</p>
<p>Anyway, for my implementation I created the class <em>TouchAndCameraManager </em>which, as you might guess, helps me manage user touches and the camera&#8217;s reactive behavior<em>. </em>Below are the core steps needed to complete pinch and zoom in Android using AndEngine.</p>
<p><em><span id="more-128"></span></em></p>
<p><strong>Step 1 &#8211; Interface Implementation</strong></p>
<p>You&#8217;ll first need to implement the following interfaces in your desired class.</p>
<ul>
<li>IOnSceneTouchListener</li>
<li>IPinchZoomDetectorListener</li>
</ul>
<p>[java]<br />
public class TouchAndCameraManager implements IOnSceneTouchListener, IPinchZoomDetectorListener<br />
[/java]</p>
<p><strong>Step 2 &#8211; Initialize PinchZoomDetector Instance</strong></p>
<p>Next, you need to create the PinchZoomDetector instance, I&#8217;ve named it <em>mPinchZoomDetector</em>. I&#8217;ve chosen to create my instance in my <em>initialize() </em>method, but this can be done in the constructor or any other method you chose for that matter.</p>
<p>[java]<br />
// MultiTouch check<br />
if (MultiTouch.isSupportedByAndroidVersion())<br />
{<br />
	try<br />
	{<br />
		this.mPinchZoomDetector = new PinchZoomDetector(this);<br />
	}<br />
	catch (final MultiTouchException e)<br />
	{<br />
		this.mPinchZoomDetector = null;<br />
	}<br />
}<br />
else<br />
{<br />
	this.mPinchZoomDetector = null;<br />
}<br />
[/java]</p>
<p><strong>Step 3 &#8211; Initialize SmoothCamera/ZoomCamera Instance</strong></p>
<p>Next, you need to initialize your <em>SmoothCamera</em> instance, I&#8217;ve named mine <em>mCamera. SmoothCamera </em>extends <em>ZoomCamera </em>by the way.</p>
<p>[java]<br />
// SMOOTH_CAMERA_SPEED and SMOOTH_CAMERA_ZOOM_FACTOR_CHANGE are values you can play with to adhere to your liking.<br />
mCamera = new SmoothCamera(0, 0, mPhysicalScreenWidth, mPhysicalScreenHeight, SMOOTH_CAMERA_SPEED, 0, SMOOTH_CAMERA_ZOOM_FACTOR_CHANGE);<br />
mCamera.setBounds(0, mPhysicalScreenWidth, 0, mPhysicalScreenHeight);<br />
mCamera.setBoundsEnabled(true);<br />
mCamera.setZoomFactor(1f);<br />
[/java]</p>
<p><strong>Step 4 &#8211; Override Methods</strong></p>
<p>Next, you&#8217;ll need to override the following methods of the two implemented interfaces. The methods are</p>
<ul>
<li>onPinchZoomStarted</li>
<li>onPinchZoom</li>
<li>onPinchZoomFinished</li>
<li>onSceneTouchEvent</li>
</ul>
<p>[java]<br />
@Override<br />
public void onPinchZoomStarted(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent)<br />
{<br />
	// mPinchZoomStartFactor is calculated on start as it is used in the onPinchZoom() method<br />
	mPinchZoomStartFactor = mCamera.getZoomFactor();<br />
}</p>
<p>@Override<br />
public void onPinchZoom(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent, final float pZoomFactor)<br />
{<br />
	if (pZoomFactor != 1)<br />
	{<br />
		// check bounds<br />
		float newZoomFactor = mPinchZoomStartFactor * pZoomFactor;<br />
		if (newZoomFactor &lt;= mZoomMin)<br />
			mCamera.setZoomFactor(mZoomMin);<br />
		else if (newZoomFactor &gt;= ZOOM_MAX)<br />
			mCamera.setZoomFactor(ZOOM_MAX);<br />
		else<br />
			mCamera.setZoomFactor(newZoomFactor);<br />
	}<br />
}</p>
<p>@Override<br />
public void onPinchZoomFinished(final PinchZoomDetector pPinchZoomDetector, final TouchEvent pTouchEvent, final float pZoomFactor)<br />
{<br />
	// enable desired functionality because zooming is complete<br />
}</p>
<p>@Override<br />
public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent)<br />
{<br />
	if (mPinchZoomDetector != null)<br />
	{<br />
		mPinchZoomDetector.onTouchEvent(pSceneTouchEvent);</p>
<p>		if (mPinchZoomDetector.isZooming())<br />
		{<br />
			// disable functionality that shouldn&#8217;t occur while zooming<br />
		}<br />
		else<br />
		{<br />
			// enable functionality that should occur while zooming<br />
		}<br />
	}</p>
<p>	return true;<br />
}<br />
[/java]</p>
<p><strong>Conclusion</strong></p>
<p>Following the steps above will help you utilize AndEngine&#8217;s &#8220;Pinch and Zoom&#8221; functionality with ease. Feel free to experiment with the code snippets and/or ask any questions relating to this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2011/11/28/tutorial-how-to-pinch-and-zoom-in-android-using-andengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: Actionscript 3 Memory Management &#8211; Properly Removing Objects from Memory</title>
		<link>http://derekknox.com/daklab/2011/11/01/quick-tip-actionscript-3-memory-management-properly-removing-objects-from-memory/</link>
		<comments>http://derekknox.com/daklab/2011/11/01/quick-tip-actionscript-3-memory-management-properly-removing-objects-from-memory/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 05:07:15 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Essential Actionscript 3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Memory]]></category>
		<category><![CDATA[Memory Management]]></category>
		<category><![CDATA[Properly Removing Objects]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=88</guid>
		<description><![CDATA[* This is a republish from my previous lab. The original publish date was Apr 17, 2010. Introduction In working on projects and experimenting with memory management in Actionscript 3, I&#8217;ve come across a simple but very important checklist to properly remove objects from memory. The solution comes from looking back at chapter 14 of Essential Actionscript 3 by [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This is a republish from my previous lab. The original publish date was Apr 17, 2010.</em></p>
<p><strong>Introduction</strong></p>
<h4><span class="Apple-style-span" style="font-weight: normal;">In working on projects and experimenting with memory management in Actionscript 3, I&#8217;ve come across a simple but very important checklist to properly remove objects from memory. The solution comes from looking back at chapter 14 of </span><span style="text-decoration: underline;">Essential Actionscript 3</span><span class="Apple-style-span" style="font-weight: normal;"> by Colin Moock. The excerpt that triggered the light bulb above my head comes from the section &#8220;Disposing of Objects Intentionally&#8221; on page 273. It reads, &#8220;To eliminate all references to an object, we must manually remove it from any arrays that contain it and assign &#8220;null&#8221; (or some other value) to any variable that references it.&#8221;</span></h4>
<p>The problem I had involved arrays. I thought removing objects that were in the array from the display list and setting their values to null as well as nulling the array itself would be enough. This is<span style="text-decoration: underline;">NOT</span> the case however, you need to also manually remove the object from the array.</p>
<p><em><span id="more-88"></span></em></p>
<p><strong>Solution</strong></p>
<p>The checklist for properly enabling an object for Garbage Collection is as follows&#8230;</p>
<ol>
<li>Unregister all listeners</li>
<li>Stop all timers and intervals</li>
<li>Stop playheads (timeline, video, audio, etc.)</li>
<li>Deactivate objects that would become unreachable if the object itself became unreachable. (nullify)</li>
</ol>
<p>&nbsp;</p>
<p>A good resource for catching up and/or learning more about Garbage Collection (the Flash Player method of removing objects from memory) would be Chapter 14 of <span style="text-decoration: underline;">Essential Actionscript 3</span> by Colin Moock or online at&#8230; <a href="http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html">http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html</a></p>
<p><strong>Conclusion</strong></p>
<p>It is very important (for Flash Developers particularly) to make a habit of creating a public method for virtually every custom class which utilizes this checklist for the objects of that class. The method name is of developer choice, but would most likely be something along the lines of&#8230; dispose(), destroy(), selfDestruct(), etc. This method would utilize the checklist on its objects to enable them for Garbage Collection.</p>
<p>As content is viewed on mobile devices (devices that will most likely lack in specs and the processing power compared to your desktop/laptop), performance will play a much bigger role and will be greatly noticed by end users. Simply viewing the demos of Flash on mobile devices found <a href="http://tv.adobe.com/watch/flash-platform-in-action/adobe-air-mobile-on-droid" target="_blank">here</a> and <a href="http://www.adobe.com/devnet/flashplayer/articles/mobile_demos_fp10.1.html" target="_blank">here</a>, suggest to me that these Flash content instances employ great GC tactics and/or are very conservative in memory use.</p>
<p><strong>Tangent</strong></p>
<p>The &#8220;Flash on mobile videos&#8221; also suggest to me that Flash 10.1 is a great advancement and idea, but the hope of having the same Flash experience (desktop/laptop vs. mobile device) is just that a hope, a dream (only time will tell if Adobe can really make this a reality). Flash content seems to have gotten away with running on desktops/laptops while potentially having poor memory management. On a mobile device, this same content simply won&#8217;t. Though some blame could be put on the Flash Player itself, it seems the developers are most at blame. As a developer myself, it is our responsibility to be mindful and responsible for the memory management of our applications, tools, sites, etc.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2011/11/01/quick-tip-actionscript-3-memory-management-properly-removing-objects-from-memory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutorial: Full Browser Flash using SWFObject 2</title>
		<link>http://derekknox.com/daklab/2011/10/31/tutorial-full-browser-flash-using-swfobject-2/</link>
		<comments>http://derekknox.com/daklab/2011/10/31/tutorial-full-browser-flash-using-swfobject-2/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 04:48:29 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Full Browser Flash]]></category>
		<category><![CDATA[swfobject]]></category>
		<category><![CDATA[SWFObject 2]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=61</guid>
		<description><![CDATA[* This is a republish from my previous lab. The original publish date was Apr 7, 2010. Introduction In experimenting with SWFObject 2, I came across the question, how do I enable my flash content to display full browser? I found a few solutions but found the following solution to work best for me. The implementation is [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This is a republish from my previous lab. The original publish date was Apr 7, 2010.</em></p>
<p><span class="Apple-style-span" style="font-weight: bold;"><strong></strong>Introduction</span></p>
<p>In experimenting with SWFObject 2, I came across the question, how do I enable my flash content to display full browser? I found a few solutions but found the following solution to work best for me. The implementation is simple and effective.</p>
<p><strong>Solution</strong></p>
<p>The solution comes after viewing the source for the page found at <a href="http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_fullbrowserflash.html" target="_blank">http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_fullbrowserflash.html</a>. An explanation isn&#8217;t made, but the result is present in viewing the page, I have in turn created an explanation.</p>
<ol>
<li>You must create a page using <a href="http://code.google.com/p/swfobject/" target="_blank">SWFObject</a>, I used the <a href="http://code.google.com/p/swfobject/downloads/list" target="_blank">AIR app Generator </a>to streamline my HTML page build.</li>
<li>Ensure you set the &#8220;Dimensions&#8221; to &#8220;Percentage&#8221; and set 100 as the value for both the width and height.</li>
<li>Next you need to define some CSS (ideally in an external CSS file) and wrap your alternative content into another DIV tag. View the highlighted elements in the image below for visual reference.</li>
</ol>
<p>&nbsp;</p>
<p><em><span id="more-61"></span></em></p>
<p><span class="Apple-style-span" style="font-weight: bold;">Reference</span></p>
<p><a href="http://derekknox.com/daklab/wp-content/uploads/2011/10/reference2.jpg"><img class="alignleft size-full wp-image-79" title="SWFObject 2 Reference" src="http://derekknox.com/daklab/wp-content/uploads/2011/10/reference2.jpg" alt="SWFObject 2 Reference" width="700" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2011/10/31/tutorial-full-browser-flash-using-swfobject-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: Fixing Dynamic TextField Cut-Off in Actionscript 3</title>
		<link>http://derekknox.com/daklab/2011/10/30/tutorial-fixing-dynamic-textfield-cut-off-in-actionscript-3/</link>
		<comments>http://derekknox.com/daklab/2011/10/30/tutorial-fixing-dynamic-textfield-cut-off-in-actionscript-3/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 20:10:19 +0000</pubDate>
		<dc:creator>dknox</dc:creator>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Text Cutoff]]></category>
		<category><![CDATA[TextField]]></category>

		<guid isPermaLink="false">http://derekknox.com/daklab/?p=28</guid>
		<description><![CDATA[* This is a republish from my previous lab. The original publish date was Aug 6, 2009. Recently I was working with the TextFormat class and dynamic TextField instances in Actionscript 3 and was noticing a slight rendering error. It seemed as if some of the beginning and ending characters in the text field were being slightly cut-off. After doing some [...]]]></description>
			<content:encoded><![CDATA[<p>* <em>This is a republish from my previous lab. The original publish date was Aug 6, 2009.</em></p>
<p>Recently I was working with the TextFormat class and dynamic TextField instances in Actionscript 3 and was noticing a slight rendering error. It seemed as if some of the beginning and ending characters in the text field were being slightly cut-off. After doing some research I found the culprit and the solution as well. I found that the TextFormat object I was using to format the text of the TextField object(s) wasn&#8217;t being fully utilized.</p>
<p>The TextFormat object has two properties which can be used to fix this &#8220;cut-off&#8221; of text. They are the rightMargin and leftMargin properties and setting them will help to reduce and/or remove this &#8220;cut-off&#8221; effect (depending on the value set).</p>
<p>In my solution I used a value of 1 pixel for each property and ended up with my desired results. The value you use will be dependent on the placement of the TextField instance in accordance with other content as well as the font being used. This find was a simple yet effective solution. Simply setting the leftMargin and/or rightMargin properties of the TextFormat object that is formatting your TextField(s) instances will do the trick. Just ask yourself which side the &#8220;cut-off&#8221; is occurring and set a value to the correct property (trial and error the values until desired result is achieved).</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://derekknox.com/daklab/2011/10/30/tutorial-fixing-dynamic-textfield-cut-off-in-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

