últimoartículo

Formulario Anti-SPAM con Javascript y Mootools

23.11.2007

Últimamente está muy de moda utilizar los formularios de contactos o formularios de envío de comentarios a blogs para hacer SPAM dejando direcciones de sitios en busca de publicidad gratuita. Por otro lado tenemos a los usuarios que usan los formularios para desahogarse y desatar su ira con palabras obscenas que luego los webmasters tienen que sufrir.
Para solucionar esto les propongo un script sencillo que nos puede ayudar a prevenir algunos de estos dolores de cabeza. En este post no estoy ofreciendo un componente, solo un pedazo de código javascript que podemos integrar en nuestra web con conocimientos básicos de programación javascript.
Aunque los chequeos que hace el script son bastante triviales me he auxiliado de la poderosa biblioteca de Mootools para añadir unos toques de efectos visuales y para valerme de su facilidad para gestionar los eventos.
Para utilizar este código necesitarían descargarse Mootools e incluirlo en la página.

<script type=”text/javascript” src=”js/mootools-release-1.11.js”></script>

En el HTML debe haber una capa donde notificaremos en caso de detección de SPAM.

//message es el id de algun textarea dentro de nuestro formulario
//<textarea cols="50"></textarea>
var txt = $('message');

//log_div es el id de una capa donde mostraremos los posibles errores
//<div></div>
var log = $('log_div');

//Añadimos un efecto al div donde mostraremos los errores
var fx = new Fx.Styles(log, {
	duration: 3500,
	wait: false,
	transition: Fx.Transitions.Quad.easeOut
});

