Archive: Posts Tagged ‘Open Source’

¿Qué es el CAPTCHA y RECAPTCHA?

No comments June 4th, 2010

Para poder distinguir a los humanos de los robots en las páginas web, sobre todo para evitar el spam y otros abusos, aparecieron los CAPTCHA: esas letras y números, normalmente distorsionadas que tienes que identificar en un formulario para que te deje enviarlo. Este término, marca registrada propiedad de la Carnagie Mellon University, es el acrónimo de “Completely AutomatedPublic Turing test to tell Computers and Humans Apart”. El Test de Turing tiene como objeto ver la capacidad de una máquina de mostrar inteligencia. Descrito por el profesor Alan Turing en 1950 el test consiste en una conversación entre un juez humano y otros dos interlocutores, uno humano y el otro una máquina, mediante un programa de teletipos o chat, para comprobar estrictamente la capacidad de la máquina de expresarse, no de reproducir palabras. Si el juez no es capaz de diferenciarlos, la máquina habrá pasado el test. Por eso los CAPTCHA están considerados tests de Turin inversos, ya que es el humano el que ha de demostrar su condición.

Los primeros CAPTCHA eran generados por programas que distorsionaban las imágenes, pero hecha la ley hecha la trampa, los chicos malos pronto encontraron métodos para saltárselos. Así que cada vez se hicieron más complejos añadiendo líneas y motivos de fondo.

Lo último son los reCAPTCHA cuyo lema ya casi lo explica todo (stop spam, read books), en lo que viene a ser un divertido ejercicio de “recontra-ingeniería-inversa”. El sistema es parecido, pero en vez de utilizar fondos raros o rayas, te presentará un par de palabras sacadas de libros antiguos que los programas de reconocimiento de escritura (OCR) no han sido capaces de identificar a los que además se le añade distorsión. Así que de paso que demuestras que eres humano, colaboras en la digitalización de libros antiguos. Según los datos de reCAPTCHA cada día se completan 60 millones de CAPTCHAs en todo el mundo, así que de la “computación distribuída” hemos pasado a la “computación distribuída humana”.

Además reCAPTCHA es gratuito y puedes implementarlo en tu blog (hay plugin para WordPress), y tiene una opción sonora para personas con problemas visuales.

Un Saludo!!

Numeros Aleatorios Reales Con Random.Org

1 comment May 26th, 2010

Hola SQLeros, el día de hoy les presento una aplicación web que es muy interesante se encuentra en la dirección RANDOM.ORG.

RANDOM.ORG

RANDOM.ORG

Lo peculiar es la forma en que los numeros aleatorios son generados, tal vez  se han preguntado cómo las máquinas predecibles como las computadoras pueden generar aleatoriedad.

En realidad, los números aleatorios usados en la mayoría de los programas de compudatora son pseudo-aleatorios, lo que significa que cada numero se genera en una forma predecible mediante una fórmula matemática.

Esto está bien para muchos propósitos, pero no puede ser al azar en la forma en que lo esperamos, por ejemplo si estás acostumbrado a juegos de azar o a la lotería.

RANDOM.ORG ofrece auténticos números al azar para cualquier usuario de la  Internet. El azar viene de ruido atmosférico, que para muchos propósitos es mejor que el algoritmos de números pseudo-aleatorios que se  utilizan normalmente en los programas de la computadora.

La gente usa RANDOM.ORG para la creación de dibujos, la lotería y sorteos, para realizar juegos, etc. , para aplicaciones científicas y para el arte y la música.

El servicio ha existido desde 1998 y fue construido y está siendo operado por Mads Haahr de la Facultad de Ciencias de la Computación y Estadística en el Trinity College de Dublín en Irlanda.

No esta demás señalar que la página cuenta con un API el cual esta expuesto en intenet y se puede consumir desde distintos lenguajes de programación con sus respectivas implementaciones.

Después de una breve platica sobre este servicio haremos un ejercicio en PHP.

Supongamos que necesitamos obtener un intervalo de números aleatorios para hacer alguna actividad.

