Personal tools
 
You are here: Home Planet Plone
Document Actions

Planet Plone

This is where the Plone developers and users write about Plone, and is your best source for Plone news and developments as it happens. Subscribe to all the Planet Plone entries by clicking the RSS button at the right, or pick the ones you like the most from the list on the left.

Last updated: 10 June, 2007 11:41PM UTC.

June 10, 2007

Zea Partners: 3 research projects investigating open source software quality launch a join portal

Flossquality.eu is an initiative of 3 EU research projects : Qualoss, Flossmetrics and SQO-OSS. It demonstrate the strong collaboration between the actors of the 3 projects. The expected benefit is to ease the access to information by disseminating news by joint RSS feed.

Read more…

June 09, 2007

Daniel Nouri: Need for speed? Go plone.memoize

If you need to speed up your Python application, you should take a look at plone.memoize, in particular its new cache decorator that's really easy to use:

>>> from plone.memoize.ram import cache
>>> def cache_key(fun, first, second):
...     return (first, second)
>>> @cache(cache_key)
... def pow(first, second):
...     print 'Someone or something called me'
...     return first ** second

>>> pow(3, 2)
Someone or something called me
9
>>> pow(3, 2)
9
>>> pow(3, 3)
Somone or something called me
27

You can see that the cache key function determines which input values result in the same output and thus can be cached. Cache key functions receive exactly the same arguments as the functions that they cache, plus the function itself. Thus, key functions for methods can also use self for determining a cache key. A cache key function may raise the DontCache exception to signal that no caching should take place.

The cache storage backend can be freely chosen using the second argument to the cache decorator:

>>> @cache(cache_key, cache_storage)

where cache_storage is a function that again takes all arguments of the original function and returns a dict-like object for use as a cache storage. plone.memoize has built-in support for memcached and zope.app.cache as storages.

See the doctests for volatile.py for more examples.

For now, you'll need to use the SVN version. A release containing the cache decorator will follow soon.

Read more…

Maurits van Rees: Minimally overwriting a content type

Sometimes you want to use an existing content type, but with slightly different settings. You might have a client who is technically happy to add a Document to a Folder, but who would rather add Eggs to Baskets. In other words: he wants to use the Document and Folder content types, but with a different name. Also, he might want to put only Eggs in his basket, and not Images and Files. You might be able to do this with zero lines of python code! The trick is that you can use GenericSetup to do your tweaking.
You make a new product: basket. You put that in your Products directory. You add an empty __init__.py. You add a profiles/default directory and register it in configure.zcml:
<configure
xmlns="http://namespaces.zope.org/genericsetup"
i18n_domain="genericsetup">
<registerProfile
name="default"
title="Basket profile"
description="Basket"
provides="Products.GenericSetup.interfaces.EXTENSION"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
/>
</configure>

You add types.xml in profile/default:

<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<object name="Basket"
meta_type="Factory-based Type Information with dynamic views"/>
</object>

After this, you copy CMFPlone/profiles/default/types/Folder.xml to profiles/default/types/Basket.xml. Then you change a few lines there . The diff (update: the 'diff -u' as rightfully requested by Reinout) is here:

 <?xml version="1.0"?>
-<object name="Folder"
+<object name="Basket"
meta_type="Factory-based Type Information with dynamic views"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
- <property name="title">Folder</property>
+ <property name="title">Basket</property>
<property
- name="description">A folder which can contain other items.</property>
+ name="description">A Basket for Eggs</property>
<property name="content_icon">folder_icon.gif</property>
- <property name="content_meta_type">ATFolder</property>
+ <property name="content_meta_type">Basket</property>
<property name="product">ATContentTypes</property>
<property name="factory">addATFolder</property>
<property name="immediate_view">folder_listing</property>
<property name="global_allow">True</property>
- <property name="filter_content_types">False</property>
- <property name="allowed_content_types"/>
+ <property name="filter_content_types">True</property>
+ <property name="allowed_content_types">
+ <element value="Egg"/>
+ </property>
<property name="allow_discussion">False</property>
<property name="default_view">folder_listing</property>
<property name="view_methods">
<element value="folder_summary_view"/>
- <element value="folder_tabular_view"/>
- <element value="atct_album_view"/>
<element value="folder_listing"/>
</property>
<alias from="(Default)" to="(dynamic view)"/>

Then you restart Zope, go to portal_Setup, in the Properties tab select your profile, in the Import tab select "Types Tool", press "Import selected steps" and you are done. Well, we have not looked at how to do this for normal Documents too, adding a content type Eggs based on them, but that should be the same technique, really.

