Bluetooth madness. Portal
Posted in Developing, mobile on November 18th, 2007Qué semana más rarita ha salido en esta parte del mundo mundial. Sólo un par de detalles para poner en situación al incauto lector:
Portal
Esta semana me he lanzao a la piscina y he comprado The Orange Box. Tened cuidad si os da la ventolera de ir a un centro-mail, mail-center, mail-foobar o como leches se llame ahora el garito. Un dependiente normal de esas cadenas no va a saber qué venderos si pedís “la caja naranja”, no sabe si hay que pagar o no para jugar en Steam (no, no hay que pagar), … en fin, no conoce el género que tiene y probablemente le importe un huevo.
Mi primer contacto con Portal fue a través de Yahtzee Croshaw, en su columna de video-crítica-animada semanal en The Escapist Magazine: conocida por el simpático nombre de Zero Punctuation [1] Como cabe imaginar a tenor del nombre, el tipo no se anda por las ramas: masacra cada juego que pilla. Llevo unos meses bastante mosqueado con la critica de videojuego en general y probablemente será carne de artículo más pronto que tarde. Hay que ver sus videos siempre hasta el final y no perderse la delirante sección de disculpas que tiene al final, donde pueden encontrarse maravillas como perdi mi corazón por un soldado del espacio.
No creo que tenga que decir que Portal es fabuloso. O quizá sí: Portal es fabuloso. ¡Larga vida al companion cube!
Bluetooth
Y ahora hablemos un poco de trabajo ^_^. A causa de un problemilla con el servidor de cauterized.net [2] No he podido destilar mis penurias profesionales por este canal. Lamentablemente para todos, ahora vuelve a ser posible darlos la lata con todo esto ¡yipes! La versión ultra-resumida de todo esto es que me ha tocado montar un prototipo capaz de comunicar un teléfono móvil con un PC a través de bluetooth y luego, enganchar el PC a internet. De algún modo la idea es darle a un usuario la capacidad de conectar servicios web a su teléfono a través del PC.
Por supuesto, todo el tinglado tiene que funcionar desde el terminal más churrero de Nokia (ie: Series 40) hasta en sus zapatófonos más rutilantes. Mejor no hablar de otras compañías porque los Motorolas que yo conozco dan por saco desde que los enciendes hasta que los tiras a una pecera llena de calimocho, sólo para desembalar tu viejo y querido 8310; podría mencionar los Sony-Ericsson, unas peacho-máquinas que me han sorprendido mucho.
Y debéis entender que no estoy hablando como usuario, no me quejo del color de los botones, ni de los efectos de sonido, ni de las malditas animaciones de transición entre elementos del menú: dejemos que eso lo hagan los lUsers. No. Únicamente hablo de la maldita programación en Java, sí ya sabéis:
write once debug everywhere! El mismo instalable no funciona igual en dos dispositivos. Y no estoy hablando de nada en particular. Un condenado juego 2D basado en sprites totalmente estandar en su programación Java NO FUNCIONA en un Motorola. Peta. Pasa. Se despelota en tu jeta. Y eso, jode. Por supuesto si la implementación de java en lo tocante a pixel-blitting difiere mejor ni imaginar qué pasará en zonas más dependientes aún del hardware (pongamos la cámara[3]) ó el Bluetooth[4]
Pero no todo son quejas por los teléfonos móviles, no ¡También tengo para los PC! De entrada a nadie en mi oficina se le ocurrió la maravillosa idea de desarrollar todo este tinglado en Linux. Eso redujo en algo mis penurias. Sin embargo no he dejado de sorprenderme por lo complicado que es trabajar con Bluetooth sobre un PC. Aunque no pude dedicarle demasiado tiempo, no he encontrado un modo de acceder desde ningún lenguaje a capa alguna de bluetooth. C++ ó C# ni siquiera por VB.
Así que tuve que buscar una vueltilla al asunto, para empezar, tenía que crear un servicio bluetooth al que el teléfono pudiese conectarse. Eso es posible hacerlo empleando un puerto serie de tipo servidor en el PC. Incluso en este punto hay dificultades ya que el driver que viene de serie con XP-SP2 es particular, digamos es especial. En la oficina tuvimos que reinstalar el bluetooth unas 15 veces hasta dar con los drivers de Belkin, probablemente heredados de un Win-2K o cualquier cosa de ese estilo. Mucho más completos y con un comportamiento mejor.
El puerto serie creado espera dos conexiones: por un lado se conecta la aplicacion en PC y por el otro el teléfono. Puesto que todo el resto del código lo tengo desarrollado en Java no me pareció una buena idea emplear otro lenguaje de programación y seguí por el mismo camino. Sin embargo Java y los puertos serie tienen una relación delicada, con un poco de suerte encontré RXTX. Biblioteca que empleo para conectar a puertos serie con bastante buen resultado.
Después vienen toda una catarata de pegas e inconvenientes. Los dispositivos deben estar emparejados y el puerto serie creado en el PC es un servicio. Lo que implica que puede desactivarse, anularse, borrarse, etc. Por si esto fuera poco además no depende de la aplicación que debe buscar cada vez los números de puerto. Una vez está en marcha es bonito ver la conexión. No me imagino a un usuario dando todos los minúsculos y minuciosos pasos que hay que dar para llegar a conectar ambos dispositivos.
Al final todo el montaje se apoya en un protocolo muy sencillo por paquetes de tamaño fijo. Donde cada paquete va armado con un checksum y varios números de serie. Esta capa de comunicaciones es la misma que empleo durante las etapas multiplayer del juego. Así que hurra por el desacoplamiento. Es, en realidad, la segunda vez que tengo que programar una pila completa de comunicaciones. Siempre es bonito y muchas veces complicado. Se trata de una aplicación naturalmente paralela. Aún es más: tiene que ser paralela o los bloqueos de esperas la pondrán de rodillas.
En lo tocante a multi-thread los teléfonos se comportan razonablemente bien siempre que uno no se dedique a crear y destruir constantemente hilos. Probablemente ese es el gran problema del sonido, necesitan un hilo propio y la implementación natural de “crear bajo demanda” resulta cara en memoria, en fragmentación y es terriblemente lenta.
En fin, espero que las webs de los proyectos estén arriba pronto para poder engancharlas desde estas páginas y que podais reiros conmigo de todo el montaje. Buena semana.
–
1. Os dejo el link a su videocrítica de The Orange Box. Tiene ya bastantes y todas merecen la pena. Yo tengo que verlas tres o cuatro veces para terminar de entender qué dice en muchas ocasiones. Merece la pena, porque es de los pocos críticos que conoce que no se toma demasiado en serio el negocio ^_^
2. Gracias por repararlo, os echábamos de menos ![]()
3. Algunos teléfonos tienen cámara pero no es controlable por Java, especialmente en los Serie 40, otros fingen que tienes control y luego no te devuelven imagen alguna, los foros de los fabricantes están llenos de amargas críticas al respecto.
4. Rechinar de dientes cada vez que pronuncio esa palabreja.