<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Director &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/category/director/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Sat, 29 Mar 2008 00:48:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>Director &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Post Microsoft MIX 2008 Thoughts</title>
		<link>https://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html</link>
					<comments>https://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 18 Mar 2008 00:46:59 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Director]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashLite]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>
		<guid isPermaLink="false">http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html</guid>

					<description><![CDATA[If you are in a hurry, here are some links with excerpts about the section. Contents Introduction &#8211; What and Why MIX? Conference Grounds &#8211; Where was MIX and how did it go down DoubleClick &#8211; Syndication ready Silverlight Have we seen this before? &#8211; &#8220;Dude, Flash did that years ago.&#8221; Silverlight Adaptive Streaming &#8211; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If you are in a hurry, here are some links with excerpts about the section.</p>
<p><strong>Contents</strong></p>
<ul>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#introduction">Introduction</a> &#8211; What and Why MIX?</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#conference_grounds">Conference Grounds</a> &#8211; Where was MIX and how did it go down</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#DoubleClick">DoubleClick</a> &#8211; Syndication ready Silverlight</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#iveseenthingsyoupeoplewouldntbelieve">Have we seen this before?</a> &#8211; &#8220;Dude, Flash did that years ago.&#8221;</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#adaptive">Silverlight Adaptive Streaming</a> &#8211; Curious about how the buffering works.</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#mobile">Silverlight on Mobile</a> &#8211; Same problems as Flash Lite has.</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#silverlight_flash">Silverlight for Flash Developers</a> &#8211; I do Flash; can I do Silverlight?</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#aol_silverlight">AOL&#8217;s Silverlight Email App</a> &#8211; Enterprise Silverlight</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#blog_mingle">Bloggers Mingling</a> &#8211; A-list bloggers, and who I met</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#conclusions">Conclusions</a> &#8211; What I took away from MIX.</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#history_repeating">History Repeating</a> &#8211; Some of the .NET crew is doing what the Java crew already did.</li>
<li><a href="http://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html#eatitsucka">Force Fed Silverlight</a> &#8211; Silverlight is an alternative, not a choice.</li>
</ul>
<p><span id="more-1262"></span><a title="introduction" name="introduction"></a><strong>Introduction</strong></p>
<p>I was invited to attend the <a href="http://visitmix.com/" title="Microsoft MIX 2008 conference" id="u3jt">Microsoft MIX 2008 conference</a>.  After discussing this years conferences as well as the technology involved with my CTO, he decided we should go together.  We headed to Las Vegas, where the conference was held, with the sole goal of evaluating <a href="http://silverlight.net/" title="Silverlight" id="psuw">Silverlight</a> for use in our self-service video platform, one of our company&#8217;s main products I work on.</p>
<p>Although a lot our focus nowadays is on Flash video, we have a significant amount of money and technology invested in Windows Media.  We also do way more Windows Media business, especially in the fun Live events arena.  We currently create a lot of custom <a href="http://adobe.com/go/platform/" title="Flash" id="pg0y">Flash</a> video players that interface with our back-end video CMS system.  Some are simple while others are full blown multimedia applications.</p>
<p>Can we do the same with Silverlight 2?</p>
<p>That was the fundamental question to answer, or have answered, at MIX.</p>
<p><a title="conference_grounds" name="conference_grounds"></a><strong>Conference Grounds</strong></p>
<p>I&#8217;d been to the <a href="http://www.venetian.com/" title="Venetian Hotel" id="lt9r">Venetian Hotel</a> in Vegas before for Macromedia&#8217;s / Adobe&#8217;s MAX 2006.  The MIX conference had about 1000 less attendees than MAX 2k6 (2000+), but was no less grand.  You could spot the geeks everywhere, and they seemed to outnumber the suits.  Registration was simple, our hotel accommodations were great, and the facilities and layout were a lot more informal that I originally expected.  I had this expectation of Microsoft being stodgy, formal, and just overall &#8220;proper like&#8221;.  This was smashed when <a href="http://jessewarden.com/2007/12/mix-n-mash-2k7-bill-gates-web-blend-and-silverlight.html">I visited the HQ</a> in Janurary and met Bill Gates in person, but apparently that experience wasn&#8217;t enough.</p>
<p>The conference, however, felt a lot like MAX.  It definitely was a fun multimedia event with code.  My CTO and I made a decent attempt to talk to a variety of conference goers, not just <a href="http://adobe.com/" title="Adobe" id="ngpe">Adobe</a> &amp; <a href="http://microsoft.com/" title="Microsoft" id="nm3m">Microsoft</a> employee&#8217;s.  My interest was solely to identify what their background was, why they were at MIX, and what they hoped to get out of it.  That, and I like meeting new people, especially people outside of the Adobe sphere who do software for a living.</p>
<p>Identifying a technology&#8217;s validity are based halfway on the technology&#8217;s merits.  The other half comes from identifying the community around the technology, and seeing if the 2 have a future together.  Do they mesh?  If not, is that a big deal?  Is there even an identifiable community?  How does it compare to other technology communities that I&#8217;m familiar with?  What are the pain points, and what are the great matches?</p>
<p>All of these questions I was continually asking myself quietly as I listened to speakers, both official and informal.</p>
<p><a title="DoubleClick" name="DoubleClick"></a><strong>Keynote Day 1: DoubleClick</strong></p>
<p>The were a couple things that I found interesting about the keynote.</p>
<p>The first was <a href="http://www.dartmotif.com/blog/" title="Ari" id="gpv7">Ari Paparo</a> from <a href="http://doubleclick.com/" title="DoubleClick" id="mvua">DoubleClick</a>.  <a href="http://weblogs.asp.net/scottgu/" title="Scott Guthrie" id="y1cg">Scott Guthrie</a>, Corporate Vice President in the Developer division at Microsoft, was talking about some of the Ad features in <a href="http://msdn.microsoft.com/vstudio/" title="Visual Studio" id="haab">Visual Studio</a>.  I had <a href="http://twitter.com/" title="Twittered" id="r4.0">Twittered</a> how irrelevant this stuff is in the media industry.  If Silverlight had any chance of making a dent in what Flash is doing, it needed to integrate with a real ad platform, like say,DoubleClick.</p>
<p>Not 5 seconds had I twittered that, Scott Guthrie had a witty introduction to Ari who showed a brief overview of the SDK of using DoubleClick with Silverlight.  For those who don&#8217;t know, DoubleClick is one of the largest ad platform providers.  I think last week in fact, the FCC approved <a href="http://google.com/" title="Google" id="b9kk">Google</a>&#8216;s acquisition of them.  One of many, we utilize DoubleClick at work to allow customers to have relevant video &amp; image ads to show in their video players, allowing them to monetize their content.</p>
<p>Getting an <a href="http://www.adobe.com/devnet/actionscript/articles/actionscript3_overview.html" title="ActionScript 3" id="xh6t">ActionScript 3</a>, heck even an mxmlc (<a href="http://adobe.com/products/flex/" title="Flex" id="n16z">Flex</a>&#8216;s compiler) compatible version from them has been like pulling teeth.  While frustrating, what was more frustrating was the lack of ANY Silverlight information a few months ago.  Our first project utilizing Silverlight, used primarily as a solution for Mac users since <a href="http://www.flip4mac.com/" title="Flip4Mac" id="vp9c">Flip4Mac</a> is noble, but flaky.  One of the things that eventually forced our Silverlight player to be removed, replaced by Windows Media, and thus flipping the bird to Mac users was the lack of official DoubleClick support.  It&#8217;s joke really since both Windows Media and Silverlight take the same ASX play list file (text file with a bunch of URL&#8217;s to media basically).</p>
<p>Now, it&#8217;s official; they can play ball in the online media &amp; syndication world.</p>
<p><a title="iveseenthingsyoupeoplewouldntbelieve" name="iveseenthingsyoupeoplewouldntbelieve"></a><strong>Keynote Day 1: &#8220;We&#8221; Have/Haven&#8217;t Seen This Before</strong></p>
<p>The second thing that really jumped out at me was a lot of the Silverlight content shown that could of been done in Flash, or had already been done years ago.  It was extremely frustrating to here the &#8220;oohs&#8221; and &#8220;aaaahs&#8221; from the crowd.  I&#8217;m like, &#8220;Have you all actually used the Internet in the past 5 years?&#8221;.</p>
<p>You couldn&#8217;t deny it, though.  There was a subtle vibe.  I looked around the crowd and saw muted discussion as each Silverlight application was shown.  Whatever negative thoughts I had clearly were not shared by the majority.  There was muted discussions amongst co-workers.  People sitting next to each other were in quiet, yet excited conversation.  Clearly they had ideas about how to utilize the technology and wanted to act on them.</p>
<p>As <a href="http://blogs.zdnet.com/Stewart/" title="Ryan" id="a2bb">Ryan</a> <a href="http://blog.digitalbackcountry.com/" title="Stewart" id="jf2b">Stewart</a> said, &#8220;This crowd isn&#8217;t just familiar with our technology&#8221;.  Ryan&#8217;s typical &amp; positive Care Bear Stare attitude did nothing to sway my feelings.  I call bs ; this has nothing to do with technology familiarity and everything with technology approachability.  The Microsoft crowd DID and DOES know about Flash &amp; Flex, at least some.  The only reason it was apparently invalid in their eyes is that it didn&#8217;t integrate with Visual Studio &amp; <a href="http://msdn.microsoft.com/netframework/" title=".NET" id="mjpa">.NET</a> easily, and wasn&#8217;t presented as a valid business case by Microsoft.  That has to be it.  There is no way the thousands of competent developers and designers there had no clue these abilities couldn&#8217;t be done pre-Silverlight Beta 1 in Flash or Flex.</p>
<p><a title="adaptive" name="adaptive"></a><strong>Keynote Day 1: Silverlight Adaptive Streaming</strong></p>
<p>Everyone thought it was really rad.  I yawned.  While down-graded on-t3h-fly streams has always been a touted feature of Windows Media, especially over Flash Media Server, I&#8217;ve never seen it work&#8230; at least at my place of employment.  Additionally, if you have enough bandwidth to down-grade streams on the fly from 500k to 100k, you&#8217;re clearly running on a network that has issues.  You&#8217;re best bet in this case is not to spend an inordinate amount of time trying to be clever and preload lower bit-rate streams into the buffer.  Instead, just feed them a 100k stream, and call it a day.  Disagree?  Works for YouTube, so&#8230;</p>
<p>Even Flash Player&#8217;s double-buffering has left me not impressed on uber-slow speed connections.  Besides, the graph they showed was VERY well designed, making me question the validity of every image thenceforth I was shown.  Bottom line: I&#8217;ll need to play with it on a production environment to really believe it has any value.  With most broadband customers, decent double-buffering prevents all problems with On Video &amp; 24/7 video.</p>
<p>There is a company out there that has a comparable solution for Flash, but that&#8217;s for another blog entry.  This does add ammo that Adaptive Streaming is valid, and thus usable.</p>
<p><a title="mobile" name="mobile"></a><strong>Keynote Day 1: Silverlight on Mobile</strong></p>
<p>It doesn&#8217;t really matter if it works, nor if they formed a partnership with <a href="http://www.nokia.com/" title="Nokia" id="duzn">Nokia</a>.  I&#8217;m American, and as such, my country is held in the grip of operators who have walled gardens.  Meaning, I get tons Flex &amp; Flash work, but only received 2 <a href="http://adobe.com/products/flashlite">Flash Lite</a> job offers in 2007.  Flash Lite is not popular here for the same reasons Silverlight won&#8217;t be.</p>
<p>Windows Mobile and CE have always been good.  I had Flash 6 running well back in 2003 on a Windows Mobile device.  Logically, one could assume Silverlight would work just as well.  At that point, though, I&#8217;d much rather utilize <a href="http://msdn2.microsoft.com/en-us/netframework/aa663326.aspx" title="WPF" id="zu-l">WPF</a>, not Silverlight&#8230; unless the content was already created, and you&#8217;re merely porting, but that&#8217;s never how I&#8217;ve seen it work.</p>
<p><a title="silverlight_flash" name="silverlight_flash"></a><strong>Sessions: Silverlight for Flash Developers</strong></p>
<p>Not the exact session name, but close enough.  I sat in for half of this; I believe one of blokes from <a href="http://cynergysystems.com/" title="Cynergy Systems" id="m0c4">Cynergy Systems</a> was presenting.  In the 40 minutes that I caught, he went over the API and how you can code Silverlight without using <a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend" title="Blend" id="tcuz">Blend</a> just like you can code Flash without using the Timeline.</p>
<p>It was really uncool to see, even in C#, that working with XAML via code is still a bitch.  Some could argue that it&#8217;s nice to have such low-level access to XAML via code.  The presenter did the same thing in C# that I did in JavaScript in Silverlight 1.0: Abstract everything you normally do with GUI objects in a base class to act like the nice API of Flash.</p>
<p>So, instead of guiObject.SetValue(&#8220;Canvas.Left&#8221;, 30), you instead make a base class do that as a getter / setter, so you can instead go guiObject.x = 30.  Lame.</p>
<p>I&#8217;m not sure if the new GUI components fix this.  While boilerplate access can be fun if you&#8217;re an uber-geek, high level abstraction into easy to use components allow you to get stuff done.  Just ask <a href="http://blog.simb.net/2008/02/14/flex-developers-are-so-spoiled/" title="Simeon and his adventures" id="i.ia">Simeon and his adventures</a> in not-using the Flex SDK, instead trying various pure AS3 approaches.</p>
<p>What was nice, though, was that clearly XAML &amp; C# are definitely do-able by traditional Flash devs.  You&#8217;ll do the same thing that you did learning Flex &amp; AS3: Learning the new tool(s) and learning the new API.</p>
<p>Although the Adobe CS3 installation process is horrible (not Flex), I&#8217;m pretty sure the Visual Studio + Blend is worse, especially for the beta bits based on mourning Twits I read.  You&#8217;ve been warned.</p>
<p><a title="aol_silverlight" name="aol_silverlight"></a><strong>Sessions: AOL&#8217;s Silverlight Email Application</strong></p>
<p>The only true Enterprise application I saw during the keynote was <a href="http://aol.com/" title="AOL" id="apv4">AOL</a>&#8216;s email application.  A whopping 10-billion alarm bells went off when I saw it for a few reasons.</p>
<p>First, I&#8217;ve had the pleasure of working with &amp; meeting one of AOL&#8217;s good acquisitions.  They are a smart, talented team who&#8217;ve already had proven results.  That doesn&#8217;t mean that all of AOL is, but it certainly gives me the impression those who are doing the acquisitions know what they are doing.  Second, the <a href="http://en.wikipedia.org/wiki/AJAX" title="AJAX" id="sr4x">AJAX</a> version of their email client was really fast and seemed to work great.</p>
<p>You have a perfectly well and good AJAX email client&#8230; why in the heck did you make a Silverlight version?  I made a note to attend this session to find out.  I got my answer at the end during questions.  Someone asked did you look at Flash as an option (he should of said Flex, but whatever).  They responded with &#8220;Microsoft Partnership&#8221;.  That&#8217;s all I needed to know.  It was nice to know that they had an existing .NET team that already knew C#&#8230; whatever.  Programming is programming.  C#, AS3&#8230; if you can code, you can learn another language and platform.</p>
<p>However, this session overall was enlightening as to what Silverlight developers perceive they need. Aka, all the stuff the Flex SDK already has.  Keep in mind, they built this while Silverlight 2 was still in early development, so I don&#8217;t think they had any access to the controls.</p>
<p>That&#8217;s right, they had build their own component framework.  $10 bucks says they spent 6 months just building the component infrastructure they needed to actually build an application.</p>
<p>What they DID go over were high level &amp; low level details of each of the facets of their development.  This was the really cool part.  They built their own component base classes, and controls.  They built their own measurement engine.  They built their own skinning engine (read run-time skinning, not just Blend).  Basically, anything you&#8217;d find in the bowls of UIComponent in the Flex SDK and all of his helper classes, they did some of that on some level.  In short, a TON of work just to get started.  Very impressive from a developer perspective, very crazy from a &#8220;how much R&amp;D money did this team actually get from Microsoft, ZOMG!!!1111&#8221;.</p>
<p>Hopefully, other teams won&#8217;t have to do that much work assuming the components, both Microsoft&#8217;s and all the 3rd party ones I&#8217;ve seen advertised, do a lot of this already.</p>
<p>It was pretty annoying to debate quietly with my CTO in the audience.  &#8220;Dude, they have AbstractClass as a keyword.&#8221;</p>
<p>&#8220;What, AS3 doesn&#8217;t have that?&#8221;</p>
<p>&#8220;No dude&#8230; you just add an Abstract prefix and follow the convention.&#8221;</p>
<p>*grumble* *grumble*</p>
<p>&#8220;Dude, Silverlight has threads?&#8221;</p>
<p>&#8220;What, Flash Player doesn&#8217;t have threads?&#8221;</p>
<p>&#8220;OMG, you don&#8217;t NEED threads to produce a nice, working Enterprise application.&#8221;</p>
<p>&#8220;I can&#8217;t believe Flash Player doesn&#8217;t have threads.&#8221; *grumble* *grumble*</p>
<p>In conclusion, I was very impressed with what the AOL team had done.  I was also impressed that Silverlight 2 Beta 1 is already creating this level of application<strike>s</strike>.  &#8220;This level&#8221; will have be carefully scrutinized; I did not get a chance to play with the real application to see how it felt compared to <a href="http://gmail.com/" title="Gmail" id="yh05">Gmail</a>, <a href="http://www.goowy.com/" title="Gooey" id="gvtv">Gooey</a>, etc.  The AOL team also didn&#8217;t discuss their battle scars.  I love Flex &amp; Flash, but even I have tons of battle scars to talk about.</p>
<p><strong>Bizzness</strong></p>
<p>I managed to tag along on 2 business meetings my CTO had with 2 cool companies.  Can&#8217;t really say who they were, but can say they are relevant to my business: online video.  Totally out of my element, so naturally it was fun to learn how those things go down.  One was all formal with the pretense of informality, and the other was just an introduction to get to know each other.</p>
<p>It&#8217;s more likely for these things to happen since everyone is more likely to be at the same place at a conference like MIX.</p>
<p><a title="blog_mingle" name="blog_mingle"></a><strong>BlogZone MIXer</strong></p>
<p>I got invited to the BlogZone MIXer; a who&#8217;s who of the blogsphere.  I brought my CTO along to this A-List event.  There, your usual celebrities like <a href="http://scobleizer.com/" title="Robert Scoble" id="e-.-">Robert Scoble</a>, <a href="http://molly.com/" title="Molly Holzschlag" id="jmna">Molly Holzschlag</a>, <span id="ctl00_MainPlaceHolder_EntryList_ctl01_EntryTemplate_BodyLabel">Eric Zocher, </span>Ryan Stewart, etc.  The one dude I really got to have interesting conversations that I never finished was <a href="http://alex.dojotoolkit.org/" title="Alex Russell" id="zciy">Alex Russell</a>.  Among other things, he&#8217;s one of the creators of <a href="http://dojotoolkit.org/" title="Dojo" id="c1-4">Dojo</a>, the Open Source DHTML toolkit written in JavaScript that helps abstract browser incompatibilities.  Anyone who does JavaScript for a living is a prime target for my wrath.  Unfortunately, he was really cool so I found it really hard to take the piss out of him.</p>
<p>I drilled him about his role on the &#8220;Board&#8221;.  You know, the ones who are shaping the future of JavaScript 2.  I tried to get as much dirt as possible since I only ever hear mostly positive things which I know can&#8217;t be right.  As central a role as JavaScript plays on the web today, you KNOW there is some drama up in that mug.</p>
<p>Alex is bright.  Regardless of the historical reasons of how he got on the Board, if you ever have some spare positive karma, be sure to throw it his way.  Encourage him to keep fighting the good fight, to battle cynicism, and to never give in.  He&#8217;s clearly qualified.  He&#8217;s got some good ideas that apparently are shared by others.</p>
<p>Like all standards boards, I felt like some of the non-vendors give a flip for the implementers.  For example, Object.prototype was a great idea, but I&#8217;ve yet to see a tool that helps you identify who&#8217;s mixing what on your prototypes.  Who&#8217;s fault is that?  Those who built tools like Adobe Flash or those who built the language and didn&#8217;t give an easy way in the language for tool makers to latch onto?  It&#8217;s pure speculation; we didn&#8217;t get to finish our 3 concurrent conversations so maybe they do communicate each other&#8217;s concerns and I&#8217;m just not seeing it.  I&#8217;ve read like 1 blog entry on <a href="http://www.moock.org/blog/archives/000260.html" title="Colin Moock's blog" id="aab2">Colin Moock&#8217;s blog</a> with a summary of the action.  After talking to Alex, I&#8217;m glad that&#8217;s all I&#8217;ve read, and that people like Alex are in there.</p>
<p>Hang in there, buddy!</p>
<p><a title="conclusions" name="conclusions"></a><strong>Conclusions</strong></p>
<p>I had a good time at MIX and definitely plan on speaking next year.  Not sure on what yet, but it doesn&#8217;t matter.  I&#8217;m really appreciative of Microsoft for inviting me.  I loathe Vegas, yet really dug the event and how everything was put together.  I felt their execution was good, and the topics relevant.  There were also a lot of cool &amp; intelligent people there, which is the most important part of conferences for me.  Also, thanks to Cynergy Systems (I believe it was them) for the  <a href="http://www.taolasvegas.com/tao.html" title="Tao" id="p-1y">Tao</a> party.  Had a lot of fun there.</p>
<p>Blend and Visual Studio still look appealing and valid, but I&#8217;m not looking forward to my first Silverlight project mainly because I&#8217;ll probably spend yet another 3 days getting up and running again.  The install requirements as well as required times are just insane.  Flex Builder 3 takes 40 minutes to download on DSL, and 5 minutes to install and configure.  The Eclipse plug-in + various JRE&#8217;s can definitely take up a lot of your day, but not days plural.  In all fairness, it IS still a ton of beta bits working together.  Maybe it&#8217;ll be decent by launch.</p>
<p>&#8230;did I mention I&#8217;ll have to do <a href="http://www.apple.com/macosx/features/bootcamp.html" title="Bootcamp" id="k_gp">Bootcamp</a> or <a href="http://www.parallels.com/" title="Parallels" id="qkfy">Parallels</a> since Microsoft doesn&#8217;t appear to have any plans for supporting Silverlight development on my <a href="http://apple.com/" title="Mac" id="w7gi">Mac</a>, just debugging?  My PC at home will be fine since I&#8217;ve got tons of alpha and beta bits working (somewhat, *ahem*) on it.</p>
<p>I can see why .NET dudes are so excited about Silverlight.  The coding style and language look a lot like regular .NET development.  I don&#8217;t do .NET, nor do I do server-side development, but I&#8217;ve debugged .NET code other people wrote in the past and the learning curve will hopefully be just API and runtime features since it&#8217;s C#.</p>
<p>&#8230;and that&#8217;s the confusing part.  What is .NET 3.5 now&#8230; 48 megs or so?  Let&#8217;s just pretend it&#8217;s near there.  Silverlight 2.0 probably won&#8217;t cap 4 megs (unofficial cap based on rumor from one WPF project manager I talked to).   What of .NET is missing based on those 44 megs NOT being in the Silverlight plug-in?  What of XAML isn&#8217;t supported?  What of C#&#8217;s features aren&#8217;t supported?  VB, JPython, JRuby ? Those are questions I need to answer to see how well their execution of making it easy for existing .NET developers to transition.</p>
<p><a title="history_repeating" name="history_repeating"></a><strong>History Repeating</strong></p>
<p>The most important thing for me that I took away from MIX was that I&#8217;ve seen this before.  Flash Developers had an awesome multimedia platform to build upon for years.  Java guys came, and then left.  A few masochists stuck around really helping the community, and growth of the platform, out a lot.</p>
<p>Years later, Flex came out, and changed everything.  Java devs came in droves.  Then came PHP guys, Python, you name it.  Flex allowed traditional developers to succeed where they apparently could not before using Flash or various other open source alternatives like <a href="http://jessewarden.com/2005/04/i-tried-eclipse-asdt-mtasc-flashout-fame.html" title="FAME" id="zuxt">FAME</a>, <a href="http://www.flashdevelop.org/" title="Flash Develop" id="ub9g">Flash Develop</a>, or <a href="http://fdt.powerflasher.com/" title="Flash Develop Tool" id="fnr8">FDT</a>, etc.  After learning to code for years, I physically cannot go back to Flash to do large scale development.  Therefore, I totally understand why traditional developers couldn&#8217;t fathom how to do large scale scale projects in Flash.</p>
<p>I&#8217;m seeing the same signs in the .NET world.  It&#8217;s been 2 years+ on the new runtime in Flash Player 9.  Building applications in Flex, both Enterprise as well as widgets, are now proven to work well.  Aka, we have a great runtime and a great set of tools.  I worked with a .NET team 5 years ago to do the front-end in Flash &amp; HTML, and the back-end in .NET.  The work flow was good enough.  I know a lot of .NET guys who use Flex for the front end.</p>
<p>Yet the impression I got from the conference was that this side of .NET is unknown by a lot of people.  Either that, or just that client side development in something other than server-side generated HTML/JS/CSS was, and is, possible.</p>
<p>I&#8217;m seeing the same signs.  These traditional server-side .NET devs ask, &#8220;So, how do you handle session data?&#8221;  &#8230;and then the cliche response we&#8217;ve read soo many times in the Flash &amp; Flex world, &#8220;We&#8217;re a stateful client.  There are no pages.  This is an application.&#8221;  &#8220;How do you store local data?&#8221;  &#8220;So the middle tier no longer handles the rendering of the GUI?&#8221;  etc., etc., etc.  Some get frustrated.  Most get excited, see the light, and start asking both themselves and their cohorts a multitude of questions how much better things could be.</p>
<p>2 years later, Flex is the poster child for Java developers.  In 2010, will we be seeing signs of Silverlight being the standard for .NETerz?</p>
<p>Every word above this sentence is invalid until they get their plug-in installation correct.  A lot of the Silverlight installs that were 1.0, and people upgraded to 1.1, is where the trouble started.  Some of the plug-in detection code got confused, asking you to upgrade even though you were.  Some of those affected blogged conflicting reports, causing confusion of what the real problem was.</p>
<p>This is exactly the opposite of what you want to happen.  This is also one of the main reasons Macromedia <a href="http://adobe.com/products/director/" title="Director" id="f.-i">Director</a>&#8216;s &#8220;Shockwave&#8221; Internet plug-in failed.  I&#8217;d create something, upload it to my website, and my mom couldn&#8217;t view it because of plug-in installation issues.  That&#8217;s a serious problem.</p>
<p>Flash didn&#8217;t have this problem.  It just worked.  For years.  Silverlight the plug-in INCLUDING THE DEFAULT DETECTION CODE needs to just work.  For years.  If not, it&#8217;s doomed.  &#8220;Doomed&#8221; not meaning in never being a viable solution, but rather, Microsoft will have to spend major PR money to compensate for the negative perception that plug-in installations gone awry will cause.</p>
<p><a title="eatitsucka" name="eatitsucka"></a><strong>Force Fed Silverlight</strong></p>
<p>What does this mean for Flex &amp; Flash devs?  If you&#8217;re a Flex dev&#8230; not much.  We need to wait for someone to intelligently blog their experiences with not just the controls offered by Microsoft, but by the multitude of 3rd party developers.</p>
<p>If you&#8217;re a Flash dev in the agency world, you need to pay attention.  Yes, please temper this with the fact that, even though it&#8217;s a week+ past, I was still at a Microsoft conference bombarded by marketing hoopla.  Regardless, media work will come your way where a client will want Silverlight.  This can either be because of a partnership, because the company already has a plethora of Windows Media content that cannot be cost-effectively converted to Flash, or because like most clients, they don&#8217;t care about the technology choice and therefore the decision was already made long before the requirements hit your PM&#8217;s desk.</p>
<p>I would HIGHLY suggest you get training in Blend in a official capacity if you&#8217;re job can fund it.  If you&#8217;re bored, add Visual Studio to the mix as well.  This will save a lot of frustration and a lot of time.  Blend and Flash aren&#8217;t a lot a like when it comes to animation and work flow.  Blend is NOT alien, however.  You can learn it. I&#8217;ve seen a traditional designer use it (caveat, at Microsoft HQ) and was impressed at how fluidly he made things.</p>
<p>If you&#8217;re a Flash dev as a contractor, you can wait a few more months.  I&#8217;ve gotten 1 Silverlight job and one WPF designer job in 2008.  This compared to at least 1 Flex or Flash job a day, every day.  Once Silverlight 2 gets out of beta, it may behoove you to at least be capable of compiling a simple app&#8230; say, drawing a circle to the screen in XAML and then making it clickable .  Sounds simple enough, but you&#8217;d be surprised how much time that effort really can take.  And as you know, time is money in the 1099 world.  Hopefully it&#8217;ll take less time by launch to get up and running.</p>
<p>If you&#8217;re a Flash designer, you&#8217;ve actually got it pretty good.  Blend and Design are not just for Silverlight development, but also for WPF development, aka rich desktop application development.  This means that if you become familiar with the tools, you&#8217;ll suddenly have a lot of traditional .NET shops looking for &#8220;designers&#8221;.  Not all, but more than are now.  A lot of the .NET shops will be just as fine with 2 shades of gray as some of the small software shops using Flex.  All that has to happen is to have upper management see a demo, recognize that their team is already &#8220;capable&#8221; of using their existing skills, and demand Silverlight.  Someone who&#8217;s had experience, and has the budget, will request a proper designer / consultant be hired.  The work flow between Design and Blend wasn&#8217;t that great for me, though.  Probably because I&#8217;m a n00b. PNG FTW!</p>
<p>4 years ago, I choose to experiment in Flex, and eventually make it my full-time career.  This was a choice I made.  There were no job offers for Flex.  Enterprises were still experimenting in Flex projects.  Flashdevs loathed the Enterprise price tag and having the compiler be on the server.  I didn&#8217;t care&#8230; I loved it!  4 years later, Flex is still rocking strong, and has a bright future.</p>
<p>Silverlight?  The marketing machine at Microsoft is awesome.  You don&#8217;t have a choice to learn Silverlight or not.  You can choose not too, but companies WILL be utilizing the technology, some requesting it specifically.  For the later, you can either cater to that, and take their money.  &#8230;Or not, and find some effective way to sell them on Flex / Flash.  In a sense, we&#8217;re being force fed Silverlight.  Assuming things go well for Microsoft, I&#8217;m not &#8220;choosing&#8221; to be a Silverlight developer.  Rather, I&#8217;m merely reacting to market conditions.  Flex was easy&#8230; it was love at first sight.  Silverlight?  It looks fun if I actually had people to pay me do it, but Flex is more fun.</p>
<p>Either way, you can relax.  Flash Player is still king, and there is still a lot more money to made for a long time.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2008/03/post-microsoft-mix-2008-thoughts.html/feed</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>I have a hard time writing slow ActionScript 3</title>
		<link>https://jessewarden.com/2007/10/i-have-a-hard-time-writing-slow-actionscript-3.html</link>
					<comments>https://jessewarden.com/2007/10/i-have-a-hard-time-writing-slow-actionscript-3.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 16 Oct 2007 04:24:04 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Director]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Red5]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SmartFoxServer]]></category>
		<guid isPermaLink="false">http://jessewarden.com/2007/10/i-have-a-hard-time-writing-slow-actionscript-3.html</guid>

					<description><![CDATA[I have a problem going backwards. When I learned attachMovie in Flash 5, that function was the death knell for my Director career. &#8220;Create something from nothing!?!?&#8221; :: queue Quake sound :: &#8220;GODLIKE!!! (nsfw)&#8220;. In Director, everything you wanted to be on a depth had to have had something there originally, put there on the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I have a problem going backwards.  When I learned attachMovie in <a href="http://www.adobe.com/products/flash/">Flash</a> 5, that function was the death knell for my Director career.  &#8220;Create something from nothing!?!?&#8221;  :: queue Quake sound :: &#8220;<a href="http://leonidasunstoppable.ytmnd.com/">GODLIKE!!! (nsfw)</a>&#8220;.</p>
<p>In <a href="http://www.adobe.com/products/director">Director</a>, everything you wanted to be on a depth had to have had something there originally, put there on the &#8220;score&#8221; (Director&#8217;s timeline).  If you didn&#8217;t do this at author-time, you couldn&#8217;t swap things out on that depth.  The attachMovie function in Flash was great because this didn&#8217;t matter; I had thousands of depths to play with; the sky was the limit!</p>
<p>I later learned the sky on _root had a limit; it was called the Settings Panel.  <a href="http://www.google.com/search?hl=en&amp;q=Lakitu&amp;btnG=Google+Search">Lakitu</a> wouldn&#8217;t even go near that elevation.  It didn&#8217;t matter though; creating new MovieClip&#8217;s allowed millions of depths that designers &amp; coders never used; it was wonderful.</p>
<p>To be fair, you could abstract this stuff in Director.  The crew over at <a href="http://director-online.com/">Director-Online</a> had at least 2 sprite engines that emulated what Flash did, with extra features.  Furthermore, I couldn&#8217;t really appreciate this stuff back then anyway; I couldn&#8217;t even return values from functions.  I just had functions set global variables.  Class? Que? n00b.</p>
<p>I tried going back after I learned some things, but I just couldn&#8217;t do it.  Flash offered too much.  It was soo fast.  So much more effective.  ActionScript just seemed more organized than Lingo.</p>
<p>After getting over my frustration at AS1, I learned that I could create re-usable stuff.  While I loved to re-invent the wheel ALL THE FRIKIN&#8217; TIME, it did get tiring after awhile, especially when my 4th generation Scrollbar still lacked track clicking and scroll buttons.  Creating re-usable tools was hot.</p>
<p>After getting over my furious frustration with AS2, and learning enough design patterns to pretend like I knew what I was doing, I slowly developed a loathing for AS1.  I then had a hatred for anything not AS1; aka, code puked on frames.</p>
<p>I remember seeing a lot of creative things done with prototype in ActionScript 1, however, and even some still in AS2.  So, I tried to go back, and experiment.   I always ended up getting bit in the arse in the end.</p>
<p>When AS3 came out, the early version, it actually wasn&#8217;t that different (for me) from AS2.  AddChild vs. createNewMovieClip, aka the new DisplayList was pretty easy.  Protected vs. private, and other namespace features made sense pretty quickly too.  The only hard thing was learning the immensely large new API.  It&#8217;s one thing to remember that a CheckBox emits both a click AND a change event in the Flex SDK, and you need to care about the latter&#8230; it&#8217;s another to remember that navigateToURL is in the flash.utils.* package.  Even the built-in stuff is immensely large.</p>
<p>What is interesting, though, is that I never developed a hatred for AS2.  Because of the complete and utter lack of communication between the 2 AVM&#8217;s, combined with Flex&#8217; slow rise to power meant a lot of parallel AS2 and AS3 work.  If you asked me if I wanted to do an AS2 or AS3 project, I&#8217;d probably respond AS3, unless your deadline was a week or less.</p>
<p>&#8230;and that&#8217;s my point.  Writing AS3 is slow.  It&#8217;s finally reached a maturity as a programming language; a real language, not a &#8220;scripting language&#8221; because it now officially compiles to machine code on 3 differentchip sets.  As a real language, it has all the features (most, hehe&#8230; private constructor what, abstract classes who?) a traditional programmer would expect from a programming language.</p>
<p>My boss, a professional Java Developer who now does a lot of PHP (and I&#8217;m sure has a larger illustrious career I don&#8217;t know about yet), said that a strongly-typed language should be making me faster, not slower.</p>
<p>In shock and anger, I pulled my phone from my pocket, called up &#8220;Bullshit&#8221;, and requested he leap upon my bosses&#8217; head.</p>
<p>There is a reason I click the &#8220;Flash&#8221; icon on my task bar, do File &gt; New, hit F9, and test a new String parsing algorithm there in AS3 instead of going the ActionScript project route in Flex Builder&#8230; or even &#8220;new ActionScript File&#8221; and making it launching it as an Application.  Flash is faster.  Sure, once you get rolling, you can have some good test bed code combined with test cases even run by ANT in Flex.  I&#8217;d still argue the instant gratification in Flash beats Flex.</p>
<p>&#8230;but it doesn&#8217;t stop there.  I mean, after hearing about things such as &#8220;int promotion&#8221; and &#8220;compiler optimizations based on clear, strongly-typed variables&#8221;, AS3 can get out of control.  Parsing a pipe (|) delimited string, properties separated by commas (,), with name value pairs separated by equal signs (=) has gone from 15 lines in pre AS1 to 40 in AS3 if you ensure every parsed variable is strongly typed.  For an algorithm that&#8217;s only run one time very rarely, AS3 doesn&#8217;t really benefit here.</p>
<p>Fine?  Then why not NOT strongly type so much?  Only strongly-type to ensure you don&#8217;t get any type casting exceptions, and move on with life?</p>
<p>&#8230;because&#8230; I &#8230; can&#8217;t.  It&#8217;s hard to stop.  I&#8217;ve been trained by the fear of the software engineer army to strongly-type everything.  To ensure the compiler has a crystal clear understanding of everything, and that my code will run at moch-10.  I can have faith that the old AVM will never even need gas, because the key in the ignition for it will never be turned.  All the code I write now ensures everything is typed, and all namespaces are correct.</p>
<p>I&#8217;ve tried abandoning namespaces and using *, Object, and even just abandoning type-casting in general for quick tests or prototypes.  It&#8217;s just as time goes on, I find the code I add to those things starts getting more AS3 like.</p>
<p>Bottom line, it&#8217;s really really hard to break the habit.  Every time I go back to AS2 for some random project, I&#8217;m reminded how damn fast it is to create things in it.  Half the exceptions I get in AS3 I really don&#8217;t care about, and don&#8217;t need to know about; they don&#8217;t impact the project from working if they are small in scope.  A lot of my data is either primitives or simply arrays.</p>
<p>For smaller projects, AS2 is still the bomb.  For smaller algorithms, less strong-typing just results in less, more readable code.</p>
<p>I can see why professional Ruby, JavaScript, and Python developers still exist.  I don&#8217;t care what anyone says, loosely typed scripting languages still kick ass.  While I wish their engines weren&#8217;t so damn slow for larger projects, lately, I&#8217;ve just been finding that for a lot of smaller scoped projects or areas, I&#8217;m glad I have the loosely typed option.</p>
<p>While I fully believe the majority of the industry will use C# for Silverlight 1.1 going forward, MAN was it refreshing to write it in JavaScript for 1.0.  Taking a break from AS3&#8217;s strict ways was great.  <a href="http:">SmartFoxServer</a> has an option similar to later builds of <a href="http://www.osflash.org/red5/" herf="http://osflash.org/red5">Red5</a>.  You can write in the standard Java for performance reasons OR in your scripting language of choice (JavaScript, Python, etc).  For a lot of work, scripting languages are good enough, and since they are good enough, you can write less code, faster to get the same result.  That last part is debatable, but not by me.  After having a career in both, to me they both clearly have their place.</p>
<p>&#8230;what I can&#8217;t figure out is how to drop the &#8220;good habits&#8221; that AS3 teaches you to go back to fast and furious ways of scripting languages.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2007/10/i-have-a-hard-time-writing-slow-actionscript-3.html/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Invalidation Strategies for Flash Player</title>
		<link>https://jessewarden.com/2007/01/invalidation-strategies-for-flash-player.html</link>
					<comments>https://jessewarden.com/2007/01/invalidation-strategies-for-flash-player.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 31 Jan 2007 20:18:29 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Director]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1122</guid>

					<description><![CDATA[Skip Intro Had the honor of meeting up with an old friend yesterday. Chris Skogen, one of the talented gents at Gizmolabs, was my manager &#038; tech lead when I worked at BellSouth. He&#8217;s an extremely talented programmer, doing a lot of C, C++, assembly, and Java. Below is some of his team&#8217;s coding + [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="#invalidation_context">Skip Intro</a></p>
<p>Had the honor of meeting up with an old friend yesterday.  Chris Skogen, one of the talented gents at <a href="http://www.gizmolabs.net/">Gizmolabs</a>, was my manager &#038; tech lead when I worked at BellSouth.  He&#8217;s an extremely talented programmer, doing a lot of C, C++, assembly, and Java.  Below is some of his team&#8217;s coding + hardware work in action.  This is not actually the record music playing, but rather, the record&#8217;s time code being used to scrub an MP3.  Plethora of other features but&#8230; isn&#8217;t this one alone enough to make you go, &#8220;OMFG!!!&#8221;</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/pvimjLiNS9Y"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/pvimjLiNS9Y" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/5LYWAEa18hk"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/5LYWAEa18hk" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p>He&#8217;s been doing it for a long time, and since I respect anyone who has a lot of experience in this industry, I pretty much spent the day absorbing every word.  We were supposed to meet for lunch since her majesty and I skipped out on going to a Christmas party of a friend of his that we RSVP&#8217;d too.  Figured, I could buy him lunch and he&#8217;d forgive me.  Anyway, instead of staying an hour at noon, stayed till 7pm mainly talking shop, finishing with Gears of War coop.  He&#8217;s the guy that got me typing my brackets on a new line after he and another C coder at BellSouth started making fun of my if statements (<a href="http://www.adobe.com/products/flex/flexbuilder/">Flex Builder</a> is biased against this way of coding, btw&#8230;bleh !).  He was also the guy who first introduced me to the <a href="http://www.dofactory.com/Patterns/PatternCommand.aspx">Command</a> <a href="http://en.wikipedia.org/wiki/Command_pattern">pattern</a>, and wondered if the Flash community had any framework like that.  Four months later, I was all into <a href="http://www.osflash.org/arp">ARP</a>, which has the Command pattern as its central crux.</p>
<p>I spent some of the time asking about invalidation methods.  Invalidation being defined as &#8220;painting the screen with pixels in an efficient manner&#8221;, also known as redraw.  Since he develops for multiple platforms, he knows the libraries and strategies involved for screen redrawing on Linux, OSX, Windows, and various devices.  I remember one of Bruce Epstein&#8217;s books, <a href="http://www.oreilly.com/catalog/directnut/">Director in a Nutshell</a> describing &#8220;The Great White Flash&#8221;.  It&#8217;s been so long I can&#8217;t really remember the cause, but the redraw of the window caused the application to start with this white flash, basically a redraw of the screen that sabotaged the initial experience with various ways around it.  When Chris would describe Windows redraw events compared to other platforms, it sounded all too familiar.  The Director mantra back then was, &#8220;If you build it on PC, you know for a FACT it&#8217;ll work just fine on a Mac.  If you develop on a Mac, it will NOT work on a PC.&#8221;  A lot of the intricacies of when something redraws an area, how you have to manage it, etc. seemed really gross, and painful.  However, like a lot of C guys I&#8217;ve talked to, he seemed to take it stride, view it as a conquered fiefdom, and begin to relay the double-buffering strategy employed in some cross platform library.  Must&#8230; get&#8230; that&#8230; attitude!!!!</p>
<p>In particular, I recently had the good fortune of getting <a href="http://www.gregburch.com/">Greg Burch&#8217;s</a>, bloke employed at <a href="http://www.adobe.com">Adobe</a> on the Mobile Team, feedback on my <a href="http://www.adobe.com/products/flashlite/">Flash Lite</a> 2 component set.  The guy clearly knows his stuff, has massive knowledge in ActionScript optimization, and is very focused in achieving that goal.  He also understands mobile GUI development as well as the experience users expect on devices.  After talking to him on the phone, I can clearly see why he is employed with Adobe on the Mobile Team.  In our discussions, both offline and on, he basically set out in the opposite direction as me.  While I was originally interested in creating a nice API as a tertiary benefit to the original 3 goals, he instead approached it from a &#8220;we must make it lightweight&#8221;.  Even 10 seconds of his recounting of past projects with no supportive details clearly indicates that he has earned in blood a lot of great techniques and understandings.  Basically, he is making the code look as much like ActionScript 1 as possible (even C for that matter), not as an intention, just a result that optimization and ActionScript 2 &#038; OOP do not go hand in hand.  While he is confident and happy with these potential changes, I was somewhat disheartened.  His suggestions all met the first goal of &#8220;if it runs Flash Lite 2, the framework needs to work&#8221;, but I felt it was losing a lot of it&#8217;s utility to developers; they would now have to do a lot more work (typing basically, and not all of it comfortable).  However, if you are going to run under the insane CPU &#038; RAM restraints, no one is left unscathed.  <a href="http://en.wikipedia.org/wiki/Welcome_to_the_suck">Welcome to the suck</a>.</p>
<p>After talking to Chris, however, he pretty much corroborated everything Greg was suggesting and had little empathy for my forlorn yearning for OOP.  This lead to a very interesting discussion about inheritance vs. interfaces.  He&#8217;s a big believer in programming by contract; having classes implement interfaces instead of using the extends keyword.  After hearing him recount the challenges of being &#8220;a slave to the base class&#8221;, I totally understand and agree&#8230; for large scale projects with uber-knowledgeable individuals.  If you are on a deadline, and have a variety of skill sets on your team, abstracting details seems to me like a good thing.  I hate those projects, though,hehe!  Flash Lite, however, has no room for interfaces as they too are basically objects like classes, and take up RAM.  I digress I know, but it&#8217;s fun stuff.</p>
<p><a name="invalidation_context"></a><br />
Anyway, let me give some context first.  There are multiple ways to redraw things to the screen in the Flash Player, with different repercussions in performance and developer approach.  You basically have the following options in <a href="http://www.adobe.com/platform/">Flash Player</a> 9:</p>
<ol>
<li>DisplayList</li>
<li>Blitting</li>
<li>Drawing</li>
</ol>
<p>Both blitting and drawing depend on the DisplayList, but they are not mutually exclusive.  The DisplayList is the act of adding a graphic object to a list of &#8220;things to draw&#8221;.  If the Flash Player see&#8217;s it in there, it&#8217;ll get drawn.  You can remove the object from the list, and it&#8217;ll no longer be drawn.  This has a lot of positive repercussions in that a graphical object can exist in RAM without taking up CPU resources being drawn.  Flash Player 8 and below did not do this.  If you created a graphical object, like a MovieClip for example, even if it was invisible, it would still take up system resources being drawn every frame.</p>
<p>Suddenly, the programmer now has control over what is drawn, and when.  This makes coding easier, too, because you can choose when to draw things, therefore writing more scalable &#038; efficient applications&#8230; just what Flex needed when you started writing these gigantor Enterprise apps that made Flash Player 7 &#038; 8 scream in pain.</p>
<p>There is something, however, more efficient than the above.  This is called blitting.  It is the act of painting a bitmap to the screen.  A Bitmap is a DisplayObject in Flash Player 9, meaning it can be painted, or not painted, to the screen at the developer&#8217;s discretion.  While Flash Player 9 has removed the problem of &#8220;too many objects == too much system resources&#8221;, Bitmap never has this problem even if those objects are in the billions.  This is because you only ever have 1 bitmap (usually) that you paint on top of.  Therefore, you actually have multiple small objects in memory that are then redrawn at some interval to the screen, and ONLY those areas that have changed.  This is actually what is probably under the hood of the Flash Player, written in C/C++, that is redrawing all of your DisplayObjects.  However, if you know going in that you&#8217;ll have a lot of objects which aren&#8217;t interactive, blitting is a wonderful technique that scales well, uses less RAM than the DisplayObject , and CPU is minimal because Bitmaps don&#8217;t use a lot of CPU to redraw compared to vector graphics.  This technique can be used in the Flash Player 8 as well, although, there is no DisplayList so even if the Bitmap isn&#8217;t being visibly shown, it is still taking up CPU cycles to redraw it.  Both can be combined with double-buffering where you paint to an off-screen bitmap, and copy pixels onto a on screen, smaller one.</p>
<p>Finally, there is drawing.  Drawing is the act of using the Flash Player&#8217;s vector drawing API to create vector graphics.  These are wonderful in that the engine to create them is small, and they take next to no RAM.  They look nice in terms of anti-aliasing, and the API is simple enough you can create some pretty sophisticated results by building atop that foundation.  The downside is that drawing doesn&#8217;t scale very well.  A lot of &#8220;anything&#8221; in Flash Player 8 and below used a lot of CPU, and vector content is definitely a prime candidate to use those resources.  There are various techniques you can apply in Flash Player 8 and 9 using cacheAsBitmap, scrollRect, or even blitting the resulting drawing and thus removing the vector part.</p>
<p>The way each of the above is rendered is doing on an interval, called a &#8220;frame&#8221;.  Flash Player was built originally as a vector to pixel renderer , and later incorporated a timeline to show changes in these images over time.  In effect, a lightweight animation tool was the result, hence Flash Player&#8217;s rising popularity for design in the Internet during the modem, low bandwidth days.  These frame ticks run on some developer / designer set time code, like &#8220;15 frames a second&#8221;, or &#8220;120 frames a second&#8221;.</p>
<p>What that means is that the Flash Player will update the screen 15 times a second, but more no more.  It is not guaranteed to update the screen that many times for various reasons such as screen refresh, CPU usage, etc., but it IS guaranteed not to update more than the set frame rate.  This is useful for animators to convey motion.  As Ted Patrick has <a href="http://www.onflex.org/ted/2005/07/flash-player-mental-model-elastic.php">written about in the past</a>, the introduction of the ActionScript Virtual Machine share&#8217;s this time between rendering.  The important thing to understand, though, is that ActionScript for the most part is single-threaded.  This means that once it starts, it doesn&#8217;t stop till it&#8217;s done running all of it&#8217;s code.  If you have a lot of &#8220;stuff&#8221; happening when a user clicks a button, that code is run, and nothing else can really happen in the meantime.  There are various threads that the Flash Player spawns to handle network operations, keep tabs to see if theAVM stopped responding for whatever reason, but none of these are accessible to the developer.  Bottom line, if you&#8217;re code is busy doing things, you&#8217;ve allocated less time to the Flash Player graphics renderer to redraw the screen, and thus you&#8217;ll lose redraw fidelity.</p>
<p>How do you then lessen this impact, and create an effective invalidation solution given the technology?</p>
<p>In <a href="http://www.adobe.com/products/flash/">Flash</a> MX and Flash MX 2004, an invalidation routine was created that ensured that components were only ever changed visually once per frame.  This was done because while the developer was more than capable of changing a <a href="http://livedocs.macromedia.com/flash/mx2004/main_7_2/00001484.html">MovieClip</a>&#8216;s x and y coordinates on the screen multiple times in a few milliseconds, it would only actually render once.  Changing those properties directly actually triggers a need to redraw event in the Player, and thus you are being very inefficient in your use of the Flash Player.  To remove this problem, the first technique was a convention called drawing and invalidation.  You would have a few private properties in a base class that abstracted MovieClip , and allowed you to change it&#8217;s properties with the ability to then invalidate on your own time.  Some would invalidate immediately.  It was a good first attempt, but was more formalized and better implemented when ActionScript 2 came onto the scene in Flash MX 2004.  While AS2 still outputted the same bytecode as AS, it still implemented the main function that made this possible, introduced flexibly in Flash Player 6: onEnterFrame.</p>
<p>The enter frame event is something emitted every frame.  In Flash Player 9, DisplayObjects do this regardless of whether something has a timeline or not, 1 frame or 10 billion such as MovieClip &#038; <a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/Sprite.html">Sprite</a>.  While the name itself is somewhat legacy, it is useful to understand what it really means.  First, it is guaranteed to be fired once per frame.  Unlike <a href="http://livedocs.macromedia.com/flex/2/langref/flash/utils/package.html#setInterval()">setInterval</a> which can fire randomly (at most 10 times per frame, or less for longer intervals), you can depend on the onEnterFrame function to run when you expect it to run.  When it actually fires within a frame context isn&#8217;t important.  What is important to know is that it is synonymous with &#8220;redrawing now&#8221;.  Since you can only redraw once per frame, it fits in nicely with knowing when you are best suited to do so effectively.  FlashMX &#038; Flash MX 2004 would use the invalidate method for graphical components.  This meant, &#8220;redraw next frame&#8221;.  So, the developer could change a bunch of properties, styles, etc. and theMovieClip wouldn&#8217;t actually redraw itself visually (by setting _x, _width, applying a color, etc.) until the next screen redrawn, no matter how many were changed, or how many times the same one was changed.</p>
<p>This was great in theory, but a lot of the race conditions with measurement and styles made it hard to effectively do.  Regardless, it was THE best way to ensure effective redraw.  This was slightly improved upon in the Flex 1.5 framework with a more formal system:<br />
&#8211; set a property<br />
&#8211; if it causes a redraw, invalidate a draw function, otherwise have that property&#8217;s dirty flag set<br />
&#8211; if a dirty flag was set, determine what type of redraw to perform, a draw, size, measurement, or style change<br />
&#8211; invalidate one of those functions if applicable<br />
&#8211; one of the invalidated functions would run at the next redraw</p>
<p>This made possible larger Flash Player applications.  The problem was, though, that even if things weren&#8217;t redrawing and just sitting there, they were still taking up resources, regardless of the wonderful invalidation implementation.  Hence Flash Player 9&#8217;s DisplayList being invented.</p>
<p>Blitting is kind of a low-level, boilerplate affair, and it&#8217;s currently not used a lot by the Flex framework.  This is a shame.  While the Charting components and Flex components both make extensive use of caching as bitmap and setting effective scrollrects , I think for some of the non-interactive parts of charting, they could scale effectively better.  I have not, however, read reports of problems with the charting components not scaling.  Props to the power of ActionScript 3!</p>
<p>A significant amount of the framework is being drawn with vector graphics via the Drawing API, and all uses extensive use of theDisplayList.</p>
<p>So, returning to my invalidation implementation, I chose to use the Flex framework invalidation methodology in my implementation of a Flash Lite 2 component framework.  Granted, I didn&#8217;t have the <a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/DisplayObject.html#event:added">added</a> or <a href="http://livedocs.macromedia.com/flex/2/langref/flash/display/DisplayObject.html#event:render">render</a> event&#8217;s, but enter frame is all you really need.  Seemed logical enough; you want something to efficiently redraw on a device that REALLY needs to be efficient.  As I later found, some on my own, some with Greg&#8217;s help, there are a few problems with this.</p>
<p>1. Most dirty flags in the Flex framework start out with default values of false.  This default value takes up RAM, RAM that I don&#8217;t have.<br />
2. I am making an assumption that a developer wants to have the component redrawn when they change a property.  This is an incorrect assumption to make.</p>
<p>Regarding #1, one solution is to simply not define default values for the dirty flags.  The if ( flag == true ) still results in a correct evaluation if the default value is false, undefined, or null.  That way, the flags would only last for 1 frame.  Unfortunately, that is still a lot because Objects, what all data-types derive and thus extend in pre-AS3, take up a lot of overhead so even a Boolean has a valid cost to think about.</p>
<p>Regarding #2, there are numerous cases where data isn&#8217;t ready for consumption by GUI controls, or some other process hasn&#8217;t completed yet.  Some of that data or relevant process may be needed to do internal calculations for redrawing.  I&#8217;m slowly to see ways for developers to implement their own call to invalidate.  So, instead of doing this:</p>
<p>attachMovie ( ComboBox.SYMBOL_NAME, &#8220;cb&#8221;, 0 );<br />
cb.prompt = &#8220;&#8211; select a value &#8211;&#8220;;<br />
cb.dataProvider = someArray;<br />
cb.setClickHandler ( this, onClick );</p>
<p>You would instead do (per Greg):</p>
<p>attachMovie ( ComboBox.SYMBOL_NAME, &#8220;cb&#8221;, 0 );<br />
cb.prompt = &#8220;&#8211; select a value &#8211;&#8220;;<br />
cb.dataProvider = someArray;<br />
cb.setClickHandler ( this, onClick );<br />
cb.invalidate();</p>
<p>Notice the only difference is the addition of a invalidate method call.  This triggers a redraw.  The former, every single public property set, and some methods may trigger a redraw, usually via getter / setters (which have a lot of overhead&#8230;).  Yes, it&#8217;s efficient in that it supports an infinite amount of property setting with only one redraw, but again, I&#8217;m assuming the developer WANTS to redraw.  Maybe they have the data, want to set it, throw it away, but are awaiting more.  Maybe they need the above, plus they are doing it to multiple controls over a sequence so they can effectively deliver a large amount of data through a small series of steps the device can handle.  Later, they can then redraw when they deem it necessarey to do so.</p>
<p>In discussing this stratgedy with Chris, he&#8217;d recount a lot of techniques Apple&#8217;s Cocoa uses as well as some of his own implementations.  He found the most successful (and I&#8217;m paraphrasing badly here) is when parents are responsible for drawing their children.  This allows you can redraw just one section of the GUI, or if you need to redraw everything, you can call invalidate on the main parent, and it&#8217;ll cascade down the tree of children, who in turn call invalidate on their children.</p>
<p>What I find interesting is that this technique could not only work in Flash Lite 2 / 2.1 which is basically Flash Player 7, but also in blitting in Flash Player 8 as well as utilizing the DisplayObject API in Flash Player 9.  In fact, it&#8217;d be really nice if Flex 3 gave us this option.  I think the reason it&#8217;s not in Flex 2 is a lot of people need an accessible framework; meaning, low learning curve. Some people have never developed or programmed before, or not done that level of heavy GUI work, etc.  Bottom line, I think the decision by the Flex team is &#8220;developers shouldn&#8217;t have to know how the Flash Player works to effectively write applications atop it&#8221;.  I totally agree.  I also believe, however, that there should be a way to optionally allow those of us who know what we&#8217;re doing to redraw when we see fit.  It&#8217;d really help those larger applications, or when you are trying to squeeze all you can out of an implementation, say, Flash Lite 3 which could possibly use the new AVM on a device :: crosses fingers ::.</p>
<p>While it&#8217;s more work for the developer, I understand why Greg suggested what he did now, and have more context as to the ramifications what power this really gives developers.  I guess I just don&#8217;t really have in my head best practices on implementing this.  The abstracted invalidation model that Flex has removes any care, and provides a nice convention for me to build atop of.  Now, I suddenly have to care when I redraw things which could be different for each GUI control.  Furthermore, the less utility I add to a framework by making it more efficient instead, the more the expectations of the Flash Lite community shifts to wanting more features out of controls.  Not sure the best approaches to either.  Fun, regardless!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2007/01/invalidation-strategies-for-flash-player.html/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Yahoo Toolbar with Shockwave</title>
		<link>https://jessewarden.com/2004/06/yahoo-toolbar-with-shockwave.html</link>
					<comments>https://jessewarden.com/2004/06/yahoo-toolbar-with-shockwave.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Thu, 03 Jun 2004 14:05:43 +0000</pubDate>
				<category><![CDATA[Director]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=539</guid>

					<description><![CDATA[Went to Yugop yesterday and had to install Shockwave on this machine because it&#8217;s new. However, after going through the don&#8217;t-remember-my-page-and-close-my-browser-you-coohh#$#$ installer, I noticed part of the installation process had the option of installing Yahoo toolbar. Maybe I&#8217;ve been out of the Director community and missed this detail, but why the integration? What&#8217;s the point [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Went to <a href="http://surface.yugop.com/">Yugop</a> yesterday and had to install Shockwave on this machine because it&#8217;s new.  However, after going through the don&#8217;t-remember-my-page-and-close-my-browser-you-coohh#$#$ installer, I noticed part of the installation process had the option of installing Yahoo toolbar.  Maybe I&#8217;ve been out of the Director community and missed this detail, but why the integration?  What&#8217;s the point of offering it?  Can you write extensions via Shockwave?  It was really confusing as to why that was added to the installation process, and although I am on a G12 (or whatever&#8217;s faster than a T3), I was still a little irritated that something I didn&#8217;t ask for was potentially downloaded with Shockwave.  Just thought it was weird.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2004/06/yahoo-toolbar-with-shockwave.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Lamenting Jingo</title>
		<link>https://jessewarden.com/2004/01/lamenting-jingo.html</link>
					<comments>https://jessewarden.com/2004/01/lamenting-jingo.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 14 Jan 2004 06:30:17 +0000</pubDate>
				<category><![CDATA[Director]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=393</guid>

					<description><![CDATA[So I&#8217;m sitting there watching Breeze, it&#8217;s Live by the way, and it&#8217;s obviously solved it&#8217;s technical challenges with ease, a mad &#8220;hurray&#8221;! We learn about Director MX 2004 and all it has new to offer, and even before it&#8217;s begun, your having the urge to fill Macromedia&#8217;s coffer. Scarfing on pizza, downing mad soda, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>So I&#8217;m sitting there watching Breeze, it&#8217;s Live by the way,<br />
and it&#8217;s obviously solved it&#8217;s technical challenges with ease, a mad &#8220;hurray&#8221;!</p>
<p>We learn about Director MX 2004 and all it has new to offer, and even before it&#8217;s begun,<br />
your having the urge to fill Macromedia&#8217;s coffer.</p>
<p>Scarfing on pizza, downing mad soda,<br />
I see familiar names from fellow designers and codah&#8217;z.</p>
<p>Now, I dig the DVD (ROM), I dig the external editing, the sprite &amp; channel naming,<br />
and the Stage that can dock while authoring.</p>
<p>But I think most what I dig, regardless of the slow bytecode, is the JavaScript Jingo,<br />
implemented via open-source ECMA from Lingo.</p>
<p>I hope Java guys dig it, open source hounds try it out,<br />
and a few Flashers do a round about&#8230; face.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2004/01/lamenting-jingo.html/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
	</channel>
</rss>
