<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://thelab.thoughtlab.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Thoughtlab Blog</title><link>http://thelab.thoughtlab.com/blogs/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Geek Scooter Project</title><link>http://thelab.thoughtlab.com/blogs/productdev/archive/2008/05/05/geek-scooter-project.aspx</link><pubDate>Mon, 05 May 2008 21:49:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:33</guid><dc:creator>Jared Bouck</dc:creator><slash:comments>72</slash:comments><description>&lt;div align="center"&gt;
&lt;div align="center"&gt;&lt;img height="533" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser12.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;A year ago we had the opportunity to produce a promotional product for one of our clients using a new vino scooter and some geek know-how. The end result was a rolling system capable of long distance war driving, GPS navigation, Skype calls on the road as well as recording your favorite TV program so you don’t miss &lt;i&gt;Lost&lt;/i&gt;&amp;nbsp;because you are&amp;nbsp;lost. This is just an overview of the project.&amp;nbsp; It covers a lot, but&amp;nbsp;we will be producing a full how to article so check back soon!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="262" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser9.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Bench testing the computer: The ITX form factor is really a great platform to work with. It&amp;#39;s small, compact, feature- filled, and is a low power consumer. Due to the low wattage consumption, we were able to pack a 1 GHZ system into this scooter easily without worrying about the heat output from the VIA CPU. &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="300" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser8.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Here we are doing some custom acrylic work to create the “Brain Frame” to hold all the components of this system. Working with acrylic is very easy if you have the right tools for the job. Make sure your tools and blades are specifically for plastics or acrylic so you don’t have to worry about cracking the material.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="385" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser11.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;The assembled Brain Frame. Using this vertical form factor we were able to put a ton of equipment into a small space very easily.&amp;nbsp; Building a lot of servers and systems in house, we always have a plethora of screws and mounting posts left over. Using a 1/8th drill bit, we marked and drilled holes for all the parts and simply screwed in a &lt;a class="" href="http://www.logicsupply.com/"&gt;motherboard&lt;/a&gt; post in the acrylic. We were able to get the motherboard, Power supply, power distribution, access point, FM tuner, WIFI Card, blue tooth, USB hub, USB Camera, Electric Guitar interface, GPS, LCD Readout and PVR TV tuner all in this small space without any trouble.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="463" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser10.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;The first major step in assembling this project is the tear down. We latterly striped this scooter down to the frame. Almost every major body part had some custom work done to it to facilitate all the gadgets in this project. &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="323" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser1.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Here at the rear of the bike you can see we have: extended wireless access point antennas,&amp;nbsp;our jack for our FM antennas, our GPS and 20DB Gain War driving antenna. We choose the Garmin GPS unit primarily for the sync time. It’s the fastest USB receiver we could find when it comes to satellite acquisition.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="300" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser7.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Jared and Kevin burning the late night oil. We had 2 days of totally construction time in between our normal daily load.&amp;nbsp; Admittedly, it was a very fun and rewarding project for the extra time.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="413" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser4.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Here we have the USB Camera pointing out of the front of the scooter where the horn normally would be. We simply changed the angle of the horns mounting arm to give us ample room for our USB Camera. &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="300" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser6.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;&lt;b&gt;The main install&lt;/b&gt;: With the modularity of the brain frame, we were able to just drop this into the scooter and start connecting power and all the accessories and antennas.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="321" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser5.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;&lt;b&gt;The power on test&lt;/b&gt;: This is always the point where we get nervous. Yah it worked on the bench, but will it work now that it’s installed? Of course we didn’t have anything to worry about but that doesn’t mean we didn’t hold our breath anyway. Oh, and the bios on this motherboard has an unusual pause on post. So take a deep breath.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="300" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser3.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;So 1:00AM we finished the project. The furry of drilling, cutting, soldering, heat shrinking and rummaging through a mountain of components more or less left the project area a wreck. &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;img height="300" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterTeaser2.jpg" width="400" alt="" /&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;So once we got the project finished, we took those final celebratory glamour shots.&amp;nbsp;&amp;nbsp;Pretty sexy right?&amp;nbsp; We had a lot of fun with this project. This is just a teaser of the full project though. So are you thinking of doing something like this on your own? You’re in luck. We will be posting regular updates and providing a full how to article right here at the ThoughtLab blog so you can make your very own geek scooter! &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;a href="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterFlyer.jpg"&gt;&lt;img height="309" src="http://thelab.thoughtlab.com/newimages/scooterteaser/ScooterFlyer-Small.jpg" width="400" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:16px;" align="left"&gt;
&lt;p&gt;Here is a flyer with all the details of this project. Just click the above image to view it larger.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=33" width="1" height="1"&gt;</description></item><item><title>Foiled Again!</title><link>http://thelab.thoughtlab.com/blogs/news/archive/2008/05/05/foiled-again.aspx</link><pubDate>Mon, 05 May 2008 20:51:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:32</guid><dc:creator>Jared Bouck</dc:creator><slash:comments>4</slash:comments><description>&lt;p class="MsoNormal" style="margin:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Deborah went out of town for the weekend on a nice little trip. Some of the team decided to stay a little late on Friday to leave her a nice welcome home present.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://thelab.thoughtlab.com/newimages/foil1.jpg" title="foil desk" style="width:400px;height:300px;" alt="foil desk" align="middle" height="300" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://thelab.thoughtlab.com/newimages/foil3.jpg" title="foil desk" style="width:400px;height:300px;" alt="foil desk" align="middle" height="300" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://thelab.thoughtlab.com/newimages/foil2.jpg" title="foil desk" style="width:400px;height:300px;" alt="foil desk" align="middle" height="300" width="400" /&gt;&lt;/p&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=32" width="1" height="1"&gt;</description><category domain="http://thelab.thoughtlab.com/blogs/news/archive/tags/Foil+Desk/default.aspx">Foil Desk</category></item><item><title>Top 10 Reasons Websites Fail</title><link>http://thelab.thoughtlab.com/blogs/top_ten_lists/archive/2008/05/02/top-10-reasons-websites-fail.aspx</link><pubDate>Fri, 02 May 2008 23:20:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:31</guid><dc:creator>Deborah</dc:creator><slash:comments>0</slash:comments><description>&lt;div style="FONT-SIZE:12px;FONT-FAMILY:Geneva, Arial, Helvetica, sans-serif;"&gt;
&lt;ol&gt;
&lt;li&gt;Don&amp;#39;t have a Website.&lt;/li&gt;
&lt;li&gt;Goals ... what goals?&lt;/li&gt;
&lt;li&gt;False hope: &amp;quot;If you build it, they will come.&amp;quot;&lt;br /&gt;(Insufficient marketing.)&lt;/li&gt;
&lt;li&gt;A programmer is not a designer and a designer &lt;br /&gt;is not a programmer.&lt;/li&gt;
&lt;li&gt;It is too confusing to use.&lt;/li&gt;
&lt;li&gt;Out of date.&lt;/li&gt;
&lt;li&gt;Even after they get there, users can&amp;#39;t figure out what it is you do.&lt;/li&gt;
&lt;li&gt;Are you sure your nephew really knows what he is doing?&lt;/li&gt;
&lt;li&gt;Slow load = long wait.&lt;/li&gt;
&lt;li&gt;Hidden security flaws and unknown liabilities.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=31" width="1" height="1"&gt;</description></item><item><title>Top 10 Ways to Improve Search Engine Optimization</title><link>http://thelab.thoughtlab.com/blogs/top_ten_lists/archive/2008/05/02/top-10-ways-to-improve-your-website-s-search-engine-optimization.aspx</link><pubDate>Fri, 02 May 2008 22:17:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:30</guid><dc:creator>Deborah</dc:creator><slash:comments>0</slash:comments><description>&lt;div style="FONT-SIZE:12px;FONT-FAMILY:Geneva, Arial, Helvetica, sans-serif;"&gt;
&lt;ol&gt;
&lt;li&gt;Provide unique, interesting content&lt;/li&gt;
&lt;li&gt;Frequently update your website&amp;#39;s content&lt;/li&gt;
&lt;li&gt;Get many quality websites linking to your website (back-linking)&lt;/li&gt;
&lt;li&gt;Use links within the content of your website to link to other parts of your website (cross-linking)&lt;/li&gt;
&lt;li&gt;Have a site map&lt;/li&gt;
&lt;li&gt;Use readable, search engine friendly website addresses (URLs)&lt;/li&gt;
&lt;li&gt;Use title and meta tags appropriately&lt;/li&gt;
&lt;li&gt;Promote your website on social networking websites&lt;/li&gt;
&lt;li&gt;Avoid trying to cheat--search engines will penalize you&lt;/li&gt;
&lt;li&gt;Actively analyze and optimize your website, but be patient...it can take up to two months to start seeing the results or your efforts.&lt;/li&gt;&lt;/ol&gt;If all else fails... Build a shrine to Google in your office and send them a picture of it.&lt;br /&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=30" width="1" height="1"&gt;</description></item><item><title>Flash: Broadcasters &amp; Listeners</title><link>http://thelab.thoughtlab.com/blogs/flash_tutorials/archive/2008/05/02/flash-broadcasters-amp-listeners.aspx</link><pubDate>Fri, 02 May 2008 20:48:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:29</guid><dc:creator>Deborah</dc:creator><slash:comments>0</slash:comments><description>&lt;h5&gt;Write-Up by Danny Staten&lt;/h5&gt;
&lt;h3&gt;Introduction:&lt;/h3&gt;
&lt;p&gt;Broadcasters and Listeners are one of the most powerful tools for dealing with asynchronous events in flash. Any time you have coded an onPress or onEnterFrame function, you have been listening to a broadcast event. Their true power comes when you start using them to create custom broadcasting and listening. By the end of this article, we will be discussing advanced topics like how to implement your own broadcasting and listening.&lt;/p&gt;
&lt;h3&gt;The Basics:&lt;/h3&gt;
&lt;p&gt;So what is a broadcaster, and what is a listener? Think of the broadcaster like somebody with a radio transmitter. They can speak into a microphone, and anybody tuned into their frequency can hear what they say and react as they choose. In reality, this is a simplified analogy that doesn’t accurately describe the actual implementation used for broadcasting. It is however sufficient to describe them for our purposes. So in order for the broadcaster to work, it needs to have subscribed listeners.&lt;/p&gt;

