So there I was at 360|Flex giving my presentation. I guess when you call your session “Cool Shit” you’re just asking for people to fuck with you :) So I’m going through some example applications and I’m near the end of the session and I get to the grand finale. The demo I was about to show was an augmented reality demo, combined with some head tracking stuff too. And I figured since it’s called “augmented” reality I’d do a demo that really captures that word, so while standing there in front of a packed room of developers I take off my shirt to reveal an augmented reality marker on my chest. When I step in front of the webcam the video detects the marker and shows a big muscular chest instead of my wimpy geek body. As I was doing body builder poses and taking silly pictures, suddenly *whack* – I get hit in the face with a flying object. Not quite sure what the fuck just happened, so I keep going on with the presentation like normal (for some reason the fact that someone threw something that hit me in my face didn’t seem all that abnormal). Then suddenly there’s a massive barrage of projectiles raining down on me. It takes me a while to figure out what’s going on, and then finally I understand: the audience is pelting me with little bouncy balls. What the fuck?

This video of part of my session has been floating around a bit, and if you don’t know this back story you probably have no idea what the hell is going on. But check out the video, and when you see me posing with my muscles and then suddenly recoiling in pain, and then you hear everyone laugh, that’s when I start getting hit with a shitload of bouncy balls.

So it turns out that some devious developers (I believe led by Nate Beck) were out drinking at some place where you play games and get tickets that you can redeem for prizes (aren’t you boys a bit old to be at Chuck E Cheese?). So they get a bunch of tickets and what do they decide to cash in for? Bouncy balls. All bouncy balls. Then the next day they come in to my session, and I have no idea how they pulled this off without me noticing, but they hand out these little bouncy balls to everyone in the first few rows of the room. Apparently the instructions were: when Doug takes off his shirt, let the balls fly. Awesome. I guess word had gotten out enough that I was doing something that involved getting partially naked (either from my tweet or just from me spilling some details when I was out drinking). And you gotta admire the guy who threw the first one (and hit me right in the face no less), that takes balls (pun obviously intended).

So that’s the story behind that video for anyone who saw that and had no idea what the hell was going on. Nate, I admire your creativity, you got me good. But you better watch your back, I’m going to be sure to be in the front row of any presentation you might be doing :)

P.S. I’m working on posting all my slides and code from my session, hopefully I’ll get all that up tomorrow.

del.icio.us:I got punk'd at 360|Flex (in my own session!) digg:I got punk'd at 360|Flex (in my own session!) spurl:I got punk'd at 360|Flex (in my own session!) wists:I got punk'd at 360|Flex (in my own session!) simpy:I got punk'd at 360|Flex (in my own session!) newsvine:I got punk'd at 360|Flex (in my own session!) blinklist:I got punk'd at 360|Flex (in my own session!) furl:I got punk'd at 360|Flex (in my own session!) reddit:I got punk'd at 360|Flex (in my own session!) fark:I got punk'd at 360|Flex (in my own session!) blogmarks:I got punk'd at 360|Flex (in my own session!) Y!:I got punk'd at 360|Flex (in my own session!) smarking:I got punk'd at 360|Flex (in my own session!) magnolia:I got punk'd at 360|Flex (in my own session!) segnalo:I got punk'd at 360|Flex (in my own session!) gifttagging:I got punk'd at 360|Flex (in my own session!)

360FlexI’m leaving for the 360|Flex conference in Indianapolis tomorrow, so as I was getting ready I was looking over the schedule to get a feel for the sessions that I might attend. This list below is my tentative itinerary. It sort of represents the stuff that I personally find most interesting, but it certainly shouldn’t be thought of as a ranking or judgment or anything like that. 360|Flex is sweet because there’s usually a few sessions occurring at the same time that are all interesting, so I tend to jump around a lot. And of course I also tend to just hang out with people instead of going to any sessions at all, so we’ll see how many I actually attend. I’ll be presenting my session, “Cool Shit”, on Wednesday at 10:00 am, so be sure to at least come to that one!

