<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Nuxeo Community Feed</title>
  <id>http://community.nuxeo.com/rss</id>
  <updated>2012-05-14T18:05:54Z</updated>
  <link href="http://community.nuxeo.com/" />
  
  <subtitle type="text">What's happening now in the Nuxeo community.</subtitle>
  <generator>Werkzeug</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/NuxeoOrg" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="nuxeoorg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">NuxeoOrg</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Monday Dev Heaven] Add a Forgotten Password Functionality to Nuxeo, Part 1/2</title>
    <id>http://dev.blogs.nuxeo.com/?p=4493</id>
    <updated>2012-05-14T18:05:54Z</updated>
    <published>2012-05-14T18:05:54Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-add-forgotten-password-functionality-nuxeo-part-12.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;div class="wp-caption alignright" id="attachment_4494"&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/05/askReset.png"&gt;&lt;img alt="Ask a password reset" class="size-medium wp-image-4494" height="111" src="http://dev.blogs.nuxeo.com/files/2012/05/askReset-300x111.png" width="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Password Reset&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This question is sometimes asked on &lt;a href="http://answers.nuxeo.com/" title="Nuxeo answers"&gt;answers&lt;/a&gt; or in the &lt;a href="http://forum.nuxeo.com/" title="Nuxeo Forum"&gt;forum&lt;/a&gt;. It&amp;#8217;s a method to handle password reset for users. So I&amp;#8217;m going to show you how I would do it. This is going to be a two part blog. Today I&amp;#8217;ll write mostly about the WebEngine module handling the password reset functionality. Next week I&amp;#8217;ll show you how to package it for &lt;a href="http://dev.blogs.nuxeo.com/marketplace.nuxeo.com" title="Nuxeo Marketplace"&gt;Nuxeo&amp;#8217;s Marketplace.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;How does it work?&lt;/h2&gt;
&lt;p&gt;Starting with something simple, we&amp;#8217;ll add a &amp;#8216;forgotten password&amp;#8217; link on Nuxeo&amp;#8217;s home page. It will redirect the user to an open (i.e. no authentication needed) page asking for an email address. Once the user submits the form, we&amp;#8217;ll look in the user directory to see if the email has a corresponding user. If there&amp;#8217;s no user, we&amp;#8217;ll simply render the page again with an error message saying there&amp;#8217;s no user associated with that email address. If we do find a user, we generate a temporary link and send it to the user by email. This link has to exist for only a short period of time, for security reasons. When the user clicks on the link, he ends up on a form asking for his new password.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s it for the simple, short user story. We&amp;#8217;ll see the details along the way. Now let&amp;#8217;s get to it :)&lt;/p&gt;
&lt;h3&gt;Ask for the reset&lt;/h3&gt;
&lt;p&gt;The first thing I did was to run the Nuxeo WebEngine project wizard with Nuxeo IDE. This gives me an empty project. I&amp;#8217;m already able to code :) My next step is to create the form to retrieve the user email and make it available to an open URL.&lt;/p&gt;
&lt;p&gt;This is my form:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;@extends src=&amp;quot;./base.ftl&amp;quot;&amp;gt;
&amp;lt;@block name=&amp;quot;title&amp;quot;&amp;gt;
 ${Context.getMessage('label.askResetPassForm.title')}
&amp;lt;/@block&amp;gt;
&amp;lt;@block name=&amp;quot;content&amp;quot;&amp;gt;

&amp;lt;div class=&amp;quot;registrationForm&amp;quot;&amp;gt;
&amp;lt;form action=&amp;quot;${This.path}/sendPasswordMail&amp;quot; method=&amp;quot;post&amp;quot; enctype=&amp;quot;application/x-www-form-urlencoded&amp;quot; name=&amp;quot;submitNewPassword&amp;quot;&amp;gt;
 &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td class=&amp;quot;login_label&amp;quot;&amp;gt;
        &amp;lt;span class=&amp;quot;required&amp;quot;&amp;gt;${Context.getMessage('label.registerForm.email')}&amp;lt;/span&amp;gt;
      &amp;lt;/td&amp;gt;
      &amp;lt;td&amp;gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;EmailAddress&amp;quot; value=&amp;quot;${data['EmailAddress']}&amp;quot; name=&amp;quot;EmailAddress&amp;quot; class=&amp;quot;login_input&amp;quot; isRequired=&amp;quot;true&amp;quot;/&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;
      &amp;lt;td&amp;gt;
        &amp;lt;input class=&amp;quot;login_button&amp;quot; type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot;
          value=&amp;quot;${Context.getMessage('label.registerForm.submit')}&amp;quot; /&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;#if err??&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;errorMessage&amp;quot;&amp;gt;
          ${Context.getMessage(&amp;quot;label.connect.trial.form.errvalidation&amp;quot;)}
          ${err}
        &amp;lt;/div&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/#if&amp;gt;
  &amp;lt;#if info??&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;infoMessage&amp;quot;&amp;gt;
          ${info}
        &amp;lt;/div&amp;gt;
      &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/#if&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/@block&amp;gt;
&amp;lt;/@extends&amp;gt;
&lt;/pre&gt;
&lt;p&gt;One of the cool features that comes with WebEngine is its &lt;a href="http://doc.nuxeo.com/x/CYAO#WebEngine%28JAX-RS%29-TemplateModel" title="WebEngine Template model"&gt;templating model&lt;/a&gt;. It gives us the ability to extend an existing Freemarker template. This way you can override only the part of the template you need. For instance, here we&amp;#8217;re extending the base.ftl template (that&amp;#8217;s because of the &lt;em&gt;extends&lt;/em&gt; markup). This template defines at least two &lt;em&gt;block&lt;/em&gt;s named &amp;#8216;title&amp;#8217; and &amp;#8216;content&amp;#8217;. So we can redefine the content of these two using the &lt;em&gt;block&lt;/em&gt; markup.&lt;/p&gt;
&lt;p&gt;And this is the contribution to the &lt;a href="http://explorer.nuxeo.org/nuxeo/site/distribution/current/viewExtensionPoint/org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--openUrl" title="OpenUrl extension point"&gt;openUrl extension point&lt;/a&gt;. It&amp;#8217;s needed to make my form available without user authentication.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;

  &amp;lt;extension
    target=&amp;quot;org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService&amp;quot;
    point=&amp;quot;openUrl&amp;quot;&amp;gt;
    &amp;lt;openUrl name=&amp;quot;Forgotten_password&amp;quot;&amp;gt;
      &amp;lt;grantPattern&amp;gt;${org.nuxeo.ecm.contextPath}/site/resetPassword/&amp;lt;/grantPattern&amp;gt;
    &amp;lt;/openUrl&amp;gt;
    &amp;lt;openUrl name=&amp;quot;SendPasswordMail&amp;quot;&amp;gt;
      &amp;lt;grantPattern&amp;gt;${org.nuxeo.ecm.contextPath}/site/resetPassword/sendPasswordMail&amp;lt;/grantPattern&amp;gt;
    &amp;lt;/openUrl&amp;gt;
    &amp;lt;openUrl name=&amp;quot;EnterNewPassword&amp;quot;&amp;gt;
      &amp;lt;grantPattern&amp;gt;${org.nuxeo.ecm.contextPath}/site/resetPassword/enterNewPassword/.*&amp;lt;/grantPattern&amp;gt;
    &amp;lt;/openUrl&amp;gt;
    &amp;lt;openUrl name=&amp;quot;SubmitNewPassword&amp;quot;&amp;gt;
      &amp;lt;grantPattern&amp;gt;${org.nuxeo.ecm.contextPath}/site/resetPassword/submitNewPassword&amp;lt;/grantPattern&amp;gt;
    &amp;lt;/openUrl&amp;gt;
    &amp;lt;openUrl name=&amp;quot;Graphical_Resources&amp;quot;&amp;gt;
      &amp;lt;grantPattern&amp;gt;${org.nuxeo.ecm.contextPath}/site/skin/resetPassword/.*&amp;lt;/grantPattern&amp;gt;
    &amp;lt;/openUrl&amp;gt;
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Now let&amp;#8217;s get to the Java part. The &lt;em&gt;doGet&lt;/em&gt; method will render the page I&amp;#8217;ve just defined, while the &lt;em&gt;sendPasswordMail&lt;/em&gt; method will handle the form submit. In the latter, we will do the email validation, look if we have an existing user with the given address, and if this is the case, we&amp;#8217;ll send him an email.&lt;/p&gt;
&lt;p&gt;The validation is really simple here &amp;#8212; we just check if the given parameter is not null nor empty. Then if we have an email address, we go through the &lt;em&gt;&lt;a href="https://github.com/ldoguin/nuxeo-userpassword-reset/blob/master/nuxeo-userpassword-reset/src/main/java/org/nuxeo/ecm/user/runner/CreatePasswordResetLinkUnrestricted.java" title="CreatePasswordResetLinkUnrestricted on GitHub"&gt;CreatePasswordResetLinkUnrestricted&lt;/a&gt;&lt;/em&gt;. This is the class where we look for the user, build a reset password link if the user exists, or render our page with an error message. I&amp;#8217;ve tried to internationalize the email a little, but you still have to fork the code to modify the templates and subjects&amp;#8230; I&amp;#8217;ll try to enhance that later.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
    @GET
    public Object doGet() {
        Map&amp;lt;String, String&amp;gt; data = new HashMap&amp;lt;String, String&amp;gt;();
        return getView(&amp;quot;newPasswordRequest&amp;quot;).arg(&amp;quot;data&amp;quot;, data);
    }

    @POST
    @Path(&amp;quot;sendPasswordMail&amp;quot;)
    @Produces(&amp;quot;text/html&amp;quot;)
    public Object sendPasswordMail() throws ClientException {
        FormData formData = getContext().getForm();
        String email = formData.getString(&amp;quot;EmailAddress&amp;quot;);
        if (email == null || &amp;quot;&amp;quot;.equals(email.trim())) {
            return redisplayFormWithErrorMessage(&amp;quot;newPasswordRequest&amp;quot;,
                    ctx.getMessage(&amp;quot;label.registerForm.validation.email&amp;quot;),
                    formData);
        }
        email = email.trim();
        CreatePasswordResetLinkUnrestricted runner = new CreatePasswordResetLinkUnrestricted(
                getDefaultRepositoryName(), email);
        runner.runUnrestricted();

        String errorMessage = runner.getErrorMessage();
        if (errorMessage != null) {
            return redisplayFormWithErrorMessage(&amp;quot;newPasswordRequest&amp;quot;,
                    ctx.getMessage(errorMessage), formData);
        } else {
            String passwordResetLink = runner.getPasswordResetLink();
            String subject;
            Template template;
            if (ctx.getLocale().equals(Locale.FRENCH)) {
                template = getView(&amp;quot;mail/passwordForgotten_fr&amp;quot;);
                subject = &amp;quot;Nuxeo - Votre nouveau mot de passe&amp;quot;;
            } else {
                template = getView(&amp;quot;mail/passwordForgotten&amp;quot;);
                subject = &amp;quot;Nuxeo - Your new password&amp;quot;;
            }
            String message = template.arg(&amp;quot;passwordResetLink&amp;quot;,
                    passwordResetLink).render();
            try {
                sendEmail(email, subject, message);
            } catch (MessagingException e) {
                // issue while sending the mail
                log.error(&amp;quot;Sending Registration E-Mail Error&amp;quot;, e);
                return Response.status(500).build();
            }
            return redisplayFormWithInfoMessage(&amp;quot;newPasswordRequest&amp;quot;,
                    ctx.getMessage(&amp;quot;label.sendPasswordMail.emailSent&amp;quot;),
                    formData);
        }
    }

    protected Template redisplayFormWithMessage(String messageType,
            String formName, String message, FormData data) {
        Map&amp;lt;String, String&amp;gt; savedData = new HashMap&amp;lt;String, String&amp;gt;();
        for (String key : data.getKeys()) {
            savedData.put(key, data.getString(key));
        }
        return getView(formName).arg(&amp;quot;data&amp;quot;, savedData).arg(messageType,
                message);
    }

    protected Template redisplayFormWithInfoMessage(String formName,
            String message, FormData data) {
        return redisplayFormWithMessage(&amp;quot;info&amp;quot;, formName, message, data);
    }

    protected Template redisplayFormWithErrorMessage(String formName,
            String message, FormData data) {
        return redisplayFormWithMessage(&amp;quot;err&amp;quot;, formName, message, data);
    }

    public void sendEmail(String email, String subject, String message)
            throws MessagingException {
        Composer cp = new Composer();
        Mailer mailer = cp.getMailer();
        Mailer.Message msg = mailer.newMessage();
        msg.setFrom(MAIL_FROM);
        msg.setSubject(subject);
        msg.setRecipient(RecipientType.TO, new InternetAddress(email));
        msg.setContent(message, &amp;quot;text/html&amp;quot;);
        msg.send();
    }
&lt;/pre&gt;
&lt;h3&gt;Manage the keys&lt;/h3&gt;
&lt;p&gt;Now we&amp;#8217;re able to retrieve and email address, find the corresponding user and send the email. Under the hood, the &lt;em&gt;CreatePasswordResetLinkUnrestricted&lt;/em&gt; generates a unique key, stored in a &lt;a href="https://github.com/ldoguin/nuxeo-userpassword-reset/blob/master/nuxeo-userpassword-reset/src/main/resources/OSGI-INF/resetpassword-directory-contrib.xml" title="The directory contrib on GitHub"&gt;directory&lt;/a&gt; along with the user email address and the current date. A directory is a good fit to store our temporary keys. I will delete every one-day-old key using Nuxeo&amp;#8217;s event system.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s add a contribution to the scheduler service. It will raise the &lt;em&gt;cleanResetPassKeys&lt;/em&gt; event every day at 1am.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension
    target=&amp;quot;org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService&amp;quot;
    point=&amp;quot;schedule&amp;quot;&amp;gt;
    &amp;lt;schedule id=&amp;quot;cleanResetPassKeys&amp;quot;&amp;gt;
      &amp;lt;username&amp;gt;Administrator&amp;lt;/username&amp;gt;
      &amp;lt;eventId&amp;gt;cleanResetPassKeys&amp;lt;/eventId&amp;gt;
      &amp;lt;eventCategory&amp;gt;default&amp;lt;/eventCategory&amp;gt;
      &amp;lt;cronExpression&amp;gt;0 0 1 * * ?&amp;lt;/cronExpression&amp;gt;
    &amp;lt;/schedule&amp;gt;
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;So what we need to do now is add a &lt;a href="https://github.com/ldoguin/nuxeo-userpassword-reset/blob/master/nuxeo-userpassword-reset/src/main/resources/OSGI-INF/resetPassword-listener-contrib.xml" title="The Listener contribution on GitHub"&gt;listener&lt;/a&gt; for the &lt;em&gt;cleanResetPassKeys&lt;/em&gt; event.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the code of my listener. It&amp;#8217;s straightforward. The &lt;em&gt;simpleDate&lt;/em&gt; String is the previous day&amp;#8217;s date, formatted the same way we stored it in the directory. We use it as a directory filter. This way we can retrieve all keys created the day before and delete them. What I&amp;#8217;d like to do in the future is make this configurable in the Admin Center. That way, the administrator could choose the time to live for the key.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class CleanForgottenPasswordKeysListener implements EventListener {

	public static final Log log = LogFactory
			.getLog(CleanForgottenPasswordKeysListener.class);

    @Override
    public void handleEvent(Event event) throws ClientException {
		SimpleDateFormat sdf = new SimpleDateFormat(&amp;quot;yyMMdd&amp;quot;);
		Calendar yesterday = Calendar.getInstance();
		yesterday.add(Calendar.DATE, -1);
		String simpleDate = sdf.format(yesterday.getTime());
		DirectoryService ds;
		try {
			ds = Framework.getService(DirectoryService.class);
		} catch (Exception e) {
			throw new RuntimeException(&amp;quot;Could not find DirectoryService&amp;quot;, e);
		}
		Session session = ds.open(&amp;quot;resetPasswordKeys&amp;quot;);
		Map&amp;lt;String, Serializable&amp;gt; filter = new HashMap&amp;lt;String, Serializable&amp;gt;();
		filter.put(&amp;quot;creationDate&amp;quot;, simpleDate);
		DocumentModelList keysToRemove = session.query(filter);
		for (DocumentModel key : keysToRemove) {
			session.deleteEntry(key);
		}
		session.close();
    }
}
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s it for today. In the second part I&amp;#8217;ll tell you how to actually reset the password. Or if you are curious you can already checkout &lt;a href="https://github.com/ldoguin/nuxeo-userpassword-reset" title="nuxeo-userpassword-reset on GitHub"&gt;the source code on Github&lt;/a&gt;. I will also show you how to make a Marketplace package of this. See ya&amp;#8217; on Friday :)&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-add-forgotten-password-functionality-nuxeo-part-12.html'&gt;http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-add-forgotten-password-functionality-nuxeo-part-12.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/vS7iEBbg2vU" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Q&amp;A Friday] How to Clear UI Selected Documents in Studio</title>
    <id>http://dev.blogs.nuxeo.com/?p=4488</id>
    <updated>2012-05-11T11:21:41Z</updated>
    <published>2012-05-11T11:21:41Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/05/qa-friday-clear-ui-selected-documents-studio.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Today we have a question from &lt;a href="http://answers.nuxeo.com/users/319/pibou/" title="Pibou on Nuxeo Answers"&gt;pibou&lt;/a&gt;, who asks &lt;a href="http://answers.nuxeo.com/questions/2542/problem-refreshing-ui-after-document-deletion" title="Problem refreshing UI after document deletion"&gt;how he can refresh the UI using content automation in Studio&lt;/a&gt;.&lt;br /&gt;
There is indeed a &lt;a href="http://explorer.nuxeo.org/nuxeo/site/distribution/current/viewOperation/Seam.Refresh" title="Refresh operation documentation"&gt;Refresh UI&lt;/a&gt; operation, but what it does is invalidate the different query caches. This will not empty the selected documents list, for instance. And that is just what pibou needs. Unfortunately we have no operation available for this by default on 5.5. So here&amp;#8217;s a workaround, until the operation is available for 5.6.&lt;/p&gt;
&lt;h3&gt;Clear selected documents list operation&lt;/h3&gt;
&lt;p&gt;This part is simple. You need Nuxeo IDE with a SDK setup. Create a new project or use an existing one, and run the operation wizard.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what my wizard looks like:&lt;br /&gt;
&lt;a href="http://dev.blogs.nuxeo.com/files/2012/05/ClearSlectedDocuments.png"&gt;&lt;img alt="Clear Selected Documents operation wizard" class="aligncenter size-medium wp-image-4489" height="300" src="http://dev.blogs.nuxeo.com/files/2012/05/ClearSlectedDocuments-e1336655866258-298x300.png" width="298" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And here&amp;#8217;s the code of my operation:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
@Operation(id = ClearSelectedDocuments.ID, category = Constants.CAT_UI, requires = Constants.SEAM_CONTEXT, label = &amp;quot;Clear Selected Documents&amp;quot;, description = &amp;quot;Clear the default list of selected documents&amp;quot;)
public class ClearSelectedDocuments {

	public static final String ID = &amp;quot;Seam.ClearSelectedDocuments&amp;quot;;

