Flex/Flash/Actionscript

Description of my Flash on the Beach session: Decompiling Flex and Flash

speakerbadge_200_120_e.gifI’ve just posted the title and description of the session I’ll be giving at Flash on the Beach, which is happening September 28-Oct 1 in Brighton, England. My session is titled: Decompiling Flex and Flash. Here’s the full description (which you can also find on the FOTB site):

In this session we’ll learn how to decompile ActionScript 3 SWF files and peek inside other people’s code. Decompiling a SWF is often seen as an evil tactic that should be punishable by death, but regardless of your moral opinion, every SWF you create can be decompiled into often beautifully readable source code. If you’ve produced something cool, chances are someone has decompiled it (hell, chances are I’ve decompiled it myself).

In this session you’ll learn what you get when you decompile a SWF and what you don’t. We’ll cover how far you can get piecing a decompiled application back together and I’ll share a few real-world stories of how decompiling has proven invaluable in my development career.

This session will focus on ripping apart some large-scale Flex applications and diving into the source (we’ll see if I can get sued by the end of the session). I’ll cover some Flex-specifics that are important when you decompile a Flex app (Flex framework classes, generated MXML code, data binding code, etc). But decompiling AS3 SWFs is just as applicable for SWFs produced in Flash Authoring as well, so there should be plenty of information for everyone.

And for all the paranoid folks out there, in addition to decompiling code, I’ll also cover a few techniques to protect your source code to make it harder for people to steal.

I hope to see some of you in England!

Standard
Flex/Flash/Actionscript

Some flexcoders stats

I’ve recently compiled a fairly complete database of all the messages ever sent to the flexcoders mailing list. I’ll be posting the sqlite database file that you can load into your own AIR applications to start playing with this data. But before anything else I thought I’d post a few fun tidbits:

Top 10 Posters

Poster # Messages # unique threads
Alex Harui 3259 2172
Matt Chotin 2793 2153
Tracy Spratt 2522 1886
Tom Chiverton 2368 1559
Manish Jethani 1296 1004
Gordon Smith 1371 978
JesterXL 1216 702
Abdul Qabiz 833 614
Michael Scmalle 904 513
Tim Hoff 798 470

Longest Threads

Subject # Messages # unique posters
Splitting FlexCoders into smaller, focused groups 130 28
Will Microsoft’s Silverlight Player Kill our beloved Flex? 127 48
Flex 1.5 price 102 36

[DISCLAIMER: I have not verified this data at all. For all I know I fucked something up in the scraping process and it’s all whack. Who knows.]

Method for gathering data
I wrote an AIR application that scrapes the mail archive site for a specific group. This pulled all the messages that are available on the flexcoders archive of mail archive. (to get this listing I did a search that encompasses the entire date range I wanted to get paged results for all the messages). Unfortunately I can only get pages of 10 messages at a time from the mail archive. And there are over 96,000 messages in the flexcoders archive. And I didn’t want to hammer the site to total death and wanted to respect the request to not request more than one page a second that’s in the mail archive FAQ. So how long does downloading 96,579 messages take if you download 10 at a time once a second? About 3 hours more or less.

Oh, and it turns out that the HTML in the mail archive pages isn’t valid XHTML, so parsing it can be a bit of a bitch. So I managed to get about 20,000 messages in when I ran into a parsing error that halted the whole process. After about 3 different tries I finally got all the way through.

[DISCLAIMER 2: The mail archive site lists something like 96,000 messages for flexcoders, but the yahoo group seems to have quite a bit more, more like 116,000. Why the 22k difference? I don’t know. Something’s whack, but I’m guessing that what I got is not the full 100% complete version of the messages. But hey, it’s the best I got right now.]


Why the hell?

We recently had a long discussion on flexcoders about whether or not the list should be split into multiple smaller lists. Notice the longest thread of all time in all of flexcoders history? Yeah, it’s that thread. So we debated back and forth and everyone seemed to have their own opinion. There were some assertions made about the stats of the list in terms fo # of people posting and losing previous subscribers. So I decided to get a database of all messages so I could try to figure some of that stuff out. So gathering the data was step 1. Now step 2 is using the data to try to figure out if people are in fact dropping off the list, and whatever other interesting tidbits I can glean out of it. I figure it’s a good way to play with some data visualization techniques.

