Tag Archives: Adobe

Adobe, SpringSource, Please Help us with Grails/Flex integration

I’ve been using Grails extensively for a year or so, and I love it, I really do. I even wrote a couple of plugins for it, including one for integrating Grails with Apple Push Notification Service. But since I’m always looking for productive ways to develop, I always thought that Grails and Flex were the best combination ever… until I hit the brick wall!

There’s a Grails Flex plugin, but it has 3 major issues:

  1. The Flex plugin has not been maintained for years, and it uses the old-fashioned way of integrating BlazeDS into Spring instead of the more modern, robust and easy to configure Spring BlazeDS integration library
  2. It doesn’t deal at all with authentication and authorization which is for me a critical issue in any remoting setup. And the Flex plugin doesn’t really offer a solution to that.
  3. The Flex plugin integrates BlazeDS3 and suggests you should mix your Flex sources with Grails project, which doesn’t make it easy to work on the Flex part using Flash Builder and its great data connectivity wizards.

Those are the 3 reasons why I’ve been working on the Grails BlazeDS plugin which works great with Grails up to version 1.2.x. Unfortunately I’m tackling some challenges with Grails 1.3. And even with Grails 1.2.x, there are still some limitations with Flash Builder, mainly due to the fact that

  • Flash Builder requires a standard WAR layout, which “grails run-app” doesn’t create
  • Flash Builder doesn’t like artifacts that Groovy adds to classes at compile time, so it’s not able to generate client-side stubs

So from a Grails/Flex integration standpoint, we end up being stuck between an old solution that is working but incomplete and not integrated in tools, and a more modern solution that does not work anymore and forces us to use some workarounds.

All the community needs to make this work is a little coordinated help from Adobe and SpringSource so that we can have:

  • a BlazeDS 4 + Spring BlazeDS 1.5 + Spring Security 3 integration plugin for Grails 1.3 and above
  • a data connectivity wizard that does not require a standard WAR layout and is capable of generating client stubs based on Groovy classes.

I’ve left a couple of messages on Grails mailing lists, Adobe forums and SpringSource forums, but so far, all my calls for help have remained unanswered. So if anyone is willing to help or support this ongoing initiative, it’ll be greatly appreciated. Just leave a comment if you need such a better Grails /Flex integration and maybe it will trigger a red light somewhere at Adobe and/or SpringSource. And if someone from Adobe or SpringSource is reading this, please help!

The Real Reasons Behind the Flash Debate

In my humble opinion, the main reason why the debate around Flash versus HTML5 (and Adobe versus Apple) has gone haywire during the past few weeks is that everyone is lying about their true motives (like in any apparently inextricable conflict):

  • Apple doesn’t want Flash on its closed devices like the iPhone, iPod Touch and iPhone because Flash would be an alternate content channel that would hinder Apple’s very lucrative iTunes business. And of course they won’t admit it because it would mean that they put business strategy before innovation.
  • Adobe has some technical issues with Flash because the codebase is very old and costs a lot to maintain. And they won’t admit it because it would make Flash look weak and unreliable on the long term.
  • Most HTML5 proponents started as amateur web developers, tinkering for years with poor technologies like HTML, CSS and Javascript, building entire businesses around their capacity to figure out all this mess out of trial and error.
  • Flash developers (including yours truly) have invested a lot of time, money and effort in tools, training and experience with the Flash platform, and are not so enthusiastic about throwing all of that down the garbage for yet another fashion tech. But of course we won’t admit that because we’re afraid to look like dinosaurs who refuse to evolve.

And since everybody uses pretexts, everyone will use every contradiction and approximation possible to maintain their cover. Like I said, wars work the same way: ideology hides facts. It motivates your troops to fight the other side until they’re dead, because the big guys, the ones who know about the real reasons simply can’t find a peaceful solution that would allow everyone to win.