	@OperationMethod
	public void run() {
            OperationHelper.getDocumentListManager().resetWorkingList(
                DocumentsListsManager.CURRENT_DOCUMENT_SELECTION);
	}

}
&lt;/pre&gt;
&lt;p&gt;The operationHelper can give you access to some useful Seam components. Here, it gives us the DocumentListManager, which handles the different selection lists like the clipboard, the working list or the selected documents.&lt;/p&gt;
&lt;p&gt;Now we need to make Studio aware of that operation. If you use Nuxeo IDE and have configured your Studio account, it&amp;#8217;s dead easy. When you&amp;#8217;re on the Nuxeo Studio tab, there&amp;#8217;s an &amp;#8216;Export operations&amp;#8217; button. It will first ask you to select which projects you want to scan. On the same screen, you can select the Studio project where you want to export the operations, if you have many. Click on next and you get the list of operations, it found. Select the one one you need and simply click on finish. That&amp;#8217;s it, your operation is available in your Studio project.&lt;/p&gt;
&lt;p&gt;What it does under the hood is simply generate a Json signature of the operation and paste it on the Studio operation registry:&lt;br /&gt;
&lt;a href="http://dev.blogs.nuxeo.com/files/2012/05/Studio-registry.png"&gt;&lt;img alt="Studio operations registry" class="aligncenter size-medium wp-image-4490" height="168" src="http://dev.blogs.nuxeo.com/files/2012/05/Studio-registry-300x168.png" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So if you have other questions about Studio and operations, ask them on &lt;a href="http://answers.nuxeo.com/" title="Nuxeo Answers"&gt;answers.nuxeo.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/05/qa-friday-clear-ui-selected-documents-studio.html'&gt;http://dev.blogs.nuxeo.com/2012/05/qa-friday-clear-ui-selected-documents-studio.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/D2RCxnfq7RI" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [marketing] [meet the team] Antoine Taillefer</title>
    <id>http://marketing.blogs.nuxeo.com/?p=1035</id>
    <updated>2012-05-11T06:20:42Z</updated>
    <published>2012-05-11T06:20:42Z</published>
    <link href="http://marketing.blogs.nuxeo.com/2012/05/meet-the-nuxeoteam-antoine-taillefer.html" />
    <author>
      <name>roland</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/roland"&gt;roland&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://marketing.blogs.nuxeo.com/files/2012/05/IMG_6066-2-web.jpg"&gt;&lt;img alt="antoine taillefer" class="alignright size-medium wp-image-1036" height="300" src="http://marketing.blogs.nuxeo.com/files/2012/05/IMG_6066-2-web-209x300.jpg" title="IMG_6066-2-web" width="209" /&gt;&lt;/a&gt;This month, we meet Antoine Taillefer. Antoine joined Nuxeo not too long ago, coming on board with extensive experience and a long history of working on Nuxeo projects. Aside from managing the technical relationship with our customers, he’s a vocal advocate for exchanging ideas and has brought a unique perspective to the Nuxeo development team, among many other things!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tell me about your role.&lt;/strong&gt;&lt;br /&gt;