Or as Wouter Vanden Hove says in a reaction: you can also go to portal_types, copy an existing content type (Document) to a new one (Egg), change Egg to your liking, go to portal_setup, export the Types Tool, unzip the resulting file in profiles/default and then remove all that is not an Egg or Basket from types.xml and remove all files other than Egg.xml and Basket.xml from the types directory. Those are a lot of steps, but it is probably takes longer to write this down than to actually do this. ;-)

If you really use this and submit this to a code repository like subversion, I recommend to first do a commit with the original Document.xml and Folder.xml (though renamed to Egg.xml and Document.xml) so you can more easily see what was actually changed.

By the way, I was trying this out and then I was triggered to write this blog entry by some commits I saw from Rocky in the collective: a new product TemplateContentTypes. That is a new product that he created on behalf of ServerZen Software and
Zest Software. It does something similar but also some more. I have not tried it yet. It probably contains some things that would be useful to add to the files above too, like profiles/default/factorytool.xml. Here is part of the README.txt of TemplateContentTypes:

A product designed to be used as the template or skeleton layout of a new set of types to completely replace ATContentTypes. Each custom type subclasses it's ATCT's equivalent.
Once the product has been installed inside a site, all standard actions that use/create/modify ATContentTypes based content will instead use the new template types.

Now create a Basket, add an Egg and enjoy!

Read more…

June 08, 2007

Philipp von Weitershausen: Custom traversal with Grok

Marius Gedminas has written down how to implement custom traversal for a content object in Zope 3 (which also applies to Zope 2.10+ now, btw). As he admits, it's a bit complicated. In an email...

Read more…

Zea Partners: 3 open source e-Government projects merge and launch PloneGov.org

Open source experts from the public sector, SME and open source community participated in the first Plone e-government international workshop. After two days of intense work the group decided to merge into 1 common project 3 e-government initiatives: CommunesPlone (Belgium, France), PloneGov.ch (Switzerland) and UdalPlone (Basque Country, Spain). The new project, based on the open source Content Management System Plone, will be named PloneGov.org. It now reaches over 40 local governments and 2 regions in 5 countries.

Read more…

June 07, 2007

Ian Bicking: What I've Been Up To

I'm off for a bit of vacation, but before then I thought I'd throw up a bunch of links to stuff I've been doing in the last couple months:

HTML

I've been doing a lot with HTML lately. HTML is great, because it's important.

  • I've started working with microformats some. This initially started with an OLPC project, where I wrote an hReview parser (hReview is a microformat).
  • Then related to that, I wanted to download a bunch of pages in an isolated form, so all the internal links are fixed up. This became PageCollector. Since then I've added a script frontend. I think this could be a generally handy export system. It doesn't just make links relative, it also lets you completely remap filenames and is fairly careful about links (including links in CSS).
  • Doing all this HTML-related stuff, I've been using lxml a lot (and it should be inferred I therefor also like libxml2 a lot). I like lxml a lot; probably the biggest reason is that it has a fast permissive HTML parser. But the ElementTree API that lxml uses can be a bit awkward for HTML -- it works well for XML, but in HTML there's lots of mixing of text and tags, and that feels really weird in the ElementTree API. So I've started lxml.html in a branch with lots of feedback from Stefan Behnel. This adds methods that are useful in HTML. With just a few smallish methods, I think it makes HTML much easier to work with in lxml.
  • Though BeautifulSoup is nice, it's not a C-based HTML parser. With Deliverance we are literally parsing and rewriting every page as it comes through our site. I couldn't do this with BeautifulSoup. And we're not doing any crappy regex stuff; lxml lets us actually understand the HTML the way the browser understands the HTML. That's important. This is kind of the promise of XHTML -- the ability to create smart and useful intermediaries -- that XHTML never really fulfilled. The idea of smart intermediaries is a powerful one, XHTML just wasn't the right basis; intermediaries are supposed to work with real endpoints, and those endpoints were and continue to be HTML, not XHTML. html5lib is cool too as an HTML parser, and important as a reference implementation, but I'll mostly be waiting for that work to filter back into something like libxml2.
  • I should note that I think the stream model of handling HTML (as HTMLParser uses) is lame. Typical HTML is not very big, and a document model (where the whole document is loaded into memory) is way easier to handle. HTML is best understood as a document. (Genshi would probably be rockin' fast if it used lxml)
  • As part of lxml.html I've been writing an HTML cleaning module. It's a bit messy, and incomplete, but I think it will be really useful. Because we fully parse and then serialize the HTML, a lot of XSS attacks are avoided really early. At work David Turner has been working on a Transclusion intermediary called Transcluder. It's a little frightening to fold together disparate pieces of HTML; this might make it less frightening.
  • I took the pattern from formencode.doctest_xml_compare and also ported it to lxml. Now you can do semantic HTML and XML diffs in your doctests, instead of literal string comparison. This means that things like the order of your attributes are ignored, as is whitespace. And the diffs help highlight problems in a more fine-grained way. Using the html branch you can do from lxml import usedoctest or from lxml.html import usedoctest to enable the comparison inside a doctest. And you don't need a custom doctest runner. I managed to do this using horrible horrible monkeypatching. Also from FormEncode I'm hoping to port htmlfill over to lxml.html sometime too.
  • With Luke Tucker we wrote an html diff module, which I've also put into lxml.html. This shows textual differences while trying to avoid markup differences (since it's really hard to visually represent changes in markup, and also usually not what people care about). This is surprisingly difficult because you also need to preserve the markup -- you can't just smash all the words together. I think it's a pretty good implementation, and there aren't that many implementations of this out there. You can also do blame style annotations, showing who added what over the history of the page.

