<?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>gskinner.com &#124; gBlog</title>
	<atom:link href="http://gskinner.com/feed" rel="self" type="application/rss+xml" />
	<link>http://gskinner.com</link>
	<description>News and views on Flash, Flex, ActionScript, and web technologies</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:00:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>The Evolution of (Web) Development Tools</title>
		<link>http://gskinner.com/blog/archives/2012/01/the-evolution-of-web-development-tools.html</link>
		<comments>http://gskinner.com/blog/archives/2012/01/the-evolution-of-web-development-tools.html#comments</comments>
		<pubDate>Thu, 19 Jan 2012 20:14:35 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Technology]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1369</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2012/01/the-evolution-of-web-development-tools.html">The Evolution of (Web) Development Tools</a></p><p>I've seen a few people complaining about the lack of mature tools to develop content for the modern web (aka HTML5), and it got me thinking about the evolution of these tools, and how challenges are solved on technology platforms in general. In my experience, there is a natural progression for a maturing technology stack...</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2012/01/the-evolution-of-web-development-tools.html">The Evolution of (Web) Development Tools</a></p><p>I&#8217;ve seen a few people complaining about and/or questioning the lack of mature tools to develop content for the modern web (aka HTML5), and it got me thinking about the evolution of these tools, and how challenges are solved for technology platforms in general.</p>
<p>In my (albeit limited) experience, there is a natural progression for a maturing technology stack, particularly one without a single master (ex. Flash and iOS development differ somewhat because the tools and platform are directed/developed by the same entity).</p>
<p>First, you will see the development of a lot of frameworks, starting with micro-libraries that address a single challenge, and evolving to macro-frameworks like JQuery that tackle an entire workflow. Developing frameworks has a very low barrier to entry, and provides an ideal way for developers to explore and share a variety of potential solutions for challenges. Because the libraries are written in the domain language, it also means that any developer encountering a problem can address it directly with a language they are familiar with.</p>
<p>As problems become better defined, and specific solutions begin to emerge as more dominant, you start to see single purpose tools created, often as command-line utilities. These have an increased investment compared to frameworks, and require that the developer has knowledge of both the problem domain, and basic desktop development.</p>
<p>Next, you will see partial workflow tools, which aggregate and leverage the single purpose tools (either directly, or by borrowing approaches). These put a UI on top of a number of solutions to make them more accessible to users. Again, these involve increased investment, and require additional capability (UX/UI design, more advanced desktop development).</p>
<p>Finally, you will see the emergence of full-scale workflow tools. These represent a major investment, generally require a team of specialists to create, and are built over the course of months or years. As such, they need to build on top of standards, approaches, and frameworks that have been well vetted by real-world use. Even then, their early releases will be limited, and will require a huge amount of community feedback and multiple revisions to &#8220;get it right&#8221;. With this in mind, early release with rapid iteration is a critical practice for any tool that aims to be successful in this space.</p>
<p>As an aside, code editors tend to follow an accelerated path, simply because the problems they are solving are less tied to a specific technology platform, and have been thoroughly explored for other languages.</p>
<p>Of course, none of these steps happen in isolation. In the JS world, you can see all of these underway simultaneously. There is an unending stream of new frameworks, as developers explore challenges, with a number of more mature ones gaining traction. There are a number of popular single-purpose tools (ex. LESS, Closure Compiler, Zoë). There are a few partial workflow tools (ex. CodeKit). And finally, there are a number of early entries in the more robust tool category (Edge, Sencha Animator, Flash Pro&#8217;s Wallaby, etc).</p>
<p>Further, this evolution is massively complicated and slowed in the HTML/JS world by the constant flux of the technology, the non-trivial issue of supporting multiple browsers/platforms, and the question of legacy support. Tool makers need to wait for a standard (or more frequently, a collection of standards) to stabilize and be broadly adopted/accepted before they can risk the investment to build on top of it.</p>
<p>This is obviously a simplified look at the problem, but hopefully helps illustrate where things are today, and why we don&#8217;t have access to fully mature tools for HTML5 development yet. They are coming, but it&#8217;s going to be an incremental process.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2012/01/the-evolution-of-web-development-tools.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Updates to EaselJS, SoundJS, TweenJS &amp; Zoë!</title>
		<link>http://gskinner.com/blog/archives/2011/11/updates-to-easeljs-soundjs-tweenjs-zoe.html</link>
		<comments>http://gskinner.com/blog/archives/2011/11/updates-to-easeljs-soundjs-tweenjs-zoe.html#comments</comments>
		<pubDate>Wed, 30 Nov 2011 17:33:51 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Technology]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1359</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/11/updates-to-easeljs-soundjs-tweenjs-zoe.html">Updates to EaselJS, SoundJS, TweenJS &#038; Zoë!</a></p><p>I'm very happy to announce that I've pushed major updates to a number of our javascript tools and libraries, including EaselJS v0.4, Zoë v1.5, TweenJS v0.1 and SoundJS v0.1.</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/11/updates-to-easeljs-soundjs-tweenjs-zoe.html">Updates to EaselJS, SoundJS, TweenJS &#038; Zoë!</a></p><p>I&#8217;m very happy to announce that I&#8217;ve pushed major updates to a number of our javascript tools and libraries for developing rich content with HTML5. It&#8217;s very exciting for me to see these starting to realize some of the vision I&#8217;ve had for them over the past year, both as individual pieces and as a suite of tools to make great interactive content using web standards.</p>