What’s next with the data?
I’m going to post the sqlite DB file for anyone to download. The complete DB file is 90 megs. I’m also thinking about removing the “excerpt” column (which contains the first part of the complete message) because I assume that will drop the size considerably. I’m going to figure out whether I just want to post the 90 meg thing on my website or if I want to try to offload that somewhere, although I imagine there are only a few people who wpould be interested in downloading this thing anyway 😛

I’m also going to play with doing some visualizations of this data now that I have it in an AIR app. I’ll probably just take screenshots of what I come up with, seeing as to actually run this stuff you’d have to download a frickin 90 meg air file, which seems a little excessive. Or maybe I’ll give people a 90 meg AIR app, fuck it right?

I hope to post the sqlite database file over the weekend. Then as I have time I might start playing with the data and posting my results.

Standard
Flex/Flash/Actionscript

Proposal for a job at Adobe (that I never sent)

This is a document that I wrote back in October 2007. I forgot about it until just now. My original idea was to define my “dream job” within Adobe, explain exactly what I wanted to do, and tell them why they should hire me. For a variety of reasons I never sent this document. This was during a period in my life when I was considering a few different options for my “career”. I was doing the Flex consulting thing and billing my time hourly (which is pretty sweet). I was talking to Universal Mind about making the shift to a full time employee, and during that decision I considered what other full-time options I had.

When I first started this whole Flex blogging thing my original goal was to get a job at Adobe. No joke, I basically started blogging thinking “I’m going to blog, get good, show people I can do good shit, then ask for my dream job at Adobe.” The Adobe SF office is a 5 minute drive or 15 minute bike ride from my house in San Francisco, and I figured it would rock to work there doing something Flex related. Then my eyes were opened to the world of Flex consulting (the money, the women…) 🙂 But I always had a desire to go work for Adobe. So when I was considering full-time options, I obviously thought of boarding the mothership. So I wrote up a job proposal that describes the kind of job that I wanted. Yes, this is completely arrogant and egotistical. There were no job postings that I liked, so I decided to make one up. This was basically my way of saying: “You guys should want to hire me, but your job openings suck, so not only should you hire me, you should also make this sweet position just for me.”

I never sent this. In the end I decided that the position I was offered at Universal Mind was too good to pass up, and I was being ridiculous for even thinking anything otherwise (which I still believe). But I just read over this proposal again and I think that a lot of the ideas I bring up are still good ones. I would love to see this kind of experimental position created. So without further ado, here’s the job proposal I wrote. This is the main part of the document, I only took out the last page or so that talked about my relevant experience. If you can take this and get Adobe to create this job for you, go for it. I think this job would be sweet and it would benefit the Flex community and the Flex product as a whole.

——————————————-

JOB PROPOSAL
I am interested in a position within Adobe that would allow me to create experimental user interfaces and data visualization prototypes using Flex. The purpose of this proposal is to clearly explain the ideal position I have in mind, why such a position would benefit Adobe, and why I would be right for the job.

Job description
I propose an experimental software developer position to explore alternative and inspiring user interfaces created with Flex, focusing on alternative input methods and advanced data visualization techniques. Work would be heavily focused on Actionscript 3 and, more specifically, utilizing the Flex framework. It is important to emphasize the experimental nature of this work. This work is meant to move AS3 and Flex onto the cutting edge of research and development in user interfaces. The end goal of such work would be to inspire and teach the Flex developer community by publishing the open-source research results and blogging explanatory tutorials.

Reasons for being within Adobe
An important question that should be discussed is the benefit of bringing experimental community-focused development in-house in Adobe. I am already involved in open-source Flex projects externally, and I have done a fair amount of experimental work using AS3 and Flex that has been published on my blog. Regardless of where I am employed, I plan on continuing this type of work. However, being within Adobe will provide some serious advantages to all parties involved.

Experimental projects benefit three distinct stakeholders: me personally, the Flex developer community, and Adobe. However, nearly all the experimental work that I do is done outside of paid working hours, forcing me to decide between work that gets me paid and work that gets me excited (which can often overlap, but seldom do completely). A traditional employer does not have the resources to allow me to work on experimental projects that may or may not have a commercial use. But even if an experimental project is completely useless in the commercial software space, it still benefits me (through personal growth and education), the Flex community (through published source code and inspiration), and Adobe (by generating buzz and interest in the technology). Adobe is the only commercial organization that benefits financially from work that might have no commercial purpose.

While Adobe benefits from projects with no commercial viability, Adobe would also be in a position to benefit from possible commercial success of research projects. All projects would be reviewed by Adobe, which would allow the company to decide if a research project has interesting commercial possibilities. If so, a project could continue as an internal product development effort. If Adobe decides it does not want to pursue a project internally then the project still benefits the Flex community when it is released open-source.

