viernes, 31 de mayo de 2013

Introducción a los servicios web

La primera vez que un programador se enfrenta a la tarea de tener que realizar un servicio web (en adelante WS, Web Service) se suele encontrar un poco perdido. Normalmente se recurre a internet o a algún libro especializado. El problema es que son tantas las tecnologías con las que se puede desarrollar un WS, y son tantos los tipos de WS que existen, protocolos y demás, que a no ser que alguien ayude pueden pasar horas hasta que el programador obtenga el resultado deseado.

En mi caso he desarrollado muchos WS en distintos lenguajes como java, python y php; y distintas tecnologías, como XMLRPC, SOAP, MAVEN, AXIS, AXIS2… y os comento que me he encontrado con muchos problemas, siendo algunos de ellos de solución muy compleja.

Desde hace un tiempo sigo mi propia metodología para realizar WS. En realidad lo que os voy a contar no es de mi propia cosecha, sino que fue una gran aportación de un amigo (JT). Evidentemente yo hice mis cambios y lo adapté a mi forma de trabajar, pero sirvan estos posts como agradecimiento.

Durante cuatro posts, este inclusive, voy a contar lo que es un WS. No voy a hacer como muchos libros que profundizan tanto en los detalles que no se sabe por donde cogerlos, sino que voy a ir al grano. La estructura a seguir será la siguiente:

  • En este primer post, daré una explicación light de lo que es un WS y comentaré el ejemplo que realizaré.
  • En el segundo post programaré una aplicación “productor”.
  • El tercer post será un ejemplo de manejo de la interfaz de eclipse para obtener datos del “productor”.
  • El cuarto y último post lo usaré para crear un “cliente” y una aplicación que use dicho “cliente”.

Así pues, que comience el espectáculo:

¿Qué es un Web Service?

Para responder a esta pregunta, me remito a la descripción dada en la Wikipedia: Un servicio web (en inglés, Web services) es una tecnología que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet. La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la arquitectura y reglamentación de los servicios Web. Para mejorar la interoperabilidad entre distintas implementaciones de servicios Web se ha creado el organismo WS-I, encargado de desarrollar diversos perfiles para definir de manera más exhaustiva estos estándares. Es una máquina que atiende las peticiones de los clientes web y les envía los recursos solicitados.

¿Y esto que significa?

Imaginemos la siguiente situación: Tenemos una aplicación (llamada A) que almacena datos de películas. Dicha aplicación sólo está accesible vía web, y queremos que otra aplicación distinta (llamémosla B) muestre los datos de la aplicación A. En este ejemplo la aplicación A se llama productor, ya que produce los datos, y la aplicación B se llama consumidor o cliente.

Para que la aplicación A pueda compartir los datos, es necesario que publique un archivo de descripción del servicio. Dicho archivo debe estar bien formado y contiene una descripción de los métodos que acepta el WS, y de los datos que utiliza tanto si son de llamada como de retorno. Además si dichos datos son clases propias de la aplicación, también deben estar descritas en el archivo. A dicho archivo se le denomina WSDL (Web Services Description Language). En realidad esto es una verdad a medias, puesto que los tipos de datos no son necesarios que estén. Lo que pasa es que si el WSDL está completo el cliente se puede generar de forma automática, ya sea con maven, con eclipse o con cualquier otra aplicación que lo permita. Si no lo estuviera es requisito indispensable que el programador que va a realizar el cliente conozca a la perfección los tipos de datos, etc.

Como podéis imaginar realizar este archivo a mano resulta una tarea tediosa, ya que cualquier error en el mismo hace que no funcione, y para colmo estos errores son difíciles de localizar. Ahora pensad, si hacer un simple xsd es complicado, imaginad un super xsd, es decir, un WSDL.

Sigamos con la teoría. Tenemos una aplicación productora que además de producir datos, publica un archivo que describe que operaciones se pueden realizar con ella. Pues lo que nos quedaría sería leer dicho archivo, y generar una aplicación que sea capaz de usar los métodos y los datos definidos en el WSDL. La aplicación productora a su vez publica una url a la que conectaremos el cliente, y así las dos aplicaciones se comunicarán y pasarán información entre ellas.


Diagrama de funcionamiento de un WS

En resumen:

El productor publica un archivo WSDL que describe como interactuar con él, y además dispone de una url para poder realizar dicha interacción.

El cliente interactúa con el productor y muestra los datos en su aplicación. El WSDL sirve para generar las clases y llamadas a métodos que usará el cliente.

En el próximo post realizaremos una aplicación que será el productor del WS.

Saludos.

sábado, 25 de mayo de 2013

Red no identificada tras hibernar o suspender windows 7

Estaba escribiendo un post sobre servicios webs que voy a publicar en breve, y me encuentro con un problemilla que tengo desde que instalé la última versión de Panda Antivirus 2013.

Mi problema consiste en que después de reanudar la actividad con el ordenador, tras haber hibernado o suspendido el equipo, pierdo la conectividad de red.


Red no identificada.