Open Plans

Stuff from work (which is a little vague, because work, private projects, HTML, OLPC, all overlap a lot).

  • Deliverance is deployed on the live site. We haven't really used its functionality much yet. But it's awesome functionality once we get around to using it.
  • Related to that deployment, I spent some time with paste.httpserver (trunk only) on the thread pool. It now adapts the thread pool to add threads when necessary, kill threads that seem to be wedged, and various tools around that. This recipe was handy, as now I can kill threads. It's surprisingly slow, though -- it frequently takes several minutes for the thread to be killed. But it shows up as a regular exception, which is great. You can read about the details in this document.
  • I've been extracting some stuff into WSGIProxy for your non-browser-based proxying. This is mostly for handling HTTP-based dispatch between server applications.
  • Not really for work, but related to proxying I whipped together a little HTTP proxy using Paste and WSGI middleware. It kind of works. It was just a prototype, so I haven't worked on it more, but with just a little more work I think it should be easy to turn any WSGI middleware into an HTTP proxy. This is the kind of proxy you configure in your browser.
  • A followup to the HTML WYSIWYG post, we decided to use Xinha. I feel pretty good about the decision, which is primarily motivated by Xinha's UI -- in small but important ways it feels like the best UI among the bunch. It's just more polished and higher quality than the other options. It's also a Real Open Source Project, which matters to us. But we haven't actually implemented this yet.
  • I wrote a total hack of doctest that lets you do from dtopt import ELLIPSIS, and then the ELLIPSIS option (that lets you use ... as a wildcard in output) will be enabled for the rest of your doctest. It's ugly, but I might add a few more similar hacks to that package and make it into something more real. But still ugly.
  • With Whit Morris I've been working on a Tagging application. It's just getting started, so nothing working yet. I like the atom module, which represents Atom feeds and entries as plain XML. This didn't occur to me at first -- I was going to create a Python representation of the Atom data model and then add parse and serialize methods to it. This is wrong, because the Atom data model is XML. If you add a funky custom element to your entry and I normalize it into oblivion, then I've made a crappy library; by making the XML the one and only source of information I avoid such things.
  • I wrote a little proof of concept for web application help called WebClippy (svn here). It's inspired by Hackety Hack (a neat Ruby educational environment) and how tutorials are written there -- just a very simple bit of persistent help. Writing it made me realize that S5 should totally be rewritten, because Javascript-based slideshow scripts are easy to write and S5 is annoying. Anyway, I need to actually try to document something with WebClippy, because my test slides are lame, and I've decided realistic examples are essential to good development.

OLPC

Stuff from One Laptop Per Child (besides the HTML experiments)...

  • I went to Boston for OLPC, and we talked a lot about Web-Based Annotation. We want there to be a way for children to add notes (shared or private) to any web page. There seems to be people from several directions working towards this, outside of OLPC. Annotation is something that seems to pop up every few years, then die down; maybe this time we can actually make it work. Maybe Web 2.0 should just be "good ideas that aren't new, but this time they might actually work".
  • I didn't do any of it, but PyXPCOM is in the Sugar browser now (Sugar is the OLPC UI). This excites me, except then I looked at the code and I couldn't figure out how to get access to any interesting XPCOM objects (the DOM in particular) -- XPCOM seems very indirect. Oh well, at least now it's possible and I just have to figure out the details. I hope/want/am-optimistic that OLPC will have a great browser experience. It doesn't yet.
  • We had a little OLPC sprint for Chicago people interested in the project. Again getting a working Sugar environment was a bit of a problem. Afterward I played around with some VMWare techniques. These need some polish, but I think it's the right direction and it's not that hard. If someone could get this working in a scripted way, I'm sure it could be added to the standard build process at OLPC.