&lt;p&gt;You might be inclined to ask why broadcasters are so important. They are very important in flash due to the order code executes. Code written in a frame starts on that frame, but a command started on a given frame often finishes many frames later. A simple example of this is the following tween:&lt;/p&gt;

&lt;p&gt;var myTween=new mx.transitions.Tween(clip_mc,”_alpha”,mx.transitions.easing.Regular.easeOut,0,100,12,false);&lt;br /&gt;trace(“object faded in”);&lt;/p&gt;

&lt;p&gt;At initial glance, one might think that the trace saying that the object’s fade in will show up once the tween is finished. It should be obvious to any who have programmed a tween that it doesn’t work that way. All the code written in a given frame begins execution during that frame, but this tween finishes 12 frames after the code that fired it actually executed. If you want that trace to fire when the tween is done you have to use a listener.&lt;/p&gt;

&lt;p&gt;var myTween=new mx.transitions.Tween(clip_mc,”_alpha”,mx.transitions.easing.Regular.easeOut,0,100,12,false);&lt;br /&gt;myTween.onMotionFinished=function()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; trace(“object faded in”);&lt;br /&gt;}&lt;/p&gt;

&lt;p&gt;This example is not as clear an example of a listener because it takes advantage of the fact that the tween object will hear its own broadcast events. The following example does the same thing, but is clearer for instruction:&lt;/p&gt;

