Skip to content. | Skip to navigation

Personal tools
Sections
You are here: Home 2009 August
Navigation
 

August

Sub-archives

Aug 31, 2009

Amberjack on Plone: first steps

by Massimo Azzolini — last modified Aug 31, 2009 09:26 PM

collective.amberjack project just released the first tours

What's that?

A tutorial in action Amberjack is a tool that allows you to create tours on your site. The purpose of the collective.amberjack project is to improve its functionality and to provide a way for creating not just tours but something more: tutorials.

 

What does it provide?

The actual implementation provides 4 packages:

  • collective.amberjack.core
  • collective.amberjack.portlet
  • collective.amberjack.plonetour
  • collective.amberjack.metatour

collective.amberjack.core

This one contains all the basic functionalities:

  • it lets you add tours via ZCML,
  • it manages and validates tours and steps,
  • it draws the tour box and it manages all the UI interactions via javascript

collective.amberjack.portlet

this package provides two portlets:

  • a one shot tour portlet
  • a portlet with a set of tours

collective.amberjack.plonetours

this one contains the first released tours:

  • Add and publish a Folder
  • Add and publish a Page
  • Add and publish a News Item
  • Add and publish an Event
  • Format a page using the visual editor
  • Create internal links
  • Create external links
  • Upload an image
  • Insert image on a page
  • Using the Display menu

others will be released soon.

collective.amberjack.metatour

the idea is to provide a TTW way to create new tours. You can translate them via LinguaPlone and can be used by a non-technical user.

A next step is to export the TTW created tours as packaged that can be shared for example via pypi.

how simple adding a tour IS?

First of all you need to define the tour:

add_folder = {
    'url': u'/',
           'xpath': u'',
           'xcontent': u'',
           'title': _(u"Create a new folder"),
           'text': _(u"Folders are ..."),
           'steps': ({'description': _(u"Click the [Add new...] drop-down menu."),
                      'idStep': u'menu_add-new',
                      'selector': u'',
                      'text': u''},
                     {'description': _(u"Select [Folder] from the menu."),
                      'idStep': u'new_folder',
                      'selector': u'',
                      'text': u''})}

ajTour = {'tourId': u'basic01_example',
          'title': _(u'Add a Folder'),
          'steps': (add_folder,
                   )}

then you have to register it

<collective.amberjack:tour
        tourdescriptor=".example_tour.ajTour"
        />

If you need a complete example, please refer to the code.

Where can I find infos and code?

 

 

Aug 26, 2009

How to use Solr score's in plone search

by Andrew Mleczko — last modified Aug 26, 2009 07:05 PM
Filed Under:

For one of our customers we need to implement more sophisticated search, then the default plone one. Using collective.solr and rt.solr it's quite easy.

Thanks to Jarn's collective.solr package you can easily use Solr search engine in Plone. What we have been missing in current implementation is a way to make use of solr/lucene score (relevancy). That's why we are working on rt.solr package - Solr score configuration implementation. Here's what we have so far:
 
Solr configuration
 
You can set score for Field and ZCText indexes and value for Field index (ZCTextIndex is using the SearchableText value from query). 
 
Above example then is translated to proper Solr query:
Description:%(searchterm)s^10 Title:%(searchterm)s^20 portal_type:Folder^10 portal_type:Document^30 review_state:published^100
 
and added to collective.solr search query. 
The result than is:
 
Results
 
Stay tuned for more information about release of rt.solr package ;-)
 

Aug 24, 2009

Ridurre il numero dei click: SpeedUpUI

by keul — last modified Aug 24, 2009 12:05 AM
Filed Under:

Introduzione al primo di una serie di prodotti atti a velocizzare l'interfaccia di Plone, aumentando le funzionalità present in ogni pagina

Introduzione

L'idea che sta dietro al progetto nasce dalla "lentezza" di Plone in tutte quelle situazioni in cui è necessario effettuare data-entry massivo e/o ripetere molto spesso la stessa operazione.

Non si sta quindi parlando di rendere Plone più veloce (il Web è pieno di sanguinose discussioni a riguardo!) ma di rendere l'interfaccia più semplice. A volte bastano pochi accorgimenti.