Monday
10:00 – Michael Labriola – assertYourself
Michael Labriola is always one of the best speakers at 360|Flex (you hear that Labriola? you got a serious reputation to live up to now). In the past he’s given top-notch presentations that go into crazy amounts of uber-technical detail, and somehow people always walk out of the sessions entertained. Unit testing is a huge weakness of mine, something that I know I need to do and do better. So if Labriola brings his game like usual then this session should be entertaining as well as useful.

1:00 – Leonard Souza – Get Phidgety with Phidgets
I’m really excited for this session. Phidgets are little physical devices that you can connect to your computer and control. Simple things like RFID readers, or little sensors of various kinds, or small motors. You can talk to them from your Flex apps and make them do your bidding. The integration with physical devices is something that has fascinated me for a long time, and I’m really looking forward to seeing some cool stuff.

2:30 – Sean Hess – Creating a Realtime Multiplayer Game with AFCS
I was toying with the idea of using some of Adobe’s realtime services (either AFCS or RTMFP) for some gaming ideas. I haven’t had the time to try out any of my ideas, but maybe this session will reinvigorate me. And I figure I might as well stay on top of whatever Adobe is offering with Cocomo just so I’m aware of what the options are.

4:00 – Joe Berkovitz – Dynamic Audio Synthesis on the Flash/Flex Platform
The audio capabilities of Flash Player 10 are something I really haven’t dug into, but I’d like to get a good grasp of what the possibilities are. I’m torn between trying to go see Labriola’s (second) session in this same time slot, but if I see him present in the morning then I can’t be caught in his other session otherwise I’ll seem like a stalker :)

Tuesday
8:30 – Joe Johnston – FLEXperience – Putting the Flex in UX
Honestly, I doubt I’ll make it out this early. I’ve been to enough 360|Flex conferences to know that the chances of getting up early for the second day are almost none (to all the presenters in the morning: I feel for you). But if I can get out of bed, I’ll be checking out Joe Johnston’s preso on User Experience. Joe’s a fellow Universal Mind guy, does some sweet work, and I’ve never seen him present.

10:00 – Ben Stucki or Tom Gonzalez
So here I’m really torn. Ben is a good friend of mine (and former coworker on SpatialKey) and he’s been working on an audio startup for a while now. He’ll be presenting the progress he’s made on his startup, AudioSpike, and I’m sure he’ll be covering some cool Flash Player 10 audio stuff. But at the same time Tom Gonzales (who I’ve also had the pleasure of working with on SpatialKey) will be presenting Axiis, which is a new data visualization library he’s been working on with Michael VanDaniker. I’m big into data vis stuff, so seeing what he’s cooked up would definitely be interesting and probably more useful in everyday life, so I really don’t know which session I’ll end up in (maybe hopping between both).

1:00 - Francisco Inchauste – RIA Mojo – Making Your Flex Application Stand Out with Great UX
Francisco is yet another fellow UM employee and also a member of the SpatialKey team. Universal Mind has really been focusing on building a fantastic UX team over the past year and I’ve had the pleasure of working with Francisco before, so I know he does fantastic work. This session (along with Joe Johnston’s) will sort of give me an additional look behind the curtain at their UX process.

2:30 – Jeremy Saenz – Shedding Skins – Programmatic Skinning of Flex
So I don’t really care all that much about programmatic skinning (not that it’s not a worthwhile topic), but Jeremy is the dude who did the Flex Gangsta video, so I’m looking forward to seeing him present. Half the reason for going to sessions at these conferences for me is to check out how other people present, see how they interact with the audience, etc. I’m hoping Jeremy busts some geeky badass-ness.

4:00 – Laura Arguello – Breaking Down Your Applications with Mate Framework
I’ve heard great things about Laura presenting on Mate. Developers seemed to gush all over Mate the instant it was released, and yet somehow I still haven’t built an app using it. So it’s about time I get a good handle on what they did with the framework and start playing around.

Wednesday
10:00 – Doug McCune – Cool Shit
This session is going to be the bomb! I can’t wait! :) In all seriousness, my session should be a hell of a lot of fun. I’ve got a few fun tricks up my sleeve and as long as I don’t get banned from the hotel by the end of the session we should all have a good time. I’ll be writing a little preview blog post to give some details about what I’ll be covering, but until then you’ll just have to trust that you’ll be entertained. It will be super dorky, hopefully inspirational, and maybe a bit scandalous.

