Aplicación de cronometraje online (III)

Una vez terminado el gestor (ver post I y post II) llegó el momento de desarrollar la parte pública de InfoCrono, donde los visitantes tendrían acceso a los resultados en tiempo real del rally. El reto en este caso no era la complejidad del portal, si no que tenía una sola noche para diseñarlo y programarlo.

Una vez terminado el gestor (ver post I y post II) llegó el momento de desarrollar la parte pública de InfoCrono, donde los visitantes tendrían acceso a los resultados en tiempo real del rally. El reto en este caso no era la complejidad del portal, si no que tenía una sola noche para diseñarlo y programarlo.

Situación: noche del viernes 30 de mayo y mañana del 1 de abril. Sobre la media noche llegué de ver el musical “Fiebre del Sábado Noche” para el que ya tenía las entradas hacía tiempo. El objetivo estaba claro, diseñar (con mis limitaciones de programador) un portal web simple y programarlo. Ahí que abrí el Fireworks, que en mi opinión es el mejor programa para el diseño de páginas webs, y me puse con la estructura de la página y el logo, que es siempre lo que más me cuesta. En una hora ya tenía hecho el diseño (se puede ver en la primera imagen o visitando la página web) y era momento de ponerse a programarlo.

Resultados cronometraje online en InfoCrono.comLa maquetación era muy sencilla en las tres páginas que conforman el portal actualmente: una página de inicio con un breve resumen y enlaces a la de tiempos, que es la importante, donde se muestran las tablas con los resultados del rally. Así pues en menos de dos horas ya estaba todo esto listo y era momento de comenzar con la parte de programación PHP para mostrar esos resultados.

El proceso fue bastante sencillo ya que varias de las funciones que necesitaba ya estaban implementadas en el gestor por lo que apenas era copiar & pegar. Lo más tedioso fue desarrollar un filtro para poder buscar por diferentes categorías, grupos, categorías y campeonatos. Los pasos eran casi siempre los mismos y la finalidad era siempre mostrar una tabla con la información obtenida de la base de datos.

Cuando me di cuenta eran las 6 de la mañana del sábado. La verdad es que cuando estás concentrado en un trabajo, que además te gusta, el tiempo pasa volando. El resultado fue satisfactorio ya que el programa funcionó y también la página web, que recibió 700 visitas el día del rally a pesar de no haber publicitado la página de InfoCrono.

Actualmente estoy ya trabajando en la versión 2.0 del gestor, que tendrá varios e interesantes cambios, como el formato en el que se guardan los tiempos, el diseño y alguna cosa más que está todavía en el aire. Cuando esté listo escribiré otro post con toda la información.

Aplicación de cronometraje online (II)

Continúo con la explicación de cómo desarrollé la aplicación de cronometraje online que comencé en un post anterior. Lo había dejado en el punto en el que ya tenía los tiempos en la base de datos obtenidos a través de una PDA conectada a una cronoprinter. Solucionado esto, ahora tengo que trabajar con el resto de la información referente al rallye.

Continúo con la explicación de cómo desarrollé la aplicación de cronometraje online que comencé en un post anterior. Lo había dejado en el punto en el que ya tenía los tiempos en la base de datos obtenidos a través de una PDA conectada a una cronoprinter. Solucionado esto, ahora tengo que trabajar con el resto de la información referente al rallye.

A pesar de que los tiempos es lo más importante, hay otras dos variables a considerar: las penalizaciones y los abandonos. Ambos parámetros influyen en la clasificación final del rallye. El primero consiste en un listado de entradas en las que se informa de cuantos segundos se penaliza a un participante, en qué tramo y la razón. Esto hace que el participante no esté en ninguna de las clasificaciones generales. Evidentemente un mismo participante puede ser sancionado varias veces, incluso en el mismo tramo. El abandono es un tema más sencillo, ya que se especifica sólo el participante, el tramo y la razón del abandono. A pesar de ser operaciones triviales, con la prisa con la que andaba se me olvidó dar la opción de que las penalizaciones y abandonos se pudiesen borrar, ya que a veces hay reclamaciones o información imprecisa y hay que desestimarlas. Por suerte no hubo ningún problema como estos que planteo. De todas formas, será una de las cosas a mejorar en la versión 2.0 que ya está a medio desarrollo.

Hay mucha más información que guardar en la base de datos:

  • Toda la información de cada participante: piloto, copiloto, equipo, coche, dorsal, clase, grupo, categoría, campeonato,…
  • Los tramos: nombre, distancia, hora de inicio,…
  • Una serie de tablas bastante semejantes para guardar los grupos, clases, categorías y campeonatos.
  • Los equipos participantes
  • Modelos de coches

Cada uno de los apartados tiene su propia sección en el gestor de contenidos para poder modificar los datos en cualquier momento. A final de cuentas, es bastante común que aparezca un participante a última hora, se cambien los dorsales o cualquier modificación que es necesaria hacer durante la carrera.

