15 de agosto de 2008

Sombras en HTML (Sin imágenes/CSS3)

La sombra puede que no sea una herramienta de diseño importante, pero en ocasiones aparece la necesidad de añadir "algo" al texto. Un ejemplo pueder ser colocar texto sobre una imagen, dependiendo de los colores de la imagen y el texto, sin una sombra el texto puede "perderse".
Cuando uno quiere poner sombras en HTML las opciones son bastante escasas:

  • Se podría usar la propiedad text-shadow de CSS3, pero por los momentos esta opción sólo es soportada por Safari.

  • Se podría usar el pseudo-elemento ":before" de CSS para duplicar el texto y simular la sombra, pero esto no funcionaría en Internet Explorer.

  • Se podría usar un filtro de CSS propietario para que funcione en IE, pero eso sería una solución no estándar y además solo funcionaría en IE.
Si se usa una o varias de las opciones anteriores, la apariencia podría cambiar drásticamente en distintos navegadores. Por los momentos, un código de CSS estándar no nos dará la solución que queremos, pero un poco de manipulación del DOM es exactamente lo que necesitamos.

Primero, el código Javascript que permite que la magia ocurra:
function getElementsByClass(searchClass,tag) {
var classElements = new Array();
var els = document.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
var j = 0;
for (i = 0 ; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}

function sombrear(){
var aSombrear=getElementsByClass("sombreado","*");
var total=aSombrear.length;
for(i=0;i<total;i++){
objeto=aSombrear[i];

var texto=objeto.firstChild.data;

var sombraSpan=document.createElement("span");
sombraSpan.appendChild(document.createTextNode(texto));
sombraSpan.className="sombra";

var textoSpan=document.createElement("span");
textoSpan.appendChild(document.createTextNode(texto));

objeto.firstChild.data="";
objeto.appendChild(sombraSpan);
objeto.appendChild(textoSpan);
}
}

Ahora el código CSS que nos ayudará a crear el efecto de sombra para el texto:
.sombreado, .sombreado span {position: relative;}

span.sombra{
position: absolute;
top: 2px;
left: 2px;
color: #b2b2b2;
}

Ahora simplemente creamos un elemento de texto en el documento y le aplicamos la clase de CSS "sombreado".
<h1 class="sombreado">Esto es un título con sombra</h1>
La función de javascript se encarga de

  1. Encontrar todos los elementos del documento que pertenecen a la clase "sombreado"

  2. Crea dos elementos span, uno para el texto y otro para la sombra

  3. Copia el contenido del texto dentro de los 2 span recién creados

  4. Reemplaza el contenido original con los 2 span con su correspondiente z orden (sombra, luego texto)
El posicionamiento de la sombra es manejado por la clase .sombra definida en la hoja de estilo. En nuestro ejemplo la sombra está desplazada 2 pixeles hacia abajo y a la derecha.

Es decir, para el ejemplo anterior
<h1 class="sombreado">Esto es un título con sombra</h1>

Se convierte en
<h1 class="sombreado">
<span class="sombra">Esto es un título con sombra</span>
<span>Esto es un título con sombra</span>
</h1>

Esto permite crear el efecto deseado sin necesidad de código HTML extra, sin imágenes y que funciona en los navegadores más populares del mercado.

Se puede ver un ejemplo funcionando en http://joserclblogs.googlepages.com/sombras.html

8 de agosto de 2008

Usar GMail para links de correo en Firefox

En firefox siempre que tratamos de abrir los links a correos se nos abre el evolution (linux) o el outlook (windows) de forma predeterminada, a continuación muestro una manera de hacer que estos links a correos se manejen desde GMail.
  1. Primero entramos en la configuración del firefox, para esto escribimos about:config en la barra de direcciones

  2. Ahora buscamos la clave gecko.handlerService.allowRegisterFromDifferentHost y cambiamos su valor a True haciéndole doble click.

  3. Ahora le indicamos al manejador de protocolos de firefox que agregue a GMail como aplicación copiando lo siguiente en la barra de tareas y presionando enter

    javascript:window.navigator.registerProtocolHandler("mailto","https://mail.google.com/mail/?extsrc=mailto&url=%s","GMail")

    O simplemente hacemos click AQUÍ

  4. Firefox nos preguntará si queremos agregar a GMail como manejador de protocolos y hacemos click en el botón Añadir aplicación.

  5. Ahora tenemos que elegir a Gmail como gestor predeterminado de los links de email. Para eso entramos en Opciones > Aplicaciones, elegimos mailto y seleccionamos GMail como aplicación de correo predeterminada.

  6. Por último volvemos a poner el valor de la clave gecko.handlerService.allowRegisterFromDifferentHost en False con doble click.

5 de agosto de 2008

Hamachi

Hamachi es una aplicación gratuita configuradora de redes privadas virtuales capaz de establecer vínculos directos entre computadoras que están bajo firewalls de NAT sin requerir reconfiguración alguna (en la mayoría de los casos), en otras palabras, establece una conexión a través de Internet para crear un entorno virtual que simula una red de área local formada por ordenadores remotos. Actualmente está disponible la versión para Microsoft Windows y la versión beta para Mac OS X y Linux.[1]

Pues eso, hamachi permite que los usuarios sin conocimientos técnicos ni nada parecido puedan crear sus propias VPN y conectarse a ellas sin necesidad de abrir puertos en el firewall, enredarse con el NAT ni nada "fastidioso".

El software puede ser descargado de la página oficial y se instala fácilmente, pero esa no es la razón por la que escribo este post, la razón es la creación de un script para linux que permite que hamachi se ejecute como un servicio.

Primero y principal, necesitas poner los archivos de configuracion de hamachi en un directorio global a diferencia de tu directorio /home. hamachi-init crea scripts en el directorio home dentro de una carpeta llamada .hamachi por defecto, pero nosotros especificaremos como directorio de configuración /etc/hamachi. Para esto ejecutamos:

hamachi-init -c /etc/hamachi

Luego necesitamos crear un script para iniciar hamachi, usa el editor de texto de tu preferencia y crea un archivo llamado hamachi-start y copia lo siguiente.

#!/bin/sh

hamachi_start() {
echo "Starting hamachi..."
/sbin/tuncfg
/usr/bin/hamachi -c /etc/hamachi start
}

hamachi_stop() {
echo "Stopping hamachi..."
killall tuncfg
/usr/bin/hamachi -c /etc/hamachi stop
}

hamachi_restart() {
hamachi_stop
sleep 1
hamachi_start
}

case "$1" in
'start')
hamachi_start
;;
'stop')
hamachi_stop
;;
'restart')
hamachi_restart
;;
*)
hamachi_start
esac

Guárdalo en la carpeta /usr/bin y otórgale permisos de ejecución:

chmod a+x /usr/bin/hamachi-start

Ahora editamos el archivo /etc/rc.local (haz un backup antes de "meterle mano" al archivo)

Al final del archivo agrega las siguientes lineas:
if [ -x /usr/bin/hamachi-start ]; then
. /usr/bin/hamachi-start
fi


Ahora los comandos básicamente son los mismos con una pequeña diferencia, cada vez que se invoca un comando de hamachi, se tiene que especificar la localizacion del archivo de configuración con la opción -c.

hamachi -c /etc/hamachi set-nick nickname
hamachi -c /etc/hamachi login
hamachi -c /etc/hamachi create nombre_red clave
hamachi -c /etc/hamachi join nombre_red clave
hamachi -c /etc/hamachi go-online nombre_red
hamachi -c /etc/hamachi list
hamachi -c /etc/hamachi go-offline nombre_red




[1] http://es.wikipedia.org/wiki/Hamachi