Research Projects
The decision to take on research projects would take multiple factors into account: awesomeness, pragmatic feasibility within a limited timeframe, potential benefit to the developer community, and potential commercial application within Adobe. The first and most important factor is the wow factor of each project. I plan on making experiments that blow people away and show off the strengths of Flash Player. Flex/Flash Player allows us to make interfaces and data visualization prototypes unlike anything ever seen on the web (or on the desktop for that matter). I want to make things that amaze people.

Projects will also need to have short timeframes, at least in terms of creating something impressive that can be shared with the community. Future development of experimental projects might continue after the initial project timeline, either within Adobe or in the developer community, but each project would have an initial exploration phase of no longer than a few months. I’ve found that setting such time constraints leads to more focused development and more impressive results.

A major goal of all projects would be to benefit the developer community through the release of source code. Each project would include blog posts and technical articles explaining how the project was developed. This will encourage the developer community to use the source code in other projects, and will also provide inspiration that will lead to the development of even more impressive projects within the community. I have considerable experience blogging about custom Flex component development and AS3 experiments. I understand the importance of useful resources with well-written source code and explanations. As a developer, I think the most important resource for learning advanced techniques is the wealth of information found in blogs. I know that personally I’ve probably learned more from Ely Greenfield’s code than from any other single source (not to mention the amount of inspiration his examples provide). But now you’ve got Ely off architecting instead of writing code. It’s my personal opinion that Adobe should get back into technically-focused blogging, as opposed to the non-technical evangelism that seems to be the current priority.

The final consideration, which is purposefully listed last, is the commercial possibility within Adobe. A research project may have serious commercial possibilities, and given further development might turn into an official Adobe product. This seems all the more likely given Adobe’s movement into software services that are based on Flex (Buzzword, CoCoMo, Pacifica, Photoshop Express, Premier Express). It’s important to note that I would hope potential research projects would be brainstormed with possible commercial viability as an afterthought. Personally, I believe the most inspirational work is done without first considering the commercial possibilities.

BRAINSTORMING: possible directions for research
Be aware that the list of potential research projects below is an off-the-top-of-my-head list. The number of awesome possibilities that show off Flex/AS3 is nearly infinite. I have provided a list of current research interests, but the intent of this document is not to propose specific projects, but instead articulate why this type of experimental developer position is important.

Eye-tracking
There are various open-source projects for eye tracking using normal web cameras. This software could theoretically communicate to a Flash/Flex application using a local socket connection. This could allow Flex applications to receive data about where the user is looking within the interface. The possible uses of such data are amazing. We could make a Flex analytics app that would let developers visually analyze how users are interacting with their software. We could track not only mouse click interactions and mouse movement, but now also the actual eye movements. Companies that develop Flex applications would love the ability to accurately track their user’s focus. And with video we could track where people are looking as the video plays, which could be commercially valuable for online advertising companies to run studies, especially now that video-overlay advertisements are becoming popular. Imagine a heatmap that plays live over a video indicating the hotspots that most people view.

Multi-touch
I’ve been experimenting with some home-brew multi-touch hardware and an early AS3 api that allows me to incorporate a multi-touch interface in a Flex application. Multi-touch is currently a hot topic because of the iPhone and the Microsoft Surface. In terms of availability to developers, the Flash options for working with multi-touch are the most advanced and powerful. The AS3 API needs a lot of work to be ready for mass use and the hardware is still in its infancy, but the demos that we could build would blow people away.

Alternative menu systems
I’m interested in exploring alternatives to traditional menu systems within Flex applications. I’ve had great success implementing a radial menu in Flex in my TileUI prototype application, I would like to explore menus that size their items based on past usage, three dimensional menu systems, powerful shortcut-key navigation with Flex, and zooming menu interfaces.

3D interfaces
I have implemented a 3D interface for an experimental project called TileUI. This project used many available open-source AS3 libraries (most importantly PaperVision 3D and Actionscript Physics Engine). The result is an impressive prototype that shows off the amazing visual capabilities of the Flash Player. I would like to take the concept of 3D interface design more generally, and explore alternative 3D possibilities that would really demonstrate how we can create experiences far beyond traditional user interfaces.

Standard
Flex/Flash/Actionscript

I’m sponsoring 360|Flex