Miscellaneous

  • I wrote WaitForIt, a little WSGI middleware that you can put in front of slow WSGI applications. If the application is too slow, it gives the user a page asking them to wait. This is particularly handy for things like administrative areas where you realize you are doing some really slow blocking operation and you don't want it to time out but you really don't feel like setting up a fancy queue for it. Just pop this in front and your problem is pretty much solved. This is part of a secret framework I'm developing.
  • I started revisiting buildutils and cleaning some stuff up. Mostly I've added some commands to make it easier to add and make new commands for setup.py. This relates to this post. I added a command to WebHelpers for Javascript compression.
  • It's a little old now, but I added a templating language to Paste. Using string.Template for the little internal templating things just wasn't good. Cheetah has been too hard to install. So this is a simple, single-file templating language based on string substitution. I should probably extract it and do a few more things with it. I feel a little dumb about writing Yet Another Templating Language, but I couldn't find a templating language that I liked for small text-related tasks. For actual web programming a more complete language is good.
  • I made a little package called CmdUtils to make it a bit easier to build command-line scripts, with the patterns that I personally like.
  • I kind of got a new encoding working. It encodes text to spaces, newlines, and tabs. Now whitespace can be even more significant! You can also put non-whitespace in the encoded text as a form of steganography.
  • Among my little recipes I added propertyclass for making properties. I also added a little script for pasting text to a pastebin (only for X users). And also one for creating easy_install links from a subversion repository.
  • I wrote about my desktop for a new blog that Steve Holden created.

Hmm... more stuff than I thought. Working at The Open Planning Project is great, because I spend all my time working on open source projects in public repositories. And also working on Stuff That Interests Me. If you've gotten an email from me recently, you may notice I link to our careers page in my sig, simply because I think everyone cool should work at TOPP. We're doing other interesting things too that I'm not directly involved with; I'll try to write about other people's projects before too long.

After vacation I should probably start looking more into getting WordPress on our site. TOPP is not technically tribalist! We do accept PHP, even if we don't really trust PHP. Once that's up, I'll move my own blog from this crappy piece of spam ridden crap (that I wrote, so no one but myself to blame), and then maybe I'll post more because I'll be less embarrassed about the software.

Read more…

June 06, 2007

Maurits van Rees: Poi, intelligenttext and Plone 3

Introduction

Poi is an issue tracker for Plone. The code is in the collective.

The eXtremeManagement product from Zest Software and others depends on Poi. The biggest reason: Daniel Nouri has added a content type PoiTask to eXtremeManagement. You can add such a PoiTask to a Story and there easily link to one or more Poi issues that should be fixed. So I am interested in what happens with Poi and I occasionally add some code or run some tests on various Poi versions.

Poi has several branches. The ones that interest me here are 1.0 and plone3-support.

Poi has several dependencies: AddRemoveWidget, contentmigration, DataGridField and intelligenttext.

It can be annoying to have to hunt down where all dependencies can be downloaded and which version is needed. To make it easier on users, Poi has subversion bundles for this. The ones that interest me here are 10 and plone3. The bundles have in common that all dependencies are using trunk. So what are the differences? And with which Plone version can you use them?

Testing Poi

First of all: I improved the tests of Poi slightly, on all three branches that I investigate here. When you have an smtp server on your localhost, running the Poi tests would actually cause a few emails to be sent. They go to non-existing email addresses, so you (or some administrator) will get some mail delivery failures in your inbox, which is not nice. So in tests/ptc.py I replaced the default mail host with a simple mock mail host, which avoids this. That code was taken (and drastically simplified) from PasswordResetTool: thanks!

There is always one test that fails. This is a known issue: a deleted response causes stale SearchableText for an issue. If someone has an idea on how to fix this, that would be nice.

