Flash / ActionScript Developer Qualifications

Steve Weiss from O’Reilly emailed me to ask what skills Flash and ActionScript Developers require, beyond the obvious, to progress with their work and careers. I tossed together a quick list, which wound up being longer than I expected, so I thought I’d share my response:


While I don’t think it’s an industry norm yet, I consider ActionScript Developer and Flash Developer to be synonymous. Flex Developer is not – it implies a knowledge of MXML that is not necessary to be a pure AS or Flash Developer.

Skills I would expect any experienced Flash Developer to have include:

  • ActionScript development (obviously)

  • OOP experience

  • Some experience with architecture / design patterns

  • Code standards

  • Data services integration: XML, JSON, SOAP, etc.

  • Problem solving

  • Debugging

  • Optimization, both code and graphics

  • Quality testing

  • Reasonable understanding of UX and interaction design

  • Basic graphic design and motion graphics skills (enough to understand and implement designer concepts)

  • Graphics import

  • Basic skills with Photoshop, Illustrator, and Fireworks (for tweaks / exporting art)

  • Basic understanding of video / audio compression

  • Programmatic motion

  • Writing (for team / client communication, documentation, comments, etc)

  • Verbal communication and interpersonal skills for team / client interaction

  • Experience working with Flash and the timeline

  • Experience with an external code editor (ex. FlexBuilder, FDT, FlashDevelop)

  • High level understanding of Flex, FMS, Remoting, FlashLite, AIR and other core Flash platform products / libraries

  • High level understanding of server development and databases (not necessary an ability to implement anything, but a small amount of experience / understanding of the models)

  • Basic understanding of HTML, JS, CSS

  • Integration with HTML, JS

  • Community awareness (online resources, frameworks, etc)

  • Basic math – understanding and combining +, -, /, *, %, exponents and basic trigonometry (sin, cos, atan2, etc)


This is not necessarily a comprehensive list, and it definitely has a lot of overlap with my “Things Every Flash Develop Should Know” talk, but I thought it would be worth sharing so that junior developers had a rough guide of valuable skills.

Did I miss something important? Disagree with a point? Leave a comment.

Evolution of an Experiment: Circle Collision part 3

In building the circular collision music visualizer which I blogged about yesterday, I became mildly obsessed with the lighting effects on the circles, which led to another short set of experiments.

My first step was to simplify the music visualizer, so that I could focus just on the lighting. I wanted the lighting to be dynamic though, so I kept the light intensity keyed to music. I played around with a lot of different ideas for lighting effects, finally settling on a combination of a bevel filter, an inner drop shadow, and a stretched / rotated / blurred shadow sprite – all of which are affected differently by the intensity and distance to the light. I also added a radial gradient behind the light to make it more dramatic. The result was LightTest1.

I also built a slight variation, LightTest1a, that modifies the intensity of the light based on its proximity to the cursor, so the user can control the brightness.

Finally (thus far), I made the circles move based on the volume of the music, which created a somewhat hectic but mildly interesting visualizer in LightTest2.

I’m not quite sure where I’m going to go with this from here. I’ll release some of the source code next week. I’m also planning to do a similar article(s) covering my recent sphere experiments at some point.

Evolution of an Experiment: Circle Collision part 2

Continuing from yesterdays article showing the beginning of my circular collision experiments, this post will show how the simple test cases evolved into a music visualizer.

Yesterday on Twitter SeyelentEco asked me why I built a circular collision engine instead of using an existing physics library. The main reasons were size, speed, and simply because I wanted to learn a bit about the math involved. For example, all of these experiments are under 5kb, and the collision logic can handle a couple hundred circles without too much trouble.

As part of the initial commercial project that birthed these experiments, I built out a version in which circles would scale up quickly when the user rolled over them. Unfortunately, I don’t seem to have this version any more, but I thought it was pretty cool to roll over a circle and watch the surrounding circles get propelled outwards. Rolling over/out of a circle rapidly sparked the idea of having two “speaker” circles that would expand based on the volume of a playing track.