&lt;p&gt;var myTween=new mx.transitions.Tween(clip_mc,”_alpha”,mx.transitions.easing.Regular.easeOut,0,100,12,false);&lt;br /&gt;var listener_obj:Object=new Object();&lt;br /&gt;myTween.addListener(listener_obj);&lt;br /&gt;listener_obj.onMotionFinished=function()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; trace(“object faded in”);&lt;br /&gt;}&lt;/p&gt;

&lt;p&gt;Here we see the broadcaster-listener behavior more clearly demonstrated. I create an object that I will then subscribe to the myTween object. That means that I can then set that object up to react to any message sent by the myTween object. In this case it reacts to when the tween broadcasts “onMotionFinished”. It is important to note that a subscriber listens to just its object’s broadcasting. For example if you have two tween objects myTween and myTween2, you can consider it as if they broadcast on separate frequencies. You can have one listener listening to multiple broadcasts simultaneously if you subscribe it to both.&lt;/p&gt;

&lt;p&gt;Another valid item to listen to for this tween is onMotionChanged&lt;br /&gt;listener_obj.onMotionChanged=function()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trace(“fade in progress”);&lt;br /&gt;}&lt;/p&gt;

&lt;p&gt;Not all objects broadcast messages. The tween object is implemented by Macromedia and happens to be set up to broadcast several events. The two events, onMotionFinished and onMotionChanged turn out to be the most useful.&lt;/p&gt;
&lt;h3&gt;Examples:&lt;/h3&gt;
&lt;p&gt;Here I will show some interesting concepts that can be used with broadcasters and listeners. The examples will generally increase in complexity and usefulness.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;One tween for multiple objects.&lt;/b&gt;&lt;br /&gt;It is quite common to want to do something like move a clip 200 in x, 100 in y for example. At first glance it appears that you need two tweens to do this, one for the x and one for the y. In reality, it is very easy to set up one tween that drives any number of related attributes for any number of movie clips. Consider the following example:&lt;/p&gt;

&lt;p&gt;Var tween_obj:Object = new Object();&lt;br /&gt;tween_obj.cur=0;&lt;br /&gt;tween_obj.move_x=200;&lt;br /&gt;tween_obj.move_y=100;&lt;br /&gt;tween_obj.startX=myMovieClip_mc._x;&lt;br /&gt;tween_obj.startY=myMovieClip_mc._y;&lt;br /&gt;tween_obj.target_mc=myMovieClip_mc;&lt;br /&gt;//tween_obj is going to be the listener I use&lt;br /&gt;Var myTween = new mx.transitions.Tween(tween_obj,”cur”,mx.transitions.easing.Regular.easeOut,0,100,12,false);&lt;br /&gt;myTween.addListener(tween_obj);&lt;br /&gt;tween_obj.caller=myTween;&lt;br /&gt;tween_obj.onMotionChanged=function()&lt;br /&gt;{&lt;/p&gt;

&lt;p&gt;/*one trick to look out for is the scope inside these functions. When inside an event function for an object the ‘this’ keyword is actually the object. In this case this refers to tween_obj. */&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//note that the tween object’s cur variable is being changed by the tween&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var stepX:Number=this.cur/100 * this.move_x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var steyY:Number = this.cur/100* this.move_y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.target_mc._x=this.startX+stepX;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.target_mx._y=this.startY+stepY;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;tween_obj.onMotionFinished=function()&lt;br /&gt;{&lt;br /&gt;/*You should always clean your own memory up. Theoretically flash has garbage clean up, but true to the rule of thumb, garbage clean up is not to be relied on. */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete this.caller;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete this;&lt;br /&gt;} &lt;/p&gt;

&lt;p&gt;This particular example actually is considerably more code than just using two tweens, and it likely won’t provide any real performance benefits. However the concept allows you to do advanced tweening where your code ensures that all the needed motions are synchronized across as many objects as you can keep straight in your head.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Bending a Line:&lt;/b&gt;&lt;br /&gt;An example of using this concept in a more powerful way is to create a tween that bends a line. &lt;a href="http://65.127.208.173/downloadcontent/BroadCasterExample1.fla" class=""&gt;Click here to download the example fla file.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple example of something you couldn’t animate programmatically without using broadcasting and listening. If you were to now do a tween that actually drives both the curveX and curveY values you could get something where the line bends and stretches in any direction.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Snapping the Line Back:&lt;/b&gt;&lt;br /&gt;Now let’s say that you want to make it so that after the line bend is complete, it then snaps back to a straight line. &lt;a href="http://65.127.208.173/downloadcontent/BroadCasterExample2.fla" class=""&gt;The example fla file is available here&lt;/a&gt;. The only changes to the code are in the onMotionFinished function.&lt;/p&gt;

&lt;p&gt;An important thing to note is that the memory clean up for these animations is deferred to the second onMotionFinished event. It is also a good idea to attach any items you will want to delete to your listener object so you can make sure that you have a pointer that is in scope when you do your memory clean up. This is a better example of how you can use one tween to drive multiple parameters.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Making the Bending and Snapping Dynamic:&lt;/b&gt;&lt;br /&gt;So you are probably thinking, “that looks like a lot of work for something I could do with a timeline animation.” You have a point, but even with the examples you have seen so far there are powerful advantages to programmatic animation.&lt;/p&gt;

&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;This is mathematically very clean and precise.&lt;/li&gt;

&lt;li class="MsoNormal"&gt;This particular animation would likely be very challenging via the timeline and would require shape tweens and or lots of key frames. &lt;/li&gt;