< ?php
/* Titulo: Numeros Aleatorios Reales Con Random.Org
* Autor: RammsZeñábI.
* Blog: SQLeros.Com.Ar 2010
*Funcion para recolectar una serie de numeros aleatorios desde la página RANDOM.ORG
* $numeros, es la cantidad de numeros que se decean obtener por defecto es 1.
* $minimo, es el intervalo izquierdo de la serie por defecto es 0.
* $maximo, es el intervalo derecho de la serie por defecto es 10.
* $base, es la base de la serie de los numeros obtenidos, por defecto es 10.
* $formato de la serie resultante puede ser "plain" o "html" por defecto es "plain".
*/
function aleatorioDeRandomDotORG($numeros=1,$minimo=0,$maximo=10,$base=10,$formato="plain")
{

	$repuesta_http=""; //guardamos la serie de los numeros generados
	$servidor="www.random.org"; //el dominio a donde crearemos la conexión.
	$consulta="/integers/?num=$numeros&min=$minimo&max=$maximo&col=1&base=$base&format=$formato&rnd=new"; //la consulta GET que harémos.
	$puerto=80; //puerto a donde se conecta el socket.
	$tiempoEspera=30; //tiempo de espera para la conexión.

	//Creamos un socket y si todo sale muy bien
	if($fsock = fsockopen($servidor,$puerto, $errno, $errstr, $tiempoEspera))
		{
			//ejecutamos la consulta
			@fputs($fsock, "GET $consulta\r\n");
			// y leemos los datos.
			while (!@feof($fsock))
			{
				//guardamos en la variable lo que leemos
				//agregamos la marca "," para separalas por comas al final.
				$repuesta_http .= fgets($fsock, 128).",";
			}
			//Cerramos el socket.
			fclose($fsock);
		}
//y finalmente devolvemos un arreglo con los valores de la serie.
return explode(",",$repuesta_http);
}
?>
<html>
	<body>
	<h1>Creación de Numeros Aleatorios Usando RANDOM.ORG</h1>
	< ?php
	//probamos el codigo.
	$cosa=aleatorioDeRandomDotORG(5);
	//ahora mostramos los valores.
	echo "<ol>";
	for($i=0;$i<count ($cosa)-1;$i++)
	{
		echo "<li>$cosa[$i]";
	}
	echo "";
	?>
	<h1><a href="http://sqleros.com.ar/wps">SQLeros.Com.Ar</a></h1>
	</count></body>
</html>

Bueno un Saludo!!

Crear Servicio Web En PHP Con NüSoap

3 comments April 18th, 2010

1.- Para que funcione el ejemplo descárgate las clases de NüSOAP desde la pagina del proyecto http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap.

3.- Luego ejecutas en tu Servidor MySQL el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Luego crea una pagina PHP (en este ejemplo la pagina se llama servicioweb.php) y codificas lo siguiente:

< ?php
require_once('lib-nusoap/nusoap.php');

$server = new soap_server;

$ns="http://localhost/aplicativo"; // espacio de nombres; Sitio donde estará alojado el web service
$server->configurewsdl('MiWebService'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;

/************ REGISTRANDO EL ARRAY A DEVOLVER(array de productos) **************/
$server->wsdl->addComplexType(
'ArregloProductos', 			// Nombre
'complexType', 					// Tipo de Clase
'array', 						// Tipo de PHP
'', 							// definición del tipo secuencia(all|sequence|choice)
'SOAP-ENC:Array', 				// Restricted Base
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Productos[]') // Atributos
),
'tns:Productos'
);

/************ REGISTRANDO LA ESTRUCTURA DE DATOS PRODUCTOS **************/
$server->wsdl->addComplexType('Productos', 'complexType', 'struct', 'all', '',
array(
'ProductoID'=> array('name' => 'ProductoID','type' => 'xsd:int'),
'Nombre'    => array('name' => 'Nombre',    'type' => 'xsd:string'),
'Precio'    => array('name' => 'Precio',    'type' => 'xsd:string')
)
);

/*METODO DEL WEB SERVICE*/
function ListarProductos($estado){
if($estado!=''){
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_ListarProductos('%s');",$estado); //intentando filtrar el SQL Injection
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra
$db->close();
$i=0;
if($result->num_rows>0){
while($row = mysqli_fetch_assoc($result)){
$toc[$i]['ProductoID'] = $row["producto_id"];
$toc[$i]['Nombre'] = $row["nombre"];
$toc[$i]['Precio'] = $row["precio"];
$i++;
}
$result->free; //liberando memoria
return $toc;
}
}
return '';
}

/************ REGISTRANDO EL METODO **************/
$server->register(
'ListarProductos',   						// Nombre del Método
array('estado' => 'xsd:string' ),           // Parámetros de Entrada
array('return' => 'tns:ArregloProductos')   //Datos de Salida
);

/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : implode("\r\n", file('php://input'));
$server->service($input);
exit;
?>


Si deseas puedes descargar el ejemplo completo desde aquí. Varios usuarios me han hecho la observación en la cual no funciona el código, esto es por el nombre de la carpeta comprimida que llame SQLeros-NüSoapEjemplo.zip, para que funcione bien solo cambienle el nombre por: SQLeros-NuSoapEjemplo.zip

También veremos como consumir el servicio desde C#,VB.Net y Java. Saludos