<?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"
	>

<channel>
	<title>TheCosmonaut</title>
	<atom:link href="http://www.thecosmonaut.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thecosmonaut.com</link>
	<description>Elite Web Design, Programming, and Consulting</description>
	<pubDate>Tue, 09 Sep 2008 20:14:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Sequoia Financial Site Design</title>
		<link>http://www.thecosmonaut.com/2008/09/09/sequoia-financial-site-design/</link>
		<comments>http://www.thecosmonaut.com/2008/09/09/sequoia-financial-site-design/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 20:12:46 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.thecosmonaut.com/?p=75</guid>
		<description><![CDATA[Site Design with untraditional elements]]></description>
			<content:encoded><![CDATA[<p>CLIENT: Tridian/Sequoia Financial<br />
PROJECT: Site Design</p>
<div class="wp-caption alignleft" style="width: 310px"><a href="http://www.thecosmonaut.com/wp-content/uploads/2008/09/sequoia/comp2-v01.jpg" target="_blank"><img title="Sequoia Financial" src="http://www.thecosmonaut.com/wp-content/uploads/2008/09/sequoia/sequoia.jpg" alt="Sequoia Financial Home Page" width="300" height="225" /></a><p class="wp-caption-text">Sequoia Financial Home Page</p></div>
<p>Sequoia Financial approached <a href="http://www.tridian.com/" target="_blank">Tridian</a> with a challenge: how to make a collections agency (which has very strong connotations and associations for consumers) seem new, warm, and friendly? What&#8217;s more, how do you do that without undermining the integrity and strength that people expect from collections agencies? This design reflects my take on it. I tried to emphasize the sequoia tree&#8217;s associations with strength and grandeur while calming everything down with friendly greens and &#8220;friendlier&#8221; typography. Another thing: Sequoia specifically requested doing something unusual with their main navigations, which is how I ended up using it to bisect the content area of the page. Personally, I like how it forms a &#8220;pillar&#8221; in the middle without getting in the way of the content to the right and the left of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/09/09/sequoia-financial-site-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beach Bums Site Design</title>
		<link>http://www.thecosmonaut.com/2008/09/09/beach-bums-site-design/</link>
		<comments>http://www.thecosmonaut.com/2008/09/09/beach-bums-site-design/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 19:47:12 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.thecosmonaut.com/?p=70</guid>
		<description><![CDATA[Content-Heavy E-Commerce Design]]></description>
			<content:encoded><![CDATA[<p>CLIENT: Tridian/Beach Bums Boardshops<br />
PROJECT: Content-Heavy E-Commerce Design<a href="http://followyourheart.roxy.com" target="_blank"><br />
</a></p>
<div class="wp-caption alignleft" style="width: 310px"><a href="http://www.thecosmonaut.com/wp-content/uploads/2008/09/beachbums/comp1B.jpg"><img title="Beach Bums" src="http://www.thecosmonaut.com/wp-content/uploads/2008/09/beachbums/beachbums.jpg" alt="Beach Bums home page comp" width="300" height="225" /></a><p class="wp-caption-text">Beach Bums home page comp</p></div>
<p>The excellent people over at <a href="http://www.tridian.com/" target="_blank">Tridian</a> approached me to tackle a site design for their client, Beach Bums Boardshops. Beach Bums is a surf &amp; skate apparel company which was looking to completely update their online presence. Tridian supplied me with the wireframes and the basic site requirements, and I came up with a design which referenced their more laid-back, surfer roots while still retaining some high-impact colors and layout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/09/09/beach-bums-site-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flash 9 Policy Files, or &#8220;How I Got Rid of That Damn Error #2048!&#8221;</title>
		<link>http://www.thecosmonaut.com/2008/08/28/flash-9-policy-files/</link>
		<comments>http://www.thecosmonaut.com/2008/08/28/flash-9-policy-files/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 22:06:16 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Flash Studio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.thecosmonaut.com/?p=47</guid>
		<description><![CDATA[Find out how I banished Error #2048 forever, without having to resort to violence!]]></description>
			<content:encoded><![CDATA[<p>I ran into a very interesting Flash issue. I had a Flash form that was being hosted on Server A. It was submitting data to a PHP file on Server B, then receiving the results from that PHP file (whether the form was processed correctly). Server B had a crossdomain xml file set up, and I had my security permissions properly set up, but I kept getting a security error (Error #2048) no matter what I did. Needless to say, this was making me want to play with large-calibur weapons.</p>
<p>The solution lay in <a href="http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html" target="_blank">this well-hidden article</a> on Adobe&#8217;s site. In essence, the article states that they&#8217;ve made Flash&#8217;s security settings even more strict, and that means that in some situations, you need to change things around in order to make sure that Flash will accept your policy file. I set my computer up with <a title="Download Flash Debugger Version" href="http://www.adobe.com/support/flashplayer/downloads.html" target="_blank">Flash 9 debugger version</a>, <a title="Learn how to set up your computer to log policy errors" href="http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security_05.html" target="_blank">set it up to log policy errors</a>, and then looked at my policy file log which revealed the problem: Server B was returning the crossdomain xml file as Content-Type &#8220;application/x-httpd-php5-source&#8221;. With Flash 9&#8217;s newer, stricter settings, Flash 9 will only accept policy files of the following content-types:</p>
<ol>
<li>text/* (any text type)</li>
<li>application/xml or application/xhtml+xml</li>
</ol>
<p>As soon as we changed the crossdomain&#8217;s content-type, the Error #2048 went away and the form processed correctly!</p>
<p>So the upshot is that if you&#8217;re getting Error #2048 notices and you can&#8217;t get them to go away no matter what you try, follow the steps outlined on <a title="Learn how to set up your computer to log policy errors" href="http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security_05.html" target="_blank">this page at Adobe</a>. Once you&#8217;ve set your computer up to debug and log your policy files, you&#8217;ll be able to check and see if a policy file content-type problem is causing your troubles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/08/28/flash-9-policy-files/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Snowflake Modification Tutorial</title>
		<link>http://www.thecosmonaut.com/2008/07/31/snowflake-modification-tutorial/</link>
		<comments>http://www.thecosmonaut.com/2008/07/31/snowflake-modification-tutorial/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 00:07:57 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Flash Studio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.thecosmonaut.com/?p=31</guid>
		<description><![CDATA[Tutorial outlining how to have a snow storm contract in on the user's mouse when clicked, then expand back out when clicked again.]]></description>
			<content:encoded><![CDATA[<p>While helping out on the forums at <a href="http://board.flashkit.com/board/forumdisplay.php?f=2" target="_blank">FlashKit</a>, I came across this post:</p>
<blockquote><p>Hello,<br />
We have a project that requires free falling snow flakes. When the cursor enters the stage we need the flakes to &#8216;rush&#8217; toward the pointer and follow it. When the cursor leaves the stage the flakes drift away and down.</p>
<p>Can anyone point me toward an FLA or tutorial?</p>
<p>Many thanks</p></blockquote>
<p>Well, for some reason I got all obsessed with this question and I wrote the following tutorial:<br />
I did a rough version that emulates this effect. You can probably fine-tune it to be nicer, but this will get you started. Here&#8217;s what you need to do:</p>
<p><strong>1.</strong> You need some sort of snowflake effect. Rather than start from scratch, you can download one. I downloaded the SnowFlakes class from Pixelfumes: <a href="http://pixelfumes.blogspot.com/2006/11/actionscript-3-snow-storm-class.html">http://pixelfumes.blogspot.com/2006/11/actionscript-3-snow-storm-class.html</a> and I&#8217;m using the snowFlake.fla for the example (which you can also download from that link).</p>
<p><strong>2.</strong> This class now needs to be modified to do what you were talking about. So first step is to make it so that the movie can register clicks. I created an invisible button called btnClick that was 450 x 450 (covering the whole movie).</p>
<p><strong>3.</strong> We want to make sure that the snowflakes are underneath the button, or the user&#8217;s click won&#8217;t be registered. So in the actions frame of snowFlake.fla, I changed the createFlakes function to:</p>
<pre>
<code>function createFlakes():void{
     var sFlake:SnowFlake = new SnowFlake();
     addChildAt(sFlake,0);
}</code>
</pre>
<p>This adds the new snowflake underneath everything else.</p>
<p><strong>4.</strong> Now we want to have something happen when the user clicks on the movie. So we add the following code:</p>
<pre>
<code>btnClick.addEventListener(MouseEvent.CLICK, toggleFlakes);</code>
</pre>
<p><strong>5.</strong> The toggleFlakes function needs to do a couple of things. First, check to see if it&#8217;s snowing. Then, if it IS snowing, it needs to stop snowing and have all the snowflakes go to the mouse. If it&#8217;s NOT snowing, it needs to have all the snowflakes go away from the mouse and start moving again. To do this, I added the following code:</p>
<pre>
<code>var isSnowing:Boolean = true;
function toggleFlakes(e:Event):void {
     if (isSnowing) {
          stopFlakes();
          isSnowing = false;
     } else {
          startFlakes();
          isSnowing = true;
     }
}

function stopFlakes():void {
     trace("stopFlakes clicked");
}

function startFlakes():void {
     trace("startFlakes clicked");
}</code>
</pre>
<p>For now, the stop flakes and start flakes functions are not defined &#8212; we&#8217;ll get to that in a second.</p>
<p><strong>6.</strong> So now we know we need to stop the flakes somehow&#8230; enter the stopFlakes function. Without identifying what that function IS, just yet, let&#8217;s assume that it will be a function that we&#8217;ll add to the SnowFlake class that will stop an instance of the snowflake from animating and cause it to move to the mouse. If we&#8217;re going to do it that way, we should create an array which will store references to all the snowflakes so we can trigger them at will. We do this by adding the following code:</p>
<pre>
<code>var flakeArray:Array = new Array();</code>
</pre>
<p>And by modifying the createFlakes function to be:</p>
<pre>
<code>function createFlakes():void{
     var sFlake:SnowFlake = new SnowFlake();
     addChildAt(sFlake,0);
     flakeArray.push(sFlake);
}</code>
</pre>
<p>Now we can reference all the created snowflakes, let&#8217;s make it so that by running stopFlakes, you run &#8220;gotoMouse&#8221; on all the flake instances:</p>
<pre>
<code>function stopFlakes():void {
     trace("stopFlakes clicked");
     for (var i:int; i<numFlakes; i++) {
          flakeArray[i].gotoMouse();
     }
}</code>
</pre>
<p><strong>7.</strong> Now we&#8217;ll need to start the flakes once again&#8230; so this is the startFlakes function. Let&#8217;s assume the function we&#8217;ll build in the SnowFlake class is called &#8220;restoreFlakes&#8221;. So our startFlakes function becomes:</p>
<pre>
<code>function startFlakes():void {
     trace("startFlakes clicked");
     for (var i:int; i<numFlakes; i++) {
          flakeArray[i].restoreFlakes();
     }
}</code>
</pre>
<p><strong>8.</strong> OK &#8212; now we&#8217;re ready to start editing the SnowFlakes class and add the real functions. First let&#8217;s do &#8220;gotoMouse&#8221;. Open up the SnowFlake class. Let&#8217;s think about what the gotoMouse function needs to be and needs to do:<br />
* It needs to be referenced by things OUTSIDE of the class<br />
* It needs to stop the snowflake from moving<br />
* It needs to move the snowflake to the mouse position</p>
<p><strong>9.</strong> The first task: It needs to be referenced by things OUTSIDE of the class. This means it needs to be a public function, so add this to the class:</p>
<pre>
<code>public function gotoMouse():void{
}</code>
</pre>
<p><strong>10.</strong> The second task: It needs to stop the snowflake from moving. OK, well if we look at the class, we can see that the following code is causing the snowflake to move:</p>
<pre>
<code>private function moveMe():void{
     this.addEventListener(Event.ENTER_FRAME,everyFrame);
}</code>
</pre>
<p>Easy enough to counter:</p>
<pre>
<code>public function gotoMouse():void{
     this.removeEventListener(Event.ENTER_FRAME, everyFrame);
}</code>
</pre>
<p><strong>11.</strong> The third task: it needs to move the snowflake to the mouse position. We&#8217;re dealing with movement, so I personally always use Tweener to handle movement (<a href="http://code.google.com/p/tweener/">http://code.google.com/p/tweener/</a>). Download Tweener, put it in the same folder as the FLA, and add the following import command to the top of the class with all the other imports:</p>
<pre>
<code>import caurina.transitions.Tweener;</code>
</pre>
<p>We also need to move it to the mouse position, so let&#8217;s pass the mouse position from the original call to this function. So the call in the snowFlake.fla becomes:</p>
<pre>
<code>function stopFlakes():void {
     trace("stopFlakes clicked");
     for (var i:int; i<numFlakes; i++) {
          flakeArray[i].gotoMouse(mouseX,mouseY);
     }
}</code>
</pre>
<p>and our gotoMouse function becomes:</p>
<pre>
<code>public function gotoMouse(xPos:Number, yPos:Number):void{
     this.removeEventListener(Event.ENTER_FRAME, everyFrame);
}</code>
</pre>
<p>Now we need to add the tween, so add the Tweener code and the function becomes:</p>
<pre>
<code>public function gotoMouse(xPos:Number, yPos:Number):void{
     this.removeEventListener(Event.ENTER_FRAME, everyFrame);
     Tweener.addTween(this, {x:xPos, y:yPos, time:0.5, transition:"easeOutSine"});
}</code>
</pre>
<p><strong>12.</strong> OK, now we need to create the function that will start the flakes once again. We&#8217;re calling this restoreFlakes. What does it need to do?<br />
* It needs to be referenced by things OUTSIDE of the class<br />
* It needs to move the snowflake back to its original position<br />
* It needs to start the snowflakes moving again.</p>
<p><strong>13.</strong> The first task is easy &#8212; it needs to be a public function:</p>
<pre>
<code>public function restoreFlakes():void{
}</code>
</pre>
<p><strong>14.</strong> The second task &#8212; move back to the original position. This means we need to track where the snowflake was when it got paused, so we need to modify the gotoMouse function to record where the snowflakes were. To do this we add the following variables to the class:</p>
<pre>
<code>private var thisX:Number = 0;
private var thisY:Number = 0;</code>
</pre>
<p>We then modify the gotoMouse function:</p>
<pre>
<code>public function gotoMouse(xPos:Number, yPos:Number):void{
     this.removeEventListener(Event.ENTER_FRAME, everyFrame);
     thisX = this.x;
     thisY = this.y;
     Tweener.addTween(this, {x:xPos, y:yPos, time:0.5, transition:"easeOutSine"});
}</code>
</pre>
<p>Then we modify the restoreFlakes function to move the snowflakes back:</p>
<pre>
<code>public function restoreFlakes():void{
     Tweener.addTween(this, {x:thisX, y:thisY, time:0.5, transition:"easeOutSine"});
}</code>
</pre>
<p><strong>15.</strong> The third task &#8212; make them start moving. Well, just add the listener back in and the function becomes</p>
<pre>
<code>public function restoreFlakes():void{
     Tweener.addTween(this, {x:thisX, y:thisY, time:0.5, transition:"easeOutSine"});
     this.addEventListener(Event.ENTER_FRAME, everyFrame);
}</code>
</pre>
<p>Now we&#8217;re done! The revised SnowFlake class becomes this:</p>
<pre>
<code>package {

     import flash.display.MovieClip;
     import flash.events.*;
     import flash.filters.BlurFilter;
     import caurina.transitions.Tweener;

     public class SnowFlake extends MovieClip{

          private var speedMultiplier:int = 5;
          private var speedVariMultiplier:int = 10;

          private var speed:uint = Math.random()*speedMultiplier;
          private var speedVariation = Math.random()*speedVariMultiplier+1;

          private var viewWidth:int = 450;
          private var viewHeight:int = 450;

          private var thisX:Number = 0;
          private var thisY:Number = 0;

          private var drift:int;

          function SnowFlake(){
               setSpeed(speed);
               readyFlake();
               moveMe();
          }

          private function setSpeed(n:uint):void{
               this.speed = (n * speedVariation)+1;
          }

          private function readyFlake():void{
               getDrift();
               this.y = Math.random()*viewHeight*-1;
               this.x = Math.random()*viewWidth;

               var bf:BlurFilter = new BlurFilter(drift*2,speed/2,2);
               this.filters = [bf];

               if(speed/2 &lt; speedVariation){
                    this.scaleX = this.scaleY = .5;
               }

          }

          private function getDrift():void{
               drift = Math.random()*3;
               var driftDirection:int = Math.random()*10;
               if(driftDirection &lt; 5){
                    drift *= -1;
               }

          }

          private function moveMe():void{
               this.addEventListener(Event.ENTER_FRAME,everyFrame);
          }

          private function everyFrame(e:Event):void{
               this.y += speed;
               this.x += drift;
               if(this.y &gt; viewHeight || this.x &lt; 0 || this.x &gt; viewWidth){
                    readyFlake();
               }

          }

          public function gotoMouse(xPos:Number, yPos:Number):void{
               this.removeEventListener(Event.ENTER_FRAME, everyFrame);
               thisX = this.x;
               thisY = this.y;
               Tweener.addTween(this, {x:xPos, y:yPos, time:0.5, transition:"easeOutSine"});
          }

          public function restoreFlakes():void{
               Tweener.addTween(this, {x:thisX, y:thisY, time:0.5, transition:"easeOutSine"});
               this.addEventListener(Event.ENTER_FRAME, everyFrame);
          }

     }

}
</code>
</pre>
<p>The code on the main timeline becomes this:</p>
<pre>
<code>var flakeArray:Array = new Array();
var isSnowing:Boolean = true;

function createFlakes():void{
     var sFlake:SnowFlake = new SnowFlake();
     addChildAt(sFlake,0);
     flakeArray.push(sFlake);
}

var numFlakes:int = 1000;

for(var i:int;i
     createFlakes();
}

btnClick.addEventListener(MouseEvent.CLICK, toggleFlakes);

function toggleFlakes(e:Event):void {
     if (isSnowing) {
          stopFlakes();
          isSnowing = false;
     } else {
          startFlakes();
          isSnowing = true;
     }
}

function stopFlakes():void {
     trace("stopFlakes clicked");
     for (var i:int; i<numFlakes; i++) {
          flakeArray[i].gotoMouse(mouseX,mouseY);
     }
}

function startFlakes():void {
     trace("startFlakes clicked");
     for (var i:int; i<numFlakes; i++) {
          flakeArray[i].restoreFlakes();
     }
}</code>
</pre>
<p>And you&#8217;re good to go! Here&#8217;s what it should look like (click on it in order to contract/expand the snowflakes):</p>

<object	type="application/x-shockwave-flash"
			data="http://www.thecosmonaut.com/wp-content/uploads/2008/07/snowFlake.swf"
			width="450"
			height="450">
	<param name="movie" value="http://www.thecosmonaut.com/wp-content/uploads/2008/07/snowFlake.swf" />
</object>
<p>And you can download the source files here:<br />
<a href="http://www.thecosmonaut.com/wp-content/uploads/2008/07/snowflake.zip">snowflake.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/07/31/snowflake-modification-tutorial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Now Indexing Flash - What&#8217;s New?</title>
		<link>http://www.thecosmonaut.com/2008/07/08/google-now-indexing-flash-whats-new/</link>
		<comments>http://www.thecosmonaut.com/2008/07/08/google-now-indexing-flash-whats-new/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 19:08:20 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Flash Studio]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[search engine optimization]]></category>

		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.thecosmonaut.com/?p=30</guid>
		<description><![CDATA[I&#8217;ve had many clients contact me about the recent announcement that Google is now indexing Flash (you can see Google&#8217;s announcement on its blog, see Google&#8217;s Webmaster Blog announcement, and Adobe&#8217;s official announcement). The overriding question is this: What does this mean for my Flash-based site?
The short answer is: Not much. While it&#8217;s fantastic that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had many clients contact me about the recent announcement that Google is now indexing Flash (you can see <a href="http://googleblog.blogspot.com/2008/06/google-learns-to-crawl-flash.html" target="_blank">Google&#8217;s announcement on its blog</a>, see <a href="http://googlewebmastercentral.blogspot.com/2008/06/improved-flash-indexing.html" target="_blank">Google&#8217;s Webmaster Blog announcement</a>, and <a href="http://www.adobe.com/aboutadobe/pressroom/pressreleases/200806/070108AdobeRichMediaSearch.html" target="_blank">Adobe&#8217;s official announcement</a>). The overriding question is this: What does this mean for my Flash-based site?</p>
<p>The short answer is: Not much. While it&#8217;s fantastic that Google is now able to read the text on Flash sites now, they face significant challenges in making sense of the text that they read. The reason is that Flash technology is much different from HTML pages in a couple of key areas:</p>
<ul>
<li><strong>Markup</strong>: HTML has tags which mark bits of text and code on the site. Google uses a variety of these tags in order to make sense of the page (what&#8217;s a link, what&#8217;s a title, what&#8217;s an important bit of text). Flash has no such markup &#8212; the code you use to register a &#8220;click&#8221; can vary widely from programmer to programmer. While it&#8217;s true that this code is eventually compiled into a movie that the Flash Player plays, there are still significant challenges in being able to interpret the text that lies within a Flash movie.</li>
<li><strong>Standardization</strong>: Flash code varies dramatically from developer to developer. For example, Flash designates certain movie clips as &#8220;buttons&#8221; but many developers (including myself) never actually use technical &#8220;buttons&#8221; because other movie clips offer much more flexible ways of animating and handling user interaction. As a result, code and the structural elements that make up a Flash site vary widely. In contrast, HTML and the manner in which pages are displayed is very standardized &#8212; there&#8217;s only one way to indicate that you&#8217;ve got a link. Even if you use a dynamic language like PHP, the PHP will eventually spit out HTML that is widely standardized. Granted, AJAX and use of JavaScript can yield less standardized results, but for most HTML sites, the code is much more standardized than Flash. The end result is that HTML offers Google a much more standard framework for interpreting the meaning of pages than Flash does.</li>
</ul>
<p>I&#8217;m sure that there are numerous other factors that go into it as well. As Google themselves point out, there are additional things which present problems for interpreting Flash content:</p>
<ul>
<li><strong>Images (and video):</strong> Google points out that they are not able to index images that feature text or any video that features text. Nor do they mention way to tag images and/or video in order to make it even partially visible (like you could with the &#8220;alt&#8221; attribute in HTML).</li>
<li><strong>Potential problems with javascript:</strong> Google does not execute some types of JavaScript and therefore won&#8217;t be able to read some Flash files which are embedded via JavaScript. Since pretty much every developer worth his/her salt uses JavaScript to embed their Flash files, this could be a problem for sites.</li>
<li><strong>Externally-loaded content:</strong> Any content that is loaded by Flash (via XML or an additional SWF) will be considered a separate page. Depending on how your site is structured, this could present significant interpretation problems for Google.</li>
</ul>
<p>The reality of the situation is that since Google is now indexing Flash sites, the content it gets back could be even more confusing for Google and could adversely affect your search engine ranking (see<a href="http://www.johnon.com/580/seo-4-flash-websites.html" target="_blank"> John Andrews&#8217; blog entry</a> on why you might want to block Flash from search engines).</p>
<p>In my opinion, all this boils down to the following strategy: watch and wait. No doubt standards for search engine optimization inside Flash will begin to emerge as Flash developers start experimenting with code and SEO, as Google continues to tweak algorithms on their end, and as Adobe keeps working on its Searchable SWF API. Until solid standards start emerging, Flash should still be treated as a system which requires additional work and solid strategies in order to be properly optimized for search engines.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/07/08/google-now-indexing-flash-whats-new/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Experiment: Drip / Splatter Effect</title>
		<link>http://www.thecosmonaut.com/2008/06/15/drip-test/</link>
		<comments>http://www.thecosmonaut.com/2008/06/15/drip-test/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 03:46:32 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Flash Studio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[drip effect]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[paint splatter effect]]></category>

		<guid isPermaLink="false">http://s40441.gridserver.com/?p=27</guid>
		<description><![CDATA[AS3 Experiment Creating a Paint Drip / Splatter Effect.]]></description>
			<content:encoded><![CDATA[<p>This is a simple AS3 experiment creating a drip splatter effect which reveals text on a page.</p>
<div style="float:left; margin-right:20px; margin-top:15px;"><a href="http://s40441.gridserver.com/wp-content/uploads/2008/06/drips/" target="_blank"><img class="alignnone size-medium wp-image-28 aligncenter" title="Drips" src="http://s40441.gridserver.com/wp-content/uploads/2008/06/drips-300x177.jpg" alt="Click to view drip test" width="300" height="177" /></a></div>
<p>The idea here is to have mouse movement which creates drips or paint splatters which then reveals text on the page. The challenge is that if you&#8217;re dropping bitmaps onto the stage with each mouse movement, the SWF very quickly becomes overfull of bitmaps and your CPU will slow to a crawl. So I used the Flash bitmapData.draw method to basically take a &#8220;snapshot&#8221; of the drip layer after 10 bitmaps have been added and then toss the bitmaps after the snapshot has been taken. That way the flash doesn&#8217;t have to keep track of a huge number of bitmaps and the SWF takes it very easy on the CPU.</p>
<p>You can download the source files <a href="http://s40441.gridserver.com/wp-content/uploads/2008/06/drips/dripTest.zip">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/06/15/drip-test/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dog Whisperer: Breed Selector Mini-App</title>
		<link>http://www.thecosmonaut.com/2008/06/15/dog-whisperer-breed-selector-mini-app/</link>
		<comments>http://www.thecosmonaut.com/2008/06/15/dog-whisperer-breed-selector-mini-app/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 00:28:54 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS2]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://s40441.gridserver.com/?p=26</guid>
		<description><![CDATA[Viral Application]]></description>
			<content:encoded><![CDATA[<p>CLIENT: National Geographic<br />
PROJECT: Viral Application</p>
<p>My friends at <a href="http://www.k2usa.com">K2</a> brought me a very interesting project: National Geographic needed a viral application for the Dog Whisperer site. They wanted a tool that would allow users to rate a number off different criteria they prefer or dislike in dogs and then have the tool pick the top three dogs the user would like.</p>
<p>I designed the application to be very clean and easy-to-use with only a few images intended to showcase happy people and their dogs. The tool itself allows users to rate 18 criteria on a scale of 1 to 6, then takes all those responses, and runs it through a custom algorithm that then yields the top three results based on their preferences.</p>
<p>Fun note: The chocolate lab on the first page is my dog, Jack <img src='http://www.thecosmonaut.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div style="float:none; margin-right:20px; margin-left:100px;">
<object	type="application/x-shockwave-flash"
			data="http://s40441.gridserver.com/wp-content/uploads/2008/06/breedSelector/breedSelector.swf"
			width="532"
			height="440">
	<param name="movie" value="http://s40441.gridserver.com/wp-content/uploads/2008/06/breedSelector/breedSelector.swf" />
	<param name="wmode" value="transparent" />
</object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/06/15/dog-whisperer-breed-selector-mini-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Roxy: Follow Your Heart Website</title>
		<link>http://www.thecosmonaut.com/2008/06/15/roxy-follow-your-heart-website/</link>
		<comments>http://www.thecosmonaut.com/2008/06/15/roxy-follow-your-heart-website/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 00:21:27 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS2]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://s40441.gridserver.com/?p=25</guid>
		<description><![CDATA[Design &#38; Flash Programming for a YouTube-Compatible Website]]></description>
			<content:encoded><![CDATA[<p>CLIENT: Roxy<br />
PROJECT: Design &amp; Flash Programming for a YouTube-Compatible Website<br />
<a href="http://followyourheart.roxy.com" target="_blank">followyourheart.roxy.com</a></p>
<p>For Roxy&#8217;s new summer campaign, they wanted a fun website that captured the Roxy brand identity, encouraged young women to follow their dreams, and gave site visitors the ability to submit videos in order to win a grant in order to go after their dreams. The design was easy: they already had a strongly-established identity for the campaign, so I simply explored ways to leverage their existing assets to create a very fun, active environment.</p>
<p>One thing I wanted to do was to create a sense of depth and seamless transitions between the site sections while keeping enough visual cues so that users knew when they had left one section and entered another. I did this by setting up a number of elements in the background (the clouds, the swirls, etc.) that are consistent from each page but shift in space and change color.</p>
<p>Technically, the site presented an interesting challenge. Roxy did not want to host the videos on their servers, so we needed to have a Flash site that could interact with YouTube&#8217;s API and pull videos from their servers onto the FYH site. I figured out the Flash side and then partnered with the excellent developers at Webtrix to create the CMS which gives Roxy a simple way to add, edit, and delete videos.</p>
<p>Incidentally, I was integrating the site using the YouTube ActionScript 2.0 Player API which at the time was only a couple weeks old. As a result, I had everything working fine except for unloading a previously-loaded video. I was banging my head against the wall for hours until I finally discovered an  undocumented (at the time) function &#8212; destroy. So for all you people integrating YouTube into your Flash site, remember that destroy is your friend <img src='http://www.thecosmonaut.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div style="margin-top:20px;">
<object	type="application/x-shockwave-flash"
			data="http://s40441.gridserver.com/wp-content/swf/videoPlayer-692x411.swf?videoSrc=http://s40441.gridserver.com/wp-content/uploads/2008/06/roxy/roxy-692x411.flv"
			width="692"
			height="460">
	<param name="movie" value="http://s40441.gridserver.com/wp-content/swf/videoPlayer-692x411.swf?videoSrc=http://s40441.gridserver.com/wp-content/uploads/2008/06/roxy/roxy-692x411.flv" />
</object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/06/15/roxy-follow-your-heart-website/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Battle of the Bands Website</title>
		<link>http://www.thecosmonaut.com/2008/06/15/battle-of-the-bands-website/</link>
		<comments>http://www.thecosmonaut.com/2008/06/15/battle-of-the-bands-website/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 00:01:24 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS2]]></category>

		<category><![CDATA[dynamic flash]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://s40441.gridserver.com/?p=24</guid>
		<description><![CDATA[Multilingual, Dynamically-Driven Web Site]]></description>
			<content:encoded><![CDATA[<p>CLIENT: THQ<br />
PROJECT: Multilingual, Dynamically-Driven Web Site<br />
<a href="http://www.battleofthebandsgame.com" target="_blank">www.battleofthebandsgame.com</a></p>
<p>Like all of THQ&#8217;s projects, they needed a site that was easy-to-update and could support multiple languages. <a href="http://www.belaydevelopment.com" target="_blank">Belay Development</a> did the design and I built the site, once again driving all the site content via easy-to-update XML files. Screenshots, buddy icons, avatars, videos &#8212; everything could be edited, modified, and translated according to all the different countries&#8217; needs.</p>
<div style="margin-top:20px;">
<object	type="application/x-shockwave-flash"
			data="http://s40441.gridserver.com/wp-content/swf/videoPlayer-692x480.swf?videoSrc=http://s40441.gridserver.com/wp-content/uploads/2008/06/bob/bob-692x480.flv"
			width="692"
			height="530">
	<param name="movie" value="http://s40441.gridserver.com/wp-content/swf/videoPlayer-692x480.swf?videoSrc=http://s40441.gridserver.com/wp-content/uploads/2008/06/bob/bob-692x480.flv" />
</object></div>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/06/15/battle-of-the-bands-website/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Company of Heroes: Opposing Fronts Flash Website</title>
		<link>http://www.thecosmonaut.com/2008/06/15/company-of-heroes-opposing-fronts-flash-website-development/</link>
		<comments>http://www.thecosmonaut.com/2008/06/15/company-of-heroes-opposing-fronts-flash-website-development/#comments</comments>
		<pubDate>Sun, 15 Jun 2008 23:55:52 +0000</pubDate>
		<dc:creator>Eric Oliver</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS2]]></category>

		<category><![CDATA[dynamic flash]]></category>

		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://s40441.gridserver.com/?p=23</guid>
		<description><![CDATA[Multilingual, Dynamically-Driven Flash Site]]></description>
			<content:encoded><![CDATA[<p>CLIENT: THQ<br />
PROJECT: Multilingual, Dynamically-Driven Flash Site<br />
<a href="http://www.companyofheroesgame.com/main.php" target="_blank">www.companyofheroesgame.com</a></p>
<div class="wp-caption alignleft" style="width: 310px"><a href="http://www.companyofheroesgame.com/main.php" target="_blank"><img title="Company of Heroes: Opposing Fronts" src="http://www.thecosmonaut.com/wp-content/uploads/2008/09/CoH.jpg" alt="Company of Heroes Home Page" width="300" height="196" /></a><p class="wp-caption-text">Company of Heroes Home Page</p></div>
<p>For the latest in THQ&#8217;s Company of Heroes franchise, we wanted to capture the World War II feel while still supporting THQ&#8217;s need for multilingual, update-on-the-fly sites. <a href="http://www.belaydevelopment.com" target="_blank">Belay Development</a> handled the design while I built the site so that all the content on the site can be quickly and easily updated through XML files.</p>
<p>I also got a chance to do some fun behind-the-scenes Flash stuff that the average user would not notice: For underage visitors the Flash creates  site cookie which blocks them from entering the site. In the screenshots section, THQ has a standard thumbnail size that they use across all their properties. However, this section was not designed to use this standard size, so I needed a way to load the standard-sized image and shrink it to the new size. That sounds easy enough, but this site needed to be Flash 8 AS2-compatible, which means that when you resize dynamically-loaded images, the images look jagged and artifact-ridden. I did a modification of <a href="http://www.kaourantin.net/2005/12/dynamically-loading-bitmaps-with.html" target="_blank">Kaourantin&#8217;s loadBitmapSmoothed</a> function and so now all the images in the gallery look smooth as silk and THQ doesn&#8217;t need to do any photo editing.</p>
<p>Site audio is always a challenge &#8212; playing music outright can get old very quickly. I wanted something which captured the ambience without being overbearing. I loved the sound of artillery going off in the background &#8212; it immersed me in the &#8220;Band of Brothers&#8221; type of world that CoH captured so well. However, the human ear picks up on patterns very quickly. So I built a function that randomly selects one of a couple artillery sounds and plays them at random times. The end result is a very realistic-feeling, ambient sound track which isn&#8217;t overbearing. Personally, I like to just sit there and listen to the background sound &#8212; I find it kind of soothing, like thunder in the distance. I hope that doesn&#8217;t make you think I&#8217;m too twisted&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thecosmonaut.com/2008/06/15/company-of-heroes-opposing-fronts-flash-website-development/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