&lt;li class="MsoNormal"&gt;Coded animations are much easier to reuse, and modify.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you take time to code them up properly, you can modify your animation in unlimited ways in seconds.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;One thing that you cannot do in pure timeline animation is make an animation that interacts with any user input. The following example will demonstrate something that you couldn’t possibly do without broadcasters and listeners. &lt;a href="http://65.127.208.173/downloadcontent/BroadCasterExample3.fla" class=""&gt;Download the source file here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are some nifty things to notice in this code. One is that you can overwrite your listener events at any time. Use this to turn off an object’s response to one event if you still want the object to catch other events. Also be aware of the trickiness with the &lt;i&gt;this&lt;/i&gt; keyword. Remember that it is always in reference to the variable space for the specific object whose function is being called. Many events can pass variables if your listener provides them as parameters, but I tend to move things into my function spaces by attaching them to my listening object. That way you can have whatever data you want available in an event, and not just what a broadcaster has set up to send as a parameter.&lt;/p&gt;

&lt;p&gt;This example is also an example of how mouse clicks can cause undesired effects if the user clicks while the snapping animation is running. You will notice that if you click, drag, let go, and then click really fast your line will be permanently bent. See my other article on disabling mouse clicks to find a pretty powerful solution to most problems of that nature. With slight modifications, that technique can prevent the glitches we can create here, but that is beyond the scope for this article.&lt;/p&gt;
&lt;h3&gt;Custom broadcasters:&lt;/h3&gt;
&lt;p&gt;Up to this point, we have really been using listeners and taking advantage of broadcasters that are already implemented. Think about the cool stuff that can be done with listeners and then think that we have only begun to harness one half of the sweetness that is broadcasters and listeners. If you really want to get so you can have fun with this idea, you will want to learn how to do your own broadcasting.&lt;/p&gt;

&lt;p&gt;The following are a few core principles to be aware of:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:45pt;text-indent:-0.25in;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;·&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;!--[endif]--&amp;gt;Almost anything more than a simple variable can be a listener.&lt;span&gt;&amp;nbsp; &lt;/span&gt;For example you can subscribe a movie clip to a broadcaster, but you shouldn’t subscribe a number. (I never have tried to make a number a listener, so I can’t say what the results will be, but it will likely destroy the number’s data or fail to respond to events or both.)&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:45pt;text-indent:-0.25in;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;!--[endif]--&amp;gt;You can subscribe any number of items to a broadcaster.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:45pt;text-indent:-0.25in;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;!--[endif]--&amp;gt;A listener can subscribe to any number of broadcasters simultaneously.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This can be nice, but you have to be careful.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:45pt;text-indent:-0.25in;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;!--[endif]--&amp;gt;Make sure to use broadcasting_obj.removeListener(listener_obj), where broadcasting is the name of whatever object you have broadcasting, and listener_obj is your own listener.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Do this when you no longer need a listener to respond to broadcast events.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Forgetting to remove a listener can cause challenging bugs when you have an old object’s listener events firing long after you are expecting them to.&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-left:45pt;text-indent:-0.25in;"&gt;&amp;lt;!--[if !supportLists]--&amp;gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;!--[endif]--&amp;gt;Not all objects can be set up as broadcasters, and simple variables should never be broadcasters.&lt;span&gt;&amp;nbsp; &lt;/span&gt;(I don’t think it is possible, but I also haven’t ever tried.)&lt;span&gt;&amp;nbsp; &lt;/span&gt;When you make something a broadcaster you are adding functions to the object.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I have yet to find any native objects that cannot be broadcasters (I have been able to make a movie clip a broadcaster or even _level0).&lt;span&gt;&amp;nbsp; &lt;/span&gt;However, instances of 3&lt;sup&gt;rd&lt;/sup&gt; party classes may not allow you to make them broadcasters.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The class describing the object either has to be dynamic (which allows its objects to have new variables and functions attached to it), or it has to already have the correct functions with the correct signatures set up in its code.&lt;/p&gt;
&lt;h3&gt;Why Use Broadcasters?&lt;/h3&gt;
&lt;p&gt;Okay so why would you want to do your own broadcasting? I have found them very valuable in the following applications.&lt;/p&gt;

&lt;ul style="margin-top:0in;"&gt;
&lt;li class="MsoNormal"&gt;&lt;b&gt;Site animation control&lt;/b&gt;: &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;My favorite application deals with large dynamic web sites or applications.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In this case, the time it takes to remove a dynamically generated page can vary greatly depending on the amount of content or the style of animation or both.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you have your code to remove a section broadcast an event such as “onRemoveFinished”, then you can easily wait until any section has removed before drawing the next section to be brought in.&lt;/li&gt;

&lt;li class="MsoNormal"&gt;&lt;b&gt;Advanced animation needs&lt;/b&gt;: Another really interesting application can be extended from the bending line examples.&lt;span&gt;&amp;nbsp; &lt;/span&gt;To see the bending line extended via custom broadcasting, check out the Martin Doors flash application, and pay attention to the light grey boxes.&lt;span&gt;&amp;nbsp; &lt;/span&gt;In this case, the code in question broadcasts when the bending line’s start and end points have changed.&lt;span&gt;&amp;nbsp; &lt;/span&gt;That allows the lines on the side of the boxes to listen to that and redraw to stay connected.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The result is an animation that has all the benefits of being dynamic, extremely flexible and configurable, while still being interesting and relatively complex.&lt;/li&gt;

&lt;li class="MsoNormal"&gt;&lt;b&gt;Custom class development&lt;/b&gt;: If you get involved in creating your own custom actionscript classes, you will find broadcasters are indispensable.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Imagine how useless the Tween would be without onMotionFinished or onMotionChanged events.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Sure it could probably do its basic animations, but there would be no means for code that uses a Tween object to know what is going on.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Broadcasters allow custom classes to send messages to your main code.&lt;span&gt;&amp;nbsp; &lt;/span&gt;There are very ugly and unhappy ways to try and do the same thing with your custom classes, but for practical intents and purposes, broadcasting makes things possible that cannot (or at least should not) be done in other ways.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;How To Use Broadcasters.&lt;/b&gt;&lt;br /&gt;To make something a broadcaster you simply make the following call:&lt;/p&gt;