//Añadiendo eventos al textarea
txt.addEvents({
    //On Focus
	//Si queremos cambiar el color de background cuando se seleccione
	//O si queremos eliminar el texto por defecto
	'focus': function() {
		if (txt.value.contains('escribe tu mensaje...')) txt.value = '';
		//Cambiando color de background
		txt.setStyle('background','none #6F6F6F');
	},

	//On Keyup
	//Chequeamos que no halla codigo malicioso ni palabra obscenas
	'keyup': function() {
		//Convertimos todo a minúsculas
		var text = txt.value;
		text = text.toLowerCase();

		//Chequeando que no se escriban direcciones en el mensaje
		var regexp = /(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?/
		var x = regexp.test(text);

		//Por lo menos que no aparezca nada que comience con www
		var regexp2 = /(www)/
		var y = regexp2.test(text);

		//Si algunos de los chequeos anteriores dió positivo notificamos en el evento de que hay SPAM
		if (x==true || y==true){
		    //Ejecutamos el evento de notificacion de SPAM
			txt.fireEvent('burn', 'No se permiten direcciones web!');
			txt.value = txt.value.replace("www","");
			txt.value = txt.value.replace("http://","");
		}

		//Chequeamos que no se utilicen tags de html
		if(txt.value.contains("")){
			txt.value = txt.value.replace(">","");
		    //Ejecutamos el evento de notificacion de SPAM
			txt.fireEvent('burn','Eliminando caracteres potencialmente peligrosos');
		}

		//Diccionario de palabras no deseadas
		words = new Array("viagra","fuck","cialis","porno");

		//Chequeamos que no aparezcan ninguna de las palabras anteriores
		for(var i=0; i &lgt; words.length; i++){
			if(txt.value.contains(words[i])){
				txt.fireEvent('burn','SPAM reconocido');
				txt.value = txt.value.replace(words[i],'');
			}
		}
	},
	//On Burn
	//Este es un tipo de evento creado por nosotros que ejecutaremos siempre que se encuentra un SPAM
	'burn': function(text) {
	    //Insertamos el texto el el div donde se muestran los errores
		log.setHTML(text);

		//Ejecutamos el efecto para que haga una transición de opacidad
		fx.start({
			//'background-color': ['#990000', '#fff'],
			'color': ['#ff9c66', '#101b21'],

			'opacity': [1, 0]
		});
	}
});

Para ver un ejemplo funcionando pueden ir a la página de mi empresa equipo24 e ir a la sección de Contacto y probar algunas palabras como “viagra” o “porno”.
Espero que les sea útil.

artículosanteriores


Proteger Contenidos Web

28.09.2007

Aunque todo lo que publicamos en Internet puede ser copiado y pegado en otras webs, con gran facilidad, son muchos los que se apuntan a poner algunas dificultades…

Añadidendo el siguiente código en la etiqueta <body> los visitantes a nuestra página no podrán selecciónar el texto ni las imágenes publicadas.

oncontextmenu = “return false” onselectstart = “return false” ondragstart = “return false”

Una medida que no soluciona el problema de la copia indiscriminada de contenidos en la Red, pero que disuadirá a algunos amigos de publicar contenidos ajenos.

Validar tarjetas de crédito con Javascript

04.06.2007

Hace unos días investigando para desarrollar un módulo de reservas para un hotel me cayó la duda si era necesario almacenar los datos de la tarjeta de crédito y si había que validarla contra alguna entidad para corroborar que la tarjeta es válida antes de dar por hecha la reserva.
Para mi sorpresa en la mayoría de los sitios de booking que probé solamente hacen un simple chequeo para comprobar que el número de la tarjeta cumple ciertas características.
Para conocer esto el algoritmo es bien sencillo. Tomamos los dígitos en las posiciones impares y multiplicamos cada uno por dos, si algún resultado tuviera dos cifras, se suman las dos cifras del resultado. Los números obtenidos se suman entre sí junto con los números que ocupan las posiciones pares. Si el resultado es un múltiplo de 10 el número de tarjeta es válido. Por supuesto este método no asegura que el número exista, solamente que es coherente.

Aquí va el código en javascript:

function validarTarjeta(campo) {
  //Limpiamos el número de tarjeta  de posibles espacios en blanco...
  var expReg = /W/gi;
  var numero = campo.value.replace(expReg, "");

  //Chequeamos que el numero entrado tenga formato numérico...
  if (isNaN(numero)) {
    alert("El número de la tarjeta de crédito no tiene formato numérico.");
    campo.focus();
    return false;
  }

  //Chequeamos que el numero tenga 16 o 18 dígitos...
  if ((numero.length!=16) && (numero.length!=18)) {
     alert("El número de dígitos en la tarjeta de crédito es incorrecto.");
     campo.focus();
     return false;
  }

  var suma = 0;
  for (i = numero.length; i > 0; i--) {

    //Si la posición es impar
    if (i % 2 == 1) {
      var doble = "" + (parseInt(numero.substring(i - 1, i)) * 2);

      //Si el doble tiene más dos cifras (o sea es mayor que 9)
      if (doble.length == 2) {
         doble = parseInt(doble.substring(0,1)) + parseInt(doble.substring(1,2));
      }
      suma += parseInt(doble);
    }
    //Si la posición es par
    else {
      suma += parseInt(numero.substring(i - 1, i));
    }
  }

  //Si la suma total no es divisible por 10 entonces el número no es válido
  if (suma % 10 != 0) {
    alert("El número de la tarjeta de crédito no es válido.");
    campo.focus();
    return false;
  }

  //En cualquier otro caso el número es válido
  return true;
}

Increíble! conociendo esto me pude hacer reservas con datos falsos y números de tarjetas falsos que cumplen las características anteriores como este 1111222233334444, por supuesto esto fue solo para probar el concepto y enseguida las cancelé, de todas formas los hoteles suelen hacerle un cargo a las tarjetas para comprobar que realmente existen.

Chuletas, chuletas y más chuletas

19.12.2006

ChuletasEl Diccionario de la Real Academia de la Lengua Española define CHULETA (3ª acepción) como entre estudiantes, nota o papelito que se lleva oculto para consultarlo disimuladamente en los exámenes.

He visto muchos tipos de chuleta como estudiante y como docente… pero nunca olvidaré una en forma de bolígrafo.

Hace tiempo nuestro amigo eMe publicó varios artículos dedicado a este tema:

Ahora que no se encuentra entre nosotros este fantástico diseñador, tomo su testigo para continuar publicando una relación de chuletas que he descubierto en Smashing Magazine:

Actionscript

Ajax

Apache

ASCII Character Codes

ASP

C# and VB.NET

CSS

CVS

C++

Django

Firefox

Google

HTML/XHTML

Java

JavaScript

LaTeX

Microformats

Misc

MySQL

Oracle

Perl

Photoshop/Gimp

PHP

Python

Regular Expressions

Ruby

Unix/Linux

Weblog

Windows

XML

Pensé que sería buena idea bajarse todos los pdf’s y subirlos comprimidos para facilitar la descarga ¿No? ;)

Lightbox JS: Mostrar Imágenes en WP

28.03.2006

Con este ingenioso plugin de WordPress, podemos resolver un problema clásico: ¿Con qué tamaño mostramos nuestras imágenes? ¿Cuál será el tamaño óptimo para la mayoría de las resoluciones de monitor?¿Cuál se adapta mejor a nuestro layout? ¿500, 600, 745 o 800 px?

