(Post originally written by Tarek Ziadé on the old Nuxeo blogs.)
« March 2006 | Main | May 2006 »
(Post originally written by Tarek Ziadé on the old Nuxeo blogs.)
Posted at 03:15 PM | Permalink | Comments (0)
In order to understand Sync4J (also named Funambol), there are many hooks to use. First of all, the funambol data service server developer book to understand the architecture. After reading this paper, I needed to completely dive into Sync4J code. Hopefully, they provide an email connector to have an example.
From now and in the following Sync4J posts, I'll write some notes about Sync4J development and difficulties I've met.
First problem was to find how to get the credentials specified in the SyncML specs to authenticate on the JCR. Here is an interesting piece of code inspired from the email connector source:
String username = ((Sync4jPrincipal)principal).getUsername();
String credentials = ((Sync4jPrincipal)principal).getEncodedCredentials();
String password = Helper.getPassword(username, credentials);
The credentials are formatted in the following way: "username:password" and encrypted. To decrypt, there is only to use the Base64.decode() method. The login to the repository will be done during the synchronization initialisation (beginSync())
(Post originally written by Cedric Bosdonnat on the old Nuxeo blogs.)
Posted at 10:11 AM | Permalink | Comments (0)

CPS Platform v3.4 is already the most complete Enterprise Content Management platform in the open source market. Its large feature scope offers a great choice of functional components to address the whole ECM scope. This leads CPS to be used for many different document-centric applications like paper and electronic mail management for large organizations, pure document management for the nuclear industry, collaboration platform, civil-state acts management, web content management, knowledge base management, record management, intranets, and a lot more...
Our R&D team has been working for a few months on the next major release of CPS: CPS 4 (codenamed YellowCake). The goals are to open CPS to other technologies, leverage major industry standards, enable high-end scalability and keep all the good features and technical coherence already present in the framework. We have worked a lot on prototyping and experimenting some deep improvements to the core infrastructure.
I am really excited to present and open it to the community now, after some time of raw-thinking and prototyping. I hope you will like what you will read below as much as I do. Do not hesitate to send comments on the mailing-list.
Here are YellowCake's main targets :
We plan to keep all good features and concepts from CPS 3 (CPSSchemas, CPSDocument, CPSRepository, CPSDirectory, CPSWorkflow, overall technical architecture, applicative components, etc.). We are just extending and improving them to embrace industry-standard and existing technologies.
Along these core improvements to the CPS infrastructure, new applicative level components are on the way and will be the topic of a future post (give me 5 days :-).
Here is the teaser: reporting, retention management, rich client, physical archive management, Microsoft Office integration, etc.
Nuxeo's team and the CPS community would be delighted to get feedback and answer questions.
To get more informations and join the community:
We hope to see you there soon!
(Post originally written by Eric Barroca on the old Nuxeo blogs.)
Posted at 08:12 PM | Permalink | Comments (0)
Following our goal in opening CPS Platform to industry standards, I am pleased to announce that Nuxeo has joined the JSR-283 (aka Java Content Repository 2) expert group and the iECM project at AIIM.
Florent Guillaume will represent Nuxeo in the JSR-283 expert group. He will bring more than 5 years of experience building content repositories, versionning systems and managing content for large organizations.
The iECM project, hosted by the AIIM, aims at creating a new international standard to ease ECM systems interoperability. The project statement says :
Interoperable Enterprise Content Management (iECM) will create an interoperability framework that enables information sharing across organizational and system boundaries.
I am delighted to represent Nuxeo in this project and work together with all major ECM software vendors to create this new interoperability standard. I really hope it will benefit to our customer and minimize the vendor-locking in this market.
At Nuxeo, we think that Open source is less about source code public availability (still, it's required) than about reducing vendor-lockin for customers benefit. Who cares about your source code if there is no documentation and if all data are locked in your repository?
Interoperability is definitely one of the key benefits of open source!
I cannot wait to see how open source and standards will transform the ECM market (when proprietary vendor will no more be able to use interfaces and content lock-in to keep their customers).
Open competition is on the way, for all ECM customers benefit... And we are working on it! :-)
(Post originally written by Eric Barroca on the old Nuxeo blogs.)
Posted at 03:29 AM | Permalink | Comments (0)
#!/usr/bin/env pythonYou'll note the install_requires parameter, that list the requirements. You can also use ==, of course, and you can list requirements that are only used for testing, and lots of other stuff. Also note the dependency_links parameter, which enables downloads from other places than the Cheeze Shop, in this case Zope.orgs repository of Zope3 eggs.
from setuptools import setup
setup(name='calcore',
package_dir={'': 'src'},
packages=['calcore'],
version='2.0.1',
install_requires=['zope.interfaces >= 3.0',
'zope.schema >= 3.0',
'zope.i18nmessageid >= 3.0'],
dependency_links=['http://download.zope.org/distribution/',],
# metadata for upload to PyPI
author='Martijn Faassen, Infrae;Lennart Regebro, Nuxeo',
author_email='lregebro@nuxeo.com',
description='Calendaring system',
license='GPL2',
keywords='calendar icalendar',
url='http://www.cps-project.org/sections/projects/calendar_server ',
long_description="""CalCore is an advanced, flexible calendaring component for Python. It
allows the Python developer do write advanced calendaring applications
either using their own event storage or integrating with external
calendar servers.
Features of the CalCore include among others:
* Support for making private calendars, shared calendars, resource
booking and more.
* integration with iCalendar clients (Apple iCal, Mozilla Sunbird,
KOrganizer...) using the iCalendar protocol,
* invitation workflow,
* meeting support, including helper functions to look for free time,
* recurring event support (thanks to SchoolTools recurrence
implementation, http://www.schooltool.org),
* etc.
CalCore is being used as the core of Nuxeos CalZope and
CPSSharedCalendar products, products for integrating with Zope and CPS.
These products provide a complete web-based user interface to the
CalCore calendaring.""",
classifiers=['Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License (GPL)',
'Operating System :: OS Independent',
'Topic :: Office/Business :: Groupware'],
platforms='All',
)
(Post originally written by Lennart Regebro on the old Nuxeo blogs.)
Posted at 12:09 AM | Permalink | Comments (0)
The week went very fast, but was very productive indeed, here's a quick wrapup of sprinters work:
Florent & Dario: The boys managed to write a parser to leverage the schemas that exists in JCR into Python structures. They create Zope 3 schemas, rather than CPSSchemas. Everything will be hooked through JackRabbit, so JCR content will become a good citizen for beeing used within Zope 3. They've also created a hierarchy of interfaces for this in Zope 3. All the work is here: nuxeo.jcr
Michael & Lennart: They struggled with Zope 2 & 3
publishers to continue Sidnei's work and came up with an advanced prototype.
And, as this was one of the concern, they benched a bit twisted behavior in
Zope 2, using funkload and it seem
not too slow compared to zserver. The work is on a branch on
svn.zope.org.
Jean-Marc: That guy knows everything about Zope 2 and Zope 3 branches now ;). Philipp helped a lot through IRC (thanks) and Jean Marc came up with... wait a minute... a blog entry that resumes it all.
Tarek: After a first release of CPSResourceLibrary, and nuxeo.javascript, I focused on doing tests automation in Javascript. OK that might not be very easy to set up on a buildbot, but on my laptop, it's going to be just perfect to TDD js code in zope.
Joachim: He played with Jean-Marc Cpsskins v3 concepts, by
creating some Ajax Portlets in CPS 3.4, relying on CPSResourceLibrary, and
nuxeo.javascript. Watch it in CPSAjaxPortlets,
it's coming soon babe !
(Post originally written by Tarek Ziadé on the old Nuxeo blogs.)
Posted at 12:32 AM | Permalink | Comments (0)
Last day I was reading a post of Luis Sala from Alfresco and, I have to admit it, I was amazed how he turned to a better self since he met open source.
He seemed to me like vader quitting his mask and seeing the world with his own eyes : stop hiding things to his clients, have fun doing his job, stop selling licences, etc.
Is open source a miracle potion ? I really don’t think so. Nethertheless, working in the open source industry is really amazing. I agree with you on this point Luis. It’s a fantastic approach to satisfy our client’s needs and the best way to produce software. Sadly, open source can not make better personns of us. Personnaly, I prefer let that to psychotherapy.
Be fair and square, that’s how we roll at Nuxeo, since the beginning, and that’s how we build our success. I’m very happy to see that our vision is now shared by people that first laughed at us. Seems like Gandhi’s always right...
(Post originally written by Arnaud Lefèvre on the old Nuxeo blogs.)
Posted at 06:46 PM | Permalink | Comments (0)
(Post originally written by Tarek Ziadé on the old Nuxeo blogs.)
Posted at 04:53 PM | Permalink | Comments (0)
This is mostly a reminder for mysef about the way of dumping and loading subversion repositories.
Let's say I have two subversion repositories. repoA and repoB. I got a component called P at the root of repoA as below:
repoA /
P /
trunk /
branches /
tags /
What I'd like todo is to copy P from repoA to repoB preserving all the history logs for P.
Let's say I started the developement of P with revision 28000 and my last checkin related to P is at revision 38000. The revision numbers are important because it will decrease the needed time to dump the actual svn repository. Less revisions to dump means less time needed :)
We will use svnadmin to do that.
Go on the server hosting the subversion repository and dump it this way:
$ svnadmin dump --quiet --revision 28000:38000 /home/svn/repoA > repoA.dump
This operation can last a while depending on the size of your repository.
svnadmin dump options :
$ svnadmin dump --help dump: usage: svnadmin dump REPOS_PATH [-r LOWER[:UPPER] ] [--incremental] Dump the contents of filesystem to stdout in a 'dumpfile' portable format, sending feedback to stderr. Dump revisions LOWER rev through UPPER rev. If no revisions are given, dump all revision trees. If only LOWER is given, dump that one revision tree. If --incremental is passed, then the first revision dumped will be a diff against the previous revision, instead of the usual fulltext. Valid options: -r [--revision] arg : specify revision number ARG (or X:Y range) --incremental : dump incrementally --deltas : use deltas in dump output -q [--quiet] : no progress (only errors) to stderr
What we are interested in here is only component P. We need to filter out for P component. We will use svndumpfilter to do that.
$ cat repoA.dump | svndumpfilter include P > P.dump
svndumpfilter options:
$ svndumpfilter --help general usage: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...] Type 'svndumpfilter help <subcommand>' for help on a specific subcommand. Available subcommands: exclude include help (?, h)
Now go on the server hosting repoB. Before that, transfer your P.dump to this server. We will use svnadmin to load it back
$ svnadmin load --quiet /home/svn/repoB < P.dump
svnadmin load options:
$ svnadmin load --help load: usage: svnadmin load REPOS_PATH Read a 'dumpfile'-formatted stream from stdin, committing new revisions into the repository's filesystem. If the repository was previously empty, its UUID will, by default, be changed to the one specified in the stream. Progress feedback is sent to stdout. Valid options: -q [--quiet] : no progress (only errors) to stderr --ignore-uuid : ignore any repos UUID found in the stream --force-uuid : set repos UUID to that found in stream, if any --use-pre-commit-hook : call pre-commit hook before committing revisions --use-post-commit-hook : call post-commit hook after committing revisions --parent-dir arg : load at specified directory in repository
Here we are. You just need to remove P from repoA:
$ svn remove http://svn.foo.com/repoA/P
Of course, what would be really cool, instead of the dump/load operations, would be something like that being possible in between foreign repositories:
$ svn move https://svn.foo.com/repoA/P https://svn.foo.com/repoB/
Thanks Florent for the pointers.
(Post originally written by Julien Anguenot on the old Nuxeo blogs.)