Blog

  • Flex 2 Released – Flex 4 Teh W1n!!!

    To skip the nostalgia:

    I’ve been thinking for the past week how I’d announce Flex 2 on my blog. As someone who is aggregated in a variety of high traffic aggregators, it is my responsibility as a blogger to not post a “me too” post. If I am to post anything, it must be something of value to the reader.

    In one sentence, I’m writing what I think should be said, not what needs to be said.

    What needs to said is warm, technically accurate, and concise descriptions on what Flex 2 is from the author’s perspective to give context and corroboration. This allows people both in the know, and those reading for the first time a fair chance at understanding and having a valuable take away.

    Good, honest marketing, written with passion behind it.

    What I think should be said is entirely different. As a member of the Flash & Flex community, it is my duty to write SOMETHING, so here goes.

    The difference now, however, is the sheer mass of appeal that Flex 2 has spawned without even existing. In all fairness, I’ve seen Vista do the same thing. Some people who think XAML is dumb can easily be countered by the enthusiastic and elated posts I’ve found discussing it on the net. Flex 2 is released, though, hehe. I felt I had to post about the release about Flex 1.5, with proper time taken post release, to ensure the audience clearly understood from the first reading of my entry why they should care, why it is cool, and where they can easily find more relevant information. Flash 8 was easier because I had no agenda. I just love the prog, so it was easy to just go, “Yah, this is cool… they’ve already showed this at various conferences, but now you can play with it yourself!”.

    Flex 2 is different. The word “different” needs to be judiciously defended and backed up with quantitative reasons vs. qualitative passions that a lot of developers apply to the word. “This framework is different.” I’ve seen that written for CakePHP, Ruby on Rails, and various other software products, services, and web applications.

    With that said, something needed to give. Walls had to come down. Things needed to change.

    One thing the Flash community has had is a strong community. While there are many facets that don’t always communicate as frequently, I think the people in it are a special demographic. That special trait is also what set us apart in a bad way. While bringing a unique talent to the table is great, from an application development perspective, it’s not so hot. You need available resources, and good technology. Flash application development has had a serious problem with qualified, available resources for the past 4 years. The dot bomb crash healed for me in 6 months. When I say healed, I mean the following Spring, available work exploded. I advised my friends & colleagues in any facet of Flash, especially development, to take risks. Now is the time to venture out, this is confirmation that the technology path you have chose is the right one, one that you can and will be successful with.

    Things didn’t slow down. Things didn’t improve, either, to keep pace. The scope of the projects got bigger. While improving my skills helped, it wasn’t enough. The IDE, the platform, and the community could not respond positively to the demand.

    Enter Flex 2004. After “getting it” my 2nd attempt, I recognized, at least for the IDE part, this was my future, and hopefully for others in a similar boat. As time went on, things continued to get worse from a project scope, system resource shrinking envelope, and developer demand.

    The problems were clear. The current IDE does not support large to mid-size scoped application development projects. The current IDE has too high of a barrier of entry for existing developers. Rich Internet Applications created via Flash are great! Hell, we invented the term, why can’t we share this with the rest of the world, and get them involved?

    Because it’s hard. It’s weird. It takes a unique person, and unfortunately, while that uniqueness is great, it doesn’t translate to wide adoption and spreading of the love. Giving JavaScript programmers a reminder that they’ve had an unused function for 7 years suddenly sparked a reminder that people DO want to create. People DO want to make things better. You just need to empower them. How do you do that?

    FlexBuilder 2 & ActionScript 3. Eclipse, a command line compiler, and a strongly-typed language.

    The masses are now empowered. The existing community can add the above tools to their existing toolset.

    Solving the IDE, Adobe fixed the next problem. Performance and resource usage. The influx of the hundreds of AJAX development frameworks has been somewhat of a boom for public perception. For example, I’ve seen homepages of some of these new web applications that take 7 seconds to load. I’ve got an almost year-old code base with at least over a quarter-of-a-million lines of code loading in 4.

    Still, that’s not enough. You need to drastically increase performance, reduce memory consumption, and expose lower level display capabilities for the developer.

    Flash Player 9 which has AVM+ and the DisplayList.

    We have a brand new ActionScript Virtual Machine+ scripting engine over 2 years in the making, optimized for speed via the Just In Time compiler (JIT) which uses machine code targeted at the specific processor for serious speed punch. The DisplayList removes the restrictions of having your GUI being tied to it’s initialization; you’re no longer punished in system resources for “creating” visual elements.

    They solved the IDE by making FlexBuilder familiar. They solved the performance by making the Flash Player 10 times faster. All that’s left is getting adoption.

    Adoption doesn’t refer to the Flash Player 9 installation. History has proven that we WILL get adopted, and quickly. Quick enough.

    Adoption refers to getting those who are capable to use our tools. I say, our, because I feel like I’m finally getting a better opportunity to share the RIA love with the greater development community. It’s hard when you have a seasoned back-end Java developer and you attempt to explain how code & graphics mesh on a timeline. Now, however, they’re answering MY architecture questions. THEY are the ones who will start pushing the limits, not the designers, not the alpha-hybrids, but the developers who have just been crippled by past dogma, walls to entry, and a forest for the tree’s mentality towards the web browser.

    We’ll always have the designers and alpha-hybrids continuing to lay the funk, no doubt. But over the course of the next year, I see a more realistic influx of a wide array of talent from a diverse developer camp.

    The free framework and compiler will hopefully attract the open source crowd. I think MTASC and hAxe proved there was something special there.

    The IDE & ActionScript 3 will attract not just the existing developers but those who understand what the Flash Platform handles for them. They’ll never want to go back.

    The large Enterprises who are already bought in will continue to get the new innovations to in turn help them innovate. New ones can clearly see the opportunities to join in. A flexible, rich client with a configurable back-end I KNOW is something most Java devs I’ve worked with will absolutely love.

    I think the existing Flash community will be halved. Based on their work and those who have a clear picture of what Flex 2 offers will adopt it. Some won’t.

    All of this influx of people from a wide-array of backgrounds will really give us an edge against what traditional web development and AJAX has: available resources.

    People CAN do this. Adobe has given you the tools to do so. To do things a better way than they have been done in the past. This isn’t like it was for Flash Developers 3 years ago. This is an opportunity for EVERYONE.

    That’s just off the hook.

    On the flipside, I’ve been in contact with, and personally met more than a few members of the Flex development team. While I think a few (*cough* Matt Chotin) are a little to humble of what they have done for the Eclipse community, one thing is abundantly clear: they care and have passion. I’ve seen their incestuous questioning of the community from a variety of angles over the past 2 years on mailing lists, public forums, and blogs. I met and discussed the business ramifications with those who could explain them. I’ve debated the public relation & marketing strategies both good and bad with them & colleagues.

    Bottom line, they are a talented team, have a pragmatic mindset towards the product, and I think that’ll show when you use the products. Great job Adobe Flex team, I know you all worked extremely hard, and I know it’ll pay off.

    In the end, I’m a little sad. I think it’ll take a year for things to really take off. While I’m sure the momentum the next few months will be huge, I think we’ll start seeing ROI which will become cyclical as well as broader adoption by then via stakeholders that have good capability.

    That’s great!

    What I’m sad about is something I wanted so bad to happen finally has. That is that the greater Flash Development community has embraced Flex. I was a judge for the Flex Derby, and it blew me away the amount of entries, and the quality of the ones I saw. Even more unexpected was the amount of server-side developers that got involved. You’d get a plethora of ColdFusion, Java, and C++ developers. Some of my favorite comments were, “This is my first Flex application.” Hell yeah! They are so impressed with what they build, they put it into a contest! I LOVE IT!!!

    Still… it’s the end of an era. It’s definitely not as black and white as my Director to Flash transference. To me, you only survived there because you were stubborn, or found one of those impenetrable, niche market that Director owns. I pretty much gave up full-time Director development to go into Flash development.

    With Flex, it’s a little different. Granted, I do Flex 8 hours a day, 40 hours a week now like I always wanted to, but I don’t see myself doing as much Flash anymore. The difference here is that Flash cannot fall by the wayside. There are too many things I can do with it that I can’t do well, or at all, with Flex. Flash Lite, highly branded applications, and basically anything artistic that combines animation, audio, and video. I think I’ll be forever using Flex & Flash in tandem.

    I don’t mean to get nostalgic, but in writing the history of how we got here, it’s almost like, while this new journey will be extremely awesome, I wish the first would never end.

    Regardless, today is a day for celebrating. A new era for web applications will be borne because the developers are now empowered in greater numbers. There is strength in numbers. There is power in the collective conscience. I so can’t wait.

    I invite you to take a look at the various features and facets that make up Flex 2. I know you’ll love what you see, and you’re fingers will twitch when you think of the possibilities of what you can create!

    http://www.adobe.com/devnet/flex/

    For resources to learn and connect with the Flex community, go to Flex.org.

    http://www.flex.org

    If you have anything you wish to have added or bugs to report, go the wish form.

    http://www.adobe.com/go/wish

    Welcome to Flex.

    ———————————

    Mark “Zorn” Anders goes over pricing and bare minimum details.

    Ted Patrick discusses why Flash Player 9 will change everything, and what the purpose behind Flex.org is.

  • Customer Expectations

    This is more applicable to service work than product work I think. I had a discussion last week that greatly changed the way I work. I learned the customer’s expectations.

    One of the reasons’ people have problems in personal relationships is that they do not communication expectations to the other party. This builds up frustration with the other party when he/she/they fail to meet the unsaid expectations. This is unfair to the other party who is unknowingly making the person angry without knowing it.

    On the flip-side, I’ve found I usually am better off asking what are the other person’s expectations up front to ensure we’re all the same page. In understanding how to best work with others, this is probably the single most important question to ask at any level.

    The reason I bring it up here in this context of relating to work is that my style of work is adopted based on the client’s expectations. They want to see something to develop trust? I build something simple out quickly that works with no intention of updating the code base. They want to see continual progress and constantly change things? I build based on iterations. They want it perfect? I hunker down and test the heck out of it.

    Those may seem obvious or relatively non-important, but I think they deserve to be re-iterated. In smaller teams there is more transparency, so even designers & developers on a team shielded by management are still privy to what the customer expects. On larger teams, or in ones where client communication is small to nil, without a clear communication of expectations, false impressions can not only sprout, but get entrenched into an attitude of development.

    I’m not sure of the signs, but I know if you do recognize them, it is paramount to quickly clearly communicate, again if need be, the expectations. Why?

    If you are a contractor and someone hires you for a small project to “see what you can do”, while the temptation may be to blow them away, I suggest you meet the expectations first, and if you have time, do the additions ONLY when you’ve met the original expectations. If you’re on time but didn’t get to add the extra things, feel free to share “what you wanted to add”. Better to build trust than to over promise and never deliver. I recognize that it may take less time to build the extra’s in initially, but I have failed time and time again when taking risks here, and I refuse to do so again… unless the risk is reasonably calculated, hehe!

    If you are a developer under the impression you can “shoot the client an early build” when they signed off on mockups they expect to be perfect and working 100% as designed, you will fail, give the client a negative impression, and feel frustrated with your efforts being discounted since you aren’t getting the type of feedback you wanted.

    If you are under the impression it needs to be 100% perfect and tested, and the client hasn’t seen anything for weeks or even months, you’ll be extremely frustrated and defensive when they return lackluster feedback and want changes. If the client is open to a more iterative style of development, or you get the impression they are untrusting or shifty in “what they really want”, it’s best to adjust your development style towards that type of development.

    A former executive of General Electric encouraged companies to have a set of company rules, edicts, or ethics that the entire company, every employee, could use in their decision making process. Their wording, order, and amount all had significant impacts on the company. What the company stood for and how they go about accomplishing what they do is held in this list. The point, though, is that they are the “expectations” of how you do business in the company as an employee. This ethical guide leaves no room for questioning on how to approach problems from an ethical point of view, leaves little to no room for doubt on what is most important if written well, and serves as an overall guide for your company.

    This empowering of clear focus is exactly what clearly articulated expectations do. They allow you to be successful, and remove all obstacles, leaving most of it up to your team’s collective skill set leaving your problem solving ability to be focused on algorithms and software bugs instead of customer bad feelings.

    The reason for this post is I was recently in a situation where I assumed the client knew about the benefits to iterative development and agile development and was clearly mistaken. This lead me to develop in a fashion that focused on getting initial functionality down with bugs or not-so-finished functionality into a working build that I assumed I could get user feedback on early. This was a polar opposite of what the client was expecting, made my team, and me in particular, look bad, and was setting me up to fail. After a discussion of the client’s expectations and some context as to why they were like that, I realized my attitude was wrong, my style of development had to change, and I could now be successful my decision making process vs. always defaulting to wrong. The downside was this wasn’t early in the development cycle, so the damage in time spent had already been done. I also learned that you can’t always change these expectations either and just have to deal with it.

    Bottom line:

    • Don’t assume people recognize that even though you didn’t deliver on time, you were going to add all this cool extra stuff.
    • Don’t assume every client knows what Agile or Iterative development is, nor cares.

    Ask the other party what their expectations are, and confirm you can meet those expectations with the understanding you’ll do your best to exceed those expectations time allowing.

  • Yahoo! Messenger Plugin First Attempt… Failed

    I attempted to get a working plugin with the Yahoo! Messenger Plugin SDK via the new beta version of Yahoo! Messenger that Justin mentioned. There were a few inconsistencies and issues with the documentation, but they used the “B” word, so I’ll be nice.

    There was no registry file so I modified the keys myself. The participant code wasn’t clear on where you are supposed to put it. The example code is also missing a ) preventing it from running. Finally, the ActiveX control section is the most confusing thing I’ve seen in my entire life. If you want to make JavaScript look like Perl, there is a great example. Bottom line, you do NOT need the ActiveX code to make Flash work. You just embed your SWF and you’re good to go.

    However, the ExternalInterface isn’t working for me. I posted a bug to the mailing list, but am still awaiting moderation (1st post is moderated). The __flash__addCallback function for ExternalInterface is failing.

    So, I instead used the Flash / JavaScript Integration Kit instead. This worked; I could send some debug messages to Flash to see in a custom textfield, so I know it was working.

    However, my onPluginMessage wasn’t getting fired via an IM message. So, I tried using the IMRecieved event, but it kept saying the object doesn’t support this property ( yahoo.SetEventHandler(“IMReceived”, On_IMReceived); ).

    That’s bs because the line above it uses PluginMessage one just fine, so my guess is the class is throwing some exception. I couldn’t tell if that event was allowed in a Tab window or a SidePanel… the example code wasn’t really clear what was allowed where; kept mentioning “another plugin instance”.

    After 4 hours, I gave up. Hopefully they can answer some questions on the list.

    Anyone get farther than I did?

  • Flex Chronicles #19: DataGrid columnsChanged

    I was building this component to work with the DataGrid. It needs to to really “understand” the DataGrid, and part of that is being very intimate with how the DataGrid’s columns work. This is an array that holds DataGridColumns. These give data on how to draw the grid. The component needed to redraw itself if you passed in custom columns, just like if you passed in a custom array for the DataGrid. Additionally, it needed to update when the DataGrid itself had its columns changed.

    Typically that last one is a rare use case, at least in my experience. You don’t go dynamically adding & removing DataGrid columns. However, if you do not explicitly set a columns array for the DataGrid, it has to read the first object of the dataProvider you send it (typically an array of objects). It then generates the columns from this object. The problem is, this initial event of generating columns does NOT fire a columnsChanged event. It was hard enough getting at the source code for the DataGrid, and I certainly can’t start building a stockpile of modified mx components in our class tree else I risk the portability of our code. Don’t get me wrong, I’d love to, there are a ton of little things I’d change, nothing big.

    So what to do? Fix the function. This is easy in AS2; you just modify the prototype. This fix basically tells the DataGrid to call it’s existing generateColumns method, but in addition, dispatch the same event it’s getter / setter does so those who care can be informed.

    DataGrid.prototype._generateCols = DataGrid.prototype.generateCols;
    DataGrid.prototype.generateCols = function():Void
    {
            this._generateCols();
            this.dispatchEvent({type:"columnsChanged"});
    };
    

    Yes, yes, I know… “Stop blogging about Flex 1.5, Jesse. Blog about Flex 2 instead!”.

    Dude, it’s up to my client, not me… I’m working on it!