Archivo por meses: noviembre 2008

Ciudad romana de Segóbriga

A 250km de Valencia en dirección Madrid y desviándose apenas unos 5km de la autovía A3 (perfectamente señalizado), se encuentra la Ciudad Romana de Segóbriga, una gran desconocida. Reconozco que he pasado decenas de veces por delante del letrero y nunca se me había ocurrido parar… hasta hoy.

La verdad es que nos quedamos bastante impresionados ya que, entre otras cosas, tenía teatro, anfieatro (bien conservados) y circo (apenas los restos), lo que da una idea de lo que un día fue la ciudad. Un destino poco conocido dentro de la España Romana, quizás por eso es una sorpresa.

Ciudad Romana de segóbriga

Ciudad Romana de segóbrigaForo Romano de Segobriga

Es una de las ciudades romanas (entendida como el conjunto) mejor conservadas y el conjunto arqueológico más importante de la meseta. A partir del s.I se convirtió en un importante núcleo agrario y minero además de centro de comunicaciones. La conquista islámica supuso su declive, pero, por suerte, han llegado hasta nosotros las huellas de lo que llegó a ser.

Teatro

Teatro Romano de Segobriga

Ciudad Romana de segóbrigaCiudad Romana de segóbriga

El teatro, al igual que el anfiteatro, conserva el graderío y mantiene todavia la estructura original del 79d.c., cuando se construyó. Cabe señalar que, por aquel entonces, Segóbriga tenía nada más y nada menos que 5.500 habitantes.

Termas

Termas Romanas de Segóbriga

Circo

Esa forma oval que se observa en el centro de la foto era el impresionante circo. Lo reconozco, me habría gustado vivir aquella época sólo por ver una apasionante carrera de cuadrigas, quizás ya hubiese un Fernando Alonso en la antigua Roma 😛 .

Circo Romano de Segóbriga

Anfiteatro

Finalmente el precursor de nuestras plazas de toros. Con capacidad para 5.500 espectadores, flanqueaba junto al teatro la entrada a la ciudad y, como casi siempre, se construyó aprovechando una ladera natural del cerro. Increíble su acústica.

Anfiteatro Romano de Segóbriga

Anfiteatro Romano de SegóbrigaAnfiteatro Romano de SegóbrigaAnfiteatro Romano de Segóbriga

Hospedería Casas de Lujan

Lo siento, tengo el vicio de comer todos los días 😛 . Al llegar a Segóbriga era ya la hora de comer, así que nos dejamos guiar por un folleto que cojimos en la propia Ciudad Romana. A unos 8km de ésta llegamos a la Hospedería Casas de Luján, un gran descubrimiento que nos dejó con la boca abierta.

Hospedería Casas de Luján

Hospedería Casas de LujánHospedería Casas de LujánHospedería Casas de Luján

Enclavada en un maravilloso entorno rural se encuentra esta gran casa de labranza del s.XVII completamente rehabilitada y convertida en hotel, restaurante y salones de celebraciones. Pero Casas de Luján no es solo la casa, es todo el entorno, completamente  integrado, parece que te encuentres en un museo etnográfico y no en un establecimiento de hostelería. El río y los animales (pavos, gallinas, gallos, un burro…) no hacen sino reforzar la imagen encantadora que tiene el lugar.

Hospedería Casas de Luján

Hospedería Casas de LujánHospedería Casas de Luján

El interior es más de lo mismo, ambiente tradicional y rural, bien conservado y decorado con el gusto preciso para no caer en la soez. Esto es la carta del restaurante, muy original.

Carta en Hospedería Casas de Luján

Hospedería Casas de LujánHospedería Casas de LujánHospedería Casas de LujánHospedería Casas de Luján

Pero bueno, ya esta bien, vamos a lo importante ¿no?. Muy bonito, sí, pero ¿qué hay de la comida? Fantástica.

Migas de bacalao con gambas y piñones y Collage de foie de pato y oca con configura de naranja y frambuesa.