After this I’ll probably pass out for a few hours before my flight out later Wednesday evening. But if I actually make it to any sessions afterward, this is what they’ll be:

1:00 – Paul Robertson or Jun Heider
Again, torn between two sessions. I’ve heard Jun gives a really good presentation (which I’ve never had a chance to see), but I could probably also use the information about AIR encrypted databases and security that Paul will be covering. I’ll probably walk back and forth poking my head into a few sessions during this slot.

2:30 – Ryan Campbell or Adam Flater
I’ll probably duck into both these sessions because I’m curious what kind of examples Ryan is going to show that use OpenFlux, but I’d also like to get the lowdown on Merapi (and heckle Adam from the back of the room). So we’ll see what I end up doing. Will be jumping around again for these sessions.

4:00 – Ryan Phelan – Bending and Flexing
Last slot of the conference, that’s a tough one. God bless you all for holding it up at the end, someone has to do it. I’d love to check out the presentation on Pixel Bender (is this really the only presentation about Pixel Bender??). My flight out of Indianapolis leaves at 6pm, so I assume I’ll have to miss this session, which is a shame because I could really use some Pixel Bender knowledge. I wonder if any of the other sessions will be mentioning Pixel Bender…

So that’s my initial list. Like I said, this is just the stuff that I’m interested in, not an endorsement or ranking or anything like that. If I didn’t put your session down you can feel free to come punch me in the face at the conference.

If you’re going to be at 360|Flex definitely come to my session or stop me walking around and say hi. I will definitely be at any of the parties or bars, so come share a beer :)

del.icio.us:My 360|Flex Itinerary digg:My 360|Flex Itinerary spurl:My 360|Flex Itinerary wists:My 360|Flex Itinerary simpy:My 360|Flex Itinerary newsvine:My 360|Flex Itinerary blinklist:My 360|Flex Itinerary furl:My 360|Flex Itinerary reddit:My 360|Flex Itinerary fark:My 360|Flex Itinerary blogmarks:My 360|Flex Itinerary Y!:My 360|Flex Itinerary smarking:My 360|Flex Itinerary magnolia:My 360|Flex Itinerary segnalo:My 360|Flex Itinerary gifttagging:My 360|Flex Itinerary

screenshot102 An interview I did with Jon Rose of InfoQ was just posted. I talk about my experience with Flex component development, the Flex commuity as a whole, and the current state of the enterprise software market in general. I’ll probably get some shit for some of my comments about enterprise software where I say that it’s all “almost uniformly horrible” :) I don’t really mean to call all enterprise software crap, it was more a broad strokes comment, the kind I’m apt to make after a few beers. So if you’re making awesome enterprise software, don’t be mad at me, keep doing awesome stuff.

Here’s just a small excerpt from the interview, read the entire thing at InfoQ.

Enterprise software is almost uniformly horrible, but there’s no reason for that. We’re seeing a “UX revolution” in RIA design, and for all the buzzword nonsense surrounding “user experience, ” there’s something real happening in terms of the overall quality of the experience delivered by RIAs. We’ve seen some really great and innovative work in consumer RIAs, with a trend toward simple and intuitive interfaces. And yet in enterprise software this trend has barely even begun, it’s all still complex. I want to see enterprise applications treated like consumer apps, with the same attention to the user experience and with a consistent drive to simplify and make everything more intuitive. Complex systems don’t have to be presented with confusing software. But it takes more work to figure out the simple, elegant solution. It’s far cheaper and faster to make bad complex software than good simple software.

del.icio.us:Interview up on InfoQ digg:Interview up on InfoQ spurl:Interview up on InfoQ wists:Interview up on InfoQ simpy:Interview up on InfoQ newsvine:Interview up on InfoQ blinklist:Interview up on InfoQ furl:Interview up on InfoQ reddit:Interview up on InfoQ fark:Interview up on InfoQ blogmarks:Interview up on InfoQ Y!:Interview up on InfoQ smarking:Interview up on InfoQ magnolia:Interview up on InfoQ segnalo:Interview up on InfoQ gifttagging:Interview up on InfoQ