To build this, I realized I would need support for anchored circles (ones that didn’t move). This led to CircleTest4 which implemented this feature. Click and drag to create circles, move the cursor before you release to give them velocity. It’s mildly entertaining to see how many bounces between the circles you can get.

Next I plugged in the music, wired each channel’s volume to a “driver”, and started playing with the aesthetics, resulting in CircleTest5.

From there, it largely became an exercise in design and motion graphics. I played with the colors, added trails using the drawing API and bitmapdata, and continued tweaking the collision logic to be more reliable in high speed collisions. The result was CircleTest6.

I ran through a few more design iterations (which I won’t link because they are pretty minor): CircleTest7 had the drivers orbit each other at close proximity and added the subtle bevel effect to make them look like metaballs, CircleTest8 was a variation playing with the circles moving farther apart based on volume (which I didn’t like), and CircleTest9 played with adding color.

Ultimately, all this tweaking resulted in the current final product, CircleTest10, which combined the metaballs, color, and some basic lighting effects. If you click and hold, you’ll note some vestigial functionality from earlier experiments: the ability to create new red circles.

In part 3 I will show how CircleTest10 evolved into a short series of experiments on lighting effects. I will also release at least some of this code once I have a chance to clean it up a tad.

Evolution of an Experiment: Circle Collision part 1

I thought it might be interesting to share the progression of a couple of my more recent experiments, so people could see how a simple initial concept slowly evolves into something more complex and polished looking.

I’m going to start out with my “circle collision” experiments. These were actually sparked by a client project, which has itself significantly evolved into something much different. However, suffice it to say that the original commercial project required circular collision logic and gravity.

I started with a very simple test case demonstrating gravity and circular collision. In order to get the specific result I wanted I used the square root of distance for gravity instead of the square. You can check out CircleTest1 here. Click and hold to create new circles. They will simply bunch together in the center.

Still focused on the client project, I worked to refine the collision logic to make it more precise, and started playing with ways to bring the circles on screen. CircleTest2 demonstrates one of these ideas: launching the circles from the edges of the screen at a roughly right angle to the edge.

At this point, I started to think beyond the client’s requirements, and decided to add mass-based collision physics (which wasn’t needed in the commercial project). Initially I just wrote the collision and physics from scratch, but in later experiments tweaked the logic with information I found online. To test them, I enhanced the UI slightly so that I could create manually create circles with different sizes/masses and initial velocities. You can check out CircleTest3 here. Click and hold to create circles. Move your mouse before you release to change the initial velocity of the circle.

The next installment of this 3 (?) part series will look at the process of turning these initial experiments into a music visualizer (note: music will take awhile to load).

If people want, I will likely release at least some of this code. It’s pretty hacky, but maybe someone will find it useful. Also, if people think this series is interesting, I will also do one on the spheres experiments I’ve been playing with.

Fanbase Goes Multi-Screen: Desktop, CD, iPhone

Atlantic Records recently announced the launch of two projects that we’ve been working on with them: Fanbase for iPhone, and the first Fanbase Connected Album.

We’ve been working with Atlantic for a little over a year now, originally on Fanbase Desktop. Fanbase is an AIR application, developed with Flex and Flash that connects music fans with each other and their favourite artists through chat, forums, news, photos, videos, music, events, and more. It’s been very successful, with 17 artists using it to date to communicate with thousands of fans, and many more coming. In order to facilitate this growth, we also built a custom AIR application to allow Atlantic’s designers to visually configure and skin the application for different artists. This generates an artist package, which can be installed into the shared Fanbase application via a custom AIR install badge.

Since it’s launch, Fanbase Desktop has won a number of awards, including the “NARM Outstanding Achievement Business Innovation Award“. Adobe did a customer success story on it here.

Until recently, Fanbase Desktop was only available to download online. Now, a special version that we built with Atlantic is also available on the new Rob Thomas album (CD), with bonus content and features. Pretty cool (and a little nerve wracking) to see your work on physical media that’s being mass-distributed. It’s likely there will be other CD versions for other artists in the future.