Hospedería Casas de LujánHospedería Casas de Luján

Chuletón de Ávila y Pierna de cordero lechal deshuesada.

 Hospedería Casas de LujánHospedería Casas de Luján

Tarta de tiramisú y Tarta de queso de cabra y membrillo.

Hospedería Casas de LujánHospedería Casas de Luján

Todo ello regado con una botella de la zona, Estola Reserva del ’98 D.O. La Mancha.

Nosotros salimos encantados y queremos volver un fin de semana para conocer más la zona (Belmonte, Lagunas de Ruidera, La Alcarria, El Toboso…)

Congreso de Webmasters 2008 y I Foro de Startups

Casualidades de la vida, aunque el próximo fin de semana estaré en Madrid no será para asistir al Congreso de Webmasters 2008, donde más de 30 expertos descubrirán la realidad del sector a través de ponencias, talleres, mesas redondodas y, sobre todo, networking, mucho networking.

Quien sí estará será mi buen amigo y socio Marcos García que el domingo a las cinco de la tarde participará en una mesa redonda sobre la actualidad de la blogosfera hispana. Debatirá nada más y nada menos que con Fernando Tellado, Javier Martín (Loogic), Luís Rull, y Wicho (Microsiervos).

Además de esto, mañana martes 18 de noviembre se celebra en Barcelona el I Foro de Satartups organizado por First Tuesday (Carlos Blanco y Amaia Helguera)  donde se buscará al mejor de los siete proyectos seleccionados de entre los 21 presentados. Los ganadores se repartirán los premios cedidos por distintas empresas y emprendedores (anda que algunos se han estirado…). Es aquí precisamente donde desde Cucharete colaboraremos con una cena para 2 personas en el restaurante La Alacena de Serrano.

Depurando condiciones Rewrite en Apache

Últimamente he tenido que utilizar bastante ModRewrite de Apache en distintos proyectos, algunos de migración y otros de Internet Móvil donde se necesitan ciertas URL’s para que las operadoras lancen sus sitemas de billing.

Con ModRewrite es muy fácil convertir URLs antiguas al formato nuevo en caso de migración (de manera que no pierdes el SEO que tengas). En el caso del billing de las operadoras móviles es todavía más sencillo puesto que simplemente lo usamos para simular una URL premium. Por ejemplo:

http://tudominio.com/premium.php?noticia=3

Se convierte en:

http://tudominio.com/index.php?noticia=3

De este modo no es necesario hacer scripts independientes y separados por operadora sino que todo queda integrado en nuestro framework.

El problema es que es bastante tedioso depurar lo que hace ModRewrite para ver si las condiciones que has escrito son correctas o si algún filtro no se está ejecutando correctamente. Para solucionarlo lo mejor que podemos hacer es decirle a Apache que “logee” todas las decisiones que va tomando sobre nuestros filtros. Tan fácil como esto:

RewriteEngine on
RewriteLog "/logs/rewrite.log"
RewriteLogLevel 4

RewriteCond %{REQUEST_URI} ^/premium.php$
RewriteRule ^/premium.php /index.php

Este sencillo ejemplo nos permite comprobar qué veremos en el log:

