Nelson Silva is a co-founder of inEvo and an active member of the Nuxeo community. He answers questions on answers.nuxeo.com, has published some sample Nuxeo code on GitHub (like a Dart Gadget), and even participated in our recent Bug Day. He contributed code for Tomcat 7 support and is working on OAuth2 and a Shindig upgrade.
You are one of the founders of a Portuguese company called inEvo, which specializes in web applications, computer graphics, business intelligence and software integration. Can you tell us more about the company?
Tiago Cardoso and I were both working as researchers in INESC-ID Lisbon (a research center here in Portugal) where we had the opportunity to participate in several European research projects. We decided to do it for a living so we founded inEvo, a research oriented company. Along the way we connected with some local IT companies which contracted us to do consulting and integration work so we gained experience in a wide range of applications; this allowed us to fund our in-house research.
One of our first results was a Flash-based SVG library, getting us our first international clients with whom we developed a wide range of applications, from online postcard customizations to aircraft parking planning. Our goal is to innovate and provide state-of-the-art solutions to our clients. We have a strong focus on open source and strive to give back to the community whenever possible.
You’ve been working on the Nuxeo Platform for three years now and have built an application called ColaDI. Can you tell us more about this project? Why did you choose the Nuxeo Platform to help build this application?
ColaDI (http://coladi.inevo.pt/) was our first research project partially funded by the local innovation agency. It is a collaborative document management solution for industrial design, focusing on three main areas:
- 2D and 3D document management
- Content-based retrieval for 2D and 3D content
- Real-time collaboration
Nuxeo was an obvious choice for document management. The platform is open source, modular, extensible and has proper feature “blocks” that we can assemble as needed. Nuxeo allowed us to easily create custom types for the 2D and 3D content. It also supports CMIS, which was adopted to allow for easy integration with other ECM solutions.
The 2D and 3D content retrieval modules were built on our own custom engine called EnContRA (an Engine for Content Retrieval Applications) which was developed throughout the project. We index the content stored in Nuxeo and use a custom page provider that delegates to EnContra’s search engine. We support querying 2D and 3D content by sketch and by example.
For real-time collaboration, we used Apache Wave and created a module that allows users to collaboratively discuss and annotate 2D and 3D content. We also have a generator for meeting notes based on simple annotations within the discussion.
It looks like you have a CAD viewer for 2D and 3D, with SVG-based annotations. How did you extend Nuxeo to achieve this?
The first thing we did was select a target format for both 2D and 3D content to work with. We needed a declarative format that could easily be manipulated in the browser so we chose SVG for 2D and X3D for 3D -- both XML-based.
We then plugged our conversion pipeline to Nuxeo by contributing new converters. For 2D content, we added PSD and DXF support and for 3D, we added IGES, BREP and STEP support by relying on OpenCascade and VTK. To view the content, we contributed a couple of preview adapters so we have both image and SVG previews for 2D documents as well as an image-based swivel and X3D preview for 3D. We’re relying on browser support for SVG, and for X3D, we’re using X3DOM which uses WebGL with a Flash-based fallback.
The annotation application is similar to Nuxeo’s and is also built with GWT. We used lib-gwt-svg to handle SVG and developed lib-gwt-x3d to work with X3D. We also added a gesture recognizer which supports commands (like delete, select, etc.) and some predefined shapes (circle, rectangle, triangle, etc.).
All the annotations use SVG and are stored in Nuxeo’s Annotea server. We took Nuxeo’s example: We added new XPointer functions to support our 3D annotations so we have functions to add camera-based annotations where you can draw over the whole scene, and object annotations, where you can anchor the annotation to a 3D point and draw in a billboard.
Since both the annotations and their content use XML (RDF and SVG) we were able to use them as the model for the collaborative annotation server which relies on Apache Wave.
You’re currently working on an upgrade of Nuxeo’s OpenSocial container, and on an OAuth2 plugin. That’s awesome! Can you tell us about this?
Basically, I think Nuxeo should at least provide a basic OAuth2 consumer framework. This will enable some cool integrations. Most of the existing providers are using OAuth2 so I started working on a very simple consumer framework based on the existing OAuth support and using Google’s OAuth2 library.
The upgrade of Nuxeo’s OpenSocial container was more of a requirement since it dates back to 2009 and relies on some deprecated libraries which conflict with newer versions needed by Google’s OAuth2 library. I branched Nuxeo’s OpenSocial module and upgraded to the latest Shindig version but I’m not, by any means, an expert on Shindig, so this will probably need some work by the original contributors of the OpenSocial module and by Nuxeo’s experts before being merged. I can also patch the current used Shindig version to remove the deprecated libraries, which should require fewer changes to Nuxeo, but I’ll leave it up to you guys to decide.
I’ve also started to work on an OpenID Connect module which basically supports authentication through OAuth2. I’ve added two providers as an example (Google and Facebook) so now I can log in to Nuxeo using my Google or Facebook credentials.
I saw some pretty cool projects in the inEvo Labs. What is inEvo Labs? Are you planning to open source those projects?
Like I said before: We have a strong focus on research, and if we had resources that’d be all we’d do. We are always experimenting with new ideas and technologies and felt we should showcase some of our research results so we created inEvo Labs.
We are strong supporters of open source and would love to open source most of these projects. The sad truth is that we haven’t found time to do this. As you’re aware, open sourcing a project requires a commitment to the community and right now, we cannot afford it. In the near future we’ll probably release these and other projects as open source, so it really is just a matter of time. In the meantime, feel free to take a look at our GitHub, since we have several other projects there which already keep us very busy.
Speaking of open source, I saw on your blog that you are vert.x users. What do you think about how VMware handled Tim Fox’s departure and the vert.x project?
vert.x was a project that caught my attention as soon as it was released. I love its polyglot nature and the concept of verticals with a message bus which provide a modular extensible framework.
I contributed to vert.x with the CommonJS support and created node.vert.x which is a simple node.js compatibility layer. As an experiment I got ShareJS working on top of Vert.x by creating connect.vert.x and sockjs-node.vert.x.
Getting back to the original question, I think this situation escalated further than it should. Tim Fox was an employee at VMware so it makes sense that ultimately they are the owners of vert.x. The problem here was the tone of the letter Tim Fox got from VMware’s lawyers, but I guess these are common legal procedures and should not be seen as VMware’s position on the subject. In the end, everything seems to have come together and vert.x will become an Eclipse project.
As a side note: I’m really looking forward to seeing what Nashorn and it’s Node.js support bring to the project...
If you could have three wishes for the Nuxeo Platform, what would they be?
I guess most of my wishes are already in the roadmap: upgrade to JEE6, support for Tomcat 7 and use other view technologies.
If I had to come up with some new ones, I’d say:
- Provide OAuth2 and OpenID Connect support (shameless plug).
- Adopt Dart and web components and replace GWT. The Dart IDE is based on Eclipse, which would also guarantee proper integration with Nuxeo IDE.
- Make hot fixes freely available. Not all customers need Nuxeo Studio, but regular updates are essential for wider adoption.
Nuxeo: Hot fixes are freely available - the source code is open, the recipe to build them is documented, and the binaries are freely downloadable. Hot fix packaging is actually an added-value service, and part of the Nuxeo Online Services subscription. Nuxeo's business model is to derive revenue from maintenance, support and added-value services (such as Nuxeo Studio) provided within a service subscription.
What do you like to do when you’re not working?
When you work for yourself it’s often difficult to maintain a clear working/non-working schedule. But, with a 3-year-old and a 2-month-old, I guess what I like to do the most is just play with them.
I also like to play electric guitar and read, although most of my bedtime reading includes technical books, which could be considered “working.”