&lt;p&gt;AsBroadcaster.initialize(myObj);&lt;/p&gt;

&lt;p&gt;Where myObj is whatever object you wish to make a broadcaster. Keep in mind that the broadcaster has to be visible to all listeners in order for them to subscribe to it. For management of events that happens across multiple sections of a web site, you will want something that is going to be around in all areas that will need to listen for your events.&lt;/p&gt;

&lt;p&gt;Say for example you have movie clips as follows:&lt;/p&gt;

&lt;p&gt;Contents_mc.sectionA_mc.lots_of_child_clips&lt;br /&gt;Contents_mc.sectionB_mc.lots_of_child_clips&lt;br /&gt;Contents_mc.sectionC_mc.lots_of_child_clips&lt;/p&gt;

&lt;p&gt;Suppose that you have animations that remove section A, and broadcast when that is done so code can draw either section B or C. It would make sense in this case to make Contents_mc your broadcaster.&lt;/p&gt;

&lt;p&gt;Once you have made something a broadcaster, it is very easy to use.&lt;/p&gt;

&lt;p&gt;AsBroadcaster.initialize(broadcaster_obj);&lt;br /&gt;Var listener_obj:Object=new Object();&lt;br /&gt;broadcaster_obj.addListener(listener_obj);&lt;/p&gt;

&lt;p&gt;listener_obj.onHello=function()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; trace(“hello event caught”);&lt;br /&gt;}&lt;br /&gt;broadcaster_obj.broadcastMessage(“onHello”);&lt;/p&gt;

&lt;p&gt;The example code above is so trivial it is not inherently useful, but it demonstrates how to create your own custom broadcasting.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Making Custom classes broadcasters&lt;/b&gt;&lt;br /&gt;For situations where you want to make your own custom class a broadcaster, there is one more thing to be aware of. The class must either be declared as follows:&lt;/p&gt;

&lt;p&gt;dynamic class className{…….}&lt;/p&gt;

&lt;p&gt;An object created from a dynamic class can have variables and values attached to it at run time. This can be very handy, but is not always the best idea. The other way to do it is to add the following member variables to your class:&lt;/p&gt;

&lt;p&gt;public var addListener:Function;&lt;br /&gt;public var removeListener:Function;&lt;br /&gt;public var broadcastMessage:Function;&lt;/p&gt;
&lt;h3&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;I hope this article proves useful for you. It brings me to tears to think about some of the truly painful and ugly ways I found to survive without taking full advantage of broadcasting and listening. If you are willing to spend the time to figure them out, and then start thinking about how you can use the tools they open up to you, you will be amazed at the doors they open up to your flash development.&lt;/p&gt;
&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=29" width="1" height="1"&gt;</description></item><item><title>Flash: Navigation Control</title><link>http://thelab.thoughtlab.com/blogs/flash_tutorials/archive/2008/05/02/flash-navigation-control.aspx</link><pubDate>Fri, 02 May 2008 18:08:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:28</guid><dc:creator>Deborah</dc:creator><slash:comments>0</slash:comments><description>&lt;h5&gt;Write-Up by Danny Staten&lt;/h5&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Mouse-mashing users can easily break many flash pages with their click-happy ways. The ability to properly react to inputs during animations has long been a frustrating problem for flash development&lt;/p&gt;

&lt;p&gt;The standard solution is to explicitly disable all clickable movie clips whose click events can mess up the animation, and then enable them when the animation finishes. This solution works, but has many limitations including:&lt;/p&gt;

&lt;ul&gt;
  
&lt;li&gt;For large lists of clips to disable (say a very large navigation), it has the potential to influence performance.&lt;/li&gt;
  
&lt;li&gt;For dynamically generated content, it can be very difficult to determine all the clickable items to disable/enable.&lt;/li&gt;
  
&lt;li&gt;For dynamically generated content, it can be very difficult to manage the state of all the clickable items for all cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An unobvious but very simply and elegant solution does exist. It can be used to disable all mouse clicks by region or for the entire flash stage. Generally I use it to disable clicks for the entire stage, but it can be done in other ways to disable specific regions.&lt;/p&gt;
&lt;h3&gt;The Basic Solution&lt;/h3&gt;
&lt;p&gt;The Solution can be thought of like a glass panel that you put on top of the page. It takes advantage of the fact that a movie clip with a fill drawn in clickable even if it has an alpha value of 1. I will call that clip the glass panel.&lt;/p&gt;

&lt;p&gt;The basic solution utilizes two globally accessible functions.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;disableNavigation():&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This function creates a movie clip to act as the glass panel. A simple implementation is to create it at the root with a hard coded depth of 1000. Obviously, that detail of the implementation is entirely flexible. I generally try to organize my clip creations so that they are organized inside a small group of clips. If you have 1000 clips right in your root level you are probably not organizing your clips effectively.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;enableNavigation():  &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This function basically just calls removeMovieClip on the glass panel.&lt;/p&gt;
&lt;h3&gt;Basic Solution&amp;#39;s Code&lt;/h3&gt;
&lt;p&gt;function disableNavigation()&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createEmptyMovieClip(“glassPanel_mc”,1000);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utilities.draw_box(glassPanel_mc,Number(0xFF0000),0,0,0,Stage.width,Stage.height);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*utilities.draw_box  takes the movie clip to draw to, the color, alpha, cornerX, cornerY, width, and  height as parameters.&amp;nbsp; For the disable  clip functionality you can either have the fill’s alpha at zero, or fill it and  then set the clip’s alpha to zero.&amp;nbsp;  Either one works.&amp;nbsp; I like to have  it actually fill red for debugging purposes.&amp;nbsp;  You can change the alpha to 25% and get a visual identifier of when your  navigation is disabled for testing. */&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.onPress=function()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*the empty  click function is important.&amp;nbsp; If you  don’t give this a press event function then it won’t intercept the click event  and other items that are lower in depth will still get clicked on.*/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.useHandCursor=false;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*This last  part is purely an aesthetic effect, but it makes the final touch to make it  cool.&amp;nbsp; This way the user is actually  triggering a click event when they do click, but they don’t know they are  because the mouse cursor doesn’t change at all.*/&lt;br /&gt;
}&lt;/p&gt;

