Imagine a bacon-wrapped Ferrari. Still not better than our free technical reports.

Productivity Spotlight: Tools, Talks and the Building of JBoss Errai

Welcome to our first Productivity Spotlight. I wanted to invite our friend and co-hacker Lincoln Baxter III, founder of OCPSoft, Project Lead for JBoss Forge & Project Member of the Errai project over at Red Hat. This is a casual exchange between a couple of guys (with beers in hand) and I’m going to ask some questions about how Lincoln’s projects are making the world a better place for developers, what’s cool and innovative about them and what tools & technologies Lincoln and his team use on a daily basis that help them be more productive at work.

Disclaimer: Although Lincoln mentions that his projects and teams use JRebel to speed up their Java development cycle, this is NOT a JRebel marketing piece. Also, this exchange was recorded by my computer microphone in a cafeteria, transcribed and edited with some small language corrections and attempts at humor.


OW – Lincoln, thanks for meeting with me today.

LB3 – Thanks Oliver, it’s nice to see you again!

OW – Likewise LB3. So, you’ve got a couple projects I wanted to discuss with you. Let’s just start with what they’re named and a little about them.

LB3 – I have a lot of projects, including two that many people probably already know, PrettyFaces and Rewrite – URL Rewriting for Servlet and Java EE apps – but the two that I want to tell you about today are called Errai, which is from JBoss, and the other one is a project called SocialPM, which is one of my personal side projects that’s just getting off the ground. SocialPM is a social project management tool that actually uses Errai, which is a web framework for building rich, interactive, highly-responsive distributed applications.

OW – Umm, you know I’m a marketing guy, right? What exactly does this mean?

LB3 – Oh right, sorry. So, Errai lets you do things like really fast flashy visuals, interactive stuff for users, super responsive apps. Hopefully making things more productive than what we’ve got traditionally with normal server-side type web frameworks.

OW – Ok, understanding now. My two brain cells are furiously rubbing together. So, where does the name Errai come from, do you have any idea?

LB3 – The name, Errai, is super awesome. It’s a short name for the star system Gamma Cephei, so it doesn’t really have much meaning other than that. It’s actually worked out really well for us, though, because it sort of rolls of the tongue. But it’s also caused some problems because people hear that and say “Wat?” because they think it means something else like “Hi!”, or “Goodbye!”.

OW – It’s sounds kinda sexy – it has nothing to do with naked people? Wait, maybe not.

LB3 – *Groans audibly* I wish! But, no, it does not.

OW – Hey, just checking. So we’ve got Errai and SocialPM. Errai is the JBoss project and SocialPM is the OCPsoft project?

LB3 – That’s right.

OW – And in both of these projects you’ve been using JRebel to speed up your development process?

LB3 – Yes. The nice thing about JRebel is that while you’re developing using Errai, you can really just do changes that you would normally have to restart the server for and see them happen instantly on the server side and client side and they stay in sync. This makes sure you can hit the new functionality without having to blow everything away and start over with a new deployment.

OW – This is what developers like most about JRebel – the keep-your-flow experience.

LB3 – It is what you’re good for. The reason that’s important for me is because we just started working on a new client-side templating framework called Errai UI. Again, it rolls of the tongue very nicely. Errai is built on the Google Web Toolkit, which if you’re familiar, is a Javascript compiler. Errai UI lets you take pure HTML templates and dump them in your project.

Example: you get a template file from your web designer and it’s this whole page, it looks beautiful and fantastic. You don’t want to have to chop that up and build components out of the fragments of HTML and worry about whether the styles are going to carry through correctly to the underlying web framework.

The nice thing about Errai UI is you just dump this template file into your project and you say “OK this piece of the template belongs to this component” or “this piece of the template belongs to this other component”. And you can wire these things together and your template just comes to life in front of you – right in the browser.

