Seth’s 360|Flex Recap


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!

Comments

360 Flex - Day 3

Here is my 360 Flex wrap up, sorry for the delay everyone. So, if you have been following the posts you are probably wondering what happened to the charity project. Wednesday, the last day of the conference started off with the Community Keynote. Near the end of the keynote, Ali was invited up to show off our working soup kitchen finder. Ali, on zero sleep, actually pulled off a good presentation of the app. Demo went off well, no major bugs! The finder worked great and everyone seemed to like it.

Second Harvest @ keynote

Then, out of nowhere, Tom and John announced that they were going to donate $7,000 to Second Harvest in addition to the work we presented. Not even Ali knew this was going to happen. I have to say this was pretty cool. On top of this they also donated another $1,000 (I think) in the form of iPods and iTunes gift cards to the developers that helped. Totally unnecessary as we all had such a blast, but again, very cool of 360 Flex.

The rest of the day was sessions as usual. I had some more time this day to take it all in. Bounced around in the morning to check out Juan Sanchez and Tony Hillerson talk about data visualization. Mike Nimer gave a good talk on dpHibernate and I will definitely be checking it out more in the future. He showed some good ways to get lazy loading functionality out of Blaze DS.

Seth and I will be going over some more details in our review this week at Flash Coders.

Comment

360 Flex | Day 2??

So, the conference is over! Wow that went fast. I was planning on doing daily reviews, but something different happened this conference....flex code jam! All of my extra time between sessions meals and during sleeping hours has been spent helping out the "Virtual Food Connection" application for Second Harvest.

I am a little low on brain power, and high on Makers Mark(gotta love airport bars), but here's what I think happened yesterday, Day 2. Lots of sessions went on and people learned so much their brains felt like they were going to explode. This is the typical feeling at a 360 flex conference. There is so much content, all on topics that are interesting and help you in your daily development, that you try to cram it all in your brain at once.

Yeah, so, I didn't make it to any actual sessions on Day 2. I was speaking at 4 and wanted to make sure the internet and my demo environments were behaving. I had planned to tweak the slides and do a dry run. Even this I never really got to do as I was running into people all day and talking shop. About an hour before I was to present I went over to the "chill out room" for some internet and peace and quiet. I ended up sitting next to Chris Allen. Turns out he was presenting at the same time as me on Red 5. I was actually looking forward to his session but too bad for the scheduling conflict. Anyway, the hour before our presentations Chris offered to give me a brief view of his session so I could see what was up with Red 5 these days. We at 9m havent looked at Red 5 in a few years, since using the RTMP data channels on KarmaTycoon. This was also supposed to help Chris practice his gig. He started off showing me how easy it was to install Red 5, this was pretty cool. Up and running in 2 minutes. Unfortunately he ended up trashing his current Red 5 install by accident by showing me, and I'm guessing never made it all the way through a dry run. Sorry Chris, hope it all went smoothly.

Speaking of smoothly, my presentation went off without too many technical issues. I was showing 2 real time applications so there was a super high probability of complete failure. Luckily our apps were all properly configured on the correct ports and the internet behaved. I was planning to show the realtime aspects of our apps so Seth was in the back on his laptop ready to interact with me on stage. We were able to pull that off for the Scrumtastic demo, but the FirstBest demo I did all on my one screen.

I think overall the presentation went ok. I had too much planned and ended up breezing through a lot of the code and technical explanations. My primary focus was to show people the types of applications that can be built with LCDS and Blaze, and roughly what the code and architecture looks like. I think I got that across, but I guess we will find out when Tom and John get the reviews.

Anyway, Day 2 rocked. The day went by quick, presenting was fun, and then promptly after started back on the charity code jam. I ended up filling in the needed skill of graphic designer and skinner, with the help of Sean Hess. Luckily I found Nahuel out by the bar to help with a little designer touch up.

It all gets a bit hazy from there...worked, hung out, coded, made bad g*t jokes, and got 3 hours of sleep before the keynote, where the working VFC application was to be presented to the whole conference....stay tuned for the next update....

