Sunday, March 27, 2011

I video in Plone: come (e nel modo giusto)

Il Web è cambiato molto, ce ne siamo accorti? Quello che una volta era una collezione di testi collegati tra loro, oggi porta tante altre tecnologie, canali di comunicazione (media) e funzionalità. Nemmeno le immagini sono più sufficienti, e il fenomeno YouTube credo ne sia in gran parte responsabile (se così si può dire).

Se quindi i video diventano, in modo ufficiale, parte dei contenuti del Web e molto spesso il contenuto stesso, tanto vale prendere in considerazione la possibilità che il nostro CMS preferito li supporti!

NB: nel seguito ometto volutamente l'argomento HTML 5, che probabilmente nei prossimi anni semplificherà l'argomento audo/video per il Web ma ad oggi è ancora prematuro.

I video in Plone
Se la necessità è integrare un nuovo tipo di contenuto in Plone o poter vedere un video all'interno di un contenuto Plone, lo standard de facto è usare collective.flowplayer.
Questo prodotto si basa sul diffuso player open source Flowplayer e si installa facilmente in Plone, fornendo alcune funzionalità semplici ma efficaci.

Che cosa fa? In modo intelligente trasforma i file inseriti in Plone (se in uno dei formati compatibili col player) in veri e propri video riproducibili dal Web. La stessa cosa viene fatta anche con i contenuti di tipo Collegamento (ma questa seconda funzionalità la trovo di più raro utilizzo... si tratta di inserire un URL ad un file compatibile).
Altra funzionalità e permettere, previa qualche configurazione, la possibilità di inserire i video all'intero dell'editor WYSIWYG di Plone.

Credo che di articoli di blog su questo prodotto ne siano stati fatti vari, quindi non è mia intenzione soffermarmi oltre, ma prima chiariamo questo punto: ci sono alternative? Altri player video? Ovviamente sì, ma Flowplayer è il più diffuso: funziona bene e forse (ma spero in minima parte) il fatto che...
  • il creatore originale sia Martin Aspel
  • il creatore di Flowplayer sia anche il creatore delle jQuery Tools, che sono il framework per le interfacce grafiche in Plone 4
...influiscono sulla scelta.

Formati dei video
Avete mai trovato difficoltà nello spiegare ai vostri utenti come non tutti i formati video siano amici del Web? Flowplayer supporta i formati mp4 e flv. Il DivX formato AVI della comunione di vostra nipote non è propriamente un buon formato...

Nel caso quello sia l'unico formato disponibile potete usare un programma di conversione. Ma cosa fare se tutti i video che devono essere allegati partono da un formato incompatibile? Spiegare al redattore come usare un ulteriore software per fare la conversione non è mai un buon modo... la fotocamera dell'utente gli genera un file mpeg. Se non si vede su Web sembra sempre colpa di Plone!

Esiste almeno un prodotto Plone per eseguire la ri-codifica live del video. Installando collective.transcode.star avrete disponibile nel vostro buildout un nuovo demone che si occuperà di convertire i vostri video! Fantastico!

Limiti
Anche se la strada sembra spianata, ci sono alcuni limiti (o potenziali problemi) nel gestire i video in Plone.

Innanzi tutto va tenuto presente come un video sia prima di tutto un "grosso" file. Quando il browser remoto inizia la visione del video (per meglio dire, durante il buffering) il file si muove attraverso la rete. Un video in formato flv può comunque occupare centinaia di megabyte.

Questo porta a qualche problema.

Consumo della memoria
Nelle versioni di Plone precedenti alla 4.0 (non se si è installato a parte anche plone.app.blob) il caricamento da parte di Plone di un file porta anche al caricamento completo dello stesso, che viene messo nella memoria cache del thread che ha servito la richiesta. Per fortuna plone.app.blob evita questo problema (anche su Plone 3).
Anche altri prodotti come FileSystemStorage danno lo stesso beneficio, ma se potete scegliete i blob nativi di Zope.

