<?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>Hjælp mig nu &#187; www.hjaelpmignu.dk</title>
	<atom:link href="http://blog.hjaelpmignu.dk/category/wwwhjaelpmignudk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hjaelpmignu.dk</link>
	<description>Hjælp til Adobes programmer</description>
	<lastBuildDate>Fri, 13 Jan 2012 11:28:03 +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>Mapping coordinates from one range to another in ActionScript 3.0</title>
		<link>http://blog.hjaelpmignu.dk/2011/11/mapping-coordinates-from-one-range-to-another-in-actionscript-3-0/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/11/mapping-coordinates-from-one-range-to-another-in-actionscript-3-0/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 11:51:57 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Tips og tricks]]></category>
		<category><![CDATA[Tutorial og artikler]]></category>
		<category><![CDATA[undervisning]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[processing]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=389</guid>
		<description><![CDATA[I am very fond of Processing, and the way it easily makes it possible to experiment with design ideas. One of the powerful features are it&#8217;s map() function, that takes a value and remaps it from one range to another. I haven&#8217;t seen a similar function in the ActionScript 3.0 reference, so &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/11/mapping-coordinates-from-one-range-to-another-in-actionscript-3-0/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>I am very fond of Processing, and the way it easily makes it possible to experiment with design ideas. One of the powerful features are it&#8217;s<a title="map function" href="http://processing.org/reference/map_.html"> map()</a> function, that takes a value and remaps it from one range to another. I haven&#8217;t seen a similar function in the ActionScript 3.0 reference, so I decided to make one to my own utils-library, because it is something the can come in handy in many situations. First I looked at using the Point() class, and interpolation to describe the ratios, but actually found it easier to just do it with regular math.</p>
<p>I haven&#8217;t looked at performance yet, and there is possibly a lot of ways to optimize this code &#8211; this article can be a start for further fine tuning. The helper function looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>val<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> inMin<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> inMax<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> outMin<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> outMax<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> decimals<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">uint</span>=<span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #6699cc; font-weight: bold;">var</span> returnVal<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">// Sets the total range for both in and out</span>
<span style="color: #6699cc; font-weight: bold;">var</span> inRange<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = inMax <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #6699cc; font-weight: bold;">var</span> outRange<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = outMax <span style="color: #000066; font-weight: bold;">-</span> outMin<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//calculates the ratio for the value in relation to the in range</span>
<span style="color: #6699cc; font-weight: bold;">var</span> ratio<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000;">&#40;</span>val <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">/</span>inRange<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #009900; font-style: italic;">//makes sure that the value is within range</span>
val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">max</span><span style="color: #000000;">&#40;</span>inMin<span style="color: #000066; font-weight: bold;">,</span> val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">min</span><span style="color: #000000;">&#40;</span>inMax<span style="color: #000066; font-weight: bold;">,</span> val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #009900; font-style: italic;">//Finds the same ratio in the out range and shift it into place</span>
returnVal = <span style="color: #000000;">&#40;</span>outRange <span style="color: #000066; font-weight: bold;">*</span> ratio<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">+</span> outMin<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//rounding of the decimals</span>
<span style="color: #6699cc; font-weight: bold;">var</span> factor<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">pow</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">10</span><span style="color: #000066; font-weight: bold;">,</span>decimals<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
returnVal = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">round</span><span style="color: #000000;">&#40;</span>returnVal<span style="color: #000066; font-weight: bold;">*</span>factor<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">/</span>factor<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #0033ff; font-weight: bold;">return</span> returnVal<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The function takes the the following arguments:</p>
<ul>
<li>val: the number to be remapped</li>
<li>inMin and inMax: The original range, in which the value is measures in relation to.</li>
<li>outMin and outMax: The destination range, that the value will be re-mapped to</li>
<li>decimals: sets the precision in decimals (optional)</li>
</ul>
<div>First it calculates the ranges with</div>
<div>
<pre>var inRange:Number = inMax - inMin;
var outRange:Number = outMax - outMin;</pre>
</div>
<div>These variables are defining the total range for both the incoming number, and the range of number is eventually will be placed within.</div>
<div>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">max</span><span style="color: #000000;">&#40;</span>inMin<span style="color: #000066; font-weight: bold;">,</span> val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">min</span><span style="color: #000000;">&#40;</span>inMax<span style="color: #000066; font-weight: bold;">,</span> val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></pre></div></div>

</div>
<div>In this function I have decided to make sure, that the value is within the boundaries of the inRange. If i took the value 4, and sets the range of number to be within 10 and 100, I would get some unexpected results. You could treat this differently, or even make it possible by omitting these lines.</div>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> ratio<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000;">&#40;</span>val <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">/</span>inRange<span style="color: #000066; font-weight: bold;">;</span></pre></div></div>

<div>ratio holds a number between 0 and 1 that defines where in the original range it is located. The closer to zero it gets, the lower the value &#8211; closer to one goes towards inMax.</div>
<pre>returnVal = (outRange * ratio) + outMin;</pre>
<div>Then the number is multiplied to the outRange to find the same relative point in the target range, and finally shifted into place by adding the outMin value. Negative values are treated fine in these ranges &#8211; when you add -200 to something, it is actually subtracted from the number.</div>
<div>
<pre>var factor:int = Math.pow(10,decimals);
returnVal = Math.round(returnVal*factor)/factor;</pre>
<div>The last part of the function is meant to round of the values. For performance, this could easily be removed, but it may be useful in some cases to have odd long numbers rounded and presented with only a few digits precition. First, the variable factor holds the value to be used in the rounding proces. For 1 digit it should be &#8220;10&#8243;, 2 digits is &#8220;100&#8243;, 3 is &#8220;1000&#8243; and so forth. That value is used in the line below, where it first multiplies the final value by the factor and then rounds it to an integer. Then it divides with the factor again. It goes something like this:</div>
</div>
<div>
<ol>
<li>factor is 1000 (3 digits)</li>
<li>value is <strong>134.744637</strong></li>
<li>Multiplication results in<strong> 134744.637</strong></li>
<li>Rounding returns <strong>134745</strong></li>
<li>divided by 1000 gives the result <strong>134.745</strong></li>
</ol>
<div>Finally the value is returned as a Number.</div>
</div>
<h4>Optimization</h4>
<div>There are a lot of code shortening, that can produce a speed improvement. You could also work with int or uint exclusively to gain some performance i suppose. Finally, you can remove the decimals and the lines that check if the number is in range. I have left the to show what functionality that could come in handy.</div>
<h4>An example</h4>
<div>As a practical example of the map() function you can  copy the following code into a Flash document. Here the map() fuction is directly inside the main code, but you could start building your own utils-library with the helper functions as public static function for easier access.</div>
<div>The code draws two squares with different sizes. When the mouse moves over the small square, it draw lines in the larger square, while maintaining the relative coordinates inside the squares.</div>
<div>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">Sprite</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">MouseEvent</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//make the small square and color it dark grey</span>
<span style="color: #6699cc; font-weight: bold;">var</span> inArea<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Sprite</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Sprite</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
inArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">beginFill</span><span style="color: #000000;">&#40;</span>0x333333<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
inArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">drawRect</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span><span style="color: #000000; font-weight:bold;">100</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">100</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
inArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">endFill</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>inArea<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//make the large square and color it black</span>
<span style="color: #6699cc; font-weight: bold;">var</span> outArea<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Sprite</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Sprite</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">beginFill</span><span style="color: #000000;">&#40;</span>0x000000<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">drawRect</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span><span style="color: #000000; font-weight:bold;">400</span><span style="color: #000066; font-weight: bold;">,</span><span style="color: #000000; font-weight:bold;">400</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">endFill</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">lineStyle</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">,</span> 0xFFFFFF<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0.3</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>outArea<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">x</span> = inArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//adds a listener for the small square, that listens for mouse movement</span>
inArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">MouseEvent</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">MOUSE_MOVE</span><span style="color: #000066; font-weight: bold;">,</span> updateDrawing<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #339966; font-weight: bold;">function</span> updateDrawing<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">MouseEvent</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #009900; font-style: italic;">//Map the local coordinates from the mouse movement to the size of the large square</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> targetX<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localX</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">target</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> targetY<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">localY</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">target</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">height</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">,</span> outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #009900; font-style: italic;">//Draws the line in the large square.</span>
	outArea<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">graphics</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">lineTo</span><span style="color: #000000;">&#40;</span>targetX<span style="color: #000066; font-weight: bold;">,</span> targetY<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #009900; font-style: italic;">//Helper function</span>
<span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>val<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> inMin<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> inMax<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> outMin<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> outMax<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">,</span> decimals<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">uint</span>=<span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> returnVal<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span><span style="color: #000066; font-weight: bold;">;</span>
	<span style="color: #009900; font-style: italic;">// Sets the total range for both in and out</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> inRange<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = inMax <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000066; font-weight: bold;">;</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> outRange<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = outMax <span style="color: #000066; font-weight: bold;">-</span> outMin<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #009900; font-style: italic;">//makes sure that the value is within range</span>
	val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">max</span><span style="color: #000000;">&#40;</span>inMin<span style="color: #000066; font-weight: bold;">,</span>val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
	val = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">min</span><span style="color: #000000;">&#40;</span>inMax<span style="color: #000066; font-weight: bold;">,</span>val<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #009900; font-style: italic;">//calculates the ratio for the value in relation to the in range</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> ratio<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000;">&#40;</span>val <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">/</span> inRange<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #009900; font-style: italic;">//Finds the same ratio in the out range and shift it into place</span>
	returnVal = <span style="color: #000000;">&#40;</span>outRange <span style="color: #000066; font-weight: bold;">*</span> ratio<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">+</span> outMin<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #009900; font-style: italic;">//rounding of the decimals</span>
	<span style="color: #6699cc; font-weight: bold;">var</span> factor<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">pow</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">10</span><span style="color: #000066; font-weight: bold;">,</span>decimals<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
	returnVal = <span style="color: #004993;">Math</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">round</span><span style="color: #000000;">&#40;</span>returnVal<span style="color: #000066; font-weight: bold;">*</span>factor<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">/</span>factor<span style="color: #000066; font-weight: bold;">;</span>
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">return</span> returnVal<span style="color: #000066; font-weight: bold;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/11/mapping-coordinates-from-one-range-to-another-in-actionscript-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Platform is dead. Long live the Flash Platform</title>
		<link>http://blog.hjaelpmignu.dk/2011/10/flash-platform-is-dead-long-live-the-flash-platform/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/10/flash-platform-is-dead-long-live-the-flash-platform/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 22:49:19 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Adobe Flash Builder]]></category>
		<category><![CDATA[Adobe Flash Professional]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[CS5.5]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[Adobe MAX]]></category>
		<category><![CDATA[AIR 3]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Flash Player 11]]></category>
		<category><![CDATA[Flash Professional]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=367</guid>
		<description><![CDATA[Adobe MAX has this year been an interesting and epic experience, in many ways. We have seen Adobe doing a lot of progress on the HTML5 platform, and no critiques can come and say, that they are trying to limit it&#8217;s possibilities in an attempt to favor Flash. Seing programs &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/10/flash-platform-is-dead-long-live-the-flash-platform/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Adobe MAX has this year been an interesting and epic experience, in many ways. We have seen Adobe doing a lot of progress on the HTML5 platform, and no critiques can come and say, that they are trying to limit it&#8217;s possibilities in an attempt to favor Flash. Seing programs like Adobe Edge and Adobe Muse, shows a bright future for users, that are not tech-savy &#8211; bringing them new tools to make dynamic and interesting sites using web standards.</p>
<p>Some will say, that Flash is thereby obsolete. They may even use the &#8220;Flash-killer&#8221; word, but in my opinion that tells me more about there insight and knowledge about the platforms responsibilities, than HTML5 is superior when it comes to the sites of the future. HTML has always had the responsibility of bringing webpages to the user via the browser. The Flash Player has always been a plug-in, that made it possible to satisfy users demands in terms of interactivity, video etc. and complemented HTML, where it wasn&#8217;t sufficient. Now with HTML5, nothing has changed there.</p>
<h2>The Flash Platform is dead</h2>
<p>I will bring some love to new new HTML5 features in another post, but let me dvelve a bit on the head line. When I say, Flash is dead, I actually mean, the previous well known (and hated) use of the Flash Player is dead. Using Flash to make complete sites with the need of seekable information, and &#8220;efferent reading&#8221; has to stop. The small banners that pops up, with no reason at all, has to stop. If that is what you have used Flash  to produce, you should seriously consider broaden your mind &#8211; we have HTML for that, now. When it comes to aesthetic reading, engaging and entertaining the user. When it comes to breaking the boundaries, and search for new possibilities in what the web and devices can deliver, please continue. Flash has never intended to kill HTML, it depends on it. But the misuse  of technology from developers (myself included, from time to time) has given the technology a bad name.</p>
<h2>Long live the Flash Platform</h2>
<p>Fortunately, the platform is strong and very much alive, and the latest version of Adobe AIR and Flash Player brings signs of a bright future. When I discuss the topic with developers, they actually do not have a clear answer, when it comes to compatibility across multiple devices. Native Android developers, can&#8217;t enter en iOS sphere, and Xcode developers are forever doomed to live in the walled garden. Both of them, can only argue, that the other should join them &#8230; why not give the user a choice. I think that the Flash Platform is one of the best attempt to actually be agnostic in terms of platforms. I think it&#8217;s time to look at some of the features I find interesting</p>
<h2>64-bit support</h2>
<p>I don&#8217;t know what took them so long, actually. I am not aware of the complications that are involved in making 64-bit versions of software. I guess there must have been internal complications regarding codecs or other 32-bit stuff not yet upgraded or just the fact that making a 64-bit version of the AVM or the like isn&#8217;t a walk in the park. Anyway, now it&#8217;s available and works like a charm in my 64-bit version of Internet Explorer as well as my other browsers on both Windows and Mac OS. I haven&#8217;t tried the Linux version, but I haven&#8217;t heard anyone with complaints. Please post your experiences with performance, if you are a Linux user.</p>
<h2>Captive runtime</h2>
<p>Captive Runtime is captivating <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Now developers have the choice to embed the AIR 3 runtime in the App, so people no longer need them as an external download. That, of course, brings a larger file to the devices, and it is therefore not just something you would do in all cases. In larger projects, and definitely on desktops, that seems like an obvious choice.</p>
<p>You can read about Captive runtime at <a title="Captive Runtime" href="http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html">http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html</a></p>
<h2>Accelerated 2D</h2>
<p>Flash is all about experiences. There is no need to use Flash, if you don&#8217;t wan&#8217;t to engage the users. If you just have some plain information to present, there is no need to roll out the big canons. The Flash Player is a plug-in that takes over, when the other give up, and can&#8217;t deliver &#8211; at least not with an economically reasonable solution. It is the easiest way to make impressive visual results, that works on all major platforms. Because of that, it is also a very demanding job, that takes a lot of processing power. With Flash Player 11 and AIR 3, Adobe has made it possible to port most of the calculations to the graphic card, so the processor is free to other tasks. That increases the performance immensely, all the previous examples (like those on <a title="Bytearrays page on Starling" href="http://www.bytearray.org/?p=3371">http://www.bytearray.org/?p=3371</a>) would have made the fan fly out of my MacBook Pro after 4 seconds &#8230; now there is silence.</p>
<p>One of the most prominent examples are the <a title="Starling Framework" href="http://www.starling-framework.org/">Starling Framework</a>. Starling is very intuitive, and use well known word like Sprite and addChild() and genrally build upon the concept of the Display List.</p>
<p><iframe src="http://player.vimeo.com/video/28568278?title=0&amp;byline=0&amp;portrait=0" frameborder="0" width="400" height="235"></iframe></p>
<p>To get this performance boost, Flash takes advantage of Stage 3D, and that is only available for desktops at the moment. Adobe is working hard to implement it in the mobile version, but Android have to wait until a later update. That also means, that we are in a time, where some content actually can&#8217;t be played on mobile, even though they are at the same player level &#8230; that&#8217;s not good, but hopefully sorted out in a near future.</p>
<h2>JSON</h2>
<p>Everybody is talking about <a title="JSON" href="http://www.json.org/">JSON</a> these days, and for a reason. The format makes it possible to exchange data in a readable way using a JavaScript like syntax. Both JavaScript and ActionScript 3.0 derives from the same standard, making it easier to work with and understand for some, in contrast to the XML language. You have always been able to read JSON into a Flash document, but the internal support makes is consistant and faster to get the data ready for use. Actually, we are are talking one line here to get it all parsed.</p>
<p>Adobe MAX gave a sneak at the next version of Flash (codename Reuben) that exported a sprite sheet of a characters walking cycle. That shows something about JSON as a serious and integrated way of making 2D games and motion in the years to come.</p>
<h2>Stage 3D</h2>
<p>When Flash introduced the ability to work with z-coordinates and move 2D objects in a 3D space (in CS4 i guess) the crowd went wild &#8211; everybody was happy. Then they realized, that i actually wasn&#8217;t as good as real 3D, and the need for manipulating real 3D objects was on the rise again. When Adobe released the first previews of Flash Player 11, it was jaw dropping. Thibault showed a red car driving around in a virtual street, and no one in the room could believe their eyes. But it was real, and with the release, they showed Unreal Tournament 3 from Epic Games, running in a browser.</p>
<p><iframe src="http://www.youtube.com/embed/jXiJwpDU2Gw" frameborder="0" width="560" height="315"></iframe></p>
<p>That tells me, that the Flash Player has taken it&#8217;s responsability as a plug-in serious, and goes for the balls, that HTML5 has a hard time to catch. I am sure we are going to see web experiences in the years to come, that we had a hard time to imagine only a year ago. On top of Stage 3D&#8217;s low level API a range of external companies has build frameworks for us to use. Some of the well known are <a title="Alternativa" href="http://alternativaplatform.com/en/">Alternativa</a>, <a title="Flare3D" href="http://www.flare3d.com/">Flare3D</a> and <a title="Away3D" href="http://away3d.com/">Away 3D</a>. Of course you could dive into the low API, but the other way around is much easier for normal developers and designers.</p>
<p>Aside from that, there is a project called <a title="Proscenium" href="http://labs.adobe.com/technologies/proscenium/">Proscenium</a> on Adobe Labs, that is a code library used to acces the low-level API, to easely create 3D content in Flash Player 11.</p>
<p>Read more about the wonderful world of Stage 3D at http://www.adobe.com/devnet/flashplayer/stage3d.html</p>
<h2>Native Extensions</h2>
<p>On the mobile platform, there is a constant demand for speed and integration with the system. Native tools like Xcode and Android SDK has an advantage over runtimes like AIR, in that they have full control over the system. AIR isn&#8217;t able to access the inner workings of the mobile platform, so you could not access the local API. AIR it self is making progress, like native keyboard on devices and frontface camera access, but the big leap forward here is Native Extensions. Now you can program an extension to AIR in the native language of the device, and AIR is then able to attach to it and communicate with it. There has already been examples of <a title="Map View on iOS" href="http://www.flashmobileblog.com/2011/09/15/air-3-mapview-native-extension-on-ios/">Map View on iOS</a> and c<a title="Kinect and AIR" href="http://blog.aboutme.be/2011/10/02/kinect-native-extension-for-adobe-air/">onnection to Kinect controller without a proxy</a>. I haven&#8217;t tried native extensions in myself, but it seems like it&#8217;s going to be a big deal if it runs smoothly.</p>
<h2>Content Protection</h2>
<p>I love the way that HTML5 has taken websites seriously again. I like the easy way, that video is treated. If all browsers could agree on the codec, it could end up as a good solution. The problem is that there is no protection embedded with the video. You could just copy the link and download the movie. Many content providers aren&#8217;t that happy about that. There are solutions to solve that, but I sense that they are moving away from the clean HTML5 solution. Flash and AIR has build in <a title="Adobe Flash Access" href="http://www.adobe.com/products/flashaccess/">Flash Access</a> that secures the content. Initially it only works with desktop and Android, and I guess that the way into Apples heart is a bit longer <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2>Heal the Web, make it a better place</h2>
<p>This is just some of the news. You can read more at the <a title="New features in Flash Player 11" href="http://www.adobe.com/products/flashplayer/features._sl_id-contentfilter_sl_featuredisplaytypes_sl_new.html">Flash Player 11 feature page</a> and the <a title="AIR 3 new features" href="http://www.adobe.com/products/air/features._sl_id-contentfilter_sl_featuredisplaytypes_sl_new.html">AIR 3 feature page</a>. This is an epic release, that will mark the start of a new era &#8211; the 3D era. We will se browsers taking HTML5 to the max, and transitions like fade and slide, will be everyday for the common designer. But when the smoke disappears, the need to do the extraordinary will emerge &#8211; this is where Flash kicks in. Flash Player will fulfill it&#8217;s role as the plug-in, that helps HTML getting things done. AIR is taking a different path down the mobile path. It is an interesting path, but it is not quite there yet. It is there in terms of being able to deliver a more than decent result on various devices, but the &#8220;works on Android, soon on iPhone&#8221; makes it not quite stable yet. It will be, hopefully soon.</p>
<p>I think that this release, shows that there is a world, where both technologies can live in harmony &#8211; and truly believe they will. We haven&#8217;t talked about topics like all the Smart TVs that supports the platform. We have only briefly talked about Epic Games, but Unity has also shown support to deliver on Stage3D. Aside from that, there is the <a title="The Open Screen Project" href="http://www.openscreenproject.org/">Open Screen Project</a>, that count a broad range of manufacturers , interested in making a common platform for Rich Internet Applications end experiences.</p>
<p>I know that the Flash Player aren&#8217;t allowed on iOS &#8211; well no plug-ins are, no harm there &#8230; but AIR are. AIR, may end up being a long term solution, if they fix the minor incompatibility. Flash Player is now a solid 64-bit plug-in, and yes &#8211; everybody is trying to find exploits and security breaches on it, but then again. It is on a lot of machines, end therefore a perfect target, across platforms. Adobe should be on it&#8217;s toes to close these security issues and gain trust in the platform, and then &#8211; when iOS settles at a reasonable level, the market will decide if users with the plug-in is more interesting than those without.</p>
<p>&#8230; only time will tell.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/10/flash-platform-is-dead-long-live-the-flash-platform/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Calling a function dynamically in ActionScript 3.0</title>
		<link>http://blog.hjaelpmignu.dk/2011/06/calling-a-function-dynamically-in-actionscript-3-0/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/06/calling-a-function-dynamically-in-actionscript-3-0/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 16:26:57 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Adobe Flash Professional]]></category>
		<category><![CDATA[Tips og tricks]]></category>
		<category><![CDATA[Tutorial og artikler]]></category>
		<category><![CDATA[undervisning]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[array access operator]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[dynamic function]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=345</guid>
		<description><![CDATA[Have you ever wondered, how you could use a String to decide, which function to be called. You could go so far to let the user enter the function name in an input field and call a function by that name, if it exists. I have made a short article &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/06/calling-a-function-dynamically-in-actionscript-3-0/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered, how you could use a String to decide, which function to be called. You could go so far to let the user enter the function name in an input field and call a function by that name, if it exists.</p>
<p>I have made a short article with an example on how that is done in Flash and ActionScript 3.0. You can read the article at <a title="Article about dynamic function call" href="http://www.hjaelpmignu.dk/content/dynamic-call-functions">http://www.hjaelpmignu.dk/content/dynamic-call-functions</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/06/calling-a-function-dynamically-in-actionscript-3-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Det store dyk</title>
		<link>http://blog.hjaelpmignu.dk/2011/03/det-store-dyk/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/03/det-store-dyk/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 22:03:30 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[canvas element]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=318</guid>
		<description><![CDATA[Jeg har i den senere tid med interesse fulgt mange af de udviklinger som HTML5 og canvas elementet har bragt. Små ting som www.radiohead.com bringer stimulerende effekter og kører fint på mobile enheder. Problemet er at det er mere reglen end undtagelsen at performance på mobile enheder afviger markant fra &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/03/det-store-dyk/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Jeg har i den senere tid med interesse fulgt mange af de udviklinger som HTML5 og canvas elementet har bragt. Små ting som <a title="Radioheads website" href="http://www.radiohead.com">www.radiohead.com</a> bringer stimulerende effekter og kører fint på mobile enheder. Problemet er at det er mere reglen end undtagelsen at performance på mobile enheder afviger markant fra laptop/desktop oplevelsen.</p>
<p>Det kræver i sig selv ikke meget at regne ud, da en mobil processor ikke har en reel chance mod en flerkernet CPU og dedikeret grafikkort. Hvis du vil dykke ned i nogle af de pæne eksempler kan du f.eks. kigge på:</p>
<ul>
<li><a href="http://www.frameratefest.com/">http://www.frameratefest.com/</a></li>
<li><a href="http://endlessmural.com/">http://endlessmural.com/</a></li>
<li><a href="http://www.chromeexperiments.com/">http://www.chromeexperiments.com/</a></li>
</ul>
<p>Fantastiske muligheder for at udfolde sig, tårner sig op i horisonten, men det er netop disse mange muligheder som jeg frygter kan ende i det jeg har valgt at kalde &#8220;Det store dyk&#8221;.</p>
<h3>Fremtidens medier bliver de oversete</h3>
<p>I tidligere versioner af HTML. Det er egentlig forkert at skrive tidligere versioner om HTML 4.01 og XHTML, da de ret beset stadig er de aktuelle versioner, men snakken om HTML5 for alt andet til at føles som en fjern fortid. Med HTML4 var alle mobile enheder nye og spændende. Desktop platformen var domineret af Flash indhold, så snart tingene skulle røre sig ud af flækken &#8211; der var aldrig nogen reel mulighed for at overføre disse sites til dem der havde fået sig en mobil, der kunne besøge internetsider. Hvad var løsningen? Det var selvfølgelig at teste for om det var en telefon der viste siden og derefter at levere mobiloptimeret indhold. Prøv at besøg sider som <a title="Link til CNN website" href="http://cnn.com">cnn.com</a> og du bliver omdirigeret til <a title="Link til CNN's mobile site" href="http://cnnmobile.com/">cnnmobile.com</a>. Besøg <a title="Link til TV2 site" href="http://tv2.dk/">tv2.dk</a> og du bliver omdirigeret til deres mobile site. Denne tilgang blev brugt af et par årsager:</p>
<ol>
<li>Der var en begrænset skærmstørrelse</li>
<li>Opløsningen var markant lavere</li>
<li>Der var ingen fintfølende mus</li>
<li>Der var ikke den samme hastighed i forbindelsen</li>
</ol>
<p>Der var selvfølgelig også en række andre faktorer, med hensyn til muligheder for at bruge tastatur, det personlige forhold til browseren som telefonen giver, men ovenstående er vigtige i denne sammenhæng. Designere lavede deres sites som de plejede og vurderede derefter, hvilket indhold der var relevant på mobiler. Det resulterede i &#8220;mobiloptimerede&#8221; sites, der kun viste det absolut mest nødvendige. Sites, hvor tekst blev skåret til og billeder beskæret. Alle tiltag blev gjort for at dem med mobiler fik en god og effektiv oplevelse. På det tidspunkt var der mange penge i datatrafik, og mønterne rullede ud af pungen, hvis sitet var for tungt.</p>
<p><strong>Computeren haltede efter for en stund</strong></p>
<p>Med iPhone blev alt ændret. Udvalgte teleoperatorer fik lov til at servicere den &#8211; der skulle leveres en dataplan, der gav brugeren mulighed for at bruge 3G netværket med telefonen. Man kan sige at det var en iPod med telefon, men sammenlægningen af disse to ting gjorde at telefonen sparkede alle andre telefoner af banen. Sparkede MP3 afspillere af banen og sparkede smartphones som iPaq o. lign. af banen. Ikke at de andre bare forsvandt, men de kunne ikke konkurrere på specifikationer, og der var ingen af de andre, der havde formået at tvinge teleudbydere i knæ som Apple havde formået. Tilsæt en smule hype (eller spandevis af hype) og iPhones success var en realitet.</p>
<p>Spådomme om computerens endeligt flød, og senere udmeldingen om at Flash ikke kom til iOS, gjorde alt andet end iOS udvikling til perifære interesseområder. Snakken om hvordan det videre forløb (og stadig forløber) er et andet indlæg værdigt, men jeg vil med ovenstående nævne at en smartphone (iPhone) nu skulle have følgende faciliteter:</p>
<ol>
<li>En relativ stor skærmstørrelse</li>
<li>En opløsning, der nærmede sig lave opløsninger på computere</li>
<li>Muligheden for at trykke på skærmen, med en eller flere fingre</li>
<li>Mulighed for både 3G og Wifi, samt effektiv synkronisering</li>
</ol>
<p>Dette fik computeren til at sakke yderligere bagud i interesse, da muligheden for at tilgå viden overalt, gjorde selv den tyndeste laptop mindre relevant til en lang række opgaver. Derudover er telefonens &#8220;altid-tændt&#8221; natur, noget som batteritunge laptops ikke kunne forholde sig til. Forbrugsmønsteret ændrede sig lidt før den tid, så der kommer fokus på sociale og personlige relationer, samt deling af billeder og videoklip. Muligheden for at tage et billede, der hvor du var og uploade det så venner kunne se det, med det samme gjorde alt med ledning til et dårligt sats.</p>
<h3>De nye browsere</h3>
<p>Browserne havde barslet længe med at implementere HTML5, men en iPhone havde muligheden for at starte forfra og definere de muligheder som en smartphone havde når den besøgte et website. Den ville have &#8220;The best/full internet experience&#8221;. Mange tilhængere af Flash Playeren mente ikke at det var tilfældet, men de havde kun defragmenterede versioner af Flash Lite, der (mildt sagt) ikke performede særligt godt. Der var ikke rigtig nogle modargumenter, så iPhone blev det man kiggede til når man skulle arbejde på mobile platforme. iPhone havde webkit installeret, og der var ingen mulighed for andre udbydere af browsere at byde ind, så den har trukket meget af udviklingen og sørget for at de andre browsere på stationære og bærbare fik travlt.</p>
<h3>Vi begynder at dykke</h3>
<p>Flere devices kom til. Tablets og Android telefoner blev spyttet ud, og et kapløb om at levere den bedste ydelse, oplevelse og batteritid gik igang. De fleste bryster sig af mulighederne for at overtage computerens rolle &#8230; og lidt til. Opløsningen er nu kommet så højt op, og hukommelse og hastighed gør at normale besøg på nettet er en fornøjelse på en iPad (den eneste jeg har at referere til) og smartphones. Derudover matcher de nyeste udgaver af alle de store browsere mange af de HTML5 og CSS3 tiltag, der er under udarbejdele. Udviklingen er faktisk gået så hurtigt, at en ratificering af standarden er rykket fra 2022 til 2014 &#8211; det er en ordentlig mundfuld. Der er nu ikke mere den store forskel på de browsere der afvikler på computer og de browsere, der afvikler på Android og iPhone.</p>
<p><strong>Skrid Flash. HTML5 er her</strong></p>
<p>Ønsket med Flash har altid været at kunne udvikle i et miljø og levere interaktive oplevelser på alle platforme tilgængelige. Med Apples afvisning af plug-in&#8217;en ligner det en umulig opgave. Apple derimod slår på tromme, for HTML5 og dens muligheder for at overtage den proprietære plug-in. Canvas, Javascript samt CSS3, skal løfte arven og opfylde drømmen om en kode, der kører i alle browsere. Mulighederne og eksemplerne med HTML5 begynder at sprudle og minder delvist om dagene med Macromedia Flash 3, hvor grænser skulle søges og muligheder udforskes. Som browsere bliver udskiftet og begynder at opdatere vil alt dette pionerarbejde begynde at bære frugt. Vi er allerede begyndt at teste for muligheder i den besøgendes browser. Nu tester vi om det er den nyeste, og leverer lidt ekstra &#8211; før testede vi om den var for gammel og udelod noget.</p>
<h3>&#8220;Det store dyk&#8221;</h3>
<p>Med denne kamp om ligestilling, først fra smartphonen og siden computerens browser, gør at særstatus og hype på mobilen nedtonet og kun nævnt når der kommer nye og hurtigere modeller. Det er der ikke noget galt i, men det der kan ende galt er at designere og udviklere ser mindre fornuft i at lave synderlig specielle tiltag for at optimere andet en layoutet &#8211; HTML5 og JavaScript vil fungere på alle større platforme. Det er allerede tydelig at der bliver taget højde for at ændre CSS når browserstørrelsen er over eller under bestemte dimensioner &#8211; men hvad med koden og canvas elementet?</p>
<p>Mange af eksemplerne rundt om på nettet der beskæftiger sig med HTML5, canvas og JavaScript, sætter en ære i at det også kører på mobile enheder. De <a title="HTML5 canvas og JavaScript performance test" href="http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/">simple målinger jeg har foretaget </a>viser imidlertidig at det er alt andet end tilfredsstillende hastigheder, der præsteres. Der findes dygtige udviklere og interaktive designere, der kan presse de vildeste ting ud af JavaScript og leverer imponerende eksempler på deres kunnen, men der er altså også de andre &#8211; dem der er mindre rutineret og leverer meget tung kode. Deres uvidenhed og manglende muligheder for at teste på alle de forskellige mobile enheder der findes, gør at de nok tager deres udvikling for givet eller i værste tilfælde helt glemmer at der findes smartphones. Og hvis de husker at de findes, så husker de måske ikke at folk har givet flere tusinde kroner for dem, og måske stadig ikke kan forsvare at der skal købes ny, lige med det første.</p>
<p>De store sites kommer ganske givet ikke i problemer, men mindre og mellemstore virksomheder, har måske ikke ressourcer til at optimere eller lave deciderede mobiloptimerede sites. Mange vil sidde med en holdning at folk jo kan opdatere deres telefon med en nyere model, eller leve med at det jo trods alt går lidt langsommere på små enheder.</p>
<h3>Tilbage til overfladen</h3>
<p>Det er selvfølgelig en pessimistisk tankegang, og den prøver også at ridse noget op, der skal gøres en indsats for at undgå. Jeg er af den overbevisning at vi er nød til at skrue vores tanker tilbage til tiden før iPhone &#8211; selv om vi udvikler til iPhone. Vi skal have fornemmelsen af at skære billeder til op optimere kode, når vi designere websites. Mine fornemmelser er at der ikke er noget negativt at sige om selve HTML5, CSS3 og jQuery mobile. De kører fantastisk på de fleste modeller jeg har testet. Anderledes anstrengt forhold har jeg til canvas elementet og JavaScripts arbejde på den. Det kan så nemt gå galt med koden, der gør de kreative idéer uløselige på grund af dårlig performance på mobile enheder.</p>
<p>I fremtiden bør vi overveje om indhold er relevant at vise på en tablet eller smartphone. Vi skal søge lidt væk  fra at alt fra desktop skal med, eller at folk har mulighed for at prøve kræfter med de interaktive og programmeringstunge dele af sitet. Styrkeforholdet er skiftet igen, efterhånden som browserforskelle udviskes, og udviklerplatformen (Mac og Windows) er overbefolket af Quad Core processorer og vilde grafikkort.</p>
<p>De nye muligheder med Canvas er mange gange de hurtige maskiner forundt. For kort tid siden var alle øjne på mobilerne. Det er de på mange punkter stadig, men grænsesøgning og de ekstreme eksempler er lukket land for mange mobiler &#8211; det bør man huske når eksemplerne rykker fra laboratoriet og ind i produktionshallerne.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/03/det-store-dyk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 canvas with JavaScript and Flash Player performance</title>
		<link>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-with-javascript-and-flash-player-performance/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-with-javascript-and-flash-player-performance/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 21:47:35 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[analasis]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[HTC Desire HD]]></category>
		<category><![CDATA[HTC Legend]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Inspire 4G]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad 2]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[iPone 4]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=310</guid>
		<description><![CDATA[Link til dansk version This post is an examination of the performance provided by JavaScript and the canvas HTML element, and its role on mobile platforms in the future. The inspiration for this post came when I stumpled on Water Ripple Canvas by Almer Thies. It was running without problems (with Canvas: &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/03/html5-canvas-with-javascript-and-flash-player-performance/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<div><a title="Link to danish version of the article" href="http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/">Link til dansk version</a></div>
<div>This post is an examination of the performance provided by JavaScript and the canvas HTML element, and its role on mobile platforms in the future. The inspiration for this post came when I stumpled on <a title="Water ripple canvas" href="http://code.almeros.com/code-examples/water-effect-canvas/">Water Ripple Canvas</a> by Almer Thies. It was running without problems (with Canvas: 20fps and Water: 30 fps) on my computer but was frighteningly slow with a max of 0.5 fps on my iPhone 4 (yep. A half frame per second!). I therefore found it relevant to produce a comparable piece of code that could run on the canvas element and easily port to Flash, so I could get an idea of how well each technology performed.</div>
<div>It is not a secret that I&#8217;m fond of the Adobe Flash Player, and have always believed that Apples excommunication of the player due performance issues had no standing ground, in light of the present alternatives. But HTML5 is a promising technology, that takes the job as website maker seriously again, and that may result in Flash being able to focus on it plug-in nature again, and help lift sites up above the tomorrows standard sites. The most important topic to discuss is: what should happen when our mobile visits a website in the month/years to come. Not distinguishing  between mobile and desktop would lead to sluggish performance on mobiles when canvas gets integrated in eager designers creative solutions &#8211; a future that I predict as the &#8220;big dip&#8221;, in the worst cases.</div>
<h3>Study 1</h3>
<div>The test case is the famous snowflake that are loved or hated by everyone. The effect is exclusively produced by code and can be scaled easily to increase the load on the processor. I found an example at <a href="http://blog.webreakstuff.com/2010/11/building-a-canvas-snowglobe/">http://blog.webreakstuff.com/2010/11/building-a-canvas-snowglobe/</a> by Pedro Freitas. The code can be found on GitHub via<a href=" https://gist.github.com/716215"> https://gist.github.com/716215</a>. I would also use an FPS counter, which could easily be ported to ActionScript and chose snippet from <a href="http://stackoverflow.com/questions/4787431/check-fps-in-js">http://stackoverflow.com/questions/4787431/check-fps-in-js</a></div>
<div>I need it to produce a working example of the FPS counter that can be found at <a title="canvas version of snow flake" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html</a>. I have come to the following data (max is set to 100 FPS):</div>
<ul>
<li>Desktop PC:<strong> 99.9 </strong>FPS (Firefox)</li>
<li>MacBook Pro: <strong>97 - 98</strong> FPS (Safari)</li>
<li>iPad (iOS 4.3): <strong>19 - 20</strong> FPS <em>(updated 17/3 &#8211; 2011)</em></li>
<li>HTC Desire HD (2.2): <strong>15.5 - 16.5</strong> FPS</li>
<li>Inspire 4G (2.3): <strong>~ 14 </strong>FPS (updated 17/3 &#8211; 2011)</li>
<li>HTC Desire (2.2): <strong>14.4 - 14.7</strong> FPS</li>
<li>iPad 1 (iOS 4.3): <strong>13 &#8211; 13.5</strong> FPS (updated 17/3 &#8211; 2011)</li>
<li>iPad 1 (iOS 4.2): 1<strong>2.4 - 13.3 </strong>FPS</li>
<li>iPhone 4 (iOS 4.3): <strong>9.9 - 10.5</strong> FPS <em>(updated 17/3 &#8211; 2011)</em></li>
<li>iPhone 4 (iOS 4.2): <strong>9.9 - 10.3</strong> FPS</li>
<li>iPhone 3GS (iOS 4.2): <strong>9.9 - 10.3</strong> FPS</li>
<li>HTC Legend: <strong>7.5 - 8.9</strong> FPS</li>
</ul>
<div><em>Thanks to <a href="http://www.twitter.com/seb_ly/">@seb_ly</a> and <a href="http://www.twitter.com/leebrimelow/">@leebrimelow</a> for additional test results</em></div>
<div>When I dropped the restriction the PC actually easily spun on over 200 FPS, but the intention here is not to benchmark in the high end, but find a relationship in the &#8220;low end&#8221; and a relative measurement to a standard machine. PC as well as Mac differ so much on hardware as well as range of browsers, it will not contribute anything positive to uncover all facets.</div>
<h3>Conclusion 1</h3>
<div>It is evident that both computers frame rates hits the ceiling. The portable Mac has thrown a frame or two in the test, but will probably do 100 FPS in a another run, or with another browser. Of course it cannot run from a Quadro graphics card, but it&#8217;s clearly capable of running the test. iOS machines (iPad 1, iPhone 3GS and iPhone 4) has a hard time, to produce frames for the canvas element. On average, they just over 10 FPS.<br />
Desire HD is a bit higher. Not much, but still enough that it should be designated as a better settlement. Lowest is the HTC Legend, with around 8 fps.</div>
<h3>Study 2</h3>
<div>The second test was made to compare performance between javascripts work on the canvas, and Flash Player&#8217;s work with the BitmapData class. The technique used for both are very similar and it will give the best basis for comparison, and minimal editing of the code. You can see an example at <a href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html</a></div>
<div>The following changes have been made from the original code:</div>
<ul>
<li>Snow flakes was made as a separate class (Flake.as)</li>
<li>Updated variables, etc so they are strictly typed</li>
<li>Minor changes in variable names</li>
<li>Used Flash Player&#8217;s <em>flash.sensors.Accelerometer</em> to handle motion</li>
</ul>
<p>Flake.as</p>
<p>&nbsp;</p>
<p><code lang="actionscript3"> </code></p>
<pre><code lang="actionscript3">package 
{ 
import flash.display.Sprite; 
import flash.display.BitmapData; 

public class Flake extends Sprite 
{ 
private var canvasWidth; 
private var canvasHeight; 
private var speed: Number; 
private var alpha: Number; 
private var size: Number; 
private var amp: Number; 
private var shift: Number; 
private var range: Number; 

public function Flake (w, h, a, s) 
{ 
this.canvasWidth = w; 
this.canvasHeight = h; 
this.x = 200; 
this.y = Math.random () * -1 * h; 
this.alfa = Math.random () * 0.5 + a; 
this.speed = Math.random (); 
this.size = s - this.speed - this.alfa; 
this.amp = Math.random () * 2; 
this.shift = Math.random () * 25 + 25; 
if (Math.random ()&gt; 0.5) 
{ 
this.shift *= -1; 
} 
this.drift = Math.random () - 0.5; 
draw (); 
} 
public function draw (canvas: BitmapData = null): void 
{ 
this.graphics.beginFill (0xFFFFFF, this.alfa); 
this.graphics.drawCircle (0.0, this.size); 
this.graphics.endFill (); 
} 
public function move (f, wind): void 
{ 
this.y + = this.speed; 
this.x + = Math.cos (f / this.shift) * this.amp + + this.drift wind; 
if (this.y&gt; this.canvasHeight) 
{ 
this.restart (); 
} 
} 
public function restart (): void 
{ 
this.y = -20; 
this.shift = Math.random () * 25 + 25; 
this.x = 200; 
} 
} 
}</code></pre>
<p><code lang="actionscript3"> </code></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>MainApp.as</p>
<p><code lang="actionscript3"> </code></p>
<pre><code lang="actionscript3">package
{ 
import flash.display.Sprite; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
import flash.geom.Rectangle; 
import flash.geom.Matrix; 
import flashx.textLayout.elements.InlineGraphicElement; 
import flash.sensors.Accelerometer; 
import flash.events.AccelerometerEvent; 
import flash.text.TextField; 

public class MainApp extends Sprite 
{ 
private var bgflakes: Array = new Array (); 
private var fgflakes: Array = new Array (); 
private var bgFlakeCount: int = 200; 
private var fgFlakeCount: int = 50; 
private var frame count: int = 0; 
private var wind: int = 0; 
private var dWidth: int; 
private var dHeight: int; 
private var orientX: int = 1; 

private var bgBitmapData: BitmapData; 
private var bgCanvas: Bitmap; 
private var fgBitmapData: BitmapData; 
private var fgCanvas: Bitmap; 
private var timer: Timer; 
private var orientation: Boolean = false; 
private var myAcc: Accelerometer; 

private var filter Strength: int = 20; 
private var frame hours: int = 0; 
private var loading loop: Date = new Date (); 
private var this loop: Date = new Date (); 

private var fps: TextField; 

public function MainApp () 
{ 
init (); 
} 

private function init () 
{ 
dWidth = this.stage.stageWidth; 
dHeight = this.stage.stageHeight; 
bgBitmapData = new BitmapData (dWidth, dHeight, false, 0x000000); 
bgCanvas = new Bitmap (bgBitmapData); 
fgBitmapData = new BitmapData (dWidth, dHeight, true, 0xFF0000); 
fgCanvas = new Bitmap (fgBitmapData); 
addChild (bgCanvas); 
addChild (fgCanvas); 

fps = new TextField (); 
addChild (fps); 
fps.textColor = 0xFFFFFF; 

was i = 0; 
for (i = 0; i { 
bgflakes.push (New Flake (bgCanvas.width, bgCanvas.height, 0,3)); 
} 
for (i = 0; i { 
fgflakes.push (New Flake (fgCanvas.width, fgCanvas.height, 0.2,4)); 
} 
hours = new Timer (10); 
timer.addEventListener (TimerEvent.TIMER, draw); 
timer.start (); 

if (Accelerometer.isSupported) 
{ 
orientation = true; 
myAcc = new Accelerometer (); 
myAcc.addEventListener (AccelerometerEvent.UPDATE, onAccUpdate); 
} 
} 

private function onAccUpdate (e: AccelerometerEvent): void 
{ 
orientX = e.accelerationX; 
} 

private function setWind () 
{ 
if (! orientation) 
{ 
was mx: Number = mouseX - dWidth / 2; 
wind = (mx / dWidth) * 3; 
} 
lodging 
{ 
Wind = Number (orientX) * 3; 
} 
if (! wind) 
{ 
wind = 0; 
} 
} 

private function draw (e: Event hours) 
{ 
frame count + = 1; 

bgBitmapData.fillRect (new Rectangle (0.0, dWidth, dHeight), 0x000000); 
fgBitmapData = new BitmapData (dWidth, dHeight, true, 0xFF0000); 
setWind (); 
was: int = 0; 
for (i = 0; i { 
bgflakes [i]. move (frame count, wind); 

bgBitmapData.draw (bgflakes [i], new Matrix (1,0,0,1, bgflakes [i]. x, bgflakes [i]. y)); 
} 
for (i = 0; i { 
fgflakes [i]. move (frame count, wind); 

fgBitmapData.draw (bgflakes [i]); 
} 

was this frame hours: int = (Number (this loop = new Date ())) - Number (last loop); 
Frame hour + = (this frame - time frame hours) / filter strength; 
load loop = this loop; 
fps.text = (1000/frameTime). toFixed (1) + "fps"; 
} 
} 
}</code></pre>
<p><code lang="actionscript3"> </code></p>
<p>&nbsp;</p>
<div><strong>Comments on Code </strong></div>
<div><strong> </strong>I have kept the <em>draw () </em>inside the Flake class and draw the flakes with <em>graphics.drawCircle ()</em> to keep the code across the examples as similar as possible. The transfer of values on canvas size, etc. are also retained in the Flash version is also preserved. Finally, I used Bitmap () and BitmapData () to simulate the properties used on the canvas element.</div>
<h3>Results 2</h3>
<div>With mobile units, that is capable of running Flash Player 10.1 and canvas, I try to measure them against each other. Not as a battle, favoring one technology, for the future (I think) belongs to them both. It&#8217;s more an attempt to find out how bad Flash performs and supporters of the canvas as a &#8220;Flash Killer&#8221; has some back support. I&#8217;ll update as I stumple on different phones/tablets on my way:</div>
<ul>
<li>Dersire HD (2.2): Canvas <strong>~ 16.5</strong> FPS and Flash 10.1 <strong>~ 24.2</strong> FPS</li>
<li>Inspire 4G (2.3): Canvas <strong>~ 14 </strong>FPS and Flash 10.1 <strong>~ 22 </strong>FPS (updated 17/3 &#8211; 2011)</li>
<li>HTC Desire (2.2): Canvas <strong>~ 14.5</strong> FPS and Flash 10.1 <strong>21.7 to 23.5</strong> FPS</li>
</ul>
<div>You are welcome to submit own measurements</div>
<h3>Conclusion</h3>
<div>I get a relatively higher frame rate when running the test in Flash Player on Android than if I the canvas version. I wasn&#8217;t able to turn the relationship between the numbers on my phone, not even leveling the difference in frame rate. I therefore think that the user will have a better experience of this experiment in a flash player, than with a canvas version. It is important to remember that the canvas element&#8217;s ability to deliver, do not need to inflict on the general view on HTML5 and CSS3. My feeling is that CSS3 has a fairly good performance on the mobile devices, perhaps because of their predictable nature, but I haven&#8217;t investigated that topic yet.</div>
<div>Finally, I have not taken installed software on the devices into account. It may be relevant in a recount to look at parameters such as:</div>
<ul>
<li>How long the phone has been switched on.</li>
<li>Is it connected to the charger.</li>
<li>Programs running in the background.</li>
<li>Video documentation of test</li>
</ul>
<div>My point here is to get some numbers up in the air, and a comparison of material playd on mobile devices. Please reply with the results of your own measurements for computer, tablet and mobile.</div>
<div><strong>Links to tests: </strong></div>
<ul>
<li><a title="Canvas test working example og snow flake" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html</a> (canvas)</li>
<li><a title="Adobe Flash player working example og snow flake" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html</a> (Flash)</li>
</ul>
<div><strong>Links to documents </strong></div>
<ul>
<li><a title="Canvas test files" href="https://gist.github.com/716215">https://gist.github.com/716215</a> (canvas)</li>
<li><a title="Flash test files" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.zip">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.zip</a> (Flash)</li>
<li><a title="FPS measurement script" href="http://stackoverflow.com/questions/4787431/check-fps-in-js">http://stackoverflow.com/questions/4787431/check-fps-in-js</a> (Frame Counter)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-with-javascript-and-flash-player-performance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 canvas med JavaScript og Flash Player performance</title>
		<link>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 13:30:48 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[frame rate]]></category>
		<category><![CDATA[HTC Desire HD]]></category>
		<category><![CDATA[HTC Legend]]></category>
		<category><![CDATA[Inspire 4G]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad 2]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[iPhone 4]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=287</guid>
		<description><![CDATA[En gennemgang af en test, der skal belyse, hvor godt canvas elementet præsterer på mobile enheder. &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<div><a title="Link to english version of the article" href="http://blog.hjaelpmignu.dk/2011/03/html5-canvas-with-javascript-and-flash-player-performance/">Link to english version</a></div>
<div>Dette indlæg er en undersøgelse af den performance som præsteres af henholdsvis JavaScript og Canvas elementet og dets rolle på mobile platforme i fremtiden. Inspirationen fik jeg da jeg kom forbi Almer Thies <a title="HTML5 Water Ripple Canvas" href="http://code.almeros.com/code-examples/water-effect-canvas/" target="_blank">Water Ripple Canvas</a> der kørte uden problemer (med Canvas: 20fps og Water:30 fps) på min computer men skræmte mig fra vid og sans med et maks på 0.5 fps på min iPhone (yep. En halv frame i sekundet!!). Jeg fik derfor en idé om at finde et sammenligneligt stykke kode, der kunne afvikles fra canvas og nemt porteres til Flash, så jeg kunne danne mig et overblik over hvor godt de hver i sær præsterede.</div>
<div>Selv er jeg tilhænger af Adobe Flash Player og har altid ment at iOS bandlysning af den på grund af performance ikke havde nogen gang på jord, set i lyset af alternativerne. At vi så grundlæggende skal tage os en grundig snak om, hvad der skal ske, når vores mobile enheder besøger en hjemmeside i årene der kommer, er en helt anden snak &#8211; en fremtid, som jeg spår som &#8220;det store dyk&#8221;, i værste tilfælde.</div>
<h3>Forsøg 1</h3>
<div>Valget faldt på de berømte snefnug, som er elsket/hadet af alle. Effekten bliver udelukkende produceret med kode, og kan skaleres nemt for at øge belastningen. Jeg fandt et eksempel på <a title="HTML5 canvas snow original" href="http://blog.webreakstuff.com/2010/11/building-a-canvas-snowglobe/" target="_blank">http://blog.webreakstuff.com/2010/11/building-a-canvas-snowglobe/</a> af Pedro Freitas. Koden kan findes på Github via <a title="Sourcecode til HTML5 canwas snow" href="https://gist.github.com/716215" target="_blank">https://gist.github.com/716215</a>. Jeg skulle også bruge en FPS-counter, der nemt kunne porteres til ActionScript og valget faldt på kodestumpen fra <a title="FPS counter i JavaScript" href="http://stackoverflow.com/questions/4787431/check-fps-in-js" target="_blank">http://stackoverflow.com/questions/4787431/check-fps-in-js</a></div>
<div>Jeg har brug det til at producere et virkende eksempel med FPS-counter, der kan findes på <a title="Snow canvas test" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html" target="_blank">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html</a>. Jeg er kommet frem til følgende data (max er sat til 100 FPS):</div>
<ul>
<li>Desktop PC:<strong> 99.9 </strong>FPS (Firefox)</li>
<li>MacBook Pro: <strong>97 - 98</strong> FPS (Safari)</li>
<li>iPad (iOS 4.3): <strong>19 - 20</strong> FPS <em>(opdateret 17/3 &#8211; 2011)</em></li>
<li>HTC Desire HD (2.2): <strong>15.5 - 16.5</strong> FPS</li>
<li>Inspire 4G (2.3): <strong>~ 14 </strong>FPS (opdateret 17/3 &#8211; 2011)</li>
<li>HTC Desire (2.2): <strong>14.4 - 14.7</strong> FPS</li>
<li>iPad 1 (iOS 4.3): <strong>13 &#8211; 13.5</strong> FPS (opdateret 17/3 &#8211; 2011)</li>
<li>iPad 1 (iOS 4.2): 1<strong>2.4 - 13.3 </strong>FPS</li>
<li>iPhone 4 (iOS 4.3): <strong>9.9 - 10.5</strong> FPS <em>(opdateret 17/3 &#8211; 2011)</em></li>
<li>iPhone 4 (iOS 4.2): <strong>9.9 - 10.3</strong> FPS</li>
<li>iPhone 3GS (iOS 4.2): <strong>9.9 - 10.3</strong> FPS</li>
<li>HTC Legend: <strong>7.5 - 8.9</strong> FPS</li>
</ul>
<div><em>Tak til <a href="http://www.twitter.com/seb_ly/">@seb_ly</a> og <a href="http://www.twitter.com/leebrimelow/">@leebrimelow</a> for yderligere testresultater</em></div>
<div>Jeg droppede begrænsningen og så at PC&#8217;eren faktisk nemt snurrede den over 200 FPS, men meningen her er ikke at benchmarke i den høje ende, men finde et forhold i &#8220;den lave ende&#8221; og en relativ måling til en standard maskine. PC såvel som Mac varierer så meget på hardware samt udvalg af browsere, at det ikke vil bidrage til noget positivt at afdække alle facetter.</div>
<h3>Konklusion</h3>
<ul>
<li>Det er klart at fornemme at begge computere rammer toppen. Den bærbare Mac har smidt en frame eller to i testen, men vil sikkert ramme 100 FPS i en anden. Selvfølgelig kan den ikke løbe fra et Quadro grafikkort, men klart er det at der er rigelig overskud til at løse opgaven.</li>
<li>iOS maskinerne (iPad 1 og iPhone 4) har en hård tid, med at producere frames til canvas elementet. I gennemsnit ligger de på lidt over 10 FPS.</li>
<li>Desire HD ligger en smule højere. Ikke meget, men alligevel nok til at det må betegnes som en bedre afvikling.</li>
</ul>
<h3>Forsøg 2</h3>
<div>Forsøg nummer to var lavet for at sammenligne performance mellem JavaScripts arbejde på canvas, samt Flash Playerens arbejde med BitmapData klassen. Teknikken der bruges til begge er meget ens, og det vil give det bedste sammenligningsgrundlag, og mindst mulig redigering i koden. Du kan se et eksempel på <a title="Flash udgave af snow" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html" target="_blank">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html</a></div>
<div><a title="Snow canvas test" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html" target="_blank"></a>Følgende ændringer er blevet foretaget fra originalkoden:</div>
<ul>
<li>Snefnug lavet som en selvstændig klasse (Flake.as)</li>
<li>Har opdateret variabler osv så de er strict typed</li>
<li>Mindre ændringer i variabel navne</li>
<li>Brugt Flash Playerens <strong>flash.sensors.Accelerometer</strong> til at håndtere bevægelse</li>
</ul>
<div>Flake.as</div>
<div><code lang="actionscript3"></p>
<pre>package
{
import flash.display.Sprite;
import flash.display.BitmapData;

public class Flake extends Sprite
{
private var canvasWidth;
private var canvasHeight;
private var speed:Number;
private var alfa:Number;
private var size:Number;
private var amp:Number;
private var shift:Number;
private var drift:Number;

public function Flake(w,h,a,s)
{
this.canvasWidth = w;
this.canvasHeight = h;
this.x = 200;
this.y = Math.random() * -1 * h;
this.alfa = Math.random() * 0.5 + a;
this.speed = Math.random();
this.size = s - this.speed - this.alfa;
this.amp = Math.random() * 2;
this.shift = Math.random() * 25 + 25;
if (Math.random() &gt; 0.5)
{
this.shift *=  -1;
}
this.drift = Math.random() - 0.5;
draw();
}
public function draw(canvas:BitmapData = null):void
{
this.graphics.beginFill(0xFFFFFF,this.alfa);
this.graphics.drawCircle(0,0,this.size);
this.graphics.endFill();
}
public function move(f,wind):void
{
this.y +=  this.speed;
this.x +=  Math.cos(f / this.shift) * this.amp + this.drift + wind;
if (this.y &gt; this.canvasHeight)
{
this.restart();
}
}
public function restart():void
{
this.y = -20;
this.shift = Math.random() * 25 + 25;
this.x = 200;
}
}
}</pre>
<p></code>&nbsp;</p>
<div>MainApp.as</div>
<div><code lang="actionscript3">&nbsp;</p>
<pre>package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flashx.textLayout.elements.InlineGraphicElement;
import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;
import flash.text.TextField;

public class MainApp extends Sprite
{
private var bgflakes:Array = new Array();
private var fgflakes:Array = new Array();
private var bgFlakeCount:int = 200;
private var fgFlakeCount:int = 50;
private var frameCount:int = 0;
private var wind:int = 0;
private var dWidth:int;
private var dHeight:int;
private var orientX:int = 1;

private var bgBitmapData:BitmapData;
private var bgCanvas:Bitmap;
private var fgBitmapData:BitmapData;
private var fgCanvas:Bitmap;
private var timer:Timer;
private var orientation:Boolean = false;
private var myAcc:Accelerometer;

private var filterStrength:int = 20;
private var frameTime:int = 0;
private var lastLoop:Date = new Date();
private var thisLoop:Date = new Date();

private var fps:TextField;

public function MainApp()
{
init();
}

private function init()
{
dWidth = this.stage.stageWidth;
dHeight = this.stage.stageHeight;
bgBitmapData = new BitmapData(dWidth,dHeight,false,0x000000);
bgCanvas = new Bitmap(bgBitmapData);
fgBitmapData = new BitmapData(dWidth,dHeight,true,0xFF0000);
fgCanvas = new Bitmap(fgBitmapData);
addChild(bgCanvas);
addChild(fgCanvas);

fps = new TextField();
addChild(fps);
fps.textColor = 0xFFFFFF;

var i = 0;
for (i=0; i 			{
bgflakes.push(new Flake(bgCanvas.width, bgCanvas.height,0,3));
}
for (i=0; i 			{
fgflakes.push(new Flake(fgCanvas.width, fgCanvas.height,0.2,4));
}
timer = new Timer(10);
timer.addEventListener(TimerEvent.TIMER, draw);
timer.start();

if (Accelerometer.isSupported)
{
orientation = true;
myAcc = new Accelerometer();
myAcc.addEventListener(AccelerometerEvent.UPDATE, onAccUpdate);
}
}

private function onAccUpdate(e:AccelerometerEvent):void
{
orientX = e.accelerationX;
}

private function setWind()
{
if (! orientation)
{
var mx:Number = mouseX - dWidth / 2;
wind = (mx/dWidth)*3;
}
else
{
wind = Number(orientX) * 3;
}
if (! wind)
{
wind = 0;
}
}

private function draw(e:TimerEvent)
{
frameCount +=  1;

bgBitmapData.fillRect(new Rectangle(0,0,dWidth, dHeight),0x000000);
fgBitmapData = new BitmapData(dWidth,dHeight,true,0xFF0000);
setWind();
var i:int = 0;
for (i=0; i 			{
bgflakes[i].move(frameCount, wind);

bgBitmapData.draw(bgflakes[i], new Matrix(1,0,0,1,bgflakes[i].x, bgflakes[i].y));
}
for (i=0; i 			{
fgflakes[i].move(frameCount, wind);

fgBitmapData.draw(bgflakes[i]);
}

var thisFrameTime:int = (Number(thisLoop=new Date())) - Number(lastLoop);
frameTime+= (thisFrameTime - frameTime) / filterStrength;
lastLoop = thisLoop;
fps.text = (1000/frameTime).toFixed(1) + " fps";
}
}
}</pre>
<p></code>&nbsp;</p>
<div><strong>Kommentarer til koden</strong><br />
Jeg har beholdt draw() inde i Flake klassen og tegner den fysisk op med graphics.drawCircle() for at beholde koden på tværs af eksemplerne. Overførsel af værdier om canvas-størrelse osv. er også bevaret i Flash eksemplet er også bevaret. Endelig er der brugt Bitmap() og BitmapData() til at simulere de egenskaber som bruges på canvas elementet.</div>
<h3>Resultat 2</h3>
<div>På modeller, hvor der både kan køres Flash Player 10.1 og canvas vil jeg prøve at teste dem op mod hinanden. Ikke så meget en kamp mellem det ene og det andet, for fremtiden (tror jeg) tilhører dem begge, men mere et forsøg på at finde ud af, hvor dårlig Flash præsterer og om tilhængere af canvas, som &#8220;Flash Killer&#8221; har noget at have det i. Jeg vil opdatere efterhånden som jeg rammer flere forskellige telefoner på min vej:</div>
<ul>
<li>Dersire HD (2.2): Canvas <strong>~ 16.5</strong> FPS og Flash 10.1 <strong>~ 24.2</strong> FPS</li>
<li>Inspire 4G (2.3): Canvas <strong>~ 14 </strong>FPS og Flash 10.1 <strong>~ 14 </strong>FPS (opdateret 17/3 &#8211; 2011)</li>
<li>HTC Desire (2.2): Canvas <strong>~ 14.5</strong> FPS og Flash 10.1 <strong>21.7 to 23.5</strong> FPS</li>
</ul>
<div>I er velkommen til at indsende oprigtige målinger</div>
<h3>Konklusion</h3>
<div>Jeg ser en relativ højere frame rate når jeg afvikler i Flash Player på Android, end hvis jeg udfører tilsvarende med canvas elementet. Det er ikke lykkedes mig at vende forholdet mellem tallene på min telefon, end ikke få dem til at nærme sig hinanden, mærkbart. Jeg vil derfor mene at brugeren vil have en bedre oplevelse af dette eksperiment i en Flash Player, end ved en canvas-løsning. Det er vigtigt at huske på, at canvas elementets evne til at præstere, ikke behøver at gå ud over den generelle opfattelse af HTML5 og CSS3. Min fornemmelse er, at CSS3 har en ok afvikling på de mobile enheder, måske på grund af deres forudsigelige natur, men det har jeg stadig tilbage at undersøge.</div>
<div>Endelig har jeg ikke forholdt mig til, hvad der er installeret på enhederne. Det kan være relevant i en fintælling at se på parametre som:</div>
<ul>
<li>Hvor lang tid telefonen har været tændt.</li>
<li>Er den tilsluttet oplader.</li>
<li>Kører der programmer i baggrunden.</li>
<li>Videodokumentation af test</li>
</ul>
<div>Mit ønske her er at få nogle tal i luften, og et forhold til den relativt ringe afvikling af materiale på mobile enheder.</div>
<div>Meld gerne tilbage med resultater af jeres egne målinger på computer, tablet og mobil.</div>
<div><strong>Links til tests:</strong></div>
<ul>
<li><a title="Snow canvas test" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html" target="_blank">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowcanvas.html</a> (canvas)</li>
<li><a title="Flash udgave af snow" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html" target="_blank">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.html</a> (Flash)</li>
</ul>
<div><strong>Links til dokumenter</strong></div>
<ul>
<li><a title="Sourcecode til HTML5 canwas snow" href="https://gist.github.com/716215" target="_blank">https://gist.github.com/716215</a> (canvas)</li>
<li><a title="Link til test-fil" href="http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.zip">http://eksempler.hjaelpmignu.dk/flash/actionscript/snowflake/snowFLA.zip</a> (Flash)</li>
<li><a title="FPS counter i JavaScript" href="http://stackoverflow.com/questions/4787431/check-fps-in-js" target="_blank">http://stackoverflow.com/questions/4787431/check-fps-in-js</a> (Frame Counter)</li>
</ul>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/03/html5-canvas-med-javascript-og-flash-player-performance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Photoshop begynder at opføre sig mærkeligt efter opdatering af Mac OSX</title>
		<link>http://blog.hjaelpmignu.dk/2011/03/photoshop-begynder-at-opf%c3%b8re-sig-maerkeligt-efter-opdatering-a-mac-osx/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/03/photoshop-begynder-at-opf%c3%b8re-sig-maerkeligt-efter-opdatering-a-mac-osx/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 09:27:30 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=281</guid>
		<description><![CDATA[Hvis din udgave af Photoshop begynder at opføre sig underligt på Mac, kan det være fordi systemet er blevet opdateret til Mac OS 10.6.5 eller Mac OS 10.6.6. I følge Adobes egen Knowledge base (http://kb2.adobe.com/cps/881/cpsid_88159.html) kan de kun opfordre til at systemet bliver på version 10.6.4, indtil en løsning er &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/03/photoshop-begynder-at-opf%c3%b8re-sig-maerkeligt-efter-opdatering-a-mac-osx/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Hvis din udgave af Photoshop begynder at opføre sig underligt på Mac, kan det være fordi systemet er blevet opdateret til Mac OS 10.6.5 eller Mac OS 10.6.6.<br />
I følge Adobes egen Knowledge base (<a href="http://kb2.adobe.com/cps/881/cpsid_88159.html">http://kb2.adobe.com/cps/881/cpsid_88159.html</a>) kan de kun opfordre til at systemet bliver på version 10.6.4, indtil en løsning er fundet, men i praksis er det jo nok ikke muligt.</p>
<p>En udvikler (Jesper Storm Bache) blandede sig i en diskussion på Adobe Forums (<a href="http://forums.adobe.com/thread/752602">http://forums.adobe.com/thread/752602</a>) og er kommet med et hack, der løser problematikken indtil der kommer en permanent løsning fra Apple.</p>
<p>Vær lige opmærksom på at denne hack går ind og retter i selve systemet, og der er ingen garanti for at det ikke har indvirkning på andre applikationers måde at fungere på &#8230; er dog ikke bekendt med nogle bivirkninger.</p>
<p>Du kan hente hack&#8217;en på <a href="http://www.bache.name/download/osx/10_6_5%20keyboard%20hack.dmg">http://www.bache.name/download/osx/10_6_5%20keyboard%20hack.dmg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/03/photoshop-begynder-at-opf%c3%b8re-sig-maerkeligt-efter-opdatering-a-mac-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pappa&#8217;s got a brand new badge (Adobe Community Champion 2011)</title>
		<link>http://blog.hjaelpmignu.dk/2011/01/papas-got-a-brand-new-badge-adobe-community-champion-2011/</link>
		<comments>http://blog.hjaelpmignu.dk/2011/01/papas-got-a-brand-new-badge-adobe-community-champion-2011/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 11:59:24 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[Adobe Community Champions]]></category>
		<category><![CDATA[Adobe User Group Of Denmark (AUGOD)]]></category>
		<category><![CDATA[Mediehøjskolen]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=277</guid>
		<description><![CDATA[Så kom listen med de udvalgte Community Champions for 2011, og jeg er glad for at se at jeg har fået lov til at bestride jobbet (igen) i år. Det bliver et rigtigt spændende år for internetteknologier og software til design og udvikling på diverse platforme, og jeg glæder mig &#8230;<p><a href="http://blog.hjaelpmignu.dk/2011/01/papas-got-a-brand-new-badge-adobe-community-champion-2011/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Så kom <a title="Adobe Community Champions" href="http://blogs.adobe.com/community/2011/01/adobe-community-champions-2011.html">listen med de udvalgte</a> Community Champions for 2011, og jeg er glad for at se at jeg har fået lov til at bestride jobbet (igen) i år. Det bliver et rigtigt spændende år for internetteknologier og software til design og udvikling på diverse platforme, og jeg glæder mig til at sprede information om Flash, HTML5, Adobe, Photoshop, mobile, interaktivitet, Illustrator osv. osv. til alle der gider at høre nyt fra den verden.</p>
<h3>Hvad er en Community Champion?</h3>
<p>Der er lidt meget glasur på titlen, og det lyder nok voldsommere end det er. <a href="http://blogs.adobe.com/community/2011/01/adobe-community-champions-program-launch.html">Adobes egen beskrivelse</a>, nagler de vigtigste pointer meget godt og betyder i al sin enkelthed at jeg skal blive ved med at gøre som jeg altid har gjort &#8230; snakke løs <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Hvad enten der er tale om møder i <a href="http://augod.groups.adobe.com">AUGOD </a>(Den danske Adobe Brugergruppe), diverse events og produktlanceringer til folks sporadiske spørgsmål og lyst til at få opklaret (eller høre min version af) interaktive platformes mysterier og kringelkroge.</p>
<h3>Så er du vel en rigtig Adobe lover?</h3>
<p>det kan man da godt kalde mig. Men det er jeg kun fordi jeg elsker de værktøjer der er med til at skabe de flotteste og mest innovative løsninger online, såvel som offline. Kærligheden strækker sig over alle produkterne og de muligheder de giver designere, men min kærlighed ligger også hos andre produkter fra andre udbydere, samt åbne standarder som HTML5. En stor del af mit virke i 2011 (under denne titel) vil nok være at overbevise folk om at Flash/HTML5 problematikken ikke er en enten-eller løsning, men en både-og, med forskellige teknologier til at løse forskellige typer af opgaver.</p>
<p>Endelig vil noget at tiden blive brugt på <a href="http://www.hjaelpmignu.dk/">http://www.hjaelpmignu.dk/</a> hvor du kan få svar på de spørgsmål du end måtte have til programmer og teknologier forbundet med Creative Suite. Fyr løs, og svar eventuelt på andres problemer, hvis du har en løsning.</p>
<h3>På gensyn derude</h3>
<p>Dette indlæg er egentlig bare et heads up, på at jeg stadig er på, og I er mere end velkommen til at kontakte mig her, på www.hjaelpmignu.dk, eller følge mig på twitter (@ockley), så skal jeg se hvad jeg kan gøre for dig <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Med venlig hilsen</p>
<p>Karsten &#8220;ockley&#8221; Vestergaard</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2011/01/papas-got-a-brand-new-badge-adobe-community-champion-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Er der en fremtid for Adobe Flash Player når HTML5 sætter sig i sadlen</title>
		<link>http://blog.hjaelpmignu.dk/2010/12/er-der-en-fremtid-for-adobe-flash-player-nar-html5-s%c3%a6tter-sig-i-sadlen/</link>
		<comments>http://blog.hjaelpmignu.dk/2010/12/er-der-en-fremtid-for-adobe-flash-player-nar-html5-s%c3%a6tter-sig-i-sadlen/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 12:05:07 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[Adobe Dreamweaver]]></category>
		<category><![CDATA[CS5]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=271</guid>
		<description><![CDATA[Der er mange diskussioner om hvordan der skal kommunikeres på Internettet i fremtiden, og mange klumper af mudder flyver fra henholdsvis Flash og HTML lejren, med forsøg på at berettige deres egen eksistens. Når designere og udviklere er så passioneret, som de heldigvis ofte er, kommer klapperne desværre op og &#8230;<p><a href="http://blog.hjaelpmignu.dk/2010/12/er-der-en-fremtid-for-adobe-flash-player-nar-html5-s%c3%a6tter-sig-i-sadlen/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Der er mange diskussioner om hvordan der skal kommunikeres på Internettet i fremtiden, og mange klumper af mudder flyver fra henholdsvis Flash og HTML lejren, med forsøg på at berettige deres egen eksistens. Når designere og udviklere er så passioneret, som de heldigvis ofte er, kommer klapperne desværre op og de glemmer at zoome lidt ud og se det hele i et større perspektiv. Jeg selv, er jo en Adobe mand af guds nåde og elsker alt, hvad der har med design af interaktive løsninger at gøre, så jeg bliver rendt meget på dørene med spørgsmål som &#8220;Er Flash en død sild?&#8221;, &#8220;Kan man overhovedet noget med HTML?&#8221;, &#8220;Hvordan er performance?&#8221;, &#8220;Kan man lave Flash sites uden flash?&#8221; osv.</p>
<p>Jeg er selvfølgelig meget optaget af mulighederne på Flash Platformen, fordi det er en platform der byder på et utal af muligheder for at udtrykke sig og det gør det til et spændende udgangspunkt til projekter. Jeg er lige så optaget af HTML platformen og dermed også hele HTML5 &#8220;brandet&#8221; (inkl. CSS og JavaScript) da det bringer nye muligheder for at layoute oplevelser og kommunikere effektivt direkte i en browser.</p>
<h3>Hvad skal Flash til for?</h3>
<p>Flash har altid haft til opgave at løse interaktive og dynamiske opgaver, som HTML ikke kunne løfte selv &#8211; sådan er livet som plugin. Det gælder ikke bare Flash, men alt fra Quicktime player til video og over til Unitys web player til 3D indhold. HTML har altid været (og vil forhåbentlig altid være) et opmærkningssprog, som kan bruges til at definere indholdet på et website. Det bliver efterfølgende knyttet til et stylesheet, der definerer hvordan det skal se ud i en browser. JavaScript har endelig kunne forholde sig intelligent til brugerens måde at agere og derved variere over eller reagere på dele af indholdet. Der er mange flere facetter, men som grov skitse, går det nok an.</p>
<p>Problemerne er opstået, da Flash har kunnet løfte mange af de layoutmæssige og interaktive muligheder og samtidig været overlegen, uden sammenligning, når det gjaldt at integrere dynamik, animation, lyd, interaktion osv. Det har gjort det nemt for mange at bruge flash som fundament for hele sitet og ikke bare en plugin, der skal løse en opgave på et website. Ulempen ved dette er de navigationsmæssige udfordringer, søgemaskineoptimering og det faktum, at der skal meget til for at erstatte den grundrendering som er givet fra browseren</p>
<h3>Der skal være en god bund</h3>
<p>Den vigtigste opgave for HTML er at markere indholdet på et site. Du bruger et h-tag til overskriver, img-tag til billede osv. De nye tags i html5 giver øget mulighed for at definere om der er tale om navigation, artiker, video, lyd osv. Dette er et stort fremskridt, da det derved er muligt at forholde sig til den rene information og trække informationer på tværs af sites. Skal jeg bruge indholdet fra en artikel, kan jeg nemt fangle et &lt;article&gt; tag og vide at al relevant infromation bliver flyttet med. Dette vil lette presset på &lt;div&gt; tags (dividers) og gøre at de får arbejdsro til at opdele i forhold til layout og ikke indhold.</p>
<h3>Gøgeungen skal væk</h3>
<p>En af de største irritationsmomenter ved Flash er, at designere og udviklere har været fristet af de frie layoutmuligheder med Adobe Flash Professional. Følelsen af at kunne styre layoutet 100% uden at tænke på bokse og CSS har gjort at mange sites udelukkende er lavet med Flash. Lige så snart at &lt;body&gt; tag&#8217;et er kommet på banen, har dets eneste opgave været at vise én kæmpe swf-fil og absolut intet søgebart html &#8230; hvis jeg var html, ville jeg også blive stik tosset.</p>
<p> Designere skal, endnu mere i fremtiden, lære at bruge det bedste værktøj tilat løse opgaven. Der skal ikke laves Flash-sites fordi det er nemt &#8211; der skal laves Flash-sites fordi det er det rigtige at gøre. Hvis en designløsning umiddelbart kan lade sig gøre med html5 og css3 bør og skal den laves med disse teknologier &#8211; alt andet vil være et skridt ned at stigen.</p>
<p>Du vil i fremtiden se flere veldesignede html5 løsninger, der løser opgaver og udtrykker sig på samme måde som du er vant til at se produceret med Flash idag.</p>
<h3>Hvad med Javascript og canvas</h3>
<p>Når snakken er faldet på html5 som en Flash-killer, har de fleste egentlig ment at Javascript, med muligheden for at tilgå &lt;canvas&gt; tag&#8217;et har givet browseren et værktøj, der stort set kan løse alle opgaver som Flash har stået for. Jeg vil ikke gå i detaljer med teknikken, men der er en del der skal løses før den metode kommer i nærheden af Flash Playeren. Eksempler som jeg lige kan komme på er:</p>
<ul>
<li>Performance. Der er stor forskel på hvor godt JS afvikles på de forskellige platforme</li>
<li>Stabilitet. Der er forskel på hvordan JS afvikles på de enkelte platforme</li>
<li>Tilgang til Virtuel Motor. En oversigt på <a href="http://en.wikipedia.org/wiki/JavaScript_engine">http://en.wikipedia.org/wiki/JavaScript_engine</a> viser, hvor mange forskellige motorer, der findes til browserne</li>
<li>Opdateringsgrad. Flash Player&#8217;en har mulighed for at opdatere sig jævnligt og implementere nye tiltag. Standarder er ofte årevis om at blive enige</li>
<li>Er ikke en plug-in. Fordi Javascript ikke er en plug-in kan du ikke skræddersy din oplevelse på tværs af browsere, men må tilpasse den til målgruppen.</li>
</ul>
<p>Det er ikke fordi oventstående kun er af det onde, men det er nogle af de faktorer, der gør at der stadig er behov for properitære plug-ins der løfter de umiddelbare behov der stilles, indtil en standard kan defineres &#8211; en standard, der ofte er fremkommet efter at enkelte udviklere har præsenteret deres løsning på et problem. F.eks. er WebGL ved at samle sig efter år, men udbrydergrupper og konsollideringer. Det er nu, efter omkring 5 år, ved at nå til et punkt, hvor den kan bruges i nyere browsere (mangler dog stadig Internet Explorer). Der er ikke noget der tyder på at det vil gå hurtigere, når det &#8220;næste nye&#8221; bliver opfundet, hvilket giver nogle ret lange svartider på spørgsmål om innovation.</p>
<p>Jeg ser dog en stor fremtid i at JavaScript kommer til at servicere HTML5 og sørge for at logikken, der skal præsentere HTML elementerne bliver varetaget. Formvalidering, jQuery bliver fast inventar i fremtiden. Jeg har sværere ved at se Javascript skulle løse opgaver der ikke er bundet til html &#8211; ikke fordi det ikke er teknisk muligt, men simpelhen fordi jeg tror det bliver for bøvlet at udvikle og bliver afviklet for dårligt i browseren.</p>
<p>Endelig ser jeg stort set alle reklamer i fremtiden udviklet i HTML/CSS og JavaScript, da det vil give et bredere marked og en bedre integration i forhold til kontekst. Det bliver sværere for ad-blockers i fremtiden at adskille indholdet, og man kunne i sit stille sind have håbet på et &lt;advertisement&gt; tag i specifikationerne (selv om den nok ikke ville blive brugt) <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Hvornår kan man bruge det</h3>
<p>Selvom de mere skeptiske siger i 2022, er det min klare opfattelse at du skal bruge det, når en overvejende del at brugerne understøtter det. Du skal selvfølgelig være opmærksom på mulighederne for at præsentere indholdet i browsere der ikke understøtter det, men der er ikke nogen grund til at udelade alt det nye, fordi 15% af de besøgende ikke er opdateret (der er typer at sites, der ikke kan være så frimodige) <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Hvis du vil have en god oversigt kan du kigge på <a href="http://findmebyip.com/litmus">http://findmebyip.com/litmus</a> der under emner viser en fin gennemgang af alle de nye tags og script-muligheder. Det er også interessant læsning, når du kigger på video og lyd understøttelse i de forskellige browser og mulighederne på Mac og Win &#8230; der er stadig lidt, der skal masseres på plads.</p>
<p>Der findes også en oversigt på <a href="https://netaverages.adobe.com/en-us/index.html">https://netaverages.adobe.com/en-us/index.html</a> (login med dit Adobe ID) der viser en procentvis dækning af udbredelsen (både desktop og mobile) og give en pegepind for, hvordan mulighederne for implementation er. Det vigtigste at huske på (de næste mange år) er at tilbyde sekundære løsninger til browsere der ikke understøtter de nye selectors.</p>
<h3>Kan jeg lære det</h3>
<p>Det er ikke et spørgsmål om du kan &#8230; du skal. Fremtidens interaktive designer skal være god til både Flash og HTML &#8211; en af delene er ikke nok. Der vil i de næste år komme værktøjer der hjælper. Opdateringer af eksisterende programmer som <a href="http://www.adobe.com/support/dreamweaver/downloads_updaters.html#dwcs5">Adobe Dreamweaver 11.0.3</a> og <a href="http://labs.adobe.com/technologies/illustrator_html5/">Adobe Illustrator HTML5 pack</a> er allerede igang med at løfte noget af byrden, og programmer som <a href="http://tv.adobe.com/watch/adc-presents/preview-of-the-edge-prototype-tool-for-html5-/">Edge</a> vil tilbyde helt nye muligheder for at arbejde med HTML5 og de omkringliggende teknologier. Der er allerede en masse sites der giver sig i kast med mulighederne, men et par at starte med kunne være:</p>
<ul>
<li><a href="http://www.html5rocks.com/">http://www.html5rocks.com/</a></li>
<li><a href="http://html5tutorial.net/">http://html5tutorial.net/</a></li>
<li><a href="http://www.w3schools.com/html5/default.asp">http://www.w3schools.com/html5/default.asp</a></li>
<li><a href="http://webdesignledger.com/tutorials/15-useful-html5-tutorials-and-cheat-sheets">http://webdesignledger.com/tutorials/15-useful-html5-tutorials-and-cheat-sheets</a></li>
<li><a href="http://www.webmonkey.com/2010/02/building_web_pages_with_html_5/">http://www.webmonkey.com/2010/02/building_web_pages_with_html_5/</a></li>
<li><a href="http://www.adobe.com/devnet/dreamweaver/articles/dw_html5_pt1.html">http://www.adobe.com/devnet/dreamweaver/articles/dw_html5_pt1.html</a></li>
<li><a href="http://www.adobe.com/devnet/dreamweaver/articles/introducing_new_css_layouts.html">http://www.adobe.com/devnet/dreamweaver/articles/introducing_new_css_layouts.html</a></li>
</ul>
<h3>Kan jeg få hjælp</h3>
<p>Selvfølgelig kan du det. Der er mange sites, hvor artiklerne tillader kommentarer under. De virker flinke til at svare på spørgsmål. Ellers er der altid vores eget <a href="http://www.hjaelpmignu.dk/forum/370">Dreamweaver forum</a>. God fornøjelse med HTML5</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2010/12/er-der-en-fremtid-for-adobe-flash-player-nar-html5-s%c3%a6tter-sig-i-sadlen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Farvelvideo til dimittender fra Interaktivt Design på Mediehøjskole</title>
		<link>http://blog.hjaelpmignu.dk/2010/06/farvelvideo-til-dimittender-fra-interaktivt-design-pa-medieh%c3%b8jskole/</link>
		<comments>http://blog.hjaelpmignu.dk/2010/06/farvelvideo-til-dimittender-fra-interaktivt-design-pa-medieh%c3%b8jskole/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:02:30 +0000</pubDate>
		<dc:creator>ockley</dc:creator>
				<category><![CDATA[Mediehøjskolen]]></category>
		<category><![CDATA[undervisning]]></category>
		<category><![CDATA[www.hjaelpmignu.dk]]></category>
		<category><![CDATA[afsked]]></category>
		<category><![CDATA[dimittend]]></category>
		<category><![CDATA[farvel]]></category>
		<category><![CDATA[gode råd]]></category>
		<category><![CDATA[id07-10]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://blog.hjaelpmignu.dk/?p=233</guid>
		<description><![CDATA[Så foldede svingfjerene sig ud. Kære alle dimittender fra interaktivt design. Jeg vil gerne ønske jer al mulig held og lykke i fremtiden med alle de digitale eventyr end måtte møde. Jeg vil gerne takke jer for den tid vi har tilbragt sammen, og alle de minder og traditioner I &#8230;<p><a href="http://blog.hjaelpmignu.dk/2010/06/farvelvideo-til-dimittender-fra-interaktivt-design-pa-medieh%c3%b8jskole/" class="more-link"><span>Continue Reading &#8594;</span></a></p>]]></description>
			<content:encoded><![CDATA[<p>Så foldede svingfjerene sig ud. Kære alle dimittender fra interaktivt design. Jeg vil gerne ønske jer al mulig held og lykke i fremtiden med alle de digitale eventyr end måtte møde. Jeg vil gerne takke jer for den tid vi har tilbragt sammen, og alle de minder og traditioner I har været med til at skabe for fremtidige årgange. Følgende indlæg er et par af mine betragtninger til den verden I skal ud i. Ting som i en vis udstrækning passer skævt ind i dagligdagens moduler på skolen. Til at starte med vil jeg lige smide den video op fra festen, så I kan se den igen, hvis I har lyst.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="337" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/q1Jy_COc9p0&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="337" src="http://www.youtube.com/v/q1Jy_COc9p0&amp;color1=0xb1b1b1&amp;color2=0xd0d0d0&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<h2>Farvel, betyder  at fare vel</h2>
<p>Når I nu har pustet ud og holdt en velfortjent sommerferie, går det langsomt men sikkert op for jer at der ikke er mere skolegang, og I rent faktisk er &#8220;udlært&#8221; og flyvefærdige. Mit farvel til jer er for at minde jer om at alle tre år har været begivenhedsrige og lærerige, for jer såvel som mig. Jeg smider lige et par sidste ord efter jer her på min blog, hvor I ikke umiddelbart kan svare igen <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>De farvel I får herfra er ikke et ønske om ikke at se jer igen, men et håb om at det må gå jer godt på den fremtidige rejse. Vi lever dog i en verden, hvor det ikke sker automatisk. Nuvel, du kan blive hjulpet af en rig tante, eller en far der allerede er i branchen, men den kreative kraft, der blusser i jer, kan ikke vedligeholdes af held og klap på skulderen &#8211; så ender i med at stå og snakke om det store projekt I lavede for to år siden. Derfor, lige et par nedslagspunkter.</p>
<h3>Det tog tre år</h3>
<p>Selvom det sidste I har lært ofte har været det mest komplekse, er den viden og de muligheder bygget på et fundament af grundlæggende færdigheder. Hvor interessante de senere års projekter end har været, vil de første moduler kunne bruges som byggesten til andre fremtidige udforskninger &#8211; den viden må aldrig forstås som implicit. Viden om typografi, gestaltlove, formgivning, kommunikation osv. skal videreudvikles og udforskes som selvstændige projekter. Designgrudlaget ændrer sig konstant, som tektoniske plader, og hvis du ikke forholder dig opdateret til dem, vil dine løsninger ramme skævt få år ude i fremtiden, og i vil stå som en Kolos på lerfødder.</p>
<h3>Du kan lukke af for fremtiden, men du kan ikke lukke fremtiden ned</h3>
<p>Det er så fristende at sætte sig ind i en kasse, med det man nu engang kan. Du vil kunne bruge timer på at diskutere og retfærdiggøre, hvorfor du har ret, som nyudlært. Men hvis du lukker af for fremtiden, vil du ende som en dinosauer der ikke ved den er uddød. Du vil stå med en kuffert fuld af kuglepenne og skælde ud på folk, fordi de sender e-mail i stedet for breve. Om du vil det eller ej, så er der fuld fart på lokomotivet, og som interaktiv designer har du plads i den forreste vogn. Det er en sjov rejse, men det kan god være frustrerende at man ikke kan slappe af i længere tid af gangen. På linjen for interaktivt design på Mediehøjskolen, skal vi hele tiden korrigere og kan ikke med sikkerhed fortælle de nye studerende, hvordan deres tredje år forløber. Den korrektion har vi foretaget ind til nu &#8230; nu, hvor du er flyttet hjemmefra,  skal du selv købe toiletpapir <img src='http://blog.hjaelpmignu.dk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Den nye viden kan ikke fås intravenøs</h3>
<p>Jeg vil ikke garantere at det ikke kommer til at ske, men som tingene er i den umiddelbare fremtid, er der ingen kloge ord på sprøjte. Du kan ikke sætte et &#8220;Joshua Davis plaster&#8221; på og få en fornemmelse af hvilke strømninger han rører frem i sin gryde. Kun med et øje der ser og et øre der hører, vil du tilegne dig færdighederne til at skabe. Kravene til interaktive designere er derudover noget skrappere, da jeres værktøjer er lidt mere komplekse end et penalhus. Mange af de ting I må sætte jer ind i, er eksperimenterende, nogle er ikke synlige, og en del af de tungeste er endda kun delelementer til en simpel løsning. Hvor den grundlæggende værktøjskasses præmis kun flyttes langsom, vil det der adskiller jer fra andre designere, være viden og forståelse for interaktion, som kun flygtigt er relevant, for derefter at blive generel og ende som forældet fordi ny opdagelser har gjort det irrelevant eller direkte forkert.</p>
<h3>Det digitale spejl, forvrænger &#8211; derfor behøver du ikke at vrænge ansigt</h3>
<p>Når man er interaktiv designer, er man nød til at simulere stoflighed. Der er ikke noget på Internettet der er ægte &#8230; ikke engang Internettet. Du lever af at designe oplevelser i et kunstigt rum, kun afbrudt af ormehuller med videokonference og IP-telefoni, som nærmeste kæde til den virkelige verden omkring. Intet er uforgængeligt &#8211; her er ingen pyramider eller Versailles slot. Billederne fra den virkelige verden er blevet lavet til nuller og et-taller og viser sig kun som vi forventer, fordi vores egne opsatte regler bliver overholdt. Vi ser kampagner der behandler virkeligheden til egen vinding og personer der sletter sig selv, eller manipulerer med data for at gengive en anden sandhed. Det store problem er at vi i større grad søger ind i en kunstig verden for at finde viden om, hvordan den virkelige verden er bygget op. Når I laver interaktive løsninger er i med til at vedligeholde den kunstige verden, og I skal, mere end mange andre, pleje forholdet mellem Internettet og mennesket. Med styrke kommer ansvar, og I skal altid være klar over den magt i har overfor uvidende bruger, der naivt tager det de ser for gode varer.</p>
<h3>I former en fremtid til en samtid</h3>
<p>I forhold til nettet, er verden kun i &#8220;fire dimensioner&#8221;. Superstrengsteoretikere bedes se bort fra denne uforskammede simplificering. Hver eneste nedslag på nettet, indeholder en dybde samtidig med den visuelle flade. Ud over dette, har den også en designet tidsfornemmelse og kronologi. På den ene side har den søgemaskinernes evige jagt på at cache indhold på større og større lagermedier, så vi kan finde ting fra en svunden, digital fortid, men også den indlejrede pulsfornemmelse i animationer, lyd og filmklip som selvstændige processer på en statisk flade. Når I designer noget, er det første gang det er på nettet. I smider endnu en &#8220;bold i spil&#8221; som ikke har været der før &#8211; ny adresse, ny grafik, måske nye principper. Det der er fremtid for nettet, er inde i jeres hoveder,og bliver først til samtid, når det har materialiseret sig. Da alle er afhængige af at søge indhold, inspiration og ny viden på nettet, er det vigtigt at dem der leverer nye oplevelser og viden, har en forståelse af at de er de første i kæden.</p>
<h3>Lad vær med at tage kvælertag på noget du er ved at give kunstigt åndedræt</h3>
<p>Når i designer og udvikler koncepter, så lad dem leve - hvis ikke i virkelige projekter, så i det mindste i en sandkasse hjemme hos jer selv. Du kan få en vane at tænke &#8220;Nej, ikke alligevel,&#8221; midt i processen. Det er gift for jeres pionerånd &#8211; hvis du laver brunkager, smider du ikke dejen væk, hvis formen standser noget ud der ikke helt ligner &#8211; i ovnen med den! Hvis ikke, så ender du med at acceptere halvfærdige og kuldsejlede projekter, og så er det velkommen til umulighedernes land!</p>
<h3>Det er først når du holder hovedet i vater, at du laver noget der virkelig batter!</h3>
<p>Tro på dig selv. Lad være med at tale ned til andre, eller dukke dig for selvfede i miljøet. Problemet med ikke at kigge lige ud er at du misser horisonten, og det er den du skal bruge til at orientere dig. Du lever af at være til, i forhold til omverden &#8211; en omverden der er gennemsyret af dit netværk. Hvis du, i din egen succes, glemmer at være i øjenhøjde med andre, knækker kæden. En kæde der i den professionelle del af netværket i forvejen kan være lidt tynd. Dem du møder på vej op, ser du igen på vej ned &#8230; det vil være så rart at lande blødt, når man tænker på hvor mange op og nedture man skal tage i et helt liv. Omvendt, må du aldrig lade dig kue af andres holdning til dine værker. Du må modtage kritik &#8230; du skal modtage kritik! Men der er rigeligt med folk, der har nemmere ved at kritisere udaf end indad. Jeg kan ikke direkte fortælle hvordan I kan kende forskel, men det har tit noget at gøre med lydniveauet &#8211; de rigtig rige, fortæller sjældent om deres penge.</p>
<h3>Mod det uendelige &#8230; univers!</h3>
<p>Når det så er sagt (det var nok), så har I den mest interessante fremtid foran jer. I kan levere og udbygge på eksisterende komponenter, eller I kan udforske og udvikle uopdyrket land. Med de muligheder og færdigheder I besidder, kan intet stoppe jer. Tænk både kommercielt og ikke kommercielt. Hvis man ikke forholder sig til pengene, er en del af de kommercielle projekter de kedeligste. Nye uafprøvede ideer finder sjældent indpas der. Det må dog ikke afholde jer fra at eksperimentere og lave &#8220;proof of concept&#8221; så I kan være med til at designe fremtidens interaktive design, i stedet for at vedligeholde andres opfundne regler.</p>
<p>Og med dette, må i fare vel. Kom tilbage og fortæl de næste studerende om jeres landvindinger, når I står og glimter.</p>
<p>/ockley</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hjaelpmignu.dk/2010/06/farvelvideo-til-dimittender-fra-interaktivt-design-pa-medieh%c3%b8jskole/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