It reminds me of a European civil servant who asked me this simple question once when I started a mission for the European Parliament: “Why do you think the European Union was created?” Naively I answered “so that one day we can be on equal foot with the United States.” “Wrong!” he said. “That’s not what Shuman and its friends had in mind. After World War II, they realized that the true source of the conflict between France and Germany, and by extension between their respective allies, was the repartition of natural resources in general, and most notably at this time, coal. But it’s hard to get people to fight for that kind of cause, so powers had to disguise it with ideology so that people would feel invested and do terrible things in the name of it. And they understood that if they didn’t cure the real sickness instead of fighting the symptoms like they had done after World War I, they could not prevent it from happening again. That’s the real reason why CECA was created, and then CEE, then EU. It was not a matter of power, it was a matter of peace.”

And that answer struck me because the same pattern repeats itself over and over again in a lot of contexts. Behind decades of war between Israel and Palestine, there’s a fight for water. Behind the war in Irak, there was a fight for gas. Behind the war for the future of web technologies, there’s a fight for customers. And the conflict is even more violent as it happens on 2 different levels: company-wise between Apple and Adobe, and community-wise between Flash developers and HTML developers.

The good news is that there’s a way for everyone to win peacefully once we reveal the real issues. There are enough customers for everyone. It’s not a zero-sum fight. The other side doesn’t have to lose so that we can win. The question is: will we be strong enough to reject the ideology and find a common ground at the community-level? Or will we let the big guys at Adobe and Apple hide behind ideology and use us as cannon fodder.

Grails BlazeDS 4 Integration Plugin

One of the main goals I’ve been pursuing for a few months is the integration of Grails with Flex 4. I need to rework ConferenceGuide‘s administration backend to make it more ergonomic so that we can cover more events, and ever since I discovered Flex 4 niceties, I couldn’t think of doing that with anything else. The problem is that none of the existing plugins suited my needs. All of them cover Flex 3 only, some of them introduce a lot of complexity for CRUD generation, some of them use GraniteDS instead of BlazeDS, and the simplest plugin, grails-flex has never gone further than the experimental stage. I did a lot of experiments, talked a lot about it on Grails mailing lists, until Tomas Lin kindly explained to me that maybe I was approaching it the wrong way. I wanted a plugin that would set up a complete environment for Flex developement right in the middle of my Grails application. And I wanted that because I wanted to avoid using Flash Builder (you know… Eclipse… ierk!), mainly because the only advantage of Flex Builder 3 over IntelliJ Idea was the visual designer. But he was right, I was wrong. Flash Builder 4 DOES change everything. It does include a lot of very interesting features that greatly improve Flex development productivity, especially when it comes to integration with backend technologies. And for those features, I can only admit that IntelliJ is not up to par yet. I’m still gonna use it for the Grails part, but Flash Builder will be my environment of choice for Flex 4.

So, once I learnt more about Flex 4, BlazeDS 4 and Flash Builder 4 beta 2, it was time to reconsider my approach and develop a much simpler Grails plugin so that any Grails application could be used in combination with Flash Builder. I just released grails-blazeds plugin to do just that. Here is how it works:

  1. Install grails-blazeds plugin: “grails install-plugin blazeds”. This plugin copies a couple of configuration files into your application and imports all of the required libraries, including BlazeDS 4 and Spring-BlazeDS integration 1.5, both in nightly snapshot versions, since they have not been officially released yet
  2. Create a service to be exposed to your Flex application over AMF, or choose an existing one
  3. Add @RemotingDestination annotation to your service class, and @RemotingInclude annotation to all of the methods in this service that you wish to expose
  4. Edit web-app/WEB-INF/flex-servlet.xml (created when you installed the plugin): uncomment the context:component-scan element and set the base-package corresponding to your service class
  5. Make sure your exposed service methods don’t use Groovy classes, either as argument or return types. This is a known limitation I’m still working on, but if there are some Groovy classes here, Flash Builder doesn’t manage to generate ActionScript counterparts.
  6. Run your Grails application using “grails run-war” instead of “grails run-app”. Once again this is a known limitation: Flash Builder BlazeDS data connection plugin relies on a classical web app layout and doesn’t understand Grails dynamic layout (that is until someone manages to create a Grails data connection wizard for Flash Builder 4)
  7. In Flash Builder 4 beta 2, create a new Flex project with a J2EE server. Here are what your parameters shoud look like, “conferenceguide” being the name of my Grails application and “sarbogast” being my home directory:

  8. Click “Data” menu, then “Connect to BlazeDS…”
  9. In the “Authentication required” dialog box that appears, check “no password required” box, and click OK
  10. You should see your service appear, and you can select it and click Finish.

  11. Your service should appear in the Data/Services view. You can then compose your user interface and drag and drop your service methods to the relevant components to connect them with your Grails backend.
  12. Don’t forget to configure a channelset on your service:
    <adminservice:AdminService id="adminService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true">
    <adminservice:channelSet>
    <s:ChannelSet>
    <s:AMFChannel uri="http://localhost:8080/conferenceguide/messagebroker/amf"/>
    </s:ChannelSet>
    </adminservice:channelSet>
    </adminservice:AdminService>
    

