Personal tools

Federica D'Elia

Aug 30, 2012

Facebook Open Graph Protocol in Plone

Approfondimento sui meta tag og

Facebook Open Graph Protocol in Plone

Filed Under:

Alcuni consigli su come migliorare l'integrazione del social Facebook in Plone, attraverso i meta tag del protocollo Open Graph.

Per migliorare l'integrazione del social Facebook in un sito Plone sarebbe utile conoscere qualcosa in più riguardo a come le nostre pagine Web sono rappresentante su Facebook.

La prima cosa utile da fare è installare un prodotto per l'inserimento dei social plugin in Plone, come ad esempio sc.social.like. In questo modo, senza sviluppare nulla, avrai alcune funzionalità di Facebook e altri social nel tuo sito Plone. Quindi considero sc.social.like come base di partenza del nostro miglioramento tramite l'aggiunta dei meta tag og.

Foto di GOIABA.

Like Button

read more

Jul 13, 2012

HTML5 responsive images: una soluzione semplice con jQuery Picture e tag Figure

Un'immagine diversa per ogni dispositivo attraverso un plugin

HTML5 responsive images: una soluzione semplice con jQuery Picture e tag Figure

jQuery Picture va a braccetto con il tag Figure e permette di gestire efficacemente immagini e altri contenuti multimediali

Non sono certo la prima che parla di responsive images, recentemente è un argomento molto quotato. Questo perché le soluzioni proposte per servire la giusta immagine a seconda del device, delle dimensioni delle schermo o della larghezza di banda disponibile sono molteplici.

Ho deciso di dire la mia, perché da poco ho provato il plugin jQuery Picture e l'ho trovato molto semplice e veloce da integrare.

jQuery Picture serve ad inserire nel proprio layout un supporto alle immagini responsive.

Funziona con:

  • l'HTML5 <figure> tag;

  • il nuovo candidato <picture> tag.

Vi anticipo subito che non mi dilungherò sull'utilizzo del plugin con il tag <picture>: per ora è ancora una proposta e non si tratta di un codice HTML valido. Preferisco parlare di <figure>, che è già parte dello standard.

 

read more

Mar 28, 2012

Traning with Jarn: Much more than training!

Filed Under:

We recently took a training, done by the Jarn guys, Denys and Yiorgis. It was a very important experience to me: it changed my perspective

I liked the enthusiasm of Denys Mishunov. He gave us many suggestions, tips and tricks that we needed to improve our daily work. This is the most important thing to me.Thanks to Jarn guys, I discovered the importance of enjoying my work. These tools can really make us work more quickly and easily, and make it more fun.

I liked so much Yiorgis Gozadinos approach: he is always looking for the cleanest and simplest way to solve problems. For example, we talked about the importance to follow Design Patterns, reusable solutions that can be applied to commonly occurring problems. This patterns lead you to result, with a lower effort and no waste of time.

Passion and enthusiasm shown by my teachers made me once more realize that the best way to reach professional growth is loving what you do.

Jarn CourseAmong the many other topics we discussed during training, we spoke about tests, that allow you to increase your work quality.

Besides learning useful and interesting tools, we also made a comparison between our and their way of working. In some cases, we found most effective approaches.

Jarn Course

Thank you, Jarn guys, not only for what you taught us on a technical level, but also for the emotional charge you gave me!

 

Dec 21, 2011

Plone SEO? collective.perseo!

Filed Under:

The package collective.perseo has just been released. collective.perseo is a package for Search Engine Optimization and offers several kind of SEO features

why collective.perseo?

collective.perseo was born during a collaboration with Irene Capatti, Federica D'Elia and SEO Specialist Andrea Pernici. The product quintagroup.seoptimaizer is very useful, but Andrea needed something more.

Features

New package for Search Engine Optimization (SEO)

With collective.perseo you can manage:

  • globally (configurations applied to each page of the site), through “PerSEO” tool under Add-on Configuration:

    • Webmaster Tools (Google Webmaster Tools, Yahoo Site Explorer, Bing Webmaster Tools)

    • tag title, description and keywords meta tags, separately for:

      • Home page

      • Single pagePerSEO title

      • Search page

      • Not Found page

      • Author page

      • Site Map page

      • Contact page

      • Event

      • File

      • Folder

      • Image

      • Link

      • News Item

      • Topic

    • Disable the indexing of resources using noindex and nofollow, separately for:

      • Search page

      • Login and Registration pages

      • Administration pages

      • Single pages

      • Event

      • File

      • Folder

      • Image

      • Link

      • News Item

      • Topic

      • (also handle noodp, noydir, noarchive, nosnippet)

    • Content types included in the sitemap.xml.gzPerSEO site map

    • Ping sites (Google, Bing, Ask) automatically when the Site Map is updated

    • Indexing RSS feeds

    • Add itemscope and itemtype attributes to body tag (if you install the extension collective.perseoschema for Schema.org)

  • one by one, through “SEO” tab on each content of the site (allows you to change SEO settings for that specific content):

    • tag title and description and Keywords meta tags

    • Meta Robots Follow Tag (follow/nofollow)

    • Meta Robots Index Tag (index/noindex)

    • Meta Robots Advanced Tag (noodp, noydir, noarchive, nosnippet)

    • Canonical URL

    • Content included in the sitemap.xml.gz (yes/no).

    • Priority of content in sitemap.xml.gz

    • itemtype attribute (if you install the extension collective.perseoschema for Schema.org)