The problem is when you start applying this templating framework to a project that has a server-side component: GWT is great, it will recompile things on the fly in dev mode no problem, no need to restart. But as soon as you change something on a server in a Java class, now you’re tempting fate a little bit and you start to lose out on this real-time, refresh-and-see-your-changes advantage that Errai UI and GWT give you. Then you start running into the same problem that we had traditionally with server side development.

So I use JRebel every day in development just so I can test the framework better, and go through iterative enhancements of the framework code itself and see those results much more quickly. It’s helping me develop the framework faster.

OW – Nice. OK, enough about JRebel, we’re not really here to talk so much about that. Although you did a very nice job of explaining how you uses it and how it helps you out. I guess the next question is: What do you think is the most innovative aspect of your project, or the team that you are working with, or the company? You can choose any of those.

LB3 – So the cool thing about Errai is that it’s really representative of a new trend we’re seeing in web application development today: the convergence of programming models between the server and the client.

For a long time we’ve thought we write Java, Ruby, Perl, PHP, etc on the server and on the client we write Javascript, Backbone or jQuery and all this stuff. It’s different and we have to learn different tools to do development on the server and the client.

The thing about Errai is that you’re using Java on both the server and on the client. So you write the classes on the server and you maybe have some data objects to send messages back and forth and those objects are transparently transformed between the server and the client. Then you write your code literally once and you can use it on the server and the client.

With Errai UI you have this flexibility to do all of your HTML templating, you can write CSS, Javascript, whatever and then use that in your application in Java to get the best of both worlds. You get the web development with the pure HTML experience combined with the “Java everywhere” programming model. This is when we start to see much better productivity. You’re seeing the ability to re-use libraries in the client. New possibilities open up. It just sort of falls into place very nicely.

This whole concept of having to re-write everything in the client – like if you want to save something to the local storage on the client, if you want to do data synchronization where you change a value and you have to go make a service call on the server – this line is really being blurred by Errai because we are bringing the Java EE programing model into the browser. So, if you like dependency injection, if you like the CDI- or Spring-type programming model, you can now do that in the client in Javascript.

We have JPA support so if you want to use an Entity Manager, for example to save an object into the database you can do that in the client and it saves to the local storage. If you’re using data synchronization when you saved to local storage in the client you can actually ask it to go verify that you have the latest information and if you’ve gone offline in your application, i.e. on an airplane, and made some changes where you save to that local storage, when you come back and regain a connection to the Internet Errai is going to go out and say “Oh, I’ve got a connection now, I’m gonna make sure that all of this data is now synchronized with the server.” And that all happens automatically. This is really taking care of some complex stuff that has not really been addressed from a unified programming model before.

OW – Wow, that’s a lot of take in. If you had to say it in let’s say 20 words or less, what is the pain that you are hoping to solve for your users?

LB3 – Hehe, I probably should have started with that.

OW – I ordered the questions wrong, I think. Shall I be flogged?

LB3 – That’s ok. So, the pain we’re trying to solve with Errai is to easily handle these really complex situations that are gonna require a lot of code, a lot of forethought and a lot of architecture, and putting them into a nice consumable package so that people can use that and use it in both the server and the client.

OW – I think I get it. Do you mind if we take and break and discuss more about the technical environment you’re working with. What’s the current version of Errai at the moment?

LB3 – The current version of Errai is 2.0.1. It was released last week. Errai UI is going into the 2.1 release which will happen in about 4 months. That’s going to be our next major feature release. We’ve already gotten the work of bringing the programming model into the browser so the dependency injection, inversion of control and Java programming is in the client. Now we’re saying we’ve got this really great base – but what can we do with it?

Well, we can do dynamic templating with Errai UI, we can do persistent storage, we can do data synchronization. And all these new things are starting to come into place now that we can bring power and all the knowledge we have been building in Java for the last 10 years into the client browser.

OW – How often do you, or plan to, release a new version of Errai?

LB3 – The minor releases happen every 1-2 months and the major releases happen every 6 months.