When below I say a branch or bundle is compatible with some Plone version then I mean that all tests except that one pass for that Plone version. The test combinations of Zope and Plone that I tried were:

  • Plone 2.1.4 (tar ball) with Zope 2.8.9; for the tests I added PloneTestCase 0.8.2.
  • Plone 2.5.3 (tar ball) with Zope 2.9.7
  • Plone 3.0 (subversion trunk) with Zope 2.10.3

All were using python 2.4.

Note: I did not run any tests in combination with PloneSoftwareCenter.

instancemanager

I ran the tests with help from instancemanager. I use that tool a lot, so I am used to it, which helps. But I really like it for quickly running tests for (various versions of) a product on various versions of Plone. Here is my .instancemanager/poi.py file, ready for running the tests for the combination of Poi 1.0, Zope 2.9.7 and Plone 2.5.3. Commented out are the lines that are used for the other combinations:

python = 'python2.4'
#zope_version = '2.8.9'
zope_version = '2.9.7'
#zope_version = '2.10.3'

archive_sources = [
    #'PloneTestCase-0.8.2.tar.gz',
    ]
symlinkbundle_sources = [
    {'source': 'Poi10bundle',
     'url': 'http://svn.plone.org/svn/collective/Poi/bundles/10'},
    #{'source': 'Poitrunkbundle',
    # 'url': 'http://svn.plone.org/svn/collective/Poi/bundles/trunk'},
    #{'source': 'Poi30bundle',
    # 'url': 'http://svn.plone.org/svn/collective/Poi/bundles/plone3'},
    #{'url': 'http://svn.plone.org/svn/plone/bundles/3.0'},
    #{'url':'https://svn.plone.org/svn/plone/bundles/3.0-lib',
    # 'pylib': True},
    ]
archivebundle_sources = [
    #{'url': 'http://heanet.dl.sourceforge.net/sourceforge/plone/Plone-2.1.4.tar.gz'},
    {'url': 'http://plone.googlecode.com/files/Plone-2.5.3-final.tar.gz'},
    ]
main_products = ['Poi']

Then I just create an instance, fill the products directory and run the Poi tests with this single command:

$ instancemanager poi --create --products --test=MAIN

When the tests have run, I add and remove some comment signs to get the right versions and run that command again for the next combination.

Poi 10 bundle

  • This has Poi branch 1.0. That branch was created by Daniel Nouri on 2007-05-17, before he added new functionality on trunk.
  • Compatible with Plone 2.1 and 2.5

