Brian and Seth's trip to 360|Flex. (filler at the end shot this winter at A-Basin, CO)
My first 360|Flex was awesome. It was full of Flex rock stars. Not hard to imagine, I left knowing more than when I had arrived. The best part of the conference for me was participating in the charity Flex Code Jam where we built a Warm Meal Finder application. The app enables (not necessarily homeless) people to search by zipcode to retrieve a map and directions to locations of warm meals in the San Jose area. This app will run on the Second Harvest website as well as locations like libraries and perhaps as a kiosk.
Here's a quick recap of the sessions I attended.
Day 0 - Preconference:
Ribbit. Ribbit is awesome in that they're inspiring new ideas. Some of the new features for their 2.5 release include conference calling, call forwarding, and iTunes-like "app store" called Amphibian, which will allow Ribbit developers to sell apps.
Day 1
Following Adobe's keynote, I jumped in to learn about Merapi. Merapi is pretty cool. It's an AIR to Java bridge. It provides more access to low level hardware on a users machine. Their best example was an app that accessed a machine's accelerometer. It displayed graphics which tumbled to the tilt of the user's machine (see Adam Flater in my video above). Also cool was a bluetooth-controlled Legobot that was controlled by an AIR interface. This was presented by Jordon Snyder.
Mate framework. Laura Arguello's presentation was really well executed. Mate (pronounced like the Maté) uses an EventMap mxml class which provides a quick and easy hook for setting up services and handlers. Its tag based format promotes simplicity and good model/view separation. I'm still concerned with using it on larger projects but we did use it for the Flex Code Jam, and it worked well.Here's the Flex Code Jam code.
Creating reusable components. Ben Clinkenbeard is super smart and provided some good tips, though his presentation ended with about 45 minutes short. Some good tips: Make things easy for other developers. Expose things the framework doesn't. Add default behavior to your components, otherwise it makes more work for those using it. Default behavior can have a flag isDefaultPrevented flag to determine if default behavior was overwritten. He also recommended providing default styles and using selector.defaultFactory rather than selector.setStyle to set default style.
With my additional time from Ben's presentation, I jumped into the Swiz Framework presentation by Chris Scott. It is an inversion of Control MVC framework. I'm definitely curious and would really like to learn more.
I finished the first day of presentations by attending Andy Powell's introduction to Blaze and LCDS. It was a great overview of how Blaze and LCDS compare and contrast. It was also a good starting point for Brian's presentation the following day.
Following the presentation, I joined the Flex Code Jam project and kicked it off Scrumtastic style!
Day 2
Ben Stucki's How to Build a Framework presentation was inspiring. Where does he find the time to make so many useful frameworks? It wasn't a discussion about specific frameworks but rather tidbits of insight he's learned along the way.
"beautiful code represents an idea and the underlying logic exists only to support that idea..."
Stucki also provided simple reminders like a class should do one thing only. He defined simplicity as being achieved through refactoring in two common ways. Seperation - refactor one class into two, and Singularity - combining things together. Always start with interfaces and if you only reference interfaces, you'll come up with a pretty good architecture.
Then I caught SQLite Performance by H. Paul Robertson.
His knowledge on the subject was quite helpful. Here I learned that one should encapsulate sqlStatements instead of reusing them. ie, it's less expensive to store query statements in a Pool than to reuse and rewrite them - hope that makes sense. He also recommended using transactions for batch insert/update/delete - This takes a snapshot of your change and writes it into memory first. Then it sends the completed batch to SQLite. Use indexes but use them wisely. Additional resources he provided include: http://code.google.com/p/asqlib - uses a vo. Jacob Wright's active-record: http://code.google.com/p/air-activerecord and http://adobe.com/devnet/air/flex/articles/air-sql-operatons - which uses pools.
Finally, I attended Brian's presentation on Real Time, Collaborative applications. My opinion may be biased, but he did a stellar job. He kept it interesting by showing real world examples, which I think really helped people understand what one can do with a real time application. Examples of projects built on both LCDS and Blaze DS were shown. He also showed a good tour of server side Java code as well as front end Flex code. Go and watch his presentation on Adobe Media Player.
Day 2 didn't end there though. Actually it never really ended. Not long after Brian's presentation we were back in the Flex Code Jam. We had a good Scrum and basically started coding...until 4am. It was good fun, working with new people and apparently Adobe is making a documentary about it!
Day 3, or rather, after three hours of sleep, we were back at eBay for the final keynote. Tom and John announced conference numbers, and revealed that they finally made profit, congrats! A few silly chachkes gifts to each other later, and then they brought Ali, the organizer of Flex Code Jam, to the stage. Ali, who I don't think slept at all, presented our application with great pleasure to one of the Directors from San Jose area's Second Harvest. The app was flawless, and it honestly was a feel-good moment.
Following keynote, I attended one of the best presentations, in my opinion, Renaun Erickson's presentation on Test Driven Development. We've been looking for a good solution to unit test for Flex, his RIALogger could be the one. It seemed simple and easy to understand. I learned that TDD is more of a work philosophy than just a tool by requiring you to write your tests before writing code, it forces you to think in terms of usage rather than methods. Now I just need to start doing it.
I then attended Jun Heider's presentation on the Flex 3 profiler. The profiler is something I also need to use more of. Although my own concentration was diminishing from sleep deprivation, Jun showed the important parts of using the profiler to test performance and memory usage.
Following a nap next to eBay's koi pond, I finished 360|Flex by listening to Eric Ko discuss reflective programming. Honestly, I saw what he was doing, but I couldn't understand it's real world use.
So that's it. If you read this far, thanks! Now get back to work!