Un esempio semplice, ma che fa capire quello che intendo è la PLIP 228 discussa per Plone 4. Si parla di ripristinare il menù a tendina "Aggiungi nuovo elemento" anche per i contenuti che non sono cartella (rimosso con l'avvento di Plone 2.5). I motivi che hanno portato alla sua rimozione sono tutto sommato buoni (legati all'usabilità dell'interfaccia) ma tutti si sono accorti quanto fosse più facile prima (leggasi "meno click e meno caricamenti") inserire più contenti in modo massivo.
Un'interfaccia più ricca è anche più potente, ma porta anche a svantaggi dovuti alla sua minore facilità. Qual'è il confine?

In questo caso, e nei casi di cui questa serie di prodotti vuole occuparsi, la questione è ovviamente un appesantimento dell'interfaccia che diventa meno semplice, meno chiara...
Ad ogni modo non è sempre sbagliato fornire (a chi la vuole) un'interfaccia più complessa, che magari necessita l'utente/redattore ad un addestramento maggiore, ma che può portare a anche a ridurre il numero di caricamenti.

Esempio numero 1: le briciole di pane

Cosa non va nelle briciole di pane di Plone? Ovviamente nulla!

Chiari, semplici, leggibili link che permettono di tornare velocemente ai contenitori del documento corrente...

Quando un utente usa le briciole di pane?
Un utente visitatore le usa per tornare al contenitore... nulla di più, e non ci si aspetta quindi che siano necessarie altre funzionalità.
Trovo il comportamento attuale un po' limitante invece per gli utenti redattori... questi possono voler tornare al contenitore/i per effettuare altre operazioni, che a mio parere possono essere:

  • Modificare il contenuto
  • Accedere alla vista dei contenuti della cartella
  • Aggiungere nuovi elementi

redturtle.speedupui.pathbar

Il primo (e speriamo non l'ultimo) prodotto si occupa ovviamente della pathbar di Plone che non a caso ho portato come esempio.

SpeedUpUI Pathbar sostituisce la normale viewlet delle briciole di pane con una versione più complessa che offre un menù a tendina ai redattori, per effettuare le operazioni descritte sopra.

La versione 0.1.0dev non supporta ancora la gestione dell'aggiunta di nuovi elementi (ammettiamolo... probabilmente sarebbe la modifica più interessante... date tempo al tempo!) così come non c'è un effettivo controllo dei permessi (perché mostrare un link "modifica" se l'utente non ha effettivamente il permesso di farlo?), ma ha offerto comunque interessanti spunti per fare riflessioni...

Innanzi tutto l'elemento corrente delle briciole di pane non ha nessuna funzionalità avanzata. Se si vuole modificare il contenuto corrente Plone offre già un apposito comando.

Per quali contenuti poi mostrare la voce "Contenti" per visualizzare i contenuti della cartella?

In un primo momento verrebbe da pensare tutti. Ovviamente tutti gli elementi della pathbar tranne l'ultimo sono sicuramente contenitori. Ad ogni modo ci sono casi in cui il contenitore è stato scritto per non sembrare tale... L'unico esempio vivente che ho visto usare questa funzionalità è l'oggetto PoiIssue del gestore di segnalazioni Poi.

Gli oggetti di questo tipo utilizzano l'interfaccia INonStructuralFolder. L'uso di questa interfaccia viene utilizzato da Plone per capire se la cartella deve in effetti sembrare una cartella agli occhi dell'utente (deve avere una scheda per visualizzare i contenuti?).
Martin Aspeli ha scritto un vecchio tutorial ancora valido a riguardo.

La scelta è stata quindi quella di non mostrare il comando di visione dei contenuti per i contenuti INonStructuralFolder.

Conclusione

Il prodotto non è completo, forse migliorabile (di certo per quanto riguarda l'interfaccia mostrata) e probabilmente qualche altra buona funzionalità potrebbe essere implementata.

La scelta di usare un namespace di secondo livello speedupui nasce da un fatto preciso: ci sono altri "pezzi" del puzzle Plone che possono mostrare funzionalità aggiuntive che permettano di ridurre i caricamenti...

Un esempio?
Il navigatore...

Aug 21, 2009

collective.amberjack sprint

by Andrew Mleczko — last modified Aug 21, 2009 08:14 PM
Filed Under:

short summary about the amberjack sprint in Ferrara

We have organized a small amberjack sprint. There was a lot of things to-do and only 5 sprinters: vincentfretin (online from France), fdelia, massimo, mirna and amleczko (all directly from Ferrara).

Beneath you can find summary of the sprint:

This is a report of the work made today
we just refer to the issue that were in today's worklist

put tours in a pipeline:
 - Add a link to the first tour in the first page of the second one, so a user
   who selects the second one directly will be able to takethe first one first,
   since you need to create the MyFolder folder first.
 - The whole Amberjack should manage branches like "if you are not logged in,
   then, log in".
 - At the end of a tour, add a link to the next tutorial.

We decided to have preconditions that has to added to a step (macrostep).
For example:
isAnonymous
isAuthenticated
etc.

there is already a initial implementation (amleczko).
completed - there are two basic validators: isAnonymous and isAuthenticated
when a precondition is not met a warning "the step is not visible"
is displayed. next, we should disable the step and all the followers.

we need to choose and implement a good strategy to define dependencies between
tours


 - Check the entered texts: check if the texts entered in the fields are the
   ones we expected. If not we may have problems with ids (in the url) and with
   the xcontent. Otherwise, let both url and xcontent be function of what the
   user entered.
  
we decided that before submitting we have a ajax call that checks if
all the mandatory things has been done by the user.
to be done.


 - collective.jqueryui. actually we have a js file in core/skins. it contains
   both jquery.ui and jquery.ui.draggable.
   we could remove the jquery.ui stuff and leave only a file ui.draggable.js.
   unluckly, collective.js.jquery + ui.draggable.js doesn't work (raise a js error)
  
Vincent Fretin, both complete this ticket and created two different profiles
for plone3.2 and plone>=3.3
  
 - Write tests for meta directives, tour_manager...

Andrew Mleczko and federica d'elia wrote a couple of tests and also refactored the
code see:
http://svn.plone.org/svn/collective/collective.amberjack.core/trunk/docs/HISTORY.txt


 - Add an option to the Unified Installer
 - Add a run-profile option to plone.recipe.unifiedinstaller to run additional
   profiles when the Plone Site is created
  
to be done
  
 - Tours: (massimo azzolini e mirna bagnolatti)
  Tour 5: Format a page using the visual editor
  Tour 6.1: Create internal links
  Tour 6.2: Create external links
  to be completed

  Tour 7: Upload an image
  completed, but cannot show the last "all done" step since the url is
  function of the name of the image uploaded. we need a fix [1]

  Tour 8: Insert image on a page
  completed, but cannot correctly save. when submitting the form the stuff
  inside kupu is not saved. [2]
 
  Tour 9: Upload and link to a File
  completed, with the same problems as above:
  1. the file obj's url is function of the name of the file itself. [1]
  2. cannot save the kupu stuff [2]
 
  Tour 10: Using the Contents tab
  the main problem is that we have the same page, but we want to move on
  many different tour steps. see [1]
 
  Tour 12: Create a static text portlet
  almost finished. problems:
  1. click on Save button show the alert "are you sure you want to leave..." [2]
 
 
Some open issues

 - [1] Provide a better way to manage the progression of the steps: too often
   path + xpath/xcontent do not suffice.
   Use the step position number 1/5, 2/5 etc.
to be done
  
 - [2] all the submit buttons (form.button.save & co) have problems if just
   "submitting", maybe we have to say that we are clicking on that button.
   we cannot either click() on it since it opens the alert window
   "are you sure you want to leave..."

to be investigated


Aug 19, 2009

suds: SOAP client that works (also in Plone)

by Andrew Mleczko — last modified Aug 19, 2009 02:10 PM
Filed Under:

If you need a lightweight SOAP client for consuming web services - you need to try suds.

I'm developing SOAP integration in Plone. I have never used efficiently SOAP python client before so first I wanted to test all of them. According to Plone there are two well-known python SOAP implementations: ZSI and SOAPpy. They are both focused on server not client implementation. It took me some time to configured them properly and found that the last release for ZSI was 2006 (for SOAPpy it was 2005). Finally I found suds. It's fast, light and powerful. And it has a community which is helpful - especially for beginners. 

Installing and using is veery simple. You can use easy_install:

>>> easy_install suds

 

and use it:

from suds.client import Client
url = 'http://localhost/testingservice.wsdl'
client = Client(url)

 

than accessing methods is as simple as:

document = client.service.getDocument(id=1)
print document
(Document)=
{
title = 'Document title'
description = 'Document short description'
}

 

even if your webservice has strange method names:

document = getattr(client.service,'get-document')(id=1)

Aug 16, 2009

munin.zope is born

by Andrew Mleczko — last modified Aug 16, 2009 12:15 PM
Filed Under:

Last week we moved redturtle.munin to it's new namespace - munin.zope.

Recently, with a lot of witsch help (honestly - it was almost all his work :-), we have refactored redturtle.munin and moved it to munin.zope namespace. The idea is to use it also for other projects - like munin.varnish or munin.django etc. If you don't know munin.zope yet it provides munin plugins for monitoring various aspects of a Zope instance. It's easy to deploy and almost ready out-of-the-buildout.

As for 1.1a1 we have for plugins available:

  • "zopethreads" - reports free Zope threads
  • "zopecache" - reports database cache parameters
  • "zodbactivity" - reports ZODB activity
  • "zopememory" - reports Zope memory usage (only works on Linux)

We are working right now on another one - ZODB conflict errors. It's supposed to count number of conflict errors in last 5 minutes.

Aug 14, 2009

mappe google su plone

by Massimo Azzolini — last modified Aug 14, 2009 09:30 AM
Filed Under:

Lo sapete tutti, ormai siamo tutti molto web2.0 e una delle funzionalità più cool è geotaggare i contenuti rendendoli visibili su una mappa. E Google nella sua magnificenza ci offre un buon servizio di mappe con apposite API per utilizzarlo.

In Plone sono stati realizzati, nel tempo, diversi prodotti da varie aziende nel mondo:

L’ultimo in ordine di tempo e sicuramente il migliore, ovviamente imho, è Products.Maps di Jarn.

products.maps


Un sacco di Location colorate su una mappa

Offre poche ed estremamente utili funzionalità:

  • un nuovo contenuto “Location” (”Posto” in italiano), con tanto di icone colorate e ricerca del punto sulla mappa e preview del risultato. In pratica una pagina standard di Plone con in più la funzionalità di essere “piazzata” su una mappa.
  • una vista che disegna una mappa di google e che è applicabile via menu a cartelle e cercatori

Utilizzando Maps puoi quindi creare delle cartelle all’interno delle quali inserire “posti”. Essendo contenuti plone questo significa che puoi associare permessi, workflow, parole chiave ecc.

A questo punto puoi anche creare il tuo cercatore che prenda tutte le location con una certa parola chiave o quelle in un certo stato e visualizzarle assieme.. in una nuova mappa.

Ma la cosa migliore che fa è di essere stato realizzato con tecnologia Z3 il che lo rende facilmente estendibile. quindi…

redturtle.maps.core

Il punto fondamentale è: Products.Maps è un ottimo prodotto, ma.. non tiene conto di tutti gli altri contenuti Plone. Nemmeno quelli base. Insomma, tutti i contenuti plone (basta che estendano ATContentType) hanno un bellissimo campo “Location” in cui solitamente indichi un indirizzo. Questo campo è bellamente ignorato da tutti. Eppure sarebbe così utile.

L’idea che abbiamo avuto con Andrew Mleczko è stata quindi quella di estendere Maps fornendo un adapter (o un set di adapter) per tutti i contenuti plone. L’unica condizione è che abbiano il campo Location valorizzato. Et voilà redturtle.maps.core è uscito dal cilindro.

Hey, nulla di devastantemente complicato (e questo il bello di plone..). Ma, secondo me, è esattamente quello che mancava per chiudere il cerchio.

Una prima release è stata rilasciata in occasione del Linuxday 2008 e ho avuto la possibilità di presentarla a Ferrara.

Poi, l’appetito vien mangiando, Andrew e Luca Fabbri hanno dato un ulteriore contributo alla cosa: il secondo ha migliorato la parte di query a google per tradurre l’indirizzo in coordinate geografiche, il prima ha dapprima realizzato una portlet (redturtle.maps.portlet) e quindi ha reso disponibile un template che effettua ricerche basate sui parametri che gli vengono passati e visualizza il tutto, ovviamente, in una mappa.


Vedi come funziona

Nel frattempo ho esplorato la possibilità di avere baloon e icone differenziati per tipo.

Sempre sfruttando le funzionalità di plone/zope3 il comportamento relativo ai baloon potrà essere “overridden” in qualsiasi momento. in questo senso redturtle.maps.core è una specie di configurazione “out-of-the-box”.

Per il futuro, ci sono tutta una serie di funzionalità che vorremmo sistemare. Ad esempio i baloon appaiono veramente enormi: un contenuti plone è troppo verboso. Occorre pensare ad una soluzione.

Non nascondo che mi piacerebbe riuscire ad integrare il tutto in un’unica soluzione con Maps.

Stay tuned.

Aug 12, 2009

pagine composite con Plone

by Massimo Azzolini — last modified Aug 12, 2009 12:00 AM

Una recensione su quattro prodotti plone nati per creare aggregare contenuti in una sola pagina plone.

Com’è noto Plone offre un’interfaccia in cui al centro della pagina visualizzi un oggetto per volta: una pagina, un evento, una news.

Non è, di base, possibile avere contemporaneamente più contenuti provenienti da punti differenti del portale oppure mettere assieme un cercatore, un testo libero e il contenuto di una cartella.

Nei giorni scorsi mi sono trovato a valutare alcuni prodotti Plone che offrano la possibilità di creare pagine composite. Mi sono imbattuto in questi:

I primi due usano un approccio simile ovvero ti permettono di riutilizzare o di inserire contenuti plone all’interno di un’area nella pagina. Gli altri due invece sfruttano le portlet come fornitrici di contenuti.

L’elenco non è esaustivo, ma questi mi sono sembrati abbastanza utilizzabili anche per un utente non esperto. Per tutti quanti l’idea è quella di fornire un meccanismo (abbastanza) facilmente usabile da chiuque e non quello di permettere di creare layout astrusi. Questo è roba per “designer”: gli editor si limitino a inserire e aggregare contenuti.. ;)

CMFContentPanels

CMFContentPanels: due box affiancati

Questo è un prodotto nato con la versione precedente di Plone (la 2.x), ma recentemente è stato modificato e ora funziona anche con la 3.x.

E’ alquanto versatile e l’avevo già utilizzato con la 2.5. Oggi, sinceramente, trovo il suo approccio un po’ datato. Speravo che il porting alla 3.x avesse introdotto ulteriori funzionalità, ma l’impianto generale è tendenzialmente lo stesso.

Inoltre gestisce gli allineamenti tramite tabelle. Dal punto di vista dell’accessibilità non è la soluzione ideale. Buono il fatto che i vecchi portali 2.5 possano essere migrati alla 3.x senza dover obbligatoriamente ricrearne parti ex-novo.

Collage

Ho molto apprezzato Collage per la sua flessibilità. Fondamentalmente funziona a righe all’interno delle quali vai ad aggiungere colonne. In ogni colonna, uno sotto l’altro, puoi aggiungere elementi. Non è studiato per “intabellare” contenuti, quindi non pensare a questo utilizzo, sarebbe una forzatura. E’ tutto realizzato tramite DIV quindi un po’ di CSS può essere d’aiuto per aggiungere un tocco di grafica in più. Tra l’altro ogni oggetto ha la sua classe e/o il suo id per cui è semplice identificare il punto su cui si può agire.

Collage (preview da plone.org)

Ogni elemento può essere aggiunto attraverso semplici e intuitivi menù a scomparsa.

I contenuti che si possono inserire sono tutti quelli disponibili nel portale plone. Questo significa che eventuali tipi custom possono essere utilizzati. Inoltre puoi sia riusare oggetti già creati in qualche altra parte del portale che crearne di nuovi: verranno salvati all’interno del collage stesso.

L’interfaccia è debolmente usabile e ti permette di muovere gli elementi riordinandoli velocemente attraverso delle piccole frecce. Ho solo avuto qualche noia utilizzando l’opzione di copia: da riprovare questa funzionalità.

In generale l’ho trovato ottimo e molto facilmente utilizzabile.

Products.ContentWellPortlets

Questo è il primo dei due prodotti basati su portlet. L’idea è quella di fornire due aree “attive” all’interno delle quali inserire portlet: una sopra il contenuto corrente, una sotto.

un sacco di portlet!

Si applica quindi a qualsiasi oggetto tu vada a creare all’interno del portale e sfrutta tutte le regole delle normali portlet di plone. Questo significa che se in un folder aggiungi una portlet statica in testa, questa apparirà in tutte le pagine contenute nel folder. Esattamente come accade per le due colonne laterali.

Il principale vantaggio sta proprio in questo: essendo applicabile ovunque non hai la necessità di creare tipi ad hoc per avere contenuti speciali. Lo svantaggio è che puoi utilizzare solo portlet e non reali contenuti. Con il tempo le portlet disponibili saranno sempre più e sempre più pervasive: questo svantaggio calerà.

Non puoi e non potrai mai in ogni modo, però, aggiungere un contenuto come tipo custom alla stregua di Collage.

collective.portletpage

E’ un nuovo tipo di contenuto vero e proprio.

E’ una normale pagina Plone con in fondo 4 aree (nord, sud, est, ovest) in cui aggiungere portlet. A differenza del precedente ti permette di gestire con più flessibilità il layout delle portlet: in fondo hai due aree in più…

Anche questo prodotto è ben fatto ed è assolutamente plonish. D’altra parte l’autore è una garanzia in questo senso.

Gestione di PortletPage

Credo che possa essere molto utile per strutturare sottohomepage di un portale o comunque punti di raccolta di informazioni. Il fatto che sia in ogni caso un’estensione di Page ne limita in parte l’utilizzo estensivo: e se volessi le stesse funzionalità su un evento? avrei bisogno di collective.portletevent? D’altra parte, uno sviluppatore può “prendere spunto” molto facilmente da questo prodotto.

Il fatto che utilizzi le portlet poi ha gli stessi vantaggi/svantaggi del precedente.

Il risultato