Lock dei thread di Zope
In una installazione standard di Plone, l'application server sottostante (Zope) è configurato per gestire al massimo 4 thread concorrenti nel servire le richieste degli utenti.

Fintanto che il file intero non viene inviato, quel thread è bloccato nel servire la richiesta. Questo vale sia per l'upload del video che per la sua visualizzazione. L'aumento del numero dei thread non è una soluzione (meglio avere più istanze di zeoclient... ma dovete avere le risorse adeguate).
Questo problema è potenzialmente grave se volete usare Plone pesantemente per la gestione dei video.

Una soluzione, che scarica completamente Plone dal problema di lettura del blob e che quindi si integra con plone.app.blob introdotto sopra, è l'uso di ore.bigfile, introdotto da un ottimo articolo di Aaron VanDerlip. Questo è da tenere presente anche se non state gestendo video in particolare, ma solamente grossi file.
Per riassumere in due parole, questo prodotto sfrutta il Web server Apache (che di solito viene messo davanti ad ogni sito Plone) per lasciare completamente a lui la gestione dell'invio del video (anche in upload). Plone viene solo interrogato per check di sicurezza, poi il file blob viene preso e mandato a client che ne ha fatto richiesta.

Pare purtroppo che questo prodotto non sia rilasciato. Il grado di maturità quindi non è ben chiaro... :-(

EDIT. Da un commento, mi sono accorto che questo pezzo non è stato ben scritto. In Realtà plone.app.blob risolve anche il problema del lock del thread Zope pur non facendo nulla di speciale... Zope ha un modo efficiente di servire questo tipo di situazioni da moltissimo tempo (non ricordo, ma forse addirittura dalle versioni di Zope precedenti all'era Plone), ma per qualche motivo questo metodo non è così ben documentato e noto.

import os, stat
from ZPublisher.Iterators import filestream_iterator

def download(self):
filepath = '/home/me/VeryBigBigFile.pdf'
size = os.stat(filepath)[stat.ST_SIZE]
self.REQUEST.RESPONSE.setHeader('Content-Length', size)
return filestream_iterator(filepath, 'r')
Cosa succede? Quando nella response viene inserito un oggetto filestreamiterator, Zope sa che deve servire in modo efficiente la lettura della risorsa. Non ricordo i dettagli del funzionamento ma fondamentalmente la lettura viene gestita con un thread separato, e quello di Zope viene quindi subito liberato.

Quindi? Tutto ok?

A mio avviso questo non significa che coi BLOB abbiamo risolto tutti i problemi per rendere Plone la "Uber-Applicazione" di streaming. Come ho detto sopra, ogni istanza Zope è fatta di thread, che quindi vengono eseguiti all'interno dello stesso processo Zope (se non capite bene di cosa parlo, leggete cosa dice Wikipedia).

Un nuovo thread aumenta il lavoro totale che viene fatto dal processo. Ricordate quando sopra dicevo che l'aumento del numero di thread non è quasi mai una soluzione? Il problema è che se la vostra istanza Zope viene eseguita su una supermacchina in stile Multivac, con vari processori multicore, l'istanza (il processo) viene eseguita comunque da un processore. Più istanze (zeoclient) e uno zeoserver invece usano processi (e, se disponibili, processori) diversi.

Per tornare ai nostri blob: il thread non viene bloccato, ma il nuovo thread rende "tutto più lento".

Perché l'approccio di ore.bigfile è migliore? Perché Apache è un'applicazione che nativamente usa processi separati. Far servire il file direttamente ad Apache:
  • fa sì che il file non passi, neanche in minima parte, per l'area di memoria del processo Zope
  • non aumenta il carico dell'istanza con un nuovo thread
  • sfrutta Apache, in un processo separato.
Consumo della banda
A questo problema non c'è una soluzione pratica e spesso viene dimenticato. Il cliente vi chiede "voglio i video in Plone", ma non ci si ferma a pensare che se questi video hanno successo, è la banda disponibile al vostro sito a risentirne se decine di persone iniziano a guardare i vostri bellissimi filmati. Questo comporta che:
  • i video si vedano male (i video "scattano")
  • la navigazione del resto del sito ne risenta (il sito va lento)
  • l'attività dei redattori del sito ne risenta (il sito va lento)
Non sottovalutate mai l'opportunità di mettere i vostri video da "un'altra parte", su servizi che questo lavoro lo fanno di mestiere. Esempio?
  • YouTube
  • Vimeo
  • ...
Se un account "gratuito" su questi servizi non vi pare sufficiente, valutate anche cosa comporta spendere una piccola somma per comprare un account premium... siete certi che il gioco non valga la candela?

Video esterni: e adesso?
La cosa più semplice in assoluto è configurare Plone per consentire ai vostri redattori di inserire il codice HTML necessario per eseguire l'inclusione del video del sito remoto (teniamo come esempio principale YouTube, ma la cosa vale per qualunque altro servizio).

Dovete configurare i filtri HTML di Plone per non considerare più "cattivi" alcuni tag HTML usati per questo tipo di soluzioni: i tag sono di solito EMBED e OBJECT.

Filtri Html in PloneQuesto viene fatto dal pannello di controllo di Plone, nella sezione di gestione "Filtri HTML".

NB: c'è un motivo valido, di sicurezza, per cui Plone di base non permette agli utenti di poter usare questi tag... un redattore potrebbe inserire codice malevolo nelle vostre pagine!

Come detto precedentemente la documentazione di collective.flowplayer affronta anche questo argomento. Se siete interessati

Un altro interessante approccio piuttosto recente è un prodotto sviluppato da Quintagroup per interfacciarsi con i servizi di embed.ly.
Usando collective.embedly il codice per l'integrazione con i video remoti viene generato in un modo semplice, non dipendente dalla piattaforma scelta (e ne sono supportate varie) e usando TinyMCE! Del codice Javascript al momento del rendering della pagina "trasforma" i link marcati nel player video corretto! Questo elimina anche il problema di abilitate i tag potenzialmente pericolosi in TinyMCE!
Notevole, ma solo per Plone 4.

Ancora video esterni... ma pur sempre contenuti
Il limite di inserire video esterni nei modi descritti sopra è che il video diventa parte di un contenuto ma non è un contenuto. Non possiamo taggarlo o associargli gli utili metadati che abbiamo in Plone. Non possiamo fornire ai nostri utenti una collezione di video... questo potrebbe essere un grosso limite per la parte redazionale del vostro sito.

Quindi? L'unica soluzione è avere la banda? Non esattamente. In RedTurtle ad esempio abbiamo sviluppato un prodotto, redturtle.video, che fa di nuovo dei video un contenuto. Il prodotto segue espressamente una specifica richiesta di un cliente ed è composto da due contenuti: il tipo "Video Interno" e il "Link a Video".
Mentre il primo è tutto sommato un semplice contenuto costruito sulle funzionalità già date da collective.flowplayer (ma faccio notare una questione di usabilità non da poco: non è semplice capire che per creare un "video" in Plone un utente dovrebbe inserire un "file", come invece è nel funzionamento di collective.flowplayer... l'utente si aspetta che nel menù di aggiunta element ci sia "Video") voglio evidenziare ciò che viene dato da contenuto di tipo link.
In minima parte è, di nuovo, un contenuto costruito su qualcosa che da collective.flowplayer, ma fa anche altro: un po' come collectve.embedly si integra con siti esterni che forniscono servizi video, ma tramite un contenuto simile al link. L'utente inserisce un link a YouTube, oppure Vimeo, e di nuovo abbiamo il nostro player integrato (e tag, correlati, etc...).

Altri prodotti
Prima di cambiare rotta con un argomento parallelo, voglio fare notare come le suite di prodotti nel mondo di Plone non si limitano al solo collective.flowplayer.
Eccone altri:
  • Plumi. Praticamente trasforma Plone in un CMS per i Video. Se il vostro target è creare un sito il cui documento principale sono i video, valutate seriamente questo prodotto!
  • Plone4ArtistsVideo. Storicamente è stato il primo prodotto che si è occupato di video... funziona ancora... ma il Web è pieno di persone che si sono pentite di averlo installato.
  • Plone Video Suite. Progetto interessante e di buone intenzioni. Nasce da alcuni sprint che volevano portare ordine nel caos della situazione video in Plone (probabilmente il ruolo di Attila in questo caos lo ha fatto P4A Video :-().
    Purtroppo ad oggi non si sa a cosa porti questo progetto.
La panoramica sui prodotti video è finita, ma vi pare poco?

Per quanti riguarda l'accessibilità
Per chi come me l'accessibilità dei siti Web non è solo un'abitudine, ma una necessità quotidiana nel lavoro, sa come inizialmente i requisiti della Legge Stanca (Legge 4/2004) possano a volte sembrare limitanti in maniera piuttosto stringente. In realtà, sebbene sia una legge lungi dall'essere perfetta (e per chi ha lavorato con Plone sa bene cosa significhi il Requisito 1, relativo al codice HTML/XHTML Strict) è comunque una legge "giusta".

Un sito accessibile è quasi sempre un sito ben costruito, e non solo da un punto di vista strutturale, ma anche umano. Sapendo che il sito sviluppato ha tenuto conto, magari anche solo in minima parte, di utenti non vedenti, non udenti o ad altre forme di disabilità dovrebbe farci sentire meglio.

Ecco gli "obiettivi e finalità" della Legge:
La Repubblica riconosce e tutela il diritto di ogni persona ad accedere a tutte le fonti di informazione e ai relativi servizi, ivi compresi quelli che si articolano attraverso gli strumenti informatici e telematici.
Se per quanto detto fin'ora il nostro sforzo è che i video diventino contenuti, i video devono essere accessibili. Ci sono ovviamente requisiti tecnici specifici riguardanti i video e i contenuti multimediali nella Legge Stanca, ma chiediamoci prima di tutto come un video può essere completamente accessibile.

Quali difficoltà ci sono nell'accesso ad un video sul Web?
  • Accessibilità dei comandi del video a tutti i dispositivi di input
  • Accesso ai contenuti del video a soggetti non vedenti
  • Accesso ai contenuti del video a soggetti non udenti
  • Accesso ai contenuti del video a soggetti non udenti e non vedenti
Molto di quello che leggere di seguito viene dalla lettura dell'ottimo libro di Michele Diodati: "Accessibilità - guida completa".

Accessibilità dei dispositivi di input
Non esiste solo il mouse, anzi: fingiate esista solo la tastiera! Questa regola non vale solo per i video ovviamente, ma per i contenuti Web, Plone in proposito fa già un ottimo lavoro.
Per l'accesso al video l'attenzione si sposta sul player usato.

Le ultime versioni di Flowplayer dovrebbero aver migliorato la situazione. Uso il condizionale perché non ho avuto esperienze dirette di recente, ma ho solo letto i commenti degli autori alle ultime release.

Tempo fa, essendo rimasto piuttosto affascinato dal mondo dei plugin che girano attorno a Flowplayer, ho sviluppato un prodotto Plone, collective.flowplayer_toolbar, che sfrutta le funzionalità di uno di questi plugin: il plugin della barra di controllo.
Questo prodotto funziona bene anche con le versioni recenti di Plone e collective.flowplayer, quindi nel caso qualcosa nell'accessibilità della barra di controllo Flash non vi piaccia, potete pur sempre usare questo! :-)

Audiodescrizione dei video
E' l'argomento che conosco meno, quindi passerò oltre in fretta.

L'audiodescrizione si occupa dei soggetti non vedenti o ipovedenti. Non fermatevi a questa frase pensando che se il vostro video ha una traccia audio basti il sonoro del video stesso... questo può essere vero per alcuni tipi di filmati (mi permetto di dire a istinto che per un video contenente un'intervista non sia necessaria nessuna descrizione aggiuntiva), ma non è una regola generale.
L'audiodescrizione è un'ulteriore traccia audio che si sovrappone alla prima (ovviamente, senza inficiarne la comprensibilità) e che commenta, magari nelle pause del testo parlato, che cosa succede a video. E' l'audio per le scene dove l'audio non è sufficiente a capire cosa succede.

Non conosco le caratteristiche tecniche sul come realizzare un'audiodescrizione ma credo sia la cosa più complessa da fare per rendere un video accessibile, sia dal punto di vista del tempo investito che per la tecnologia richiesta (soprattutto se il video ha già in effetti una sua traccia audio).
Potrei sbagliare, e nel caso vi invito a correggermi.

I sottotitoli del video
Per qualche motivo più diffusi e conosciuti al grande pubblico (forse siamo tutti figli della pagina 777 di televideo), chi beneficia dei sottotitoli sono soggetti non udenti o in generale con disabilità all'udito che non permettono loro di comprendere i suoni e il parlato.

La soluzione a questo tipo di disabilità sono appunto i sottotitoli. La sottotitolazione di un video è più semplice dell'audiodescrizione, forse perché è più semplice anche da comprendere che cosa va scritto effettivamente scritto.
Le risorse sono anche più diffuse, cito ad esempio l'interessante progetto Universal Subtitles.

Tornando al nostro compagno collective.flowplayer, esiste un ulteriore plugin di Flowplayer per poter visualizzare i sottotitoli nei video: il captions plugin.
Ancora una volta la sua integrazione con Plone è stata piuttosto semplice: lo sviluppo di collective.flowplayercaptions non ha richiesto enormi sforzi se non comprendere bene le API del plugin (piuttosto confuse) e creare un'integrazione non troppo invasiva per i file Plone.

Questo prodotto non fa tutto: è comunque il redattore che deve fornire il file contenente i sottotitoli (supportato è il formato RST).

Il costo in termini tecnologici per ottenere i sottotitoli e basso, ma c'è un certo sforzo in termini di tempo.

La trascrizione testuale del video
La trascrizione video è l'alternativa dove cadono tutti quelli che vogliono tentare di rendere il proprio sito accessibile. E' già qualcosa, ma non si potrebbe fare di meglio.

Chi beneficia della trascrizione video è l'utente sordocieco, che per ovvi motivi non può trovare né beneficio dall'audiodescrizione né dai sottotitoli.
Con la completa trascrizione del contenuto del video, compresi di dialoghi e descrizioni, può invece (sempre attraverso dispositivi hardware specifici) "leggere" il testo scritto tradotto in Braille.

Dal punto di vista tecnico, Plone può fornire una trascrizione testuale ad un video tramite un semplice contenuto correlato, magari ad una semplice pagina. E' ovvio che il redattore deve inserire nel CMS questo documento, ma la sua realizzazione spaventa meno che non fornire un'audiodescrizione o un supporto ai sottotitoli. Per di più si potrebbe pensare "se con questa alternativa supero ben due disabilità, tanto vale limitarsi a questa"! Vero... ma non molto giusto.

E' ovvio che un utente non udente o un non vedente possono accedere beneficiare della trascrizione testuale, ma l'esperienza vissuta è assai limitata. A questo punto perché non rimuovere il video per tutti e fornire solo le trascrizioni?! Vi piacerebbe?

Accessibilità delle risorse esterne
Risolvendo un problema, ne introduco un altro. Possiamo sentirci tranquilli se un video preso da YouTube e inserito nel nostro sito Plone non è accessibile? Dopo tutto la colpa è di YouTube, giusto?

Questo scaricabarile non dovrebbe farci sentire meglio, e per un ente pubblico questa non può essere una scusa valida. Rendere anche i video presi da YouTube (e probabilmente da altri servizi) accessibili si può, ma richiede uno sforzo aggiuntivo.

Un documento con vari interessanti spunti è "Captioning YouTube Video and Providing Accessible Controls".

Conclusioni
I video in Plone, integrati o inseriti come contenuti, sono possibili, che sia un semplice video di pochi secondi ad un intero sito dedicato ai contenuti multimediali.

L'accessibilità dei video è una sfida reale. E' possibile, ma non nascondiamo che sia costosa in vari termini.

Saturday, March 19, 2011

IE6: a strong enemy, but at the end the Web is winning

Finally also Microsoft say explicitly that IE 6 has become a problem for the Web evolution. The reference site I'm talking about is The Internet Explorer 6 Countdown.

The problem is not a 10 year old browser, but is a 10 years old browser that for year simply didn't want to leave it's place as one of the most used browser, because if attached to the most famous operating system of the world: Windows XP.

Also this has been one of the most powerful enemy for web designers. What other program you know that has bugs so famous to have a name?! Bugs that aren't simply been fixed after a couple of day/weeks, bug stayed with us for years... until a next-generation release came out.
Ok, maybe IE 7 and IE 8 (and for what I read also IE 9) are not perfect, but Microsoft is moving on, in the right direction.

However... what is important now is this: also the browser creator say "this IE release must be terminated", and we have a good site where to monitor the status of it's agony.

I can't imagine all time, headache and money spent in the world to fix IE 6 behavior, or the old code that 3rd party library (as jQuery) still keep to maintain the IE 6 compatibility. I always defined IE 6 not as a browser, but as "a Windows Update client that can read HTML in the meantime".

If you can, do this: stop thinking about this browser.

Thursday, March 17, 2011

Release products for Plone: some bad and good attitude

Time passed from age when plone.org was the only place where a Plone user was able to find and download Plone products, and also where a Plone product author (starting from now: a releaser) could publish and distribute his own projects using directly the PloneSoftwareCenter installation.

Plone 3.1 arrived, and the Plone products begin to be found as Python eggs. This was great! Also with buildout adoption, this new way to make and release products change our world.

In facts this wasn't a real "new" way to do Python stuff. Python world already use eggs, simply Plone update its status.

Automation make release process faster
So, Plone products became Python eggs? Well... they can now be released also on the cheeseshop. This (informally know as pypi) is the main Python collector for eggs in the world, and more important the process to release additional eggs on the pypi repository is simple and fast... a lot faster that use the TTW procedure from the Products section on plone.org.

You need simply to type:
    python setup.py register sdist upload
...and the current egg will be registered and released. Very simple!

Plone.org as a egg collector
What about Plone.org? Modern Plone advanced users know that you can look for Plone add-ons onto the cheeseshop, but the great part of users community (and new also users that wanna try the CMS) will user still plone.org Products area.

Again using PloneSoftwareCenter, the plone.org became a pypi server for Plone stuff. Fantastic! Amazing! Releasing a product there became as fast as on pypi!
    python setup.py register sdist upload -r plone.org
This will work starting from Python 2.6, but there's a Python module for being able to use this also on Python 2.4 (see collective.dist).

All those great pieces of information are taken from the tutorial "How to upload your package to Plone.org". Every Plone releaser must read this at least one time.

So, where are the bad news?
The main problem there is in the last sentence of previous part. I fear that:
  • not all of the Plone releaser know this tutorial, or
  • they ignore it, or
  • they think is not so important.
To be honest, skipping the "release on Plone.org" part don't give problem to developers: the software is still on pypi and so installing it on customer servers is possible. Also, pypi is the first choice for downloading eggs with buildout (plone.org is used only as mirror, in the case that pypi is not responding).

So why bother about continuing to perform Plone.org releases?

Because I'm pretty sure that we need to always think about new Plone users and non-developers users.

Some days ago I was creating material for a Plone training (for Plone administrators, not Plone developers) and I wanted to insert a reference to a specific Plone product (a new portlet). I was not sure of the project name so searched for it.
My "developer attitude" made me go onto pypi.python.org, but then said: "This is not good and simple to understand for non-developer... let use plone.org, I need to teach to those people how performing such tasks".
Epilogue: the portlet product is not registered on Plone.org.

This give me the idea for this article. Plone newcomers will never find this portlet! They only know that there is a Plone website (plone.org) with a Product addons section (plone.org/products). What the hell is "pypi"?

You can test this every day: try to monitor how often a new Plone product release is registered on pypi, simply looking at its homepage... I think that every day no less that 10, maybe 15 new releases are done.

Now try to find how many new release are putted on Plone.org products section... you know the answer.

So: this his an invitation to Plone developers to register they work also on Plone.org, and read the tutorial given above. This is important for the community.

Maybe the tutorial above needs to be highlight someway on the Plone website.

Any other bad attitude?
Taking the release process also on Plone.org as a standard is a great goal, but we can do better.

Let's not imagine that a collective.foo project has been successfully released on pypi and plone.org. PloneSoftwareCenter is a fully ready-to-use pypi server implementation... but it offer a lot of additional features.
Those features are not so simple and quick to be executed as the release process itself, but they are very important for users.

The problem that I'm going to explain has become a little worst now that the Products section on plone.org is changed, becoming a lot cooler with additional features.

After performing a plone.org egg release, the product description data of our collective.foo is not fully completed. This mean that releasers must go to the plone.org project created and edit it.

EDIT: to perform such link actions on plone.org you will have problems with the current TinyMCE version that the site use. You need to disable TinyMCE while you are editing reST data.
To do this, use Firefox with Web developer toolbar and using the "Disable" menu, disable all Javascript. Enable it again only when finished.

Let's explorer what is not managed from Python release process, starting from the "Default" schemata:
  • Categories. This is a very important field for users that want to search for Plone products from plone.org. The Products section has a specific drop down, for example to filter only "portlets" or "content type" products. Sadly if we don't compile this our product can't be found when filtering. This is one of the worst error you can do there.
  • Contact address. This is compiled directly from the Python egg, but I want to highlight also this field because sometimes the e-mail there is only a default paster template created, that came from the ZopeSkel defaults. Sometime you read "plone-developers@lists.sourceforge.net", but this is only a default, not customized.
  • Home page. This field is often compiled with the SVN repository URL... not a very big problem, but the good field for SVN is some lines below this. Also this trivial error came from ZopeSkel default.
  • Screenshot. For product that give something to the Plone UI I think is a very good attitude to take 3 minutes and make a screenshot. This help users to understand what you have done, and make plone.org a better website... (let me say "less boring").
  • All other fields. All other field in this first schemata are less important, but take you time to think if you have something to put there.


Now the "Metadata" schemata:

  • The only field there that must be noted is the Classifiers field. You can compile this directly from the Python egg, and is also used on the cheeseshop... so take some time to add all classification that match from the classifier list. This make possible to search categories from pypi website. The most important (but don't limit yourself to it) is the "Framework :: Plone" value. Don't forget this.


Skipping the third schemata, let's go to the "Review" ones.

  • Self-Certification Checklist. This is a self-certification, so the developer review himself and his work. The only good attitude there is to be honest... and take 5 seconds to fill this data. Dont' be unpolite!


Some last thing to do? Create a documentation section if you have something to give to users.

Finished? Well... no... also the Release content on plone.org need to be checked:

  • Release Summary. Compile this with a few lines of text, like "bugfix release", "securify fix to previous version", "added some simple features", "a complete rewrite of previous versions", "first public release", ...
  • Full Release Description. A complete text of the new features, not a changes list of features (that can be added below).
  • Changelog. Changelog (given there or wherever you think is better) is a great information for your product, and I really like this attitude, used widely in Plone and Zope projects.
  • Compatibility. Very important, and now a much more, as plone.org Products section filter automatically projects for the "Plone 4" release.
    You developed a great project for Plone 4? Well... if you don't say that this is Plone 4 compatible filling this field, probably a lot of users will not find your product (they need to change the combo box to "Any version").
All the field above, excepted "Compatibility" that is a very important field, can be skipped and ignored if you write a good README.txt file in you egg (see below) that will automatically fill the main text field of the Product content and also the pypi page.
I find a good attitude take some time to compile those fields, but I can forgive you if skip it!

Is this enough?
Going back to the egg structure, the two most important field (also used in the project "Default" schemata are the description and long-description.

First of all sometimes (not very often) eggs are released without a "description" information, or a stupid ones. For finding those projects Zopyx released the nice zopyx.trashfinder. This is used for the project description on plone.org and also on pypi! Write a good (but also short) summary there!

Another bad attitude is not compile at all, or compile with a few futile lines of text the README.txt file, that will fill the "long description" text of your egg.
Take you time to write there a good README and documentation. Give there all the information you have.
What syntax I need to know and write there? Use reST! So you can write text headers, format text and images! Images are important (so why limit yourself to the plone.org screenshot image?).
   .. image:: http://youhost/youpath/youhelpfulimagename.jpg
:alt: A good alternative image
Deprecated README
When you write a good README, take some time to read it from scratch at every release. It's quite common to find Plone products (also well-know products) that say something wrong, just because a sentence wasn't true again. A set of examples:
  • "Compatible with Plone 3.0"... but the last release is only for Plone 4
  • "Installing without buildout" instructions.
    I've never truly understand such kind of instructions. Buildout is the only official way to install Plone. You can't install Plone with "easy_install Plone" so why teach to install something other with "easy_install collective.myamazingproduct"?
    More bad: maybe the last release has added the "Plone" dependency in the egg... so one time again, easy_install it system wide will give you only headache.
  • ...(I'm sure you can find some other example)...
A README with bad instructions can be worst than don't having a guide at all. Such kind of bad documentation bring users to say "Plone is difficult" or "Plone is undocumented".

Last product version must not be the only version available
Final bad attitude.
When a new release is registered on pypi, it automatically hide the previous versions. If you type (as example) http://pypi.python.org/pypi/Plone you are seeing the last version directly, that is (at the time I'm writing this post) Plone 4.1b1.

I had a discussion about this recently on Product-Developers mailing list: as far as the new product release brake compatibility with previous Plone version (I mean: version that are still maintained) the guy that register the release on pypi must also think about don't hide the previous releases. For what I know, there isn't an automated way to do this, you need to login on the cheeseshop.

A good example? http://pypi.python.org/pypi/Products.Poi
As you can see, the new 2.x (only for Plone 4) is not hiding the 1.2.x branch for Plone 3. Also, documentation is clear. If a user read the page of the 2.x release you can read explicitly "Poi required: Plone 4; this version of Poi will not work with Plone 3".

No more to say, now go and check how good are your Plone releases!

Saturday, March 12, 2011

Primo post (e funzionalità di blogger)

Ebbene, questo primo post sarà completamente neutrale a qualunque tecnologia, e non vuole nemmeno presentare lo scopo del blog in se.

La mia preoccupazione nel creare un blog era poter mantenere un canale inglese e uno italiano, e contemporaneamente poter segnalare ad una paio di collettori di blog esterni un feed RSS che filtri solo alcuni argomenti di questo blog (in pratica, vorrei poter generare un feed per i tag Plone e Italiano, e Plone e English.

Questo stesso approccio lo abbiamo usato in azienda nel blog di RedTurtle... ed ha funzionato bene a mio parere.

E' possibile fare questo con Blogger di Google? Pare di sì.

La funzionalità non è immediata ma l'ho dovuta cercare in rete. In pratica si tratta di fornire due URL così composti:
Il gioco è fatto. Ora come ora i due URL qui sopra saranno vuoti, quindi per dovere di cronaca ne fornisco almeno uno che funzioni:
http://blog.keul.it/feeds/posts/default/-/google/italiano

Ciao a tutti!