All of us at Universal Mind who have been hard at work on SpatialKey are incredibly proud to announce that we have begun a private beta program.

To really launch this product in style, we’ve put together this video to give an overview of the SpatialKey system. Even after watching it a dozen times I get blown away every time I watch it. Make sure to check it out in all its HD full-screen glory!

We’ve also got a whole series of videos that go into much more detail of all the different features. If you spend a few minutes watching some of those we’re betting you’ll start brainstorming ideas about how you can use SpatialKey with your own data.

This private beta period means that you fill out the form requesting access and we will be adding accounts on a first come first served basis over the next few weeks. We will add accounts as fast as we can over the following weeks and then after this private beta period we will open the system up to a full public beta, at which point anyone will be able to sign up for a trial account. SpatialKey will be a software as a service product that you’ll pay for with a monthly subscription based on your usage and data needs (pricing details will be coming very shortly, for now all accounts are a free trial with a cap of 10,000 rows per dataset).

I’ll be posting much more about SpatialKey and what you can do with the software, but until then go check it out and let us know what you think!

SpatialKey has been a long time coming and it wouldn’t be possible without the fantastic work of everyone involved. A personal thank you (in no particular order) goes out to every talented member of the SpatialKey family: Darron, Ben, Andy, Zach, Reggie, John, Tom G, Anthony, Francisco, Robert, Mike, Brandon, and Tom L.

del.icio.us:SpatialKey launches private beta digg:SpatialKey launches private beta spurl:SpatialKey launches private beta wists:SpatialKey launches private beta simpy:SpatialKey launches private beta newsvine:SpatialKey launches private beta blinklist:SpatialKey launches private beta furl:SpatialKey launches private beta reddit:SpatialKey launches private beta fark:SpatialKey launches private beta blogmarks:SpatialKey launches private beta Y!:SpatialKey launches private beta smarking:SpatialKey launches private beta magnolia:SpatialKey launches private beta segnalo:SpatialKey launches private beta gifttagging:SpatialKey launches private beta

UPDATE: This event has passed. For some reason this post showed up again on the Adobe aggregator. Apologies for that, don’t got to Miami on Friday unless you just want to get some sun.

If you’re in the Miami area or could use a nice weekend vacation, go check out FlexCamp Miami and get your Flex groove on Miami Vice style. The event’s got a great lineup of speakers and some pretty dope topics from Flex 4 to frameworks to robots to UX. I hear that Andy Powell’s session that’s called “How to Blow Your Mind with AIR” might actually have blow for all attendees. And word on the street is that Greg Wilson from Adobe is going to be doing the keynote in his underwear. If you’re in the area you should definitely stop by, and if you’re from out of town maybe you can grab a plane ticket for dirt cheap (stimulate that economy!) and fly in and even buy up some nice foreclosed waterfront property while you’re there. The event itself is recession-priced at a measly $30, and you can even pony up the cash at the front door when you walk in.

When:
Friday, March 6, 2009

Where:
Hurricane100 Room
BankUnited Center
University of Miami

screenshot087

Disclaimer: I have no actual information that suggests Andy will be dealing drugs or that Greg Wilson will be naked.

del.icio.us:FlexCamp. Miami. Friday. digg:FlexCamp. Miami. Friday. spurl:FlexCamp. Miami. Friday. wists:FlexCamp. Miami. Friday. simpy:FlexCamp. Miami. Friday. newsvine:FlexCamp. Miami. Friday. blinklist:FlexCamp. Miami. Friday. furl:FlexCamp. Miami. Friday. reddit:FlexCamp. Miami. Friday. fark:FlexCamp. Miami. Friday. blogmarks:FlexCamp. Miami. Friday. Y!:FlexCamp. Miami. Friday. smarking:FlexCamp. Miami. Friday. magnolia:FlexCamp. Miami. Friday. segnalo:FlexCamp. Miami. Friday. gifttagging:FlexCamp. Miami. Friday.