<p>Here&#8217;s a quick breakdown of what was released:</p>
<p><strong style="font-size:120%"><a href="http://easeljs.com/">EaselJS v0.4.0</a></strong><br />
The latest release of EaselJS (our HTML5 display library) has a completely reengineered sprite sheet engine, which includes a host of new features: multi-image sprite sheets, variable frame dimensions, frame reuse, image preloading, and a new data format. Note that this change will require some minor updates to existing content using sprite sheets in EaselJS.</p>
<p>We&#8217;ve added filter effects, and a few sample filters, including a box blur filter by <a href="http://quasimondo.com/">Mario Klingemann</a>, who has agreed to write a number of other filters for the library.</p>
<p>There&#8217;s also a fantastic new build system, built on top of Node.js by Adobe&#8217;s own <a href="http://www.mikechambers.com/blog/">Mike Chambers</a>. And, of course, a whole pile of other feature additions, optimizations and bug fixes. Check the VERSIONS file for full details.</p>
<p><strong style="font-size:120%"><a href="http://easeljs.com/zoe.html">Zoë v1.5.0</a></strong><br />
We&#8217;ve released a major update to Zoë, our tool for exporting sprite sheets from SWF animations. It supports EaselJS&#8217;s new data format, and adds some great new features like variable frame dimensions with more optimal rect packing, and intelligent frame reuse. The latter allows you to set a threshold for how similar frames can be, and Zoë will automatically remove similar frames and reuse them in animations. Testing on some old content, we saved 20-50% on file size with this feature, with  virtually no decrease in animation quality.</p>
<p>This release was a bit more rushed than we would have liked, so you should expect to see a v1.5.1 release before too long that polishes things up and adds additional features such as multi-image export.</p>
<p><strong style="font-size:120%"><a href="http://tweenjs.com/">TweenJS v0.1.0</a></strong><br />
This is the first &#8220;official&#8221; release of TweenJS. TweenJS uses a simple API of chained commands to sequence tweens and actions to create complex animations and timed events. For example:<br />
<code><br />
Tween.get(ball).to({x:200},500).wait(750).to({alpha:0,visible:false}).call(onComplete);<br />
</code><br />
TweenJS makes a great companion to EaselJS, and also has some basic support for working with CSS properties, which will be extended in future versions.</p>
<p><strong style="font-size:120%"><a href="http://soundjs.com/">SoundJS v0.1.0</a></strong><br />
This is also the first official release of SoundJS, our library for working with the HTML5 Audio tag. Sound in HTML5 is a complete mess to work with, and this library aims to make it a bit easier. It handles preloading, allows you to assign a fixed number of tags to a specific sound, provides volume control, and manages sound interruption.</p>
<p>This library is still a little rough, but we&#8217;re planning to continue to clean it up and add functionality (ex. WebAudio support) as time permits.</p>
<p><strong style="font-size:120%">in summary</strong><br />
All of these projects are free and open source, released under the highly permissive MIT license, and are <a href="http://github.com/gskinner/">hosted on GitHub</a>. I&#8217;d like to thank everyone who contributed to these releases, even if just by providing feedback or encouragement. Hopefully people find these useful in their own quests to build amazing content for the web!</p>
<p>As an aside, now that these releases are out of the way, I&#8217;m considering doing a series of posts or videos on getting started with some of these libraries. I think it would be particularly relevant as Flash developers start looking to create content in HTML5, and web developers look to create more interactive content.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/11/updates-to-easeljs-soundjs-tweenjs-zoe.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Flash Player Mobile, a Post Mortem.</title>
		<link>http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html</link>
		<comments>http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html#comments</comments>
		<pubDate>Wed, 09 Nov 2011 19:52:33 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1351</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html">Flash Player Mobile, a Post Mortem.</a></p><p>By now, you've likely heard that Adobe has ceased development of the Flash Player for mobile browsers. It's hard to miss... See, Steve Jobs was right. But then he was wrong. Very wrong.</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html">Flash Player Mobile, a Post Mortem.</a></p><p>By now, you&#8217;ve likely heard that Adobe has ceased development of the Flash Player for mobile browsers. It&#8217;s hard to miss &#8211; it has whipped the usual rabble of ill-informed techno-zealots into a screaming mass of vindictive idiocy. Sadly, this frenzy is being led by sensational headlines in the media, and snarky, self-congratulatory posts by leading tech pundits.</p>