And there you go. Special thanks to James Ward, whose screencasts really helped me get it right. Now the only thing that this plugin misses, beyond the 2 known limitations, is integration with Spring Security, but this is just a start.

Enjoy!

Fear, Uncertainty and Doubt

I have hesitated for a long time… a few hours that is. But given my geek reputation (of which I’m still proud by the way), I could just not avoid it: I have to say something about the iPad. Of course I was following the keynote live yesterday with a bunch of geeks in Café Numérique, in Brussels. And of course I was very excited about it. Now instead of writing long sentences about what I like and don’t like about it, I’ll just go over my impressions quickly:

  • I don’t really like the name, but iSlate would have been worst and Macbook Touch was clearly not adapted
  • I love the device itself, and yes I’m gonna get one as soon as it’s released. I’m planning a trip to WWDC in June and hopefully I can bring one back
  • it really is yet another game changer. Apple did with the iPad to the Tablet PC segment what they did with the iPhone to the smartphone segment: bypass the professional market, make it a general public appliance. Brilliant!
  • it will create a whole new market for new applications on the App Store, I can think of a few ones myself
  • I don’t care that it doesn’t have multi-tasking, I’ve never needed it and reactivity is too important for me
  • demonstrations in a couch, what a great communication symbol!
  • I don’t care about the batteries being sealed, so long as it gets me more battery-life
  • I hope there will be an Apple Care on this one
  • Absence of SMS and phone capabilities: it’s not a phone anyway
  • No front camera: who really uses video-conference in the general public anyway? Video-conference in a couch? Come on!
  • The price tag is just awesome. The top one is cheaper than my 3GS
  • I’m so glad I didn’t get a Kindle DX or a Nook as I intended to. By the way, even though e-ink is more comfortable to use, I think the generic aspect of the device and the availability of the iBooks store are going to marginalize specialize eBook readers
  • Stop it with the “giant iPhone” complaint. And laptops are mini-desktops, so what?

Now in parallel to all those impressions, I couldn’t help to see those floating images in my head, of websites with big blank areas and a blue logo, I could even hear those blank areas whisper in my ears: “No Flash support…. ouuuuuuuuhh… No Flash support”. Yes, I know, I’m going nuts. My first thought was “how are you going to explain your daughter that she cannot use the iPad to access her favourite color painting site with her fingers because there’s no Flash?” For such a general public family appliance, it just doesn’t make sense.

But then I started reading blog posts and comments about the announcement, and the frustration turned into anger. Anger against Apple and Adobe who can’t seem to find a common ground on this issue. But more importantly angry against all those self-proclaimed death prophets, all those open standard ayatollahs claiming that they don’t care about Flash since Flash is dead anyway, and Flash is closed and proprietary, and Adobe is all evil, and HTML5 is going to rule the world. And it kind of woke up the Flex developer beast in me, I turned all green, I tore my shirt apart, going all…

FUCK HTML5 !!!

And then I started punching around.

First off, Flash has evolved a lot in the past few years: Flash is not just used for ads anymore. It powers the vast majority of videos on the web, plus a lot of multimedia websites that we love and use everyday (Deezer for example, Google Finance, etc.)