Poi trunk bundle

  • This has Poi trunk, which has version number 1.1. Since putting 1.0 on a maintenance branch, trunk has seen the addition of link detection by Daniel (links are automatically created from #123 to issue 123 in this tracker; and r1234 points to revision/changelog 1234 if you specified a base url for that in your tracker). Plus some small changes by others that I did not investigate.
  • Compatible with Plone 2.1 and 2.5.

Poi plone3 bundle

  • This has Poi branch plone3-support. That branch was created by Alexander Limi on 2007-04-25. Goal is to add Plone 3 support.

  • This bundle does not have intelligenttext. The reason is that intelligenttext is already available as a python module in Plone 3. It should be in your instance, in lib/python/plone/intelligenttext. The other versions of Poi throw this error, when they try to install intelligenttext:

    Products.CMFQuickInstallerTool.QuickInstallerTool.AlreadyInstalled: intelligenttext
    

    This python module is not exactly the same as the Product from the collective though. It misses some very recent additions there, like adding rel="nofollow" to links; this also means that the Poi tests had to be changed a bit. Or rather: I had to change the Poi tests on the other two branches to fit the intelligenttext changes.

    Update: Thomas Mueller (deepdiver) has updated plone.intelligenttext so it is in line with the collective product. He fixed the Poi tests accordingly. Thanks!

  • Compatible with Plone 3.0 only.

Conclusions

  • On Plone 2.1 or 2.5:
    • For a Poi version without sudden changes that would require a reinstall or a schema update: use branches/1.0 from bundles/10.
    • For recent improvements: use trunk from bundles/trunk.
  • On Plone 3.0: use branches/plone3-support from bundles/plone3.

Read more…

June 05, 2007

Nate Aune: Birds of a Feather - fostering Plone subcommunities

I’m at the PIKtipi sprint right now and thoroughly enjoying the sprinting, camping and socializing among friends old and new. I got a chance to chat with Xavier Heymans (CEO of ZEA Partners), and he was telling me about the new PloneGov initiative. It’s really interesting to see how governments from around the world are coming together under a common purpose to create open source software to serve the public.

This lead to a discussion about the importance of organizing the Plone users within various vertical markets and that collecting case studies about how these sectors are using Plone might be a good place to start. There is already an initiative on Plone.org for this, but it appears to be inactive. What are the policies for posting to this area of plone.org? How does one contribute case studies, news, links, events, etc.?

I’ve also been thinking about how the Plone community needs to do a better job of evangelizing its successes, and helping to facilitate like-minded groups to form sub-communities. Plone is being used in a wide variety of sectors and there are so many interesting use cases: libraries, eLearning, governments, artists, newspapers, mapping and even managing vineyards!

But these case studies are few and far between. As of today, there are only 6 case studies on plone.net. I should not be the one to cast the first stone, because my company, Jazkarta, has not published any case studies yet, even though we have several projects that would be very interesting to document.

I’ve started collecting various “Plone for…” initiatives and sites, and would like to post these somewhere permanent where they can grow into a comprehensive resource for decision makers who are evaluating Plone to see if it will fit their needs. Perhaps this information would be better suited for a home on plone.net? Here is the first shot…

Plone for Libraries

Plinkit provides Plone-based, pre-built websites for public libraries. See Darci Hanning’s presentation about Plinkit at the Plone Conference 2006.

Plone for Education and eLearning

eduCommons is an OpenCourseWare management system designed specifically to support OpenCourseWare projects. eduCommons will help you develop and manage an open access collection of course materials. eduCommons is used by Utah State University, Novell’s OpenCourseWare, Rice University’s Connexions, etc. Read more about the history of EduCommons.

Plone for Governments

• The goal of PloneGov is to develop in a cooperative manner, applications and websites suited for public organization for their own use as well as for their citizens’.
CommunePlone, the predecessor to PloneGov, is a fast growing open source software mutualization project led by local governments. Open to international collaboration, the project outlines the benefits of open source and mutualization for the Public Sector. Read more about CommunesPlone.

Plone for Artists

• Plone4Artists is an initiative to assemble a Plone products bundle with features commonly required for artist community websites. The target audience is artists and musicians who want to build a community portal site where they can showcase their work and network with like-minded artists.
BI.LIVE is an example of a site that is using the 1st generation Plone4Artists products for multimedia: ATAudio/ATVideo.

Plone for eCommerce

• PloneGetPaid is a lightweight framework for payment processing and commerce in Plone. There have already been two sprints to accelerate the development of the product. The upcoming doc-comm sprint at the Googleplex in Mountain View (June 25-29) will have a team of developers working on improving this product and getting it ready for prime-time.

Plone for Multimedia

• The MediaDB project was developed as a central repository for media files and documents, that were to be used in multiple web sites (referred to as ‘media sites’ here) run by the same company. That means the project not so much implements a media server handling the media content itself (e.g. video streaming), but focuses on storing files in a central place and making them available from (remote) plone sites. Demo of MediaDB

• The Plone4ArtistsSite suite of products includes several components for making it easier to manage multimedia content in your Plone site: Plone4ArtistsAudio, Plone4ArtistsVideo, and PloneFlashUpload.

• Plumi is a GPL licensed video sharing Content Management System based on Plone and produced by the EngageMedia collective. Plumi enables you to create your own sophisticated video sharing site; by adding it to an existing Plone instance you can quickly have a wide array of functionality to facilitate video distribution and community creation. EngageMedia is a website for video about social justice and environmental issues in Australia, Southeast Asia and the Pacific.

Plone for Community Planning

• OpenPlans aims to transform social activism by providing tools that connect people and enable them to share ideas, stay organized, and act collectively to effect change. OpenCore is the Plone-based software which powers the site, and is freely available under a GPL license. Read the getting started guide which explains how they use buildit to deploy the software.

Plone for GIS & Mapping

• PrimaGIS is a collaborative web mapping application for Plone. PrimaGIS is using buildit to easily deploy a PrimaGIS site.
Pleiades is an international research community, devoted to the study of ancient geography
GeoServer was started to help build a more open, interoperable infrastructure of Geographic Information.
• GISPython is a resource for all things about Python and GIS.

Plone for Newspapers

• Julius is a project that came out efforts to build a website dedicated to the national elections for the Mexican newspaper La Jornada. Julius has modules to convert HTML exported from QuarkXpress into NITF files, and code to import those files and create an “edition”, which is made of articles and photos. Read Carlo’s blog post on the Plone for Newspapers initiative.

Plone for Public Radio

• While there isn’t a formal project around using Plone for public radio, there have been some discussions about Plone on the Public Broadcasting Open Source Best Practices list which was started after the Beyond Broadcast 2006 conference in Cambridge, MA, and more discussion took place at the Beyond Broadcast 2007 and the IMA 2007 Conference. There are two public radio stations known to be using Plone: KCRW and KJZZ.

Plone for Multilingual Websites

• While the Plone interface has support for 50+ languages out of the box, the LinguaPlone add-on makes it possible to manage the actual content in more than one language. Plone Solutions (the maintainers of LinguaPlone) and Russ Ferriday from Topia are considered to be some of the experts in deploying multilingual Plone-based websites. Perhaps they could provide some case studies to show how Plone is a viable solution for implementing a multilingual CMS.
• ecoagents is an EU funded gaming website whose purpose is to teach kids about environmental issues. ecoagents is using LinguaPlone and XLIFF Marshaller to provide support and translation for 26 languages.

Plone for Laboratories

• Upfront Systems and BIKA Labs in S. Africa have developed LIMS, a web-based laboratory information management system (LIMS), a Plone-based tool for managing. Read the press release.

At the sprint I’ve been working together with some other folks on creating a Plone4Artists distribution using buildout. We are preparing a tutorial that will hopefully pave the way for other groups to create their own distributions of Plone. Right now, PrimaGIS and OpenPlans’ opencore projects are the only ones that I know of that are using any kind of automated buildout software to distribute their software. It might be a good idea to formalize this process, so that if you want your distribution of Plone to be listed in the directory (wherever that may be hosted), it should include a buildout to make it easy for people to download and evaluate.

The goal is to lower the barrier to entry for a would-be Plone user/integrator. If the software is hard to install and configure, people will turn to other CMSes such as Drupal or Joomla which often have one-click installations at a hosting provider. For the first time, we have tools that provide a way to easily set up and configure a Plone site just by typing a couple of commands (1. bootstrap 2. buildout).

Tools like buildout are empowering because it means we can distribute pre-configured Plone bundles that are specifically targeting a particular audience. These specialized Plone distributions demonstrate the real value of Plone - it’s ability to be easily customized and it’s rich library of 3rd party add-on products.

Technorati Tags: ,

Read more…

Maurits van Rees: Ubuntu Linux: from Dapper to Edgy

  • I had some trouble upgrading my desktop as I had the opera browser package installed (not supported by Ubuntu). Ubuntu wanted to change some directory into a symlink, but an Opera file was in the way. Solution: uninstall opera before you start upgrading (and install it again later if you want):
      dpkg --remove opera
    
  • I had previously installed firefox-dom-inspector. Somehow the upgrade didn't go so well for that part. In Firefox, in the Extra-Addons menu item, the Dom Inspector was listed as broken. Reinstalling it solved the problem:
      aptitude reinstall firefox-dom-inspector
    
  • The fonts in my Emacs editor looked a bit ugly or in the case of my laptop they were simply boxes instead of characters. The cause is that fonts were moved to a different location. So you have to manually edit your /etc/X11/xorg.conf file and change lines like:
      FontPath  /usr/share/X11/fonts/misc
      into:
      FontPath  /usr/share/fonts/X11/misc
    

Those were the three problems I had. For the rest it went smooth as always. And it all seems to work just fine. Kudos to the Ubuntu community!

Oh, of course when you have compiled and installed some programs yourself, you may need to do that again. For instance I needed to reinstall some Zope versions, as the standard Ubuntu python version has been updated to 2.4.4. This version is not expected by e.g. Zope 2.9.5; it wants 2.4.2 or 2.4.3. This should not be a problem I guess, but it does mean that you need to do:

    ./configure --with-python=/usr/bin/python

That makes the configure script accept your python version. Then I tried to make Zope, but this gave lots of errors. This was solved by installing some development packages:

    aptitude install build-essential

Read more…

June 04, 2007

Tom Lazar: Log yer Testruns!

Running tests is timeconsuming ("no shit, sherlock") and the only thing worse than waiting for them to finish is to wait for them more than once. That's why I've adopted the practice of logging all of my testruns by redirecting them to a log file. That way I can easily compare older test runs with those after making a code change (without having to repeat the first run after reverting that change).

Of course, these days there's not really much of what I do with Zope and Plone that witsch won't improve upon and in this case he came up with the following neat bash snippet that offers two advantages over a simple redirect: you still get the 'live' output of the testrun as it happens and it automatically names the log file after the current time. In fact, it behaves just as a normal test run, except with the added bonus of having a date-searchable archive of all your test runs...

./bin/instance test -s Products.PRODUCTNAME -v -v 2>&1 | tee tests-$( date +"%Y%m%d%H%M" ).log

Oh, and the -v -v parameters give you a nice little summary of all failing tests at the end of the run.

Happy testing!

Read more…

Lovely Systems: Zope Foundation

It’s official. Lovely Systems is Strategic Developer in the Zope Foundation. I’m proud to serve in the board of directors. A warm welcome to my board fellows and the new (second) committer-member representative: Tres Seaver.

Zope Foundation

Yesterday evening we had our second board meeting at the 8. Dzug-Tagung in Potsdam. It was good and productive to meet in Real Life.

You might ask - why is Lovely Systems paying money to do unpayed community work? Well. The story is easy: Lovely Systems has strategic interest in promoting and improving Zope :)