<p>I don&#8217;t think I will ever understand the joy that apparently comes from dancing on the grave of a dead technology. One less technology means one less choice, and one less branch from which new innovation can spring.</p>
<p>And let&#8217;s be honest. A LOT of innovation has sprung from Flash. It opened a whole new class of web experience, birthed online casual gaming, defined rich UI, and heavily influenced many of the features that comprise HTML5.</p>
<p>Yes, Flash is proprietary, but that allows it to be agile. Yes, there&#8217;s an abundance of truly horrible Flash content out there, but that&#8217;s more a testament to its ease of use than its failings as a technology. I guarantee that if creating HTML5 content ever becomes as simple as with Flash, you will see a plethora of horrible HTML5 content (though hopefully some lessons will not be forgotten &#8211; RIP Skip Intro).</p>
<p>Flash is deeply flawed, but so is every technology. Hating it is popular, but seems to be based less on any rational analysis, and more on a self-sustaining anti-fanboism, and the sheep-like re-bleating of Jobs&#8217; proclamations.</p>
<p>See, Steve Jobs <em>was</em> right. But then he was wrong. Very wrong.</p>
<p>As an iPhone user, I was initially in full agreement that Flash had no place on my phone. Flash Lite was crap, and there was no evidence that the full player could be made to run well on a device. I also didn&#8217;t have a burning need to view Flash content on my phone.</p>
<p>Then two things happened that shifted my thinking.</p>
<p>First, Adobe (eventually) proved that the Player could be viable on mobile with the Android plugin. They also made it optional. In my mind, that was ideal. It gave people a choice. I could choose not to enable Flash, or I could choose to only enable SWFs that I wanted to view. It seemed like the perfect compromise, and made me wish I had the same choice in iOS.</p>
<p>Unfortunately, Steve wasn&#8217;t known for compromise, so rather than either embrace this proven approach or simply maintain the status quo, he chose to lash out. His famous open letter on Flash was a mix of half-truths, hypocritical misdirection, and outright lies. I lost a lot of respect for Mr. Jobs that day. Withholding a choice from users to maintain a &#8220;perfect vision&#8221; is classic Jobs, but engaging in FUD wasn&#8217;t.</p>
<p>His biography indicates that this act was driven not by evaluating what was best for users, but rather by a personal vendetta against Adobe for past slights.</p>
<p>Regardless of his motive, it worked incredibly well. Companies cancelled or froze Flash projects while they waited for the dust to settle. Flash lost a ton of momentum, despite there being no viable replacement yet. Without iOS, Flash&#8217;s &#8220;write once, deploy anywhere&#8221; story became a lot weaker.</p>
<p>Given this climate, I think Adobe made the right choice in killing off mobile Flash. The mobile player requires a huge ongoing investment to support new devices and OSes, an investment that has no (obvious) financial benefit for Adobe.</p>
<p>Further, the type of content that Flash enables doesn&#8217;t make a ton of sense on the mobile web. People use their browsers for quick look-ups and fall back to apps for rich content. This will change over time, but the reality is that virtually no one is creating mobile version of Flash content for the web, there simply wasn&#8217;t enough demand to justify the expense, especially without iOS support.</p>
<p>If this decision allows Adobe to focus on increasing innovation in the desktop player, significantly improving their app packagers, and investing heavily in HTML5 tooling, it&#8217;s got my vote.</p>
<p>Jobs was right, but he was right for the wrong reasons.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html/feed</wfw:commentRss>
		<slash:comments>87</slash:comments>
		</item>
		<item>
		<title>Great Pumpkin Showdown 2011 Results</title>
		<link>http://gskinner.com/blog/archives/2011/11/great-pumpkin-showdown-2011-results.html</link>
		<comments>http://gskinner.com/blog/archives/2011/11/great-pumpkin-showdown-2011-results.html#comments</comments>
		<pubDate>Tue, 08 Nov 2011 17:27:21 +0000</pubDate>
		<dc:creator>Lanny McNie</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1341</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/11/great-pumpkin-showdown-2011-results.html">Great Pumpkin Showdown 2011 Results</a></p><p>I am proud to announce the winner of this year&#8217;s pumpkin contest! &#8220;Kill All Pumpkins&#8221;, Ryan and Lanny&#8217;s homage to Futurama brings home the gold, narrowly edging out Grant and Wes&#8217; &#8220;2001, a Squash Odyssey&#8221;, and &#8220;The Angry Pumpkin&#8221; by Sebastian and Chris, which kept up until the last few days of the race. There [...]</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/11/great-pumpkin-showdown-2011-results.html">Great Pumpkin Showdown 2011 Results</a></p><p>I am proud to announce the winner of <a href="http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html">this year&#8217;s pumpkin contest</a>! </p>