360flex_sanjose_badge200.gifI’m an official sponsor of the 360|Flex conference! I think I am the first and only “just a normal guy” (not a company or independent contractor) to be a sponsor. I’m not looking for clients, I’m not looking for work… I’m just a dude who likes the conference. I like it so much that I was really sad about not being able to speak at the next 360|Flex in San Jose in August. So since I can’t be there, I figured out how to get my face in front of y’all anyway 🙂 I’m sponsoring the official 360|Flex shirt that all attendees will get and all you suckas have to wear my silly face on your sleeve.

screenshot057.jpgCheck out all the sponsor logos on the 360|Flex site (screenshot on the right). You see that dumbass-looking face with the thumbs? That’s me!

Why the hell?
I owe a lot to 360|Flex. At the first one in San Jose back in March 2007 I made a ton of contacts that have helped me professionally. I happened to sit next to Tom Link and Brett Cortese from Universal Mind in the back of some session and we started talking. Now I’m a full-time employee with Universal Mind doing sweet Flex work. I got some of my work shown off in the keynote of that conference too, and people started hearing my name and wondering who I was.

Then at the second 360|Flex I did my first-ever conference presentation (on custom Flex component development). Suddenly I was somehow an authoritative Flex developer, and the main reason I actually spoke at that conference was because Tom Ortega asked me to in one of our local Flex user group meetings (in addition to planning 360|Flex, Tom also runs SilVaFug). I made a lot of friends at that conference and felt like I really became a part of the Flex community. And then I had a blast at the last 360|Flex in Atlanta, where I spoke again.

Cha-ching
I make damn good money as a Flex developer, and I owe a lot of that to the fame and connections I made at the 360|Flex conferences. So this is my little way of paying some of that back. So thank you Tom and John for all your hard work!

Standard
Flex/Flash/Actionscript

I’m Speaking at Flash on the Beach! (what should I present?)

FOTBI’m speaking at the Flash on the Beach conference in Brighton, England in September! I’m really excited about this conference because it’s not a Flex conference, it’s a Flash conference (but of course there will be plenty of Flex represented). I’ve got a little notoriety among you Flex developers, but Flash guys are like, “Doug McWho?”, so that’ll be pretty dope to get out in front of a different audience.

I’m going to be presenting on a yet-to-be-determined Flex topic, and I’ll likely ask for some suggestions as I’m refining my presentation ideas. Here are my current potential topics:

  • super-sweet data visualization in Flex
    I’ve been reading lots of Edward Tufte books and other information visualization books. These are fantastic resources to help you think about effective ways of visualizing information, and I’m thinking about taking many of the principles and applying them to the Flex framework. This would involve the creation of a bunch of altered charting controls (new axis renderers, different chart types, etc). And I’d analyze what’s good and bad about the current set of data visualization components available (in the Flex SDK, the iLog component set, and the open source community). I’d probably throw in some brief mapping examples too.
  • Maps, maps, maps
    I’ve been doing a ton of Flex mapping applications for work. Unfortunately a lot of that stuff can’t be shared (I certainly can’t show much of the code, and I can’t even show demos of some of it). But I’m thinking about doing a session that goes over all the different options for AS3 map components (we now have ESRI, MapQuest, Google, Yahoo, UMap, Poly9). A year ago or so ESRI was pretty much the only game in town, now there are a bunch. So I’m thinking about showing some demos of how to use the different map components, and some data visualization techniques for working with geospatial data.
  • advanced open source Flex projects
    My presentation at the last 360|Flex conference in Atlanta was on using open source projects in your Flex apps. I’m thinking about doing a part 2 of that topic anhd going into more depth with a smaller number of projects. My last preso was sort of the shotgun approach (ie show many projects with only cursory information). This preso would be focusing on creating two or three demos that combine a handful of projects and dive deeper into the code and how I went about creating the demos.
  • Decompiling Flex applications for fun and profit
    I’ve been playing a lot with SWF decompiling tools and ripping apart lots of Flex applications. There’s a lot you can learn from this (it’s not an inherently bad thing to decompile someone’s code). I’m thinking about stepping through the process of decompiling an app and talk about what you can learn, what decompiling actually gets you, how you can piece things back together, etc. I figured I could rip apart one or two main example apps (like Photoshop Express or Buzzword). I toyed with the idea of submitting this as a topic for MAX, just to see if Adobe would let me rip apart the Buzzword code base and show it off to everyone. But I figure at FOTB it’s all fair game.
  • Using Flash 10 features in your Flex apps
    I’m considering a presentation that focuses on taking advantage of all the new features of Flash Player 10 (specifically in relation to the Flex SDK). I’m considering this topic because it would force me to stay on top of the new technology and know my shit. I haven’t yet played with FP10, so this would force me to do some cool stuff.