Perhaps most exciting for me, is the new iPhone version of Fanbase (available in the US iTunes store). This is our first publicly available iPhone application, and I’m very proud of the end result. We have been ramping up our iPhone capability internally for a while, but I’ve been waiting for a really great first project, and this was definitely it. I’m also really happy with the story it lets us tell, about taking a single property to multiple unrelated devices. I’m still waiting for some of the awesome new features of FlashLite and Flash on TV to become a reality so that its even easier to refactor and redeploy an experience to multiple devices.

A big thanks to Eric at Atlantic records for trusting this project to a previously untested iPhone development group! Also a huge thanks to my amazing team for pulling the extra hours to deliver such a solid end product on an insane timeline.

At the risk of ending on a sales pitch, gskinner.com is now officially accepting select iPhone development projects. We are particularly interested in innovative projects that also involve desktop or web integration.

Source Code: Spectrum Ring Music Visualizer

I had someone request the source code for my spectrum ring music visualizer, and I figured I may as well just release it here for anyone who wants it.

Update: Note that it will sometimes throw runtime errors in FP10. I haven’t had a chance to look into it, but I’m quite certain it never threw those errors in FP9. I’ll try to fix it when I have a few minutes.

If I remember correctly, it was my first attempt at playing with computeSpectrum and ByteArrays, so the code is likely a hacky mess, but hopefully it’s useful for someone. At the least, it might be fun to take a look at how the visual effects were achieved, and play with the numbers.

You can download the source here. Just drop an MP3 named “music.mp3” in the same directory and it should load and play it. All the code is in the AS file (the FLA is empty), so it should work as an ActionScript project in FlexBuilder.

HossGate09: Finding Balance.

I’ve been trying to decide how I feel about all the commotion over Hoss Gifford’s session at FlashBelt 09, and whether or not to chime in on the whole matter. However, as I watched a few understandably upset individuals snowball into a torch wielding mob RT’ing themselves into a frenzy (ex. @hudsonakridge “Hoss Gifford should be set on fire”), I decided I would proffer a few thoughts.

This was a very tough decision for me, because I’m between a rock and a hard place. On one hand I am risking becoming a new target for the frothing mob, and on the other hand I risk damaging my friendship with Hoss, whom I have known for years. At the end though, I am a believer in moderation, truth, and positive action, and I hope that by adding my own thoughts I can help to steer all of this energy in that direction.

I’m also distressed to see all the bad press this is causing for Flashbelt – Dave did an awesome job on the conference, and I would hate to see this become the primary thing it was remembered for.

I’d like to begin by clarifying some of the things that have been stated about Hoss’s presentation:

  1. Yes, his session did open with a photo of him looking up at a (largely obscured) picture of a woman’s groin clad in panties that read “drink me”. No, this was not photoshopped – it is the entrance to a rather well known club in Amsterdam. Was it irrelevant, and needlessly obscene? Probably.

  2. Yes, he did draw a penis on stage (poorly). It was in the context of explaining that any time you give people a blank canvas to be creative on, they will immediately draw penises and swastikas. This is unfortunately true. Did he go beyond what was necessary to make the point, and wring it for frat house comedic effect? Most definitely.

  3. Yes, he did show a “orgasm simulator”, which showed a female face working through 4 or 5 expressions up to orgasm as he moved the mouse up and down. It was crude, and didn’t really have anything much to do with his theme, but it wasn’t explicit. It’s also worth noting that it was originally built for a bar setting at Flash conference in Amsterdam (context matters).

Was Hoss’s session crude, juvenile, and unprofessional? Absolutely. Was it inappropriate for the conference? Probably. Was it poorly described in the session book, and a mistake to run it as an all-call “keynote” session with no warning as to the content? Certainly.

Was the session sexist or misogynistic? I don’t believe so. It was definitely crude and borderline obscene, and I can see how it could be offensive, but I think you’d have to work hard to describe it as sexist. I actually feel strongly (as does my wife, who was in attendance) that the people calling the session sexist are showing themselves to be sexist. To suggest that showing crude sexual material (including genitals of both sexes) to an audience of men is fine, but to show it to women isn’t, demeans women’s sexuality and their intellectual/emotional ability to handle crude material. My wife agreed that the material was not appropriate for a professional conference, but she was at no time offended or felt that it was sexist.