My primary role is to serve as a Technical Account Manager for clients who are implementing Nuxeo. It’s a new position that didn’t exist before and is meant to ensure that we have greater contact with clients on the technical side. It goes beyond the usual support that we provide via Jira tickets, our issue tracking system, and it’s more than what a typical account manager would do, such as discussing planning or business with clients—I’m here to provide a global and technical view into what clients do with Nuxeo and help them address any problems or questions that might arise regarding their implementation. Basically, I ensure that they don’t go in the wrong direction. This is especially important for our application builders, we want to guarantee that they do things well from the start and that they follow the main principles for development that we’ve established for the platform.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Being a new position, do you think it’s being well received by clients?&lt;/strong&gt;&lt;br /&gt;
I think so, yes. It’s a great service for our clients and for us as well. We have a lot of system integrators that are developing on top of Nuxeo and they are producing some really interesting features, so my role allows us to be more aware of what they’ve done. Additionally, I tell them how to contribute their job or can inspect their code and that way we can incorporate their development efforts into the platform. We’re not always aware of what the clients are building, often we only hear from them when they have problems, but it’s just as important to tell us when something goes right or when they’ve come up with something cool. It helps us keep track of how they use our product for their projects, support them in better ways, and also make sure the good ideas are collected and integrated into all Nuxeo products.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How many clients do you manage?&lt;/strong&gt;&lt;br /&gt;
At the moment, I manage 4 or 5 clients. I spend half my time as a Technical Account Manager and the rest of the time as a software engineer, so I develop for the platform just like the clients I support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you been at Nuxeo?&lt;/strong&gt;&lt;br /&gt;
I’m one of the newest arrivals. I started in November so it’s been almost 6 months now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What were you working on prior to coming to Nuxeo?&lt;/strong&gt;&lt;br /&gt;
Well, one of the reasons they hired me is because of my experience implementing Nuxeo across many different sectors. For the last 5 years I had been working for a system integrator, so I’ve spent a lot of time integrating Nuxeo for clients. My speciality is not just as a developer, but I function as a consultant as well, one that’s aware of the client’s wants and needs (as any consultant knows, these two items are not always the same&amp;#8230;that’s when it gets really interesting!). Needless to say, having worked on both sides of the equation has its advantages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Are you also involved with training like the other Nuxeo engineers?&lt;/strong&gt;&lt;br /&gt;
Yes, that’s another aspect I’m involved with. I do training with Sun, one of the other Nuxeo developers here, I’m his backup. Right now we’re working on improving the training material to make it easier for other Nuxeo staff members to do the training. So that means keeping the training material up to date as well as upgrading the training section on our intranet site so we have a clear definition on the different types of training programs we offer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As you’re involved in the training services provided by Nuxeo, what advice do you have to those trying to develop for Nuxeo—best practices or ways to speed up the process? Can you provide some pointers to educational resources?&lt;/strong&gt;&lt;br /&gt;
Well, I know it sounds obvious, but it really is important to read the documentation. Our documentation is quite good compared to others. It’s very well maintained. So, first, read the user guide and the developer guide. Also, don’t hesitate to test and install the platform on a local machine, it’s quite simple even if you’re not a developer. Use the tools we’ve created to help you do customization and development like Nuxeo Studio and IDE. These are a great help, engineers who don’t know much about Nuxeo are developing small features quite quickly. And, if you need a dose of inspiration, take a look at the Nuxeo code directly. That way, when you want to add a feature, you can look at the code for an existing feature and see how it was implemented, its location and how it’s organized and model yours after that. Often there’s a good reason the Nuxeo developers placed and organized it in a certain way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now that you’re working directly for Nuxeo, is it what you imagined it would be like when looking in from the outside?&lt;/strong&gt;&lt;br /&gt;
Yes, it’s quite like I had imagined it to be. No big surprises. The atmosphere is quite nice, the work is interesting, especially on the technical front. I mostly work with the technical staff, but it’s great to be able to interact and communicate with everyone and learn new things. Before I was working at a company of about 500 people, so it’s nice to be at Nuxeo where things are more close-knit. It’s easy to find out how other teams work and share ideas. Plus, as I was working with Nuxeo at my previous job, I already knew a few people here so the transition was relatively easy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In your role, you must see a large number of projects, can you provide some expert advice for our readers on how to implement Nuxeo successfully?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One key is in the methodology that you use. And, this is a common theme for all IT projects—you have to have great methodology, such as scrum or extreme programming methods.&lt;/p&gt;
&lt;p&gt;Another critical factor is quality. Here at Nuxeo we do a great job on continuous integration. Each time we develop something, it’s tested thoroughly. External developers should also use these continuous integration tools, including function and performance tests. Nuxeo provides a framework and tools to help developers who want to work with Nuxeo to ensure quality. I’ve seen clients who haven’t taken the time to do this and believe me, it makes a huge difference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are some of the types of projects you’ve worked on?&lt;/strong&gt;&lt;br /&gt;
There have been many different types. One that I’m working on now is with an insurance company. They want to use Nuxeo to store and manage their client’s contracts. Another big client is working in the commercial food industry and they are using Nuxeo to store all of the labels that appear on every food product you buy, from logos to ingredient labels. Also, in the education sector, there are many organizations that have used the platform to integrate social collaboration into their solutions.&lt;/p&gt;
&lt;p&gt;One that was very impressive was for HEC Paris, the French Business Management School. They needed a platform that enabled their faculty and students to interact, something that would allow teachers to upload lesson material as well as enable students to download assignments, upload their exercises, and check answers. We did a great job on creating a user interface that they wanted, which was something completely different than the standard Nuxeo DM interface. They wanted more of an intranet site, but with all the backend features, rights management, and versioning that a CMS could handle. I wouldn’t have thought of using Nuxeo for this type of deployment, but it was a great idea and worked very well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How is Nuxeo different from other software applications, as from your previous experience, you must have been dealing with different ECM apps?&lt;/strong&gt;&lt;br /&gt;
I’ve worked with maybe 2 or 3 others. The main differentiator with Nuxeo lies in its extensibility/modularity. It’s a base platform, on top of which you can add modules, we already offer DM, DAM, but it’s a great asset to have a core server and be able to plug-in packaged modules or develop a new module altogether. And with Nuxeo Studio it’s very easy to configure and customize according to your needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are Nuxeo strengths? and weaknesses?&lt;/strong&gt;&lt;br /&gt;
Even though it’s extensible, when you download the Nuxeo source code there are so many plugins that you can easily get lost. It’s great to have so many options, but the way it’s currently presented is a bit overwhelming. In the future, I think we could better package the main platform—make it quite light and then users could add whatever they want onto it by looking at a list that can be categorized and sorted. Although people can go to the web site and see descriptions, most developers don’t do this.&lt;/p&gt;
&lt;p&gt;In regards to the documentation, it’s really great, but sometimes it’s difficult to find things if you don’t know where they are. The search engine in the documentation site can be improved. But overall, the documentation has improved a lot over the last few years.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do in your spare time?&lt;/strong&gt;&lt;br /&gt;
I spend most of my time doing sports or traveling. I like to go to the mountains. When I can I like to get out of Paris, it’s a big city with not much nature so I try to get out on the weekends. In the winter I ski, downhill and cross country, and in the summer I like to hike, go camping, and rock climbing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do you like working at Nuxeo?&lt;/strong&gt;&lt;br /&gt;
I do. There’s a good atmosphere here, nice people to work with. A lot of work, but it’s better to have too much than be bored.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://marketing.blogs.nuxeo.com/2012/05/meet-the-nuxeoteam-antoine-taillefer.html'&gt;http://marketing.blogs.nuxeo.com/2012/05/meet-the-nuxeoteam-antoine-taillefer.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/nU7QUtAHdSg" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Monday Dev Heaven] Create Your Own Documents on File Drag and Drop</title>
    <id>http://dev.blogs.nuxeo.com/?p=4480</id>
    <updated>2012-05-07T18:33:49Z</updated>
    <published>2012-05-07T18:33:49Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-fileimporter-plugin.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you follow this blog you&amp;#8217;ll remember I&amp;#8217;ve been writing a lot about file import recently. And I have a new trick for you on this matter. When I created &lt;a href="http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-automatic-document-creation-nuxeo-part2.html" title="[Monday Dev Heaven] Automatic document creation in Nuxeo, Part 2"&gt;the import factory&lt;/a&gt;, I took an existing Nuxeo XML export as example. But this could also work with single files. In this case, the importer uses the &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/platform/filemanager/service/FileManagerService.html" title="FileManagerService Javadoc"&gt;FileMangerService&lt;/a&gt; plugin. The role of this plugin is to create &lt;em&gt;Documents&lt;/em&gt; in Nuxeo using a given file.&lt;/p&gt;
&lt;p&gt;When the file is imported, Nuxeo goes through each plugin following their processes. If the mime type matches, then it tries to create the document. If it returns null instead of a &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/core/api/DocumentModel.html" title="DocumentModel Javadoc"&gt;DocumentModel&lt;/a&gt;, the next plugin with a matching mime type is used, and so on. Here is a simple plugin contribution as an example:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension
    target=&amp;quot;org.nuxeo.ecm.platform.filemanager.service.FileManagerService&amp;quot;
    point=&amp;quot;plugins&amp;quot;&amp;gt;

    &amp;lt;plugin name=&amp;quot;ExportedArchivePlugin&amp;quot;
      class=&amp;quot;org.nuxeo.ecm.platform.filemanager.service.extension.ExportedZipImporter&amp;quot;
      order=&amp;quot;10&amp;quot;&amp;gt;
      &amp;lt;filter&amp;gt;application/zip&amp;lt;/filter&amp;gt;
    &amp;lt;/plugin&amp;gt;

    &amp;lt;plugin name=&amp;quot;CSVArchivePlugin&amp;quot;
      class=&amp;quot;org.nuxeo.ecm.platform.filemanager.service.extension.CSVZipImporter&amp;quot;
      order=&amp;quot;11&amp;quot;&amp;gt;
      &amp;lt;filter&amp;gt;application/zip&amp;lt;/filter&amp;gt;
    &amp;lt;/plugin&amp;gt;

    &amp;lt;plugin name=&amp;quot;DefaultFileImporter&amp;quot;
      class=&amp;quot;org.nuxeo.ecm.platform.filemanager.service.extension.DefaultFileImporter&amp;quot;
      order=&amp;quot;100&amp;quot;&amp;gt;
      &amp;lt;filter&amp;gt;.*&amp;lt;/filter&amp;gt;
    &amp;lt;/plugin&amp;gt;
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Take a simple zip file as an example. The first plugin used will be the ExportedArchivePlugin. It will return null because the zip file is not a Nuxeo export; it doesn&amp;#8217;t contain a .nuxeo-archive file. The next plugin will be the CSVArchivePlugin. Since the zip doesn&amp;#8217;t contain a meta-data.csv file, the plugin returns null. The next one to be used will be the DefaultFileImporter, which will create a simple &lt;em&gt;File&lt;/em&gt; document with the zip file as main attachment.&lt;/p&gt;
&lt;h2&gt;When should you use plugins?&lt;/h2&gt;
&lt;p&gt;Plugins are a good fit for two things. The first one is creating several documents from a single file. With the ExportedArchivePlugin, you can create as many documents as you want using the content of this archive. You could also have a big XML file or maybe a &lt;a href="http://en.wikipedia.org/wiki/GEDCOM" title="GEDCOM"&gt;GEDCOM&lt;/a&gt; file.&lt;/p&gt;
&lt;p&gt;The other good fit is choosing the right &lt;em&gt;DocType&lt;/em&gt; for a specific file. Maybe you have defined an &lt;em&gt;OfficeFile&lt;/em&gt; document type that would be better then the usual &lt;em&gt;File&lt;/em&gt; for all your office files.&lt;/p&gt;
&lt;p&gt;Sure, you could use it to add business code like metadata extraction, specific property updates, file transformation, etc., but this would be better in a listener. This way, your code is called when you create a document from a creation form or from the import. And you can choose to do this synchronously or asynchronously, which is always good for big imports or file conversions.&lt;/p&gt;
&lt;h2&gt;Creating a new plugin&lt;/h2&gt;
&lt;p&gt;So now I&amp;#8217;m going to write a plugin that creates people and links them together from a GEDCOM file. A GEDCOM file represents a genealogical tree. You can get information about individuals, and meta data linking them together. That&amp;#8217;s a perfect example for a FileImporter plugin. Let&amp;#8217;s get to it!&lt;/p&gt;
&lt;p&gt;Here is my XML contribution. It&amp;#8217;s really simple &amp;#8212; you need to indicate the Java class implementing your import logic, give it an order, a name and a list of mime types. GEDCOM files are text, so you just need the &amp;#8216;text/plain&amp;#8217; mime type. I&amp;#8217;ve chosen 9 as the order to be sure this plugin is the first to be used. If my GEDCOM parser does not recognize the file as a GEDCOM, my plugin will simply return null and the FileManagerService will give the file to the next plugin.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension
      target=&amp;quot;org.nuxeo.ecm.platform.filemanager.service.FileManagerService&amp;quot;
      point=&amp;quot;plugins&amp;quot;&amp;gt;
      &amp;lt;plugin name=&amp;quot;GEDCOMImporter&amp;quot;
        class=&amp;quot;org.nuxeo.genealogy.core.plugin.GEDCOMFileManagerPlugin&amp;quot;
        order=&amp;quot;9&amp;quot;&amp;gt;
      &amp;lt;filter&amp;gt;text/plain&amp;lt;/filter&amp;gt;
    &amp;lt;/plugin&amp;gt;

  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This is my Java Class which extends the AbstractFileImporter (which itself implements the &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/platform/filemanager/service/extension/FileImporter.html" title="FileImporter JavaDoc"&gt;FileImporter&lt;/a&gt; Interface). I&amp;#8217;ve found a nice library to do the GEDCOM parsing. It&amp;#8217;s called &lt;a href="http://code.google.com/p/gedcom4j/" title="gedcom4j on google doc"&gt;gedcom4j&lt;/a&gt; and is available on Google code. It&amp;#8217;s open source and the project is still active.&lt;/p&gt;
&lt;p&gt;This is a really simple and basic example. It creates a folder named as the original file, then creates documents of type Individual, adding some metadata and then linking those documents together with relations.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class GEDCOMFileManagerPlugin extends AbstractFileImporter {

	public static final String SPOUSE_OF_PREDICATE = &amp;quot;http://purl.org/vocab/relationship/spouseOf&amp;quot;;

	public static final String CHILD_OF_PREDICATE = &amp;quot;http://purl.org/vocab/relationship/childOf&amp;quot;;

	private static final long serialVersionUID = 1876876876L;

	private static final Log log = LogFactory
			.getLog(GEDCOMFileManagerPlugin.class);

	protected RelationManager relationManager;

	protected DocumentModel treeContainerDoc;

	public DocumentModel create(CoreSession session, Blob content, String path,
			boolean overwrite, String filename, TypeManager typeService)
			throws ClientException, IOException {

		GedcomParser parser = new GedcomParser();
		try {
			parser.load(content.getStream());
		} catch (GedcomParserException e) {
			log.warn(&amp;quot;Not a gedcom file&amp;quot;, e);
			return null;
		}
		Gedcom gedcom = parser.gedcom;

		// create tree container
		treeContainerDoc = session
				.createDocumentModel(path, filename, &amp;quot;Folder&amp;quot;);
		treeContainerDoc.setPropertyValue(&amp;quot;dc:title&amp;quot;, filename);
		session.createDocument(treeContainerDoc);

		// create every individual in the tree
		Collection&amp;lt;Individual&amp;gt; everybody = gedcom.individuals.values();
		for (Individual individual : everybody) {
			DocumentModel docInd = session.createDocumentModel(
					treeContainerDoc.getPathAsString(), individual.xref,
					&amp;quot;Individual&amp;quot;);
			docInd.setPropertyValue(&amp;quot;dc:title&amp;quot;, individual.formattedName());
			docInd.setPropertyValue(&amp;quot;idv:xref&amp;quot;, individual.xref);
			docInd.setPropertyValue(&amp;quot;idv:name&amp;quot;, individual.formattedName());
			docInd.setPropertyValue(&amp;quot;idv:gender&amp;quot;, individual.sex);
			session.createDocument(docInd);
		}
		// add spouseOf relations
		for (Individual individual : everybody) {
			for (FamilySpouse spouse : individual.familiesWhereSpouse) {
				if (spouse.family.husband == individual) {
					if (spouse.family.wife != null) {
						addIndividualsRelation(individual.xref,
								SPOUSE_OF_PREDICATE, spouse.family.wife.xref,
								session);
					}
				} else {
					if (spouse.family.husband != null) {
						addIndividualsRelation(individual.xref,
								SPOUSE_OF_PREDICATE,
								spouse.family.husband.xref, session);
					}
				}

			}
			// add childOf relations
			for (FamilyChild f : individual.familiesWhereChild) {

				if (f.family.wife != null) {
					addIndividualsRelation(individual.xref, CHILD_OF_PREDICATE,
							f.family.wife.xref, session);
				}
				if (f.family.husband != null) {
					addIndividualsRelation(individual.xref, CHILD_OF_PREDICATE,
							f.family.husband.xref, session);
				}
			}
		}

		return treeContainerDoc;
	}

	private RelationManager getRelationManager() {
		if (relationManager == null) {
			try {
				relationManager = Framework.getService(RelationManager.class);
			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}
		return relationManager;
	}

	private void addIndividualsRelation(String subjectXRef, String predicat,
			String objectXRef, CoreSession session) throws ClientException {
		Resource documentResource = getDocumentResource(getIndDoc(subjectXRef,
				treeContainerDoc.getRef(), session));
		Resource predicate = new ResourceImpl(predicat);

		Resource objectResource = getDocumentResource(getIndDoc(objectXRef,
				treeContainerDoc.getRef(), session));

		Statement stmt = new StatementImpl(documentResource, predicate,
				objectResource);
		Graph graph = getRelationManager().getGraphByName(
				RelationConstants.GRAPH_NAME);
		graph.add(stmt);
	}

	public DocumentModel getIndDoc(String xref, DocumentRef parentRef,
			CoreSession session) throws ClientException {
		return session.getChild(parentRef, xref);
	}

	public QNameResource getDocumentResource(DocumentModel document)
			throws ClientException {
		QNameResource documentResource = null;
		if (document != null) {
			documentResource = (QNameResource) getRelationManager()
					.getResource(RelationConstants.DOCUMENT_NAMESPACE,
							document, null);
		}
		return documentResource;
	}

}
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s it for today &amp;#8212; see you on Friday!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-fileimporter-plugin.html'&gt;http://dev.blogs.nuxeo.com/2012/05/monday-dev-heaven-fileimporter-plugin.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/57X4xr6_6Gg" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Q&amp;A Friday] How does the Seam.PushDocument operation work?</title>
    <id>http://dev.blogs.nuxeo.com/?p=4487</id>
    <updated>2012-05-04T10:57:36Z</updated>
    <published>2012-05-04T10:57:36Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/05/qa-friday-seampushdocument-operation-work.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;div class="wp-caption alignright" id="attachment_4385"&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/02/question.png"&gt;&lt;img alt="How does Seam.PushDocument work?" class="size-full wp-image-4385" height="123" src="http://dev.blogs.nuxeo.com/files/2012/02/question.png" width="157" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;How does Seam.PushDocument work?&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;A new question by &lt;a href="http://answers.nuxeo.com/users/293/michael-bell/" title="Michael on Nuxeo Answers"&gt;Michael Bell&lt;/a&gt;: &lt;a href="http://answers.nuxeo.com/questions/2514/how-does-seampushdocument-work" title="How does Seam.PushDocument work?"&gt;How does Seam.PushDocument work?&lt;/a&gt; Well, it does not navigate to a document, as &lt;a href="http://answers.nuxeo.com/users/115/clement-lardeur/" title="Clément on Nuxeo Answers"&gt;Clément&lt;/a&gt; said:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If you just want to navigate to your newly created Document, you should use the Seam.NavigateTo operation.&lt;br /&gt;
The Seam.PushDocument operation pushes just your Document in the Seam Context.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;For those of you who don&amp;#8217;t know &lt;a href="http://seamframework.org/" title="Seam Framework"&gt;Seam&lt;/a&gt;, it&amp;#8217;s the framework we use to write Nuxeo&amp;#8217;s Web interface. It can be easily extended with Nuxeo Studio, hence the presence of Seam in Studio.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://doc.nuxeo.com/x/7gIz#OperationsIndex-PushtoSeamContext" title="Seam.PushDocument"&gt;Seam.PushDocument&lt;/a&gt; adds a document to a &lt;a href="http://docs.jboss.com/seam/1.2.1.GA/reference/en/html/concepts.html" title="Seam concepts"&gt;Seam context&lt;/a&gt;: session, conversation, page or event. This can be useful if you think the user will click on different buttons, which is to say launch different operation chains, during his conversation or session. This way you can share documents between independent chains. So once you have stored your document, to retrieve it, you need the &lt;a href="http://dev.blogs.nuxeo.com/doc.nuxeo.com/x/7gIz#OperationsIndex-UIDocumentFromSeam" title="Seam.FetchDocument"&gt;Seam.FetchDocument&lt;/a&gt; operation. It will restore the document as input for the next operation.&lt;/p&gt;
&lt;p&gt;This can be useful if you manage your navigation with buttons. Let&amp;#8217;s say I am currently viewing a Quality Report document. I&amp;#8217;ve added a button called &amp;#8220;Navigate to Incident Library.&amp;#8221; What it does is push the current document into the Seam context and then navigates to the &amp;#8220;Incident Library&amp;#8221; document. When I&amp;#8217;m inside such a document, I have a button called &amp;#8220;Back to Report.&amp;#8221; The only thing that button does is retrieve the document from the Seam context and then navigate to the document, using the &lt;a href="http://doc.nuxeo.com/x/7gIz#OperationsIndex-NavigatetoDocument" title="Seam.NavigateTo"&gt;Seam.NavigateTo&lt;/a&gt; operation.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/05/qa-friday-seampushdocument-operation-work.html'&gt;http://dev.blogs.nuxeo.com/2012/05/qa-friday-seampushdocument-operation-work.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/Du1HhTtk_fE" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [marketing] Why enterprise content management projects fail… and what you can do about it. Redux.</title>
    <id>http://marketing.blogs.nuxeo.com/?p=1027</id>
    <updated>2012-05-02T14:50:15Z</updated>
    <published>2012-05-02T14:50:15Z</published>
    <link href="http://marketing.blogs.nuxeo.com/2012/05/enterprise-content-management-projects-success-redux.html" />
    <author>
      <name>roland</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/roland"&gt;roland&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;We hosted last week a great webinar featuring Laurence Hart (&lt;a href="http://twitter.com/piewords" target="_blank" title="@piewords"&gt;@piewords&lt;/a&gt;) and Brendan Coveney (&lt;a href="http://twitter.com/bcoveney" target="_blank" title="@bcoveney"&gt;@bcoveney&lt;/a&gt;), on the topic of ECM project success and failure. Here is some follow-up information &amp;#8212; including a recording of the webinar &amp;#8212; for those who attended and are curious to find out more, or for those who missed it. Thanks to Laurence and Brendan who were kind enough to join us for that event, despite having very busy agendas.&lt;/p&gt;
&lt;p&gt;Preparing and hosting this webinar was a great occasion to look at the topic in a little bit more detail. I would like first to come with a few links that were mentioned during the webinar, starting with some that apply to the whole IT family:&lt;/p&gt;
&lt;p&gt;First (and often mentioned), the “scary” (at least to me) reports from the Standish Group can be found &lt;a href="http://standishgroup.com/newsroom/chaos_manifesto_2011.php" target="_blank"&gt;here&lt;/a&gt;. As this is not free content, I won’t say too much about it here, but some googling might take you to some enlightening executive summary on this study.&lt;/p&gt;
&lt;p&gt;Then, I would like to mention the work of Scott W. Ambler, &lt;a href="http://www.drdobbs.com/architecture-and-design/232300110" target="_blank"&gt;available on Dr. Dobb&lt;/a&gt;’s, that definitely challenges the meaning of “Project Success and Failure” compared to the views of the Standish Group reports. More on the great work of Scott W. Ambler can be found &lt;a href="http://marketing.blogs.nuxeo.com/www.ambysoft.com" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, as we, like many, touched on the topic of “agile”, I recommend that anyone interested in the topic read &lt;a href="http://blogs.forrester.com/mike_gualtieri/11-10-12-agile_software_is_a_cop_out_heres_whats_next" target="_blank"&gt;this article&lt;/a&gt; from Mike Gualtieri, from Forrester. Agree with him or not, this will definitely raise questions and take the discussion to another level! I want to use this one to state clearly that, when we advise being “AGILE”, it is clearly not following A to Z the agile software development methodology process, but more about the general meaning of being agile!&lt;/p&gt;
&lt;p&gt;And then, to jump a little bit more on some ECM-related content, we wanted to link to the AIIM blog, and especially to some like &amp;#8211; &lt;a href="http://aiim.typepad.com/aiim_blog/2010/05/8-reasons-ecm-fail.html" target="_blank"&gt;8 Reasons Why ECM Implementations Experience High Failure Rates, and What to Do About It&lt;/a&gt; (Jeetu Patel), with many other posts from the “8 things” series of interest to this conversation (for instance&lt;a href="http://aiim.typepad.com/aiim_blog/2010/02/8-ways-to-kill-your-ecm-project.html" target="_blank"&gt; the 8 ways to kill your ECM project)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, as a short recap about our thoughts at Nuxeo, we definitely think “project success” means much more than reaching the usual project management metrics “on time, on budget and on scope”. Stepping outside of the box, project success is mostly about providing real business value to users and organizations like for instance enabling a better business efficiency, achieving faster time to market, increasing team productivity or others. And if that is the real success of an ECM project, then technology is a key success factor, as much as the people and the processes.&lt;/p&gt;
&lt;p&gt;In that respect, beyond the people and methodology matters, we believe that the Nuxeo Platform contributes a great deal of value to content management projects by enabling developers and project managers to roll out an agile project approach, implement disciplines such as prototyping, continuous testing and continuous integration, and remain flexible in the way the projects are driven! For IT folks who are not familiar with the Nuxeo Platform, I would recommend &lt;a href="http://www.nuxeo.com/en/resource-center/presentations/Nuxeo-platform-in-15mn" target="_blank"&gt;this very simple and short introduction to the Nuxeo Platform&lt;/a&gt;. For those who are already deeply into technical topics such as continuous integration, feel free to take a deep dive in how we do&lt;a href="http://www.nuxeo.com/en/resource-center/presentations/How-Nuxeo-uses-the-open-source-continuous-integration-server-Jenkins" target="_blank"&gt; continuous integration at Nuxeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Laurence’s advice, coming from a wealth of content management project experience, focuses more on the project management side of the discussion. Anyone involved in an ECM project would benefit from reading his slide deck, and digesting the information it contains. I would keep in mind the importance of being guided and accompanied by experienced folks in my projects,  and repeat the mantra “&lt;strong&gt;start small and finish big.&lt;/strong&gt;” Too-large project scope, guided by a waterfall approach, has certainly been a major reason why we’ve seen so many projects fail.&lt;/p&gt;
&lt;p&gt;For those who want to replay the webinar, feel free to watch below or jump to &lt;a href="http://www.nuxeo.com/en/resource-center" target="_blank"&gt;nuxeo.com resource center&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For those interested in the slide deck from the webinar, they can be downloaded &lt;a href="http://www.nuxeo.com/en/content/download/4491/148580/file/Webinar-Successful-ECM-Projects.pdf" target="_blank"&gt;here&lt;/a&gt; on nuxeo.com or simply viewed below.&lt;/p&gt;
&lt;p&gt;Thanks to everyone who participated in the event, including the Twitter users who used the &lt;a href="https://twitter.com/search/%23ECMSuccess"&gt;#ECMSuccess&lt;/a&gt; hashtag. As a quick final note, we would love to see comments as well as any unanswered or new questions in the comment section of this post. We will watch carefully &amp;#8212; feel free to contribute!&lt;/p&gt;
&lt;p&gt;video recording:&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;slideshow:&lt;/p&gt;
&lt;div id="__ss_12763335"&gt;&lt;strong&gt;&lt;a href="http://www.slideshare.net/nuxeo/deliver-a-successful-ecm-project" target="_blank" title="Deliver a Successful ECM Project"&gt;Deliver a Successful ECM Project&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;div&gt;View more presentations from &lt;a href="http://www.slideshare.net/nuxeo" target="_blank"&gt;Nuxeo &amp;#8211; Open Source ECM&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://marketing.blogs.nuxeo.com/2012/05/enterprise-content-management-projects-success-redux.html'&gt;http://marketing.blogs.nuxeo.com/2012/05/enterprise-content-management-projects-success-redux.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/1Y3O2m8Af-s" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [lounge] Leveraging the Nuxeo Platform for Configuration Management Projects</title>
    <id>http://lounge.blogs.nuxeo.com/?p=302</id>
    <updated>2012-05-02T10:21:57Z</updated>
    <published>2012-05-02T10:21:57Z</published>
    <link href="http://lounge.blogs.nuxeo.com/2012/05/leveraging-nuxeo-platform-configuration-management-projects.html" />
    <author>
      <name>nuxeo</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/nuxeo"&gt;nuxeo&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Nuxeo was recently handed a challenge in the context of a client prospect. They needed to handle &lt;a href="http://en.wikipedia.org/wiki/Configuration_management" title="Configuration Management on Wikipedia"&gt;configuration management&lt;/a&gt;. At Nuxeo, we like challenges, and even more, we like the opportunity to demonstrate that the Nuxeo Platform is so flexible and customizable that it can adapt to many different types of projects.&lt;/p&gt;
&lt;p&gt;(Resources mentioned during this article are regrouped in a specific section at the end).&lt;/p&gt;
&lt;p&gt;Many different reasons lead more and more companies to take the path of setting up a configuration management system. Historically, CM was used in military engineering organizations but it is now seen in many civil domains. It can be required for regulatory compliance, i.e. in aeronautics or medical device development, but can also be a choice for quality certifications and process improvement systems.&lt;/p&gt;
&lt;p&gt;Configuration management applies to a wide range of domains, from huge mechanical systems to electronic devices to software, a system being very often a mix of a mechanical systems with electronic devices and software to control and monitor everything (a car for instance).&lt;/p&gt;
&lt;p&gt;There are many standards for configuration management, depending on the business area. A few of them are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CMMI for Development, version 1.2 Configuration Management&lt;/li&gt;
&lt;li&gt;ANSI/EIA-649-1998 National Consensus Standard for Configuration Management&lt;/li&gt;
&lt;li&gt;EIA-649-A 2004 National Consensus Standard for Configuration Management&lt;/li&gt;
&lt;li&gt;TechAmerica/ANSI EIA-649-B 2011 Configuration Management Standard&lt;/li&gt;
&lt;li&gt;ISO 10007:2003 Quality management systems &amp;#8211; Guidelines for configuration management&lt;/li&gt;
&lt;li&gt;Federal Standard 1037C&lt;/li&gt;
&lt;li&gt;STANAG 4159 NATO Materiel Configuration Management Policy and Procedures for Multinational Joint Projects&lt;/li&gt;
&lt;li&gt;STANAG 4427 Introduction of Allied Configuration Management Publications (ACMPs)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a first introduction to configuration management principles and vocabulary, you can refer to the configuration management wikipedia page : http://en.wikipedia.org/wiki/Configuration_management&lt;br /&gt;
If you are in the software industry, CMMI (Capability Maturity Model Integration) for development is one of the references.&lt;/p&gt;
&lt;p&gt;As stated by the CMMI approach, &amp;#8220;The purpose of Configuration Management (CM) is to establish and maintain the integrity of work products using configuration identification, configuration control, configuration status accounting, and configuration audits.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Nuxeo offers many tools and features that just need to be leveraged and adapted for a configuration management project. As part of a proof of concept, we developed some custom features to handle a configuration management project, using Nuxeo Studio and Nuxeo IDE.&lt;/p&gt;
&lt;p&gt;The result is a &lt;a href="http://doc.nuxeo.com/x/qYGE" title="Nuxeo Studio Application templates"&gt;Nuxeo Studio Application&lt;/a&gt; Template and a custom operation developed with Nuxeo IDE. Although this first template is not a complete configuration management application, it shows how Nuxeo can be used to handle concepts like configuration, configuration items, and baselines from creation, manipulation, to audit and verification.&lt;/p&gt;
&lt;h2&gt;The Studio Application Template&lt;/h2&gt;
&lt;p&gt;In Nuxeo Studio, you will find an Application Template (Settings and Versioning) called &lt;a href="http://doc.nuxeo.com/x/b4Ce" title="Configuration Management"&gt;Configuration_Management&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The logic of the template is to provide tools to manage project documentation through configuration management from creation to audit and control.&lt;/p&gt;
&lt;h3&gt;Our Approach to a Configuration Management Template&lt;/h3&gt;
&lt;p&gt;A documentation tree to be managed by the application is called a Configuration. Every file and folder created in it will be under configuration management control.&lt;/p&gt;
&lt;p&gt;For that, they have specific metadata inherited from the schema &amp;#8220;configuration_management&amp;#8221;. For example, every file is linked to its parent configuration and has a unique reference given on creation. If a document is copied into another configuration, the parent configuration is updated, but the reference stays the same. It enables to watch a file throughout its configurations and evolutions (a specific tab is added on the type File to display every location and configuration of the file copies).&lt;/p&gt;
&lt;p&gt;The versioning system of Nuxeo is used to manage and know which files are validated or working versions. By choice, every minor version is know as a reviewing and working version whereas major version are used only for validated version of the document. Please note that no specific validation process, such as a RACI, has been configured for this first version.&lt;/p&gt;
&lt;p&gt;So working under configuration management with Nuxeo starts by creating a Configuration (one per project or product typically). Then create the project tree and the project files. These files can be new files or can be copied (forked) from other projects. The File minor and major versions are used to know which are validated or not, and the Configuration tab on Files gives a look to all major version and copies of this file throughout the system.&lt;/p&gt;
&lt;h3&gt;Baseline&lt;/h3&gt;
&lt;p&gt;One very important aspect of configuration management is to track the state of the documentation set at key moments of the project, for example at client releases. These snapshots of the configuration state are called baselines. A baseline reflects the state of the configuration at a specific moment &amp;#8212; it&amp;#8217;s a view of latest validated versions of all documents of the configuration.&lt;/p&gt;
&lt;p&gt;To manage baselines, a doc type called Baseline can be created into a Baseline_library. By default, a Baseline is in pending state as the baseline can be prepared and then generated only when needed. A user action is provided on the Baseline Folder Toolbar to actually baseline the configuration.&lt;/p&gt;
&lt;p&gt;It launches the baselineConfiguration automation chain, whose role is to set to the baseline to the generated state and actually generate the baseline using a specific automation operation.&lt;/p&gt;
&lt;p&gt;The specific operation is called &amp;#8220;Baseline Configuration&amp;#8221; and has been implemented with Nuxeo IDE.&lt;br /&gt;
The operation calls a recursive method that will copy the configuration tree into the baseline and will also create a virtual copy of the latest validated version of the document.&lt;/p&gt;
&lt;p&gt;This virtual copy is called a proxy in Nuxeo and it&amp;#8217;s a read only copy of the latest major version of the document. (A proxy is very much like a symbolic link on an Unix-like OS: a proxy points to a document and will look like a document from the user point of view) . Proxies are used to be able to see the same document from several places without duplicating data &amp;#8212; exactly what is needed when generating a baseline. We do not want to duplicate the document, just create a link to it. (more info on proxies here: http://doc.nuxeo.com/display/NXDOC/About+the+content+repository#Aboutthecontentrepository-Proxies)&lt;/p&gt;
&lt;p&gt;In the end, when a baseline is generated, it shows the same tree as the parent configuration, but each folder only contain proxies of latest validated version of the files.&lt;/p&gt;
&lt;p&gt;If you take a look at the baseline operation source code, you will see that it gets the configuration parent folder, the baseline parent folder and call a recursive method (baselineFolder) with those 2 folders as parameters. BaselineFolder gets the children of the configuration node:&lt;/p&gt;
&lt;p&gt;    if they are folderish (an attribute in Nuxeo meaning a document type can have children), it copies them into the baseline node and recall itself on each new child node&lt;br /&gt;
    if the node is not folderish, it looks for the latest major version and create a proxy of the document into the baseline node.     &lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Configuration management is a complex process, but using the right tool can ease up things.&lt;/p&gt;
&lt;p&gt;There are many keys to a successful configuration management system, one of them is identification and control of the configuration and its configuration items, and another one is managing the different roles in your system. We decided to focus this proof of concept on the identification and control of the items throughout their evolutions in the system. To do so, we used Nuxeo features such as versioning, proxies, content views and extensibility. In a final application, other Nuxeo features such as relation, document locking and workflows would probably leveraged too.&lt;/p&gt;
&lt;p&gt;Please do not hesitate to try today&amp;#8217;s example and give us feedback &amp;#8212; we are also very interested to discuss how you may have set up configuration management process in your organization.&lt;/p&gt;
&lt;h3&gt;Ressources :&lt;/h3&gt;
&lt;p&gt;Here is the documentation page of the Studio Application templates, on this page you will find more detailed information about the application template, you will also find links to the market place package, the github project and other interesting ressources.&lt;br /&gt;
&lt;a href="http://doc.nuxeo.com/x/b4Ce" title="Configuration Management"&gt;http://doc.nuxeo.com/x/b4Ce&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://lounge.blogs.nuxeo.com/2012/05/leveraging-nuxeo-platform-configuration-management-projects.html'&gt;http://lounge.blogs.nuxeo.com/2012/05/leveraging-nuxeo-platform-configuration-management-projects.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/Vk41VE4nhSM" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [contentgeeks] Community management — How they do it — part3</title>
    <id>http://www.contentgeeks.net/?p=143</id>
    <updated>2012-05-01T19:29:13Z</updated>
    <published>2012-05-01T19:29:13Z</published>
    <link href="http://www.contentgeeks.net/2012/05/01/community-management-part3/" />
    <author>
      <name>roland</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/roland"&gt;roland&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;h2 dir="ltr"&gt;A purely community driven enterprise-grade Content Management System?&lt;/h2&gt;
&lt;p&gt;While asking the &lt;a href="http://www.contentgeeks.net/2012/04/11/community-management-part2/" title="community-management-part2/"&gt;previous question&lt;/a&gt;, I was thinking about how, in the CMS (ECM or WCM) space, we’ve ended up in a situation where Open Source now holds a very important position in the market as opposed to proprietary solutions and is often cited as a major requirement. However, unlike lower levels of the software stack, I’ve also noticed that almost all projects are now backed by a software company and that there are no community driven projects, well, at least none of importance! This was then my next  question to my panel:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the CMS, ECM or WCM space, all open source projects are now commercially backed.&lt;/strong&gt; &lt;strong&gt;Do you believe a project could emerge that’s totally community driven?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Of course, as all of them are working for commercial vendors, I wasn’t expecting them to surprise me with a YES, but still, I was really curious to get their thoughts!&lt;/p&gt;
&lt;p&gt;According to &lt;strong&gt;Tjeerd&lt;/strong&gt; from &lt;a href="http://www.onehippo.com/"&gt;Hippo&lt;/a&gt;, it’s a lot about the use case that the software is aiming to solve. If the use case is on the business-side, chances are high that any software project will, or will need to be, commercially backed:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“A great idea can arise from anyone and with enough willpower it’s always possible to create a new product. It differs depending on what the end goal is of a software product (framework or solving an end-user’s problem) and if it can become&lt;a href="http://mike2.openmethodology.org/wiki/ECM_Maturity_Model_%28ecm3%29"&gt; advanced&lt;/a&gt; enough to compete. Tony Byrne, founder of the&lt;a href="http://www.realstorygroup.com/"&gt; Real Story Group&lt;/a&gt;, once showed a presentation at a Jboye Aarhus event on how OS CMS players over time moved from purely community driven into commercial OS players.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In our view the more software is focused on solving a business case, the more likely it is to become commercially backed.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I like the idea, though you could argue that Linux is still independent and not exactly “commercially backed”, yet still very much solving business needs, no?&lt;/p&gt;
&lt;p&gt;For &lt;strong&gt;James&lt;/strong&gt; from &lt;a href="http://www.liferay.com/" title="Liferay"&gt;Liferay&lt;/a&gt;, this is a possible option, and indeed, James is making a reference to Linux, but he also brings the thought that this, first, would be very hard to achieve and, second, would most likely, at one point or another fall into the commercially backed category.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Of course they could! Most open source projects start with no corporate backing, and a few of them remain that way and are successful (see: Linux). It takes an immense amount of effort to produce and evangelize good and useful software, so there are only a handful of highly successful, non-commercially-backed projects, because most people want to be paid for their work so they can do other fun things (buy new clothes, feed their family, etc).”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Laurent (from &lt;a href="http://www.nuxeo.com" title="Nuxeo"&gt;Nuxeo&lt;/a&gt;) gives some good insight as well, suggesting that first, developers (and their interest centers) are changing and might not be into the kind of projects we’re talking about, still, why not a foundation-hosted project? That is a real question to me as well!&lt;br /&gt;
&lt;em&gt;“As much as I would like to believe it possible, I’m afraid it&amp;#8217;s not. :) Projects like that are huge, they take lots of work. I’m not talking about lightweight CMS here, but more about full fledged content management projects. Mobilizing developers for that kind of project will probably be hard since the trend right now is more about small, usually mobile, applications. I sense developers are less likely to regroup than in the past, when it was hard to setup a community website, source hosting, ticket systems etc&amp;#8230; Now you just have to share your project on github&amp;#8230; (Damn&amp;#8230;I sound so old school open source right now, &lt;a href="http://www.mikealrogers.com/posts/apache-considered-harmful.html"&gt;http://www.mikealrogers.com/posts/apache-considered-harmful.html&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;There might also be a chance on projects backed up by foundations like Eclipse or Apache, but again the scope of those projects is usually a bit thinner than a whole ready-to-go ECM stack.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And Nicolas, from &lt;a href="http://www.ez.no" title="ez"&gt;eZ&lt;/a&gt;,actually goes in the same direction&amp;#8230;&lt;br /&gt;
&lt;em&gt;“I doubt this, given the evolution-pace in the Web today. Development times are boiled-down, shortened down to the wire, and funding is strongly recommended to get dedicated teams to truly innovate.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;On the other hand, I can hardly picture a proprietary software editor keeping-up with the innovation pace of the winning duo: vendor + community.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What did I learn from this? Definitely, times are changing. There was a time when any OSS-marked supporter would tell you Open Source would rule the whole word by itself! My conviction is that there is a lot in Tjeerd’s answer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The more the software is solving a commodity infrastructure problem, the more it can easily be co-developed by a community of independent developers, potentially (but not necessarily) helped and guided by joining a foundation, with all its facilities.&lt;/li&gt;
&lt;li&gt;The more the software is made to directly answer business needs, the less it can be developed by a community itself, and even if Content Management is getting close to infrastructure in some ways, it is still very business related. I would say the same is true for other software genres like CRM or ERP&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do you have a different point of view? Feel free to comment below!&lt;/p&gt;
&lt;div class="wp-caption alignleft" id="attachment_144"&gt;&lt;a href="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/05/Pizza-at-a-liferay-meetup.jpg" rel="lightbox[143]" title="Pizza-at-a-liferay-meetup"&gt;&lt;img alt="" class="wp-image-144" height="180" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/05/Pizza-at-a-liferay-meetup-300x225.jpg" title="Pizza-at-a-liferay-meetup" width="240" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The Pizza ritual at the Liferay Austin User Group&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;In the next post I&amp;#8217;ll share James, Nicolas and Laurent&amp;#8217;s answers to my last question, &lt;em&gt;&amp;#8220;If your company was bought and you had to explain to your new boss why community management is important, and had only 1 sentence to save your job, what would it be?&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://www.contentgeeks.net/2012/05/01/community-management-part3/'&gt;http://www.contentgeeks.net/2012/05/01/community-management-part3/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/JRa_WFJi6UQ" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [concena] Nuxeo, DAM, ImageMagick and really big files</title>
    <id>http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14814</id>
    <updated>2012-04-29T15:54:04Z</updated>
    <published>2012-04-29T15:54:04Z</published>
    <link href="http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14814" />
    <author>
      <name>Bruce Grant</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Bruce%20Grant"&gt;Bruce Grant&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;
	Dam frustrating is a good way to describe my last three days.&amp;nbsp;I have been working to tune the Nuxeo DAM import for very large images … frustrating because there are many pieces, moving big images takes time, and debugging/document the whole process introduces a natural latency.&lt;/p&gt;
&lt;p&gt;
	Nuxeo import relies on ImageMagick for image-related tasks (e.g. resizing and cropping) - during import ImageMagick is used heavily and is by far the most time-consuming element of the import process. If ImageMagick slows then so does your import.&lt;/p&gt;
&lt;p&gt;
	Nuxeo DAM, for that matter the core imaging code, works really well with most images. "Works really well" extends to the integration with ImageMagick. But take a step into the world of very large/complex image files and the works well fantasy world takes a halting step into reality.&lt;/p&gt;
&lt;p&gt;
	What do I mean by very large image (or complex) files? Three possible interpretations:&lt;/p&gt;
&lt;p&gt;
	In absolute terms, any image file over 2GB is very large (well, technically anything over 2^31-1, which is the limit of an int value in Java). This limit is important because any code that uses int values for file size or related processing will be limited to 2GB files. There are still some limitations within Nuxeo when it comes to uploading very large files (not just images) - e.g., in DAM I can import a 3.5GB video file through the importer but the same import fails when attempted through the UI.&amp;nbsp; I do know that Nuxeo developers have been working actively to remove these barriers.&lt;/p&gt;
&lt;p&gt;
	In relative terms, very large can be any image that is big enough (or the requested operation complex enough) to require more physical memory during image processing than your OS can make available. For example, images in the 1GB range can be a problem on a Windows box with 4GB of RAM (assuming Nuxeo server is also running). ImageMagick runs fastest when the entire pixel map can be loaded into RAM.&amp;nbsp; If the entire pixel map can't be loaded into memory then image processing slows dramatically – that’s because ImageMagick will page parts of the image in/out of memory to complete the requested task.&lt;/p&gt;
&lt;p&gt;
	Complexity of the image file itself can exacerbate the situation. For example, multi-layered PSD images require far more processing time than a single layer file of the same size. To the ImageMagick &lt;strong&gt;&lt;em&gt;identify&lt;/em&gt;&lt;/strong&gt; command each layer is effectively an image of its own, with its own metadata. So it takes ImageMagick much longer to troll through multiple images to extract the required information.&lt;/p&gt;
&lt;p&gt;
	Add to this complexity the differences in memory allocation/reservation of different operating systems and it makes it challenging to tune Nuxeo DAM and ImageMagick.&lt;/p&gt;
&lt;p&gt;
	I have spent the last three days running through numerous configurations, file sizes, limits, memory allocations, etc. trying to better understand the issues in order to move forward. What I found is...&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		So long as you're running VCS then Postgres tuning is not really important for image processing (of course it is very important for other reasons)&lt;/li&gt;
	&lt;li&gt;
		Technically, the amount of RAM you set aside for Nuxeo will not limit the size of images you can import, but practically speaking, if you don't allocate enough RAM to reflect the size and volume of images imported, displayed, etc. in your system then your DAM solution will be less than useful. The RAM required is dependent on numerous other factors so it's difficult to be entirely prescriptive&lt;/li&gt;
	&lt;li&gt;
		The amount of physical RAM available to ImageMagick is absolutely critical to timely image processing. Not enough RAM and ImageMagick will page to disk, run times will increase dramatically and it's likely your Nuxeo transaction will timeout. The end result … nothing will be imported (the transaction will be rolled back). You might want to set upper limits on the resources available to ImageMagick (using environment variable) so all available RAM isn't gobbled up&lt;/li&gt;
	&lt;li&gt;
		The speed of your disk is also important. Slow disk = slower image processing. Longer to read, longer to write, longer to create any interim temp files. If your disk is on the network then make sure it's on a high speed connection. You might want to consider a solid state drive for ImageMagick temporary files.&lt;/li&gt;
	&lt;li&gt;
		The location of ImageMagick temp files is important. ImageMagick commands produce temp files, the location of which can be controlled with the MAGICK_TEMPORARY_PATH environment variable. Set the path variable to a disk with lots of free space, preferably not the same disk as your OS and Nuxeo are on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	Each case is difference, but the end result for Nuxeo-ImageMagick import tuning: expect to spend extra time understanding your requirements, get ready to buy more memory, and be prepared to put in some effort to get everything running quickly!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14814'&gt;http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14814&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/5rQcjcLuiGo" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Q&amp;A Friday] Will Nuxeo upgrade its technical Java Stack?</title>
    <id>http://dev.blogs.nuxeo.com/?p=4483</id>
    <updated>2012-04-27T13:46:57Z</updated>
    <published>2012-04-27T13:46:57Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/qa-friday-cdi-tomcat7.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;div class="wp-caption alignright" id="attachment_4385"&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/02/question.png"&gt;&lt;img alt="CDI? Tomcat7?" class="size-full wp-image-4385" height="123" src="http://dev.blogs.nuxeo.com/files/2012/02/question.png" width="157" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;CDI? Tomcat7?&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://answers.nuxeo.com/users/31/nelson-silva/" title="Nelson Silva on Nuxeo Answers"&gt;Nelson Silva&lt;/a&gt; asked us two questions: &lt;a href="http://answers.nuxeo.com/questions/2424/planning-seam-alternatives" title="Planning Seam alternatives?"&gt;If we plan to replace Seam in the future&lt;/a&gt; and &lt;a href="http://answers.nuxeo.com/questions/2425/is-tomcat-7-support-planned" title="Is Tomcat 7 support planned ?"&gt;is Tomcat 7 support planned?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;About Seam, we will use CDI instead, mostly because it&amp;#8217;s close to Seam concepts and because it&amp;#8217;s a JSR (&lt;a href="http://jcp.org/en/jsr/detail?id=299" title="JSR 299: Contexts and Dependency Injection for the JavaTM EE platform"&gt;JSR-299&lt;/a&gt;). We try to use standards as much as we can in Nuxeo.&lt;/p&gt;
&lt;p&gt;We already have a code sample available on &lt;a href="https://github.com/tiry/nuxeo-cdi-sample" title="nuxeo-cdi-sample"&gt;Github&lt;/a&gt;. It builds a nuxeo-cdi-distribution, which is a coreserver distribution customized to run CDI/JSF2 components in nuxeo-cdi-sample.&lt;/p&gt;
&lt;p&gt;About Tomcat 7, the answer here is not as straightforward as the previous one. We&amp;#8217;d be happy to do it, but it&amp;#8217;s not part of our priorities. So as &lt;a href="https://github.com/efge" title="Follow Florent on Github"&gt;Florent&lt;/a&gt; said, we&amp;#8217;ll start the work when it is a higher priority, and there is more demand for it. This might be accelerated if we have customer requests, but this is not yet the case.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve chosen these two questions today because it&amp;#8217;s the perfect opportunity to tell you about the upcoming webinar I&amp;#8217;ll be doing with our CTO, &lt;a href="https://github.com/tiry/" title="Follow Thierry on Github"&gt;Thierry Delprat&lt;/a&gt;. Simply entitled &lt;a href="http://www.nuxeo.com/en/resource-center/webinar/nuxeo-cto-hour" title="An Hour with the CTO and the Community Liaison of Nuxeo"&gt;&amp;#8216;An Hour with the CTO and the Community Liaison of Nuxeo&amp;#8217;&lt;/a&gt;, we&amp;#8217;ll talk about some of the features that will be in the Nuxeo Platform version 5.6, and tell you a bit more about the roadmap and where we&amp;#8217;re heading technically. We want to make this as interactive as possible, so don&amp;#8217;t hesitate to come and ask your questions. If you cannot attend the webinar, feel free to ask questions in the comment section of this blog or on &lt;a href="http://answers.nuxeo.com" title="Nuxeo Answers"&gt;answers.nuxeo.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/qa-friday-cdi-tomcat7.html'&gt;http://dev.blogs.nuxeo.com/2012/04/qa-friday-cdi-tomcat7.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/4mmmOZT8Pvk" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] Next Nuxeo Code Sprint – June 21-22, 2012</title>
    <id>http://dev.blogs.nuxeo.com/?p=4481</id>
    <updated>2012-04-26T13:38:11Z</updated>
    <published>2012-04-26T13:38:11Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/nuxeo-code-sprint-21-22-june-2012.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/04/dev-sprint-nxw111.jpg"&gt;&lt;img alt="Dev sprint nxw11" class="alignright size-medium wp-image-4482" height="200" src="http://dev.blogs.nuxeo.com/files/2012/04/dev-sprint-nxw111-300x200.jpg" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hi guys, I wanted to let you know that we have planned the next Nuxeo code sprint. It&amp;#8217;s scheduled for June 21-22, 2012, and will be held at Nuxeo&amp;#8217;s office in Paris. All the details are on our &lt;a href="http://doc.nuxeo.com/x/T4SE" title="Next Sprint"&gt;wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You are all more than welcome to participate. The goal of this sprint, which will occur shortly after the Nuxeo Platform 5.6 code freeze, is to produce addons for the platform. There is no particular theme, as long as it&amp;#8217;s related to Nuxeo, of course. I strongly encourage participants to discuss their subject on the wiki prior to the sprint. It&amp;#8217;s always good to exchange information, especially on how you plan to implement it, so that we can give you suggestions.&lt;/p&gt;
&lt;p&gt;And even if you don&amp;#8217;t plan on coming, don&amp;#8217;t hesitate to add your thoughts to the wiki page, and discuss features you&amp;#8217;d like to see. You might inspire a team that will take on this project :)&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/nuxeo-code-sprint-21-22-june-2012.html'&gt;http://dev.blogs.nuxeo.com/2012/04/nuxeo-code-sprint-21-22-june-2012.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/Iq6Akcvnb-4" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [marketing] The Many Faces of Content Management</title>
    <id>http://marketing.blogs.nuxeo.com/?p=1017</id>
    <updated>2012-04-25T09:16:19Z</updated>
    <published>2012-04-25T09:16:19Z</published>
    <link href="http://marketing.blogs.nuxeo.com/2012/04/faces-content-management.html" />
    <author>
      <name>Jane Zupan</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Jane%20Zupan"&gt;Jane Zupan&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Content is everywhere, it is central to many business processes, and it is prolific. Content goes far beyond simple documents and multimedia files; &lt;em&gt;&lt;strong&gt;content is information&lt;/strong&gt;&lt;/em&gt;. An email exchange with a government agency, corporate policies and regulations, university course notes and discussions, team project meeting reports and interactions &amp;#8211; different forms of content have varying lifecycle and distribution requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Content management &amp;#8212; as an initiative, a technology, and a set of guidelines &amp;#8212; is the ticket to making the content work effectively, in any environment, even in the face of rapid growth.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A platform approach to content management offers the flexibility to adapt the technology to the context, whatever it may be, and allows for change and growth as requirements evolve, making it a pragmatic and sustainable choice.&lt;/p&gt;
&lt;p&gt;At Nuxeo, we’ve been witness to a growing trend with our clients that gets us really excited. I’ve talked to a number of clients in the last 6 months who are telling a similar story, which is different from the story clients told me 2 years ago. It goes something like this:&lt;a href="http://marketing.blogs.nuxeo.com/category/meet-the-team"&gt;&lt;img alt="" class="alignright size-medium wp-image-1023" height="258" src="http://marketing.blogs.nuxeo.com/files/2012/04/Many-Faces-of-Nuxeo5-300x258.png" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We downloaded the Nuxeo Platform to help us manage the documents in our department or organization.&lt;/li&gt;
&lt;li&gt;We started to understand the extent of the platform capabilities.&lt;/li&gt;
&lt;li&gt;We have plans to deploy the Nuxeo Platform for all of our content-centric applications, from inventory management to email management to control of marketing collateral.&lt;/li&gt;
&lt;li&gt;We have plans to ultimately run our business on the Nuxeo Platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Businesses all have different requirements in terms of content management, but the emerging “aha” is that many business processes are fundamentally centered around content in some shape or form &amp;#8211; documents, virtual collaboration exchanges, media files, and so on. In the past, business processes often flowed through email, with a document attachment. In the workflow-by-email method, search, versioning, collaboration, digital and secure access, are handled haphazardly, if at all. Broader information governance issues, like regulatory compliance, or even loss of information due to employee turnover, are very tricky without a tool and a method in place.&lt;/p&gt;
&lt;p&gt;Today, the flexibility and adaptability of a content management platform enables solution architects to build the right solution for any content-heavy context, resulting in more efficient and productive business processes.&lt;strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So why do we get excited about this emerging trend?&lt;/strong&gt;&lt;br /&gt;
For a number of reasons.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This validates what we’ve been saying &amp;#8211; &lt;strong&gt;Nuxeo as a content management platform for business applications&lt;/strong&gt; offers a helluva good value proposition. We’re seeing more and more clients who understand the power of the platform approach.&lt;/li&gt;
&lt;li&gt;It’s gratifying to put a lot of effort into a developing a platform that is open, modular, and highly customizable, and see &lt;strong&gt;clients use 80% of its capabilities, rather than just 20%.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;When our customers succeed, we succeed.&lt;/strong&gt; Our &lt;em&gt;raison d’etre&lt;/em&gt; is to help organizations build sustainable content-centric applications. They’re doing that, in large numbers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We predict that this trend of using a platform for building a wide array of content-centric applications will continue, and we invite you to share your thoughts below, or during our &lt;a href="http://www.nuxeo.com/en/webinar-042612"&gt;webinar on content management project success factors&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://marketing.blogs.nuxeo.com/2012/04/faces-content-management.html'&gt;http://marketing.blogs.nuxeo.com/2012/04/faces-content-management.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/QfEZrRhujY4" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Monday Dev Heaven] Nuxeo @ First Devoxx France – 2012 Edition</title>
    <id>http://dev.blogs.nuxeo.com/?p=4478</id>
    <updated>2012-04-23T17:13:13Z</updated>
    <published>2012-04-23T17:13:13Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/devoxx-france-2012-edition.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/04/logo_devoxx_france_big.jpg"&gt;&lt;img alt="DevoxxFR" class="alignright size-medium wp-image-4479" height="154" src="http://dev.blogs.nuxeo.com/files/2012/04/logo_devoxx_france_big-300x154.jpg" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Part of the Nuxeo team attended &lt;a href="http://www.devoxx.fr"&gt;Devoxx France&lt;/a&gt; last week. If you don&amp;#8217;t know about Devoxx, It&amp;#8217;s an independent Java developer conference. This was the first French edition and I must say it went amazingly well for a first try, so kudos to the 20-person organizing team for pulling this off so smoothly.&lt;/p&gt;
&lt;p&gt;We attended many, many different and interesting sessions. There&amp;#8217;s a lot to say so I&amp;#8217;ll try to be short. And all the sessions will be available on &lt;a href="http://www.parleys.com/" title="Parleys"&gt;Parleys&lt;/a&gt; anyway :)&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll start with a very inspiring talk given by Alexandre Bertails: &lt;a href="http://www.w3.org/2012/Talks/bertails-devoxxfr/linked-data/" title="Linked Data"&gt;Linked Data &amp;#8211; Big Data at Web scale&lt;/a&gt;. The web of data is here, and vendors have to step up. Nuxeo is already engaged in it through the Apache &lt;a href="http://incubator.apache.org/stanbol/index.html" title="Stanbol"&gt;Stanbol&lt;/a&gt; project. This talk made me want to look more into RDFa, WebID and WebACLs.&lt;/p&gt;
&lt;p&gt;There was a lot of interests in new languages. This is not new and reflects what&amp;#8217;s been going on for a while on the Internet. So I went to the &lt;a href="http://ceylon-lang.org" title="Ceylon"&gt;Ceylon&lt;/a&gt; and the &lt;a href="http://blog.jetbrains.com/kotlin/" title="Kotlin"&gt;Kotlin&lt;/a&gt; talks. It&amp;#8217;s funny how those two, as well as many new languages, want to address the same issues, like Java verbosity and null pointer safety. Most Java developers write defensive code, with the sole purpose of handling null objects, making the code less clear than it should be. New languages also have to be compatible with Java. Kotlin does a great job at this. Seamless debugging with Java and Kotlin in intellij was quite impressive.&lt;/p&gt;
&lt;p&gt;If I would have to choose, I think I&amp;#8217;d go for Celyon. I like their approach, summed up by a simple tagline &amp;#8216;say more, more clearly&amp;#8217;. This is a very important factor for an enterprise language, and  a requirement for an open source software vendor, like Nuxeo. Our code has to be easy to read/understand.&lt;/p&gt;
&lt;p&gt;You could really see an interest in Java7. There were talks about JVM bytecode and invokedynamic, which are in a sense linked to the new language trend, and also some talks about the new stuff in Java7, like project coin or NIO2. I really liked the one by &lt;a href="https://twitter.com/jmdoudoux" title="Follow Jean-Michel on twitter"&gt;Jean-Michel Doudoux&lt;/a&gt;, who did a small demo every time he introduced a new feature of NIO2. It was very instructive.&lt;/p&gt;
&lt;p&gt;There were also some talks about client/server architecture. I saw the one from &lt;a href="https://github.com/jamesward" title="Follow James on Github"&gt;James Ward&lt;/a&gt;. He basically said that the client is now Javascript + HTML + CSS. It&amp;#8217;s more than a trend, it&amp;#8217;s already here. I&amp;#8217;ll try to show you how it can be done with WebEngine in a future blog post. This will be the time to test &lt;a href="https://github.com/webjars/" title="Webjars"&gt;Webjars&lt;/a&gt;, a tool that he presented during his talk. It&amp;#8217;s a Maven repo of web libraries wrapped into JAR files.&lt;/p&gt;
&lt;p&gt;The last talk I saw was really unique &amp;#8212; it was a live episode of &lt;a href="http://lescastcodeurs.com/" title="Les Cast Codeurs"&gt;Les Cast Codeurs&lt;/a&gt;, the French Java Posse. We had a lot of fun. You can listen to the episode &lt;a href="http://lescastcodeurs.com/2012/04/les-cast-codeurs-podcast-episode-57-en-direct-de-devoxx-france-2012/" title="Les Cast Codeurs Podcast – Episode 57 – En direct de Devoxx France 2012 "&gt;here&lt;/a&gt; to learn more about Devoxx France 2012. Thanks to &lt;a href="http://www.atlassian.com/" title="Atlassian"&gt;Atlassian&lt;/a&gt; for providing the beer :-D&lt;/p&gt;
&lt;p&gt;So this was a really interesting week for me, because I attended both the &lt;a href="http://dev.blogs.nuxeo.com/2012/04/jenkins-user-conference-paris-2012.html" title="Paris Jenkins User Conference 2012"&gt;Jenkins User Conference&lt;/a&gt; and Devoxx France. I now have a list of things I need to try or look into. Here are some of them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dev.blogs.nuxeo.com/www.eclemma.org/jacoco/" title="JaCoCo"&gt;JaCoCo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ceylon-lang.org/" title="Ceylon"&gt;Ceylon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jboss.org/byteman" title="Byteman"&gt;JBoss Byteman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java7 features (mostly NIO2)&lt;/li&gt;
&lt;li&gt;Webjars&lt;/li&gt;
&lt;li&gt;WebID, WebACLs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I will go back to my usual blog posting pace ;-) See you on Friday!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/devoxx-france-2012-edition.html'&gt;http://dev.blogs.nuxeo.com/2012/04/devoxx-france-2012-edition.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/5f3uQFkjVBc" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [lounge] Coming Soon .. a Facelift for the Nuxeo Summary Tab</title>
    <id>http://lounge.blogs.nuxeo.com/?p=266</id>
    <updated>2012-04-23T13:34:59Z</updated>
    <published>2012-04-23T13:34:59Z</published>
    <link href="http://lounge.blogs.nuxeo.com/2012/04/facelift-nuxeo-summary-tab.html" />
    <author>
      <name>Delphine Renevey</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Delphine%20Renevey"&gt;Delphine Renevey&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;We know you are excited about the upcoming Nuxeo Platform 5.6, and we can’t wait to tell you about it! We’ll be writing a series of blog posts as we develop the next version to whet your appetite.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For those who have been using Nuxeo for years, you know very well the Summary view of a document… and its flaws. It was time for a facelift… but not a superficial Botox one. More like George Clooney&amp;#8217;s. Welcome to Hollywood.&lt;/p&gt;
&lt;p&gt;As you know, we had a certain number of constraints, such as compatibility with previous customizations, scalability, and making it accessible to Nuxeo Studio for customization. So there was hard work behind the scenes also!&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the result!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/Summary-Top-copie1.png"&gt;&lt;img alt="" class="aligncenter  wp-image-296" height="406" src="http://lounge.blogs.nuxeo.com/files/2012/04/Summary-Top-copie1.png" width="629" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Do more in a single tab&lt;/h2&gt;
&lt;p&gt;The first thing was to ease navigation and information access. That&amp;#8217;s why we wanted to provide a better and clearer display of information.&lt;/p&gt;
&lt;p&gt;Now, you can access the most important information from the Summary view. If you don&amp;#8217;t need a specific history or workflow detail, for example, you have all the information you need in the summary.&lt;/p&gt;
&lt;p&gt;For details, you can click the other tabs, but you have all the key info on the first one.&lt;/p&gt;
&lt;h2&gt;Actions&lt;/h2&gt;
&lt;p&gt;We improved the configurability of actions on the Summary tab, and we brought the icons up to date.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/Actions1.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-299" height="35" src="http://lounge.blogs.nuxeo.com/files/2012/04/Actions1.png" width="278" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Share&lt;/h3&gt;
&lt;p&gt;What’s your first reaction when you find an article or a document interesting&lt;span&gt;? Share it!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That is why we had to make the &lt;em&gt;Share&lt;/em&gt; action quick and simple: you just have to copy the selected permalink, and then tweet it, send it by email, etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/Share.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-298" height="235" src="http://lounge.blogs.nuxeo.com/files/2012/04/Share.png" width="462" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Download&lt;/h3&gt;
&lt;p&gt;When you want to download a document to read it offline, or to send it to external people, the download option has to be quick and efficient.&lt;/p&gt;
&lt;p&gt;That is why we now provide a global download option for the document to download all the attached files. If you want to download only one attached document, you will choose the usual green arrow at the attached document level.&lt;/p&gt;
&lt;h3&gt;Follow&lt;/h3&gt;
&lt;p&gt;Instead of  having to choose the actions to subscribe to for email alerts (which is a very modular but complicated way of doing things), Nuxeo now provides a single &amp;#8220;follow&amp;#8221; option to subscribe to all notifications. Follow can apply to a document or a workspace.&lt;/p&gt;
&lt;p&gt;This way, you or your team members won&amp;#8217;t spend time asking yourselves which notification would be interesting: you will just follow!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/follow.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-297" height="43" src="http://lounge.blogs.nuxeo.com/files/2012/04/follow.png" width="281" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&amp;#8220;More&amp;#8221; menu&lt;/h3&gt;
&lt;p&gt;An additional menu has been added. When you already show 5 actions, (i.e. the 5 buttons displayed), the other (and secondary) actions automatically go in the &amp;#8220;More&amp;#8221; menu.&lt;em&gt; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/More.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-300" height="151" src="http://lounge.blogs.nuxeo.com/files/2012/04/More.png" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;New look&lt;/h2&gt;
&lt;h3&gt;A new look for all of the tabs&lt;/h3&gt;
&lt;p&gt;The tabs interface elements have also been redesigned, as you can see below.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/Tabs.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-294" height="499" src="http://lounge.blogs.nuxeo.com/files/2012/04/Tabs.png" width="621" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Participants&lt;/h3&gt;
&lt;p&gt;A new slot is dedicated to the participants of the document: author, contributor and last contributor. Each name also links to the participant&amp;#8217;s profile.&lt;/p&gt;
&lt;p&gt;You find this article interesting? You should go and check the author&amp;#8217;s profile, and his other articles, via his activity feed!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/summary_contributors3.jpg"&gt;&lt;img alt="" class="aligncenter" height="51" src="http://lounge.blogs.nuxeo.com/files/2012/04/summary_contributors3.jpg" width="330" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Redesign of metadata column&lt;/h3&gt;
&lt;p&gt;While we were at it, we also provided a new look for the metadata column, which includes tags, version information, a description, etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/Summary-Top-right1.png"&gt;&lt;img alt="" class="aligncenter size-full wp-image-295" height="403" src="http://lounge.blogs.nuxeo.com/files/2012/04/Summary-Top-right1.png" width="334" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, you just have to wait for the 5.6 release to see it for yourself on &lt;a href="http://nuxeo.com" target="_blank" title="Nuxeo"&gt;Nuxeo&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stay tuned, there&amp;#8217;s more to come!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marketing.blogs.nuxeo.com/2012/01/meet-the-team-delphine-reveney.html" target="_blank" title="Meet the team"&gt;Delphine Renevey&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://lounge.blogs.nuxeo.com/2012/04/facelift-nuxeo-summary-tab.html'&gt;http://lounge.blogs.nuxeo.com/2012/04/facelift-nuxeo-summary-tab.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/TSGJ4BN0a3s" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] Paris Jenkins User Conference 2012</title>
    <id>http://dev.blogs.nuxeo.com/?p=4470</id>
    <updated>2012-04-18T16:39:47Z</updated>
    <published>2012-04-18T16:39:47Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/jenkins-user-conference-paris-2012.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/04/headshot.png"&gt;&lt;img alt="Jenkins" class="alignright size-full wp-image-4474" height="96" src="http://dev.blogs.nuxeo.com/files/2012/04/headshot.png" width="96" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yesterday I was at the Paris Jenkins User Conference 2012 with &lt;a href="https://github.com/jcarsique" title="Follow Julien on Github"&gt;Julien Carsique&lt;/a&gt;. Julien was talking about how we use &lt;a href="http://jenkins-ci.org/" title="Jenkins CI"&gt;Jenkins&lt;/a&gt; at Nuxeo. For those of you who don&amp;#8217;t know Jenkins, it&amp;#8217;s a wonderful piece of software used to run and automate &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank"&gt;continuous integration&lt;/a&gt; jobs. We previously wrote a &lt;a href="http://dev.blogs.nuxeo.com/2012/02/optimize-continuous-integration.html" title="[Monday Dev Heaven] Continuous Integration at Nuxeo"&gt;blog&lt;/a&gt; about this.&lt;/p&gt;
&lt;p&gt;So about Julien&amp;#8217;s presentation, you can check out the slides on &lt;a href="http://www.nuxeo.com/en/resource-center/presentations/How-Nuxeo-uses-the-open-source-continuous-integration-server-Jenkins" target="_blank"&gt;nuxeo.com&lt;/a&gt; or right here:&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;He explained how Nuxeo has been using Jenkins for continuous integration for the past five years. We started small and added more and more jobs. At first it was for default platform tests only, and it evolved to include tests on different OS, JDK or Databases, automatic release process, code coverage tools etc.. Then he went on the different issues we had because of the ever increasing number of jobs and how we tried to solve them using for instance &lt;a href="http://pypi.python.org/pypi/jenkviz/0.3.0" title="Crawl a jenkins build and report stats and graphs about the build flow"&gt;Jenkviz&lt;/a&gt;. It&amp;#8217;s a tool that crawls a jenkins build and reports stats and graphs about the build flow. It was pretty cool to get attention the attention of the creator of the Jenkins CI server on this subject &lt;img alt=":)" class="wp-smiley" src="http://dev.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt;  thanks &lt;a href="http://kohsuke.org/" target="_blank"&gt;Kohsuke&lt;/a&gt;!&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@kohsukekawa: I&amp;#8217;m quite impressed at the degree of sophistication that Nuxeo setup is at. We need a super #JenkinsCI admin award for him!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Looks like attendees were interested in what we had to say. Some also looked scared seeing our &lt;a href="http://qa.nuxeo.org/jenkins/" title="Jenkins - Nuxeo"&gt;Jenkins dashboard&lt;/a&gt; &lt;img alt=":-)" class="wp-smiley" src="http://dev.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt;  . It&amp;#8217;s true that it can look impressive but keep in mind that we started using Jenkins five years ago.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/04/qa.png"&gt;&lt;img alt="Jenkins - Nuxeo Continuous Integration" class="aligncenter size-medium wp-image-4473" height="168" src="http://dev.blogs.nuxeo.com/files/2012/04/qa-300x168.png" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We also attended to some pretty cool talks, starting with a nice keynote from Kohsuke. Then we listened to &lt;a href="https://github.com/ndeloof" title="Follow Nicolas on Github"&gt;Nicolas De Loof&lt;/a&gt; and &lt;a href="https://github.com/mathieuancelin" title="Follow Mathieu on Github"&gt;Mathieu Ancelin&lt;/a&gt; who presented their &lt;a href="https://wiki.jenkins-ci.org/x/bQ6MAw" title="Build Flow Plugin"&gt;Build-Flow Plugin&lt;/a&gt;. It was really interesting. They showed us how to manage jobs pipeline using a groovy DSL. The syntax is simple and straightforward. It looks easy and efficient. Only drawback when using this system is that it replaces the existing triggers. So we won&amp;#8217;t be able to use it with our current build setup.&lt;/p&gt;
&lt;p&gt;Another talk got my attention. &lt;a href="https://github.com/xseignard" title="Follow Xavier on Github"&gt;Xavier Seignard&lt;/a&gt; from Pod Programming and &lt;a href="https://github.com/mickaelistria" title="Follow Mickael on Github"&gt;Mickael Istria&lt;/a&gt; from JBoss presented Tycho, Jenkins &amp;amp; Sonar: The Eclipse Build Dream Team. It was nice to learn more about Tycho and to see that Eclipse (RCP/OSGI) apps works well with Jenkins and Sonar. And this was another good point about their presentation: they motivated us to test Sonar with &lt;a href="http://www.eclemma.org/jacoco/" title="Java Code Coverage Library"&gt;JaCoCo&lt;/a&gt;, a Java Code Coverage Library. It looked so simple to setup and use, we definitely must try it at Nuxeo! Then I had a small chat with them, it was nice meeting you guys &lt;img alt=":)" class="wp-smiley" src="http://dev.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt; &lt;/p&gt;
&lt;p&gt;Overall we had a great time, it was cool to see that much people into Jenkins. Hope there will be even more attendees next year. Congrats to &lt;a href="http://www.cloudbees.com/" title="Cloudbees"&gt;Cloudbees&lt;/a&gt; for the organization! Next conference is &lt;a href="http://www.devoxx.com/display/DV11/Home" target="_blank"&gt;Devoxx&lt;/a&gt; France tomorrow and Friday, maybe we&amp;#8217;ll see you there &lt;img alt=":)" class="wp-smiley" src="http://dev.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt; &lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/jenkins-user-conference-paris-2012.html'&gt;http://dev.blogs.nuxeo.com/2012/04/jenkins-user-conference-paris-2012.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/4bYWC-jenZ4" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [marketing] [meet the team] Solen Guitter</title>
    <id>http://marketing.blogs.nuxeo.com/?p=1013</id>
    <updated>2012-04-17T03:45:31Z</updated>
    <published>2012-04-17T03:45:31Z</published>
    <link href="http://marketing.blogs.nuxeo.com/2012/04/meet-solen-guitter.html" />
    <author>
      <name>nuxeo</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/nuxeo"&gt;nuxeo&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://marketing.blogs.nuxeo.com/files/2012/04/solen-full.jpg"&gt;&lt;img alt="" class="alignright size-medium wp-image-1014" height="300" src="http://marketing.blogs.nuxeo.com/files/2012/04/solen-full-243x300.jpg" title="solen-full" width="243" /&gt;&lt;/a&gt;This month, meet Solen Guitter, Nuxeo’s main tech writer. She is the one behind Nuxeo’s documentation effort, a very important piece of the software puzzle!&lt;/p&gt;
&lt;p&gt;&lt;strong id="internal-source-marker_0.72535758651793"&gt;Tell me about your role at Nuxeo.&lt;br /&gt;
&lt;/strong&gt;I’m the main technical writer for all of Nuxeo products, which means I write and manage all of the how-to documentation and installation steps on the web site. I also work very closely with the engineering team as they often write their own technical documentation and in this capacity, I don’t write, but I edit, clean up, and organize their documentation so that users can easily find new information and also pay attention to where it’s placed, making sure its location makes sense and corresponds to the subject matter.  &lt;strong id="internal-source-marker_0.72535758651793"&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who is the main audience that you write for?&lt;/strong&gt;&lt;br /&gt;
We try to keep our documentation consistent for all of our users, whether they’re end-users, system integrators, developers, or IT managers who are considering choosing Nuxeo. But we’re always looking to improve, so we recently launched a &lt;a href="http://lounge.blogs.nuxeo.com/2012/04/documentation.html" target="_blank"&gt;survey&lt;/a&gt; to find out what our audience thinks of our documentation, what they use, and what’s missing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How long have you worked at Nuxeo?&lt;/strong&gt;&lt;br /&gt;
I’ve worked at Nuxeo since October 2005, so I’m officially one of the “oldest” employees now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Did you focus on a specific field of study to work in this field?&lt;/strong&gt;&lt;br /&gt;
Yes. I started out studying translation, English and German to French. Afterwards, my school offered an additional technical writing program, so I stayed on to complete that, which led to an internship at Nuxeo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You do some training for clients and partners, how often does this happen and do you think it’s helpful?&lt;/strong&gt;&lt;br /&gt;
I do functional training for clients mainly. Usually this happens at the beginning of projects when they need the most help. I walk users and developers through the features so they know what the platform can do and identify areas that they may want to customize.&lt;/p&gt;
&lt;p&gt;It’s very helpful for both our clients and for us as it’s a great opportunity to see what features they find useful and see what areas they’re having difficulty with. They don’t necessarily have the same reflexes when it comes to using the product, so the training also provides us with feedback on usability.&lt;/p&gt;
&lt;p&gt;Currently, I do about 3 or 4 trainings a year, but will begin doing training on Studio soon covering basic functionality and configuration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How has the Nuxeo documentation evolved over the last 2-3 years?&lt;/strong&gt;&lt;br /&gt;
One way is that we started using Confluence, which is really easy to use, so not only does it simplify creating new documents, but it’s also more convenient for users to search and find the information they need.&lt;/p&gt;
&lt;p&gt;We’re also trying to come up with ways to help our users expand the way they use our products, so right now we’re putting together short use cases or scenarios and then creating documentation that walks the user through the necessary steps. The goal is to have a technical cookbook with about 10-15 “recipes” that will help users start a Nuxeo project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do you go about gathering info to be able to write the documentation?&lt;/strong&gt;&lt;br /&gt;
The engineers tend to involve me as soon as they can in the process, so when they develop a new feature, they ask me to test it. As I have to play with it in order to write about it, I usually go through the installation process just like a regular user would and this helps me to identify any specific items that should be covered in the documentation, plus it allows me to find bugs. Of course, if there’s something I don’t understand I’ll consult with the developers and I always ask them to read the documentation after I finish writing.&lt;/p&gt;
&lt;p&gt;When it comes to editing the technical documentation that’s written by the engineers, I usually have to consult with them more because I’m not directly playing with the feature. I have to make sure I understand things correctly and help convey this in the clearest way to our users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do you look at other companies and the way they present documentation to get ideas and/or best practices?&lt;/strong&gt;&lt;br /&gt;
Yes, sometimes. For instance, I’m a fan of the way Atlassian does their documentation, I think it’s very well done. I also take a look at documentation that my friends from university write, it helps me keep my skills sharp.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are some of the tools you use to do your job?&lt;/strong&gt;&lt;br /&gt;
I mainly use Confluence. The developers use Javadoc, but I don’t use it as much. For the main Nuxeo web site, I do less writing, even if some small piece of documentation are needed here and there, for instance for downloads or trials. When it comes to blogs, my first post was indeed very recent and you might want to &lt;a href="http://lounge.blogs.nuxeo.com/2012/04/documentation.html" target="_blank" title="Documentation Survey"&gt;check it out&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;There’s also documentation embedded in studio. It’s meant to explain features within the product but eventually we want a wizard of some sort to help users while they use the product.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are some of the challenges you face?&lt;/strong&gt;&lt;br /&gt;
Finding time to do everything. As I mentioned before, I do some product testing and this can take up a lot of time depending on what I find during the process. At first, the engineers were very happy to have me test and now I think they get a little depressed as I usually identify something that they’ll have to fix. But, in the end, it’s a really critical step. Since I don’t know the features, I see all the little things that developers who have been working on the platform for weeks don’t and I ask questions that they normally don’t ask.&lt;/p&gt;
&lt;p&gt;I just have to be confident enough to speak up and ask the developers for more information when an issue becomes too technical. For these situations, I just play blonde, and I suppose actually being blonde comes in handy. [laughs]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What are you working on now?&lt;/strong&gt;&lt;br /&gt;
I’m starting on the documentation for the 5.6 release, which is tentatively slated for June. There’s also a &lt;a href="http://lounge.blogs.nuxeo.com/2012/04/documentation.html" target="_blank" title="Documentation Survey"&gt;survey&lt;/a&gt; that we’re working on, we want to send it to everyone who comes to the documentation site. And in the coming weeks we hope to have a new cookbook ready.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you like about working at Nuxeo?&lt;/strong&gt;&lt;br /&gt;
The spirit. Everybody here is focused and really into what they do. It’s satisfying to work with people who are so engaged and passionate about technology. And it’s a nice environment, we all get along, have lunch together, sometimes have beers after work. We’re all friends so it’s never depressing to go to work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do you do in your spare time?&lt;/strong&gt;&lt;br /&gt;
I dance ballet and also go to see ballet performances at the Opera. I think I’ve seen 4 shows in the last 3 weeks. I’ve been taking ballet since I was 4 years old and still go to the same ballet school, so ballet for me is also about seeing friends and having a good time. And, for the Nuxeo developers, well, I will get them to the Opera one of these days&amp;#8230;it’s my own personal challenge!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://marketing.blogs.nuxeo.com/2012/04/meet-solen-guitter.html'&gt;http://marketing.blogs.nuxeo.com/2012/04/meet-solen-guitter.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/YySPz3GdPCo" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [marketing] The Nuxeo Platform in the Higher Education Sector</title>
    <id>http://marketing.blogs.nuxeo.com/?p=1010</id>
    <updated>2012-04-13T11:30:32Z</updated>
    <published>2012-04-13T11:30:32Z</published>
    <link href="http://marketing.blogs.nuxeo.com/2012/04/nuxeo-platform-higher-education-sector.html" />
    <author>
      <name>Jane Zupan</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Jane%20Zupan"&gt;Jane Zupan&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://marketing.blogs.nuxeo.com/files/2012/04/pic_educ_student.png"&gt;&lt;img alt="" class="alignright size-full wp-image-1011" height="168" src="http://marketing.blogs.nuxeo.com/files/2012/04/pic_educ_student.png" width="288" /&gt;&lt;/a&gt;Our clients in the &lt;a href="http://www.nuxeo.com/en/products/education"&gt;education and research sectors&lt;/a&gt; have the same issues with distributing information in an easily consumable format as much as those in other domains, and their requirements for content management, while varying from one use case to the next, follow some interesting patterns.&lt;/p&gt;
&lt;p&gt;In addition to the standard document management use case, our education sector clients use the Nuxeo Platform to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;build e-learning portals,&lt;/li&gt;
&lt;li&gt;distribute course content,&lt;/li&gt;
&lt;li&gt;automate administrative processes, such as registration, course listings, and requests for documentation,&lt;/li&gt;
&lt;li&gt;host social workspaces for project collaboration,&lt;/li&gt;
&lt;li&gt;share knowledge within their community, inside and outside the university,&lt;/li&gt;
&lt;li&gt;provide an online resource library, for example to manage theses and other documents that have strong requirements for version management, access control, and potentially a custom workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At Nuxeo, we get excited when our clients develop innovative and unique applications with the Nuxeo Platform, because it means that the project lead &lt;strong&gt;&lt;em&gt;truly&lt;/em&gt;&lt;/strong&gt; understands the benefits and the potential of a flexible, customizable content management technology. Following are a few case studies from the higher education world to illustrate that point:&lt;strong&gt;&lt;strong&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nuxeo.com/en/customers/ecole-centrale-paris"&gt;Ecole Centrale Paris&lt;/a&gt;, an elite engineering school, developed a social extranet so their students could manage projects that involved other students, professors, researchers, alumni, and enterprise advisors.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nuxeo.com/en/customers/hec-paris"&gt;HEC&lt;/a&gt;, Europe’s leading business school, used the Nuxeo Platform to provide an online workspace for each course, so instructors can distribute documents and interact with their students. It will eventually become the single point of access for the educational resources of all the teaching programs at HEC.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nuxeo.com/en/customers/collectionspace"&gt;CollectionSpace&lt;/a&gt;, an initiative that includes the University of California, Berkeley, and several of its on-campus museums, is an open-source collections management application that meets the needs of museums, historical societies, and other collection-holding organizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our higher education clients have told us that they need sustainable applications, so they can easily adapt to changing requirements and manage the total cost of ownership over time. They’ve also told us that in comparison with other ECM tools, the Nuxeo Platform is the best choice for developing content-centric applications that fulfill their requirements and enable them to manage the cost, with no surprises. For our French education sector clients, we have even started a &lt;a href="http://forum.nuxeo.com/f/29/"&gt;dedicated forum&lt;/a&gt; so they could build their own branch of the Nuxeo community.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are also in the education space and want to innovate with the Nuxeo Platform, please &lt;a href="http://www.nuxeo.com/en/about/contact"&gt;reach out&lt;/a&gt; and join the community.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://marketing.blogs.nuxeo.com/2012/04/nuxeo-platform-higher-education-sector.html'&gt;http://marketing.blogs.nuxeo.com/2012/04/nuxeo-platform-higher-education-sector.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/YO-GHj3sc0I" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [contentgeeks] Community management — How they do it — part2</title>
    <id>http://www.contentgeeks.net/?p=137</id>
    <updated>2012-04-11T09:46:05Z</updated>
    <published>2012-04-11T09:46:05Z</published>
    <link href="http://www.contentgeeks.net/2012/04/11/community-management-part2/" />
    <author>
      <name>roland</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/roland"&gt;roland&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;h2 dir="ltr"&gt;Balancing community with business&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.contentgeeks.net/2012/04/05/community-management/" title="Community management — How they do it"&gt;Last week&lt;/a&gt; we touched on some initial topics concerning community management, especially how it may be organized internally. But what about the other side of the coin? Ideally, a community has broad support, but garnering it involves looking beyond the sole interest of the business. Or does it? With that in mind, I asked our panel of professionals how community can help, but also sometimes be in opposition to the company that fosters it.&lt;/p&gt;
&lt;p&gt;My initial question came down to first principles. Is employee-driven community management even necessary? It would seem to make sense to let community management be driven by community members, and not employees of the company. Hence my question to our experts &amp;#8211; &lt;strong&gt;Could the Community Management role be outsourced to the community?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nicolas&lt;/strong&gt; was the first to answer:&lt;br /&gt;
&lt;em&gt;“I think it can, if the community has a clear legal status, and is backed by an organization of a kind. It can be an association, then privileged entry-point for commercial players. Foundation-based, or single-vendor communities will necessarily own a part of the Community building strategy, respectively creating a consortium of Community Managers employed by the involved vendors, or a vendor-based Community Management team. Community Management authority often comes from the financial stakeholders.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;Whether it’s a business or a non-profit, a community needs some type of professional organization to drive it.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I tend to agree, mostly because of the answers from our previous post: Community Management is a full-time job requiring guidance and resources. Individuals, with occasional impassioned exceptions, cannot bring the same degree of resources to bare as a professional organization.&lt;/p&gt;
&lt;p&gt;Nicolas added &lt;em&gt;“On the other hand, the daily operations can easily be crowd-sourced to the community. This practice serves a better structuration in the community, and is a strong motivational factor (status dynamics leveraged).”&lt;/em&gt; which is totally in line with &lt;strong&gt;James&lt;/strong&gt;’ answer &lt;em&gt;“I think it is very important to ensure that the ‘community is led by the community’, not by a single company or single individual. In the Liferay Community, we have collectively formed a Community Leadership Team, with around 15 members, which serve as our leadership function. So in some sense this is outsourcing. But it is still important to have dedicated individuals on that team whose primary mission is to keep the community healthy and active.&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the end, it appears as if a strong governance for the budding community is an important factor.. Meanwhile, outsourcing some of the tasks seems to be a goal in and of itself at a more operational level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laurent&lt;/strong&gt; chimed in on that question:  &lt;em&gt;“That should probably be the goal of any community manager. Once you can outsource some work, it means your community has grown and is made of dedicated members. I would say this is a very good sign &lt;img alt=":)" class="wp-smiley" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif" /&gt;  “&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This represents a vision of the company as being in an encouragement role, and in the words of &lt;strong&gt;Tjeerd&lt;/strong&gt; &lt;em&gt;“A good community is self-serving, but it helps to boost the community by participating heavily. Almost all successful big open source software projects have a driving force behind it.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All this is very nice, but still a bit abstract. What about when, for whatever reason, the interests of the community clash with those of the company? Here we come to my second question: &lt;strong&gt;What do you do when community interests are opposed to the company interests?&lt;/strong&gt; And how can community drive the software?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Laurent&lt;/strong&gt; tells us about this at Nuxeo. Nuxeo is a very technical company, where being open source is very much about the development process, and how to drive it from an operational standpoint. &lt;em&gt;“Nuxeo&amp;#8217;s community have different options for exercising their influence: Pull requests on GitHub, Jira tickets, the jira roadmap project, mailing list, twitter etc. We listen and try to take into account as much as possible the feedback we receive. Just keep in mind that nothing&amp;#8217;s written in stone, the roadmap can change, especially when you have customers &lt;img alt=":)" class="wp-smiley" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif" /&gt;  This is the time when a conflict of interest between the vendor and the community is, I guess, the most likely to happen. Our roadmap can change when a customer requests a very innovative feature, also if there is a strong call from the community for a feature, especially if this call comes with a contribution. We know there is always a lot of work to be done, but it is a good way to share the work.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;James&lt;/strong&gt;’ answer is clearly to rely on the governance mentioned above. Having a “management” team comprising pure community representation as well as company representatives seems a wise way to tackle any conflicts!&lt;br /&gt;
&lt;em&gt;“At Liferay, my job is to make it easy to get started with Liferay, help connect individuals with others who need their help, encourage contributions back to the community, and evangelize Liferay technology. Of course, it helps that Liferay was founded by open source enthusiasts and the company continues to openly state its open source mission. As a &amp;#8216;bridge&amp;#8217; between the community and company, when conflict arises, we will work it out over a thread in our forum, or via a Community Leadership Team meeting (with company representatives present).”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tjeerd&lt;/strong&gt; also raises the fact that conflicts are not necessarily bad so long as they can guide or inform development. &lt;em&gt;“We encourage a difference in opinion in order to create a better product. Even so, we believe the community needs guidance, because that leads to consistency in the product. This is where community management is key.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Beyond the purely operational questions, &lt;strong&gt;Nicolas&lt;/strong&gt;, who is passionate about all the topics we’ve discussed, makes a series of interesting points:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Matthew Aslett proposed a&lt;a href="http://blogs.the451group.com/opensource/2010/11/03/control-and-community/"&gt; superb essay&lt;/a&gt; on the question, discussing Control &amp;amp; Community. The vendor needs to constantly balance the&lt;a href="http://share.ez.no/blogs/nicolas-pastorino/part-2-of-leading-a-professional-vendor-backed-open-source-community#eztoc555001_1_1_0_0_1"&gt; social economy&lt;/a&gt; standards with its own interests. I strongly believe that the best results in this balancing-act are achieved when a&lt;a href="http://share.ez.no/blogs/nicolas-pastorino/part-3-of-leading-a-professional-vendor-backed-open-source-community#eztoc568277_1"&gt; transparent exposition of respective interests&lt;/a&gt; is done, regularly. Eschewing this lack of transparency may lead to irreversible consequences (community diaspora, product “theft”). Trust is a non-negotiable requirement, thus are&lt;a href="http://share.ez.no/blogs/nicolas-pastorino/leading-a-professional-vendor-backed-open-source-community-part-1#eztoc542726_1_1"&gt; Openness &amp;amp; Transparency&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;An element of control for the vendor(s) is Intellectual Property of the code. An extreme is using a viral Open-source license (GPL-like) and requiring copyright transfer on contributed code. Full control is achieved, and prosecutions feasible. The other extreme is a loose license (MIT-style), and diffused copyright ownership, this mostly is the case in foundations, the objective of which is to jointly develop commodity software that has no real value-added in a stand-alone usage.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;From a process perspective, when harvesting the feedback and claims from the community, the legitimacy of the spokesmen must be assessed, to verify that their opinion is representative and not individual, and that they have a significant track-record within the community. In other words :&lt;a href="http://share.ez.no/blogs/nicolas-pastorino/part-2-of-leading-a-professional-vendor-backed-open-source-community#eztoc555001_1"&gt; meritocracy, not democracy&lt;/a&gt;. Such assessments can be supported, in a fair way, by reputation engines/metrics, per individual.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;From a very down-to-earth standpoint, the dangerousness of fork initiatives can also be assessed after from the funding they have available, and the time dedicated to running the development of the forked product, on a long-term.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This goes beyond the topic of community management topic, clearly impacting the company’s business model, and also may be why a community would need a company backing it up! This inspired the next question, so stay tuned!&lt;/p&gt;
&lt;p&gt;And as always, comment, ask, share your view, say how YOU do it below in the comments&amp;#8230;&lt;/p&gt;
&lt;div class="wp-caption aligncenter" id="attachment_138"&gt;&lt;a href="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/04/nuxeo-pizza.jpg" rel="lightbox[137]" title="nuxeo-pizza"&gt;&lt;img alt="" class="size-medium wp-image-138" height="200" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/04/nuxeo-pizza-300x200.jpg" title="nuxeo-pizza" width="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;More Pizza, here at a Nuxeo Development Sprint, an event where community members are invited to contribute.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://www.contentgeeks.net/2012/04/11/community-management-part2/'&gt;http://www.contentgeeks.net/2012/04/11/community-management-part2/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/Juo-idDY4ow" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [lounge] Help us help you: Tell us what you think about our documentation</title>
    <id>http://lounge.blogs.nuxeo.com/?p=262</id>
    <updated>2012-04-10T12:02:00Z</updated>
    <published>2012-04-10T12:02:00Z</published>
    <link href="http://lounge.blogs.nuxeo.com/2012/04/documentation.html" />
    <author>
      <name>sguitter</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/sguitter"&gt;sguitter&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Our&lt;a href="http://doc.nuxeo.com" target="_blank" title="Online Documentation Center"&gt; online documentation center&lt;/a&gt; is the one place where you can find the documentation for all Nuxeo software: technical documentation on the &lt;a href="http://www.nuxeo.com/en/products/content-management-platform" target="_blank" title="Nuxeo Platform"&gt;Nuxeo Platform&lt;/a&gt; and &lt;a href="http://www.nuxeo.com/en/products/nuxeo-ide" target="_blank" title="Nuxeo IDE"&gt;Nuxeo IDE&lt;/a&gt; for developers, an installation and administration guide for system administrators, Studio how-tos and tutorials, users guides for the Platform&amp;#8217;s modules… It addresses the various audiences that use our platform.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lounge.blogs.nuxeo.com/files/2012/04/doc-home.png"&gt;&lt;img alt="Nuxeo Documentation Center homepage" class="size-medium wp-image-263  alignright" height="149" src="http://lounge.blogs.nuxeo.com/files/2012/04/doc-home-300x149.png" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The whole Nuxeo team contributes to the documentation, by updating existing content, writing new pages to provide information about new features, or by reviewing content.&lt;br /&gt;
Just like we love having feedback on our Platform and how you use it, we&amp;#8217;re always happy to know how people use our documentation. That&amp;#8217;s why we decided to launch a survey to find out more about how people use the documentation center and what they are expecting from it.&lt;/p&gt;
&lt;p&gt;Although it&amp;#8217;s not the only way to send us your feedback, this &lt;a href="http://nuxeoecm.polldaddy.com/s/documentation-survey" target="_blank" title="Documentation survey"&gt;10-question survey&lt;/a&gt; is an opportunity for you to tell us what you think about our documentation: what&amp;#8217;s your general opinion, what&amp;#8217;s the most important piece of documentation for you, what do you think is missing, what improvements would you expect? So please take 5 minutes to answer the survey &lt;img alt=":)" class="wp-smiley" src="http://lounge.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt; &lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://lounge.blogs.nuxeo.com/2012/04/documentation.html'&gt;http://lounge.blogs.nuxeo.com/2012/04/documentation.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/R78Q8EmA6hs" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Monday Dev Heaven] How to add an HTML preview for iWork Pages files</title>
    <id>http://dev.blogs.nuxeo.com/?p=4467</id>
    <updated>2012-04-09T20:11:52Z</updated>
    <published>2012-04-09T20:11:52Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-add-html-preview-iworks-pages-files.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/04/iwork-logo.png"&gt;&lt;img alt="" class=" wp-image-4469 alignright" height="121" src="http://dev.blogs.nuxeo.com/files/2012/04/iwork-logo.png" width="209" /&gt;&lt;/a&gt;Last week I got slightly frustrated when I received a .pages file that I could not open with any software on my Ubuntu system. And I could not see a preview on Nuxeo because this format is currently not supported. For those who have never heard about &amp;#8220;.pages&amp;#8221; files, they are documents made using the Apple iWork Pages application, which has its own format.  With the growing population of MacOS users, this will surely happen again. But fear not, because today I will show you how to create your own file converters on a Nuxeo application so that you can, for instance, add an HTML preview for the iWork files without having to install anything on your laptop.&lt;/p&gt;
&lt;h2&gt;What&amp;#8217;s your file&amp;#8217;s mime-type?&lt;/h2&gt;
&lt;p&gt;A first and mandatory step to deal with files in Nuxeo is to be sure you&amp;#8217;ll get the right mime-type. I&amp;#8217;ve first tried to upload a Pages file into our intranet but it was detected as a zip file. A quick look at the mime-type using the so called mime-type command confirmed I was dealing with a zip file:&lt;/p&gt;
&lt;pre class="brush: bash; title: ; notranslate"&gt;
[~]$ mimetype hello.pages
hello.pages: application/zip
&lt;/pre&gt;
&lt;p&gt;So I have to add a small contribution to the &lt;a href="http://explorer.nuxeo.org/nuxeo/site/distribution/current/viewComponent/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService" title="MimetypeRegistryService on Nuxeo Platform Explorer"&gt;MimetypeRegistryService&lt;/a&gt;. Details are as usual on explorer.nuxeo.org .&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension
    target=&amp;quot;org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService&amp;quot;
    point=&amp;quot;extension&amp;quot;&amp;gt;
   &amp;lt;fileExtension name=&amp;quot;pages&amp;quot; mimetype=&amp;quot;application/vnd.apple.pages&amp;quot; ambiguous=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;This code will make sure that each time a Pages file is uploaded in Nuxeo, its mime-type will be set to &amp;#8216;application/vnd.apple.pages&amp;#8217;. Now that I know what kind of file I&amp;#8217;m dealing with, I can start using converters.&lt;/p&gt;
&lt;h2&gt;An introduction to converters&lt;/h2&gt;
&lt;p&gt;A Pages file is basically a zip file containing all of its different assets, such as images and some XML files for the content. But the good thing is that sometimes, the zip also contains a preview folder, itself containing a pdf preview of the document. This is just perfect for our needs. I will create a &amp;#8220;pages2PDF&amp;#8221; converter.&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://explorer.nuxeo.org/nuxeo/site/distribution/current/viewComponent/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl" title="Converter service"&gt;converter&lt;/a&gt; can be added as usual through an extension point.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension target=&amp;quot;org.nuxeo.ecm.core.convert.service.ConversionServiceImpl&amp;quot;
    point=&amp;quot;converter&amp;quot;&amp;gt;

    &amp;lt;converter name=&amp;quot;pages2pdf&amp;quot; class=&amp;quot;org.nuxeo.ecm.platform.convert.plugins.Pages2PDFConverter&amp;quot;&amp;gt;
      &amp;lt;destinationMimeType&amp;gt;application/pdf&amp;lt;/destinationMimeType&amp;gt;
      &amp;lt;sourceMimeType&amp;gt;application/vnd.apple.pages&amp;lt;/sourceMimeType&amp;gt;
    &amp;lt;/converter&amp;gt;

  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;It basically comes down to three things. We need a &lt;em&gt;sourceMimeType&lt;/em&gt;, a &lt;em&gt;destinationMimeType&lt;/em&gt; and a Java Class to handle the conversion. We can have as many &lt;em&gt;sourceMimeType&lt;/em&gt;s as we want. A classic example would be the &lt;em&gt;any2pdf&lt;/em&gt; converter that can take XML, HTML, plain text, RTF or any other LibreOffice supported format. We will choose the Pages mimeType &amp;#8216;application/vnd.apple.pages&amp;#8217;. Then we want only one &lt;em&gt;destinationMimeType&lt;/em&gt;: &amp;#8216;application/pdf&amp;#8217;. The goal of our Java Class will be to take a Pages file as input and return a pdf file. This class must implement the &lt;em&gt;Converter&lt;/em&gt; interface. That makes two methods to implement: &lt;em&gt;init&lt;/em&gt; and &lt;em&gt;convert&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;As stated in the documentation, &lt;em&gt;init&lt;/em&gt; can be used to retrieve some configuration information from the &lt;em&gt;XMap&lt;/em&gt; descriptor. I can already tell you that we don&amp;#8217;t need any options so my &lt;em&gt;init&lt;/em&gt; implementation will be empty.&lt;/p&gt;
&lt;p&gt;The&lt;em&gt; convert&lt;/em&gt; method gives us a &lt;em&gt;BlobHolder&lt;/em&gt; and a parameter&lt;em&gt; Map&lt;/em&gt; and must return another &lt;em&gt;BlobHolder&lt;/em&gt;. So all we have to do is look for the pdf preview in the Pages file, extract it and return it as a &lt;em&gt;BlobHolder&lt;/em&gt;. Here&amp;#8217;s what I did:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class Pages2PDFConverter implements Converter {

    private static final String PAGES_PREVIEW_FILE = &amp;quot;QuickLook/Preview.pdf&amp;quot;;

    @Override
    public BlobHolder convert(BlobHolder blobHolder,
            Map&amp;lt;String, Serializable&amp;gt; parameters) throws ConversionException {
        try {
            // retrieve the blob and verify its mimeType
            Blob blob = blobHolder.getBlob();
            String mimeType = blob.getMimeType();
            if (mimeType == null || !mimeType.equals(&amp;quot;application/vnd.apple.pages&amp;quot;)) {
                throw new ConversionException(&amp;quot;not a pages file&amp;quot;);
            }
            // look for the pdf file
            if (ZipUtils.hasEntry(blob.getStream(), PAGES_PREVIEW_FILE)) {
                // pdf file exist, let's extract it and return it as a
                // BlobHolder.
                System.out.println(&amp;quot;HHHAAA&amp;quot;);
                InputStream previewPDFFile = ZipUtils.getEntryContentAsStream(
                        blob.getStream(), PAGES_PREVIEW_FILE);
                Blob previewBlob = new FileBlob(previewPDFFile);
                return new SimpleCachableBlobHolder(previewBlob);
            } else {
                // Pdf file does not exist, conversion cannot be done.
                throw new ConversionException(
                        &amp;quot;Pages file does not contain a pdf preview.&amp;quot;);
            }
        } catch (Exception e) {
            throw new ConversionException(
                    &amp;quot;Could not find the pdf preview in the pages file&amp;quot;, e);
        }
    }

    @Override
    public void init(ConverterDescriptor descriptor) {
    }
}
&lt;/pre&gt;
&lt;p&gt;Now we can convert a Pages file to a pdf. But to be able to preview it, it must be in HTML. So the next logical step is to make a &amp;#8216;pages2html&amp;#8217; converter.&lt;/p&gt;
&lt;h2&gt;PagesToHMTL converter for the preview service&lt;/h2&gt;
&lt;p&gt;A very cool feature about the converters is that they can be chained. If I want a &amp;#8216;pages2html&amp;#8217; converter, I can have it by first converting the Pages file to a pdf, and then converting the pdf to HTML. This contribution would look like this:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension target=&amp;quot;org.nuxeo.ecm.core.convert.service.ConversionServiceImpl&amp;quot;
    point=&amp;quot;converter&amp;quot;&amp;gt;

    &amp;lt;converter name=&amp;quot;pages2html&amp;quot;&amp;gt;
      &amp;lt;conversionSteps&amp;gt;
        &amp;lt;subconverter&amp;gt;pages2pdf&amp;lt;/subconverter&amp;gt;
        &amp;lt;subconverter&amp;gt;pdf2html&amp;lt;/subconverter&amp;gt;
      &amp;lt;/conversionSteps&amp;gt;
    &amp;lt;/converter&amp;gt;

  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;We now have our &amp;#8216;pages2html&amp;#8217; converter, which means Pages files will be previewable in Nuxeo. That&amp;#8217;s it for today. If you have any questions, use the comments section or go to &lt;a href="http://answers.nuxeo.com/" title="Nuxeo Answers"&gt;answers.nuxeo.com&lt;/a&gt;. See you on Friday!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-add-html-preview-iworks-pages-files.html'&gt;http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-add-html-preview-iworks-pages-files.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/boa0aO6hnaY" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Q&amp;A Friday] Nuxeo WCM, blogs, wikis.</title>
    <id>http://dev.blogs.nuxeo.com/?p=4465</id>
    <updated>2012-04-06T16:10:46Z</updated>
    <published>2012-04-06T16:10:46Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/qa-friday-nuxeo-wcm-blogs-wikis.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;div class="wp-caption alignright" id="attachment_4385"&gt;&lt;a href="http://dev.blogs.nuxeo.com/files/2012/02/question.png"&gt;&lt;img alt="Nuxeo WCM, blogs, wikis" class="size-full wp-image-4385" height="123" src="http://dev.blogs.nuxeo.com/files/2012/02/question.png" width="157" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Nuxeo WCM, blogs, wikis&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Cool question asked by Nelson Silva: what about Blogs, Wikis, and WCM features? We get this question a lot actually. Publishing the content you manage in your ECM on the web seems perfectly legit. And there are as of now many different ways to do this in the Nuxeo Platform. You can use the publishing features with WebEngine, and you can create small Blogs and Wiki documents. These can be seen as light features compared to full-fledged WCM solutions and they are indeed! Nuxeo as a vendor won&amp;#8217;t take the path to becoming a WCM solution with complex features like multilingual web publishing, portal management, online marketing capabilities, and personalization. You&amp;#8217;d be much better off with a best-of-breed WCM solution connected to Nuxeo through CMIS or Content Automation APIs, if your project requires advanced WCM capabilities.&lt;/p&gt;