I finally broke my Twitter silence and tweeted so I could participate in the tweetcoding competition that Grant Skinner launched. Here’s the code of my amazing entry:

if(!i++) { o=new Loader(); o.load(new URLRequest(["http:",,"is.gd","kUV9"].join(“/”))); } if(o && o.width) { stage.addChild(o); }

And here’s the link to the auto-generated SWF produced by that code.

So for those of you who have been following me on Twitter waiting for me to say something, I hope a dorky joke made of code is everything you expected and more. My entry is kind of cheating I suppose, but it’s all for a good laugh :)

The tweetcoding competition is really cool, and people who are taking it seriously (obviously myself not included) are making some really impressive stuff in 140 characters. If you haven’t perused the entries, go to this page and explore. Anything tagged with #tweetcoding is shown in that list, and all the entries submitted are automatically compiled.

And as a tip to others, if you’re going to do an entry, make sure to write it and test it in Flash. I first tried just doing an AS3 project in Flex Builder, but running code in an AS3-only Sprite-based project is quite a bit different than running code on the timeline. It wasn’t until I installed Flash CS4 and tested on the timeline that I got an entry that the tweetcoding compiler would compile correctly (I submitted 3 entries that didn’t compile).

del.icio.us:My foray into tweetcoding digg:My foray into tweetcoding spurl:My foray into tweetcoding wists:My foray into tweetcoding simpy:My foray into tweetcoding newsvine:My foray into tweetcoding blinklist:My foray into tweetcoding furl:My foray into tweetcoding reddit:My foray into tweetcoding fark:My foray into tweetcoding blogmarks:My foray into tweetcoding Y!:My foray into tweetcoding smarking:My foray into tweetcoding magnolia:My foray into tweetcoding segnalo:My foray into tweetcoding gifttagging:My foray into tweetcoding

On the project I’m currently working I was recently assigned the following bug:

runtime errors hose application
It seems that when a RTE encountered, the app is pretty much hosed (somewhat unpredictably) until the app is reloaded.

Since non debug players simply swallow the error without any other action, I assume users of the nondebug player who encounter RTEs will report odd behavior with is more of an effect that a cause.

Is there anything we can do to handle this any better?