&lt;p&gt;function enableNavigation()&lt;br /&gt;
  {&lt;br /&gt;
  removeMovieClip(glassPanel_mc);&lt;br /&gt;
  }&lt;/p&gt;

&lt;p&gt;This solution is very powerful, and can be modified to  disable specific regions of your stage very easily.&amp;nbsp; Any time you need to disable clicks you can  call disableNavigation and the mouse press events will not cause you any  grief.&amp;nbsp; To turn them off simply call  enableNavigation.&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;The More Robust Solution&lt;/h3&gt;
&lt;p&gt;The basic solution is nice and all, but it doesn’t quite  reach the power that I was looking for.&amp;nbsp;  I basically wanted to simulate event driven programming where multiple  events can all have input to when to disable and enable your navigation. &lt;/p&gt;

&lt;p&gt;Say for example, that I have a data call via flash remoting,  and an animation running.&amp;nbsp; I want to wait  until both of those have finished.&amp;nbsp; The  trick is that the data call is often faster than the animation, but there are  occasions where the remoting call can be slower than the animation.&amp;nbsp; We need a way for the glass panel to only  remove itself when both events are done.&amp;nbsp;  I wanted a means that could be extended to n asynchronous items as a  general case.&lt;/p&gt;

&lt;p&gt;Now suppose that every time you call disableNavigation, you  are also putting a marker on the glass panel.&amp;nbsp;  Every time you call enableNavigation you then remove one marker from the  panel.&amp;nbsp; If the panel has no markers on it  then enableNavigation removes the panel.&amp;nbsp;  You can have every event that needs to ensure the user clicking is  disabled to function properly put a marker on the panel.&amp;nbsp; Then when the event finishes it removes a  marker.&amp;nbsp; As long as every event has one  disableNavigation and one enableNavigation call, then a simple counter will  suffice.&lt;/p&gt;

&lt;p&gt;We can solve this problem quite elegantly by adding a few  lines of code to our functions.&amp;nbsp;  Basically you add a counter to the glass panel when it is created.&amp;nbsp; Every call to disableNavigation will  increment this counter, and every call to enableNavigation will decrement  it.&amp;nbsp; If the counter gets to zero in the  enableNavigation call then it is removed and navigation is active again.&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;Robust Solution’s  Code&lt;/h3&gt;
&lt;p&gt;function disableNavigation()&lt;br /&gt;
  {&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(glassPanel_mc==undefined)&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createEmptyMovieClip(“glassPanel_mc”,1000);&lt;br /&gt;
  utilities.draw_box(glassPanel_mc,Number(0xFF0000),0,0,Stage.width,stage.height);&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.holds_num=0;&lt;br /&gt;
  glassPanel_mc.onPress=function()&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
  glassPanel_mc.useHandCursor=false;&lt;br /&gt;
  }&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.holds_num++;&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
  }&lt;br /&gt;
  function enableNavigation()&lt;br /&gt;
  {&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.holds_num--;&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(glassPanel_mc.holds_num  &amp;lt;=0)&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; glassPanel_mc.removeMovieClip();&lt;br /&gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
  }&lt;/p&gt;
&lt;h3&gt;Important Note&lt;/h3&gt;
This solution does have some challenges too it, but its  simplicity in implementation means that it is usually what I go with rather  than implementing more complicated alternatives.&amp;nbsp; The challenge is that it is very easy to  accidentally lock your navigation.&amp;nbsp; It is  up to you as the developer to ensure that there is a corresponding enable for  every disable.&amp;nbsp; If you have too many  enable calls, then your navigation can unlock too early, and if you have too  few enable calls then your navigation will be permanently locked. Depending on  the complexity of the logic in your code, this may not be trivial.&amp;nbsp; In the first iteration of this solution, you  can call disableNavigation multiple times and one call to enableNavigation will  unlock the interface.&amp;nbsp; That is nice for a  lot of things but doesn’t solve more complex management issues.&amp;nbsp; This solution allows for more complex  management, but it also makes it very easy to accidentally lock your  navigation.&amp;nbsp; 
&lt;p&gt;Even more complicated versions are always a possibility, but  none that I have found have had enough benefits to justify the effort.&lt;/p&gt;

&lt;p&gt;Of course, if you want to take the time to identify segments  of code where you are absolutely certain the navigation should be enabled, you  can enforce that as well.&amp;nbsp; Simply wrap  removeMovieClip(glassPanel_mc) in a function such as masterUnlockNavigation()  to abstract the details of the implementation from the main code of the  program.&amp;nbsp; I have never had cause to do  that.&amp;nbsp; Generally speaking, if you manage  your glass panel properly you shouldn’t need to force it to enable. &lt;/p&gt;
&lt;h3&gt;Final Thoughts&lt;/h3&gt;
  I hope you have found this bit of information useful.&amp;nbsp; For the longest time, I was busting my tail  trying to manage individual clips enabled states to control user input.&amp;nbsp; One day as I was trying to solve why something  was clickable when I couldn’t see it, the synapses in the brain started firing  and my interface management frustrations were a thing of the past.&amp;nbsp; So if you have already got a better solution,  I would love to hear it.&amp;nbsp; Chances are  that if you are reading this article it is because you have been frustrated by  the same issue.&amp;nbsp; So I hope this prevents  a few headaches for you.