&lt;p&gt;However, some WCM features or Web Publishing features in Nuxeo could totally make sense and might happen!&lt;/p&gt;
&lt;p&gt;So as Alain said, if you need to build a WCM-like feature:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;There is no &amp;#8220;ready-to-use&amp;#8221; bundle. Each Nuxeo project that has a &amp;#8220;Content Management&amp;#8221; flavor faces many options :&lt;br /&gt;
- for front-end templating engine (JSF based? WebEngine based? other language based ? Leveraging NX Themes? )&lt;br /&gt;
- Content/Structure model (Generic articles? more personalized objects?)&lt;br /&gt;
- publishing pattern (ACL based? Source/Proxy based? Using lifecycle?).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;And it would certainly be good for Nuxeo to have a more advanced technical solution for each of these options. Here we would love input and potentially contributions from the community! Please bring your ideas and code, this is an official call to the community &lt;img alt=":)" class="wp-smiley" src="http://dev.blogs.nuxeo.com/wp-includes/images/smilies/icon_smile.gif" /&gt;  If you guys want to see WCM-like features in Nuxeo or on the Nuxeo Marketplace, we really want to talk more about this. We  need your input to organize the different light WCM-like features each of us would like to see integrated in Nuxeo.&lt;/p&gt;
&lt;p&gt;There is another real reason why people could expect WCM based on Nuxeo. Now that I explained why we don&amp;#8217;t focus at Nuxeo on this, I should reiterate that Nuxeo&amp;#8217;s main mission is to provide a platform for developers to build content-centric applications, and certainly a WCM solution is a content-centric application. So YES a WCM solution made out of Nuxeo would make sense and be awesome. However, it is simply not Nuxeo&amp;#8217;s mission to focus on this one. But if a new Application Builder partner wants to focus on that &amp;#8212; I think it would be a very good idea to compete in the WCM arena. In that respect, I can only invite you to check out what people like Stepnet did with their solution SmartMedia. Although this is not WCM &amp;#8212; it&amp;#8217;s an editorial and publishing platform &amp;#8212; it&amp;#8217;s still very impressive!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/qa-friday-nuxeo-wcm-blogs-wikis.html'&gt;http://dev.blogs.nuxeo.com/2012/04/qa-friday-nuxeo-wcm-blogs-wikis.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/MFDPujnBZss" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [contentgeeks] Community management — How they do it</title>
    <id>http://www.contentgeeks.net/?p=133</id>
    <updated>2012-04-05T09:21:08Z</updated>
    <published>2012-04-05T09:21:08Z</published>
    <link href="http://www.contentgeeks.net/2012/04/05/community-management/" />
    <author>
      <name>roland</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/roland"&gt;roland&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;h2 dir="ltr"&gt;Organize!&lt;/h2&gt;