Si trato de realizar un ping obtengo el mensaje “PING: error en la transmisión. Error general.”. Si miro la wifi, aunque se conecta a la red me pone “Red no identificada” y al hacer un ipconfig me asigna la ip 169.254.70.112.


Error al hacer ping

Tras muchas pruebas vi por casualidad que en la configuración del adaptador wifi tengo una entrada de filtro llamada “PANDA NDIS IM Filter v 1.6.0.44”. Desmarcando dicha entrada la red vuelve a funcionar correctamente.


Configuración de dispositivo de red.

Por supuesto tras reiniciar el equipo el problema se soluciona y vuelve a conectar bien, pero esto es una lata.

En los foros del servicio técnico de panda he encontrado una entrada en la que un usuario comenta el mismo problema, pero para la edición 2012. He probado a instalarme el hot fix de esa versión, pero el instalador no me deja por no ser un hot fix de la edición 2013.

Acabo de enviar un email al servicio técnico, por si hubiera un hot fix disponible para esta versión. Mientras creo interesante publicar esta solución aquí, aunque conociendo al equipo técnico de panda no creo que tarden en darme una respuesta satisfactoria, y es que otro problemilla que tuve hace unos meses me lo solucionaron casi al instante.

Saludos.

Actualización 26/5/13

Después de varias horas de pruebas me he dado cuenta de que el filtro dne lightweight filter también me está dando problemas con la conexión. Además parece ser incompatible con el de Panda, puesto que si desactivo este filtro y no el de Panda, la conexión se ha recuperado varias veces (aunque no todas).

domingo, 19 de mayo de 2013

Giga tv hd620t, convierte tu televisión en una smart tv, si te atreves

Ayer se me estropeó el tdt, y como sin televisión no se puede vivir, fui a comprar uno nuevo. En Carrefour encontré una interesante opción, un Giga tv hd 620t. Después de leer las características me entero que este aparato es un dispositivo android 4.0.3, con entrada de televisión y descodificador tdt, wifi, varios puertos usb, hdmi, etc. Hablo con un dependiente y me comenta que se vende mucho, que a la gente no les está dando ningún problema. Así que convencido me lo llevo a casa.

La primera sorpresa que me llevo es que para usarlo es necesario arrancar el miniordenador. Y es que pequé de novato. Yo creía que funcionaría como tdt por hardware y que para usar el smart tv es cuando arrancaría, pero no. Pequé de novato con este tipo de dispositivos. Pero no importa, al fin y al cabo en realidad no es un problema, ya que el arranque es menor a un minuto.

Una vez arrancado lo que se muestra es una Shell de android, con aplicaciones. No se muestra la típica pantalla de android 4, sino una adaptada por el fabricante. El menú de configuración del dispositivo es accesible mediante una aplicación de wizards o mediante la aplicación de configuración estándar de android.

El primer problema con el que me encuentro es que el dispositivo trae un mando, por llamarlo de alguna forma, al cual le han puesto demasiados botones y no es para nada intuitivo. El simple hecho de navegar entre pantallas se convierte en una tarea desesperante, sin saber que botón es el correcto. Además las “instrucciones” que trae es una típica hoja para conectar cables, explicando las conexiones, y poco más.


Shell de entrada del dispositivo.

Después de maldecir al equipo de diseño de esta empresa, lo configuro correctamente, entro en la aplicación de televisión, realizo una búsqueda de canales, y para mi sorpresa, la televisión se ve pixelada, con una calidad que ni de coña es hd, con ligeros saltos y una imagen de menú android fantasma que siempre se queda detrás. ¿Pero qué mierda es esto?

Pienso que el problema está en que la señal de tdt es interpretada por la mierda aplicación de tv que trae. No hay problema, decido entrar en la tienda android a ver si tienen alguna aplicación tdt que sea mejor… pero me llevo otra sorpresa, no hay tienda android. El dispositivo viene capado, o la aplicación no viene instalada...

Pero vamos a ver, ¿este dispositivo no se supone que es para ver la televisión? ¿y por qué la principal característica que tenía que hacer la hace mal?

A estas alturas ya estoy bastante desesperado. He debido perder 4 puntos de carisma y 6 de autoestima. Envío un email al servicio técnico del aparatito y decido acostarme y volver a al ataque al día siguiente.


Mando por detrás. Teclado pequeñito.

Mando por delante. Muy intuitivo.

Tras horas de sueño me levanto, enciendo la tele, pulso el botón “tv/radio” del mando para ir más rápido, pero este botón no hace nada. Miro a ver si hay algún otro acceso directo a la tele en el mando, pero no, eso sería demasiado fácil. Busco el icono de la aplicación, entro en la tele y busco opciones de configuración. A continuación descubro otro problema de smart tv, en algunos canales el sonido no va sincronizado con las bocas. Me vienen recuerdos de mi época de estudiante en la facultad, cuando algún colega me prestaba una película mal ripeada en un cd. Que bonitos recuerdos, me hacen sentir más joven.