I’ll be holding down the Flex front with a few other guys, I know that Ben Stucki and Tink are both going to present on Flex topics. I’m also excited to meet some Flash peeps I’ve admired for a long time.

So if you’re looking for a European vacation near the end of September, then come to FOTB and hang out in Brighton! It’s gonna be sweet.

Standard
Flex/Flash/Actionscript

Upcoming conferences (where I’ll be, where I won’t)

This is a quick post to about a few of the conferences I’m either speaking at, going to, or regretting not being able to attend.

360flex_sanjose_badge200.gif360|Flex
When: August 18-20, 2008
Where: San Jose, CA

I can’t go! Nooo! I’ll be in Sweden. I might make it back in time to come and hang out with people at one of the last parties, we’ll see. Tom tried to convince me to fly from Sweden to Cali and give a presentation the next day and that just sounded like a horrible idea, so sadly I won’t be presenting at this 360|Flex. I really wanted to, I think 360|Flex is one of the best conferences, and it’s certainly where I’ve had the most fun. I’ve attended the first three 360|Flex conferences (all the ones in North America) and I spoke at the last two. And since I love the conference so much (but can’t present a session this time), I’ve made sure I’ll still make my mark on all attendees (more on that in a post tomorrow).

speakerbadge_200_120_e.gifFlash on the Beach
When: September 28-October 1, 2008
Where: Brighton, UK

I’m presenting! w00t! I’m looking forward to this one, I get to fly over and kick it in England and present cool Flex shit to a bunch of Flashers. I’ll write a full post about FOTB shortly…

screenshot001.jpgAdobe MAX
When: November 16-19, 2008
Where: San Francisco, CA

I’ll be attending MAX, but not presenting. I thought about submitting a session topic, seeing as MAX is literally in my backyard this year. But I’ve heard some horror stories about multiple required submissions months and months ahead of time, and that’s not really how I roll. I’ve been pretty overwhelmed with writing Flex for Dummies, so the MAX session topic submission just sort of felt like an additional ordeal I didn’t want to deal with. That said, I’ll definitely be there and we’re going to rock the shit out of San Francisco, so come and play.

Standard
Uncategorized

A picture of my sent email box

Recently I haven’t been blogging at all. I’ve largely fallen off the face of the earth. Take a look at my sent emails from the past week and see if you can figure out why.

sent_emails.jpg

I use colored labels in gmail to help easily categorize emails. The blue just means it was an email I received to my personal email address (as opposed to the green which is to a work address). The grayish means it was sent to a mailing list (I responded to one thread on the papervision list and 3 on flexcoders). The green is for work (3). And then there’s the red. The red is anything that has to do with the Flex For Dummies book that we’re wrapping up.

So if I haven’t gotten back to you I apologize. The red consumes my life. But we’re close.

Standard
Flex/Flash/Actionscript

MuxMaster update: download functionality removed and a new icon

I was contacted by Justin Ouellette, the creator of Muxtape, who asked that I remove the download functionality from MuxMaster. I’m torn about this issue, on one hand Muxtape is a service based on technology that makes distributing MP3s extremely easy. Justin has chosen to hide this capability because he’s appropriately scared of the consequences of having Muxtape turn into a file-swapping website. But essentially Muxtape is a massive dropbox for MP3s. On the other hand, I really do like Muxtape, and I don’t really want to be the one partly responsible for getting the site shut down.

Note that this isn’t a decision about legality (not for the legality of MuxMaster anyway) and I wasn’t coerced or threatened or anything like that. Justin just sent me an email saying he liked the app (and is cool with people making apps like this) but that the download feature endangers Muxtape. I agree, although I still don’t know whether I should feel obligated to remove the download feature.

MuxMaster icon
muxmaster_128.pngOn a lighter note, Juan Sanchez whipped up a little icon for MuxMaster, which is now included in the latest version of the application. Pretty sweet huh? Thanks Juan!


You can still download MuxMaster (Lite) without the download functionality:

This movie requires Flash Player 9.

If the above install link doesn’t work, do this:

  1. Make sure you have the AIR runtime, if you need to download it from Adobe
  2. Download and run the MuxMaster installer
Standard