&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=28" width="1" height="1"&gt;</description></item><item><title>Recommended Graphic Artist System Spec</title><link>http://thelab.thoughtlab.com/blogs/recspec/archive/2008/05/02/recommended-graphic-artist-system-spec.aspx</link><pubDate>Fri, 02 May 2008 17:43:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:25</guid><dc:creator>Jared Bouck</dc:creator><slash:comments>0</slash:comments><description>&lt;div align="left"&gt;
&lt;p&gt;Graphic arts systems need lots of stuff to make those pretty pictures. Multiple monitor types can help for color checks and for viewing references while you work. Oodles of ram work nicely with a powerful CPU to run demanding programs like Photoshop, Illustrator, Painter, Quark, and others. Fast file reading and writing speed is also nice. No serious graphics machine is complete without a nice stylus for refined image work. Adding a mac sticker allow a designer to pretend they are on a Mac, but they are optional.&lt;/p&gt;&lt;/div&gt;
&lt;table class="" cellspacing="0" cellpadding="0" align="center"&gt;

&lt;tr&gt;
&lt;td class=""&gt;&lt;strong&gt;Component&lt;/strong&gt; &lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Component Description&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Vendor&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Qty&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Case&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811133021"&gt;Thermaltake Armor VA8003BWS&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Motherboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813131225"&gt;ASUS P5K-E LGA 775 Intel P35&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;139&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;139&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;CPU&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819115017"&gt;Intel Q6600 Kentsfield 2.4GHz Quad-Core &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;Newegg&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;220&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;220&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Ram&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820148090"&gt;Crucial Ballistix 1GB 240-Pin DDR2 1066 &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;37&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;4&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;148&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;DVD-Rom&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="LITE-ON Black IDE DVD-ROM Drive Model DH-16D2P-04  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16827106088"&gt;LITE-ON IDE DVD-ROM &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Floppy Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16821103203"&gt;SAMSUNG Floppy Drive &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Hard Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16822148268"&gt;Seagate 160GB 7200 RPM SATA 3.0Gb/s &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;4&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p align="center"&gt;220&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Videocard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16814130025"&gt;EVGA 256-P2-N445-LX GeForce 7300GT&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;2&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;110&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Sound Card &lt;/td&gt;
&lt;td class=""&gt;Onboard&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Network Card &lt;/td&gt;
&lt;td class=""&gt;Gigabit Onboard &lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Keyboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="Microsoft Natural 4000 Black Wired Keyboard  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16823109049"&gt;Microsoft Natural 4000 Black&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35 &lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826104178"&gt;Logitech MX518 Optical Mouse &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Monitor&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16824116120"&gt;ViewSonic Pro Series VP950b Black 19&amp;quot;&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;340&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;3&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1020&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse Pad &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817114185"&gt;XTRAC XTRAC ZOOM V2 Mouse Pad&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Speakers&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826106306"&gt;SENNHEISER DJs HD202 Circumaural &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Powersupply&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="CORSAIR CMPSU-750TX 750W Power Supply  - Retail" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817139006"&gt;CORSAIR CMPSU-750TX 750W&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Other&lt;/td&gt;
&lt;td class=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:14px;" align="left"&gt;
&lt;p&gt;&lt;strong&gt;Overview:&lt;br /&gt;&lt;/strong&gt;Est System Cost: $2292.00 &lt;br /&gt;Submitted By: Jared Bouck&lt;br /&gt;Submit Date: 5/5/2008&lt;br /&gt;Complexity to Assemble: Very Experienced&lt;br /&gt;Software Configuration and Optimization: Level 10 Geek&lt;br /&gt;Estimated Productive Life Span: 2 years&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=25" width="1" height="1"&gt;</description></item><item><title>Recommended 3D artist System Spec</title><link>http://thelab.thoughtlab.com/blogs/recspec/archive/2008/05/02/recommended-3d-artist-system-spec.aspx</link><pubDate>Fri, 02 May 2008 17:43:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:26</guid><dc:creator>Jared Bouck</dc:creator><slash:comments>0</slash:comments><description>&lt;div align="left"&gt;
&lt;p&gt;3D animation systems need as many pipes as they can cram onto that video card. Specialized video cards usually don’t support the latest visual effects for games, but boy can they push those polygons through the pipeline. 3d work can push the best CPU to its max with high poly scenes and test renders so look for a good CPU and lots of ram and fast hard drives to prevent bottlenecks.&lt;/p&gt;&lt;/div&gt;
&lt;table class="" cellspacing="0" cellpadding="0" align="center"&gt;

