[Google-SoC] RFC: A Blogging and (outbound) Syndication proposal

Tim Hicks tim at sitefusion.co.uk
Sat May 6 13:05:10 EDT 2006


All,

I've just sketched out a proposal for blogging and outbound syndication, 
and would appreciate it if people with an interest in these things could 
take a quick look and let me know their thoughts.

I'll be AFK until Sunday evening, and will try to submit this, or 
something like it after that... unless anybody objects :).

Cheers,

Tim

p.s. On the mentor front, I think I'm reasonably comfortable with the 
weblog aspects of this project.  The guidance I'd be more likely to need 
would be Plone-ish and Five-ish in nature.  Therefore, if they are 
interested in things like this, perhaps someone like Alec, Whit, or 
Martin could be suitable.  Jon Stahl (whose name appears as a potential 
mentor for this project on the page put up by Nate) has already said he 
doesn't feel able to act as mentor.



Integration of Componentized Weblog Technology into Plone
=========================================================


Definitions
-----------

Five: http://codespeak.net/z3/five/
Flon: http://plone.org/products/plone/roadmap/104
basesyndication: http://svn.plone.org/view/collective/basesyndication/
fatsyndication: http://svn.plone.org/view/collective/fatsyndication/
ATCTSyndication: http://svn.plone.org/view/collective/ATCTSyndication/
plonetrackback: http://svn.plone.org/view/collective/plonetrackback/
qPingTool: http://projects.quintagroup.com/products/browser/qPingTool/
generations: 
http://svn.zope.org/Zope3/branches/ZopeX3-3.0/src/zope/app/generations/ 
(and later versions on different branches)
Quills: http://svn.plone.org/view/collective/Quills/

Motivation
----------

The motivation is twofold:

   1. To provide a compelling weblogging solution for Plone.  It is 
hoped that this will be useful in and of itself, but also as a way of 
attracting users to the Plone platform more generally.  (c.f. 
<http://theploneblog.org/blog/archive/2005/12/29/marketing-mindshare-and-blogging>).

   2. To provide publicly available example code for how to use the new 
patterns of development heralded by the Zope 3 project within the 
context of CMF/Plone.  Specifically, to provide an example of how to 
dynamically repurpose existing Plone content types using marker 
interfaces, adapters, and views so as to avoid the tendency for 
CMF/Plone solutions to be rather application specific.  "Subclass as a 
last resort"?


Proposal
--------

I propose to produce a series of componentized weblog technologies for 
Zope/CMF/Plone that allow arbitrary object types to benefit from the 
technologies that have made weblogs such a growth "industry" on the web. 
  Syndication feeds, trackbacks, simple archiving and display, remote 
authoring (MetaWeblogAPI, and friends),  and, potentially, more 
manageable commenting, are all facilities that would benefit Plone. 
Existing Plone weblogging products have a tendency to be rather 
monolithic - requiring the use of custom object types for things like 
the weblog itself, its individual posts, its archives, and sometimes 
even its commenting facility.  The result is a that weblogging is to 
some extent ghettoized in the Plone world, with 
competing-and-incompatible weblogging products failing to share code and 
features with each other, or indeed, with "core Plone".  This situation 
is to the detriment of all.


Implementation
--------------

Syndication
~~~~~~~~~~~

Refactoring of basesyndication/fatsyndication/ATCTSyndication to provide 
a slimmer, more thoroughly Plone-integrated (outbound) syndication 
solution.  While the underlying code for this is largely present (in 
various each of the products just listed), UI toggles are likely to be 
necessary to leverage this feature across standard (and other) Plone 
content types.

Trackback
~~~~~~~~~

Completion of the plonetrackback product that allows for trackback pings 
to be sent to and from arbitrary Plone content objects.  The 
implementation is already largely complete, with just unit tests and 
more complete integration with the CMF/Plone catalog required.

Weblog Implementation
~~~~~~~~~~~~~~~~~~~~~

First, provide a (Five/Zope3) view for Plone's standard "Smart Folder" 
content type that adapts to an "IWeblog" interface.  This would allow 
for the reuse of the through-the-web/through-the-Plone (TTW/TTP) 
configurable query facility of "Smart Folders" for the purpose of 
populating a weblog with feeds.  Each catalog ("brain") result would be 
used get hold of the real object, which would in turn be adapted to an 
"IWeblogEntry" interface.  Thus, the use of arbitrary (and standard) 
Plone content types as weblog entries would be made possible simply by 
providing adapters for each to the "IWeblogEntry" interface.  The 
implementation would provide such adapters for the "Page", "Image", 
"Link", "Event", "News Item", and "File" standard Plone content types.

Second, using the "Flon" code (now integrated into "Five"), provide a 
TTW/TTP facility to mark individual "Smart Folders" (and, potentially, 
any other content type) with an interface that causes the default view 
for the object to switch to a weblog-ish view based on the "IWeblog" 
interface.  Further, such a marker interface could/should cause extra 
object tabs (next to "Edit", "Properties", et al) to become available 
for the purpose of providing extra weblog-specific configuration 
options.  As "Smart Folders" (and whatever other type this technique is 
applied to) will not have schema fields for this information, I propose 
to store the data in "IAnnotations".

Third, provide a traversal adapter that allows such a repurposed Smart 
Folder use archive-by-date URLs of the form 
"[Smart-Folder]/2006/05/06/[weblog-entry-id]".  This is a standard 
weblog feature.  As an intermediate step, the implementation would also 
require the provision of a non-persistent WeblogArchive class. 
Instances of this class would be injected into the traversal path by the 
Smart Folder traversal adapter, and would then allow for archive listing 
views to be used on URLs of the form "[Smart-Folder]/2006/05/".

Fourth, provide a component-enabled tool/utility that allows for update 
pings to be sent to services such as Technorati.  This would be 
equivalent to the functionality offered by qPingTool, but implemented in 
a way that is agnostic to the object types that update pings should be 
made for (by using adaptation).

Fifth, provide content migrations for the "Quills" weblog product to 
this new framework based on the Zope3 "generations" framework.  In 
addition to the benefit of the migrations for an existing user-base, the 
idea would be to provide example code for the Zope2 world to take 
advantage of this approach to data structure changes.


More information about the Google-SoC mailing list