Comments

360 Flex - Day 1 (Brian)

Conference is off to great start. Some new fun things this time around!

Sunday was actually the pre-conference training sessions, which I didn't plan on attending. After registration we got sucked into the Ribbit session and stayed for a few hours. I was on 3 hours sleep, but started talking to the Ribbit team about ideas for including some voice features in one of our applications. This made my head hurt, as there is SO much you can do with their current api, and especially their new 2.5 api. Check here for more details on the platform: http://developer.ribbit.com/

Day 1: Keynote

The keynote by Adobe's Mark Anderson was not as exciting an event as other 360 Flex keynotes. There is nothing new releasing that we haven't really heard about. I would say it was more of a check-in with Adobe, a status report of how all the new Flex, AIR and Flash projects are doing. So I won't review and tell you about the new text features or the z rotation in flash 10, or talk about thermo or Flex 4 "Gumbo" in any detail. I will say that everything seems to be coming along nicely.

There was actually one thing that did stand out. Adobe announced that they are working with the Degrafa team as they are developing their new FXG markup for graphics in mxml. It was not quite clear to me how they are working together exactly. This is good news that they are talking, but we will see what this really leads to.

Oh, and Tom and John are cool, but they wanted to make us as cool as them I guess so they gave everyone Elvis glasses.

Day 1: The sessions:

I have to say I am going to less sessions as compared to Atlanta. One reason is because I am working on refining the demos for my presention. The other reason is because of the Flex Charity Code Jam. This is a 3 day coding marathon that is to benefit the Second Harvest charity. We are developing a soup kitchen search site that returns closest sites and shows them on a map. It thens gives the user easy ways to print the soup kitchens info, and get directions to the center. All the data is stored and gives Second Harvest reporting data on where the most need for food exists in the surrounding area. As you can see this is hard work:

Code Jam Planning

I haven't contributed code yet, but have helped in planning a little bit. I will have more time tonight to add to the mix. I have suggested and helped the team use the Scrum methodology to run the project. It's a stripped down version of Scrum, as there is only one 3 day iteration! I offered the use of our AIR based collaborative Scrum tool, Scrumtastic, so that has been fun. Our product is about 1-2 months away from beta so you can imagine the issues we are seeing :)

Anyway, that's the low down. Busy busy with all things flex. I guess I didn't review any sessions, oops. Will post some more highlights when I get a chance.

Comment

Annotating Flex charts with a DateTimeAxis

Flex charts seem like they have everything imaginable already built in, but it's hard to tell since there are so few examples of customized charting. I set out this week to add annotations to my chart, assuming that there would probably already be something built in to make it quick and easy.

Turns out that each chart has an annotation layer built in, that sits on top of the chart itself. All you have to do is pass in an array of objects that you want displayed and the chart takes care of it.

The trouble comes when trying to get coordinates for these annotations to match them up with a specific data point in the chart. A method called dataToLocal() is the answer in most cases. Passing in the value of the point you want coordinates for returns a Point object that can be used to determine where to place the annotation.

The tricky part comes if you're not using a regular axis. I tried this with a DateTimeAxis as my horizontal axis, only to be returned a number as my x coordinate that didn't match up to anywhere near my line, no matter what the data was.

So how to get a true x value on a DateTimeAxis? You write your own transform instead of using the default. I started with using the first and last values in the dataProvider to determine the end points of the chart but soon found the need to switch to using the baseline and maximum axis values to get more precise measurements. This is what I came up with:

I also found that on initially populating the chart with data, the baseline and maximum numbers are off slightly. It's only a tiny bit but it's enough to throw a graph with a lot of points off by up to a few pixels. So instead of invalidating the displayList and drawing my annotations on the next frame after the chart was populated, I had to use callLater. This extra second gave the chart time to correct the baseline and maximum values and the x and y coordinates were exactly where they should be.

Comments