My personal goals:

  • relaunch the zope.org website: That’s a hard topic :) We need a sexy representation for a sexy product, library, platform to target developers, customers, decision makers,… Me an Martijn Faassen are leading the zope.org Website committee and trying to solve the topic.  Watch the Keynote of Tres Seaver at DZUG Tagung (should be published sooner or later here) and understand what Door #3 is.
  • gardening the Zope Foundation Bylaws and accompany the transfer of the intellectual property from Zope Corporation to the Zope Foundation. What’s the story behind that? Well. Read the Bylaws :) That’s a hard job we’d like to move forward during the next months.
  • find a solution for the outstanding issue with the Zope Trademark. It’s important for the Zope Foundation to clear the situation. More on this topic soon.

I’m looking forward to start the conversation with the Plone Foundation as we share the common vision of evangelizing the world.

Let me know what the Zope Foundation should do for you!

Read more…

June 03, 2007

The Plone Blog: Summer of Code Students: Want Help? Ask The List!

Hey you awesome Google Summer of Code students who are working on Plone projects!  If you get to a point where you need input, opinions or advice (especially early on when you're figuring out how to attack your problem!), don't be shy -- ask on the Plone Core Developers list!

Vidar Svansson, who's working on improvements to Genesis (the successor to ArchGenXML), recently did just that, and triggered a fantastic conversation amongst some of the smartest folks in Plone-dom about how to improve Plone's UML-to-generated-code story.

Read more…

Tom Lazar: Google Groups permalinks with Quicksilver

Want to link to a newsgroup or mailing list post? Sure you can search for it in GMANE or Google Groups and then copy and paste the resulting URL. But here's a quicker way using Quicksilver courtesy of Florian Schulze a.k.a. "the guy currently sitting next to me at the PIKtipi sprint" (who also needs to get a blog of his own...)

First, make sure you have the "Websearch Module" installed:


Next, open this URL in Safari(!) and add it to your Bookmarks, giving it a name of, say, Google Groups MSGID Search.

Then, to search for the message reliably, copy its message id onto the clipboard by pressing Apple=Shift-U when viewing the message in Mail.app:



Now, simply invoke Quicksilver, type the keys necessary to invoke the bookmark you created (in my case typing GGR does the trick):


press tab twice, paste the id and hit return - voila... you will be taken to the page with the message:


Read more…

May 30, 2007

Reinout van Rees: Planet.plone.org notification :-)

Planet.plone.org has been out of the air for two days or so earlier this week. When it was restored, three of my entries didn't show up, so I'd like to give you two reasons to take a look at http://vanrees.org/weblog :

  • Hey, you've missed three entries in the category "plone". For instance, Structuring plone projects 2: structuring instances .
  • I've got other subjects in my weblog that don't end up on planet.plone.org. I've got a separate feed that is used by planet, so... Inject advertisement tune... You might wanna subscribe to my feed directly.

Ahem, enough promotion for now :-)

Read more…

Kai Diefenbach: Quick Tip 4: Give RefreshNG a try

Yeah! RefreshNG (IIRC, you have to be logged in to be able to download) brings back the good old product refreshing. You may know that the old one was broken with newer Zope versions.

Even if I accustomed to test driven development and my Mac starts up Zope/Plone very fast (once it is in the memory), it is a substantial improvement for my development speed.

There seem to be some minor issues (e.g. queryUtility seems not to work after refreshing), but it is definitly worth a try. And - of course - you can still restart Zope if refreshing isn't work for a specific case.

Read more…

Alexander Limi: TextMate for Windows?

If you're stuck on Windows, you might want to check out the recently released “E” text editor, that mimics the excellent TextMate, including bundle compatibility.

Read more…