La cuestión es que en los posts publicaremos una miniatura y al hacer clic sobre ella se mostrará la imagen original en otra ventana tras un breve tiempo de precarga, aplicándole un elegante efecto.

Podéis ver como funciona en jggweb.

Mandar un Formulario con un Enlace

27.01.2006

No sé si el título de este artículo deja completamente claro su contenido. Deseo exponer una técnica con la que podemos enviar un formulario cumplimentado sin utilizar un botón Submit, sólo con hacer clic sobre un enlace.

Para ello debemos declarar el formulario:

<form name=”form1″ action=”enviar.php” method=”post”>

Hemos asociado el script enviar.php que se encargará de tratar los datos enviados.

En lugar de insertar un botón submit en el formulario añadimos el siguiente código:

<input type=”hidden” name=”form1″ />
<a href=”javascript:document.form1.submit()” alt=”Enviar Datos”>Enviar</a>

Editores de código/texto en Mac

20.01.2006

Andaba con bastantes ganas de olvidarme de Dreamweaver desde hace un tiempo. No utilizo la vista de diseño nunca, puesto que rara vez lo que muestra Dreamweaver se corresponde con lo que se pueda luego ver en alguno de los distintos navegadores, y además el tiempo de carga de la aplicación es enorme, así que ayer estuve un buen rato mirando editores de código para OS X buscando mi futura nueva herramienta de trabajo. Descartando los WYSIWYG como Nvu mis experiencias fueron las siguientes.

SKEdit es un fantástico editor de código con muchas opciones algunas tan buenas como el autocompletado, o coloreado de sintaxis, éste último con soporte para bastantes lenguajes y bastante inteligente. Tiene muchas opciones de configuración, se integra fantásticamente bien en el entorno OS X y carga muy rápido. Llevaba tiempo oyendo hablar muy bien de él y la verdad es que me ha dejado muy buen sabor de boca, todas las alabanzas que he leido se confirman al probarlo, sin embargo, no usa pestañas para cuando estas editando varios documentos (corregidme si me equivoco), y ésto se me antoja imprescindible para cuando estas con un par de html’s y la hoja de estilos liado. Además es de pago, aunque muy barato, 20$ solamente. No obstante, bajad la versión de prueba porque puede que dejeis de buscar. Yo miré un poquito más.

TextWrangler es una versión reducida y gratuíta de su hermano mayor BBEdit cuyo precio, 199$ se me antojó una losa que no tenia ganas de levantar (ni de bordear buscando un crack). De su hermano mayor, TextWrangler conserva muchas propiedades que lo convierten en una muy buena opción: Cajón lateral para ordenar los documentos que tengas abiertos, coloreado de sintaxis, soporte para muchos lenguajes, numeración de líneas, etc. No tiene la opción de autocompletado, que a mi particularmente me viene muy bien, pero por lo demás es fantástico.

Smultron es otro editor que posee unas características similares a los anteriores: cajón para los documentos abiertos, coloreado de sintaxis (aunque el coloreado tuve que cambiarlo porque no me gustaba mucho, demasiado llamativo), numeración de línea, etc. y además se asocia a la perfección con CyberDuck mi cliente FTP favorito para Mac, funcionalidad esta última que me ha hecho decantarme temporalmente por éste editor.

En cualquier manera cualquiera de las tres opciones son magníficas, y aún hay varios más que seguramente tendrán un altísima calidad, es cuestión de comparar. Si alguien conoce alguno con opción de autocompletar que lo comente. Quizás entre todos podemos ir completando éste post.

Por cierto, Smultron lo encontré buceando entre los posts de un blogger malagueño llamado Yomizmo, cada vez somos más los que posteamos desde el sur, dentro de poco habrá que organizar un blogs and beers o un blogs and málaga virgen en el pimpi ¿no?

Listas de recursos para el Webmaster

17.01.2006

Hoy escribo sobre dos páginas que no deberían faltar en los favoritos de alguien relacionado con el diseño y administración de sitios web: Web Developer’s Handbook y Resources For Web Design.

La primera puede que ya la conozcáis puesto que es una página desarrollada y mantenida por Vitali Friedman al que ya hicimos referencia hace unos dias por su recopilación de las mejores fuentes de licencia gratuíta de 2005. Además, el prolífico Skeku lo enlaza también esta semana, aunque él lo conocía desde hace tiempo y no nos lo quiso contar;).