Second, Flash is not completely open, but it is far less closed than what a lot of people know: Tamarin, the Flash virtual machine, the basis of the Flash plugin, has been donated as Open Source to the Mozilla foundation 3 years ago, SWF (Flash file format), AMF (Flash remoting protocol), RTMP (Flash realtime communication protocol) are all open specifications that allow anyone to write their own Flash plugin (with a licence, but still) or generator. Plus Adobe has gone a long way in opening up its tools and processes for the Flash platform as a whole by open sourcing the Flex SDK, creating the Open Screen Project, and I could go on and on. I’ve met some of the openness evangelists inside Adobe and I can tell you that they’re doing a great job opening up what used to be a very protective and old-school company. And it’s just the beginning.

Third: being an open standard is not a f***ing feature for Steve’s sake! If using committee standards means I have to wait for 10 years before any evolution becomes available (how long has W3C been working on HTML5? how long before it is finalized), if it means going back in time on problems we thought had been solved for good (like the video codec hell coming back from the dead), if it means having to spend hours tweaking my web applications so that they look and behave the same in all browsers, then I don’t give a sh*t about open standards. Where is the added value?

Fourth, I can already hear you yell at me about the last argument: “we just can’t let one (evil) company have so much control about a web technology!”. And still that’s exactly what Sun has been doing with another omnipresent web technology: Java. And very few people ever complained about it. And what about Google with Android? The truth is that, from a developer standpoint, having one company orchestrating the evolution of such a huge technology is very good: it guarantees a certain level of consistency, so that we don’t have to deal with compatibility issues between different implementations. It’s also a good point for stability, knowing that you will always have backwards compatibility and professional support on the long term, and that you can invest safely in the technology. And of course it’s excellent for efficiency, because they don’t have to waste time on endless arguments about who’s got the bigger video codec or whatever, so it evolves fast.

So that’s it. I hate HTML, Javascript and CSS, I do it when I have to, but it’s not development, it’s tinkering. And I hate all those people spreading FUD about Flash without knowing what they’re talking about. And I love the Flash platform, and what Adobe is doing with it. I just hope Adobe and Apple will eventually reach an agreement to bring Flash to the iPhone and iPad. And I hope Adobe will do some PR to fix their image because there’s a big problem there.

Just my 2 cents…

Adobe MAX Europe – Day 4

Much less to say about today. First because it was a full-day lab session, second because the whole thing was just fantastic. The content, the pedagogy, the examples, the trainer, everything was perfect. It allowed me to discover all the features specific to AIR runtime and API’s and we didn’t spend to much time on Flex details. AIR is definitely an interesting technology. The integration with the desktop offers all the features that I need most and I sincerely think about migrating You And The World administration to the desktop since it will remove so many barriers that we have right now like HTML rendering, client-side image cropping and big data synchronization.

Now that the event is over, it’s time for global feedback:

  • The organization was just great: it’s easy to understand why the entrance fee is so high, given the quality of the food, the number of computers for labs, the number of teacher’s assistants and staff people, the Wii’s, etc. One thing though: I really missed drinks in fridges where you don’t have to wait in line for a glass of water.
  • The venue was just awesome, with enough room for everyone, plenty of electric plugs to reload our small iPhone batteries, Wii’s everywhere, couches, toilets (not just one spot where you have to wait in a long line if you don’t choose your time like Metropolis). Two negative aspects though: mere chairs hurt when you got used to theatre seats, and Fiera Congressi Milano is a little bit lost in the middle of nowhere: not a lot of restaurants nearby.
  • The wireless network was good enough most of the time, except inbetween sessions where I managed to get an IP address, but impossible to get any bandwidth. It was good enough for email checking and a few commits on Subversion though.
  • The content covered was great and gave me a sense of cohesion and innovation on the whole Adobe product line-up. And feedback forms for each session were definitely a good idea.
  • The hotel I stayed in was just awesome. I still don’t understand why it’s called a mini-hotel as the service was really great and the room was very cool. I missed some more French-speaking  channels but I had some content on my laptop to compensate. And 8€ for 24 hours of Internet connection is not too expensive.
  • I didn’t see much of Milan but the taxis you can’t stop in the street outside of a taxi station, the plane that doesn’t come and pick you up directly at the terminal, the old-school trams, gave me the impression of a not-so-modern city.

Overall, this first Adobe MAX Europe was really a wonderful experience for me and I’ll really thank my manager for sending me there. Now, one day of roadmap design on You And The World, and next week, on to Devoxx. I just love technology!