<p>&#8220;Kill All Pumpkins&#8221;, Ryan and Lanny&#8217;s homage to Futurama brings home the gold, narrowly edging out Grant and Wes&#8217; &#8220;2001, a Squash Odyssey&#8221;, and &#8220;The Angry Pumpkin&#8221; by Sebastian and Chris, which kept up until the last few days of the race. There were some great entries this year, and I think it was one of the best contests yet.</p>
<p>Thanks to everyone that voted!</p>
<p><img src="/blog/assets/pumpkin11/images/results.gif" /></p>
<p><img src="/blog/assets/pumpkin11/images/group.jpg" /></p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/11/great-pumpkin-showdown-2011-results.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSFL #include &amp; classes.</title>
		<link>http://gskinner.com/blog/archives/2011/11/jsfl-includes-classes.html</link>
		<comments>http://gskinner.com/blog/archives/2011/11/jsfl-includes-classes.html#comments</comments>
		<pubDate>Tue, 08 Nov 2011 02:56:18 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1335</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/11/jsfl-includes-classes.html">JSFL #include &#038; classes.</a></p><p>I've been doing a lot of work with JSFL the last little while, and was starting to get frustrated with the inability to define my classes and methods in separate files. After some messing around, I came up with an approach that seems to be working...</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/11/jsfl-includes-classes.html">JSFL #include &#038; classes.</a></p><p>I&#8217;ve been doing a lot of work with JSFL the last little while, and was starting to get frustrated with the inability to define my classes and methods in separate files. I did some hunting around, and found a couple of solutions that worked by putting objects in an implicit global scope, but this doesn&#8217;t seem to work in CS5.</p>