&lt;p&gt;Have you ever wondered what&amp;#8217;s the best way to manage your community? I have, and to some extent I am still figuring it out&amp;#8230; I am convinced that not only is community management important, but that it is a key piece of the puzzle for a successful software organization. Community organization promotes your solution to a wider audience where it will be recognized and used on a larger scale.&lt;/p&gt;
&lt;p&gt;Engaging the user community is just as important as sales, support, and other the other functions that are your bread and butter. I have always advocated allocating the necessary time and resources in my current position at Nuxeo and in my previous ones at eZ. Building a community is not a simple task, but some of the important factors are beyond debate, such as the power and utility of knowledge management tools, like collaborative Q&amp;amp;A ala Stack Overflow. I am unsure of the best way to manage it from an internal perspective, within the organization, and probably there isn&amp;#8217;t one single best way!&lt;/p&gt;
&lt;p&gt;In an attempt to give shape to my thoughts, I have asked some of the Open Source vendors I am in touch with how they do it, and what they think. If, like me, you are curious about what they have to say, read on!&lt;/p&gt;
&lt;p&gt;I was lucky enough talk to &lt;a href="http://www.liferay.org" target="_blank" title="Liferay"&gt;James Falkner&lt;/a&gt; (&lt;a href="https://twitter.com/#!/schtool" target="_blank"&gt;@schtool&lt;/a&gt;) &amp;#8211; community manager of the Liferay project,  Nicolas Pastorino (&lt;a href="https://twitter.com/#!/jeanvoye" target="_blank"&gt;@jeanvoye&lt;/a&gt;) &amp;#8211; director of community management for &lt;a href="http://share.ez.no" target="_blank" title="eZ Community"&gt;eZ Systems&lt;/a&gt;,  Tjeerd &amp;#8211; chief marketing office of &lt;a href="http://www.onehippo.org/" target="_blank"&gt;Hippo&lt;/a&gt; (&lt;a href="https://twitter.com/#!/tbrenninkmeijer" target="_blank"&gt;@tbrenninkmeijer&lt;/a&gt;) and Laurent Doguin (&lt;a href="https://twitter.com/#!/ldoguin" target="_blank"&gt;@ldoguin&lt;/a&gt; ) who is community liaison here at &lt;a href="http://www.nuxeo.com" target="_blank" title="Nuxeo Content Management Software"&gt;Nuxeo&lt;/a&gt;. I first asked them to explain how the community management role fits with their company’s organizational scheme.&lt;/p&gt;
&lt;p&gt;&lt;strong id="internal-source-marker_0.17917384370230138"&gt;Community manager, a dedicated role and function within the organization?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;James&lt;/strong&gt; to start:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“We consider our staff employees to be part of the community, and with it the responsibility to further Liferay&amp;#8217;s open source mission. Meaning, every employee is encouraged to participate and manage, to some degree, the areas where they have expertise. In addition, since we often hire from the community, many of our staff are already dedicated community members. As community manager, I am more of an organizer of activity to get people engaged, and less of a manager.”&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;James added “Much like other small companies, our employee hierarchy is very flat and most people report to different individuals based on their role at the time. Occasionally, it is the CEO doing a bit of community management : )” which I can confirm is true as well on the Nuxeo side!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tjeerd&lt;/strong&gt; reveals a different setup on the Hippo side.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“We don’t have dedicated staff. At Hippo we believe we get the best results if everyone in our company is involved in the community. That’s why we share and divide responsibilities. All developers and system administrators within the company participate heavily on our mailing list / forum to assist the community. Our marketing people organize Hippo Meetups, Apache get togethers and Boston Java meetup. Our product manager talks and listens to the community and provides feedback on our product roadmap.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At eZ Systems, &lt;strong&gt;Nicolas Pastorino&lt;/strong&gt; explained that, just like Liferay, eZ Publish community management is a dedicated role within their organization. About reporting and where this staff fits within the overall organization, it looks like here as well, it is distributed, requiring a flexible organizational model&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Disciplinary report of the main manager to VP Product Management, daily collaboration with VP Product Management, strategy building with VP Product Management and CEO.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rather than answer myself, I kept my content geek hat on, and asked &lt;strong&gt;Laurent&lt;/strong&gt; for his thoughts directly (a good way to check we are on the same page &lt;img alt=";-)" class="wp-smiley" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_wink.gif" /&gt; )&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“I’m working full time on community management but I get various help from pretty much everybody at Nuxeo. This company has strong open source roots and all our staff is sensible to it. This makes it natural for them to participate on our community sites, like the collaborative Q&amp;amp;A (&lt;a href="http://answers.nuxeo.com/"&gt;http://answers.nuxeo.com&lt;/a&gt;) and the forums, or also on social media. When it comes to organization, I&amp;#8217;m part of the marketing team so I report directly to its manager, our Products &amp;amp; Marketing VP and the head of our marketing team. ”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Trying to find boxes in the organization is one thing (and it looks like there is no single box at Hippo), but knowing how to fill them is another question all together! What makes a good community manager? It seemed like a natural question to ask &amp;#8211; &lt;strong&gt; What is the right profile for a community manager?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;James&lt;/strong&gt; (from Liferay) comes from an engineering background with significant engineering experience at some big companies such as Oracle and Sun. He added that this is the case for &lt;em&gt;“many of our most valued staff employees who are visible and active in the community”&lt;/em&gt;. He also added &lt;em&gt;“we also have individuals with marketing and sales backgrounds (and jobs) that regularly contribute in our community. For example, our Marketing team regularly contributes very useful bits to our Facebook page and Twitter streams, and our Sales team, by virtue of their knowledge of the product, can do technical presentations (while not trying to sell anything) at regular community meetups.”&lt;/em&gt; Here as well, the idea of the community manager not “managing” but “organizing and orchestrating”!&lt;/p&gt;
&lt;p&gt;At eZ, we see a similar setup. The main manager (e.g. &lt;strong&gt;Nicolas&lt;/strong&gt;) has &lt;em&gt;“a generalist engineering background, and 7 years of experience at an open-source software editor, in consulting, training, software engineering, product management, and finally community management.”&lt;/em&gt; He also added: &lt;em&gt;“The team will staff-up with more marketing/communication tinted profiles.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And about &lt;strong&gt;Laurent&lt;/strong&gt;, &lt;em&gt;“I’m personally an Engineer. Before community management I was working as a developer here at Nuxeo. Being technical is a strong asset, if not mandatory, when you manage an open source software vendor community, especially at the beginning when most of your members are other developers.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For my last organizational question I simply asked, “Is it a full time job?” Truth be told, we started at Nuxeo with a very part-time post for Laurent, and it seems like a common pattern to think people can take on a community management role while juggling a “real job”! So, &lt;strong&gt;is it really a full time job?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I was not surprised by &lt;strong&gt;Laurent&lt;/strong&gt;’s answer, knowing what I mentioned above.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Definitely. There is always something to do. Your community could be 5 people or 5000 you&amp;#8217;ll find some work. You&amp;#8217;re always looking to make it bigger or to sustain it. Your goal really is to help, give them what they need to make the community alive. “&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nicolas&lt;/strong&gt; added,&lt;em&gt; “Absolutely. Only focus and dedication can bring excellent results. The discipline of Community Management requires full-time availability and listening skills, which systematically go beyond the initially expected/forecast workload and working hours.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;James&lt;/strong&gt; joined in as well &lt;em&gt; “Yep, much like a party host or a gardener, you have to have dedicated people to keep the conversation going, and to constantly invigorate new and old members alike.”&lt;/em&gt; I must say, I concur with this vision of the Community Manager as an organizer or facilitator, rather than as a “manager” per se.&lt;/p&gt;
&lt;p&gt;And &lt;strong&gt;Tjeerd&lt;/strong&gt;, while not totally concerned by the question due to Hippo’s strategy for tackling community management still added: &lt;em&gt;“Yes, it’s hard work. As I mentioned it is crucial to us that everyone interacts with the people helping to create and use our software. With everyone combined it’s more than a full time job.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It looks like there are some common themes emerging for community management among our open source vendors! We&amp;#8217;re interested in finding out how others approach this. Feel free to comment below to share your take on these questions with us. And if you are interested in this topic, please stay tuned. In the next post, our community of community managers will tackle the thorny question of balancing the needs of a community with the business needs of a software company.&lt;/p&gt;
&lt;div class="wp-caption aligncenter" id="attachment_134"&gt;&lt;a href="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/04/hippogettogether.jpeg" rel="lightbox[133]" title="hippogettogether"&gt;&lt;img alt="Hippo Get Together" class="size-medium wp-image-134" height="225" src="http://contentgeeks.wpengine.netdna-cdn.com/wp-content/uploads/2012/04/hippogettogether-300x225.jpg" title="hippogettogether" width="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Hippo Get Together event -- If Open Source is not about free beer, still free pizza and free beer seems like part of the tradition of community events...&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://www.contentgeeks.net/2012/04/05/community-management/'&gt;http://www.contentgeeks.net/2012/04/05/community-management/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/teSD1tjJM3Q" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [lounge] A Technical Introduction to the Nuxeo Platform</title>
    <id>http://lounge.blogs.nuxeo.com/?p=256</id>
    <updated>2012-04-04T06:27:10Z</updated>
    <published>2012-04-04T06:27:10Z</published>
    <link href="http://lounge.blogs.nuxeo.com/2012/04/technical-introduction-nuxeo-platform.html" />
    <author>
      <name>nuxeo</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/nuxeo"&gt;nuxeo&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Last week, our CTO, Thierry Delprat, went to meet some of our clients with a few people from our project and account management team. It&amp;#8217;s something we do a lot at Nuxeo &amp;#8212; have our R&amp;amp;D staff very much in touch with real clients and the needs of real projects!&lt;/p&gt;
