Steve Jobs would cringe - Apple Wireless Keyboard Add-On
Author: Thomas GonzalezWhen I purchased my Mac Pro, I had an option of which keyboard I wanted, I ordered the wireless keyboard, knowing how small it was, and thinking it would be next to useless for coding, but perfect for a family Mac-Mini. Well, I actually kind of like the keyboard, the key-throw is good, I can type fast and it is really light/elegant. BUT, it is pretty diminutive, and so light that when I use it in my regular seated position (feet elevated on desk, very reclined in my chair) with the keyboard on my lap, it kept slipping down. I found myself unconsciously holding it in place with my left thumb so it wouldn't slide down. Typically with large keyboards, the pad of my palm would rest against the bottom keeping it in place.
Should Apple purchase Adobe?
Author: Thomas Gonzalez
I will be speaking at Flex 360
Author: Thomas GonzalezFor those Flex developers out there who have not heard of the Flex 360 events, it is a GREAT opportunity to learn more about Flex, share information with other Flex devs and just generally have a great time. I attended the event in Atlanta, and Tom & John put on a great show. The sessions are really informative and pretty informal, which creates a great atmosphere for sharing and collaboration. At this event I will be speaking about Data Visualization and Dashboards with Flex 3. I did a similar talk at Adobe MAX back in 2006, but it was on Flex 2, and geared to a less advanced audience. So for this preso, I am going to have to crank it up a notch and come up with some pretty slick examples that push the boundaries of Flex, and show people how I have been building and teaching dashboard development to other Flex devs over the past couple of years.
Mac Pro 8-core and Leopard Week 1:
Author: Thomas Gonzalez
It has been almost a week now after my transition off a wintel machine onto my new heavily loaded Mac Pro. Like so many others before me, and the millions who will follow after me, it has been an epiphany.
I have been a hard-core windows guy for the past 15 years, just devouring everything Microsoft. I am/was deeply intimate with almost all of Microsoft's software offerings from their (anti)productivity suites in their Office Tools to their back end server stacks like Exchange, SQL Server, Biz-Talk, Commerce Server, IIS, GreatPlains/Dynamics, Sharepoint and more. I also exclusively developed in MS frameworks like VB (from years ago), C# etc.. all designing and developing business applications. I was one of three Principals at a medium sized local MS Gold Partner consulting shop in charge of delivering multi-million dollar custom MS applications leveraging technologies in the above mentioned stacks. A few years ago I slowly started to drift away from MS, the first material separation occurred when I adopted Adobe Flex as the primary development technology for my new startup and was just shocked with the refreshing change of the "open" community nature that Adobe adopted in its beta.
Now a couple of years later, with Apple making it almost impossible to ignore their presence with their adoption on Intel chipsets and the ability to run Windows side-by-side with OS X I made the leap. What is amazing, is that leap is a more like a short step, the effort involved to make the switch is getting smaller and smaller. I can't say enough good things about the quality of the Apple hardware itself, the 8-core is a dream, and even more importantly OS X feels like what a computer is supposed to feel like in 2008. Spotlight (OS X's universal search tool) is just so easy... you have a thought like "where is file XXX" and you just type "XXX" into spotlight and there it is. No more waiting several minutes while Windows search agonizingly moves through your non-indexed files at a snails pace (although I am not sure how fair that is since I was not using an 8-core processor with 14GB of RAM on my wintel box.) Lots and lots of little things are just so much more seamless and intuitive with OS X.
This is not to say it is all roses, there are little things here and there that I miss from Windows, but overall the experience is such that you feel like you can forgive OS X for its shortcomings, while you want to blame Windows for theirs. To Microsoft's credit they still have a few amazing products that I have mentioned before, like Visual Studio and SQL Server 2005. Microsoft also has the very unenviable challenge of trying to support an OS that is 20+ years old and has successfully maintained backward compatibility on a ever shifting hardware platform that has to support billions of permutations of hardware configurations. Apple on the other hand got a fresh start with OS X and they completely control the hardware platform, which is a much easier proposition. It will be interesting to see how Apple is able to successfully avoid the bloat that will come with time as their adoption rates increase and the need to support backward compatibility becomes more prevalent.
So my message to any windows users considering the switch to Apple is to go for it, you will not regret it in the slightest. The only issues I have found thus far is that GoToMeeting requires Windows to host meetings, and QuickBooks online has tied themselves to ActiveX technology via Internet Explorer. For both of these I simply run VMWare fusion, although I will probably migrate to Adobe Connect for meetings, and I am hopeful Inuit will release a Flex client for QuickBooks sometime in the near future with their QuickBase announcement.
The Cult of Apple
Author: Thomas Gonzalez
Help, I think I have become addicted .... to Apple.
This weekend, while out with my wife (sans the kids), I made my SECOND trip in 2 days to the local Apple Retail Store. I left the store about $500 lighter after picking up a bright pink Nano for my wife and an Apple TV (at $229 how can you resist??) At this point I can just feel myself getting inexorably sucked into the vortex of quality, attention to detail, and desire that Apple has come to embody in most of its products. It started a couple of years ago with my MacBook purchase that was simply used to make it easier for me to test our website within safari. This was followed up a few months ago with an iPhone purchase, under the auspices of keeping up to speed on current UI and usability trends in the industry. Now my addiction to apple … I mean research … has me buying iPods like candy and buying devices I didn’t know I had a need for. Next up is replacing my aging P4 with a brand new Mac Pro 8-core with some serious memory (12GB should do.) After buying the iPhone I was truly hooked… there is something about the products Apple produces that creates this incredible emotional desire for “more of that” (at least for tech people like me.) I commented to my wife that the desire I have for Apple products is quite similar to what I witnessed in her when we walked into the Louis Vuitton store and my wife was ogling a pair of $1,200 shoes. It is really an admirable and amazing feat that Apple has pulled off, by focusing on quality and attention to detail at every level from product design, implementation, to even the jewel like packaging materials, they have created a desire for their products that I have not experienced with any other technology outside of the lust people feel for cars like BMW, etc. Apple doesn’t get it right all the time though. On OS X I still can’t understand their fascination with spawning windows like rabbits in heat, and on a much more trivial note the shopping bag that the Apple Genius put my purchase into required an instruction book to figure out how to carry. It was this weird contraption with two separate ropes going through a total of four riveted holes in the bag… I wasn’t sure if it wanted to be a knapsack, hammock, or some weird S&M device… Walking through the mall I constantly found myself trying to figure out how to hold the damn thing properly… I think they got a little too clever for themselves on that one.
Okay, back to my addiction…. Yesterday I plugged in the Apple TV to our widescreen HDTV in our bedroom, within 10 minutes I had our modest iTunes collection of about 3k songs and our photo library of about 2.5k pictures streaming from it. So last night my wife and I sat down to “rent” a movie, I was a little disheartened to see that once we started watching it we only had 24 hours to finish it… I wrongly assumed it was “ours” for 30 days. That issue aside, we never even got to the movie… We became so fascinated with watching the slideshow of our photos and listening to music. It was an amazing experience for me… we had about 7 years of photos from before our wedding, various trips to Tahiti, Hawaii, coast of California, the birth of our two sons, etc… It was just amazing to watch and recall. It gave me a whole new appreciation for taking photos, as I was completely engrossed and entertained. It gave my wife and I an opportunity to reminiscence and connect at a level that so far eclipsed just watching a movie together. After a couple of hours I ended up knocking off and going to sleep. This morning I found out my wife stayed up past midnight watching our slide show.. Now I am not sure how entertaining this experience would be after seeing these photos for the umpteenth time, but I can tell you it was a real eye opener for me in terms of its intrinsic entertainment value. When we finally get around to watching the movie we rented and delving into some of the other features of the Apple TV I will report back.
- Tom
Gauge Component v.02
Author: Thomas Gonzalez
After the response I received on the first release of the Gauge component I thought it was time for an overhaul of the code since this original code was written when I was learning Flex back on the alpha bits of Flex 2.0. Since that time Flex has moved on, and I have learned quite a bit.
This version of the component is a complete re-write of the code and is vastly simpler and easier to read/extend. First a thanks to Peter Ent, as his stab at a gauge was infinitely better thought out than mine and much more compact, the component code is very close to his, with a couple of modifications. The other bigger, and what I consider very significant change for this component is how it leverages Degrafa… which if you are not familiar with and you are doing any component development you are doing yourself a disservice by not taking a close look at it. I used this little mini project as an excuse to really dig in and find out what Juan, Jason and the rest of the Degrafa team had been working on since they seemed to be popping up everywhere.
When I dug into Degrafa I was REALLY impressed at several levels. Not only are the examples just plain sweet visually, but the framework itself is very elegant, compact, and infinitely extendable. In this version of the gauge I built two skins completely in Degrafa and MXML markup, you can toggle the skins and they will still respect the color of the styles you choose. BTW, the skins can be set via CSS, and you can have separate skins for each part of the gauge (bezel, face, pointer, center, indicators.)
The beauty of this approach with Degrafa is three fold. First I am using MXML to create complex geometric relationships which is infinitely easier to do in markup versus procedurally because the markup itself creates visual relationships through the inherent nesting and grouping structure of XML. Second, Degrafa does a great job of leveraging Flex’s binding mechanism, which in my opinion is one of the most powerful things within Flex. Finally the workflow is vastly improved, I can do everything from flex builder and not jump between Flash for building vector assets and exporting to symbol .swfs etc…
On some later post I will probably dive into the framework itself, since I ended up having to extend it in a couple of areas and it only took me a few minutes to do so. For example the “tick” marks you see on the gauge I ended up copying the VerticalLineRepeater which extends the base Repeater class, and within 20 minutes after modifying a few methods and adding a couple trig functions, I had this arc of lines that I could declare in MXML… I remember the first time I did that in the original gauge component it took me hours to fine tune procedurally via the API.
At Juan’s urging I wanted to get this up so it could be shared with the community, as such the code might stand a little clean up here and there, but overall it should be pretty easy to follow. I am also going to be writing an article for InsideRIA that goes into all the gory details of building out this component with Degrafa, which was actually quite simple and very enjoyable.
----------------------------------------------
Caveat... The tweening of the pointer is a little flakey, as I threw it in at the last second, and I need to do a better job of handling the rotate effect and updateDisplayList collisions.
Update: The newest version of this component can be found here.
iPhone Developer Program Take 3
Author: Thomas Gonzalez
Well it looks like i have been accepted into the iPhone SDK beta developer program.. I must say that thus far the experience has been far more like a Microsoft Beta than anything else, where you are made to feel privileged to have been accepted after jumping through a corporate bureaucracy.
I am not sure how widespread the program is now, potentially they are allowing everyone in. What was odd though, is that last week I got an email requesting faxed copies of my articles of incorporation for BrightPoint Consulting (the company I registered under) which I faxed over. Just a few moments ago (a week later) I receive an email telling me that upon signing the license agreement and forking over my $99 I would be enrolled. I promptly did both, and now I am an "official" iPhone developer. I find it odd that it required such a manual process... I would assume this is pretty manually intensive if they are having humans read and correlate faxes to each developer account.
Last week I downloaded the latest bits from the second release of the iPhone SDK beta. I see that Interface Builder is now included, which is supposed to be the "magic sauce" for creating UI' s in Cocoa applications. But as I had thought, it still requires quite a bit of work to set up an application. The good news is that it appears that there is finally some documentation on the JavasScript DOM api for touch/gesture events. I planned on exploring that a bit further when I could carve out some time.
I will post again when I receive the SDK if there are additional resources provided outside of what everyone else see, and if my sharing does not violate some license EULA.
Gauge Component v.01
Author: Thomas Gonzalez
Well, the time has come for me to give back a little to the community from which I have learned and benefited so much. People like Ely, Doug, and too many others to list have been a source of inspiration and a repository for useful components that I have used across many projects.
This gauge component actually stems from some of my first work with the beta bits of Flex 2.0 over two years ago. For business and IP reasons I could not share this code, but now as conditions have changed I can offer this code to the community under an MIT license. It is far from a polished component, but the foundation is there. Follow this link to BrightPoint Inc. to go see the gauge in action and right click for view source.
Some of the things on the to do list will be the following, based on interest from the community and feedback.
1. ASDocs (duh...)
2. Exposing the .swc skin more easily so all the gauge parts can be swapped via MXML or at runtime.
3. Cleaning up some of the min/max label stuff (try clicking on the radio buttons at 5 and 8 o'clock.)
4. Providing the user a way to input values via scroll-wheel our mouse.
At some point I might create a commercial version of this component, but everyone is free to use this code in whichever way they see fit.
Any suggestions/comments for improvement are welcome.
Update: The newest version of this component can be found here.
Removing items from an Array Collection
Author: Thomas Gonzalez
Today I was troubleshooting a bug where items weren't not being removed from a Flex DataGrid the way I expected them to. What I discovered is that in this particular case my laziness in abusing the ArrayCollection was causing an unobvious (to me) bug.
Here is the simplified code that looks for a match to remove items from an ArrayCollection (yes I could use a filter, but that doesn't TRULY remove items from the ArrayCollection.source, and I can never remember the 5 lines of code I need to create one correctly.) So this was my first attempt at removing items from an ArrayCollection.
ac.addItem("foo1");
ac.addItem("foo2");
ac.addItem("foo3");
for each (var foo:String in ac) {
if (foo.charAt(0)=="f")
ac.removeItemAt(ac.getItemIndex(foo));
}
Now, what would you expect that trace statement to output? Personally I expected to see a big "0", but alas the ArrayCollection is not truly keeping proper indexes as iterates through its for each. Realizing that this was probably an index issue with the iterator I wrote the following which works correctly as it backs down from the last element, thus not distrupting the index as it moves backwards.
for (var i:int=ac.length-1; i>=0; i--)
{
if (ac.source[i].charAt(0)=="f")
ac.removeItemAt(i);
}
The above code does what I was intending, correctly. I guess a lesson learned on thinking that Flex did EVERYTHING for me... guess I can't be a completely lazy programmer.
Why I won't be writing native iPhone apps anytime soon.
Author: Thomas Gonzalez
Here is why I won't be writing native iPhone Applications: (at least not yet)
After spending about 40+ hours with the new iPhone SDK, getting up to speed on Objective-C (which is kinda cool) and modifying a few sample apps with XCode I have come to realize that while Apple makes amazing consumer products and interfaces, they fall completely short of the mark when it comes to developer tooling interfaces. Perhaps it is because I do NOT come from the land of Unix (well okay I used Unix in University, but that was over 20 years ago) and I am not a huge proponent of the command line and I prefer nice comfortable IDE's like Visual Studio or Eclipse that I don't see the magic here.
Just watch the video above to witness what kind of gyrations, both in code and UI, you need to go through to wire up a button to make a beeping noise. Windows popping up all over, connecting objects from one window to another with visual lines... opaque NIB files, etc. I am sure compared to command line C++ development this might seem like a godsend, but for someone who has spent the last 2 years developing almost exclusively with Adobe Flex, this seems like a step back into the stone ages. While I am not a huge fan of Microsoft, Visual Studio really sets the bar for a highly productive and functional IDE, Eclipse is getting better and almost there. When it comes to programming languages to create expressive and immersive UI's there is no beating flex.
I am so eager to develop immersive multi-touch applications on such an amazing device as the iPhone that I have seriously considered investing the 90 days or so I think it would take to develop a modicum of proficiency on new tooling (XCode) and language (Objective-C). But when I look at how pleasurable the experience of developing with these tools would be it looks like it would be trying to go surfing on a huge 100lb redwood board versus the 6lb epoxy short boards I prefer. While I would still be catching waves, things would feel so ponderous and slow. I thought that perhaps I am just missing it, and I needed to shift my mental paradigm to a different one so I would "get-it". After watching the video above, I am not sure that I am missing anything.
Obviously an ideal dev platform for me would be having the iPhone support Flash with Multi-touch so I could develop in flex, but I don't see that happening anytime soon. Especially considering the restrictions in the SDK. The one nuggets I did find in doing my research was that one of the SDK videos talked about the Javascript extensions they were building and the new CSS standards they were supporting. Some of the glimpses I got were:
- Gesture support via Javascript (gestureStart, gestureEnd...)
- CSS Animations
- Transitions
- Full SVG support and drawing (although not sure if that is restricted to markup or can be dynamic.)
- Javascript access to SQLite !!! (this is huge in my mind as it could really allow online/offline apps)
iPhone SDK first impressions
Author: Thomas Gonzalez
Well, I am pretty impressed with the level of effort that went into this SDK. I am on day four of just looking around, and I have yet to write a single line of code, which is very uncharacteristic of me.
The SDK is pretty polished, with custom graphics, and a deep set of well put together videos (available via Apple Developer Connection) free on iTunes. The videos were a great way to get a lay of the land.
Other than starting to get my mind around Objective C after spending the last two plus years immersed in Adobe Flex feels like a bit of a step backwards. I am not super fond of the C/C++ structures and coding paradigms, as they feel like I am having to do a bunch of unnecessary work at lower levels of abstraction that is needed. Having to deal with memory allocations and stuff like that is a bit of PIA, but perhaps it is just because I have been working in higher level languages for so long.
One interesting bit I ran across in the videos is that they have extended the javascript API for Web Kit to support the handling of multi-touch getsure events like gesturestart, gestureend, and gesturechange. But I have been unable to find any other documented API references to this, and in loading up Dashcode (their web IDE for the iPhone) I could not get any more info.
Learning the iPhone SDK
Author: Thomas Gonzalez
Why I don't think Microsoft will ever "Get IT"
Author: Thomas Gonzalez
First a caveat, I come from a strong Microsoft background. Since 1995 when the web really started to take off I have used MS technologies almost exclusively. Prior to that, my experience in Pascal, C, Fortran, etc was all really on pre-PC systems. Circa 2004, I found myself as a Principal of a well known San Diego based MS gold partner consulting firm. I was responsible for delivering million dollar plus projects on the MS stack, and was a frequent speaker at MS events. At the time I thought MS was the best thing since sliced bread. They had phenomenal developer support, and went to great lengths to ramp people on their technology.
Well a lot has changed in the last few years, least of which is my impression of MS technologies. I always had a hard time understanding the prejudice I would see against MS technology, especially in the Fortune 1000 enterprise space, where even mentioning the name would get you a sour look from entrenched IT people. I pretty much chalked it up to unsubstantiated emotional prejudice on the part of non MS people who liked to look down their nose at MS technologies and the people who used them.
Now that I have departed from the MS stack and have been working almost exclusively with Adobe Flex and its related technologies for the past 2.5 years, I have been exposed to the other side of the coin. I still do/manage some .Net development for our web services, file I/O and DB related stuff, but it only takes less than 5% of my engineering time. The Flex community has a very open-source feel to it (I guess now it really is becoming open-source.) When I first started working with Flex I was astonished to see that Macromedia (now Adobe) gave me as a developer direct access to the source code. What joy! I could see how things worked, tweak it, and learn from it. Once I got involved with the Flex 2.0 beta, things got even better. The team had a high level of transparency and I could actually talk with their engineers.
What a stark contrast to my experience with MS. Trying to talk to the real engineers in a MS beta was an impossibility. The closest I ever got was a couple of product managers that were interested in what I was doing because I somehow managed to get a solution put together that integrated Active Directory, BizTalk, MS Great Plains, Commerce Server, E-Connect, and several other major MS server technologies. Apparently, my team was the first in North America, or even the world that actually got all the technologies to play nice with each other (interestingly enough it would have been impossible if I had not leveraged VMWare.) The attitude at MS on their betas, at least in my experience, was that it was a HUGE privilege to be invited, like getting to sit at the altar of some god.
All in all, MS runs a very opaque shop. In light of how much traction open source is getting, and what a refreshingly cooperative and community feel it has to it, the MS approach leaves one with a bitter taste once they have experience life on the other side.
What prompted me to write this post, is that just today I was working with one of our engineers, helping him to create a .Net setup project. This was something I had done a few years ago, and I remembered it as being pretty trivial. The challenge I was facing today, is that our engineer - who is a very bright guy, was struggling to put together the setup package. The MS Docs were next to useless, and when I saw what the MSDN has devolved to I was shocked at how hard it was to find good information on how to do the most basic of things.
What became clear to me today, and something I have been coming to understand over the past couple of years is this. Microsoft will never "get-it", it is a cultural thing and it starts at the top and ripples down to permeate everything at MS. What I mean by "get-it" is that MS just does NOT understand basics of human computer ( or anything for that matter) interaction. Their applications all seem to have been designed with a bottom up approach, where usability is bolted on versus built upon, their documentation is obtuse and hard to follow in any practical way, their UI's suffer from some significant usability issues, etc... Overall, I just see MS falling behind quickly, at least when it comes to the relevance (versus the dominance) of their technology.
I realize that is some pretty harsh criticism, and I am not saying I think MS is evil or puts out terrible software, I just think they are having a hard time embracing the innovation that is occurring around them, and they are out of touch with the evolving paradigms of developing usable software and products. The result is sub-optimal software and tooling.
I would be remiss if I did not mention a few MS products that I hold in high esteem. First, Excel, it is an amazing tool and incredibly powerful for what it is, it meets so many use cases and has a broad and varied user base. Second, SQL Server 2005 - amazing set of tools that do pretty much anything you want with a DB, their ETL and OLAP has some really nice tooling. Finally, Visual Studio, a GREAT IDE, that has yet to be matched by any other product I know of. Eclipse has quite a ways to go before it matches the functionality and utility of Visual Studio. I only wish I could build flex/air apps in Visual Studio!
Commercial Components for Flex
Author: Thomas Gonzalez
I just recently became aware of ILOG Elixir, which is a set of advanced data visualization components for Flex (Gauges/Dials, Maps, Treemaps Gantt, etc) that will be distributed and sold directly by Adobe for approximately $800. Last night I downloaded the beta to check them out, as we have already built several of the less complex components internally.
While I was impressed with the work that I know must have gone into building these components, I was less impressed with the end result on a couple of fronts. First, most of the components I looked at did not appear to be very extensible, at least on the surface. For instance their Gauge component came in one color, BLACK...., with no obvious property to alter the primary color. Admittedly I did not do a deep dive in the API, and I could be missing something here. The second area of disappointment was the lack of a polished UI and set of skins. The components seemed to be highly functional, but lacked the polish we are all coming to expect of commercial level UI that can be seen in most premier RIA and commercial OS like Leopard and Vista. Putting that polish on the components does not seem like it would be a lot of work normally, but when you take into account the lake of available properties in the API it could be a bit challenging.
What I found really interesting is that just this morning I discovered an open source effort that builds one of the more complex components in Elixir. It appears Josh Tynjala has released his own TreeMap component. On the surface this component looks every bit as good as the one offered by ILOG AND it is open source.
This begs the question: "Will we see more third party components developed commercially or via the community?" Coming from more of a closed source mindset (Microsoft) where there was a proliferation of commercial third party developer tools it is hard for me to evaluate. My experiences over the past couple years working with Flex, the team at Adobe, and the growing community tells me that more and more developer tools and components will be created via the community. Part of the reasoning here is that it is a cultural issue, the second part is that AS3 and Flex just make it sooo easy to do.
There are other complexities to this question, as it brings into question the viability of third party developer markets for Flex, which I think will be very strategic for Adobe to successfully penetrate the larger developer market. Microsoft has been very good at this, but they did so with a completely different set of cultural values (closed source proprietary.) I will be following this closely as the it could have a significant impact on the direction we take our business.
Flex Community really taking off
Author: Thomas Gonzalez
I fell in love with flex when I first started using it back in October of 2005 with the Flex 2.0 alpha. I loved it so much I started a business that used it is as its primary technology and based a big part of the business strategy on the assumption everyone would love it as much as I did and the developer community would grow quickly. Well I was partly right, everyone DID love it, especially the end-users in our target market (BI dashboard consumers.) What I didn't anticipate was that the DEMAND for flex talent would be so high that trying to find a flex developer was next to impossible.
The wrinkle for me as a business owner was that I built a platform that was designed to host Flex dashboards, but it would require flex developers to build client specific content for the platform in the form of flex dashboard applications. For a client to gain any value from our platform they would need content tailored to their unique needs (think of a typical intranet portal.) For our marquee (read Fortune 500) clients we would offer professional services to build their dashboards, but our whole goal was to sell recurring revenue via a SaaS business model, not via professional services. We soon ran into roadblocks in the sales process when we would tell clients that in order to extend, or add dashboards they simply had to just "hire a flex developer.." Well that was pretty much where the sales conversation ended, because we were asking them to find a resource, we ourselves couldn't even find (I ended up hiring good Java, and C++ developers and trained them on Flex myself.) The demand for Flex had far outstripped the supply. I was hearing rates of $250/hr + for Flex engineering work!
What I didn't anticipate, or said more accurately "think-through", is that there would be a lag between the demand generated for Flex and RIA, and the resources to fulfill the demand. Well things are getting slightly better. I see evidence (anecdotal) that the Flex developer community is really starting grow, with community sponsored events like Flex 360 we see a huge groundswell starting to manifest.
I also am starting to see the community filling needs in regards to the flex code base/framework faster than Adobe can with projects like Model Glue, Degrafa, and FlexMDI. Projects like this are really exciting to see, and have huge implications in regards to the efficacy of open source and the implications it has with business strategy when it comes to running a software company.
It seems now that the supply is starting to slowly catch up with the demand, and I realize one of the major accelerators that are filling the supply side of the equation is the open source community. This realization is partly responsible for me taking a serious look at how we can contribute to the effort because it appears to be a true win-win.
What would be needed in a Flex Dashboard Framework?
Author: Thomas Gonzalez
Flex/AS3 does so many things well, and in my opinion is one of the most productive languages to create complex MVC type UI applications. That being said, some work in Flex I can find to be very tedious. While the class structures and OO all seem very elegant at the documentation/class level, the pragmatic use of some of the structures can create some odious and repetitive coding.
Take the charting for example. I can't tell you how many times I had to hunt around to figure out how to "adjust" the color/thickness/alpha for the horizontal and vertical axis, while not terribly complicated you either need to go down down about three levels of property chains in MXML or AS to get to the correct properties. When doing this for half a dozen charts in one application, it can get time consuming and verbose.
The other challenge we run into, is having to munge source data into a format appropriate for the charts to consume. Internally we have built some more hardwired models that allow us to point to a data structure and have it "transformed" into something the charts can read. I think more ideally we could extend the ICollectionView to include some transforms so that not only can we see sorted/filtered data as bindable properties, but also transformed (aka OLAP pivot/slice/query) data that multiple charts could consume.
Finally, the last main challenge we run into, which is not unique to dashboards, is architecting a proper event driven MVC. Dashboards tend to bring the limits of a non MVC approach to a head rather quickly (specifically highly interactive dashboards with drill up/down/across capabilities.) What first starts off as an easy "hard-coded" approach shortly winds up with piles of spaghetti strewn across several MXML components. Most MVC frameworks like Cairngorm are way to heavy though for simple dashboards. Frameworks (and I am probably using the term incorrectly here) like Model Glue seem more appropriate, but I suspect we could develop something even lighter and more tightly geared for building Flex based dashboards.
So as I see it the three primary areas to build a framework/convention/micro-architecture around would solve these three challenges.
1. Easy way to set styles/properties of objects without having to traverse deep object trees.
2. Easy way to load source data and transform it for charting.
3. A ultra-lightweight MVC framework geared for Dashboard UI challenges.
- Tom
Flash Player Update - Not so good
Author: Thomas Gonzalez
I am not sure how many other flex developers have experienced this, but the latest rev's of the Flash player break some existing Flex generated content. I don't mean slightly annoying UI issues, the player downright stops the application from functioning.
The two issues I have found when running Flex content that has been generated by the latest version of Flex Builder 2 (2.0.1) inside a flash player version higher than 9.0.4xx (mostly the player targeted for AIR and Flex 3) are the following:
1. var myObj:SharedObject=new SharedObject();
2. myObject.function = function dummyFunc():void { //do something }
In the first case I suspect that statement was never valid in the first place, but we had code that was compiled in Flex 2 that had these statements and the compiler never complained. Now if we try to run these .swf's within the latest player the application stops working after burping an error telling us we can not instantiate a SharedObject (i believe it is a static class)
The second case is less obvious, but basically the new player will not allow anonymous NAMED functions. So the statement must read like the below.
myObject.function = function ():void { //do something }
I remember reading another blog post that pointed me to this.
Anyway, I am surprised Adobe is doing auto-updates with these types of changes and not making the developer community aware of the potential pitfalls.... The more Flex becomes prevalent on the web in public web sites the more things like this will become an issue.
- Tom
Open Source Dashboard Framwork for Flex
Author: Thomas Gonzalez
After spending the last two years building Flex based dashboard technologies primarily for our VFX Dashboard Platform we are ready to start contributing something to the community. In the past couple years building flex based dashboards for our clients we have streamlined the process to go from requirements to final solution. We have iterated over design patterns and frameworks, each time surprised at our ignorance from the iteration before as we found yet another nugget in Flex we were not leveraging.
At this point I am interested in creating an open source dashboard framework for Flex that accelerates the development time to build a rich, complex dashboard bridged across many data sources and highly interconnected and interactive. My goal is to create a framework powerful and compact enough to allow a new Flex developer to build a compelling solution purely in MXML. I am not sure if that goal is attainable, but I think it is one worthy shooting for.
Flex 3 has introduced many new features which we can take advantage of, both in the charting classes and the new OLAP classes. One of the biggest struggles is the repetitive, but client specific code we have to write that takes source data and mungesit into an appropriate format that we can chart from. I am interested in spending some time with the OLAP classes to see if we have some easier ways of transforming source data into usable charting data.
Initially I will probably just release some sample code, and depnending on the audience it gets over time potentially creating an open source project. Right now I am in a pure Proof of Concept state on putting together an appropriate set of samples that would sit outside, but work tightly with some of our more proprietary VFX platform code.
- Tom
The Purist and their Ivory Towers
Author: Thomas Gonzalez
There is a school of thought in the world of data visualization that I like to refer to as the "purist" approach. This outlook and view has been adopted by a few prominent individuals who specialize in data visualization, most of who are simply re-hashing or misinterpreting the work of Edward Tufte. The reason why I felt the need to comment on this phenomena, is that these practitioners speak with such an air of authority and arrogance that a neophyte reading their material would come away with a very skewed perspective on how to apply data visualization best practices in a pragmatic manner, specifically when it comes to designing effective business performance dashboards..
To help understand how to recognize this school of thought I have listed some of the more salient characteristics that can be seen over and over again when reading their materials.
- The purist spends 80% of their time pointing out what is wrong in others work through diligent critiques while only showing brief examples of what they propose to be more optimized solutions.
- The purist has a strong disdain for any aesthetic “decoration” or consideration within a dashboard design.
- The purist favors “efficient’ but more obscure visualization metaphors that leave the typical information consumer confused.
- The purist usually ignores the interactivity of the medium and usually reserve their critiques to static 2d analysis, as if the computer monitor where a piece of paper versus a device that the user can interact with (via the keyboard, mouse, etc..)
- The purist is usually not a technologist, and as such offers advice that is more suited to float in the rarified air of academia than being grounded in the pragmatism of one who actually uses technology on a daily basis to accomplish business objectives.
Let’s take a closer look at some of these characteristics and how they truly undermine the purported goal of improving the practice of data visualization
Critique before Praise: I will give them this: the purist, if nothing else, is passionate. Unfortunately this passion seems to take the form of an almost evangelistic criticism of most software vendors and their dashboard visualization tools. In my experience when writing articles that are aimed at teaching best practices in data visualization, one of the easiest things to do is to point out bad examples of other peoples work. Unfortunately this approach does little to help readers quickly master the basics of good design; instead they are left with a catalogue of what not to do and no information on what should be done. The irony of this approach is that contrary to the visual “efficiency” the purist is trying to advocate, their literary approach is extremely inefficient as the big take away the reader has is all of the things that should NOT be done.
Aesthetics have no place in Data Visualization: While it is true that “sex sells”, and most dashboard vendors spend a lot of time drawing attention to their hyper realistic gauges and dials, it is not true that these “decorations” are ineffective. When properly used, aesthetics can play a huge rule in the effectiveness of a dashboard. Studies have shown that aesthetics play an important role in the perception, and ease of use. Dashboards have a unique set of requirements from a business and data visualization perspective, some of these requirements are quite a bit different from the requirements of doing data exploration or data analysis across large volumes of data. If a dashboard is being built to help monitor certain measures or operations that support a key business strategy or objective, I would think doing everything in your power to encourage end users to use and look at these measures would be a positive thing. The aesthetic appeal of the dashboard and the resulting emotional reaction to the visualization plays a large role in how easy users find the tool to use and how receptive they are in wanting to look deeper at what is being displayed. Using interactive and eye-catching features like realistic gauges, specular highlighting, and other visual cues helps to engage the end user and can also be used to emphasize the more important information within a dashboard. In some of my presentations and writing I talk about creating a visual hierarchy to your dashboard designs. This hierarchy is designed to reinforce the level of importance of each KPI or measure so that it reflects the importance of the business decisions that are being made from the particular metrics. Using these more engaging visualizations and contrasting with more subtle and flatter visualizations can be an ideal way to reinforce this visual hierarchy.
Efficient but Obscure: One thing I am struck with immediately when looking at some of the more esoteric visualization approaches advocated by some of the purists is that the meaning of the data being showed is not immediately obvious. While many of these visualizations are extremely ingenious and very efficient in terms how much information that can be imparted in a small amount of space, the problem is that the user ends up struggling to understand what is being shown. The user ends up spending a significant amount of attention reading through explanations, digesting the visual relationships, and learning the new graphical metaphor. Once the visual representation is understood and assimilated through repeated use we can began to let our natural pattern recognition processes within our brains help us to quickly digest the data. But this misses the point, that the goal is not to teach end users some new and novel way to visualize information, but rely upon the current mechanisms they are used to in terms of visualizing data that allow for that “instant recognition” when seeing data. When a user is forced to invest intellectual thought into digesting the meaning of the spatial and visual representation of the data – they are no longer leveraging their powerful and native pattern recognition capabilities. Not that these novel approaches to visualization don’t have their place in data analysis, they just don’t belong on a business dashboard. The trick to doing great dashboard visualization work is to capitalize upon the visualizations and metaphors that users are accustomed to (and thus recognize naturally) to impart important business information that allows the user to make more efficient and timely decisions.
Escaping Flatland:
"We envision information in order to reason about, communicate, document, and preserve that knowledge -- activities nearly always carried out on two-dimensional paper and computer screen. Escaping this flatland and enriching the density of data displays are the essential tasks of information design."
- Edward R. Tufte, Envisioning Information.
Tufte serves as the canonical figure most often quoted or referenced by the purists, and the sad irony is that the purists seem to miss some of his most fundamental points. This is no more obvious than in the critiques that show a screen shot of a particular vendor’s dashboard tool that is then dissected as if it were a static object. Very little (if any) analysis is given to the more dynamic and interactive features of these dashboards. When an designer capitalizes upon the more dynamic nature of the vendors toolset and is able to effectively leverage the technology to selectively drill, filter, magnify, and highlight relevant data, these screens come to life and provide a very rich and dynamic interface for the user to immerse themselves more cognitively with the information at hand.
The Ivory Tower: In the real world we have users that don’t have the time to understand new and novel ways of visualizing data, customers who are impressed by the “sex and sizzle” and make purchase decisions accordingly, software tools that cant do everything perfectly, data that doesn’t meet clean and pre-defined notions. Real world solution providers have experience creating businesses and successful solutions while dealing with all of these variables and more. The purists on the other hand climb up into their Ivory Towers (usually a self-promoting column they have secured in one of the plethora of industry trade publications) and pontificate upon the finer points of data visualization expecting business users to change the way they think to meet their strict views on how to best present information. If the purist truly wants to change the way business people perceive data, they would develop a product that does that, market it, sell it, and implement it. Or at the very minimum, provide pragmatic and real world examples of how to do that with common software found in today’s market place. But then again that might actually force the purist to climb down from their tower and get their hands dirty in the work of solving real world problems with real world technology.
A Picture is worth 3 billion words
Author: Thomas Gonzalez
One of the phenomenal aspects of the human brain is its ability to behave like a massively parallel set of processors, being able to simultaneously digest multiple streams of information at speeds that would stymie some of the most advanced super computers.
While traditional x86 computer processors can only process one instruction set at a time, albeit at amazing speeds, they can not process information in parallel. While a human might be able to make 1 or 2 mathematical calculations per second, and a computer is capable of billions, a human can still instantly recognize a smile, while a computer can not. All of the computers power comes from its ability to do calculations in serial, one after another, at amazing speeds; at its core all a computer is doing is performing simple Boolean equations between bits that either have a 1 or 0 value. It is just doing billions of them in fractions of a second.
But, when you apply the computers incredible serial processing capabilities to very complex mathematical problems (like using multivariate analysis to discern the meaning of a facial expression) you hit a brick wall very quickly. Using a brute force linear approach to solve these problems will bring some of the most powerful computers to its knees. So if you ask a computer to search gigabytes of text data for the word “flower” it will do an amazingly quick job of finding it (relatively easy mathematical calculations using powerful sort algorithms), but if you scan a picture of your front yard in the spring time and ask the computer to identify a blooming flower, it will have a much more difficult time.
Humans have an amazing ability to process certain types of information in a more instantaneous way, this is most evident in the way we process visual information. A very real example is the way we can analyze numbers represented as visual patterns exponentially quicker than we can analyze a set of numbers in their native form. If you were to look at a spreadsheet filled with hundreds of weekly sales numbers across product lines, versus looking at a simple bar chart with the same data, which would you prefer to determine which products sold more than others?
Lets look at this example more closely. When we look at the bar chart we can “instantly” see each bar in relationship to its neighbor and “instantly” see which ones are higher than others. This analysis and understanding happen in an instant, it isn’t even a conscious thought. It is the same as you identifying what color something is, you simply know it. Conversely, if we were looking at the numbers in a spreadsheet we need to do many more mental gymnastics. First we need to read the number which is a visual pattern in itself, and a combination of visual symbols usually consisting of one or more digits like: “123,456.” We then have to consciously make a mental comparison of each number against the others. This is a conscious and thus linear process, in which we are much slower than a computer.
So if you look at a visual representation of data you are able to process information almost instantly, but if you need to look at a raw data itself, you will be forced to consciously digest it in a linear fashion.
One of the fundamental areas we focus on in our information visualization work at BrightPoint Consulting, is to figure out ways to leverage humans naturally given pattern processing engines. To the degree we can present relevant information in visual patterns that users can take advantage of, we succeed in creating a more effective and efficient interface between the user and the data they interact with.
In the face of the exponential growth of data and information that 21st century humans need to deal with on a daily basis, technologies that allow people to more effectively process that information is not only a great opportunity for new business, but it is something that helps society as a whole. We are relieved of the tedium of repetitive information processing tasks and freed up to focus on higher level functional tasks that result from the understanding of the underlying patterns.
