The Blog

Mar 25, 2009

Converting Virtual PC .vhd Images To VMWare .vmdk Images 

by Maxim Porges @ 10:17 PM | Link | Feedback (2)

We use Microsoft Dynamics CRM to track our customers and related software feature requests and opportunities. Chris (our Sales Engineering manager) has been customizing the system for our needs, and we've been looking in to integrating with it further through the web service API.

Since we don't want to develop web services against the production instance, Chris suggested I download the demo version which is available as VirtualPC image. Of course, being on a Mac, I can't run VirtualPC, but I do run VMWare Fusion.

After I downloaded the VirtualPC image, I downloaded a free tool from VMWare that you can use to convert multiple types of images to VMWare disk images. The file I got from Microsoft was a .vhd file, but when I tried to convert it the VMWare converter told me that it couldn't deal with .vhd files.

However, it was able to convert .vmc files, which are the virtual machine files that go with the .vhd (which is essentially a virtual hard disk). So, I downloaded VirtualPC and installed it in to VMWare, and used it to create a VirtualPC virtual machine .vmc file using the .vhd file as the hard drive. After I created this, I shut down VirtualPC, fired up the VMWare converter in Fusion, and converted the 11 GB image by pointing it to the .vmc file. Problem solved.

I was quite surprised at how fast the conversion was: it converted the 11 GB file in about 45 minutes, with VMWare Fusion both reading and writing over the local network connection to the host Mac OS. After the conversion, I was able to open the VMWare image files produced by the converter and install VMWare tools as usual within the virtual machine.

Mar 20, 2009

Bluetooth Connectivity/Pairing Problems on Late 2008 MacBook Pro 

by Maxim Porges @ 11:42 PM | Link | Feedback (0)

I've noticed that my late 2008 MacBook Pro seems to have trouble pairing with my Apple Bluetooth keyboard and Mighty Mouse occasionally.

At home, I have a 22" flat panel connected with two video inputs: an HDMI input from my old QuickSilver G4 tower, and a DVI cable that I attach to either my work or personal laptops (the work laptop is an early 2008 MacBook Pro, while the personal one is a late 2008). As I switch between laptops, I get semi-wireless KVM since the Bluetooth simply re-pairs with whichever laptop is turned on, and I manually re-plug the DVI cable.

I never seem to have issues reconnecting the work laptop, but my personal one has been having issues recently. Anecdotally, this started happening after I installed Vista on Boot Camp, during which time I had a hell of a time getting Vista to connect to the Bluetooth devices (it would say it was paired but then never be able to connect). After uninstalling/reinstalling the Boot Camp drivers that came on the installation disk for my MacBook Pro, the Bluetooth on Vista started working again. I don't know if the Vista issues spawned the issues in OS X, but there it is as the only thing related to Bluetooth that has changed.

Anyway... I noticed I was getting these messages in Console.
3/20/09 10:42:25 PM Bluetooth Setup Assistant[1753] connection went invalid while waiting for a reply 
3/20/09 10:44:31 PM Bluetooth Setup Assistant[1771] 3:Pairing failed with 'Mighty Mouse': error 0xe00002bc
3/20/09 10:45:54 PM Bluetooth Setup Assistant[1771] 3:Pairing failed with 'Mighty Mouse': error 0xe00002bc
3/20/09 10:51:04 PM kernel IOBluetoothBNEPDriver: Ethernet address 00:23:6c:a2:5e:56

I went ahead and reset the PRAM and everything started working again - in fact, the laptop paired to the devices before the login screen loaded, and I was able to type in my password from my Bluetooth keyboard. Woot.

This is the second time I have had to reset the PRAM on my personal laptop since I got it in December 2008, the last issue being related toExpressCard hardware. I'm hoping the issue was just related to me Boot Camp Bluetooth woes, but who knows.

Mar 19, 2009

Farewell, Battlestar Galactica 

by Maxim Porges @ 11:07 PM | Link | Feedback (2)

I just got finished watching Monday night's special on the cast, crew, and making of BSG. The final episode of the series airs tomorrow.