La segunda la he descubierto hoy por casualidad, para mi gusto es más concisa, y quizás más útil que la del señor Friedman, aunque el hecho de que el diseño sea más básico da sensación de una mayor desorganización.

Entre ambas creo que no dejan fuera ninguno de los recursos que podamos necesitar a la hora de diseñar, programar, validar y mantener una página web: Información de los distintos buscadores y navegadores, tutoriales de CSS, HTML, JS, etc., validadores de código, artículos sobre autoría web, analizadores de tráfico… Todo!

Lo dicho, la referencia completa de un webmaster en dos páginas.

Actualización (19-1-06): En Criterión, Skeku nos muestra un nuevo enlace similar a los comentados anteriormente, (nos lo había prometido en los comentarios) se trata de CSS & XHTML Bookmarks. Echadle un ojo.

Enlace en el Encabezado

23.11.2005

Con frecuencia nos podemos encontrar con páginas web con un encabezado que muestra una imagen por medio de la propiedad background de CSS asociado a un elemento del layout.

Si deseamos que la imagen de fondo sea un enlace a la página inicio de la web debemos añadir el siguiente código en la etiqueta del encabezado de la plantilla inicio:

<div id=”header” onClick=’window.location.href=”http://www.dominio.com”‘>

y en la hoja de estilo debemos añadir la siguientes reglas en la declaración del estilo header:

cursor: pointer;
cursor: hand;

Otra propuesta más accesible de Leo:

<h1 id="encabezado"><a href="/">Nombre del sitio</a></h1>

Y en el CSS:

h1#encabezado {
background: url(’img/logo.jpg’) no-repeat;
text-indent: -9999px;
}

h1#encabezado a {
display: block;
width: 100px;
height: 100px;
}

Stan nos recomienda que leamos un artículo suyo titulado Personaliza el titulo de tu sitio con javascript en el que se recogieron muchas recomendaciones.

Mapas de Imágenes con CSS

18.09.2005

Me gusta aprender nuevos usos de las herramientas que ya utilizo. Por ello llevaba tiempo queriendo probar algo que había leido en Criterion y había quedado almacenado en mis favoritos

Un mapa de imagen en HTML nos permite añadir a una imagen zonas interactivas desde las cuales podremos enlazar otras páginas. Es una de las funcionalidades básicas del lenguaje HTML que más juego nos dan cuando estamos aprendiendo. Bien, gracias a CSS podemos hacer mapas de imágenes aún más funcionales, similares a las que podemos crear en Flickr para nuestras fotografías, y añadirle una pequeña descripción que se muestra sobre la misma imagen.

Es bastante simple de realizar y seguro que se nos ocurren muchos usos para darle. Espero que lo disfrutéis.

Artículo original en Criterion

Publica tu Alexa

20.07.2005

Logo de Alexa.comDesde 1997, Alexa (propiedad de Amazon) mide la audiencia que tiene cada pagina Web del mundo. Sus mediciones son tan respetadas, que muchas empresas las tienen en cuenta para elegir los sitios web donde contratarán su publicidad.

Puedes leer más de Alexa en el artículo Alexa: el ranking.

Si deseas publicar el valor que Alexa tiene asignado a tu web puedes utilizar el servicio que ofrece Mi Alexa, web desarrollada por WIROOS al igual que Mi PageRank del que hablamos hace tiempo en el artículo Muestra el PageRank de tu web.
Alexa: 334.410.

Nuestro Alexa Actual:

Mostrar capa teniendo en cuenta el scroll

20.06.2005

El otro día estaba tratando de mostrar una capa al pasar el puntero del ratón sobre una imagen, de manera que la capa apareciera justo debajo del puntero del ratón. Al principio sólo tuve que mostrarla cuando se lanzará el evento onmouseover, pero a medida que iba añadiendo controles a la página ésta se iba haciendo más grande hasta que apareció el maldito scroll. Lo que ocurrió entonces es que la capa no me salía justo debajo del puntero del ratón sino que se desplazaba arriba o abajo. Después de un rato mirando el código me di cuenta que el desplazamiento que se producía era equivalente al desplazamiento que tenía la barra de scroll, por lo tanto, para solucionarlo tuve que sumarle a la posición actual del ratón, el desplazamiento de la barra de scroll:

document.getElementById(”divObservaciones”).style.left=event.clientX + document.body.scrollLeft;
document.getElementById(”divObservaciones”).style.top=event.clientY + document.body.scrollTop;