This is a well known issue with Flash Player. There’s no global exception handling. It’s the most voted on issue in the Flash Player bug database (https://bugs.adobe.com/jira/browse/FP-444). It’s duplicated within the Adobe bug database a few times, and even one of the duplicates is the second most voted on bug in the AS Compiler bug database (https://bugs.adobe.com/jira/browse/ASC-3139). Combine those votes and you’ve got by far the single most wanted feature in Flash Player.

My initial response to this issue was to just say it’s impossible given the current state of Flash Player. But then I got thinking about possible solutions.

What about using JavaScript?
So let’s say I’m resigned to the fact that I cannot have any kind of global exception handling. What if I set up a simple pingback function in my Flash application that was called with JavaScript through ExternalInterface? The only purpose of this function would be to notify the HTML wrapper that the application is responding. Basically the HTML pages says “Yo Flash, you alive?” and Flash says “Yup, still pinging!”

Then if you ever don’t get a ping back you know that something is seriously wrong. Like, application-is-totally-hosed type of seriously wrong. You could then at least display a big ugly crash screen overlay on top of your app and give the user a little description field to file a bug report to tell you what they were doing when the app broke. You wouldn’t be able to save the app from breaking, but you would at least tell the user that the app is broken (which is much better than letting them keep trying to use a broken application) and you might get valuable bug reports to help you find the issue.

So here’s my big question:

In your experience with Flash applications and runtime errors that cause the application to stop functioning correctly, would a simple pingback function of the main application:

  • A. continue to run after the RTE (since the pingback function is so simple, doesn’t do any Flash rendering, or for whatever other reason)
  • B. always stop running after a RTE
  • C. sometimes keep running and sometimes stop running depending on the type of RTE

I have a feeling that the answer is C, which is half useless (although might be better than nothing). But if you know for a fact that you can write some kind of function that will always stop running after ANY runtime error in your application, please let me know (maybe this could include checking something in one of the Flex manager classes? verifying your main application is still laying itself out to the right dimensions? still able to add and remove a simple item from the stage?).

Yes, I am crowdsourcing my bugs.

del.icio.us:How are you doing global exception handling in Flex/Flash/AS3? digg:How are you doing global exception handling in Flex/Flash/AS3? spurl:How are you doing global exception handling in Flex/Flash/AS3? wists:How are you doing global exception handling in Flex/Flash/AS3? simpy:How are you doing global exception handling in Flex/Flash/AS3? newsvine:How are you doing global exception handling in Flex/Flash/AS3? blinklist:How are you doing global exception handling in Flex/Flash/AS3? furl:How are you doing global exception handling in Flex/Flash/AS3? reddit:How are you doing global exception handling in Flex/Flash/AS3? fark:How are you doing global exception handling in Flex/Flash/AS3? blogmarks:How are you doing global exception handling in Flex/Flash/AS3? Y!:How are you doing global exception handling in Flex/Flash/AS3? smarking:How are you doing global exception handling in Flex/Flash/AS3? magnolia:How are you doing global exception handling in Flex/Flash/AS3? segnalo:How are you doing global exception handling in Flex/Flash/AS3? gifttagging:How are you doing global exception handling in Flex/Flash/AS3?

In my recent Flasher Magazine interview I talked about how much I dislike the “advanced” classes in the Flex SDK that were shipped with Flex 3, namely the AdvancedDataGrid, the OLAPDataGrid, and the grouping and hierarchical collection classes. I also said that I thought that all the list-based controls (DataGrid, Tree, List, etc) were too bloated and slow and that they should all be rewritten from scratch. I realized that that sounds a bit harsh, so I wanted to try to back up those statements with some code metrics.

I’ve put together a spreadsheet that includes each class in the Flex framework, including charting and the advanced data visualization package. This shows the number of lines of code in each file, breaking down the total number of blank lines, comment lines, and actual code lines. I’ve colored the rows to indicate if the class belongs to the advanced data visualization package of Flex 3 (yellow), the charting framework (blue), the AIR SDK (red), or the open source Flex SDK (white).

Here are the top 20 classes, ordered by actual lines of code (not counting comments and whitespace):
screenshot086

To get these numbers, I used a free program called cloc to analyze the source code. Cloc is a perl script that analyzes a bunch of different languages, including ActionScript.

For the full list, check out the spreadsheet. This is for version 3.0.0 of the Flex SDK, it does not include anything released in SDK versions 3.0.2 or 3.2 or any of the new Flex 4 classes.

So just look at that list of top classes. Out of the top five, three of them are the new classes for the AdvancedDataGrid. It’s also worth nothing that AdvancedListBase and AdvancedDataGridBaseEx are not used for anything other than base classes for AdvancedDataGrid. If you look at the inheritance chain for AdvancedDataGrid, it looks like this:

UIComponent
ScrollControlBase
AdvancedListBase (4,553 lines of code, 8,573 total)
AdvancedDataGridBase (1,184 lines of code, 2,084 total)
AdvancedDataGridBaseEx (4,503 lines of code, 7,428 total)
AdvancedDataGrid (5,385 lines of code, 8,432 total)

That means that the entire codebase for the AdvancedDataGrid is 15,605 lines of code (26,517 if you include comments and whitespace). That’s 7% of the entire Flex codebase in those 4 classes. Note that this is not including ScrollControlBase or UIComponent, only the new classes in Flex 3. Also note that AdvancedDataGrid doesn’t inherit from ListBase or DataGrid at all, and ListBase is the second largest class in the entire framework.

So this means that when I run into a bug in the AdvancedDataGrid (which has happened a lot), I’ve got about 30,000 lines of code to wade through to try to debug my problem. No thank you.

The other two out of the top five are ListBase (which is why I said the entirety of the list classes is too big) and UIComponent (which I think is understandable, and I haven’t run into too many problems that have root causes in UIComponent, unlike ListBase which continues to be a big headache for me). Then number 6 on the list is DataGrid (oh, but don’t forget about #12 on the list, DataGridBase). If you group all list-based classes together (meaning the advanced classes and the original list/datagrid/tree classes), you’ve got 9 out of the top 20.

Code quality
This post is only about raw numbers. There’s an entirely different topic of code quality that I can write post after post about when it comes to the quality of the AdvancedDataGrid (and related classes). They use noticeably different coding conventions, they deviate dramatically from the best practices employed by the other components, and they are plagued by performance problems. But that discussion is for another post. For now I just wanted to point out the shear massive volume of code that you’re using when you use these classes.

Am I being too harsh?
Some would argue that the classes have to be big, given that they do so much. After all, it is called the AdvancedDataGrid, it’s doing crazy advanced stuff. I call bullshit on that argument. In my opinion, I just don’t think there’s an excuse for such massive classes. They make developers lives miserable when trying to debug, but I also think it is indicative of a sloppy coding style. The mentality sort of seems to be “throw more code at the problem until you get it to work.” Check out the expandItem method of AdvancedDataGrid. It’s 445 lines long – this single method is longer than 80% of all the other Flex classes in the framework (yes, I checked how many classes are under 445 total lines). That method even includes a spectacular commented out block of code with this comment:

// Dont know why this is done
// So, commenting it and using the rowHeight instead

Awesome. I guess as long as it passes the unit tests go ahead and ship it :P

del.icio.us:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) digg:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) spurl:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) wists:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) simpy:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) newsvine:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) blinklist:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) furl:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) reddit:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) fark:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) blogmarks:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) Y!:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) smarking:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) magnolia:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) segnalo:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid) gifttagging:Analyzing the size of the Flex framework (or why I hate the AdvancedDataGrid)