OW – As a way to better understand the tools and technologies that people use in their development environment maybe you could just list off what you’re working with, for example workstation, operating system, IDE, any plugins, favorite text editor besides IDE, web and server side frameworks, languages other than Java, project infrastructure like Github or Bitbucket, Sourceforge etc. I think we can guess on that one. Or any other cool tools. This is the part of the Productivity Spotlight that a lot of us are eager to see, because it helps us understand which tools you find to be adding efficiency to your daily work or decreasing efficiency to your daily work.

LB3 – Yeah, absolutely. First off I use a combination of workstations and operating systems. I use both Linux and Mac OS. I have also Windows, just so I can verify some things and make sure that everything is working on all operating systems. But for the most part I just use Linux.

As far as IDE goes, I use Eclipse primarily. That’s because Eclipse has great integration with JBoss Tools. I think JBoss Tools represents more or less everything that Eclipse forgot for Java and Java EE development. Obviously there’s JRebel integration too, which is very easy with JBoss Tools. So that’s another reason I use it. As far as text editor goes I prefer VI, so much in fact that I use the VI plugin for Eclipse so I can use VI editor in eclipse. I can’t live without it.

OW – That’s obviously something that you see as increasing your efficiency.

LB3 – Yes, I mean, it’s fewer keystrokes certainly; I don’t have to take my hands off the keyboard to do what I need to do. It just makes it a lot faster.

OW – Even something as minor as an errant to click on something else is enough to distract and break your flow. It’s something we all want to avoid – enter JRebel!

LB3 – Yeah, as soon as you take your hands off the keyboard and reach for the mouse you’re losing speed, you’re losing cycles.

OW – Indeed. What about web and server side frameworks?

LB3 – Web and server side, for the most time I pretty much stick to the JBoss application server, that provides obviously the Java EE 6 programming model, web framework whatever you want to call it. I pretty much use that as my starting point because it gives you upfront so many things that you would need to sort of wire together yourself otherwise. Like it gives you database connections and connection pooling, it gives you REST support, you can just write a class and it gives you get a REST web service, it gives you the HTTP response request life cycle, it gives you transactions, it gives you this whole platter of features that would normally take you a long while to get started with otherwise. It works really well and it’s really fast. It starts up in like a second, even faster if you have an SSD.

As far as web frameworks go, obviously I’m spending a lot of time with Errai UI and using Errai UI in SocialPM. As a case study for one, so I can know what people are going to need when they start using this framework. But also because I find it incredibly productive as well. If I like something that my web designer has done (because you know, they send me stuff all the time), I will literally just take the mock-up they made and copy the source output that’s rendered in the browser, paste it into a HTML file in my project and I can run with it in Errai UI, I can just start making it come to life, building things up naturally. I find that extremely productive.

When you make a new tool you’re not really sure what you’re going to come up with or whether it is gonna really work well. But I was really surprised with Errai UI how quickly I can become productive, with such a seemingly simple set of features.

OW – I think it’s cool that you’re using a tool that you’re building during your day job and you’re using it to test the user perspective on your own private projects as well. I think it’s a really awesome way and if I had my choice I would encourage other people to do the same thing.

LB3 – If you don’t use your own stuff, I can almost guarantee it’s going to suck.

OW – Hehe. Are there any other cool tools that you’ve run across lately that are interesting?

LB3 – Well, I do a lot of presentations. Going to a lot of conferences, there is an impedance mismatch between being able to create a nice presentation in the amount of time that I have to do it. And I found a really nice Javascript framework called Reveal.js. Which you set up once and you just write HTML for your slides and it’s got really slick transitions. Simple, but elegant transitions. But you can add any of the HTML 5 styles, templates, whatever you want to your presentation. You can make it interactive. It’s taken the basic structure of creating slides and handing that to you, so you can just run with it and make it look like what you want, make it feel like what you want, using the same programming model.

