Planeta Python México

January 31, 2012

Jorge Luis Hernandez C.

2011 de muchos cambios, 2012 de nuevos retos.

Si, lo sé, un post con tal titulo debía haber sido publicado hace días, pero, nuevamente la falta de tiempo.

Sin lugar a dudas, el 2011 fue un año extraordinario, lleno de retos, de proyectos grandes e importantes, pero sobre todo, de grandes cambios en mi vida.

Tengo 2 noticias que dar, y lo hago aquí, en mi blog que ha sido testigo del crecimiento que he tenido tanto profesionalmente como personalmente y no quería dejarlo pasar solo así.

Las daré en orden cronológico y sin rodeos: la primera, “me he casado !!” si señores, he contraído el sagrado matrimonio y bajo mi propia voluntad (se que mi ahora esposa estará riendo a carcajadas en esta parte).

He dado un gran paso en mi vida, decisión que incluso, me atrevo a decirlo, no me costó trabajo. La mujer que he elegido para esposa, siempre ha sido una gran compañera, una mujer entera, dedicada, comprometida y por sobre todo, amorosa. Ella es la mujer que amo y que amaré siempre.

Les agradezco a todas aquellas personas que, gratamente, nos hicieron el favor de acompañarnos en la celebración de nuestra unión, a quienes nos brindaron su apoyo, y a quienes, aunque no pudieron asistir, sabemos que nos desean mucho éxito.

Las cosas van a su paso, los cambios, finalmente son cambios y hay que sobrellevarlos, pero sin dudarlo, puedo decir que es increíble.

La segunda noticia, que junto con la anterior llena de felicidad mi vida es, que la cigüeña nos ha mandado una carta avisándonos que recibiremos el mejor paquete de nuestras vidas (y no se trata de uno del tipo .deb); si, así es, “seremos padres !!”.

La idea de ser Padre cambia totalmente la perspectiva del hombre, incluye un enorme significado, un camino, y una misión incesante e infinita.

Hemos comenzado a visitar a médicos, hacernos estudios, a llevar un control en la alimentación, en la administración de los medicamentos, suplementos y vitaminas que nos han indicado, y sobre todo, constantes ultrasonidos.

Es inexplicable la sensación de ver crecer vida dentro del vientre de una mujer, como evoluciona, y como puede incluso, reconocer tu voz, o tus caricias a través de su madre.

Increíble, sumamente increíble, apasionante, fulminante, y aunque trate de buscar palabras que puedan expresar toda esta sensación, es probable que nunca dé con alguna que lo defina completamente. Es un nuevo reto, el mas grande proyecto que he tenido en mi vida.

Sin lugar a dudas, este 2012 estará lleno de nuevos retos, y nuevas aventuras. Estoy completamente agradecido con la vida, y con ese ser con mil nombres al que yo suelo denominar «simplemente dios».

Publicado por lesthack el January 31, 2012 05:59 PM

January 12, 2012

Noe Nieto

Un script de fabric para obtener una copia de respaldo de plone

Intro

Escribí un script de Fabric para poder automatizar la siguiente tarea:

  • Entrar a un servidor con plone mediante ssh.
  • Hacer un snapshot del sitio.
  • Copiar la base de datos (Data.fs) y el directorio blobstorage a un buildout local.
  • Reemplazar la base de datos del buildout local con la base de datos que se ha descargado.

Para hacer todo eso, hice uso de repozo, collective.recipe.backup y Fabric.

Preparación del buildout

Hay que modificar buildout.cfg para instalar las herramientas adecuadas.

[buildout]
parts +=
fabric
repozo
backup

[fabric]
recipe = zc.recipe.egg

[repozo]
recipe = zc.recipe.egg
eggs = ZODB3
scripts = repozo

[backup]
recipe = collective.recipe.backup
#Keep the last 4 backups
keep = 4
#Always make a full backup
full = true
#Gzipit
gzip = true

No olvidar actualizar buildout.

Creación del script

Basta con hacer un script fabfile.py en la raiz del buildout para que el comando bin/fab/ lo tome y liste los comandos disponibles. Me guié de la documentación oficial de fabfile.org para hacer mi script. Y sin más preámbulo, aquí esta:

from os.path import join as joinpath

from fabric.api import run, cd, local, lcd
from fabric.operations import get
from fabric.colors import green

BUILDOUT_DIR = '/directorio/del/buildout/de/plone'

def install_snapshot():
    with cd(BUILDOUT_DIR):
        #Create snapshot on server
        print green('Create snapshot on server')
        run('bin/snapshotbackup')

        #Copy data.fs and related files
        print green('Copy ZODB and related files')
        files = run("ls var/snapshotbackups/ | sort -n | tail -n 3")
        for f in files.split():
            get('var/snapshotbackups/%s'%f, 'var/snapshotbackups')

        #make a tarfile of the blobstorage dirtree, copy it to local and untar it
        print green('Make tarfile of blobstorage and copy it to local buildout')
        with cd('var/blobstoragesnapshots'):
            run('tar -cf blobstorage.0.tar blobstorage.0')
        get('var/blobstoragesnapshots/blobstorage.0.tar',
            'var/blobstoragesnapshots')
        with lcd('var/blobstoragesnapshots'):
            local('tar -xf blobstorage.0.tar')

        #Install new ZODB/Blobstorage snapshot
        print green('Install new ZODB/Blobstorage snapshot')
        local('bin/snapshotrestore')

Ejecutando

Se ejecuta así:

bin/fab -u usuario -H servidor.org install_snapshot

Publicado por Noe Misael Nieto Arroyo el January 12, 2012 08:48 PM

January 07, 2012

Noe Nieto

Having two jquery versions in one Plone

Intro

I'm working on a site that uses a lot of galleries made with Jquerytools. Once the galleries grew up, a small bug appared: after the 15th or 16th element, the gallery started to jump. That can be fixed by upgrading to a new version of jquery. Initially, I just dropped the new minified version of jQuery into one of my skin folders on my theme.Solved!

Well, not that easy. One add-on I'm planning to add to the site started to work funny. With the default jquery from plone it behaves just nice. So, in the meanwhile, to make things work, Plone has to serve jQuery 1.7 for galleries and the plain old jQuery 1.4 for the rest of the site.

How to do it

  • Place the minified jQuery 1.7 to some skin folder in your theme. Do not name it jquery.js, otherwise it will override the one that Plone ships out of the box.
  • Open ZMI and on portal_javascripts add a new entry for the js file. Here is how it looks.

    js_registry

    The position is important. Place it just before or after jquery.js. Don't leave it on the bottom.

  • Next thing is the condition: request/use_new_jquery. This can be acompished in the a view class. For example:
    class CatalogFolderView(grok.View):
        """                                                                                                                      
        Catalog view for books, audios or dvd's                                                                                  
        """
        grok.context(IATUnifiedFolder)
        grok.template('catalog_view')
        grok.name('folder_catalog_view')
    
        def update(self):
    	super(CatalogFolderView, self).update()
    	#hack hack to be able to use jquery 1.7 on new                                                                       
            self.request.set('use_new_jquery', True)
    
    
  • Restart plone and reload. Once test are done, you can go to portal_setup un the ZMI and download the portal_js settings.

Publicado por Noe Misael Nieto Arroyo el January 07, 2012 12:30 AM