A few months ago I decided that my Eclipse setup was far from optimal. I was using slightly customized versions of the default Flex Development and Debugging perspectives that ship with Flex Builder. I had customized them to suit my personal preferences (things like making the Variables pane take up the full screen height). But the biggest problem I had was the debugging perspective. When you have all the panes you need open on the same screen (code editor, debug panel for stepping through lines, variables pane for inspecting variables, console for reading log statements, navigator for selecting different files) you end up with a tiny area for actually reading the code in the code editor.

The old single-screen perspective
Here’s a screenshot showing how bad my debugging perspective could become:

singlescreen_debugging

I’d usually try to edit code within a maximized code editing window by double clicking the code editor I was working in, then restoring it back to the small size when I was stepping through debugging. And often I’d hide the console view or move it around so I could get more vertical space. But in the end it was always a struggle to have access to all the pieces I needed and still be able to edit code.

The new dual-screen perspective
So I finally decided that having Eclipse within a single monitor just wasn’t going to cut it. For most of my development work, I plug my laptop into an external 22-inch monitor, which gives me a resolution of 1680×1050 on my external monitor and 1440×900 on my laptop monitor. When I was using Eclipse on a single screen I would always put it on the larger screen to maximize space. But now I decided to move all the panels other than the code editor and file navigator to my laptop screen instead (which sits just to the left of my external monitor).

My current setup looks like this (this image is small, but full res images of each screen follow):

side_by_side

My main external monitor screen is the one on the right and is dedicated to viewing and editing code. I’ve stripped everything else out, and even stripped down the default Eclipse toolbar items to only those that I actually use on a daily basis.

Right screen (external monitor):

dualscreen_right_annotated

Left screen (laptop):

dualscreen_left_annotated

Now I always have a code editor that takes up the maximum amount of space I have. I originally tried moving the File Navigator to the left screen as well, but found that a) it was a bit of a pain visually to have to move my eyes to the left and then to the right after selecting a file, and b) it’s the vertical space that counts the most in the code editor, not maximizing all possible horizontal space.

So when I debug I use the debugger and variable inspector on the left screen to step through line by line, while viewing the actual code on the right.

I’ve setup 4 main perspectives that include a Debug and a Development perspective for both a single-screen setup (when I unplug) and a dual-screen setup. I have all those shown at the same time in the perspective switcher toolbar, so I can easily jump back and forth between them. Also shown in this screenshot are the Team Synchronization and SVN Repo Exploring perspectives and single and dual screen versions of the Flex Profiling perspective. These 8 perspectives are pretty much the only ones I ever use, and are always a single click away.