Adobe MAX Europe – Day 3

Today was « learning day ». No « wow », no « aha », just « hmmm » and « slap! » (don’t fall asleep, you idiot!). Originally I had planned a couple of sessions related to LiveCycle Data Services but I’ve been so disappointed by the one of Tuesday that I decided to enjoy myself a little bit. So the first session was about Soundbooth CS4.

I’ve played piano and organ some years back, and I’m an amateur DJ on my spare time, so I tend to love everything related to sound and music. However, I kind of put all of that aside in the past few years so this session was really refreshing for me. And when I said that there were no « aha » moments today, it is not entirely true: you should see the speech transcription engine they added to Soundbooth CS4 and that integrates with many tools in the suite. It’s really amazing. Now I need to see how it works with real-world samples with background sounds and strange French accents. But the demo was definitely interesting. So much so that I couldn’t help thinking how much money could Adobe make if they sold this engine as a standalone service for podcast owners and such. Apart from that, the sound clean-up features are very interesting, especially with the spectral view. I don’t know if it was already there in previous versions of Soundbooth, but it’s really amazing what you can see in there that is just impossible to spot in the infamous waveform view. And if you think that Soundbooth is not useful if you don’t do movie soundtracks or music mixing… well, think twice and give it a try.

The next session was the source of a lot of hesitation. Dave Mc Allister had left a comment on my post before MAX and it really motivated me to know more about the Open Source strategy of Adobe. On the other hand, on the same slot, there was a session about Flex 4 and its new syntax, which obviously I’m very interested in, all the more so as there seems to be a lot of new things, like prefixes instead of namespaces. Eventually, I realized that there would be tons of articles about the new features of Flex 4 closer to the release and then closer to what it will really be. On the opposite, Dave Mc Allister presentation was a panel discussion, something you can’t find on the web by yourself. So I went for « Why Open Source, what makes the cut? ». Now, obviously MAX audience is still mainly composed of designers, because there were very attendees in this session, between 15 and 20 I think. But the discussion was very interesting and it was even easier to ask questions and get proper answers. With Dave were Ryan Stewart, platform evangelist, and Dave Story, who will soon be in charge of all the development tools (Flex, Flex Builder, etc.). The discussion reminded me of the comments of a few friends of mine when Adobe announced that they were going to open source the Flex framework: « Adobe… Open Source… that’s just a marketing move! ». It could have been, but let me tell you that a year and a half later, it’s easy to see that it was much more than that. They actually dive very deeply into the strategic and governance questions related to opening up some of your business. And their example is all the more so interesting as they are engaged in a balancing approach: their objective is not to open source everything they do, but just what makes sense. Hence Open Source proponents inside Adobe have to fight very hard to educate both business and operational people about the added value of Open Source, while reassuring them about the fact that it’s not a silver bullet and that they will not do it with everything. A few people in the audience, including myself, took the opportunity to suggest some improvements to the Flash platform and Dave Story took notes. Maybe one day it will be possible to plug a Webkit module into the Flash player and to render proper HTML inside Flash. Time will tell.

I started the afternoon with a demonstration of the new features of Flex Builder 4. I think Heidi Williams and Tim Buntel were a little disappointed to see such a low enthusiasm in the audience. But from what I heard around leaving the room, a lot of people thought like myself: finally, we get the features that should have been there 2 years ago, nothing more. Data management features are certainly a plus though: you will be able to generate client-side data managers that automatically handle CRUD operations and deal with conflicts, whatever the server-side technology you’re using. It will be interesting to see how useful it can be beyond the simple contact manager application.

My last presentation for the day was one that has been added to the planning at the last minute: Flex and PHP with Zend Builder. This could have been the most interesting presentation of the whole event for me in terms of direct interest for the project I’m working on, since I’m really fed up not to have a proper PHP debugging environment and I want to migrate from AMFPHP to Zend AMF. Unfortunately, the presenter was really a messy guy, and at some point I was just totally lost. His English was not very good and he was very hard to understand. So once I saw that he got debugging working in Zend Builder with Zend AMF, I just left the room.