<p>After some messing around, I came up with an approach that seems to be working:</p>
<p>In MyClass.jsfl</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">MyClass <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> p <span style="color: #339933;">=</span> MyClass.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
&nbsp;
p.<span style="color: #660066;">run</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	fl.<span style="color: #660066;">trace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;hello!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>in main.jsfl:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> JSFL_PATH <span style="color: #339933;">=</span> fl.<span style="color: #660066;">configURI</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;path/to/jsfls/&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> included <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">function</span> include<span style="color: #009900;">&#40;</span>file<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>included<span style="color: #009900;">&#91;</span>file<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
	included<span style="color: #009900;">&#91;</span>file<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">eval</span><span style="color: #009900;">&#40;</span>FLfile.<span style="color: #660066;">read</span><span style="color: #009900;">&#40;</span>JSFL_PATH<span style="color: #339933;">+</span>file<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;.jsfl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
include<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;MyClass&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> foo <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> MyClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
foo.<span style="color: #660066;">run</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/11/jsfl-includes-classes.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>The Great Pumpkin Showdown VII</title>
		<link>http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html</link>
		<comments>http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html#comments</comments>
		<pubDate>Mon, 31 Oct 2011 19:07:10 +0000</pubDate>
		<dc:creator>Lanny McNie</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1313</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html">The Great Pumpkin Showdown VII</a></p><p>Maybe we are compensating for missing halloween last year, but 2011 is our greatest pumpkin contest yet! On Friday, fuelled by beer and pumpkin ale, we split into teams and commenced the hack-and-slash carve-fest. This year has more entries than any previous year (seven), and as usual our most recent hires Alex and Mike built [...]</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html">The Great Pumpkin Showdown VII</a></p><p>Maybe we are compensating for missing halloween last year, but 2011 is our greatest pumpkin contest yet! On Friday, fuelled by beer and pumpkin ale, we split into teams and commenced the hack-and-slash carve-fest.<br />
<span id="more-1313"></span><br />
This year has more entries than any previous year (seven), and as usual our most recent hires Alex and Mike built an app for voting (below)</p>
<p><iframe src ="/blog_assets/pumpkin11/Showdown2011.html" width="650" height="650" scrolling="no" frameborder="0" marginHeight="0" marginWidth="0"></iframe></p>
<p>Cast your vote, leave some comments, and go check out the previous years&#8217; pumpkins!<br />
<a href="/blog/archives/2004/10/the_great_pumpk.html">2004</a>,  <a href="/blog/archives/2005/11/great_pumpkin_s.html">2005</a>,  <a href="/blog/archives/2006/10/great_pumpkin_s_2.html">2006</a>,  <a href="/blog/archives/2007/11/the_great_pumpk_1.html">2007</a>, <a href="/blog/archives/2008/11/the_great_pumpk_2.html">2008</a>, <a href="/blog/archives/2009/10/the_great_pumpk_3.html">2009</a></p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/10/the-great-pumpkin-showdown-vii.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Media Keys In OSX For Any Keyboard</title>
		<link>http://gskinner.com/blog/archives/2011/10/media-keys-in-osx-for-any-keyboard.html</link>
		<comments>http://gskinner.com/blog/archives/2011/10/media-keys-in-osx-for-any-keyboard.html#comments</comments>
		<pubDate>Thu, 27 Oct 2011 02:53:11 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1308</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/10/media-keys-in-osx-for-any-keyboard.html">Media Keys In OSX For Any Keyboard</a></p><p>I recently bought a new mechanical keyboard to use with my Macbook Air. So far, I'm liking it, but I miss having media keys for controlling volume and music playback like on my Apple &#038; Logitech keyboards. To address this, I wrote a few simple Applescript services that you can bind keyboard shortcuts to, which enables media commands (volume up/down, mute, play/pause, and next/prev track) for any keyboard.</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/10/media-keys-in-osx-for-any-keyboard.html">Media Keys In OSX For Any Keyboard</a></p><p>I recently bought a shiny new mechanical keyboard to use with my Mac. So far, I&#8217;m liking it, but I miss having media keys for controlling volume and music playback like on my Apple &#038; Logitech keyboards.</p>