Esto se debe a que event.clientX y su homólogo en el eje Y toman una posición relativa a la pantalla, mientras que las propiedades left y top toman medidas absolutas, por lo que se produce un desfase. Si a la posición del puntero del ratón le sumamos los desplazamientos, tanto horizontal como vertical del scroll, obtendremos las posiciones absolutas que demandan las propiedades left y top.

Con esto la capa siempre se muestra donde yo quiero, aunque haya un scroll de por medio.

S3rGy0.

Tutorial para Webmaster

03.03.2005

WebtutorialEn la página de Webtutorial he encontrado un tutorial que nos guía por todos los aspectos que atañan al desarrollo de páginas web. En el podemos encontrar información útil de cada uno de los pasos que debemos seguir en el desarrollo de sitios web, así como muchos trucos para facilitar y mejorar nuestro trabajo. El totalmente freeware.

Pantalla de Webtutorial

Requiere de una instalación en nuestra máquina, pero es muy rápida y sencilla.

Un 10 para estos chicos de Webtutorial. Podéis descargarlo desde la página oficial.

Chuletas informáticas de todos los sabores

31.01.2005

Según parece me estoy volviendo el indiscutible rey del chuleteo, quizás es que la habilidad de búsqueda para éste tipo de documentos se afina en los que aún somos estudiantes, en cualquier caso, creo que con éste post cerraré mi particular sección de chuletas para unos cuantos meses.

Y ésto es así, simplemente porque navegando por Techfluff un blog perteneciente a los nuevos MSN Spaces que tan rápido se están expandiendo, he encontrado éstas Quick Reference Cards de Digilife.be, que no vienen a ser otra cosa más que unas fantásticas chuletas de todo tipo de lenguajes, aplicaciones, etc. en PDF, que pueden ser impresas para mayor comodidad de uso y que harán las delicias de todo aquel que necesite una rápida referencia a la materia de la cual trata la chuleta en cuestión.

Sin lugar a dudas, éste mes de exámenes es perfecto para ponerlas a prueba ;)

Muestra el PageRank de tu web

31.01.2005

Una forma fácil de mostrar la calificación asignada por Google a tu web, es un pequeño script hecho con JavaScript que lo puedes generar online en Mi PageRank.

Nuestro PageRank:

Aprender con W3Schools

08.12.2004

Un sitio muy interesante que he encontrado hace unos días es W3Schools.com

Aquí se pueden encontrar muchas tutoriales que van desde lo básico hasta niveles más avanzados. Hay muchos lenguajes que se pueden aprender desde PHP y HTML hasta CSS, XHTML, Javascript, SQL y muchísimas más cosas de interés. También hay muchos ejemplos que se pueden modificar en tiempo real para ver el efecto que generan.

El sitio es muy claro y bien organizado?. su única pega es que está en inglés. Aun así incluso los que no tienen un nivelazo de ingles sabrán sacar provecho del sitio. Muy recomendado.

Librerí­as de Scripts

07.09.2004

Una de las primeras gestiones que debe llevar a cabo un webmaster cuando se responsabiliza de un nuevo proyecto, es buscar precedentes, es decir, si existe algo parecido en la Red. No para copiarlo, sino para usarlo como referencia. Tomando nota de las cosas que nos gustan, que se adaptan a los requerimientos del cliente y de las mejoras que deseamos implementar.

En el mismo sentido, existen sitios web en los que podemos encontrar multitud de scripts listos para bajar, estudiar, modificar, aplicar y almacenar en nuestra base de datos para una próxima reutilización del código.

Os recomiendo HotScripts, porque los casi 30.000 scripts se pueden encontrar categorizados por lenguajes y función.

Siempre que este hecho…aprovechadlo

Aplicar varios estilos CSS a una página

01.09.2004

Si queremos darle la posibilidad al usuario de cambiar el estilo de nuestra página web podemos hacerlo facilmente usando JavaScript.

JavaScript permite cambiar las propiedades de un objeto usando la sintaxis:

objeto.propiedad=valor;

Si a la etiqueta <LINK> le asignamos un identificador podremos modificar el valor de la propiedad href con javascript:

<link href=”estilo1.css” rel=”stylesheet” type=”text/css” id=”estilo”>

La siguiente función recibe como argumento de entrada el nombre de la hoja de estilos que se aplicará a la página.

function Cambio_Estilo(fichero)
{
document.getElementById(’estilo’).href=fichero;
}

Para llamar a la función podemos usar un botón, un cuadro combinado o cualquier otro objeto web y asociarselo a cualquier evento:

<input type=”button” value=”Estilo 2″ onClick=”Cambio_Estilo(’estilo2.css’);”>