Archive for the ‘internet’ Category

amberjack rulez?

In questi giorni al plonesymposium sono stato coinvolto nella creazione di tutorial in Plone utilizzando Amberjack.Amberjack on motion

Amberjack è una libreria javascript utile per creare slideshow. Utilizzandola, puoi definire un set di passi, uno per url che vuoi mostrare. L’unico dettaglio obbligatorio è il dover importare la libreria stessa e un pezzo di codice come questo:

<div class="ajTourDef" id="MyTour" style="display:none">
  <div title="http://google.com">
    Placeholder for page 1 - replace this text
  </div>
  <div title="http://maps.google.com">
    Placeholder for page 2 - replace this text
  </div>
</div>

<script type="text/javascript"
        src="http://amberjack.org/src/stable/amberjack.pack.js">
</script>

<script type="text/javascript" defer="true">
  Amberjack.onCloseClickStay = true;
  Amberjack.open();
</script>

La principale “mancanza” [1] è che puoi specificare un url una sola volta, per cui riesci a gestire casi d’uso come quello mostrato sul loro sito.

D’altra parte il nostro obiettivo è duplice:

  1. implementarlo in plone
  2. estenderlo per utilizzaro in un ambiente atto a creare tutorial

Per fare ciò hai, ad esempio, bisogno di creare una pagina, salvarla, rieditarla, risalvarla. ma il “salva” ti riporta sempre alla stessa url, che identifica lo step che stai vedendo. Abbiamo quindi necessità di gestire la cosa in modo più accurato.

Si è quindi realizzato un nuovo sistema (durante lo sprint di bolzano, e durante lo stage di giacomo spettoli in redturtle), ma al momento abbiamo la necessità di completare alcune parti del lavoro e di creare il nostro primo tutorial completo per Plone.

Domani si vedrà se tutto il lavoro fatto in passato può essere davvero utile per raggiungere l’obiettivo finale.

[1] Ok, non è un mancanza, gestisce un diverso caso d’uso

Annunci

Finalmente il mio ambiente pythonico sul Mac

Ho appena sistemato l’installazione di python sul Mac.

C’erano tre problemini che avevo trascurato da tempo e che alla fine son venuti al pettine:

  • python2.4: avevo ancora un vecchio python installato da un universal installer di un plone3.0.x
  • readline: pdb era inusabile. Il fatto che programmi solo saltuariamente e nei weekend non è una gran scusa..
  • roadrunner non andava.

Un paio di dritte da qualche compare e una ricerchina con l’amichevole google alla fine hanno risolto, anche velocemente il problema.

Prima di tutto ho installato MacPorts. Questa era un’operazione che avevo già fatto appena comprato il Mac e avevo lasciato un po’ di configurazioni a metà. Quindi prima di tutto ho tolto python24 e pil:

sudo port uninstall python24 @2.4.4_1+darwin_8
sudo port install python24
sudo port install python_select
sudo python_select python24
sudo port install py-pil

ho poi montato easy_install:

wget peak.telecommunity.com/dist/ez_setup.py
/opt/local/Library/Frameworks/Python.framework/Versions/
                     Current/bin/python ez_setup.py

quindi ho aggiornato il .bashrc per utilizzare questo python e un’utility basata su readline:

export PATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.4/bin:$PATH
export PYTHONSTARTUP=$HOME/.pythonrc.py

e

#!/usr/bin/env python
import readline,rlcompleter
class irlcompleter(rlcompleter.Completer):
        def complete(self, text, state):
                if text == "":
                        #you could  replace \t to 4 or 8 spaces if you prefer indent via spaces
                        return ['\t',None][state]
                else:
                        return rlcompleter.Completer.complete(self,text,state)
#you could change this line to bind another key instead tab.
readline.parse_and_bind("tab: complete")
readline.set_completer(irlcompleter().complete)

però, sgrunt, avevo dimenticato readline e quindi nulla andava. MacPorts però è venuto velocemente in aiuto.

sudo port install py-readline

ora manca solo virtualenv:

easy_install virtualenv

e tutto funziona. Sono contento.

Citybook ferrarese

citybook-ferrara

Il logo di presentazione di citybook.ferrara.it

Nei giorni scorsi è stato presentato www.citybook.ferrara.it alla stampa e alla città. Oggi, dalle 12, è ufficialmente aperto anche se già dai giorni scorsi era possibile iscriversi.

Ovviamente, curioso come sono, già ieri ho fatto un giro di prova…

La grafica è ben fatta ed è molto gradevole, almeno per il mio gusto. C’è il servizio di blog, la lavagna, la possibilità di inserire il tuo stato. Puoi anche cercare altri ferraresi che si sono iscritti e interagire in un qualche modo con loro.

Il servizio è ancora assolutamente e dichiaratamente in beta e quindi tutta una serie di “cosine” non sono disponibili o completamente funzionanti. Ma tant’è.. è una beta signori!

Però:

  • dato che esistono numerosi servizi già funzionanti e largamenti diffusi (es. ning, piuttosto che facebook cui chiaramente si ammicca) perchè si è sentita la necessità di creare l’ennesima piattaforma? Il “cos’è?” e il “per chi è?” che trovi nel footer non lo dicono.
  • allo stato attuale, qual’è l’obiettivo finale che si intende raggiungere? Non dal punto di vista sociale, questo lo è, ma dal punto di vista del framework e dei servizi che a regime si vorranno mettere a disposizione.

Personalmente, non credo proprio che lo utilizzerò: è ridondante rispetto a quelli cui sono attualmente iscritto e, al momento, di certo largamente con un potenziale minore.

Candy candy

Una serata passata a navigare su internet. Ti capita di trovare su YouTube il tipo che mette online tutti i cartoni animati della tua infanzia.

E’ a questo punto che scatta la domanda del “committente” che è seduto a fianco a te sul divano: “come faccio per scaricarli tutti, che me li guardo con calma?”.

Beh, in questo caso il cliente va assolutamente assecondato. Come fare diversamente? E il programmatore che c’è in te riaffiora dal letargo di mail e telefonate sotto cui l’hai sepolto.

Metti insieme i pezzi:

Poi i pezzi finali:

  • un talk di govoni al linuxday di un paio d’anni fa: in fondo c’è da ottenere l’url del file.
  • python e BeautifulSoup (si poteva usare lxml, ma non lo conosco bene, il committente ha fretta.. in serata il lavoro va finito)
Candy su YouTube

Candy su YouTube

Un paio d’ore di lavoro, un po’ di analisi del’html che youtube e pwnyoutube generano e via: tutti i filmati di Candy Candy si possono scaricare sul tuo piccì.

Il package python lo trovi su pypi, ma, se vuoi contribuire, il sorgente è su googlecode.

Banale da usare:

tauntaun.local:/home/massimo massimo$ python
>>> from candy.candy import Candy
>>> c = Candy('culttoon2', path='/home/massimo/videos', howmany=250)
>>> c.run()

nella cartella ‘/home/massimo/videos’ ti trovi tutti i filmati.

Ovviamente le cose son più facili se usi linux o mac. Se però non sei passato ad un sistema operativo superiore occorre proprio che ti installi python.

mappe google su plone

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

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 2009 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

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.