I was admittedly leery of the series when it came out. The main reason was that it was being produced by the SciFi Channel, which I have always associated with horrible campy science fiction shows with no-name actors, thin plots, and terrible writing. The other main reason was that I had watched reruns of the original BSG series as an adult, which thoroughly shattered my rose-tinted memories of watching the show during my childhood (Dirk Benedict, for Christ's sake... awful).

And yet, like so many others I gave the pilot a shot, and was rewarded with a totally new take on the series and a gem of a show in the making. The Cylons-as-humans thing was a little hard to swallow at first (and smacked more of keeping the budget on CG for the Toasters in check than anything else), but as the series has evolved they've justified the choice. After all, BSG is more about the characters in the story than the robots, spaceships, and special effects surrounding them.

And what characters they are: gritty, dark, and all with secret (and not-so-secret) flaws that drive them through their individual story threads to be challenged, tested, broken, and saved countless times over. We were talking at work the other day about how we'd happily watch an entire series about Gaius Baltar living out his daily life; he's been such a delightfully selfish and complicated bastard through the whole series. It's been mentioned many times before, but I have to heap some hefty praise on to the show's writers for keeping it real all the way through and not being afraid to send a TV series (and a sci fi one at that) in to morally questionable territory that would send even the most battle-hardened TV executives running for cover.

In a time when 8 out of 10 TV shows on the air these days either seem to be about 10 spoiled brats living in an $8 million house and yelling at each other, or are centered around the pursuit of an aimless goal with trite elimination ceremony after trite elimination ceremony, BSG has provided some actual entertainment by people who have proven themselves to be masters of their craft. As a result, it's just that much more tragic when a show of this calibre has to go off the air.

Even so, while I will miss seeing new episodes pop up on the DVR, I must thank the management at SciFi for letting the show end gracefully; it was certainly time. All the major story arcs have played out, the characters are clearly tiring out following the ordeals of their journey, and the impending conclusion has been well-primed by the writers for a solid end to the series. There's nothing worse than seeing a good show die a slow painful death by ratings. The powers over BSG are doing a great job of avoiding this and letting the show go out at the top of its game.

It is with anticipation that I look forward to tomorrow's closing chapter. My final request to the makers of the show will be that they release the entire series on Blu-Ray in a magnificent box set with loads of special features. After that, I'll just have Breaking Bad (another fabulously dark show) to keep me amused until something else half-decent hits the airwaves.

Mar 17, 2009

Ergotron LX in the Hizouse 

by Maxim Porges @ 12:00 AM | Link | Feedback (0)

I got a few toys at the end of last year for my home office/studio (namely a Virus TI and a 22" monitor), but they had the unfortunate side effect of cluttering up my desk.

The monitor doubles as a USB hub and has three video inputs, so it created a whole bunch of spaghetti behind it. And as much as I love my Virus TI, it's so deep that I have to push my monitor back to accommodate it, making small text too hard to read when the TI is on the desk. This means that when I work from home I have to unplug the TI and take it off the desk so I can move the monitor closer, which is a pain in the ass.

I looked at a few monitor mounts, but they were either ridiculously expensive, wall-mounted (I wanted a desk-mount device), or looked crappy. We have a few flat panel TVs in the house, and the only arm-based mount I had bought was a $25 job from BJs, which was too flimsy to hold the little 15" TV in the exercise room. After my bad experience with that floppy piece of crap, I was concerned about getting an arm-based system again, but they seemed to be the only solution to my cable and monitor-distance dilemma.

Then I found the Ergotron LX Dual, which got rave reviews on Amazon. Dell had the silver for $199.00 with shipping, so I ordered it last week and it arrived today.





This thing rocks the house, and just screams build quality. It came out of the box with two monitor mounts and a laptop mount; I have just the Dell monitor and either my work or personal MacBook Pros to worry about, so I went with the monitor/laptop configuration. The mount got great reviews from the Amazon crowd for being sturdy, and they weren't kidding - the tension mounts are all fully adjustable to a very fine degree. I've got my setup to the point where I can move the monitor and laptop to any position and they just stay there - no wobbling or sagging. I've got a pretty deep desk (I think it's about 30"-36" deep by 72" wide), but the 24" of extension the Ergotron LX gives me easily brings my monitor in to viewing range with the post mounted to the back of my desk. There are integrated cable tidies, so I've got all the cables running through the arms and floating above the desk too, which gives me all my desktop space back again. Although I don't typically work this way, you can also swivel the monitor to portrait mode if you like without having to pull any levers or make any adjustments.

The mount is mostly held together by gravity, so if for example I wanted to switch my monitor to the right and my laptop to the left, I can just lift the arms off the top of the support pole and switch them around without breaking out the tools. Tension is adjusted through Allen keys and a Phillips head screwdriver, and the tension points are very easy to get to.

Installation was a breeze with the well-diagrammed instructions, and they give you all the tools you need to get going. The only item I was concerned about during installation is that my desk is glass, just under 1/2" thick, so I was concerned about the leverage imposed by the 20-odd pounds of weight that my laptop and monitor would put on it (especially since I was using the clamp mount). To spread the weight out a bit, I cut a 2x4 about twice the width of the clamp mount and put it on the underside of the desk. You can't see it unless you look for it, and it is doing a nice job of distributing the load. If you decide to pick one of these up, note that the grommet mount can hold twice the weight of the clamp mount. You get installation hardware for both mounting styles in the box.

I snapped a few photos, so check them out.

Mar 9, 2009

The Twitter/Facebook/MySpace Meme-To-Mainstreamfest 

by Maxim Porges @ 10:52 AM | Link | Feedback (0)

I saw Rob Gonda post a comment to LinkedIn about this article called OMG! Shut Up About Twitter Already; I couldn't agree more. For 99% of you on Twitter, your life is just not that interesting for me to follow it ten seconds at a time.

I also personally consider it a jump-the-shark moment for a service (or anything else) when the mainstream media gets ahold of it and makes it the "hot new thing" several years after it surfaces in niche form. It happened to drum n' bass when it escaped from the clubs and started showing up in car commercials in the UK. It happened to Crocs when they suddenly appeared on the feet of every child in the United States. And it happened to Twitter, MySpace, and Facebook as soon as Fox News and CNN decided to get in on the action (followed by my step-mom signing up for accounts on all three in the last month or so :) ).

Sure, the extra publicity will be great for these services for a while, but as soon as they cross over from meme to mainstream, they lose their cachet. All the Cool Kids™ (I'm looking at you, Roop :) ) will want to join the next wonderful service that pops up, download the iPhone app, and be one of the Awesome Few® in the know. This usually means that it's only a matter of time for the other services to start losing their user base to the new service and become relegated to a merely sustainable has-been status.

Of course, I'm old now, so I don't really care to be at the forefront of the hottest new trends. I dodged Rails, didn't buy Crocs, and have avoided Facebook and Twitter. I regret to inform you that I did sign up for a MySpace account to catch up with old friends from the past, but I think about deleting it every day. If I get another useless animated GIF from somebody who hasn't sent me a meaningful communication in over five years, I think I'll kill myself.

Yours truly,

Maxim "Old Geezer" Porges

Mar 7, 2009

Flex Camp Miami: Mate Flex Framework (Laura Arguello) 

by Maxim Porges @ 11:07 AM | Link | Feedback (0)

Laura Arguello gave a really thorough overview of the Mate framework for Flex and AIR applications. I was present for Laura's original presentation at the launch of Mate at cf.objective(), so I was interested to see how she presented it two years after.

Not only were Laura's slides easy to follow and beautifully drawn (as always), but she had added some detail on alternative approaches and how Mate solves the problems associated with these approaches. Laura stepped through a full example of a movie browsing application built with Mate, showing the way the event bubbling and routing mechanism worked. I was particularly impressed with Laura;'s use of animations to get the point across, including an innovative "production line" slides that shows how Mate decorates events as they are routed through the framework, and gets them to the right place.

I've always liked the principle behind Mate because it is supported by an event-driven message bus. Message bus architecture really fits nicely in to a Flex app since Flash is event-driven and has native support for asynchronous event management, bubbling, and routing. The only part of Mate that I find less desirable is the MXML-based routing and mapping; there is nothing wrong with this per se, but it reminds me of ColdFusion and Fusebox tags quite a bit, which is probably the root of my opinion since I have moved far away from that technology and framework. I'm personally a fan of being able to annotate my classes with metadata and have frameworks introspect them in order to figure out what to do, and the work that Russell Centanni has done with Chris Scott to get better support for the [Mediate] annotation in Swiz has really made me a fan of that framework.

Of course, putting metadata in your classes is something of an invasive approach, so while it makes configuration more transparent, it leaves framework remnants in your code and requires a recompile to remove them; this is in direct contrast to Mate which is configured completely independently of your code. At the end of the day, you have to pick your poison. Since both Mate and Swiz exemplify the same best-practice approaches of making your code easy to test and loosely coupled, you can't really say that one is better than the other - it all comes down to personal preference at the end of the day. I am, however, perfectly comfortable saying that both of these frameworks are far better in my opinion that Cairngorm, which is possibly the most invasive framework I have ever worked with. The Universal Mind extensions for Cairngorm certainly make it less of a bear, but it still smacks of the sort of nonsense we had to deal with in EJB 2.1 for Java. Naturally, we had to start somewhere, so matter how much I may bash Cairngorm today, we wouldn't have gotten to Mate and Swiz without it kicking off the evolutionary process for us. In other words, "yay" for progress.

Laura is going to be presenting Mate again at the upcoming 360|Flex conference in Indianapolis, IN on May 18th 2009, so if you are interested in learning more about Mate this would be a great way to do so.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: Spring & BlazeDS Integration (Jeremy Grelle) 

by Maxim Porges @ 10:54 AM | Link | Feedback (0)

Jeremy's presentation went over the reasons for using Spring with a Flex/AIR application, and described how the recent partnership between SpringSource (Jeremy's employer) and Adobe has put proper support for collaboration between the two technologies on the fast track.

All of Jeremy's presentation was interesting, but the most exciting parts for me personally were the upcoming syntax for integrating Flex and the hooks in to Spring Security.

Originally, the first releases of Spring/Flex integration required quite a bit of code an an invasive hook in to the Spring beans file, but the new support does all the configuration for you with one tag using sensible defaults (a la just about everything in Spring). Basically, Spring just exports the services to Flex the same way that it does for exporting hooks to Spring web services or any other presentation technology. There is the ability to provide a nice separation here between your Spring configuration for your libraries and specific use cases where those libraries are made available to BlazeDS, allowing you to unit and/or integration test appropriately at each tier.

As far as Spring security, the configuration has become much simpler. You can now simply state the security role required to access each BlazeDS remote destination endpoint, and your security configuration is all ready to go. The only thing that remains is the standard set of hooks that you need to put in Spring to tell it where your authority store is (i.e. LDAP, a USER database table, a flat file, etc.), which you would have to do if you rolled your own solution too so no extra work is really taking place here.

Some of the questions that arose included whether or not Spring was going to figure out how to get around some issues with the deep traversal that the AMF gateway performs when marshaling objects across the wire, and the havoc this can wreak with lazy loading in frameworks like Hibernate. Jeremy said that this was really an issue that Adobe was going to have to solve in the AMF gateway, and was obviously not related to the Spring integration by itself.

The last final interesting tidbit we learned was that the Spring web team is based in Melbourne, FL. Apparently one of the founders of SpringSource lives in Melbourne, and was an ex-Harris employee who started a branch in his home town. Once again, we find a surprising little spoke of the larger hub of the tech community nestled away in an innocuous part of Florida!

You can follow the evolution of the Spring/Flex integration project at the project home page. The new M2 release is out if you want to be one of the cool kids.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: Continuous Integration and Flex (Brian LeGros) 

by Maxim Porges @ 9:40 AM | Link | Feedback (0)

Brian LeGros took to the stage with a staggering gait, giving indication that he was clearly three sheets to the wind. After accidentally plugging the monitor output in to his power cord and blowing out the projector, he began presenting his topic to a potted plant adjacent to the stage. After realizing that the plant preferred cowboy coding and had no interest in setting up a continuous integration workflow, Brian screamed something that would make a sailor blush, stumbled back to his seat, and proceeded to pass out - crushing a conference table during his fall.

Just kidding... I've seen this presentation of Brian's several times before in extended form, and his delivery gets consistently better with each iteration. Brian has a passion for organizing software development processes, and it's clearly evident as he goes through the iterative process for getting a continuous integration process in to place. Brian has a low-key approach to the topic, which I think makes the seemingly daunting task of setting up CI far more approachable.

Brian start off talking about what is involved in CI and why you would want to create a repeatable software process, drawing from real-world situations that developers are likely to face. He then covered some sample workflows for build process, source control, and delivery, and gave a detailed overview of scripts he has created in Ant to support automated builds and testing for Flex and AIR applications. Brian also touched on his work on the Fluint project to produce mock stubs for HTTPService and RemoteObject components, which allow easier regression testing when interacting with remote services. Finally, there was a run-through of how to set up a sample Hudson application.

Brian is offering his build scripts from his blog, and I encourage anybody interested in setting up CI for Flex to make use of them. Brian spent a great deal of time smoothing out all the kinks in our build process at Highwinds, and he really did not impress upon the audience how much work he is giving away for free here. After determining that Fluint did not provide full support for Surefire builds, Brian took it upon himself to change the code base, and produced so much useful stuff that he was accepted in to the project as a committer. That's just one example of what he's done for the community, but I can assure you that there were numerous other hurdles that had to be traversed for Flex and CI to co-operate.

We've just recently got the appropriate sysadmin support to get our Hudson server purring along at Highwinds, and we've already started to reap the rewards. I checked in some work on custom aspects we've written for the server tier of the next major release of StrikeTracker, and tests that worked perfectly in my development sandbox began failing when Hudson was running them. It turned out that while Hudson was generating our API documentation, an inconsistency in the latest version of the Cobertura code coverage plugin was causing the build to fail. Since I was only running the test cycle in my local sandbox and not generating all the documentation, I didn't come across this inconsistency in my own testing. Thanks to Hudson finding this issue for us early, I was able to spend an hour diagnosing and fixing the issue now, instead of at the eleventh hour when QA is waiting on a build from us at some point in the future.

We've also been able to see our test coverage and pass/fail progression, since Hudson is tracking our software quality as part of the build process. My boss has been really interested in seeing these statistics, so I'm glad we've finally set up to be able to make them available to him and use them as a barometer for the quality of our apps.

If you are interested in learning more, I suggest you check out the recording of Brian's February 2009 Adogo presentation on Continuous Integration. This is the extended version of his talk at Flex Camp Miami and contains all the same juicy details.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: The Art Of Storytelling (Christian Saylor) 

by Maxim Porges @ 9:19 AM | Link | Feedback (0)

Christian gave an impassioned and compelling presentation about how to deliver immersive user experiences in rich applications.

Drawing examples from iconic flicks of the past and present and using movie story/character development as a basis, Christian described how Universal Mind uses storytelling to create personas to understand the motivations and conflicts of an application's users. Once you understand these key elements, you can build an application that helps users reach their goals. Christian clarified the fact that ultimately, great software is all about the people who use it, and we have to keep the user front-and-center at all times in order to create the right solution for their needs.

Christian also pressed the issue that in order to make applications fully realizing the capabilities of a rich platform, designers and developers must work together to find that perfect intersection of art and science. Thankfully, based upon Greg Wilson's earlier presentation of Flash Catalyst, it seems that Adobe is doing everything they can to make this collaborative worflow as smooth as possible

Universal Mind has a highly distributed development team, so making sure that the entire team understands the story behind the users helps them to make independent decisions about how an app should flow, and what the best interests of the user will be. Having recently been taken through UM's portfolio, I can attest to the stellar quality of the applications they have been able to produce by following this approach. You can get a taste of what UM has to offer by looking at their demos.

I couldn't agree more with Christian's stance on driving application design through user stories. In my career, I've seen the negative effects of feature-driven approaches veer so far off the path of the user's motivations that the software usability has practically hit zero. Case in point, I've seen an application with processes that should have taken 3 minutes dragged out to almost a half hour, requiring the user to take copious notes on paper and use a calculator during the process (which kind of defeats the purpose of having a computer system in the first place). In the most extreme example, I had a user break down in tears while describing how hard it was for her to do her job on a legacy software system we were working with her to modernize.

Following these experiences, I've committed myself fully to applying user-driven approaches, and using the motivations of the user as the barometer for feature inclusion/depth and user interface design. We're applying these principles to the next major release of StrikeTracker, and have already had very positive feedback from the Sales team at Highwinds based upon the wireframes alone.

Coming back to Christian's presentation, he mentioned the work of Allen Cooper in interaction design. I intend to pick up a copy of About Face 3: The Essentials of Interaction Design at my next opportunity.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: Merapi or How to Blow Your Mind with AIR (Andrew Powell) 

by Maxim Porges @ 9:01 AM | Link | Feedback (0)

Andrew Powell delivered his ever-popular presentation on using Merapi to extend AIR applications by adding hooks in to Java, and thus everything the underlying OS has to offer you.

Personally, I have been following the progression of Merapi from back in the Artemis days before AIR was even released. Being a Java programmer at heart and also loving Flex and AIR, the integration between these technologies on the desktop had always seemed like a perfect marriage to me (especially since Swing is such a train wreck). I had signed up for the Merapi alpha ages ago with the intention of hooking in through the Java-Cocoa bridge to capture MIDI events from one of my keyboards and do something (anything?) with them in an AIR app, but had never got around to kicking the tires, so I was really interested in Andy's presentation.

As it turns out, Merapi was made possible through the open-sourcing of the BlazeDS libraries for performing asynchronous messaging and AMF serialization. When a Merapi app is launched, it basically just fires up a listener on a local socket, and launches an AIR app which connects to this socket. Once connectivity is established, AIR and Java can send objects back and forth through the same AMF gateway code that makes BlazeDS and LiveCycle Data Services do their thing - just in a much slimmer environment than you'd get by running either BlazeDS or LCDS locally on the desktop. This is (in two words): pure awesome.

Andy's slide deck was only 10 deep, so we quickly got to the good stuff: hooking AIR apps in to hardware. Andy had brought along a number of toys to demo. First off, we got to see a set of RFID chips and a USB-based reader purchased from phidgets.com. Andy had set up the AIR app to scan the RFIDs via the USB bridge and show if a specific ID key had been found. Since phidgets.com supplies a Java library with their devices, this was a pretty simple setup, but you can imagine how cool it would be to build an AIR app for managing an inventory of products with RFIDs. Andy had three volunteers come up from the audience to scan books and see the tools in action, after which the volunteers (myself included) were allowed to keep the books (sweet!).

Next, we got to see the star of the show, which was a Mindstorms NXT kit hooked up once again through a Java API (I believe the API in question is LeJOS - Andy said he never even touched the APIs that came with the kit). Andy had a simple control panel with forward/backwards and steering controls in AIR, which responded to mouse clicks and pressing of the arrow keys. Hitting the controls resulted in commands going across Merapi to the Java API, and ultimately connecting wirelessly to the Mindstorms robot (in this case a cool little Lego car) via Bluetooth. The entire sum of attendees crowded up to the front to see the robot in action.

During the Q&A, Andy touched on some interesting notes. Firstly, since connectivity between AIR and Java through Merapi is socket-based, you can have an AIR app on one machine remotely control one or more Java apps running on remote machines. Second, message channels can be differentiated by message type, or you can have multiple socket listeners from different apps and establish channel separation that way. The final note I found useful was that there is currently no encryption on the socket channel, but this is planned for a future release.

Hopefully Merapi will get the creative juices flowing for all of you AIR/Java programmers out there. While the library is still in alpha state, it clearly works great, and since it's outside of the realm of Adobe you can use it at your own risk without having to wait for Adobe to incorporate similar capabilities in to AIR.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: In Search of AOP for AS3 (Maxim Porges) 

by Maxim Porges @ 8:48 AM | Link | Feedback (2)

Next, I gave my presentation on my search for adding AOP to ActionScript 3. My presentation materials are available here.

I was a little concerned about the level of my presentation and how it would be received, since Greg Wilson had already identified that many of the attendees were completely new to Flex. It's not often that as you are learning a language, you take a deep-dive under the hood to see how the bits and bytes are running in the virtual machine after they have been compiled.

I started off with an overview of AOP, since about 85% of the attendees had never heard of the term. Using examples from ActionScript and Java, I simulated AOP advice in code for ActionScript and then demonstrated how AspectJ already has AOP working beautifully.

I then moved on to describe my journey to discovery for how to implement AOP in ActionScript. I described how I started off trying to use the prototype model, setting the strict flag to false in the compiler, and finally attempting to use Proxy before giving up on the out-of-the-box toolset.

I then described the dynamic subclassing model (akin to how CGLIB works for Java) and how that was the only viable solution I had found. We then looked at how the Tamarin project had supported my research in to establishing a roadmap for understanding the inner workings of the AVM and getting dynamic subclassing working, and I demo'd some of the command-line tools that have become good friends to me in recent months as I have worked on Loom.

I had some interesting feedback from the session. Overall, I saw enough heads nodding as I was going through it to see that people were getting the general idea, which was all I was hoping for; the AVM2 spec is pretty boring stuff, and the idea behind Loom is that it will handle all the nitty-gritty for you so that you can just code in AS3 and have AOP capabilities at your fingertips. Nahuel Faronda told me that he had followed along 100%, and after seeing what I had to deal with to get Loom to work he was glad I was doing it instead of him. :)

While I'm hopeful people found my session interesting, I'm even more hopeful that they will download Loom and assist me with the beta program when I release the library later this month. As always, watch the blog and the Loom project site for updates.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: Working With Data in AIR (David Tucker) 

by Maxim Porges @ 8:41 AM | Link | Feedback (0)

David Tucker gave an in-depth presentation covering all the different ways you can wrangle data with AIR.

While I'm fully familiar with AIR's general capabilities and the fact that you can access the file system with it, following David's topic I had a much better understanding of the specifics of AIR data management and several features that I was not aware existed. For example, I was not aware that you could access an encrypted local store with AIR; I figured you just had access to the standard local store like you do in Flex. David explained how AIR takes advantage of the native encryption mechanisms available on the OS it's running on, and showed examples of how to use it.

David went on to cover database access in AIR, including some of the performance gotchas associated with transaction management and best-practice strategies for fetching and saving data. Finally, he touched on some of the work taking place in the Flex space to produce ORM and data management frameworks.

Thanks to David for a great presentation. We are considering an AIR version of the next major StrikeTracker release, so I am sure I will be able to put what I learned to use.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami: Welcome and Keynote (Flex 4 Preview) 

by Maxim Porges @ 8:31 AM | Link | Feedback (0)

Greg Wilson gave an abbreviated version of several presentations covering the new stuff we can expect in Flex 4 "Gumbo", including FXG, Flash Catalyst, and the various language, API, and tool changes we can expect.

I won't say that there was anything groundbreaking here that had not been seen in prior keynotes at MAX and similar large Flex events around the country, but that does not detract from the coolness of the things that are coming.

I'm personally most excited about Flash Catalyst and FXG. I'll reserve full judgement on the technologies until I get to use them, but my initial thoughts are that they are huge steps forward in separating presentation and structure of components. Even so, I think there might be a little more work to be done in this area to achieve full separation; for example, there appears to be a reliance for metadata to be added to the component class to provide hooks for the skin, which seems invasive at first glance (although again, I have not fully kicked the tires so I may be missing the significance of why this is unavoidable). That being said, one of the things that bothers me about Flex 3 today is the fact that you can't fully control positioning with CSS the same way that you can with HTML, but I believe that the new component skinning model takes care of this particular issue (at least on the individual component level).

In several "hands up" polls, Greg was able to identify that a significant chunk of the crowd had not used Flex professionally, which indicates that the event was successful in educating some future Flex-ers. I think it's great when an event can open doors for people, as opposed to just being a love-fest for people who have already drunk the Kool-Aid.

Finally, Greg handed out about $5,000 worth of training DVDs, books, and software, which was totally awesome. Thanks again to Adobe for footing the bill for these items (and let's not forget their covering of the pre-event beers at the Titanic the night before!).

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Flex Camp Miami Roundup 

by Maxim Porges @ 8:10 AM | Link | Feedback (2)

As you will know if you have been following my blog, I attended and presented at Flex Camp Miami yesterday. We ended up with 86 attendees from all over the country, which was a great turnout considering the state of the economy and Miami's tech community.

I have to say that when I was originally invited to the event, I was expecting it to be fairly basic in terms of the content being presented. When we looked in to hosting a Flex Camp in Orlando, Adobe had asked us to keep it along the lines of an "intro to Flex" event (which was actually one of the reasons that we didn't pursue the issue, since we have built up an intermediate Flex crowd with the sessions at Adogo). However, the final lineup for the event was full of great topics, and I can honestly say that this is the first conference I have been to in a while where I was interested in and able to learn something from every offering.

I'd also like to mention that the organizers and sponsors did an awesome job. Universal Mind and Adobe showed up in full force; I think at least 30% - 40% of the attendees left with either a book, a training DVD, or a Flex Builder Pro license. One lucky bastard even left with a $2,500.00 copy of the CS4 Master Collection - not a bad ROI for a $20 registration fee! I personally won a copy of Creating Visual Experiences with Flex 3.0, which I am really excited about since custom skinning is my weakest area in Flex development right now.

Not to be forgotten is the fact that the event would neither have been as successful nor possible at all without Brian Rinaldi having organizing it. Brian put together the whole event and organized sponsorship from Adobe and his employer at the time (Universal Mind). Unfortunately, nobody has been immune from the state of the economy and Brian was released from his employment shortly before the event, making his attendance difficult on several levels. While the sponsors did Brian proud in terms of delivering a solid event, if you were an attendee, I encourage you to let Brian know your appreciation for all his hard work. If you are an employer considering Brian for a position, you can rest assured that his attention to detail and work ethic leave nothing to be desired if the quality of the Flex Camps he has organized are any measure.

For those of you who missed the event, fear not - Universal Mind is planning to do another Flex Camp in the Florida area later this year. There was talk of doing it in either Tampa or Orlando - either way, Adogo will be lending as much assistance as we can to ensure it's a good one.

I'm going to do an individual blog post on each of the topics presented, which I'll be linking to once they are finished. I also have some pictures, but since I left my SD card adapter in my other laptop I'll have to wait until I get back to Orlando to publish them.

All Flex Camp Miami Roundup Posts
Welcome and Keynote (Greg Wilson, Adobe)
Working with Data in AIR (David Tucker, Universal Mind)
In Search of AOP for AS3 (Maxim Porges, Highwinds)
Merapi or How To Blow Your Mind with AIR (Andrew Powell, Universal Mind)
The Art of Storytelling (Christian Saylor, Universal Mind)
Continuous Integration and Flex (Brian LeGros, Highwinds)
Spring & BlazeDS Integration (Jeremy Grelle, SpringSource)
Mate Flex Framework (Laura Arguello, ASFusion)

Mar 5, 2009

StrikeTracker is a 2009 StreamingMedia Editors' Pick 

by Maxim Porges @ 10:34 AM | Link | Feedback (1)

StrikeTracker has been chosen as a 2009 StreamingMedia Editors' Pick (under BBC's iPlayer, and above Hulu - although I don't think the list is ranked).

Quoting from the article: "Seeing a real demand in the market, CDN Highwinds has been working for the past year on improving its web-based reporting product and offering all of the functionality that customers asked for in the survey. In that time, I’ve had the opportunity to watch the Highwinds product continue to evolve and have been able to get a few in-person demos along the way. To date, its reporting package is one of the best solutions I have seen from any of the CDNs in the market."

We're thrilled to receive this recognition for all the hard work our engineering teams have put in to make StrikeTracker the best CDN console available. While the work that my team does on StrikeTracker is front-and-center for the customers to see, it wouldn't make any difference without the CDN behind it - so the way I see it, this is a tip of the hat to the Highwinds CDN as a whole.

Mar 4, 2009

Where's Loom? 

by Maxim Porges @ 12:46 AM | Link | Feedback (2)

I'm so close to getting Loom finished that I can taste it, but unfortunately life has been getting in the way in the last few weeks. Grrr!

I had to get my presentation finished for the Flex Camp this week, and I'm getting married in April so meetings with vendors have been eating up at least one day of each weekend since the end of January. I also had a bachelor weekend with a few buddies last weekend, which was great fun - but all in all I've been unable to put as much time in to Loom recently as I was able to in January.

Things will really start to quiet down for me on the personal front starting this month, since we're running out of vendors to meet with before the big day. Plus, Jessica will be in New York for a bachelorette weekend with her friends in a few weeks, so I'll have two whole days to sit on the couch in my undies and write code.

Bottom line, I intend to have some working code up on Loom's site later this month. Watch this space for updates...

Last Chance for Flex Camp Miami 

by Maxim Porges @ 12:41 AM | Link | Feedback (0)

Final reminder to everybody that Flex Camp Miami is almost upon us. I have been polishing off my presentation on Loom this week and am looking forward to seeing you all there.

The speaker lineup has solidified with a topic from another of the great folks over at Universal Mind, and there's also a guy from SpringSource talking about Spring integration for BlazeDS, which should be interesting since the integration is under active development.

Remember, the price of admission goes down to $20 if you use the discount code "adogo". Register now!