viernes, abril 29, 2016

Timestamps con SQLAlchemy

Es común tener campos que guarden la fecha de la creación de registro y la fecha de modificación de ése registro.

Mucho tiempo usé la siguiente declaración:

1
2
    ts = Column(u'ts', TIMESTAMP(timezone=False),
                server_onupdate=text('CURRENT_TIMESTAMP'), primary_key=False, nullable=False)

Aprovechando que 'CURRENT_TIMESTAMP' es soportado en MySQL, cada vez que se inserta un registro MySQL pone la fecha del servidor de manera automática.

Creo que ahora hay una mejor manera de manejarlo, siempre y cuando el RDBMS soporte 'on update':


1
2
    created = Column(DateTime, nullable=False, default=func.now())
    updated = Column(DateTime, nullable=False, default=func.now(), onupdate=func.now())

Es mas simple y fácil de leer

domingo, abril 24, 2016

Como quitar atributos extendidos en OSX (com.apple.quarantine)

Recientemente al bajar una nueva plantilla y descomprimirla en un nuevo directorio, aparece que con un '@' a un lado de sus permisos de archivo.
jupabeans at TankerMini in ~/workspace/theme
$ ls -ls

total 0

0 drwxr-xr-x     4 jupabeans  staff   136 Apr 24 22:07 .

0 drwxr-xr-x     7 jupabeans  staff   238 Apr 24 21:56 ..

0 drwxrwxrwx@    6 jupabeans  staff   204 May 28  2015 README

0 drwxrwxrwx@  121 jupabeans  staff  4114 May 28  2015 theme
jupabeans at TankerMini in ~/workspace/theme
$ ls -@ls

total 0

0 drwxr-xr-x     4 jupabeans  staff   136 Apr 24 22:07 .

0 drwxr-xr-x     7 jupabeans  staff   238 Apr 24 21:56 ..

0 drwxrwxrwx@    6 jupabeans  staff   204 May 28  2015 README

     com.apple.quarantine 26
0 drwxrwxrwx@  121 jupabeans  staff  4114 May 28  2015 theme
     com.apple.quarantine 26
Eso indica que el archivo tiene atributos extendidos (extended attributes) en OSX.  En éste caso 'com.apple.quarantine', una bandera que OSX usa desde Leopard (10.5) para marcar archivos descargados de fuentes no confiables.  Cuando ejecutas por primera vez ese archivo, una pantalla de confirmación aparecerá en la pantalla.

Pero ¿qué pasa cuando sólo son archivos de texto? pues nada, pero siempre quedarán marcados y a mi me distraen.  Así que los voy a quitar.

Hay varios métodos para quitarlos, el inteligente sería, buscar los archivos marcados en un directorio y quitarlos uno por uno.  El brutal sería quitarlos con 'recursive' activado.
$ xattr -dr com.apple.quarantine theme
xattr es el comando para manejar los atributos extendidos, -d es la opción para borrarlo -r activa recursividad, luego el nombre del atributo y al final el directorio o archivo.

Hay varias plantillas que tienen los archivos marcados como ejecutables, para quitarlos simplemente:

$ chmod 755 $(find theme -type d)
$ chmod 644 $(find theme -type f)
En ocasiones los espacios en los nombres de archivos pueden confundir los argumentos de chmod. Se puede usar las siguientes alternativas.
$ find theme -type d -exec echo -n '"{}" ' \; | xargs chmod 755
$ find theme -type f -exec echo -n '"{}" ' \; | xargs chmod 644
*actualizado 22 noviembre 2016
Otro método para remover los atributos extendidos
$ xattr -rc .