Overall, it was a very interesting day. Oh and it’s always funny to see where geeks are ready to stick their business cards for a few gadgets :oP

Tomorrow will be a full-day lab about AIR and I hope that the content will be less frustrating than yesterday.

Adobe MAX Europe: Day 2

Yesterday was more of a regular feeling of satisfaction and happiness to discover. Today there were more peeks in my humor, from low “boooo” moments to great “aha” times. But overall, I’m starting to see the big picture of where Adobe is heading and it looks really cool. The last thing they miss to become my #1 favourite tech company is a Steve-Jobs-like charismatic presenter… although I gotta say this morning’s keynote was pretty well assembled. But I’m anticipating here. Let’s go back to the beginning of the day.

AIR bootcamp, without boots

…because you don’t need boots to fly over a subject, do you? Some might say that this AIR bootcamp actually missed some AIR as well but… hey! I just did!

OK, I know that when you’re a lab teacher, it is tempting to do everything you can to see this glow of surprise and astonishment in people’s eyes, but come on! Those small Hello World hands-on projects to show off features like the Camera integration or WSDL-based service stub generation! I can’t believe that someone or a company is willing to pay around 2k€ for sending a guy to cover an event such as MAX for that kind of noob content. I mean, I’m motivated by achievement, that’s what makes me get up in the morning and I guess I’m not the only one in Milan right now. So I’m talking to Duane Nichols here: next time, why not a real project that focuses on AIR features and integrates them in a meaningful sample project?

The Keynote

Definitely my favourite moment of the day. It’s hard to describe but Tim Buntel and Ben Forta played it Men-In-Black style to demonstrate some of the upcoming features in CS4, Flash Catalyst, Flex Builder Gumbo and Adobe Alchemy. I can’t remember all of the details but there were definitely a lot of “wow” moments and the feeling of seemless integration that you can get from that is… warming! I can’t wait to see the kind of applications we’ll be able to build with CS4, FC and Gumbo. But wait, I don’t need to wait, because I’ve got trial versions! Woohoo! Okay, FC and Gumbo are still early pre-alpha releases but still, I’m definitely going to play with them.

Low afternoon

After another great lunch (the waiting line is definitely worth it), my afternoon started with 2 rather disappointing labs. The first one was the second part of AIR bootcamp so I won’t go into more details. The second one was about building Collaborative Applications with LiveCycle Data Services. This time, the problem was not about the number of samples, but the fact that we didn’t even created any project. We spent almost 15 minutes copying files from place to place to get the configuration in place, and then we basically filled in the holes. Once again, no achievement whatsoever, and no global understanding of how this all works. But I can’t say I’m surprised: I had the same frustration with the official BlazeDS tutorial, which is why I wrote my “full stack” article. By the way, I think one of the reasons why it’s so hard to start a BlazeDS-based project from scratch is the amount of configuration to write. Maybe a couple of advanced editors in Flex Builder would help…

And last but not least…

The much anticipated and not disappointing at all… Sneak Peeks session. Okay, there were the MAX awards before, but when I saw one of the winner was presented as a Flash Lite application for the iPhone! Flash… iPhone… wait a second! f… t… STACK OVERFLOW, rebooting now!

I won’t go into details into each of the technologies demonstrated, I’ll just list them:

  • Client
    • Application-level multicast, or what you could see as P2P multicasting (sorry, I didn’t find any links about that one)
    • Nitro, a portable widget platform with a seemless integration across devices
    • Durango, a mashup builder for dummies
  • Services
    • Meer Meer, a service to do cross-browser testing with Dreamweaver
    • Integration of LiveCycle DS with CS4 (sorry, no link either)
    • Server-side ActionScript, by far what I was the most interested in (Java, watch out!)
  • Tools
    • Content intelligence toolkit, a very interesting video and sound analysis technology
    • Infinite images (inifinite zoom): at first I thought it was just a port of the Silverlight infinite zoom that created so much buzz last year, but it was much more impressive than that
    • Dreamweaver support for web widgets
    • Next-generation image compositing, impressive stuff, possible future features for Photoshop

Now I’m just exhausted. A good night of sleep and tomorrow is already the last conference day. To be followed…