&lt;p&gt;On this day, Thierry gave a 15-minute technical introduction &amp;#8212; not too detailed &amp;#8212; about the concepts and strong points of the Nuxeo Platform that I really liked. He ended up with the presentation of the Nuxeo Platform below, where the whole concept of the platform is explained. It shows in a very simple way that the Nuxeo Platform is &lt;strong&gt;not&lt;/strong&gt; &lt;strong&gt;only&lt;/strong&gt; a set of building blocks that you assemble randomly, but that it has a very &lt;strong&gt;carefully designed modular architecture&lt;/strong&gt;. It is a unique approach, and surely the big differentiator compared to all other enterprise content management software solutions on the market, many of which use the word platform as only a name. This is certainly the reason why Nuxeo loves developers and developers love Nuxeo!&lt;/p&gt;
&lt;p&gt;If you don&amp;#8217;t know what I am talking about here, maybe it&amp;#8217;s best to just go through the following 12 slides! It should not take you more than 15 mn&amp;#8230;&lt;/p&gt;
&lt;div id="__ss_12277431"&gt;&lt;strong&gt;&lt;a href="http://www.slideshare.net/nuxeo/nuxeo-platform-in-15mn" target="_blank" title="Nuxeo platform in 15mn"&gt;Nuxeo platform in 15mn&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;
&lt;div&gt;View more presentations from &lt;a href="http://www.slideshare.net/nuxeo" target="_blank"&gt;Nuxeo &amp;#8211; Open Source ECM&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://lounge.blogs.nuxeo.com/2012/04/technical-introduction-nuxeo-platform.html'&gt;http://lounge.blogs.nuxeo.com/2012/04/technical-introduction-nuxeo-platform.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/wUq8eAHpyxc" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [dev] [Monday Dev Heaven] Automatic document creation in Nuxeo, Part 2</title>
    <id>http://dev.blogs.nuxeo.com/?p=4462</id>
    <updated>2012-04-02T17:57:12Z</updated>
    <published>2012-04-02T17:57:12Z</published>
    <link href="http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-automatic-document-creation-nuxeo-part2.html" />
    <author>
      <name>Laurent Doguin</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Laurent%20Doguin"&gt;Laurent Doguin&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;As I was working on the content template service for &lt;a href="http://dev.blogs.nuxeo.com/2012/03/monday-dev-heaven-automatic-document-creation-nuxeo.html" title="[Monday Dev Heaven] Automatic document creation in Nuxeo"&gt;my last blog&lt;/a&gt;, I saw some things that neeeded to be done. There is an &lt;em&gt;ImportBasedFactory&lt;/em&gt; hanging around since basically the beginning of the &lt;em&gt;ContentTemplateService&lt;/em&gt;. It has never been implemented. Here&amp;#8217;s how we&amp;#8217;re gonna do it.&lt;/p&gt;