Se me ocurre que si en vez de usar la salida hdmi uso la de componentes, a lo mejor la televisión se ve como debería ser. Después de esto la tele se ve igual que antes, con los mismos problemas, pero la resolución del android ya no me permite usar la 1080, eso es sólo para machos, eso es sólo de salidas hdmi.

Bueno, no pasa nada, voy a hacer un zapping por los canales. Pulso subir canal, no hace nada. Vuelvo a pulsar y espero, no hace nada. A los 3 ó 4 segundos vuelvo a pulsar, entonces sube tres canales de golpe. Ahhh, vale, que tiene un ligero retraso. Decido ordenar la lista de canales, algo super intuitivo, sobretodo porque las instrucciones para hacerlo salen cortadas en pantalla. Menos mal que en la web han puesto un pdf sobre esto. Me desmoraliza un poco tener que buscar en internet para hacer algo que he sabido hacer desde que era pequeño, pero la edad no perdona. Debí suponer que la tecla “0” sirve para hacer aparecer un menú emergente que permite ordenar. Torpe que me estoy volviendo.

Vuelvo al salón y me pongo a ello. Elijo un canal, me siento a verlo. Poco a poco me voy cabreando. La imagen fantasma sigue ahí, los cortes siguen, y mi cabreo aumenta. Creo que no es un buen dispositivo, esto no está bien conseguido. Ya sé que podría intentar meter más aplicaciones vía usb u otras opciones, pero si para ver la tele no sirve, ¿para qué lo quiero?.


Aplicaciones que trae el dispositivo.

Hoy es domingo, el lunes lo pondré en su caja y lo descambiaré, compraré un simple tdt grabador, y esperaré unos años a ver si la tecnología avanza un poco.

Actualización 01

Buscando en google he encontrado este post en el que comentan que el sonido se arregla con la actualización, y que se crea el acceso a la tienda. Efectivamente después de actualizar el firmware el problema de sincronismo de audio ya no ocurre, y la imagen fantasma ha desaparecido.

Aún así el tdt sigue sin ser hd,viéndose muy pixelado y sufriendo algunas ralentizaciones, ¿quizás otra actualización lo arregle?. Acabo de enviar otro email al servicio técnico. A ver si se ponen las pilas y corrigen los problemas. Mientras voy a buscar alguna otra aplicación tdt en el market, a ver que tal. Como curiosidad el market no me reconoce el dispositivo como android hd, y muchas de las aplicaciones etiquetadas hd que me aparecen como primer resultado en el Tablet, no aparecen en este dispositivo.

Actualización 02

Por fin he descubierto lo que pasa, o por lo menos tengo una teoría. He cogido un viejo tdt que no reproduce hd, y la imagen se ve exactamente igual de pixelada que con este tdt. Mi teoría es que el hd620 es capaz de interpretar la señal hd que le llega, pero a la hora de reproducirla, en vez de enviarla en hd, la envía como si no fuera hd. Yo desde hace un par de años tenía el tdt hd y me había acostumbrado a su calidad de imagen, y este tdt aunque ponga hd no envía la señal hd (o la aplicación android no la envía), sino que la transforma a señal normal y corriente :(

Otras pruebas que he hecho a sido intentar reproducir un .divx, un .avi, y un .mkv (h.264). En los tres casos el sistema se ha bloqueado sin empezar el vídeo y ha mostrado el mensaje de forzar el cierre de la aplicación.

La verdad es que todo esto me decepciona bastante. Estoy seguro de que el dispositivo es capaz de reproducirlos, pero no sé si es por actualización o porque faltan codecs, o que sé yo.

Conclusión

Yo buscaba un tdt hd grabador, algo que enchufara y funcionara, y este dispositivo no cumple. Este dispositivo en mi opinión no está enfocado a usuarios domésticos, sino a geeks de la tecnología. Como experimento está bien, pero si en la caja pone "TDT FULL HD 1080p", lo que yo como usuario espero es poder ver con calidad hd la imagen; si en la caja pone que reproduce MKV (h.264) yo lo que espero es poder ver vídeos con ese códec. Si la caja "teclado querty" yo como usuario me imagino que el teclado que trae va a funcionar optimizado para el dispositivo, que no es el caso. He pasado más de un día probando y hay cosas que aún no funcionan, y las que funcionan no dan el rendimiento adecuado.

De todas formas aunque yo lo vaya a descambiar, me gusta mucho el enfoque que Sebastian Rubio le ha dado en su blog. Para trastear sí parece un cacharro divertido. Si uno tiene tiempo está bien tener un android en la tele, conectarte por ssh y jugar con él.

Para terminar, si quieres ver la tele con calidad pasa de este dispositivo, si quieres cacharrear cómpralo, pero que sepas que no es tan bonito como lo ponen en la caja.

Saludos.

Última actualización 19/5/13

El servicio técnico me ha respondido a primera hora de la mañana, con indicaciones sobre como actualizar el aparato. Aún así no se han arreglado los problemas y me han indicado que ese comportamiento no era normal y que lo llevase al punto de venta. Me quedo con la duda sobre el aparato, supongo que he tenido mala suerte.

Related Posts Plugin for WordPress, Blogger...