<?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>Design &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/category/design/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Thu, 17 Sep 2009 17:58:45 +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>Design &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>AIR App: Powerz &#8211; Play Dungeons &#038; Dragons 4th Edition Faster</title>
		<link>https://jessewarden.com/2009/09/air-app-powerz-play-dnd-faster.html</link>
					<comments>https://jessewarden.com/2009/09/air-app-powerz-play-dnd-faster.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 08 Sep 2009 19:19:32 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Appz]]></category>
		<category><![CDATA[Awesome]]></category>
		<category><![CDATA[Branding]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1758</guid>

					<description><![CDATA[This is a long post, so I&#8217;ve provided a short version, and content links to relevant sections if you want to skip around. Short Version I&#8217;ve built an AIR application in my spare time using Flex that helps you play Dungeons &#38; Dragons 4th edition faster. It took 6 months in my spare time and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This is a long post, so I&#8217;ve provided a short version, and content links to relevant sections if you want to skip around.</p>
<p><strong>Short Version<br />
</strong></p>
<p><a href="http://jessewarden.com/archives/powerz/start-page-preview.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Powerz Start Page" src="http://jessewarden.com/archives/powerz/start-page-preview.jpg" alt="Powerz Start Page" align="left" /></a>I&#8217;ve built an <a href="http://adobe.com/products/air/">AIR</a> application in my spare time using <a href="http://adobe.com/products/flex/">Flex</a> that helps you play <a href="http://www.wizards.com/default.asp?x=dnd/4dnd/dndtestdrive">Dungeons &amp; Dragons 4th edition</a> faster.  It took 6 months in my spare time and cost around $50k to build, and $40 a month to maintain.</p>
<p><a href="http://powerzapp.com/screenshots.html">See</a> and <a href="http://powerzapp.com/download.html">download it here</a>.</p>
<p>It was created in response to my new players, who are tech saavy, having a slow time getting a game going.  I copied the design metaphor used in MMORPG games, as well as creating an online database via <a href="http://www.djangoproject.com/">Django</a> of user submitted content to help the process go faster, as well as supporting house rules.  In doing market research, I found my product is for a younger generation, and this makes it challenging to market.  I used an Iterative/Agile development process to ensure it got completed.</p>
<p>The app had 3 goals: make money, make our games quicker &amp; easier, and prove to myself I could execute.  I succeeded in the latter 2, and failed in the making money&#8230; so far.</p>
<p><span id="more-1758"></span></p>
<hr />
<p><strong>Contents</strong></p>
<ul>
<li><a href="#preface">Preface</a></li>
<li><a href="#introduction">Introduction: Why the need for Powerz?</a></li>
<li><a href="#thepowerofpowerbars">The Power of Power Bars</a></li>
<li><a href="#whyair">Why AIR?</a></li>
<li><a href="#whydjango">Why Django?</a></li>
<li><a href="#selfinflictediterations">Self-Inflicted Iterations</a></li>
<li><a href="#quicknoteonscrum">Quick Note on Scrum</a></li>
<li><a href="#schedule">Schedule</a></li>
<li><a href="#technicaldetails">Technical Details</a></li>
<li><a href="#flex3vs4">Flex 3 vs 4</a></li>
<li><a href="#libraries">Libraries</a></li>
<li><a href="#monkeypatches">Monkey Patches</a></li>
<li><a href="#developmentchallenges">Development Challenges</a></li>
<li><a href="#featurecasulaties">Feature Casualties</a></li>
<li><a href="#marketingandresearch">Marketing &amp; Research</a></li>
<li><a href="#targetaudience">Target Audience</a></li>
<li><a href="#triptodragoncon">Trip to Dragon*Con</a></li>
<li><a href="#failures">Failures</a></li>
<li><a href="#successes">Successes</a></li>
<li><a href="#conclusions">Conclusions</a></li>
</ul>
<p><a name="preface"></a><strong>Preface</strong></p>
<p><a href="http://powerzapp.com/screenshots/Power-Melee_Basic_Attack.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Melee Attack Power" src="http://powerzapp.com/screenshots/Power-Melee_Basic_Attack.jpg" alt="Melee Attack Power" align="left" /></a>I&#8217;ve spent my spare time the last 6 months building an AIR application called &#8220;<a href="http://powerzapp.com">Powerz</a>&#8220;.  Simply, it is an application that allows you to play <a href="http://www.wizards.com/default.asp?x=dnd/4dnd/dndtestdrive">Dungeons &amp; Dragons 4th edition</a> a lot quicker.  It was built in response to newer players hastily flipping back and forth through rule book pages, all the while lamenting how much easier it is to do this in <a href="http://worldofwarcraft.com">World of Warcraft</a>.</p>
<p>It also became a test for myself.  I wanted to see if I could release a product on my own, perhaps even turn a profit.  I&#8217;ve been attempting for 5 years to create an online version of D&amp;D, fueled by the wishful emails of those around the world who both managed to get their hands on alpha builds and validated my target market.  That, and I had recently become an advisor for a startup, so needed creditability that I had produced results in the product sphere as opposed to the service industry which I&#8217;m currently in (<a href="http://adobe.com/products/flex/">Flex</a> &amp; <a href="http://adobe.com/products/flash/">Flash</a> consulting/contracting).  I had just recently completed my first official Agile/<a href="http://aboutscrum.com/">Scrum</a> project getting a startup client to (*ahem* near) Alpha, and upon reflecting, knew I was now capable of releasing a real product on my own.</p>
<p><a name="introduction"></a><strong>Introduction: Why the need for Powerz?</strong></p>
<p>D&amp;D 4th edition was created, in my opinion, to cater to, what I call, the &#8220;WoW Generation&#8221;.  <a href="http://www.wizards.com/">Wizards of the Coast</a>, the company also responsible for <a href="http://www.wizards.com/magic/multiverse/default.aspx">Magic the Gathering</a>, owns the D&amp;D game.  They recognized that to gain broader appeal of a game traditionally challenging to learn and losing market share to video games, they needed to not only make it easier to learn and play, but also target this gaming demographic.  The new rules do just that.  They are easier to learn for those not inclined to &#8220;read a bunch of rules&#8221;, and the new power concept allows a gaming group to quickly ascertain how they can contribute to the group.</p>
<p><a href="http://powerzapp.com/screenshots/Power-Last_Ditch_Evasion.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Power - Last Ditch Evasion" src="http://powerzapp.com/screenshots/Power-Last_Ditch_Evasion.jpg" alt="Power - Last Ditch Evasion" align="right" /></a>The problem with the WoW gen&#8217;s, though, is that they grew up texting, and not only want, but EXPECT digital tools to be there, as well as cross device.  D&amp;D, at least currently, doesn&#8217;t totally work like that.  They have made great strides in years to provide online digital content, such as Character Builders, rules compendiums, and online magazines with exclusive content.  What&#8217;s funny to me is that the main goal for most of this content is to be printed to paper and used during gameplay.  If you want to use these tools strictly digitally, you can, but that wasn&#8217;t why they were made.  Ultimately, your still going to be using &#8220;real&#8221; books during gameplay.</p>
<p>When you have a background in <a href="http://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game">MMORPG&#8217;s</a>, or even just gaming on consoles, you look at rule books as primitive, and cumbersome, and ultimately, not as fun.  They, like me, know this problem has already been solved digitally.</p>
<p>What kept coming up as a hassle during gameplay with this new generation of gamers was referencing their character&#8217;s powers, the main crux of 4th edition rules.  I figured if I could solve this problem digitally, I&#8217;d be onto something special.  I knew I couldn&#8217;t solve everything; I&#8217;d tried multiple times in the past to digitize the entire D&amp;D experience, and I simply didn&#8217;t have enough resources to pull that off.  For a digital power bar, however, I didn&#8217;t need a lot of resources&#8230;</p>
<p><a name="thepowerofpowerbars"></a><strong>The Power of Power Bars</strong></p>
<p><a href="http://jessewarden.com/archives/powerz/powerz-bar-preview.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Powerz Bar Preview" src="http://jessewarden.com/archives/powerz/powerz-bar-preview.jpg" alt="Powerz Bar Preview" align="left" /></a>If you&#8217;ve ever played <a href="http://worldofwarcraft.com">World of Warcraft</a>, <a href="http://starwarsgalaxies.com">Star Wars Galaxies</a>, <a href="http://ddo.com">DDO</a>, or any other Massively Multiplayer Online Role Playing Game, they have the concept of a power bar.  There are a series of slots on the bottom, like a horizontal list in Flex, and in each you can drop a power into.  It&#8217;ll be represented as a little image icon that infers what the power does.  Upon rolling over them, they provide details of what they do.  Upon clicking them, you use them.  While veteran players use keyboard shortcuts and macros, this GUI concept is the core to most MMORPG&#8217;s today.  Players familiar with such games &#8220;get it&#8221;, just like you and I understand to click &amp; drag on a scroll bar to scroll text.</p>
<figure style="width: 387px" class="wp-caption aligncenter"><a href="http://jessewarden.com/archives/powerz/powerbar-wow.jpg"><img decoding="async" src="http://jessewarden.com/archives/powerz/powerbar-wow.jpg" alt="World of Warcraft Power Bar" width="387" height="32" /></a><figcaption class="wp-caption-text">World of Warcraft Power Bar</figcaption></figure>
<p>This interface element is important because in MMO&#8217;s, those powers, while forming the crux of the 2 most important aspects in those games, chatting &amp; fighting, they also serve another subtle purpose.  RPG games in general are technical.  They basically take a lot of math, specifically ratio&#8217;s &amp; percentages, and personify the results through the use of chance.  While neat from a geek perspective, newbie players, especially those not tech saavy, can get overwhelmed by information overload.</p>
<p><a href="http://jessewarden.com/archives/powerz/powerbar-ddo.jpg"><img decoding="async" class="aligncenter" title="Dungeons &amp; Dragons Online Power Bar" src="http://jessewarden.com/archives/powerz/powerbar-ddo.jpg" alt="" width="393" height="42" /></a></p>
<p>Just like how Word hides non-frequently accessed information in menu&#8217;s that reveal, so to do MMORPG&#8217;s &#8220;reveal&#8221; information when the user requests it.  Additionally, since these interface elements are actually over top of a 3D virtual world, they need to be as non-intrusive as possible.</p>
<p><a href="http://jessewarden.com/archives/powerz/powerbar-swg.jpg"><img decoding="async" class="aligncenter" title="Star Wars Galaxies Power Bar" src="http://jessewarden.com/archives/powerz/powerbar-swg.jpg" alt="" width="348" height="36" /></a></p>
<p>In short, they provide the user with the ability to learn what their character can do, when she/he can do it, all using a mnemonicÂ device of visual icons that relate to the action in a non-intrusive interface.</p>
<p><a name="whyair"></a><strong>Why AIR?</strong></p>
<p><a href="http://adobe.com/products/air/"><img decoding="async" style="padding-right: 4px;" title="Adobe AIR" src="http://jessewarden.com/archives/powerz/adobe_air.jpg" alt="Adobe AIR" align="left" /></a><a href="http://jessewarden.com/2007/06/what-rhymes-with-air-i-dont-care.html">I&#8217;ve bashed her in the past</a> andÂ got shot down by desktop developers who came out of the wood work. Â ToÂ this day I still don&#8217;t get clients asking me to build AIR apps. Â Regardless, it was a pretty clear choice as to why I needed AIR: offline capability to run Flex apps.</p>
<p>You can play D&amp;D ANYWHERE.  I&#8217;ve played at friends houses, at a <a href="http://www.turkey-creek.com/">camp site</a> deep in the woods, on a plane, a bus, etc.  All of these places don&#8217;t always have internet.  Nowadays with wireless and cell phones that have decent coverage, you can <a href="http://9to5mac.com/iPhone-3G-tethering">tether</a> on your device to ensure you have an internet connection just about everywhere.  &#8220;Just about&#8221; isn&#8217;t good enough; if you can&#8217;t use it, or it&#8217;s a spotty connection, you view the &#8220;<a href="http://en.wikipedia.org/wiki/Cloud_computing">cloud</a>&#8221; as holding your data hostage vs. some benevolent caretaker.</p>
<p>So, I didn&#8217;t want an internet connection to be a requirement, and thus, targeted AIR vs. a web browser.  If you know me, using the Flex SDK was a no-brainer.  If you don&#8217;t, here&#8217;s the run down:</p>
<ol>
<li>Needs to work on as many platforms as possible.  AIR works on most PC, Mac, and enough Linux distros.  I use a Mac mostly, my gaming group uses Linux and Windows.  The Character Builder for DDi works on a PC with .NET.  Using <a href="http://www.codeweavers.com/products/">CrossOver</a> or <a href="http://www.parallels.com/">Parallels</a> isn&#8217;t cheap.  Buying an OS + emulation software when you already have a working computer is lamesauce.</li>
<li>Writing my own component framework is time consuming.  It took me 6 months to build <a href="http://code.google.com/p/shurikencomponents/">Shuriken</a> for Flash Lite 2, I&#8217;m still working on <a href="http://code.google.com/p/coreplay/">CorePlay</a> for pure AS3&#8230; so if I ended up doing that, I&#8217;d spend all my time on developing code to develop code vs. finishing my product.  Flex has all the components &amp; styling features I need, Flex 4 more so.</li>
<li>I make my living developing in Flex Builder.  This is what I&#8217;m most comfortable, and thus productive in.</li>
</ol>
<p><a name="whydjango"></a><strong>Why Django?</strong></p>
<p><a href="http://djangoproject.com"><img decoding="async" style="padding-right: 4px;" title="Django Project" src="http://jessewarden.com/archives/powerz/django_logo.gif" alt="Django Project" align="left" /></a>Once I personally started using Powerz in my game sessions, taking her for a test run with my gaming group, a new problem arose: setup time.  While battles finally went a lot faster, and focused more on strategy and chaos vs. wtf can I do, actually STARTING to play took awhile.  Players had to manually input the powers from the Players Handbook into Powerz.  Without <a href="http://en.wikipedia.org/wiki/Optical_character_recognition">OCR</a>, this is a lot of meticulous hand typing. Â This included those who played with made up house rules.</p>
<p><a href="http://jessewarden.com/archives/powerz/Community-login.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Community Login" src="http://jessewarden.com/archives/powerz/Community-login.jpg" alt="Community Login" align="right" /></a>I thought, why couldn&#8217;t we do something like the CDDB days of old?  <a href="http://en.wikipedia.org/wiki/CDDB">CDDB</a> was an online database where people would submit CD track lists.  That way, when you turned a CD into MP3&#8217;s, it automatically filled out the song names and album name for you. Â By the time it got popular, most CD&#8217;s were in the database so you didn&#8217;t need to submit them yourself.  This was the first Web 2.0 (aka the read-write web) phenomenon that I remember.  Basically you are leveraging the community, much like <a href="http://wikipedia.com">Wikipedia</a> leverages the knowledge from every contributor in the world.  This is a double-edged sword, as sometimes CDDB would have incorrect data without an easy way to change it.  Wikipedia has had its fair share of drama about article authenticity, and who defines the truth when multiple authors disagree about the same topic.</p>
<p>Regardless, both are using the forces of good, and showcase how leveraging community input can greatly benefit the masses.  Two heads are better than one, and thousands are just f&#8217;ing awesome.</p>
<p>I set out to build an online database of powers so when one person submitted it, everyone else could use it. Â The most common ones, say all 1st level ones for all classes, would be ready to go.  That way, even new players could quickly get up to speed.  Powerz is supposed to speed up gameplay, and this would be the final lynchpin.</p>
<p><a href="http://jessewarden.com/archives/powerz/Community-main.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Community Main" src="http://jessewarden.com/archives/powerz/Community-main.jpg" alt="Community Main" align="left" /></a>I hate, and suck, and server-side anything.  I&#8217;d argue the majority of arguments, philosophical debates, and technical podcasts about software are regarding server-side development (iPhone apps aside).  When people talk about <a href="http://martinfowler.com/articles/injection.html">Inversion of Control</a>, server clustering, or <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming">Aspect Orientated Programming</a>, my eyes glaze over, I <a href="http://jessewarden.com/archives/facepalm.jpg">face palm</a>, and am like, &#8220;Wow&#8230; that&#8217;ll solve like 10% of my problems.  That 10% is on the server&#8230; WHERE MY CODE ISN&#8217;T RUNNING!&#8221;  To be fair, the majority of all cool software is running on the server.  Most Flex apps I&#8217;ve written are merely pretty faces for pimp server-side action.  The problem with server-side stuff is that you can&#8217;t see it.  I&#8217;m a visual person, I went to art school, and if I can&#8217;t see it, to me it&#8217;s boring.  I like seeing visual results from my coding efforts, and no, logging statements don&#8217;t count.</p>
<p>So&#8230; I knew I was in trouble with my idea.  Every time in the past I had such an idea, I merely turned to <a href="http://php.net">PHP</a>, since finding good server devs looking to work for free is really hard.  PHP is available on just about every web host, for free, and there are a lot of resources out on the internet for it.  It&#8217;s also very similar in syntax to ActionScript, so learning it was easy.  The problem is, I&#8217;m not &#8220;in&#8221; the PHP community. Â Creating a user account system may seem like a reasonable programming task to me, but an ignorant waste of time to a veteran PHP programmer who has used <a href="http://framework.zend.com/?fle=Adobe">Zend</a> or <a href="http://drupal.org/">Drupal</a> on many projects.  Most of my endeavors into larger PHP systems have failed because the workload was just to large for me to tackle both the front and back-end.  I knew this time I HAD to find whatever framework others were using for a user account system.  I&#8217;ve failed to find like-minded server-side developers in the past for such ideas.  I actually had a friend offer his services for this very project, but I was concerned I might actually make money, and I make a rule of not mixing friends and business.</p>
<p><a href="http://jessewarden.com/archives/powerz/Community-01.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Community Powers Search Results" src="http://jessewarden.com/archives/powerz/Community-01.jpg" alt="Community Powers Search Results" align="right" /></a>However, I had just got off a <a href="http://www.djangoproject.com/">Django</a> project.  Having spent 5 years or so evangelizing <a href="http://amfphp.org/">AMFPHP</a>, yet never actually successfully getting native object passing working, I decided I&#8217;d see how easy it was in Python.  Additionally, my experiences using Django&#8217;s user administration interface along with <a href="http://pyamf.org/">PyAMF</a> Flex integration was a very pleasant experience.  Since I&#8217;d already taking a look at Ruby on Rails awhile ago, I figured I&#8217;d give Python a chance.</p>
<p>Best decision ever.</p>
<p>I don&#8217;t know Terminal, my SQL knowledge equates to SELECT * FROM *, and I&#8217;ve never coded Python before.  Django is the shit.  It&#8217;s so easy, I learned my way around Terminal enough to not only &#8220;run a local server&#8221; (I know, right?), sync my database, and even play with <a href="http://www.python.org/">Python</a> code, just like <a href="http://adobe.com/products/director/">Director&#8217;s</a> message window.  I even learned how to remote ssh into my production server, install PyAMF remotely, and deploy my code.  Django is merely a framework atop of Python, but you have to know all that insane crud just to do it.  Oh yeah, and I ended up buying <a href="http://macromates.com/">TextMate</a> (in part to <a href="http://twitter.com/kristoferjoseph">Kristofer&#8217;s</a> recommendation) to use for coding Python.</p>
<p><a href="http://jessewarden.com/archives/powerz/Community-02.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Community Characters Search Results" src="http://jessewarden.com/archives/powerz/Community-02.jpg" alt="Community Characters Search Results" align="left" /></a>Speaking of Python, it&#8217;s a LOT like ActionScript 1.  Really strange going back to loose typing.  Unfortunately, the only real benefit I found was more succinct code.  The Aspect Orienated/<a href="http://en.wikipedia.org/wiki/Functional_programming">Functional</a> stuff that uses the <a href="http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators">Decorator pattern</a> with metadata tags for designating what methods require the user to be logged in only works for more recent builds of Python.  Still&#8230; I got it and think its hawt.  Additionally, the fact that you can import just a method of a class and use it is neat.  There&#8217;s been a request on an unnamed list requesting ActionScript 3 get this ability so when you import 1 method of a library, you don&#8217;t end up importing the whole library, and thus incur the file size penalty.  Since SWF is for web, this makes a lot of sense in investing in such a feature.  Python&#8217;s for loops?  Holy fish, advanced, and really cool stuff, way easier than doing similiar things in ActionScript 3 (faster? doubt it).  I still don&#8217;t get their slicing syntax, but I&#8217;m sure if I did it every day I would.</p>
<p>So why Django?  Within 3 days I had learned Python, Django, and PyAMF integration to have a working user authentication system working in my Flex app.  Blah blah blah&#8230; open source has no value&#8230; blah blah blah.</p>
<p>&#8230;I suck at debugging it, though, a friend told me to look into Python logging, but I just ran out of time&#8230; print print print OT OT OT.  That, and my admin only works on my local box, not the remote server&#8230; *ahem*.</p>
<p><a name="selfinflictediterations"></a><strong>Self-Inflicted Iterations</strong></p>
<p>All my personal projects suffered from the most common symptom that affects a lot of us software developers: starting new projects is ALWAYS more fun than finishing them.  You accrue a long list of awesome ideas that never make it to fruition.  Of those, a few you blog about.  Knowing this industry, a bunch are probably worthy of actually finishing and marketing because they&#8217;ll make bling&#8230; but&#8230; we&#8217;re a busy bunch.  That, or you see no point because you have no clue how to monetize them.</p>
<p>I&#8217;ve had this happen 3 times with my major D&amp;D online project in 5 years, 3 times with some games, and once with every other project that wasn&#8217;t specifically created FOR a blog entry since my career started.  I almost swore a blood oath before starting Powerz.  I didn&#8217;t really have too, though, because of circumstances.</p>
<p>First, I had just got off the best gig I&#8217;ve had in my entire career.  It was working for a startup as a service consultant through <a href="http://enablus.com/">Enablus</a>.  So, I make bling, but see $0 bling when they insanely succeed.  Quite the soul reflection project.  Second, I read a book called &#8220;<a href="http://www.amazon.com/Rich-Dad-Poor-Money-That-Middle/dp/0446677450/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1252451054&amp;sr=1-1">Rich Dad, Poor Dad</a>&#8221; upon a recommendation form <a href="http://www.dropthezero.com/">a friend</a>, and was then pissed for 3 weeks straight.  Third, I now knew how to do Agile development which was better than my made up iterative process of the past.  Fourth, D&amp;D 4th edition really is slow if you don&#8217;t know your powers by heart; it&#8217;s even worse for DM&#8217;s who have 50 billion other things to keep track of.  I needed this tool!</p>
<p>I made a simple rule.  If I was going to work on Powers, I needed to release SOMETHING a week from when I started.  If I grabbed a beer and started coding on a Friday night, there better be a new build, with associated forum post, WORKING up online the following Friday.  If I had something come up, like say real, paying work, or my kid(s) got sick, or whatever&#8230;. then 2 weeks. If that didn&#8217;t work because, say I only had 4 hours in a 2 week period, then I&#8217;d lock myself into finishing just one feature before I was allowed to work on anything else.</p>
<p>Failure was not an option.  To fail is to fail myself, and everything I stood for, and for those who listened to my blog entries full of &#8220;advice&#8221;.  If I did fail, it meant Agile didn&#8217;t work, and all <a href="http://jessewarden.com/2008/11/agile-chronicles-1-stressful.html">10 of those blog entries</a> I wrote espousing it were utter bullshit, and I needed to die in a fire.  Seriously.  After being so frustrated for so long about &#8220;figuring out&#8221; software development for the past 9 years, this was the line in the sand.  Pick your platform, pick your tool, pick your framework, and either put up, or shut up. Â Get something done vs. proselytizing about &#8220;how to program&#8221; with nothing to show for it.</p>
<p>In short, finish something I started.</p>
<p>6 months later, I&#8217;ve released version 1.0.  That feels f&#8217;ing good.  Really good.  That, and D&amp;D is easier to play now for me, and a lot of others.</p>
<p><a name="quicknoteonscrum"></a><strong>Quick Note on Scrum</strong></p>
<p>Remember, if you ever hear about this Agile or Scrum stuff, and are like, &#8220;Wtf?&#8221;, don&#8217;t stress.  All you need to know about using Scrum correctly is release working software with a new feature every week (or every 2 weeks).  That&#8217;s it, that&#8217;s all you need to do to be JXL Scrum compliant.  If you don&#8217;t do that, you should really take a look at what you are really trying to accomplish.</p>
<p>If you&#8217;re a manager who&#8217;s trying to implement it, and your developers keep going off on paths they weren&#8217;t assigned, play to their ego&#8217;s.  For example, if someone says, &#8220;I could write a login form in less than a day!&#8221;.  If it then takes them 8 days for the form to actually work, call them on it.  I guarantee you they&#8217;ll spout off about &#8220;OOP/Framework setup&#8221;, or some other lack-of-<a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>-adherence excuse.  That&#8217;s ok; the point here is to show them that what they thought they could do, they didn&#8217;t actually execute on.  They&#8217;ll either re-assess what it really takes to develop even simple things, or you&#8217;ll come to a mutual understanding of what &#8220;working&#8221; really means.</p>
<p>I had to do that.  In 2001, I created a stock charting application in Flash 5, AS1 pre-#initclip days, knowing very little OOP, zero best practices, and no frameworks, in 1 month.  Today, that same application would take me 4 to 6 months, and cost 177% more per hour.  Granted, the devil is in the details (quality of user experience, less bugs, more features, I actually know what I&#8217;m doing now + have experience, etc), but that, to me, says something about my ability to execute.  Those in software know faster doesn&#8217;t mean better&#8230; but when you start splitting hairs about even simple features, you find some surprising things about yourself.  I call this, programmer self-awareness through Scrum.</p>
<p><a name="schedule"></a><strong>Schedule</strong></p>
<p>For those who are interested, here is how my schedule worked out.  When I mention a week, I&#8217;m speaking about a week of development time.  So, if I started coding on Friday night, but only put in 4 hours for an entire week&#8230; I certainly had very little to offer in a true build.  So, my first rule was, if I could do a week, do a week, and release.  If I couldn&#8217;t because I had real work to do, then I&#8217;d instead get 1 feature DONE and release.  This was still hard, because even if I could only devote like 2 hours a week to my personal project, it HAD to be on that one feature, and I had to force myself to finish it so I could get a build up, and move onto another.  It was far from perfect, but it&#8217;s as Scrum as I could get with my free time&#8230; and it guaranteed I&#8217;d release multiple builds with enough room for user feedback.</p>
<ul>
<li>First 3 weeks, spent designing &amp; doing initial prototyping (aka design phase in Waterfall).  I had no gig lined up, so worked 3 weeks straight on my own stuff.  I worked for about 7 days straight in Photoshop CS3.</li>
<li>Work 1 hour one night, 4 hours another, 8 maybe on a weekend, or perhaps none for 4 days in a row.  Bottom line, I still followed my weekly/bi-weekly/single feature release schedule.</li>
<li>One build took 6 weeks (Alpha 9 to Beta 1) because I had to learn Django and do real work at the same time.  Some weeks during that time, I only worked 1 to 2 hours per week, others, I&#8217;d work 3 days straight.</li>
<li>Some weeks were coding.  Some weeks were pure Photoshop.  Three weeks was learning/implementing Django.  Four weeks was setting up the website, porting all code &amp; assets to work on it, and installing all forum and blog software.  All was mixed amongst each other.  Since I was doing everything myself.</li>
<li>I did Analytics once in the beginning, and then changed it 2 weeks later when I couldn&#8217;t understand my own metrics.</li>
<li>Start Date: Around April 5th, 2009.</li>
<li>End Date: Hopefully September 26th, 2009.</li>
<li>Total Time: 6 months</li>
</ul>
<p>It&#8217;s hard for me to predict how long Powerz would of taken had I been able to spend 100% of my time on it.  A lot of things came up, positively &amp; negatively, during development that adversely affected the timeline.  Users asked for features, work flows I originally tried didn&#8217;t pan out, Photoshop designs took a few tries, and learning Django staggered overall development on the Community portion.  All I know is, Flex Builder 3 and Flex SDK 3.3 is foogin&#8217; solid for what I needed.</p>
<p><a name="technicaldetails"></a><strong>Technical Details</strong></p>
<p>The <a href="http://powerzapp.com">web site</a> is pretty standard stuff.  <a href="http://powerzapp.com/forum/">Forum</a> is <a href="http://www.phpbb.com/">PHPBB</a>, and blog is vanilla install of <a href="http://wordpress.org/">WordPress</a>.  Hopefully post 1.0 launch, I can modify the blog to match the rest of the site look and feel (excluding forum) via <a href="http://www.themedreamer.com/">the Dreamer</a>, an easier way to design WordPress sites via <a href="http://adobe.com/products/dreamweaver/">Dreamweaver</a>.  Her majesty used it for her site and it&#8217;s pretty cool. Â I also need to redo my <a href="http://jessewarden.com/projects/gamingtools/powerz/screencast/">dated screen cast</a>, and tons of other things.</p>
<p>While I did the original web site designs in <a href="http://adobe.com/products/photoshop/">Photoshop</a>, the site itself was done by her majesty and I in <a href="http://adobe.com/products/fireworks/">Fireworks</a>. Â Fireworks&#8217; text handling is superior to Photoshop&#8217;s, and now that CS4 shares the same font engine, you can get good looking interfaces. Â If Photoshop were to improve their text handling capabilities, I&#8217;d probably still use Fireworks for it&#8217;s easier object editing + grouping + moving functionality. Â For the web with lots of content, it was just quicker for me and her majesty.</p>
<p>For the video, shot using a <a href="http://www.amazon.com/Sony-DCR-SR200-Handycam-Camcorder-Optical/dp/B000M3GJKU/ref=sr_1_1?ie=UTF8&amp;s=electronics&amp;qid=1253188966&amp;sr=8-1">Sony DCR-SR200</a>, and edited in <a href="http://www.adobe.com/products/premiere/">Premiere</a> CS3 &amp; <a href="http://adobe.com/products/aftereffects/">After Effects</a> CS3. Â <a href="http://www.telestream.net/screen-flow/overview.htm">ScreenFlow</a> was used for demoing the software.</p>
<p><a name="flex3vs4"></a><strong>Flex 3 vs 4</strong></p>
<p>Yes, I very much wanted to use <a href="http://labs.adobe.com/technologies/flashbuilder4/">Flex 4</a>.  Unlike Flex 2 Alpha, however, she&#8217;s unstable and changes all the time.  You could build some pretty Enterprise stuff on Flex 2, Beta 1.  I would never do such a thing with Flex 4 just because she&#8217;s in such flux, and the IDE (+ <a href="http://labs.adobe.com/technologies/flashcatalyst/">Catalyst</a> builds) is somewhat flaky.  Obviously 6 months later things are more stable&#8230; but they still changed a lot (fx prefix, Halo interop, etc.).</p>
<p>I used Flex Builder 3 &amp; Flex SDK 3.2&#8230; then 3.3&#8230; then 3.4.  I use AIR 1.5.2.  AIR still has a bug where you can&#8217;t seem to use compc (aka Library Projects) because of some weird Vector bug in playerglobals.swc or something.  So I just gave up on using a library project.</p>
<p><a name="libraries"></a><strong>Libraries</strong></p>
<p>I have 1 Flex project, and a ton of libraries.  Ones of note are:</p>
<ul>
<li>Cliff Hall&#8217;s <a href="http://puremvc.org/">PureMVC</a></li>
<li>Ely&#8217;s <a href="http://www.quietlyscheming.com/blog/2007/01/23/some-thoughts-on-doubt-on-flex-as-the-best-option-orhow-i-made-my-flex-images-stop-dancing/">SuperImage</a> (that I <a href="http://jessewarden.com/2009/08/fix-for-elys-superimage.html">patched</a>)</li>
<li>Claus Wahlers&#8217; and Max Herkender&#8217;s <a href="http://codeazur.com.br/lab/fzip/">FZip</a> for reading &amp; writing my custom file formats</li>
<li>Christian Cantrell&#8217;s <a href="http://code.google.com/p/as3nativealertlib/">NativeAlert</a> ported to Flex</li>
<li><a href="http://code.google.com/p/gaforflash/">Google Analytics</a></li>
<li><a href="http://google.com/adsense">Google AdSense</a></li>
<li><a href="http://code.google.com/p/as3corelib/">as3corelib</a> for <a href="http://json.org">JSON</a>, used in reading &amp; writing custom file format</li>
<li>Adobe AIR Update framework (which refuses to GTFO of RAM) with custom badges written in Flash (zomg!)</li>
<li>my DebugMax window which is a lame attempt to copy that older Flash debug window (the Portuguese one)</li>
<li>&#8230;and Grden&#8217;s <a href="http://rockonflash.wordpress.com/2007/05/16/as3-localtolocal-and-coordinatetools/">localToLocal function</a></li>
<li>Server is running Django on Python, using PyAMF to send AMF objects back and forth. I&#8217;m only using one class; getting nested ValueObjects to work with inherited and one to many relationships in Django&#8217;s Models was nigh impossible to debug. Â For now, I just pass simple Objects which are uber-easy to parse.</li>
</ul>
<p>Blah blah blah&#8230; open source provides no value&#8230; blah blah blah.</p>
<p><a name="monkeypatches"></a><strong>Monkey Patches</strong></p>
<ol>
<li>Commented out a bunch ofÂ <a href="http://bugs.adobe.com/jira/browse/SDK-20784">InterManagerRequest</a> code in AIR&#8217;s NativeDragManagerImpl class. Doing drag operations would cause the app to lock up for 7 to 11 seconds. Not sure if this was fixed in 3.4, but I don&#8217;t load multiple Flex apps with different SDK versions, so don&#8217;t need this code.</li>
<li>Added bitmap smoothing in SWFLoader, which Flex SDK 3.4 (or 3.3 I forget which, added officially)</li>
<li>Added a numLines getter to Label for more accurate text height measurement&#8230; which I then later didn&#8217;t use. Â Proper invalidation fixed my measurement bug; text can be finicky, but if you wait a frame&#8230;&#8230;</li>
</ol>
<p><a name="developmentchallenges"></a><strong>Development Challenges</strong></p>
<p>There were 3 development challenges I faced.</p>
<p><a href="http://jessewarden.com/archives/powerz/Character-v2-preview.jpg"><img decoding="async" style="width: 160px; padding-right: 4px;" title="Character" src="http://jessewarden.com/archives/powerz/Character-v2-preview.jpg" alt="Character" align="right" /></a>The first was developing in AIR.  If you are using Flex in AIR, it&#8217;s nearly the same thing.  The hard parts were learning how Windows work, and their quirks (such as when does Window REALLY get its reference to nativeWindow?).  How do you design for this as a designer, and what is an appropriate design metaphor?  Multiple windows, or 1 window with many states?  Also, event bubbling doesn&#8217;t work with windows, since each has it&#8217;s own stage, so there was a learning curve of when to manually re-dispatch, and when to just hand off to PureMVC Mediators.</p>
<p>The second was learning to work with reading and writing files.  The FileReference class is EASY, but there are actually 3 classes (really you just work with 2) for AIR.  They too have intricacies to learn, and how you can abstract them, and what the costs are in doing so.  What was fun to figure out was how to associate a file with a document window in the PureMVC framework.  I really had a tough time trying to tightly couple something when you&#8217;re technically not supposed to tightly couple anything in programming.</p>
<p>The third was creating a file format.  I believe most traditional developers would of used some sort of serialization via ByteArray and the <a href="http://livedocs.adobe.com/flex/3/langref/flash/utils/IExternalizable.html">IExternalizable</a> interface for your objects.  To me, that stuff takes a lot of work, and isn&#8217;t easy for me to debug, nor verify if it worked.  Maybe to those who think in 0&#8217;s and 1&#8217;s, but not me.  It took some tinkering; I copied how SWC works. Â SWC is a ZIP file with some XML and binary assets all inside.  My file formats are basically the same thing; a ZIP file with a JSON text file holding the serialized object, images for any icons, and a text file determining what type the file format is (since you can&#8217;t rely on file extension).  This allowed me to open up the file to see it&#8217;s contents and confirm my code worked as well as perusing the JSON to see if my objects serialized correctly.</p>
<p>What was great about being the only developer was that I was also the designer and back-end developer. Â I knew how to design assets for Flex and could predict what I&#8217;d need designed.  As the back-end developer, I could create data that the client would need, thus making my job easier in both places.</p>
<p><a name="featurecasulaties"></a><strong>Feature Casualties</strong></p>
<p>I had 2 features that caused major scope creep, and thus extended how long it took.  They weren&#8217;t a waste of time, but as with every project, I learned something.</p>
<p>The first was the whole &#8220;document editing process&#8221; that people are used to.  You open a file, edit it, save it if it&#8217;s dirty, and close the &#8220;document&#8221;.  If you &#8220;Save As&#8230;&#8221;, you create a new file, yet use same window.  I didn&#8217;t use this model at first.  Instead, I just opened files, kept a reference to the file handle for each AIR window, and removed it when the window closed.  However, this is not how every other desktop application works.  Additionally, for those on network drives, you couldn&#8217;t really work with the files easily when moving things since it always had an opened file handle.  So, it was a pretty big re-write/re-factoring effort to put this functionality &amp; work flow in.  I know how to do it now, but I&#8217;m just glad no one asked for undo yet. *whew*</p>
<p>The second was pimping out Christian&#8217;s NativeAlert window.  I spent 3 days in <a href="http://adobe.com/products/aftereffects/">AfterEffects</a> when I was between gigs creating a transition in and transition out for the window. Â Instead of just popping in, it&#8217;d &#8220;materialize&#8221; in, all magical like.  To me, and one of my users, it looked awesome.  It got old after 2 uses because you had to wait for it and there are a few alerts when saving files.  If I speed it up any, it loses fidelity&#8230; so I just removed it.  It required a lot of custom code to make the alert do it&#8217;s modality magic in time with the transition.  I didn&#8217;t get to use any of it.</p>
<div>
<p><object id="player" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="450" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="player" /><param name="allowfullscreen" value="true" /><param name="src" value="http://jessewarden.com/projects/gamingtools/powerz/oldalerts/preview/alert_skin.swf" /><param name="align" value="middle" /><param name="quality" value="high" /><embed id="player" type="application/x-shockwave-flash" width="450" height="400" src="http://jessewarden.com/projects/gamingtools/powerz/oldalerts/preview/alert_skin.swf" quality="high" align="middle" allowfullscreen="true" name="player"></embed></object></div>
<p><a name="marketingandresearch"></a><strong>Marketing &amp; Research</strong></p>
<p>This was the most interesting for me.  While I&#8217;m not a good salesman, I feel that I get online marketing and branding.  I also feel like I understand my target audience, since I&#8217;m part of that audience.  I actually did market research (aka learning my target audience and their needs) both at the start and during development.</p>
<p>I looked online and read about what WotC was offering, and then I looked at all the 3rd party offerings.  I took a few for a spin.  I read user reviews on forums and blogs, especially the passionate ones.  I wanted to gain a better understanding of what they liked about the software, and how they expected software to work.  There wasn&#8217;t really a pattern.  The bitching about lack of Linux/Mac support was low, and a lot of the 3rd parties utilized Java.  For those that didn&#8217;t, there we already well documented ways of installing a Windows emulator.</p>
<p>One thing that reading the forums did for me was really educate me on the current flux of the industry.  Technology really has changed, and continues to change, table top gaming.  WotC is in an interesting time of the market, and frankly I&#8217;ve think they&#8217;ve done a good job on positioning their D&amp;D brand &amp; rules for 4th edition to perform well with these changes.  Where they haven&#8217;t done entirely well is executing both their community aspects online, as well as delivering their associated digital tools.</p>
<p>The short version of WotC&#8217;s transition to the digital age is, as magazine sales declined, WotC first sold their magazines to <a href="http://paizo.com/">Piazo</a>, and later brought them back and incorporated them into their new online subscription service; they no longer print magazines.  You get the monthly magazines digitally, exclusive content, as well as access to their desktop and web tools.  There are good and bad things about this.  Some of their software isn&#8217;t released years later, but the ones that are are definitely nice.</p>
<p><a name="targetaudience"></a><strong>Target Audience</strong></p>
<p>I wrote something similar to this over a the <a href="powerzapp.com/blog/2009/09/ddis-character-builder-powerz.html">Powerz blog</a>. Â Bottom line, there is a lot of confusion, at least for me, on who really is the target demographic.  The high level view is that the older players prefer tangible rule books, whereas the younger ones are more apt to digital content.  That&#8217;s where the black and white views end.  Some from both groups are fine with digital content, but intend to transfer that content to paper in use in their games.  Others would prefer to wholly digital, yet still play in person with their friends; like a LAN party.</p>
<p>I intended to confirm this suspicion beyond just talking online&#8230;</p>
<p><a name="triptodragoncon"></a><strong>Trip to Dragon*Con</strong></p>
<p>&#8230;so I took a trip to <a href="http://dragoncon.org">Dragon*Con</a> 2009 this year.  I go every so often to stock up on new dice as well as to see the <a href="http://www.501st.com/">501st</a>.  My goal this year was to promote Powerz, and meet potential customers.  I knew it would be challenging for a few reasons.  First off, finding D&amp;D players is actually hard.  It&#8217;s a huge Sci-fi &amp; fantasy conference; it&#8217;s not solely for D&amp;D&#8217;ers.  Additionally, most D&amp;D&#8217;ers who do go play with their friends at predefined tables in a reserved hotel ballroom.  These are usually niche groups, and while friendly, you can&#8217;t just barge in on them in a middle of game.  If someone did that to me during mine, I&#8217;d be really ticked off.  Additionally, the conference itself is confusing because it&#8217;s spaced around 4 semi-adjoining hotels (Hilton, Marriott, Sheraton, etc.), and signage isn&#8217;t large/verbose enough for you to get a clear picture of where you are, nor what events are happening where.  I knew it&#8217;d be hard.  Her majesty helped set my expectations to a reasonable level.</p>
<p>My first attempt was while waiting in dice line (like a food large buffet, except there are different colored dice you can choose from).  One particular customer was taking awhile to get his transaction finished, and was in a TF2 spy costume (I think), so I figured he was a good target.</p>
<p>&#8220;Hey chief, you play D&amp;D?&#8221;</p>
<p>&#8220;Yeah!&#8221;</p>
<p>&#8220;Cool, you play 4th edition?&#8221;</p>
<p>&#8220;Naw, 3.5.&#8221;</p>
<p>*sigh*</p>
<p>I then asked the attendant who was waiting on customers, but he didn&#8217;t play, just pointed to one of his co-workers; but they were UBER busy.  Even <a href="http://vimeo.com/6553056">Solid Snake briefly came out of his box</a> to browse their wares.  I didn&#8217;t want to annoy every customer, so moved to another vendor booth, full of D&amp;D books.</p>
<p>A girl was just sitting down in a chair, and lamenting about how good it was to sit down.  Prime target.</p>
<p>&#8220;Hey, you play D&amp;D?&#8221;</p>
<p>&#8220;Yeah&#8230;&#8221;</p>
<p>&#8220;4th edition?&#8221;</p>
<p>Irritatedly, &#8220;Only because my group made me&#8230;&#8221;</p>
<p>&#8220;Rad, do you mind if you ask you a few questions about some software I&#8217;m building?&#8221;</p>
<p>Cautious, and body language suggesting she was about run at the slightest sign I was a vampire, &#8220;Ooookkkayy&#8230;.&#8221;</p>
<p>I sat down next to her on the floor to make her feel more comfortable with my laptop, and briefly walked her through why I created Powerz, and what it does.</p>
<p>She immediately got excited, &#8220;Oh we already use that through our DM.  He uses WotC&#8217;s subscription service&#8230; DD something&#8230;&#8221;</p>
<p>&#8220;DDO or DDi?&#8221;</p>
<p>&#8220;Yeah.&#8221;</p>
<p>&#8220;Which one?&#8221;</p>
<p>She shrugged but excitedly explained, &#8220;I don&#8217;t know, but it&#8217;s great.  You can input all of your character data, and it prints out all your powers.  Our whole group does it.&#8221;</p>
<p>I then proceeded to ask her questions about how her group plays, and take notes.  Another gent from her gaming group joined in on the conversation, and motioned to a 3rd member who was also browsing books nearby.  After I had asked my questions, I thanked them for their time&#8230; and went looking for a bar.  I suddenly felt insecure, &#8216;How could DDi do all that?  There is no way, I&#8217;ve seen the screen shots, read the reviews&#8230;.&#8217;</p>
<p>While waiting for the bar tender who was overworked, and was already getting heckled by some disgruntled women next to me, I reflected on those I had talked to.  I knew a lot of the older generation was very pro-3.5, me included.  I really like, still, the 3.5 rules and felt they were akin to Macromedia&#8217;s Flash 8; the pinnacle of the company.  I started getting really depressed, and quickly started going over all of my past research in my head.</p>
<p>&#8230;then I remembered something the girl had said.  &#8220;Print them out.&#8221;  Print?  To paper?  wtf?  A smile came to my face, I gave up waiting on the bartender, and quickly headed to where I remembered the D&amp;D gaming tables being the previous year.  I stopped by the bellman&#8217;s desk to obtain some change so I could buy a few people beers in exchange for me pestering them with questions.</p>
<p>Paper.  That was really what I kept seeing.  The generation gap in that one prefers tangible assets to play with and the younger ones do not.  Again, it&#8217;s not that black and white sometimes, but it&#8217;s still true.  While waiting 1 hour and 40 minutes in line, I met a father who had brought his 11 year old daughter to &#8220;meet&#8221; the creators of the online game she played.  It was some alternative to <a href="http://www.clubpenguin.com/">Club Penguin</a>,Â which was apparently ruined under new management.  She was really excited, and wanted to be a programmer when she grew up.  The father, clearly out of his element, saw me in my business professional getup, clearly over dressed for such a casual, and often costumed event, and seemed happy to have some one to talk to.  He found it strange that his daughter would spend his money on these online games for things that didn&#8217;t exist.  Instead of a new barbie doll, she&#8217;d get a some new, exclusive outfit for her online character.  We discussed her online habits, and those of her friends.  I explained what I did, and he was intrigued.</p>
<p>His daughter is my target audience.  The girls and boy in front of her, definitely early teens, one dressed up as <a href="http://en.wikipedia.org/wiki/Naruto">Naruto</a>, and others as <a href="http://en.wikipedia.org/wiki/List_of_InuYasha_characters#Sango">Sango</a> from InuYasha&#8230; those are my target audience.  They grew up texting, the internet always existed.  Those who were my age, dressed up as star trek characters&#8230; those probably aren&#8217;t my target audience.  These kids revel in online content, but still have social interactions with each other in person.</p>
<p>People like me, and the kids who are used to digital tools don&#8217;t mind <strong>keeping</strong> things digital.  Others see digital tools as a means to a paper end.</p>
<p>Upon leaving, I was convinced my target audience was mostly online and not at Dragon*Con&#8230; or at Dragon*Con WITH their PARENTS.  It was a great learning experience, even talking to the few people I did was helpful.</p>
<p><a name="failures"></a><strong>Failures</strong></p>
<p>The project as a whole, while successful, failed to meet one of its primary goals: make money.  It does have some successes, which I document below.  I had two main goals: releasing a product to prove I could execute, and to make money, enough to cover costs.  Currently, there is not enough community features to justify a subscription pricing model.  Additionally, I highly doubt I&#8217;ll get enough users to cover the costs via the ad supported model I use currently.</p>
<p>If you add up all the costs:</p>
<ul>
<li>Around 6 to 10 weeks of man hours (design, development, marketing + expenses)</li>
<li>hosting costs ($20 hosting + $20 Django container @ Mediatemple)</li>
</ul>
<p>The total comes to around $50,000.  Each month I go $40 more into the hole as the ads currently aren&#8217;t providing enough revenue to cover costs, and I haven&#8217;t figured out how to monetize the anonymous usage data.</p>
<p>I have a new idea that will actually generate revenue, and Powerz could actually be a companion application, so that&#8217;s a positive.</p>
<p>I&#8217;m not sure about this statement, but&#8230; here goes: I&#8217;m glad I know I&#8217;m capable of executing vs. knowing how to make money and not execute.  This, as opposed to someone who knows how to make money, but can&#8217;t execute.  The sad fact is, most rich people I read about know how to make money, and get other more qualified individuals to execute for them. Â Doh!</p>
<p>As a developer, however, I view this as yet another thing to learn, so that&#8217;s a good thing!  If I start learning how to monetize things better, I can focus my development efforts on what matter monetarily, and eventually find easier ways to leverage help vs. doing everything myself.  If at first you don&#8217;t succeed, try, try again.</p>
<p><a name="successes"></a><strong>Successes</strong></p>
<p>My favorite part, the wins.</p>
<ol>
<li>I now have a tool to make my D&amp;D gaming easier, and more fun.</li>
<li>Others now have access to the same tool, with the ability to help guide it&#8217;s direction.</li>
<li>I&#8217;ve proved to myself for the 2nd time that <a href="http://en.wikipedia.org/wiki/Iterative_and_incremental_development">Iterative development</a> works.</li>
<li>I&#8217;ve proved to myself that I can execute on my ideas.</li>
<li>I learned Django &amp; Python, and also learned not to hate the server-side.</li>
<li>I&#8217;ve learned, again, how much work it really takes beyond just coding to release a product.</li>
<li>I learned a little bit about engaging potential customers.</li>
<li>I learned a little bit about market research.</li>
<li>I learned how NOT to migrate data.</li>
<li>I now have something new to learn: How to make money with software.</li>
</ol>
<p><a name="conclusions"></a><strong>Conclusions</strong></p>
<p>While I&#8217;m disappointed I failed to monetize my work, it&#8217;s still early in the game, so maybe I&#8217;ll think of something.  Overall, I&#8217;m really happy to have finally finished one of personal projects into an actual product.  That, and I learned a ton. Soon, onto idea #2!</p>
<p>If you play D&amp;D 4th edition, check it out and let me know what you think.  If you don&#8217;t, but know people who do, let &#8217;em know; I&#8217;d be most appreciative!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2009/09/air-app-powerz-play-dnd-faster.html/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<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>Silverlight Controls</title>
		<link>https://jessewarden.com/2007/08/silverlight-controls.html</link>
					<comments>https://jessewarden.com/2007/08/silverlight-controls.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 21 Aug 2007 02:25:13 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WPF]]></category>
		<guid isPermaLink="false">http://jessewarden.com/2007/08/silverlight-controls.html</guid>

					<description><![CDATA[Check out these Silverlight control examples for both JavaScript (v1) and C# (v1.1) by Tim Heuer. I hate code behind, specifically the Flex implementation of the idea of separating your View from its implementation. The idea is you layout your GUI in MXML, and code it&#8217;s functionality in ActionScript. Gross. However, I have an inkling [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Check out these <a href="http://silverlight.net/">Silverlight</a> control examples for both <a href="http://timheuer.com/blog/archive/2007/08/19/implement-user-control-in-silverlight-user-controls.aspx">JavaScript (v1)</a> and <a href="http://timheuer.com/blog/archive/2007/08/20/silverlight-user-controls-silverlight-1_1.aspx">C# (v1.1)</a> by Tim Heuer.  I hate code behind, specifically the <a href="http://www.adobe.com/devnet/flex/quickstart/building_components_using_code_behind/">Flex implementation</a> of the idea of separating your View from its implementation.  The idea is you layout your GUI in MXML, and code it&#8217;s functionality in ActionScript.  Gross.</p>
<p>However, I have an inkling most traditional programmers love it specifically because when it comes to Design vs. OOP, they&#8217;ll side with OOP.  Not to mention .NET I think&#8230; like&#8230; works this way, hehe.  I side with Design because of my Flash background.  Either way, after seeing the example code in these posts, I have a much better appreciation for code behind and how it relates to Sliverlight&#8217;s implementation.  Specifically how the View&#8217;s GUI layout is done in XAML, and that XAML can be used in both <a href="http://www.microsoft.com/expression/products/overview.aspx?key=design">Design</a> and <a href="http://www.microsoft.com/expression/products/overview.aspx?key=blend">Blend</a>.  Hotness.</p>
<p>If the Adobe CS suite would ever catch the heck up, we could be doing stuff like this.  Imagine it:</p>
<p>&#8211; Designer makes comps in Photoshop or Fireworks<br />
&#8211; Designer can animate and layout screens in Flash<br />
&#8211; Flex or Flash Developer could then program ActionScript around those screens.</p>
<p>Vice-versa, the designer could design around the programmer&#8217;s implementation of screens.  Agency vs. software shop work-flow, but either way.  For now, us in the Adobe camp muddle through our production art / break up, and can only look on with envy.</p>
<p>Via <a href="http://russellmyers.com/">Russell Myers</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2007/08/silverlight-controls.html/feed</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Integrating a Flash Interface into Flex 2</title>
		<link>https://jessewarden.com/2006/12/integrating-a-flash-interface-into-flex-2.html</link>
					<comments>https://jessewarden.com/2006/12/integrating-a-flash-interface-into-flex-2.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Mon, 18 Dec 2006 01:10:16 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1104</guid>

					<description><![CDATA[Flash Design in Flex Application Proof of Concept. To see a video walk through describing the code base, skip to the Code Walkthrough section. To get the source, head to the Source Code section. Introduction Unlike my previous article on getting a Photoshop interface into Flex, my goals here are to integrate Flash with Flex, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.jessewarden.com/archives/flex/flash_flex/source/"><img decoding="async" src="http://www.jessewarden.com/archives/flex/flash_flex/flash_flex_smaller.jpg" alt="Flash Flex Design Example" style="margin-right: 4px" align="left" width="320" /></a></p>
<p><a href="http://www.jessewarden.com/archives/flex/flash_flex/source/">Flash Design in Flex Application Proof of Concept.</a></p>
<p>To see a video walk through describing the code base, skip to the <a href="#codewalkthrough">Code Walkthrough</a> section.</p>
<p>To get the source, head to the <a href="#sourcecode">Source Code</a> section.</p>
<p><strong>Introduction</strong></p>
<p>Unlike my previous article on getting a <a href="http://jessewarden.com/2006/12/getting-a-photoshop-design-into-flex-2.html">Photoshop interface into Flex</a>, my goals here are to integrate <a href="http://www.adobe.com/products/flash/">Flash</a> with <a href="http://www.adobe.com/products/flex/">Flex</a>, not treat it just as a design asset tool, but a contributor to the functionality of the client; using Flash for enhancing the design, and helping reduce transition code which tends to be verbose in Flex.  Below I&#8217;ve got a sample application that has integration of a complicated Flash design done using many different techniques.  I describe the reasons for why you would want to work this way, compare with other techniques, and walk through the code &amp; files in my example.</p>
<p>To be clear, this is a proof of concept, and uses a variety of techniques for the purposes of showing developers a variety of ways to do things.  It is not meant to indicate all ways to integrate Flash &amp; Flex, nor necessarily the best ways for all occasions.  Yes, I did in fact abuse this design fo schizzle my nizzle.</p>
<p><strong>Why Integration?</strong></p>
<p>Early on in Flex 2&#8217;s release, many Flash Developers recognized immediately that there were serious interop issues with Flash &amp; Flex.  This stems from the Flash Player 9&#8217;s new AVM, or ActionScript Virtual Machine that runs the new ActionScript 3 programming language.  ActionScript 2, ActionScript 1, and Flash Player 4 scripting on down uses the old AVM engine.  For security &amp; various other engineering reasons, the AVM&#8217;s cannot talk to each other.  This results in a SWF written in the Flash 8 IDE not being able to &#8220;talk&#8221; to a Flex 2 SWF.  The need for doing such is that the Flash IDE allows creation of design content that Flex cannot create on it&#8217;s own.  Flex 2 is an awesome programming environment compared to Flash, is approachable by developers, and is more geared towards large programming projects vs. multimedia.  Therefore, there is much incentive to get them to work together, and not just by using a loadMovie approach (dynamically loading in the Flash created SWF at runtime).</p>
<p>There are a few solutions out there.  One is do just that; load in the content dynamically by using a SWFLoader component in a Flex 2 project.  In the cases of a ActionScript 3 only project, you merely use the flash.display.Loader class.  If the content can operate on it&#8217;s own, and/or show design content correctly, this is satisfactory.</p>
<p>Another is to utilize a small set of classes to communicate via LocalConnection.  LocalConnetion is a class that allows multiple SWF&#8217;s on the same computer to talk to each other.  This helps bridge the AVM gap via viable API&#8217;s.  This is asynchronous, however, and error checking is faith based.</p>
<p>A third one is to utilize ExternalInterface.  Flash Player 8 introduced the ExternalInterface, and API to allow Flash Player to talk, synchronously (aka to block) with its hosting environment and receive callbacks from those method calls.  This not only allows strongly typing those external calls, but hosts can call into the SWF they are hosting as well.  In this method an API is used to have the Flash Player 8 SWF that is loaded into a Flex 2 to make a call to ExternalInterface which calls out to JavaScript on the hosting HTML page.  The hosting HTML page then forwards that call into the same Flex 2 SWF.  The Flex 2 SWF can do the same thing going back since both SWF&#8217;s can independently register callbacks in JavaScript.</p>
<p>A fourth option is to create the SWF using the <a href="http://labs.adobe.com/technologies/flash9as3preview/">Flash 9 Public Alpha</a> up on <a href="http://labs.adobe.com/">labs</a>.  It has the ability to not only use ActionScript 3 in the Flash IDE, but can also produce Flash Player 9 SWF&#8217;s.  One technique in doing this is to have have AS3 in the talk up to Flex who is loading it.  There are some small gotchas with &#8220;digging&#8221; your way up to talk to Flex, but it can be done.</p>
<p>So, why not use one of the above methods.  First off, Flash is powerful; it&#8217;s not just a design asset.  So, simply being loaded in isn&#8217;t good enough for some functionality; Flash &amp; Flex need to talk.  Secondly, LocalConnection isn&#8217;t syncronous, and doesn&#8217;t have good error checking.  This makes debugging long and frustrating.  Third, Externalnterface uses JavaScript.  You&#8217;ve now gone from 2 languages to 3; ActionScript 3, ActionScript 2 (or 1), and JavaScript as well as at least 2 different tools; Flex Builder for ActionScript 3 and JavaScript and Flash 8 for <as3.></as3.></p>
<p><strong>What does integration get you?</strong></p>
<p>I&#8217;m making it sound like integration is actually not the best solution, but rather, the less of the evils.  It is.  This is how things are, and even when Flash 9 is released, things wont be much better.  Regardless, Flash can produce design content that Flex cannot, and used together the tools are powerful with the right team.  Integrating Flash into the developers work flow rather than a design afterthought is the best thing to do on larger programming projects; which is typically what Flex is used for.  Either that, or the primary skill set on your team is traditional programming, and thus the natural choice is Flex vs. Flash, in which case, Flash is the odd man out, but still a valid contributor.</p>
<p>As mentioned above, you can use the same code.  You can write a Flash component in ActionScript 3, and use that same component in Flex.  You can integrate it into the same Flex project and check it into the same version control.  Traditional programmers will get that good feeling they typically don&#8217;t get with Flash projects with regards to maintenance.</p>
<p>You can compile the same code in both programs.  Since you are using ActionScript 3, Flex Builder, mxmlc, and Flash 9 can compile it.  Granted, there are caveats with embedding, and it&#8217;s a bitch.  If I knew RegExp, I&#8217;m sure I could get an <a href="http://ant.apache.org/">Ant</a> script to do it.  <a href="http://www.leifwells.com/">Leif</a> suggested to look into it, but this isn&#8217;t my strength.  Either way, you can even create Flash based test cases that you only use to test the Flash symbol class using the new Document class feature.  Flex, which typically wraps the symbol class created in Flash in a UIComponent class via composition, can have it&#8217;s own test case.</p>
<p>You can compile once in Flash.  Like the <a href="http://www.jessewarden.com/archives/2005/04/tried_eclipse_a.html">MTASC days of old</a>, mxmlc, the commandline Flex compiler, has the ability to do bytecode injection; aka compiling incrementally.  What this means is, you can compile in Flash for the mere sake of &#8220;getting the design assets into theSWF&#8221;.  If you later change the code in Flex, it&#8217;ll merely change the code, but leave the original SWF design assets intact.  Since you are embedding the symbol class into a main Flex SWF anyway, it&#8217;ll compile the assets in the Flash SWF into the main one, and use the updated code you just changed.  This is nice because it basically treats the SWF&#8217;s as little design asset DLL&#8217;s so to speak, and uses the most up to date code.  Unlike DLL&#8217;s, the SWF&#8217;s aren&#8217;t needed at runtime . It also means, you don&#8217;t necessarily need Flash to compile the Flex project, which scores major points with some traditional programmers.  Third party developers and/or contractors, based on requirements, can deliver just a SWF to some clients or a SWF and a class(es) without having to turn over a FLA.  I always give my source to clients, but I know some people have legal reasons for not being able to do so.</p>
<p>Finally, you can produce more types of components.  Since Flash can do some crazy design ideas that Flex can&#8217;t, or can&#8217;t quickly, you can integrate a lot of that into components to be used in Flex; 3D exported to FLV integration, various compositing, and other hardcore visualizations.</p>
<p><strong>How does integration work?</strong></p>
<p>For a simple example, you can see here where I use a <a href="http://jessewarden.com/2006/08/flash-9-button-in-flex-2.html">Flash 9 button in Flex 2</a>.</p>
<p>Integration starts with coding the component in Flash you wish to use in Flex.  Everything is a component; you think in that mentality, no matter how small the asset, and you&#8217;re good to go.  You write an AS3 class that represents the asset in Flash.  Like the AS2 days of old, you make the linkage ID of the symbol in Flash point to your AS3 class.  Since everything is a class now in Flash Player 9, your Flash design component asset is too.  This class, by my convention, ends in &#8220;Symbol&#8221;.  So, if you are creating a glowing button, it&#8217;s &#8220;GlowButtonSymbol&#8221;.  The &#8220;Symbol&#8221; denotes a Flash based asset.  That way, when you see the class amongst hundreds of others, you can immediately identify it as Flash specific.  Typically, the only thing you would do in Flex Builder to this class is add the Embed tag at the top.  Flash IDE will ignore the Embed tag when compiling.</p>
<p>The second step is to create a UIComponent based class in Flex.  This class will use your Flash class via composition.  You are not required to extend UIComponent; you could extend Container or Canvas for example.  A lot of Flash components, however, are design assets using low-level, boilerplate design functionality, so UIComponent usually is sufficient.  Everything has to be at least extend, or be wrapped in, a UIComponent.  If it&#8217;s not, Flex will throw an exception.</p>
<p>That&#8217;s it!</p>
<p>You can take this a little farther.  I like to create test cases, classes that test to see if the component, and only that component, works.  They basically throw it on the stage, and calls their exposed methods, if any.  This makes debugging a lot faster and a lot less frustrating.  It may seem to take longer at the beginning; it does.  You&#8217;ll find, though, in the long run you spend less time compiling your whole application only to find one stupid thing in your component made everything else blow up.</p>
<p>In Flash, this is just test_GlowButton.as.  This class is a Document class that you input into the Document class field in the Flash 9 IDE.  It attaches the component and hits some of it&#8217;s methods.  I like to use keyboard commands to test methods and such.  You can save this in the same Flash folder as well, thus segregating it from the rest of your code base.</p>
<p>In Flex, I basically do the same thing: make an application class, embed the component, and test it&#8217;s methods.  Flex Builder 2 makes me keep these on the root folder, though, since they are Application files&#8230; *cough* *Flex Team* *cough* *fixplz* *cough*.</p>
<p><strong>Pitfalls &amp; Frustrations</strong></p>
<p>&#8220;Is it that simple?&#8221;</p>
<p>No.  There are a plethora of gotchas.  I&#8217;ll try to list the most glaring here.</p>
<p>The most annoying is embedding of sound and images in Flex.  For example, Flex doesn&#8217;t have a library.  You therefore use embed tags in your Flex code.  This associates an external image or sound with a variable, and you can thenceforth treat that variable as a link to the asset.  This embeds it in theSWF, so you don&#8217;t have to worry about preloading, unlike using loadMovie on external images or Sound.loadSound for streaming MP3&#8217;s.  Flex wraps these assets in special classes called &#8220;Asset&#8221; classes.  Sort of the same thing when you import a sound into the Flash Library, and export it with a linkage name.  When you embed a Flash MovieClip symbol in an eternal SWF , it wraps it in a mx.core.MovieClipAsset class.  When you embed an image, it wraps it in a mx.core.BitmapAsset class.  This is nice.  You get strong-typing with embedded assets.</p>
<p>The bad news is, Flash doesn&#8217;t have access to these classes.  I reckon you could use intrinsics, a class that implies &#8220;it&#8217;ll be in the SWF at runtime&#8221;, and allows Flash to compile.  These have to be installed in the Flash 9 classes directory, though; if you put it in Flex&#8217;s project directory, things could get dazed &amp; confused and Flex isn&#8217;t from da erf.  If you have to recompile in Flash for whatever reason, you have to comment out the sound code, compile, then undo your comments.  Running Flash + Flex Builder at the same time with design intensive files open uses a lot of RAM, thus your comp goes slow, further exacerbating the frustration.</p>
<p>Fonts.  Are.  The.  WORST!  Flex 2.0.1, which isn&#8217;t yet, apparently has fixed some font importing challenges so you can import more than just polite ttf&#8217;s.  In the past, if you wanted the Flash Player 8 FlashType (aka Saffron) engine to show really nice looking fonts, you had to embed them using Flash 8, and then reference that SWF as the font source in the Flex CSS.  Either way, it&#8217;s commonplace to utilize fonts willy nilly in Flash without thinking about what you are embedding.  Static text fields, for example, embed fonts by default.  There of course is the issue between how they are embedded.  Bold or not?  Animation anti-alias or readability?  Did Flex already embed the font?  Who killed JR?</p>
<p>For example, I finally get a build working last night.  I then implement the preloader via the preload attribute on the Application tag.  Suddenly my navigation fonts don&#8217;t work.  Huh?  After 2 hours, I finally got it working again.  The Flashpreloader had 2 static text fields that were using the same font that Flex was using.  The difference?  The preloader wasn&#8217;t using the readability version.  It&#8217;s crap like that that eats away at your productivity and makes you want to start smoking again.  Fonts have always been hard in Flash; now you REALLY have to micro-manage that stuff.</p>
<p>Flex Builder caching is another gotcha.  When you recompile in Flash, you have to refresh your Flex Builder project.  I usually refresh the whole thing; I click on the Flex project base folder, and hit F5.  This can take as long as the dreaded &#8220;Building 0%&#8221; you see on the bottom right of Flex Builder / Eclipse.  Basically, it&#8217;s just copying the updated SWF to your bin folder and/or re-compiling it into our main Flex SWF .  This can drive you nuts if you are compiling, and fail to see your changes.  Refreshing isn&#8217;t always enough.  Sometimes, if you recompiled fonts or bitmap stuff in Flash, an actual Clean project is appropriate via the Project menu.  Takes longer, but it works EVERY time.  Good sanity check, that is.</p>
<p>Flash doing whack AS3 builds is another problem.  It&#8217;s probably because I have alpha bits, because sometimes, if your class path changes, it&#8217;ll compile theSWF, but not with the real class.  I&#8217;m not sure if Flash 9 is caching ABC files (AS3) vs. ASO (AS2) or what, but I&#8217;ll call methods on the class, and Flash compiles, but at runtime claims the method doesn&#8217;t exist.  Go strong-typing.  Anyway, you&#8217;ll go nuts staring at correct code, when in fact, the problem is your class path.  I suffered a lot from this since I transfer code back and forth between my Mac and PC as well as re-factoring twice.</p>
<p>Framerate really can suffer in Flex.  There are a plethora of reasons for this, but I&#8217;m having a hard time finding the time to make reproducible test cases to track down the issues.  Here are some theories.  First, I think Flash is better at producing SWF&#8217;s that &#8220;know&#8221; how to preload themselves.  So, if you have a long PNG sequence, the SWF will playback well because&#8230; well&#8230; because Flash is good at doing animations.  The same animation in Flex, though, is slow.  Now, this isn&#8217;t as clear cut as that sentence reads.  For starters, most of the Flash stuff I use is in states.  States in Flex utilize the Flash Player 9 DisplayList.  The DisplayList allows you to have a MovieClip exist, but not be drawn.  My guess is, this violates the typically, &#8220;Hey, there is a long timeline with a lot of assets about to be played, let&#8217;spreload it.&#8221;  Now, it&#8217;s &#8220;We don&#8217;t have to draw anything, so just chill&#8230;&#8221;.  Thus, it doesn&#8217;t preload the required assets, and the animation plays slow.</p>
<p>States have the benefit of removing children that are not applicable to a state you are in.  So, in the case of a LoginForm class that has the states of &#8220;signIn&#8221;, &#8220;error&#8221;, and &#8220;register&#8221;, the actual registration fields are not shown.  They can actually exist to support databinding, but the actual vector graphics that represents them isn&#8217;t drawn.  This is great.</p>
<p>For Flash animations, this isn&#8217;t so great.  Especially when they are shown, and it now has to play the animation AND preload the assets, thus reducing your intended frame rate.  That&#8217;s my theory, anyway.</p>
<p>Worse, states have the nice feature of removing children from the DisplayList that aren&#8217;t being drawn in the current state.  My guess is, Flash Player uses this as an opportunity to run Garbage Collection on the not-being-drawn-assets.  Remember, the unofficial ways the Flash Player 8 garbage collector works is A) every 60 seconds and/or B) when RAM usages increase by 20% or more.  In the case of 60 PNG&#8217;s , each utilizing a meg of RAM (compressed!), that&#8217;s a ton of memory usage.  Naturally, as soon as that animation is removed from the DisplayList, he&#8217;s a prime candidate for collection.  Meaning, the PNG&#8217;s are no longer in RAM.  When the animation is played again, it&#8217;s slow because the frames have to be loaded into memory yet again.  That&#8217;s my theory too.</p>
<p>For the preload, my fix was pretty simple.  You basically make a frame called &#8220;asset preload&#8221;, and throw EVERYTHING that animation needs on that frame.  You can even put it at the front of the animation, in a graphic, alpha&#8217;d to 0.  This forces Flash Player to throw all the assets in RAM.  Since Flash Player is generally good at not running Garbage Collection while animations are going, you can usually be sure your animation will then run well.  Did in my tests, anyway.  This does NOT work if your computer itself is running low on RAM.  For example, I ran a bunch of these examples at once, and my computers GC + Flash&#8217;s I guess were running at the same time, cause it&#8217;d freeze during the animations.  That&#8217;s just my CPU being a pansy, though.  No soup for you, sucka.</p>
<p>For the latter&#8230; not sure what to do.  In Flash, this was easy.  You just make a MovieClip&#8217;s visible property false.  It&#8217;s still there, just not being shown, but as soon as you make visible true, it draws immediately.  It IS being drawn, though, and taking up system resources.  The DisplayList does the same thing with remove child.  You can actually have an animation playing, but not in the DisplayList , taking up resources.  It&#8217;s better than visible = false, that&#8217;s for sure.  Either way, my guess is, visible = false is a better safeguard against Garbage Collection unloading your preloaded animation from memory vs. removing it from the DisplayList altogether.  This is easy in Flash, hard in Flex if you are using states.</p>
<p>Sound compression is kind of frustrating too.  For Flash, there are a multitude of ways to compress it with more codecs.  In Flex, it&#8217;s a little harder.  If you are sharing a lot of assets, you may run across the same sound sounding different because Flex compressed it differently.  Really annoying.  Or, you forgot to re-comment-in your code that you commented out to compile an ebmedded SoundAsset in Flash&#8230; thus you never compiled your sound into the SWF.  How&#8217;s your brain&#8217;s cookie trail?</p>
<p>Resource usage is the biggest kicker.  Eclipse 3.1 on my PC came, get this, standard with a max of 40 megs in the Eclipse ini.  That&#8217;s right, 40 megs!  AH, to be a full-time Java Developer, and need only that much.  When dealing multimedia content, us Flashdevs need all the RAM we can get, and then some.  Specially since FlexBuilder can actually render some of those SWF&#8217;s in real-time in Design View.  It actually got so bad at one point, I couldn&#8217;t even compile!  Java 1.5 would collapse on my Windows XP page file faster than Mike Foley, the guy who lives in a trailer down by the river, does on your coffee table.  I closed every program to no avail.  After finding <a href="http://www.cynergysystems.com/blogs/page/andrewtrice?entry=speeding_up_flex_builder">this blog post</a>, I upped mine and immediately everything worked fine.  For the record, didn&#8217;t have this problem on my Intel MacBook using the standalone install of Flex Builder.  In fact, I gave up looking for the Eclipse.ini on the Flex Builder install (non-plugin) because the performance was acceptable.</p>
<p>That&#8217;s the worst of the minefield.</p>
<p>The rest really have to do with the new ways Mouse, Keyboard, and focus events mesh with the updated and now built-in EventDispatcher and making sure you know exactly how things are working in ActionScript 3.  For example, when listening for MouseEvent.CLICK events from your Flash created button, you&#8217;ll get 2.  This is normal.  By default, it sends one, as does your UIComponent.  Since MouseEvent click events bubble, they&#8217;ll get to whoever&#8217;s listening. You should intercept it in your UIComponent wrapper, call stopPropagation on the event, create a new event, and dispatch something more meaningful.</p>
<p><a title="applicationexample" name="applicationexample"></a><br />
<strong>Application Example</strong></p>
<p><a href="http://www.jessewarden.com/archives/flex/flash_flex/source/">Flash Design in Flex Application Proof of Concept</a></p>
<p><a title="codewalkthrough" name="codewalkthrough"></a><br />
<strong>Code Walkthrough</strong></p>
<p>Here is a video tutorial walking through the code.  In it, you&#8217;ll see animations created in Flash and then used in Flex in a variety of ways.  I&#8217;ve also implemented someCairngorm 2 action with real dynamic data to showcase this isn&#8217;t just a proof of concept with no substance.</p>
<p><a href="http://www.jessewarden.com/archives/flex/flash_flex/captivate/">Code Walkthrough Video Tutorial</a></p>
<p><a title="sourcecode" name="sourcecode"></a><br />
<strong>Source Code</strong></p>
<p>Please note: I cannot give you access to FLA&#8217;s and fonts because I legally don&#8217;t own the design.  The video tutorial should show you enough about how they are made.  The actual code that made them I did include, as well as theSWF&#8217;s.  Therefore, you CAN compile this in Flex using the provided SWF&#8217;s.</p>
<p>If you want the design, you can purchase it at <a href="http://www.templatemonster.com">Templatemonster.com</a>, direct link to the design <a href="http://www.templatemonster.com/flash-templates/5393.html">here</a>.</p>
<p>Source Code to Flash Design in Flex App Example &#8211; <a href="http://www.jessewarden.com/archives/flex/flash_flex/source/srcview/">View Source</a> | <a href="http://www.jessewarden.com/archives/flex/flash_flex/source/srcview/JXLDownloadsv3.zip">ZIP</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2006/12/integrating-a-flash-interface-into-flex-2.html/feed</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Getting a Photoshop Design into Flex 2</title>
		<link>https://jessewarden.com/2006/12/getting-a-photoshop-design-into-flex-2.html</link>
					<comments>https://jessewarden.com/2006/12/getting-a-photoshop-design-into-flex-2.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Thu, 07 Dec 2006 17:20:50 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Fireworks]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1097</guid>

					<description><![CDATA[Raw, unrehearsed, and barely edited. Hopefully useful. This video tutorial will show you how to get a Photoshop CS2 design into Flex 2. I show taking the design from Photoshop to Fireworks, and then importing it into Flex. I aditionally cover using those assets in states &#38; transitions in Flex Builder 2. Ben, a commenter, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://jessewarden.com/archives/flex/photoshop_fireworks_flex/"><img loading="lazy" decoding="async" src="http://www.jessewarden.com/archives/flex/photoshop_fireworks_flex/psd_fw_fl_header.gif" alt="Photoshop Fireworks Flex" style="padding-right: 4px" align="left" height="32" width="184" /></a><br />
Raw, unrehearsed, and barely edited.  Hopefully useful.  This video tutorial will show you how to get a <a href="http://www.adobe.com/products/photoshop/">Photoshop</a> CS2 design into <a href="http://www.adobe.com/products/flex/">Flex</a> 2.  I show taking the design from Photoshop to <a href="http://www.adobe.com/products/fireworks/">Fireworks</a>, and then importing it into Flex.  I aditionally cover using those assets in states &amp; transitions in Flex Builder 2.  Ben, a <a href="http://www.jessewarden.com/archives/2006/12/skinning_in_bev.html#comments">commenter</a>, asked for a tutorial on this subject.</p>
<p>This is not the only way to do this.</p>
<p>I&#8217;ve had a designer export all PNG&#8217;s for me from Photoshop.</p>
<p>I&#8217;ve had a designer export all graphics as GIF&#8217;s with per-screen printouts to tape inside of my cube for visual reference.</p>
<p>I&#8217;ve had a designer give me a PSD with no fonts.  When I got the fonts, they were the Mac fonts, not the PC fonts.</p>
<p>So, I&#8217;ve had a full gamut of situations on how this went down.  Typically, most designers do not know, or just don&#8217;t care to export PNG&#8217;s out of Photoshop.  GIF&#8217;s are sometimes ok .  Thus, these are the measures us Flash &amp; budding Flex developers have to go through to get the design into our world.  I&#8217;m not saying it&#8217;s the right way, but without a designer capable of exporting PNG&#8217;s, we have no choice.</p>
<p>Maybe if every designer capable of doing this wasn&#8217;t always busy when I asked them to do contract work, I wouldn&#8217;t be posting this.  Unfortunately, there is still a shortage of talent, or that talent in house doesn&#8217;t get effectively communicated to, and it&#8217;s just faster to do this yourself.</p>
<p>I&#8217;ll be speaking about this as well as <a href="http://www.adobe.com/products/flash/">Flash</a> integration at the <a href="http://360flex.org/">360Flex Conference</a> March 5-7, 2007 at Ebay in San Jose, California, USA. [pending topic approval]</p>
<p>Anyway, I say &#8220;denote&#8221; at least 7 times.  Also, apologies for Flex Builder&#8217;s non-real-time typing.  Eclipse is stealing the key presses from Captivate.  It catches up when I click though, so just wait patiently, and you&#8217;ll see the code.</p>
<p>If you are a Designer, you can safely stop on &#8220;Contents Layout&#8221;, the 9th section.  If you are curious to see how to animate &amp; implement image assets in Flex, feel free to watch the whole thing.  I covered states &amp; transitions by accident.  All 30 sections counted, the whole tutorial is about 58 minutes.  Took about 7 hours to create &amp; edit since it was improv.  Uploaded all 150 megs of it all of last night.  BTW, I had to update my <a href="http://www.jessewarden.com/archives/2004/11/captivateplayer.html">CaptivatePlayer</a> to work with <a href="http://www.adobe.com/products/captivate/">Captivate</a> 2 skin SWF&#8217;s, so any problems viewing, just let me know and I&#8217;ll just link to the files directly.</p>
<p>Hope it helps!</p>
<p><a href="http://jessewarden.com/archives/flex/photoshop_fireworks_flex/">Getting a Photoshop Design into Flex 2</a> &#8211; A Video Tutorial using Photoshop CS2, Fireworks 8, and Flex Builder 2.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2006/12/getting-a-photoshop-design-into-flex-2.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