screenshot085

Drawbacks
The most annoying issue I’ve run into has to do with the popped out Debug window and how Eclipse manages window focus. Usually when debugging it works great, I click the step-over or step-into buttons in the Debug panel and it works just like I want. But sometimes (and I can’t figure out why) Eclipse decides that when I step over a line of code (or maybe it’s only when hitting a breakpoint) that the main code window should get the focus, which means that it takes a click on the Debug panel just to bring it back into focus, then a second click to step over the next line. It doesn’t sound like a big deal, but when you’re used to a single click always making the Debugger do the next step, and then that turns into two clicks, it gets really annoying and frustrating.

The only other drawback is that Eclipse isn’t smart enough to know that I have one perspective for my dual monitor setup and one perspective for when I unplug my laptop from the external monitor. So the default behavior when I unplug is to end up with something horrendous like this:
singlescreen_messedup

That’s easy enough to fix though, by simply right clicking on the perspective icon the toolbar and selecting “Reset”:
screenshot079

It also took a little getting used to to be able to share my attention between both screens and quickly scan my eyes back and forth. Usually I’m used to keeping my laptop screen for certain tasks (email, chat, RSS reading, etc), so I have a bit of a mental block against using both monitors for the same task. But I’ve gotten pretty used to that by now.

What about you?
I’m curious what other Flex developers do in terms of laying out their IDE. I’d love to see screenshots of what other people have figured out. I haven’t experimented with too many different dual-monitor layouts, the one I’m using now was sort of the first one I made on the fly and have stuck with. But if you have a better system then I’d love to see it!

del.icio.us:What my Eclipse/Flex Builder setup looks like digg:What my Eclipse/Flex Builder setup looks like spurl:What my Eclipse/Flex Builder setup looks like wists:What my Eclipse/Flex Builder setup looks like simpy:What my Eclipse/Flex Builder setup looks like newsvine:What my Eclipse/Flex Builder setup looks like blinklist:What my Eclipse/Flex Builder setup looks like furl:What my Eclipse/Flex Builder setup looks like reddit:What my Eclipse/Flex Builder setup looks like fark:What my Eclipse/Flex Builder setup looks like blogmarks:What my Eclipse/Flex Builder setup looks like Y!:What my Eclipse/Flex Builder setup looks like smarking:What my Eclipse/Flex Builder setup looks like magnolia:What my Eclipse/Flex Builder setup looks like segnalo:What my Eclipse/Flex Builder setup looks like gifttagging:What my Eclipse/Flex Builder setup looks like

Lee Brimleow just posted issue #2 of his sweet Flasher Magazine video mag. For this issue Lee interviewed me about Flex development, what I hate about the Flex SDK, what I think about Flash vs Flex. And then after the interview we went to shoot handguns at a shooting range in San Francisco :) Check it out, I hope you enjoy:

FlasherMag

This issue also includes interviews with Phillip Kerman and Robert Reinhardt.

Thanks to Lee for giving me the opportunity to do the interview, and for putting rounds of ammo on the Adobe corporate credit card!

Oh yeah, and here’s a quick still shot from the video’s intro sequence. I’m so proud:

del.icio.us:Flex and Guns on Flasher Magazine digg:Flex and Guns on Flasher Magazine spurl:Flex and Guns on Flasher Magazine wists:Flex and Guns on Flasher Magazine simpy:Flex and Guns on Flasher Magazine newsvine:Flex and Guns on Flasher Magazine blinklist:Flex and Guns on Flasher Magazine furl:Flex and Guns on Flasher Magazine reddit:Flex and Guns on Flasher Magazine fark:Flex and Guns on Flasher Magazine blogmarks:Flex and Guns on Flasher Magazine Y!:Flex and Guns on Flasher Magazine smarking:Flex and Guns on Flasher Magazine magnolia:Flex and Guns on Flasher Magazine segnalo:Flex and Guns on Flasher Magazine gifttagging:Flex and Guns on Flasher Magazine