–EDIT–

There seems to be a lot of confusion about the definition of sexism and misogyny. People are confusing sexual harassment (unwanted sexual contact or advances) with sexism (discrimination based on gender) and misogyny (a hatred of women). I can understand lumping Hoss’s talk into sexual harassment, but it was not directed at only the women in the audience. The crudeness of the content was targeted at everyone in the session, and was reasonably balanced in terms of gender participation. Likewise, calling it misogyny is just being sensationalist. Hoss at no time indicated or promoted a hatred of women. Let’s get our labels straight so that we can talk about this maturely and reasonably.

I wonder whether the accusation of misogyny was leveled because it carries more weight than crudeness and obscenity.

While none of the following excuses that the session was inappropriate, I think it is worth knowing a little bit about Hoss before you polish your pitchforks and light your torches. Hoss is a marvelously friendly, fun, intelligent, and generally respectful man. He is a good friend, and an excellent father, and from what I know is very good at his job. He has a crude, juvenile streak a mile wide, and definitely jumps over lines of appropriateness without a backward glance. This can be pretty entertaining over some pints with a close group of friends, but doesn’t always translate well into public speaking.

Hoss has been doing crude, frat-humor laden sessions for years now, and I’ve never heard of a complaint in the past. This isn’t to suggest that makes it ok, but it’s worth noting that this is what he’s known for, and what has become expected from him, both by attendees and conference organizers. Recently he confided to me that he would like to do more professional sessions oriented on his work, but has met resistance from conference organizers that want him to entertain, not teach (I’m not at all suggesting Dave is one of these). While I’m not defending his content, it is important to understand that he has been pigeon-holed into it. He chose that path, and he could likely break out of it, but as everyone knows its hard to give up on something that people say you’re great at.

I can also sympathize with him a bit because I had an attendee complain that a session I ran a few years ago (playing with yourself for fun and profit) was full of juvenile humor. I haven’t had a complaint before or since, but it showed me how people’s threshold for appropriateness varies wildly. It only had a few slightly suggestive jokes (none any cruder than the title), but it obviously offended someone.

With all of this in mind, I think we have the opportunity to make a positive change, rather than just lynching Hoss and Dave. I can guarantee that other conference organizers are following this, and revising their plans. Likewise, I’m sure Hoss is trying to reconcile this reaction with his previous experiences of being congratulated for identical behaviour, and pondering his future as a speaker.

I don’t think anyone wants the Flash community to become a dry, corporate, politically-correct group of stuffed shirts. At the same time we definitely want to be sure its inclusive and comfortable for everyone. Let’s look at how we can encourage this environment in a positive manner. Rather than taking the easy road of joining a witch hunt, provide feedback to organizers and speakers, support programs that encourage diversity in tech, and model positive behaviour to your peers. It’s always easier (and hey, more fun) to be sensational than productive, but hopefully some of this energy can be steered into creating real change.

— UPDATE —

Links

Stacey Mulcahy, a fellow speaker at FlashBelt, has posted a great response everyone should read.

Niqui Merret, another fellow FlashBelt speaker, has posted her thoughts.

Hoss has posted his response. You can read it here.

RegExr 0.3b Released: Share & Save RegEx!

I’m happy to announce that we have released RegExr 0.3b. The most significant feature additions are the ability to save your patterns locally, and to share patterns on a searchable community database of regular expressions.

RegExr is a tool for learning, editing, testing, and sharing regular expressions (RegEx or RegExp for short). It is available online at RegExr.com, and as a desktop application for Mac OSX, Windows or Linux at regexr.com/desktop. Its features include:

  • real time results: shows results as you type

  • code hinting: roll over your expression to see info on specific elements

  • detailed results: roll over a match to see details & view group info below

  • built in regex guide: double click entries to insert them into your expression

  • online & desktop: regexr.com or download the desktop version for Mac, Windows, or Linux

  • save your expressions: My Saved expressions are saved locally

  • share and rate expressions: search Community expressions and share your own

If you encounter any bugs or have any ideas for improving RegExr, please let us know in the comments below.