&lt;h2&gt;The ImportFactory&lt;/h2&gt;
&lt;p&gt;The goal of this factory will be to import some content from a file or a folder instead of a templateItem like we saw last week.&lt;/p&gt;
&lt;p&gt;To create a new factory, I need a new class that implements the &lt;em&gt;ContentFactory&lt;/em&gt; interface. A good thing to know is that there is an abstract class &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/platform/content/template/factories/BaseContentFactory.html" title="BaseContentFactory javadoc"&gt;BaseContentFactory&lt;/a&gt; that implements the interface and gives a method to handle the &lt;em&gt;CoreSession&lt;/em&gt;. So right now the &lt;em&gt;ImportBasedFactory&lt;/em&gt; looks like this:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class ImportBasedFactory extends BaseContentFactory {

    public void createContentStructure(DocumentModel eventDoc)
            throws ClientException {
        throw new UnsupportedOperationException();
    }

    public boolean initFactory(Map&amp;lt;String, String&amp;gt; options,
            List&amp;lt;ACEDescriptor&amp;gt; rootAcl, List&amp;lt;TemplateItemDescriptor&amp;gt; template) {
        throw new UnsupportedOperationException();
    }

}
&lt;/pre&gt;
&lt;p&gt;We have two methods to implement. &lt;em&gt;initFactory&lt;/em&gt; will be used to retrieve the path of the zip file from the options map. &lt;em&gt;createContentStructure&lt;/em&gt; will be used to import the documents from the file.&lt;/p&gt;
&lt;h3&gt;Retrieve the file&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m going to use the option map to get the file. I have many options. I can retrieve the file from the bundle resources, from Nuxeo&amp;#8217;s data folder or from any path on the server. To represent these three options I could have a contribution like this:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
  &amp;lt;extension
      target=&amp;quot;org.nuxeo.ecm.platform.content.template.service.ContentTemplateService&amp;quot;
      point=&amp;quot;factoryBinding&amp;quot;&amp;gt;

    &amp;lt;factoryBinding name=&amp;quot;RootFactory&amp;quot; factoryName=&amp;quot;SimpleTemplateFactory&amp;quot; targetType=&amp;quot;Root&amp;quot;&amp;gt;
      &amp;lt;option name=&amp;quot;path&amp;quot;&amp;gt;resource:domain.zip&amp;lt;/option&amp;gt;
      &amp;lt;option name=&amp;quot;overwrite&amp;quot;&amp;gt;false&amp;lt;/option&amp;gt;
    &amp;lt;/factoryBinding&amp;gt;
  &amp;lt;/extension&amp;gt;