PerSEO tab

Useful links

http://pypi.python.org/pypi/collective.perseo

http://pypi.python.org/pypi/collective.perseoschema

http://plone.org/products/collective.perseo

http://plone.org/products/collective.perseoschema

Nov 18, 2011

Modulistica PDF online: popolamento automatico via Python

Filed Under:

Un suggerimento per aggiungere testo a un file pdf comune, come ad esempio un banale modulo del censimento, utilizzando alcune delle librerie Python in circolazione

La creazione di pdf è spesso richiesta quando si sviluppa un'applicazione. Ma ci dobbiamo destreggiare in un mare di librerie Python

Per lo sviluppo di un'applicazione mi sono trovata a dover generare un pdf il cui contenuto consiste in un modulo, ad esempio il modulo del censimento, compilato con i dati degli utenti dell'applicazione presi run-time dal sistema.

Avrei impiegato troppo tempo a disegnare il modulo insieme ai dati dell'utente, in più, per certi moduli (come il modulo censimento) sono già forniti i pdf.

Pensare di caricare il modulo come immagine di sfondo non è fattibile. Prima di tutto per la qualità scarsa del pdf finale e poi perché le dimensioni del file di output aumentano molto a causa dell'immagine usata come sfondo.

Il file da ottenere è un modulo già fornito in versione pdf, ma a cui ho bisogno di aggiungere testo.

La soluzione, a mio avviso migliore, è stata quella di usare ReportLab per disegnare un pdf fatto unicamente dei dati dell'utente per poi fare un merge del primo con il pdf contente il modulo, usando PyPDF.

L'unica difficoltà in questo approccio è creare il pdf contenente i dati di riempimento. Infatti questi dati devono essere nella posizione giusta, prioprio come se stessimo compilando il modulo.

La soluzione è: merge e righello alla mano

Per superare questo ostacolo agilmente ho usato uno screen ruler. Io ho preferito "Free Ruler" per Mac OS X tra i vari righelli che ho trovato in rete, soprattutto per il suo tick mark interattivo che permette di fare una misura abbastanza accurata.

Ho aperto il pdf con il modulo da compilare, e poi ho misurato con il righello i punti in cui inserire i dati. Per creare il pdf con i dati di riempimento ho usato ReportLab che consente di scrivere stringhe di testo in un punto esatto, utilizzando le coordinate x e y.

Ecco la MIA ricetta

Passo 1

Aprire il pdf che rappresenta la base del nostro impasto, ovvero  il modulo da compilare, usando la classe PdfFileReader di pyPdf.

import codecs
from pyPdf import PdfFileWriter, PdfFileReader

input1 = PdfFileReader(codecs.open(path_modello_censimento, "rb"))

 

Passo 2

Preparare il pdf con i nostri canditi: i dati di riempimento. Qui entra in gioco ReportLab.

import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm

packet = StringIO.StringIO()
can = canvas.Canvas(packet)
...
textobject = can.beginText()
textobject.setTextOrigin( 11.94*cm, 20.12*cm)
textobject.textLine('hello world')
...
can.drawText(textobject)
can.showPage()
can.save()
packet.seek(0)

Come unità ho usato i centrimenti, sia nel fissare l'origine di ogni striga di testo inserita, sia quando ho misurato con il righello. 11.94 e 20.12 sono due esempi di coordinate.

Tenere presente che l'orgine si trova in basso a sinistra. Ma con l'istruzione seguente possiamo spostare l'orgine in alto.

can.translate(cm, cm)

 

Passo 3

Aprire il pdf creato sopra con PdfFileReader.

input2 = PdfFileReader(packet)

 

Passo 4

Aprire il pdf finale, che conterrà il merge dei due pdf precedenti con la classe PdfFileWriter di pyPdf.

output = PdfFileWriter()

 

Passo 5

Adesso la parte più divertente: "Impastare".

page0 = input1.getPage(0)
page0.mergePage(input2.getPage(0))
output.addPage(page0)

Dopo aver unito i due pdf pagina per pagina si arriva finalment al punto 6..

Passo 6

Adesso abbiamo il nostra risultato finale "output" che può essere memorizzato ovunque si voglia, io lo scrivo in un file temporaneo per completare l'esempio:

import tempfile
temp_file_name = tempfile.mktemp()
outputStream = codecs.open(temp_file_name, mode="wb")
output.write(outputStream)
outputStream.close()
os.unlink(temp_file_name)

 

L'elaborazione richiede un po' di tempo, ma il risultato finale è buono. Buon appetito!