Jugando con las imágenes de fondo
Curioseando por la galería de CSS Zen Garden he encontrado unos divertidos usos de fondos de imágenes para crear efectos realmente sorprendentes. Voy a destacar dos de ellos:
- Fun with backgrounds orange
- Efecto: moviendo la barra de scroll la imagen del fondo va cambiando del kanji al texto ‘zen garden’.
Técnica: superposición de dos fondos, por un lado tenemos un fondo de líneas y por otro la imagen que combina el kanji y el texto (en líneas diferentes). Al desplazar la página las líneas coinciden o con el kanji o con el texto al mismo tiempo que oculta al otro. Simplemente genial
Otro ejemplo muy parecido es Two State Animation, en esta ocasión se consigue que una flor se balancee de un lado a otro.
- CSS Zen Ocean
- Este diseño es muy muy divertido.
Efecto: el subtitulo desaparece de vez en cuando, el submarinista enciende su linterna según profundiza en el océano, se forman burbujas de aire y en el fondo del mar el cofre del tesoro se abre y aparece un cangrejo dando una vuelta.
Técnica: la mayoría de los efectos están conseguidos con animaciones GIF de toda la vida, de una forma realmente original, pero lo que más me llamó la atención es la linterna del buzo. La idea es crear un degradado, de menor a mayor iluminación, y poner por encima una capa de transparencia que asemeje a la fuente de luz que produce la linterna, al desplazarlo se crea el efecto.
- Retro Theater
-
“Creative Use of PNG Transparency in Web Design” por Jeff Croft
Jeff Croft ha publicado un extracto del libro Web Standards Creativity, concretamente del capítulo sobre PNG. El artículo establece los fundamentos entre los diferentes formatos gráficos utilizados en el diseño web explicando más detalladamente las posibilidades que nos ofrece PNG. A continuación expone unos casos reales de usos creativos jugando con las transparencias para más tarde rematar con las limitaciones y parches para IE6 (o inferior).
En resumen, una lectura muy recomendable: Creative Use of PNG Transparency in Web Design.
Hipster PDA
Cuando una persona quiere organizar un poco su existencia suele recurrir a algún tipo de PDA. Pero siempre ha existido la resistencia, un grupo de personas que se niegan a someterse al sistema electrónico… todos hemos visto la “chuleta de teléfonos y citas”, esas hojas de papel maldobladas cuya supervivencia es todo un misterio.
Como siempre Internet riza el rizo convirtiendo un amasijo de papeles en una nueva forma de organización personal: Hipster PDA.
Gracias al culto de Getting Things Done pasamos de tener un simple bloque de hojas sujetas por un clip a reorganizar un Moleskine o incluso a su modificación completa.
Si se prefiere un estilo más personal podemos construir nuestra Hipster PDA a partir de generadores de páginas o de paquetes de plantillas.
En definitiva, si eres de los que usa un amasijo de papeles como agenda no te reprimas, Internet está contigo
Damn Vulnerable Linux
Leyendo Vududevil me entero de la existencia de Damn Vulnerable Linux, una distribución orientada a la formación en seguridad informática.
DVL es una perversión de Damn Small Linux dotado de herramientas de depuración (gdb, lida…) y de seguridad (tcpdump, nmap…). La parte de perversión le viene de su deliberada manipulación para incluir brechas de seguridad
En resumen es una estupenda plataforma para aplicar, de forma práctica, ataques a programas y servicios.
Por el momento estoy descargando DVL, a ver si saco algo de tiempo para probarla… quizás con esto podamos preparar el curso de seguridad que llevamos años intentando hacer…
CVS: Manejando ramas
Hace algunos años publiqué una breve guía práctica de CVS, incompleta. Aprovechando que tengo algo de tiempo he decidido tachar este punto de mi lista de tareas
Creando una nueva rama
Antes de nada hemos de recordar que necesitamos una versión etiquetada, por ejemplo ‘v1_2′, sobre la que vamos a trabajar. Comenzamos extrayendo la versión a nuestro entorno de trabajo:
$ cvs checkout -d proyecto-1.2 -r v1_2 proyecto
Procedamos a crear la rama propiamente dicha:
$ cd proyecto-1.2
$ cvs tag -b v1_2-branch
El nombre de la rama es un gusto personal, yo prefiero añadir -branch aunque he visto -bugfixes o combinaciones de ambos.
Con estos simples pasos ya disponemos de una rama de desarrollo a la que podemos acceder, por ejemplo para hacer un cambio a la rama:
$ pwd
/home/chernando/proyecto
$ cvs up -r v1_2-branch
Si revisamos el estado de ‘main.c’ podemos ver que está incluido en una rama:
$ cvs -q status main.c
==================================================================
Working revision: 1.1.2.1 2007-03-07 19:06:39 +0100
Repository revision: 1.1.2.1 /tmp/repositorio/proyecto/main.c,v
Commit Identifier: QwJwh9fAP56fxb9s
Sticky Tag: v1_2-branch (branch: 1.1.2)
Sticky Date: (none)
Sticky Options: (none)
Importante fijarse en el cambio en la numeración, a partir de ahora en vez de avanzar con 1.X, se avanza con 1.N.X, siendo N la numeración de la rama.
Mezclando dos ramas
Bien, supongamos que queremos traernos cambios realizados desde una rama,’v1_2-branch’, a la principal. Muy fácil, haremos como si forzáramos un cambio de una versión anterior pero especificando la rama en vez de la revisión:
$ cvs update -j v1_2-branch main.c
RCS file: /tmp/repositorio/proyecto/main.c,v
retrieving revision 1.1
retrieving revision 1.1.2.1
Merging differences between 1.1 and 1.1.2.1 into main.c
$ cvs commit -m 'Cambios desde la rama v1.2' main.c
Hay un problema: no podemos hacer esta jugada dos veces seguidas sin dar conflictos
Supongamos que queremos volver a traernos un cambio desde la rama ‘v1_2-branch’ con el comando update. El diferencial de cambios para hacer la mezcla se hace desde la base de la derivación de la rama, si ya hemos aplicado parte de ese diferencial en una actualización anterior provocará irremediablemente un conflicto.
La solución para evitar el engorro de trabajar con conflictos es utilizar una referencia de la rama justo después de traer los cambios. Dos opciones principales:
- Etiquetar la rama cada vez que se traen cambios de ellas, ‘v1_2- branch-fixes-1′.
- Utilizar las nociones de tiempo de CVS, ‘v1_2-branch:3 days ago’.
La idea intuitiva es la de señalar en el historial de la rama dos marcas de tiempo, la última que se llevo a la principal y el actual de la rama, y aplicar los cambios que se realizaron entre esos dos instantes en la rama en la principal. Por ejemplo:
$ cvs update -j v1_2-branch-fixes-1 -j v1_2branch