&lt;tr&gt;
&lt;td class=""&gt;&lt;strong&gt;Component&lt;/strong&gt; &lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Component Description&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Vendor&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Qty&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Case&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811133021"&gt;Thermaltake Armor VA8003BWS&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Motherboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813131170"&gt;ASUS DSGC-DW Dual LGA 771&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;400&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;400&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;CPU&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819117158"&gt;Intel Xeon L5320 1.86GHz Quad &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;Newegg&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;360&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;2&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;720&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Ram&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/product/product.aspx?Item=N82E16820161171"&gt;WINTEC 2GB ECC Fully Buffered &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;81&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;2&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;162&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;DVD-Rom&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="LITE-ON Black IDE DVD-ROM Drive Model DH-16D2P-04  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16827106088"&gt;LITE-ON IDE DVD-ROM &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Floppy Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16821103203"&gt;SAMSUNG Floppy Drive &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Hard Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16822148268"&gt;Seagate 160GB 7200 RPM SATA 3.0Gb/s &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;4&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p align="center"&gt;220&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Videocard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16814130025"&gt;EVGA 256-P2-N445-LX GeForce 7300GT&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;2&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;110&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Sound Card &lt;/td&gt;
&lt;td class=""&gt;Onboard&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Network Card &lt;/td&gt;
&lt;td class=""&gt;Gigabit Onboard &lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Keyboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="Microsoft Natural 4000 Black Wired Keyboard  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16823109049"&gt;Microsoft Natural 4000 Black&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35 &lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826104178"&gt;Logitech MX518 Optical Mouse &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Monitor&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16824116054"&gt;ViewSonic Graphic Series VG1930wm Wide&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;250&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;3&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;750&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse Pad &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817114185"&gt;XTRAC XTRAC ZOOM V2 Mouse Pad&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Speakers&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826106306"&gt;SENNHEISER DJs HD202 Circumaural &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Powersupply&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="CORSAIR CMPSU-750TX 750W Power Supply  - Retail" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817139006"&gt;CORSAIR CMPSU-750TX 750W&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:14px;" align="left"&gt;
&lt;p&gt;&lt;strong&gt;Overview:&lt;br /&gt;&lt;/strong&gt;Est System Cost: $2772.00 &lt;br /&gt;Submitted By: Jared Bouck&lt;br /&gt;Submit Date: 5/5/2008&lt;br /&gt;Complexity to Assemble: Very Experienced&lt;br /&gt;Software Configuration and Optimization: Level 10 Geek&lt;br /&gt;Estimated Productive Life Span: 2 years&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=26" width="1" height="1"&gt;</description></item><item><title>Recommended Developer System Spec</title><link>http://thelab.thoughtlab.com/blogs/recspec/archive/2008/05/02/recommended-developer-system-spec.aspx</link><pubDate>Fri, 02 May 2008 16:34:00 GMT</pubDate><guid isPermaLink="false">49915f75-0a10-4895-9a0f-f1983f5a44a1:24</guid><dc:creator>Jared Bouck</dc:creator><slash:comments>0</slash:comments><description>&lt;div align="left"&gt;
&lt;p&gt;Software development systems are designed to facilitate efficiency. Multiple monitors have been shown to dramatically improve efficiency for software development. Fast CPUs help speed up builds, and lots of ram will help with many software development tasks and multitasking. Gigabit ethernet connections will speed up loading large projects over a network. Last, and sadly often overlooked for those poor decrepit programmers is ergonomics. Can we include a nice Herman Miller chair in these specs?&lt;/p&gt;&lt;/div&gt;
&lt;table class="" cellspacing="0" cellpadding="0" align="center"&gt;

&lt;tr&gt;
&lt;td class=""&gt;&lt;strong&gt;Component&lt;/strong&gt; &lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Component Description&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Vendor&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Qty&lt;/strong&gt;&lt;/td&gt;
&lt;td class=""&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Case&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811133021"&gt;Thermaltake Armor VA8003BWS&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;170&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Motherboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813131225"&gt;ASUS P5K-E LGA 775 Intel P35&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;139&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;139&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;CPU&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819115017"&gt;Intel Q6600 Kentsfield 2.4GHz Quad-Core &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;Newegg&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;220&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;220&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Ram&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820148090"&gt;Crucial Ballistix 1GB 240-Pin DDR2 1066 &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;37&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;4&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;148&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;DVD-Rom&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="LITE-ON Black IDE DVD-ROM Drive Model DH-16D2P-04  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16827106088"&gt;LITE-ON IDE DVD-ROM &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;17&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Floppy Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16821103203"&gt;SAMSUNG Floppy Drive &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Hard Drive &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16822148268"&gt;Seagate 160GB 7200 RPM SATA 3.0Gb/s &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;4&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;p align="center"&gt;220&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Videocard&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16814130025"&gt;EVGA 256-P2-N445-LX GeForce 7300GT&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;55&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;2&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;110&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Sound Card &lt;/td&gt;
&lt;td class=""&gt;Onboard&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Network Card &lt;/td&gt;
&lt;td class=""&gt;Gigabit Onboard &lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Keyboard&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="Microsoft Natural 4000 Black Wired Keyboard  - OEM" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16823109049"&gt;Microsoft Natural 4000 Black&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;35&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826104178"&gt;Logitech MX518 Optical Mouse &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;40&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Monitor&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16824009091"&gt;Acer AL1916WAbd Black 19&amp;quot; Widescreen&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;180&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;3&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;540&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Mouse Pad &lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817114185"&gt;XTRAC XTRAC ZOOM V2 Mouse Pad&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;11&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Speakers&lt;/td&gt;
&lt;td class=""&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16826106306"&gt;SENNHEISER DJs HD202 Circumaural &lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;25&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Powersupply&lt;/td&gt;
&lt;td class=""&gt;&lt;a title="CORSAIR CMPSU-750TX 750W Power Supply  - Retail" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817139006"&gt;CORSAIR CMPSU-750TX 750W&lt;/a&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;Newegg&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;1&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;130&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;Other&lt;/td&gt;
&lt;td class=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td class=""&gt;
&lt;div align="center"&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div style="WIDTH:400px;"&gt;
&lt;div style="FONT-SIZE:14px;" align="left"&gt;
&lt;p&gt;&lt;strong&gt;Overview:&lt;br /&gt;&lt;/strong&gt;Est System Cost: $1812.00 &lt;br /&gt;Submitted By: Jared Bouck&lt;br /&gt;Submit Date: 5/5/2008&lt;br /&gt;Complexity to Assemble: Very Experienced&lt;br /&gt;Software Configuration and Optimization: Level 10 Geek&lt;br /&gt;Estimated Productive Life Span: 2 years&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://thelab.thoughtlab.com/aggbug.aspx?PostID=24" width="1" height="1"&gt;</description></item></channel></rss>