<p>To address this, I wrote a few simple Applescript services that you can bind keyboard shortcuts to, which enable media commands (volume up/down, mute, play/pause, and next/prev track) for any keyboard.</p>
<p>You can download them by <a href="/blog/assets/MediaControlScripts.zip">clicking here</a>. Once downloaded and unzipped, simply double click each workflow file to install it. Note that these are only tested in OSX 10.7 Lion.</p>
<p>To bind keyboard shortcuts to the scripts, go to System Preferences > Keyboard > Keyboard Shortcuts. Select Services in the left panel, then scroll down to the script you want to assign a shortcut to. Double click on the right side of the row to edit the shortcut. Now, just hit the key combination you want to use, and make sure the checkbox to the left is checked (it likes to uncheck when you edit the key combo).</p>
<p><img src="/blog/assets/MediaControlSS.png"/></p>
<p>I used the following shortcuts:<br />
Command +:<br />
F13 &#8211; Volume Down<br />
F14 &#8211; Mute<br />
F15 &#8211; Volume Up</p>
<p>Command + Option +:<br />
F13 &#8211; iTunes Volume Down<br />
F14 &#8211; iTunes Mute<br />
F15 &#8211; iTunes Volume Up</p>
<p>Command + Control +:<br />
F13 &#8211; iTunes Previous Track<br />
F14 &#8211; iTunes Toggle Pause<br />
F15 &#8211; iTunes Next Track</p>
<p>I chose these because they are conveniently grouped at the top right of my keyboard, and I don&#8217;t use them for anything else. Note that you seem to need to include a Command in your key combo for it to work everywhere.</p>
<p>Also note that I made the system volume control fairly granular (5% increments), and the iTunes control fairly coarse (20% increments) based on my personal preference. You can easily edit these values by opening the workflow files in Automator. The scripts can be found at ~/Library/Services/ once installed.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/10/media-keys-in-osx-for-any-keyboard.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>8 Years, a Retrospective.</title>
		<link>http://gskinner.com/blog/archives/2011/09/8-years-a-retrospective.html</link>
		<comments>http://gskinner.com/blog/archives/2011/09/8-years-a-retrospective.html#comments</comments>
		<pubDate>Thu, 29 Sep 2011 17:37:20 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1273</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/09/8-years-a-retrospective.html">8 Years, a Retrospective.</a></p><p>I was looking at the blog today, thinking how neglected it is, when I realized that its 8 year anniversary had recently passed. That got me scanning nostalgically through old posts, and wistfully pondering how much has changed since my very first post on Sept 1, 2003...</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/09/8-years-a-retrospective.html">8 Years, a Retrospective.</a></p><p>I was looking at the blog today, thinking how neglected it is, when I realized that its 8 year anniversary had recently passed. That got me scanning nostalgically through old posts, and wistfully pondering how much has changed since my very <a href="http://gskinner.com/blog/archives/2003/09/is_there_room_f.html">first post</a> on Sept 1, 2003.</p>