213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (3) applying pattern '^/premium.php' to uri '/premium.php'
213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (4) RewriteCond: input='/premium.php' pattern='^/premium.php$' => matched
213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (2) rewrite /premium.php -> /index.php
213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (2) local path result: /index.php
213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (2) prefixed with document_root to /var/www/tudominio.com/index.php
213.xxx.xxx.xxx - - [15/Nov/2008:00:48:23 +0000] [tudominio.com/sid#127d7b0][rid#16b8c20/initial] (1) go-ahead with /var/www/tudominio.com/index.php [OK]

Por cada URL que se solicita al servidor, Apache va comprobando las posibles condiciones que has escrito por si coincide con el patrón (matched) o no (not matched). Si la URL cumple los requisitos, la reescribe según se indica en la regla, en caso contrario la deja pasar tal cual. Con toda esta información podemos hacer un completo seguimiento de las reglas que queremos aplicar para comprobar si hay algún error o por qué determinada URL no hace lo que esperamos que haga.

El nivel del log indica la cantidad de información que se guardará, de 0 a 9. A  mayor valor, más información.

Algo muy sencillo pero que pasa desapercibido para la mayoría y acabamos perdiendo muchísimo tiempo probando reglas sin saber qué está ocurriendo en el interior de nuestro servidor web.

Fotomatón, o haciendo fotos instantáneas online

La idea es sencilla, conectas con la webcam de tus usuarios, les haces una foto y la envías a una galería donde se pueden ver los caretos de tus visitantes. La implementación es casi tan sencilla como la teoría y el resultado es increíble y original.

El sistema es el mismo que utilizaba BloggerSnap, un servicio que tuvo un increíble éxito en su lanzamiento y que parece cerrado desde abril. Hace un año estaba por encima del puesto 40.000 en Alexa, seguramente estuvo incluso más alto. Imagino que sería muy complicado mantener el coste del ancho de banda con tanta popularidad. Hace un par de años estuvimos a punto de lanzar un servicio similar y lo desestimamos ya que no veíamos la manera de monetizarlo mientras que, a poco que tuviese éxito, los gastos se dispararían.

En un escenario normal dependerías de software que el usuario tendría que instalar para que se hiciese la foto y posteriormente te la enviase, con lo cual no conseguirías el objetivo de la instantaneidad, pero existe una solución que permite hacerlo todo mediante una aplicación online: Flash, en nuestro caso Flex 😛 .

La potencia de la plataforma Flash en el tratamiento de audio y vídeo va mucho más allá de lo que pueda parecer y permite crear aplicaciones multimedia avanzadas con participación del usuario de manera bastante rápida. Si además dispones de dinero suficiente, puedes combinarlo con Flash Media Server y los límites los pondrá tu imaginación. Otro día crearemos un videochat 😉 .

La clave es el acceso a la cámara y al micrófono del equipo que permite la plataforma Flash previa autorización del usuario, obviamente. Si lo autorizas, el player conectará con tu webcam y comenzará a mostrar el vídeo de la misma y, si la aplicación lo requiere, enviarlo a otros usuarios. Lo mismo se puede hacer con el audio.

En el taller de hoy haremos una pequeña aplicación para crear una galería de fotos instantáneas en web/blog. Los usuarios que lo deseen pueden hacerse la foto con su propia webcam y ésta quedará alojada en la galería. Simple pero llamativo.

La aplicación constará de dos partes:

  • Zona de capturas: una aplicación desarrollada en Flex que permitirá a los usuarios hacerse fotos sin más necesidad que tener una webcam.
  • Galería: una sencilla página html donde se listan todas las fotos que se han hecho los usuarios.

Capturando imágenes

Aunque pueda parecer algo muy complicado veremos a continuación que la facilidad de conectar con la webcam en Flex es impresionante.

Nuestra aplicación consta de dos únicos componentes, una imagen y un botón. La imagen nos aportará simplemente algo de estilo y el botón lo utilizaremos de disparador de nuestra cámara de fotos online.

Hay tres tareas bien diferenciadas:

  • Conectar con la webcam.
  • Capturar la foto.
  • Enviarla a nuestro servidor.

Conectar con la webcam

Con este sencillo código estaremos visualizando en nuestra aplicación la webcam que el usuario tenga conectada a su equipo.

private function insertWebcamVideo():void{
	var videoHolder:UIComponent = new UIComponent();
	if(Camera.names.length>0){
	   camera = Camera.getCamera();
	   if(camera==null || camera.width==-1 || camera.height==-1 || camera.fps==-1){
	   		Alert.show("Lo sentimos, no tienes cámara", "Error", 4, null, null, iconoAlerta);
	   		captura.enabled=false;
	   		camera=null;
	   }else{
		   camera.addEventListener(StatusEvent.STATUS, cerrar);
		   video = new Video(camera.width, camera.height);
		   video.attachCamera(camera);
		   videoHolder.addChild(video);
		   videoHolder.width=video.width;
		   videoHolder.height=video.height;
		   videoHolder.visible=true;
		   videoHolder.y=0;
		   caja.addChildAt(videoHolder, 0);
		   caja.removeChild(fotillo);
	   }
	}else{
   		Alert.show("Lo sentimos, no tienes cámara", "Error", 4, null, null, iconoAlerta);
   		captura.enabled=false;
	}
	//Security.showSettings(SecurityPanel.CAMERA);
}

Tan fácil como comprobar primero si tiene webcam (sino, obviamente, no puede hacerse fotos 😛 ) y posteriormente añadirla a un componente de vídeo que habremos incorporado a un UIComponent para mostrarlo en la aplicación. En este momento ya tenemos la cámara del usuario en vivo en la aplicación.

Capturar la foto

Teniendo el flujo de vídeo en la aplicación, queremos que cuando el usuario presione el botón “Capturar” se le haga la foto.

private function getSnapshot():void{
	var snapshot:BitmapData = new BitmapData(video.width, video.height, true);
	var m : Matrix = new Matrix();
	snapshot.draw(video, m);
	var jpegEnc:JPGEncoder=new JPGEncoder(75);
	var jpegDat:ByteArray = jpegEnc.encode(snapshot);
	var img_src:String = base64Encode(jpegDat);

	if(img_src.length>1600){
		//imagen correctamente capturada
	}else{
		Alert.show("La imagen capturada parece estar vacía", "Error", 4, null, null, iconoAlerta);
	}
}

Con este otro código conseguimos este efecto. Se obtiene una captura bit a bit del objeto de vídeo y se comprime en JPEG para enviarla al servidor. ¡Ya tenemos la foto hecha!

Enviar la foto

Utilizaremos un HTTPService para enviar por POST la foto que hemos realizado y que guardaremos en una base de datos. Añadimos a la función anterior el código para enviar la foto.

private function getSnapshot():void{
	var snapshot:BitmapData = new BitmapData(video.width, video.height, true);
	var m : Matrix = new Matrix();
	snapshot.draw(video, m);
	var jpegEnc:JPGEncoder=new JPGEncoder(75);
	var jpegDat:ByteArray = jpegEnc.encode(snapshot);
	var img_src:String = base64Encode(jpegDat);

	if(img_src.length>1600){
		var temp:Object=new Object();
		temp.imagen=img_src;
		httpService.send(temp);
		cargandoWindow = ventanaEspera(PopUpManager.createPopUp(this as DisplayObject, ventanaEspera, true));
	}else{
		Alert.show("La imagen capturada parece estar vacía", "Error", 4, null, null, iconoAlerta);
	}
}

<mx:httpservice id="httpService" showbusycursor="false" useproxy="false" method="POST" resultformat="text" url="upload.php" result="onResult()"
fault="onHTTPFault(event)" />

Ya está. El script upload.php de tu servidor recibirá por POST la variable “imagen” con el contenido de tu foto. Sólo habrá que guardarla en un archivo y habrás terminado la parta más ¿complicada? del proyecto.

if($_POST['imagen'] & strlen($_POST['imagen'])!=0 & strlen($_POST['imagen'])>1600){
        $bmd=base64_decode($_POST['imagen']);
        $im = fopen("fotos/foto.jpg",'w');
        fwrite($im,$bmd);
        fclose($im);
}

Antes de guardar la imagen en disco podrías añadir un registro a una base de datos que te permita generar después la galería. Esa parte queda a tu elección.

Generando la galería

Esta es la parte fácil, simplemente creas un script PHP (o en el lenguaje que prefieras) que liste las fotos que has ido guardando en la base de datos paginando como creas oportuno. Creo que sobran más comentarios para algo tan fácil.

Conclusiones

Hoy hemos visto cómo de una manera extremadamente rápida y sencilla se puede conectar con la webcam (y el micrófono) de los usuarios. Sólo hemos visto como hacer una fotografía instantánea de lo que se está viendo a través de la cámara, pero el sistema abre un inmenso mundo de posibilidades.

Descárgate aquí el código del proyecto.

Tour murciano, Gredas de Bolnuevo, la Manga y Cabo de Palos

Este fin de semana necesitaba unos días de descanso en toda regla, sin agobios ni prisas, así que partimos el sábado por la mañana hacia la bahía de Mazarrón.

Gredas de Bolnuevo

Iba con muchísimas ganas de ver esto, muy cerquita de Mazarrón, pero en realidad me lleve una gran decepción.

Gredas de Bolnuevo

Había visto en varios sitios de Internet fotos de esta zona y me había llamado la atención hasta tal punto de convertirse en un destino preferente para un fin de semana, sin embargo, al llegar allí todo cambió. Quizás me había hecho demasiadas ilusiones y había idealizado el lugar, pero el caso es que fue tan decepcionante que cuando llegamos al lugar exacto supusimos que no era aquello, no podía ser eso aquello tan impresionante que habíamos visto en fotos. Pero lo era.

Gredas de Bolnuevo

Gredas de BolnuevoGredas de BolnuevoGredas de Bolnuevo

La verdad es que una vez estás allí y comienzas a esconderte entre las formas rocosas cambias algo la idea inicial. Vale que es un trozo pequeño, pero las figuras son realmente impresionantes y extrañas.

Gredas de Bolnuevo

Gredas de BolnuevoGredas de BolnuevoGredas de Bolnuevo

Me hace gracia pensar que en el propio cartel explicativo rezaba: “Ciudad Encantada de Bolnuevo“. Entiendo que todos quieran aprovechar los recursos naturales que tienen pero…

En fin, que algo es algo y menos es nada. No creo que valga la pena un viaje a propósito para verlas pero si te encuentras por la zona puede que lleguen a gustarte.

Gredas de Bolnuevo

Gredas de BolnuevoGredas de Bolnuevo

Algo de explicación técnica sacada del propio cartel.

También conocido como Ciudad Encantada de Bolnuevo, está formada por mangas arenosas o gredas de color amarillento, areniscas y, en menor medida, por finos lentejones microconglomerados. Las areniscas presentan cantos carbonatados de color gris azulado y diferente macrofauna de moluscos y crustaceos. Las Gredas, según los estudios, han aportado abundantes microfósiles que datan del Zancliense (Plioceno inferior; unos 4millones de años). Estas rocas presentan diferentes grados de cohesion, han sufrido un proceso de erosión diferencial, en el que el agua y el viento (este último es el responsable de la erosión alveolar en “nido de abejas” que se observa en algunos estratos de areniscas) han sido fundamentales de dicho proceso. Todo ello ha dado lugar a caprichosas formas micóticas de gran belleza.

Comida en La Manga del Mar Menor

Después de la gran decepción de las Gredas se acercaba la hora de comer, así que decidimos acercarnos a La Manga del Mar Menor, a un restaurante llamado La Escuela de Pìeter (Urbanización Veneziola, Tel. 968 43 70 59). Lo mejor, sin duda alguna, el propio restaurante y su situación, en la playa, en el Mar Menor, mirando al sol. Para que os hagáis una idea, en una mesa de al lado había unos chicos que habían llegado por mar en unas motos acuáticas. Hay gente que se acerca en barco.

La Escuela de Pieter, La MangaLa Escuela de Pieter, La Manga

Fijaos en la situación de nuestra mesa. Sobran más palabras.

La Escuela de Pieter, La Manga

Dicho esto llegamos a la parte interesante. Tomamos trimarino (gambas, chanquetes y almejas) y chopitos de primeros y arroz con marisco de segundo. La comida, en general, bien y punto, no es de la mejor pero está bien. El arroz en su punto, sobraba el pollo 😛 . El trimarino resultó ser lo mejor, estaba muy buena la mezcla. Los chopitos, demasiado hechos, estaban excesivamente duros y algo insípidos para mi gusto.

Trimarino, La Escuela de PieterChopitos, La Escuela de Pieter

Arroz de Marisco, La Escuela de Pieter

Cabo de Palos

Después de comer y con el estómago a punto de reventar nos acercamos al Cabo de Palos a dar un paseo y tomar algo. Impresionante en esta época del año.

Cabo de Palos

Cabo de Palos

Cabo de Palos

Cabo de PalosCabo de PalosCabo de Palos

Comer en Murcia

El domingo, y antes de regresar a Valencia, nos acercamos a uno de nuestros restaurantes preferidos de Murcia, El Cañal los Almillas (Camino Viejo Gilandario, 9, Aljúcer, Tlf: 968 251 405), situado en un entorno privilegiado en mitad de la huerta murciana.

El Cañal, Los Alamillos

Tomamos almejas a la marinera y ensalada de la casa seguido de carne a la piedra, especialidad de la Casa. Todo bien pero la carne de buey, escelente.

Almejas a la marinera, El Cañal, MurciaEnsalada de la casa

img_4447.JPGimg_4451.JPG

De postre, tiramisú y tarta de queso. Estaban buenos, pero lo realmente llamativo eran los precios de los postres, 2,75 euros, hoy en día, es muy barato.

img_4453.JPG

Primeros pasos con Flash Media Server (2), autentificando usuarios del chat

Hace unos días veíamos como crear un sencillo chat con FMS.

Hoy, a petición popular, vamos a añadir la primera mejora a nuestra aplicación. Por defecto habíamos diseñado un chat público, cualquiera podía conectarse. Sin embargo, puede que deseemos que sólo nuestros usuarios registrados puedan utilizarlo. Necesitamos entonces que nuestros clientes se puedan autentificar contra nuestra base de datos pero no podemos dejar esa responsabilidad en manos de la aplicación cliente, cualquiera podría hacer otra que se conecte a nuestro servidor sin requerir autentificación.

FMS no puede conectarse con ningún tipo de bases de datos, no es su función, aunque cada vez hay más gente solicitando esta funcionalidad y se espera que en la próxima versión (FMS4) haya alguna novedad al respecto. Sea como fuera, de momento no hay métodos nativos para acceder a bases de datos así que sólo se puede recurrir a lo que un día fue Flash Remoting y hoy son los servicios RPC bajo AMF, el método estándar de acceso a datos desde aplicaciones Flash (con el permiso de los webservices SOAP). Con el tiempo fueron apareciendo versiones en los distintos lenguajes para utilizar el protocolo AMF fuera del amparo de Macromedia (ahora Adobe), pero sin duda uno de los pioneros fue amfphp, el que nos permite comunicar aplicaciones Flash con el servidor a través de PHP.

AMF es un formato para serialización de datos e invocación de métodos remotos y es independiente al lenguaje con el que trabaja el servidor, simplemente debe cumplir las especificaciones. FMS, como no podía ser de otra forma, puede comunicarse con nuestro servidor gracias a este protocolo AMF y esto es precisamente lo que vamos a utilizar para autentificar a nuestros usuarios:

dibujo1.jpg

El proceso es mucho más sencillo de lo que parece.

Comenzaremos por descargar amfphp desde la web oficial.  Lo descomprimes y subes la carpeta “amfphp” a tu servidor en la ruta que desees. Ya tienes lo que es el cerebro del sistema listo, para comprobarlo prueba la URL:

http://tuservidor/amfphp/gateway.php

Si todo va bien, prueba ahora el navegador de servicios, herramienta imprescindible para probar tus métodos remotos:

http://tuservidor/amfphp/browser/

Si no has visto ningún error es que todo va bien. Veamos ahora como crear tu servicio de autentificación.

Dentro de la carpeta amfphp que has subido a tu servidor encontrarás la carpeta services. Crea dentro de ella un nuevo directorio con el nombre de tu aplicación, por ejemplo chat. Creamos ahora dentro de esa carpeta las clases y métodos que se necesiten para crear el servicio de autentificación. Por ejemplo, en mi caso creo Chat.php:

<?
class Chat{
    var $conn;    function Chat(){
      $this->conn=mysql_connect("host", "usuario", "clave");
      mysql_select_db('db', $this->conn);
    }
function login($nick, $pass){
        $rs=mysql_query("select * from usuarios where nick='$nick' AND pass='$pass'");
        if(mysql_num_rows($rs)>0)
          return 1;
        else
          return 0;
    }
}
?>

Sencillo ¿no?. Nuestra clase tiene un método login que nos dice si la pareja nick/clave existe en nuestra base de datos. Obviamente esto es sólo un ejemplo, en tu aplicación haz la clase con todos los métodos y la lógica que necesites.

Si ahora vas de nuevo al Service Browser verás que te aparece la nueva aplicación chat con la clase que has creado. Si accedes a ella puedes probar el método login pasándole los parámetros necesarios. Más sencillo imposible.

Ya tenemos la lógica de autentificación lista. ¿Cómo le decimos ahora a FMS que la utilice? Modificamos el archivo main.asc que habíamos hecho en el capítulo anterior para que antes de aceptar la conexión de un usuario la autentifique.

application.onConnect = function(client, nick, clave, sala){
    var valido=1;
    for( i in this.userList){
        if(String(this.userList[i].nick).toLowerCase()==String(nick).toLowerCase()){
            valido=0;
            break;
        }
    }
    if(valido==1){
        var myServer = NetServices.createGatewayConnection("http://tudominio/amfphp/gateway.php");
        var servicio = myServer.getService("chat.Chat", this);
        var callserver=servicio.login(email, clave);

        this.login_Result=function(result){
            //trace("RESULTADO LOGIN"+result);
            if(result>0){
                client.uid = this.uid;
                client.nick = nick;
                client.sala = sala;
                this.acceptConnection(client);
                this.userList[client.uid] = client;
                this.users_so.setProperty(client.uid, client);
                var msg = "*** Entra " + client.nick + " ***";
                this.chat_so.send("onMsgSend", msg);
                client.call("onUserid", null, client.uid, client.nick);
                this.uid++;
            }else{
                var err = new Object();
                err.message = "Email o contraseña incorrectos";
                application.rejectConnection(client, err);
            }
        }
    }else{
        var err = new Object();
        err.message = "Ya hay un usuario con ese nick";
        trace(err.message);
        application.rejectConnection(client, err);
    }
}

Es tan simple como añadir la comprobación del usuario y clave de nuestro cliente. Indicamos la url de nuestro gateway (amfphp) y llamamos al método login con los datos correspondientes. Lo más importante es la forma en que obtenemos los datos que devuelve el metodo. La llamada es asíncrona, no se paraliza la actividad esperando por un resultado sino que se continua la actividad esperando a recibir la respuesta. Para eso se supone que debe haber definida una función nombremetodoremoto_Result, en nuestro caso login_Result ya que login es el método remoto al que llamamos. Cuando se llame a esta función sabremos si el usuario existe en nuestra base de datos, con lo que aceptamos su conexión al chat, o no existe y la rechazamos.

Como habéis visto, es muy sencillo llamar a métodos remotos desde FMS de manera que aumenten las posibilidades de tu aplicación ya que puedes hacer uso de bases de datos y de sistemas avanzados y siempre de manera muy simple.

Yo te he dado las pistas de cómo hacerlo, el resto queda a tu imaginación.