Esta parte es más sencilla que la gestión de tiempos ya que son solo formularios para la creación, modificación y eliminación de datos. Es un poco más lioso de lo que parece a priori, pero no desentraña gran complejidad.

En la próxima entrega, resumiré la larga noche del vienes 30 al sábado 1 en la que tuve que diseñar (a pesar de mi bajo nivel como diseñador) y programar la página web infocrono.com en la que se muestran en tiempo real todos los resultados de la prueba que se cronometra.

Aplicación de cronometraje online (I)

La semana pasada trabajé a contrarreloj en el poco tiempo que tengo libre para preparar una aplicación de cronometraje de pruebas automovilísticas online para mi compañero y socio en Grupo Vaya, Nacho García. Desde hace varios años es cronometrador oficial de carreras de coches, motos, quads y karts y tiene su propia web AsturCrono. Todo este proyecto hace que los participantes de una prueba cronometrada puedan conocer las clasificaciones en tiempo real en nuestra nueva web de InfoCrono.com.

La semana pasada trabajé a contrarreloj en el poco tiempo que tengo libre para preparar una aplicación de cronometraje de pruebas automovilísticas online para mi compañero y socio en Grupo Vaya, Nacho García. Desde hace varios años es cronometrador oficial de carreras de coches, motos, quads y karts y tiene su propia web AsturCrono. Todo este proyecto hace que los participantes de una prueba cronometrada puedan conocer las clasificaciones en tiempo real en nuestra nueva web de InfoCrono.com.

Con estas premisas y muy poco tiempo, tuve que desarrollar un gestor (PHP & MySQL) donde controlar toda la información de la carrera a partir de unos tiempos servidos por una cronoprinter, que es una impresora con un cronómetro y una célula fotoeléctrica que sirve tiempos cuando un vehículo pasa por el haz que proyecta. Ésta envía la información del tiempo del participante a través del interfaz RS-232 a una aplicación de escritorio que es la que se conecta a Internet, a una página de nuestro servidor en InfoCrono.com.

Cómo guardar los tiempos

En este momento yo tengo la información del tiempo de un participante que tengo que guardar en la base de datos y es el momento de hacer los cálculos que sitúen al piloto en la posición adecuada. La solución más obvia al cómo guardar los tiempo era utilizando el tipo de datos timestamp, pero se me planteaban dos pequeños problemas:

  • Lo lógico sería utilizar el tiempo timestamp que devuelve la función time() de PHP porque las operaciones de sumas y restas son más sencillas en este caso, ya que devuelve el número entero de segundos transcurridos desde el 1 de enero de 1970. El problema es que para una carrera se necesitan guardar también las milésimas, por lo que al número original de segundos, habría que añadir al guardar las tres cifras de los milisegundos y quitarlas a la hora de devolver la hora en formato HH:MM:SS.
  • Había muy poco tiempo para testear la aplicación y el tipo timestamp no se puede “leer” diréctamente, a diferencia de otros formatos de hora, y saber a qué hora corresponde, por lo que las pruebas en papel se iban a hacer mucho más complicadas y largas.

Aplicación online de cronometraje
Por esta razón me decanté por algo mucho más rudimentario, pero que a corto plazo resolvía el problema que tenía de entender las cifras: guardaría los tiempos en una cadena con el formato YYYYMMDDHHmmSSsss (4 cifras para el año, 2 para el mes, 2 para el día, 2 para las horas, 2 para los minutos, 2 para los segundos y 3 para los milisegundos). Está claro que esto tiene una gran desventaja, y es que soy yo el que tiene que preparar un algoritmo para hacer las operaciones de sumas y restas, separando primero ese string en los diferentes componentes y luego operando con cuidado ya que se mezclan medidas sexagesimales y centesimales. Adelanto ya que la aplicación funcionó perfectamente, por lo que este lío a la hora de elegir el formato del tiempo no fue necesario, pero como más vale prevenir que lamentar, estoy seguro que fue la decisión correcta.

El siguiente paso fue preparar eso algoritmos que calculaban los tiempo de cada uno de los tramos individuales y la clasificación general que era la suma de los tiempos de los cuatro tiempos más las penalizaciones de los participantes, en caso de haber recibido alguna. Así que cogí papel y boli y, recordando los tiempos en el colegio, me puse a comprobar que mis algoritmos sabían sumar y restar tiempos correctamente. Costó su tiempo pero funciono. Uno de los puntos sobre los que tenía más dudas era la ordenación de strings, pero con el algoritmo de la burbuja y comparando los tiempos en formato HH:mm:SS.sss no hubo ningún problema.

Llegados a este punto ya tenía solucionado todo el sistema de tiempos y la parte más complicada estaba lista. En la segunda parte explicaré en qué consiste el resto de la aplicación y en el tercer y último post compartiré como desarrolle en una noche la página web que mostraría todos los resultados.