&lt;/pre&gt;
&lt;p&gt;My &lt;em&gt;initFactory&lt;/em&gt; method will simply have to store the options on our factory. I will only use two options here: &lt;em&gt;path&lt;/em&gt; and &lt;em&gt;overwrite&lt;/em&gt;. &lt;em&gt;path&lt;/em&gt; will be use to retrieve the file to import. I plan to have an address in one of these formats &amp;#8211; &lt;em&gt;resource:domain.zip&lt;/em&gt; or &lt;em&gt;absolute:/home/nuxeo/zip/domain.zip&lt;/em&gt; or even &lt;em&gt;nxData:domain.zip&lt;/em&gt;. The &lt;em&gt;absolute&lt;/em&gt; path will reference a file on the server&amp;#8217;s filesystem, &lt;em&gt;nxData&lt;/em&gt; will reference a file inside the Nuxeo data folder and &lt;em&gt;resource&lt;/em&gt; will reference a file in the bundle&amp;#8217;s resources. I have used a Java &lt;em&gt;enum&lt;/em&gt; for this. It has 3 different values: &lt;em&gt;absolute, nxData&lt;/em&gt; and &lt;em&gt;resource&lt;/em&gt;. I declare an abstract method &lt;em&gt;getFile&lt;/em&gt; in the &lt;em&gt;enum&lt;/em&gt;. This way I can implement a different &lt;em&gt;getFile&lt;/em&gt; for each value. Then all I have to do is add a static method like &lt;em&gt;getResource&lt;/em&gt; which takes a single String parameter. This parameter is split at the first &amp;#8216;:&amp;#8217; char. This way, I can get the value using &lt;em&gt;enum.valueOf&lt;/em&gt; and call its &lt;em&gt;getFile&lt;/em&gt; method. If this file does not exist, &lt;em&gt;initFactory&lt;/em&gt; will return false and the factory won&amp;#8217;t be executed.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class ImportBasedFactory extends BaseContentFactory {

    private static final Log log = LogFactory.getLog(ImportBasedFactory.class);

    public static final String IMPORT_FILE_PATH_OPTION = &amp;quot;path&amp;quot;;

    public static final String IMPORT_OVERWRITE_OPTION = &amp;quot;overwrite&amp;quot;;

    protected FileManager fileManager;

    protected Map&amp;lt;String, String&amp;gt; options;

    protected File importedFile;

    protected Boolean overwrite = false;

    public enum PathOptions {
        resource {
            @Override
            public File getFile(String path) {
                return FileUtils.getResourceFileFromContext(path);
            }
        },
        nxData {
            @Override
            public File getFile(String path) {
                File nxDdataFolder = Environment.getDefault().getData();
                return new File(nxDdataFolder, path);
            }
        },
        absolute {
            @Override
            public File getFile(String path) {
                return new File(path);
            }
        };

        protected abstract File getFile(String path);

        public static File getResource(String path) {
            String[] s = path.split(&amp;quot;:&amp;quot;, 2);
            String resourceType = s[0];
            String resourcePath = s[1];
            PathOptions option = valueOf(resourceType);
            if (option == null) {
                log.error(&amp;quot;Unsupported resource type: &amp;quot; + resourceType);
                return null;
            } else {
                return option.getFile(resourcePath);
            }
        }
    }

    @Override
    public boolean initFactory(Map&amp;lt;String, String&amp;gt; options,
            List&amp;lt;ACEDescriptor&amp;gt; rootAcl, List&amp;lt;TemplateItemDescriptor&amp;gt; template) {
        this.options = options;
        overwrite = Boolean.valueOf(options.get(IMPORT_OVERWRITE_OPTION));
        String path = options.get(IMPORT_FILE_PATH_OPTION);
        File file = PathOptions.getResource(path);
        if (file != null) {
            if (file.exists()) {
                importedFile = file;
                return true;
            } else {
                log.warn(&amp;quot;Following file does not exist: &amp;quot;
                        + file.getAbsolutePath());
            }
        }
        return false;
    }
&lt;/pre&gt;
&lt;h3&gt;Creating the content&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;createContentStructure&lt;/em&gt; will use the &lt;a href="http://community.nuxeo.com/api/nuxeo/5.5/javadoc/org/nuxeo/ecm/platform/filemanager/service/FileManagerService.html" title="FileManager JavaDoc"&gt;FileManager&lt;/a&gt; service to import the file. The first thing I do is call &lt;em&gt;initSession&lt;/em&gt; from the parent Class to make sure I have an open &lt;em&gt;coreSession&lt;/em&gt;. Then check if the created document is a version or not. If not, I call the &lt;em&gt;importBlob&lt;/em&gt; method. This method uses the &lt;em&gt;fileManager&lt;/em&gt; to import files as documents. The first thing I do is check if the file is a directory. If it is, then I run &lt;em&gt;importBlob&lt;/em&gt; for its child files. If not, I use the simple &lt;em&gt;FileManagerService.createDocumentFromBlob&lt;/em&gt; method. This way I can import anything from a folder and its contents to a zip XML export from Nuxeo to a simple file like a picture or a pdf. It&amp;#8217;s then really easy to customize if you add different import plugins.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
    @Override
    public void createContentStructure(DocumentModel eventDoc)
            throws ClientException {
        initSession(eventDoc);

        if (eventDoc.isVersion()) {
            return;
        }
        try {
            String parentPath = eventDoc.getPathAsString();
            importBlob(importedFile, parentPath);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    /**
     * Use fileManager to import the given file.
     *
     * @param file to import
     * @param parentPath of the targetDocument
     * @throws Exception
     */
    protected void importBlob(File file, String parentPath) throws Exception {
        if (file.isDirectory()) {
            DocumentModel createdFolder = getFileManagerService().createFolder(
                    session, file.getAbsolutePath(), parentPath);
            File[] files = file.listFiles();
            for (File childFile : files) {
                importBlob(childFile, createdFolder.getPathAsString());
            }
        } else {
            Blob fb = new FileBlob(file);
            fb.setFilename(file.getName());
            getFileManagerService().createDocumentFromBlob(session, fb,
                    parentPath, overwrite, fb.getFilename());
        }
    }

    protected FileManager getFileManagerService() {
        if (fileManager == null) {
            try {
                fileManager = Framework.getService(FileManager.class);
            } catch (Exception e) {
                throw new RuntimeException(
                        &amp;quot;Unable to get FileManager service &amp;quot;, e);
            }
        }
        return fileManager;
    }
}
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s of course a first step of improvement. Making this factory available outside a &lt;em&gt;factoryBinding&lt;/em&gt; could be another.&lt;br /&gt;
That&amp;#8217;s it for today. See ya Friday!&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-automatic-document-creation-nuxeo-part2.html'&gt;http://dev.blogs.nuxeo.com/2012/04/monday-dev-heaven-automatic-document-creation-nuxeo-part2.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/ejJGd63jg6M" height="1" width="1"/&gt;</content>
  </entry>
  <entry xml:base="http://community.nuxeo.com/rss">
    <title type="text">Blogpost - [concena] Nuxeo Community Survey - Any Interest?</title>
    <id>http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14605</id>
    <updated>2012-03-30T11:58:35Z</updated>
    <published>2012-03-30T11:58:35Z</published>
    <link href="http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14605" />
    <author>
      <name>Bruce Grant</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;New blog post, by &lt;a href="/user/Bruce%20Grant"&gt;Bruce Grant&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;
	I have been kicking about the idea of running a community driven survey on Nuxeo (the product suite and the company). Is anyone else interested in understanding how Nuxeo is being used, which versions are being used, what software has been integrated with/to Nuxeo, what people like/don't like about Nuxeo, suggestions to improve, etc.&lt;/p&gt;
&lt;p&gt;
	My thinking is as follows:&lt;/p&gt;
&lt;p&gt;
	1. Gather some basic demographics (products, versions, number of users, geography, etc.)&lt;/p&gt;
&lt;p&gt;
	2. Gather feedback on how Nuxeo is going as a company (quality, responsiveness, etc.).&lt;/p&gt;
&lt;p&gt;
	3. Gather feedback on individual products (likes, dislikes, ideas to improve, etc.)&lt;/p&gt;
&lt;p&gt;
	4. Gather information on how products are being used (purpose, integrations, etc.)&lt;/p&gt;
&lt;p&gt;
	5. And free format feedback.&lt;/p&gt;
&lt;p&gt;
	Once collected I will generate summary report. The report will be shared with Nuxeo as formal community feedback, and a copy of the report will be emailed to all who participated in the survey. I will also post the survey on my site for those who don't provide contact information. Published results will be completely anonymous.&lt;/p&gt;
&lt;p&gt;
	This will take some effort on my part but I think it will help the community, those considering Nuxeo, and it can help guide the future of the product?&lt;/p&gt;
&lt;p&gt;
	Am I crazy (I probably am) or would this have some value? Also, let me know if you have suggestions for specific questions or areas of interest to include in the survey.&lt;/p&gt;
&lt;p&gt;
	Thanks.&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL: &lt;a href='http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14605'&gt;http://concena.com/c/blogs/find_entry?p_l_id=0&amp;entryId=14605&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/NuxeoOrg/~4/wbvAjUIfZeQ" height="1" width="1"/&gt;</content>
  </entry>
</feed>