I really like this convergence of programming models that we’re seeing. Because we had this explosion of technology, and they are all different, they are all something new, something that doesn’t quite fit with the other stuff. So the fact that we are seeing things really come together now, it IS the most interesting trend for me. I think it’s the most important one for the future of our productivity. Reveal.js was a really cool discovery for me, having to do 15-20 presentations in a year. You have to put that thing together in a week or so. It saved me a lot of time.

OW – No more PowerPoint.

LB3 – Oh, God, no!

OW – Let’s talk a little bit about some of the challenges you have faced along the way with Errai UI.

LB3 – With Errai UI, actually, I wouldn’t say we had too many challenges. We had some initial hurdles to get over with proper parsing and interpretation of DOM elements in text files and bringing that into client in GWT dynamically and streaming them as you need them, and we’ve had some challenges getting “quick event handlers” working. But other than that, because we laid out all the groundwork with the Errai core framework, everything really just fell into place very well.

I would say that the biggest challenge I have right now is that I have too many projects. And SocialPM: it’s my test bed for everything. See I am a perfectionist and I spend infinite amounts of time making sure things work just right. Because I want it to work right for everyone. And if it’s not right for me, it’s probably not right for someone else. For me it’s just been finding the actual time to get moving and to get people interested in contributing to SocialPM. Because with all these other projects that I’m working on… Basically, any way to save me time is great, because I need more of it.

OW – Do you need people to check out SocialPM? Like to play with it try to break it, that sort of thing?

LB3 – At this point, really, because it’s an Agile project management tool that is not at the point where it can manage an actual project, it’s little difficult to get people involved because we really just need some help getting the core features in. It’s not very far away, but we need some help getting the core stuff working and it will be a more viable project that people will have this sort of interest response: “Oh, that’s kind of cool, it works out for the basic stuff, let’s take it to the next step.“

OW – Are you enlisting any volunteers?

LB3 – Oh, I would LOVE to enlist volunteers. Actually, what do you guys use for managing your assignments and requirements at ZeroTurnaround?

OW – FogBugz and Kiln. People seem to be pretty happy with that. For non-engineering/IT needs we’re using tools like Asana, Trello, Google Docs and Twitter. How is the vision for SocialPM comparative to these tools?

LB3 – My vision for Social PM is to rethink the way we do task management, making it more social. Focusing more on helping people have good interactions, rather than the technical aspects. You need to focus on the technical aspects of management as well, but those should be hidden away from the people who are using it so that they just feel that they are having these natural interactions. It’s actually a really hard problem, because everyone has their own idea of what that looks like. But we need people’s ideas, we need to know what people want of this so that we can cater to them and really facilitate this more streamlined process.

OW – I know what that’s like. I wrote a blog post about what happens when “Suits” assign tasks to “Geeks”. There is kind of a natural break between marketing guys who need something done and the way infrastructure staff understand how the task is being described.

LB3 – That’s one of the big pieces actually, is making sure that everyone in their individual role is catered to in the way they need it to.

OW – Like a template. I could use something that basically says “I’m a marketing guy who wants to assign a task to another marketing guy”, so here’s an appropriate template to use. But if I’m assigning it to an infrastructure engineer then they would have a different template that conforms to their needs for understanding the task.

LB3 – That’s one of the things we want to make possible with Errai UI. Because maybe the only thing you need to change is the order in which you are presenting things to people. If that’s as simple as reordering some things in your template, why should you have to write code for that?

OW – Well, that’s about all the time we have – you have a talk to give in an hour! LB3, thanks. Do you have any final comments you’d like to give?

LB3 – No, but thank you so much for reaching out to me. It’s always a pleasure, you’re doing cool stuff.

OW – You’re one of our favorite guys at Red Hat to talk to, so it’s always a pleasure to reach out. And even though you’re slammed with your own stuff you always come through, even if I have to force you to drink a beer with me in the middle of the afternoon.

LB3 – Life is hard, man. :-)

Our next Productivity Spotlight is with another JBoss team – Dan Allen from the Arquillian Project joins me for our next Productivity Spotlight…coming soon!