<p>At the time, I was a spiky-haired,  fresh-faced, freelance developer who had just recently won my first few awards, and had spoken at my first few conferences (a thoroughly nerve-racking experience). I was completely unsure of my place in the industry, had no idea how to promote myself (though I was starting to learn), and wasn&#8217;t sure what I wanted to be when I &#8220;grew up&#8221;. I just knew that I REALLY loved building cool things in Flash.</p>
<p>Eight years later, a lot has changed, but the important parts have stayed the same. I&#8217;m a grizzled veteran, with more than a few white hairs, and am no longer so fresh of face. I&#8217;ve spoken at hundreds of conferences and events around the world, but I still get completely stressed out before every single one. I lead a team of 14 absolutely amazing developers and designers, working on cutting-edge projects for some of the biggest brands in the world, but I&#8217;m still not sure what I want to be when I grow up. I just know that I still REALLY love building cool things and sharing them with the world.</p>
<p>There are a few reasons why I still love my work so much. Foremost, I love the continuous challenge and the sense of creation. I don&#8217;t think I&#8217;ve had a day in the past 8yrs when I haven&#8217;t either learned something new, or built something (however small) that I can be proud of. I also appreciate the diversity &#8211; I&#8217;m sure I&#8217;d be a much wealthier man if my company focused on building &#8220;enterprise blah blah blahs for the yadda yadda market vertical&#8221;, but I much prefer constantly tackling new challenges. We&#8217;ve worked on everything from intros &#038; micro sites to frameworks &#038; enterprise apps to games &#038; installations to technical demos &#038; art pieces.</p>
<p>I also really appreciate the people. My own little team is made up of intelligent, creative, and fun people that I genuinely love working with. Our clients tend to be smart, savvy, and eager to do fantastic, progressive work. And, the communities I&#8217;ve been honoured to participate in have been hugely supportive and giving. Seriously, the Flash community is one of the coolest groups of like-minded folk I&#8217;ve ever had the pleasure to interact (and party) with. I&#8217;m still getting to know the HTML/JS community, but I&#8217;m hoping they will be equally cool.</p>
<p>I know it&#8217;s a bit sappy and cliché, but I have a deep passion and love for what I do, and a great deal of respect for the people I&#8217;ve been privileged to work with over the past decade. I&#8217;d like to think that&#8217;s helped make my work better, but if not, at least I&#8217;ve been having fun the whole time!</p>
<p>(and, yes, I will try to post more often &#8211; Twitter and G+ have made me lazy)</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/09/8-years-a-retrospective.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Creating Great Developers: Conclusion.</title>
		<link>http://gskinner.com/blog/archives/2011/05/creating-great-developers-conclusion.html</link>
		<comments>http://gskinner.com/blog/archives/2011/05/creating-great-developers-conclusion.html#comments</comments>
		<pubDate>Fri, 27 May 2011 19:06:12 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1250</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/05/creating-great-developers-conclusion.html">Creating Great Developers: Conclusion.</a></p><p>This concludes the Creating Great Developers series. Hopefully it helps inspire other dev groups to mould a new generation of creative, competent developers, and treat them with the respect they deserve. Interactive development is a creative pursuit, and I'm a strong believer that...</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/05/creating-great-developers-conclusion.html">Creating Great Developers: Conclusion.</a></p><p>Earlier posts in this series:  &#8220;<a href="/blog/archives/2010/09/creating_great.html">Introduction</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_1.html">Hiring</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_2.html">Orientation</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_3.html">Training</a>&#8220;, &#8220;<a href="/blog/archives/2010/10/creating_great_4.html">Planning</a>&#8220;, &#8220;<a href="/blog/archives/2011/05/creating-great-developers-production.html">Production</a>&#8220;, and &#8220;<a href="/blog/archives/2011/05/creating-great-developers-shadowing.html">Shadowing</a>&#8220;.</p>
<p>At the end of shadowing, the trainee has been with us for 10-12 weeks, has received intensive classroom-style training, has planned and developed a small project from start to finish, and has worked on real commercial projects in parallel with a few of our most senior developers. Throughout this, we have been assessing and providing feedback on their productivity, code quality, communication skills, time management, and problem solving ability.</p>
<p>At this point we know for certain (hopefully) if they are going to be a great addition to the team.</p>
<p>As the 3 month mark approaches, we schedule a meeting with all of the senior staff who worked with the trainees. We compare notes, and discuss the strengths, weaknesses, and growth of the trainee, citing specific examples wherever possible. I take a lot of notes, and bring them into the review.</p>
<p>I like to keep reviews informal, usually over lunch or a beer. I talk to the trainee about what they are doing well, and how they could improve. Again, I try to use concrete examples where possible, so they can relate the input to real experiences. I give them lots of opportunity to ask questions or provide their own feedback on their performance and the training they&#8217;ve received.</p>
<p>If things didn&#8217;t work out, I make a point to provide them with honest feedback on what I think they need to work on if they want to continue in the industry, and where they could go next. I ask them how they&#8217;d be most comfortable with me announcing their departure to the team, and we generally have beers as a group to see them off amicably.</p>
<p>If things went well, I welcome them to the team, ask them a bit about their goals for the future, and start talking through possible projects we could put them on. From this point on we work aggressively to keep them busy on real projects, under the watchful eye of more senior staff who can ensure the quality of their output, and help to continue their growth in the company.</p>
<p>Of course, this whole process requires a large up-front investment which is wasted if we can&#8217;t retain our staff. I try my best to make gskinner.com a great place to work. We keep regular office hours, encourage our team to have a life outside work, pay fairly, have a good bonus model, offer praise and appreciation for accomplishments, foster continuous learning, promote a fun work environment, try to book interesting projects, and protect our staff from abusive clients. I would much rather lose a bad client than a good developer.</p>
<p>I have an amazingly fun and talented team that I love working with, and one of the things I&#8217;m most proud in my professional life of has been keeping them together over the years.</p>
<p>This concludes the Creating Great Developers series. Hopefully it helps inspire other dev groups to mould a new generation of creative, competent developers, and treat them with the respect they deserve. Interactive development is a creative pursuit, and I&#8217;m a strong believer that you can&#8217;t get exceptional results by treating developers as a commodity.</p>
<p>Note: I&#8217;m planning to revisit this series to do some editing (I&#8217;m not completely happy with the quality of writing), flesh out some details based on feedback, and add a persistent index.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/05/creating-great-developers-conclusion.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Creating Great Developers: Shadowing</title>
		<link>http://gskinner.com/blog/archives/2011/05/creating-great-developers-shadowing.html</link>
		<comments>http://gskinner.com/blog/archives/2011/05/creating-great-developers-shadowing.html#comments</comments>
		<pubDate>Mon, 23 May 2011 16:43:57 +0000</pubDate>
		<dc:creator>Grant Skinner</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://gskinner.com/?p=1246</guid>
		<description><![CDATA[<p><p><a href="http://gskinner.com/blog/archives/2011/05/creating-great-developers-shadowing.html">Creating Great Developers: Shadowing</a></p><p>Once the new hire has successfully delivered their internal project, they are ready to move to the next phase of training: project shadowing. We pair the new hire up with one of our senior developers, and have them work on the same project and tasks in parallel. At the start of each week...</p></p><p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gskinner.com/blog/archives/2011/05/creating-great-developers-shadowing.html">Creating Great Developers: Shadowing</a></p><p>Earlier posts in this series:  &#8220;<a href="/blog/archives/2010/09/creating_great.html">Introduction</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_1.html">Hiring</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_2.html">Orientation</a>&#8220;, &#8220;<a href="/blog/archives/2010/09/creating_great_3.html">Training</a>&#8220;, &#8220;<a href="/blog/archives/2010/10/creating_great_4.html">Planning</a>&#8220;, and &#8220;<a href="http://gskinner.com/blog/archives/2011/05/creating-great-developers-production.html">Production</a>&#8220;.</p>
<p>Once the new hire has successfully delivered their internal project, they are ready to move to the next phase of training: project shadowing.</p>
<p>We pair the new hire up with one of our senior developers, and have them work on the same project and tasks in parallel. At the start of each week, the senior developer will sit down with the new hire to outline the goals for the week, help prepare micro-deadlines (ie. production targets for each day), and provide some guidance on architecture and approach.</p>
<p>Throughout the week, the new hire works towards the assigned goals, and is free to ask their mentor for help or advice in an appropriate, organized manner. We schedule time for the senior developer to account for this, so that it does not create a burden on them.</p>
<p>At the end of the week, the trainee is provided with the mentor&#8217;s source code and given some time to compare it to their own efforts. They then sit down with their mentor to review their code quality, communication, and productivity. This also gives the trainee an opportunity to ask additional questions that arose during development or (more critically) while they were comparing their efforts to the senior developer&#8217;s work.</p>
<p>Besides being another great learning opportunity, it also provides the trainee and the senior staff with applied benchmarks as to how they are performing on a real project, without the risk associated with actually placing them on a client project. An important factor is that shadowing is treated as a serious project by both the trainee and the team, with a project manager, deadlines, and testing / quality control.</p>
<p>We repeat this process for 3-5 weeks, depending on the trainee&#8217;s performance. Most weeks we will switch mentors, so that the trainee is exposed to a variety of working / coding styles.</p>
<p>At the conclusion of shadowing, the trainee has been with us for between eight to twelve weeks, and is ready for their three month review, which will is the subject of the <a href="/blog/archives/2011/05/creating-great-developers-conclusion.html">next article, available here</a>.</p>
<p><a href="http://gskinner.com">gskinner.com | gBlog - News and views on Flash, Flex, ActionScript, and web technologies</a></p>]]></content:encoded>
			<wfw:commentRss>http://gskinner.com/blog/archives/2011/05/creating-great-developers-shadowing.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

