While reading through the e4 mailing list, there was one post that caught my attention - a commercial product based on e4 called Kizby. Considering that e4 is still a relatively new framework, I was intrigued to find out more about why they chose e4 and whether they had any problems adopting the technology. I contacted Brian de Alwis, the man behind it all, to find out more.
DZone: Could you introduce yourself please?
Brian de Alwis: I'm the founder of Manumitting Technologies, and currently the only full-time employee.
In terms of experience, I've been developing on Eclipse for about 5 years or so, primarily developing plugins for my PhD work. I was actually a fellow PhD student with Mik Kersten (of Mylyn/Tasktop); we were both supervised by Gail Murphy. Before my PhD I did a master's with Gregor Kiczales for which I created an AOP language binding for Smalltalk. Prior to that I worked for OTI (after its acquisition by IBM) primarily on distributed systems, but also on the precursor to Eclipse. More recently I worked with the HCI Lab at the University of Saskatchewan on distributed gaming prototypes and toolkits.
DZone: What does Kizby do?
Brian de Alwis: Kizby is a project and task management tool that scales to large, complicated workloads. As its motto says, Kizby aims to "rescue your task list" by combining the strengths of a project planning app for managing the big picture, a todo list for breaking down work, and a notebook for capturing everything else, such as the notes, links, files, and other specialized information associated with a project.
DZone: You chose e4 as your base technology. Had you considered anything else before this?
Brian de Alwis:With the big push to mobile and online webapps, I had given some serious thought to pursuing a web-based approach. Although there are some amazing frameworks out there, it’s impossible to get the rich interaction of a desktop app. One of the reasons I initially came across e4 was its early hopes for single-sourcing as a desktop app and a web-app. That push was taken up more by RAP.
Having a cross-platform app was important: I'm now a Mac guy, but I still use Unix a lot. I did consider some non-Java solutions, like Objective-C — there are some Cocoa porting libraries for Windows — but it involved a lot of unknowns. And I quickly rejected a C#/.NET-based approach: Mono works well, but the resulting GUIs look terrible.
I chose e4 as it promised to move away from the Eclipse RCP look-n-feel. Most RCP apps *look* like RCP apps. e4's styling and pluggable rendering framework can help towards looking and feeling like a native platform app. I’d say I’ve been moderately successful: Kizby kind of feels like a native Mac app (which has the most stringent guidelines). I have some changes planned for e4 to improve the Mac look and feel.
DZone: How easy was working with e4, given that it's still early days for the framework?
Brian de Alwis: Although I had a pretty strong E3.x background, I didn't have much experience with creating standalone RCP apps, and hadn’t kept on top of changes that came through in 3.4 and 3.5. I started working on Kizby last year just as the e4 group was starting to push towards getting out e4 1.0. I asked questions, found and diagnosed tricky bugs, contributed patches, and since become a committer on the project.
Moving to e4 is both easy and difficult.
It’s easy as most of the Eclipse application services are unchanged — e4 only changes the workbench UI model.
It’s difficult as the new workbench model (called the modelled workbench) is *very* different. And unfortunately we haven't done a good job in creating and maintaining documentation.
I should also note that e4 provides a E3.x compatibility layer. If you download the Eclipse SDK for 4.0 or 4.1, you're running the classic E3.x code using the compatibility layer. The layer is not intended to be bug-compatible, but the compatibility team have done an amazing job in seeking out and addressing any issues. Assuming your code doesn't rely on undocumented APIs, you should have very few changes required to start moving to e4.
Tom Schindl has also done some great investigative work to allow e4-based views and editors to work within Eclipse 3.x.
DZone: Did you have any major problems?
Brian de Alwis: The use of dependency injection to obtain services was a bit of a shock at first. But I’ve since come to love it. No more violations of the Law of Demeter to find the status line manager! (But there’s also no standard status line manager built into the model.) Injection of preference values is so nice.
Building a pure e4 app can be difficult as there are useful framework pieces in org.eclipse.ui and org.eclipse.ui.workbench that are now out of bounds for pure e4 apps. Ideally these useful pieces could/should be moved into JFace.
One problem for me was that it was unclear how extensive e4 was gong to change Eclipse. The early planning documents talked of changing the entire world. But many of the changes were adopted by the respective teams and became part of the evolution to 3.6 and 3.7. And the e4 modelled workbench APIs are now being stablized — 4.1 will lock the APIs down.
Most of the difficulties we’ve had in getting Kizby out have *not* been related to e4-based issues. I still had to do a lot of SWT tweaking and hacking; SWT and JFace are amazing toolkits, but ScrolledComposite is the bane of my life.
DZone: Could you share an architecture overview of Kizby with us?
Brian de Alwis: Kizby is a fairly traditional database-backed client. Kizby sits on a custom transactional persistence layer over top of a Lucene repository. In hindsight, I perhaps should have used one of the NoSQL DBs, but it was fun working on it.
There is a p2-based updating system. Since it's a pure e4 app, I couldn't use any of the p2 UI framework.
DZone: What are your plans for the future?
Brian de Alwis: We currently have two variants of Kizby. We have another 2 variants planned to add additional functionality for managing resources associated with projects. We'd also look to handling the mobile aspect too.
My longer-term ambitions is for Kizby to evolve from helping your rescue your task list to rescuing user-generated information. I've had several occasions recently where I've looked for but failed to find a conversation or some other content that I *know* I created somewhere, but I couldn't remember how or where the conversation was held (IM, email, or Google Wave). We have so many venues for communication — IM chats, Facebook, email — now that our information is so easily lost. And with Web 2.0, much of what we create content lives and dies with the hosting site. Desktop-search apps like Spotlight or Google Desktop Search can't help when these conversations happen through web apps.