Re: Bugs en RJ(t)



Hola Juan

No discuto que pueda haber un fallo, el problema es que aparece muy
eventualmente y es difícil de depurar. Tampoco discuto que habría que
reprogramar esta parte, pero antes habría que esperar a que mono
implementara eventos por puerto serie. Preguntaré a Miguel cuando lo
tienen previsto.

Como ves aquí (1a limitación)
http://www.mono-project.com/HowToSystemIOPorts

Aquí se comenta que el puerto serie ya está implementado:
http://www.mono-project.com/Roadmap
como si la tarea ya estuviese acabada.

Acabo de subir mi código al svn. En principio es lo mismo que tenías
tu excepto la última modificación, que la he suprimido pues como
decías es errónea (no lo había probado sin el simulador).

El código que acabo de subir lo he probado 40 veces y no me ha
fallado, en todas con el Rj(t), esperando en la manta (pulsador) a que
pase el tiempo, y luego realizando un salto. 20 veces con el "permitir
que caiga después del tiempo" y 20 con esta opción desactivada.

¿Puedes indicarme si tienes esto seleccionado cuando te está fallando?
¿Puedes hacer una media de cada cuantas ejecuciones te falla?
Es para mejorar mis pruebas.

Puedes pegar aquí todo lo que sale en la línea de comandos cuando se
produce un fallo? concretamente desde la última línea que sale, hasta
la línea
----------WRITING----------
y la línea
----------WRITING----------
anterior.

O sea que debe salir todo lo que aparece en la terminal desde el
penúltimo WRITING hasta el final. Quizás así se entiende mejor.

Perdona si mis correos no resuelven directamente el problema  y sólo
son apuntes, pues ahora estamos de corrección de exámanes en mi
facultad y tengo poco tiempo.


gracias, saludos


2007/6/14, Juan Fernando Pardo <juanfer juanfer com ar>:
Xavier,
Eso no era, ahora falla en todas las oportunidades.
Te explico el caso nuevamente por las dudas que existe una confusión.
Yo las pruebas las estoy haciendo haciendo terminar el tiempo
seleccionado mientras estoy en contacto con la plataforma.
O sea, caigo, espero que se cumpla el tiempo adentro, y luego salto.
Y las pruebas las hago con Chronopic, no simulado.

Saludos
Juanfer

El jue, 14-06-2007 a las 14:57 +0200, Xavi de Blas escribió:
> Hola Juan Fernando
>
> Creo que he encontrado el fallo, prueba esto por favor:
>
> en src/execute/event.cs
> líneas: 228-232
>
>                 if(needEndEvent) {
>                         eventExecuteWin.EventEnded();
>                         //needEndEvent = false;
>                 } else
>                         updateTimeProgressBar();
>
> cámbialas por esto
>
>
>                  updateTimeProgressBar();
>                 if(needEndEvent) {
>                         eventExecuteWin.EventEnded();
>                         //needEndEvent = false;
>                 } else
>                         //updateTimeProgressBar();
>
>
> Parece que cuando se termina el salto depende de cómo estén los hilos,
> no se llamaba al updateTimeProgressBar() que es el que se encarga de
> actualizar la barra de progreso que estaba fallando.
>
> En cuanto alos otros cambios que te pedí, puedes mantenerlos, sirven
> para garantizar que se actualice la información.
>
> Puede que esto falle también en los carreras en intérvalos limitadas por tiempo.
>
>
> Lo que escribes está bien, es lógico, pero piensa que es mucho más
> complejo por el tema de los hilos. Por ejemplo: el needEndEvent es una
> variable que indica que un evento debería terminar, y esto lo indica
> un hilo de ejecución del programa (imagínate que es un procesador que
> está ocupado con algunas tareas del programa) en cambio otro hilo
> (podría ser otro procesador con otras tareas diferentes), cuando ve
> este needEndEvent (pues comparten la variable) entonces realiza el
> cambio.
>
> Por qué con hilos? pues porque GTK no es "thread-safe" entonces para
> que se pueda hacer clic en sitios como el finalizar o cancelar
> mientras se actualiza la gráfica con datos que vienen del puerto
> serie... hay que hacerlo con hilos.
>
> En un futuro espero que breve, mono lanzará un evento por cada cosa
> nueva que le llegue por el puerto serie (o usb-serie, es lo mismo),
> cuando esto esté programado, creo que se podrá prescindir de los
> hilos, entonces reprogramaré toda la ejecución de eventos -y tengo
> ganas- para que sea algo parecido a lo que indicas, más claro y
> provoque menos errores.
>
> Hasta que no llegue ese momento, hay que valorar si los bugs que
> eventualmente aparecen son importantes o no y si es fácil arreglarlos.
> En este caso, el fallo no afectaba al resultado que se guardaba, sólo
> al que se visualizaba en una parte de la pantalla en un momento
> concreto, y sólo en algunas ocasiones de algunos ordenadores (a mi aún
> no me ha pasado nunca, es lo que tienen los hilos). Si además con el
> cambio que te presento hoy se arregla, pues de momento el sistema
> actual sirve.
>
> Pero te agradezco mucho tus comentarios pues ayudan a mejorar el programa.
>
> Se arregló el fallo?
>
> Saludos
>
> 2007/6/14, Juan Fernando Pardo <juanfer juanfer com ar>:
> > Xavier,
> > Te comento que hice el cambio, pero me apareció nuevamente el "error".
> > Te adjunto una imagen para que veas.
> >
> > Como no tengo bien claro como se programa con "hilos", te pregunto lo
> > siguiente. ¿Es muy dificil que las comprobaciones se hagan de la
> > siguiente forma?
> >
> > //Esperando contacto para empezar
> > llamar contacto //cuando se produce el contacto, se llama a la funcion
> >
> > contacto()
> > {
> > si tiempo_acumulado < tiempo_establecido
> >   saltos=saltos+1
> >   llamar vuelo //cuando se inicia el vuelo, llamo a la funcion
> > sino
> >   estado=contacto
> >   llamar terminar_evento
> > }
> >
> > vuelo()
> > {
> > si tiempo_acumulado < tiempo_establecido
> >   llamar contacto //cuando se inicia el contacto, llamo a la funcion
> > sino
> >   estado=vuelo
> >   llamar terminar_evento
> > }
> >
> > terminar_evento()
> > {
> > si estado=contacto
> >   si permitir_despues_de_tiempo=si entonces saltos=saltos+1
> >   llamar actualizar_graficos_y_barras
> > sino
> >   llamar actualizar_graficos_y_barras
> > }
> >
> >
> >
> > Saludos
> > Juanfer
> >
> >
> > El mié, 13-06-2007 a las 16:40 +0200, Xavi de Blas escribió:
> > > Hola juan Fernando
> > >
> > >
> > > 2007/6/12, Juan Fernando Pardo <juanfer juanfer com ar>:
> > > > Xavier,
> > > > He aplicado el cambio, compilado nuevamente y probado.
> > > > Tuve que intentar muuuchas veces más para que aparezca el "fallo", pero
> > > > apareció.
> > > > Adjunto 2 imágenes.
> > > >
> > >
> > >
> > > Bueno, parece que el error se va limpiando, creo que con lo que te
> > > pedí limpiamos la barra de progreso de saltos. Para la barra de
> > > progreso de tiempo, por favor, cambia esto:
> > >
> > > ***********************
> > > needUpdateGraph = true;
> > > updateProgressBar = new UpdateProgressBar (
> > >     true,
> > >     jumpsLimited,
> > >     Util.GetNumberOfJumps(tvString, false)
> > >     );
> > > needUpdateEventProgressBar = true;
> > > }
> > > ************************
> > >
> > > por esto (sólo es añadir una línia antes de la llave final, sólo hay
> > > que hacerlo una vez, en las mismas líneas que cambiaste la otra vez):
> > >
> > > ***********************
> > > needUpdateGraph = true;
> > > updateProgressBar = new UpdateProgressBar (
> > >     true,
> > >     jumpsLimited,
> > >     Util.GetNumberOfJumps(tvString, false)
> > >     );
> > > needUpdateEventProgressBar = true;
> > > updateTimerCountWithChronopicData(tcString, tvString);
> > > }
> > > ************************
> > >
> > > si no mejora se me ocurre otro cambio, pero antes prueba esto, cuando
> > > me digas algo lo subo al svn para no continuar mandando líneas de
> > > código por correo.
> > >
> > >
> > > > En la imagen RJt-3 cumplí el salto 6 y permanecí en la plataforma (en
> > > > realidad lo hice con el pulsador) hasta que se cumpla el tiempo
> > > > establecido (5 segundos), luego salté y caí de nuevo. Finalizó el
> > > > evento, no sumó el salto 7 (como corresponde), pero sí quedó el tiempo
> > > > final, el que debía indicar cuando finalicé el salto 7. En este caso
> > > > tenía la opción "Permitir RJ terminar después del tiempo".
> > > >
> > > > En la imagen RJt-4, sin la opción "Permitir RJ terminar después del
> > > > tiempo", terminé el salto 5 dentro del tiempo establecido (5 segundos),
> > > > y al iniciar el 6 se cumple el tiempo, caigo ya excedido el tiempo, y no
> > > > lo cuenta, como corresponde, pero queda mostrando el tiempo de la caída
> > > > del salto 6.
> > > >
> > > > En ambos casos, en la ventana principal de los resultados está bien, es
> > > > solo errónea la información en la ventana de eventos.
> > > >
> > > >
> > > > Pregunta: ¿Qué es la información del renglón "DE"?
> > >
> > > La desviación estándar o típica (en inglés se suele abreviar SD
> > > standard deviation, aunque en muchos ámbitos se le llama Typical
> > > Dev.), una medida de la similitud de los datos. por ejemplo para ver
> > > la variación de ritmo de un individuo es imprescindible. En un rj
> > > largo puede ser interesante que en un futuro se divida en 3 o 5 partes
> > > y se vea la DE de cada parte
> > >
> > > Por ejemplo, para ver si los chicos tienen unos valores de salto más
> > > similares entre ellos que las chicas te puede servir.
> > >
> > > > Comentarios: Si sumás todos los tiempos de contactos, te da 878
> > > > milésimas, y en los resultados muestra 880. ¿Es algún "error" de
> > > > redondeo"?
> > > > En el caso de los tiempos de contacto, la diferencia es de solo 1
> > > > milésima. 3,446 que se muestra contra 3,445 que suman los saltos.
> > > >
> > >
> > > Ves a las preferencias y aumenta los decimales que se muestran.
> > >
> > >
> > > El método de redondeo es el que se explica aquí
> > >  http://www.go-mono.com/docs/index.aspx?link=M%3aSystem.Math.Round(System.Double)
> > >
> > > en el que cuando se encuentra en la mitad siempre redondea hacia el número par.
> > >
> > > Round(4,5) = 4
> > > Round(4,5) = 4
> > > Round(5,5) = 6
> > >
> > > aunque esto ***sólo se usa en la ventana de saltos***, en el resto no
> > > se redondea de momento, sólo se "capan" decimales. En una futura
> > > versión se redondeará mejor.
> > > Cuando se redondee bien en todo el programa, entonces no se observarán
> > > problemas de sumas como el que adviertes.
> > > No será nada difícil, al fin y al cabo todos los decimales se "capan"
> > > usando el Util.TrimDecimals() sólo hay que poner el redondeo allí y ya
> > > está
> > > voy  a poner un bug con esto
> > >
> > > saludos y gracias
> > >
> > >
> > > >
> > > > Saludos
> > > > Juanfer
> > > >
> > > >
> > > >
> > > > El mar, 12-06-2007 a las 18:38 +0200, Xavi de Blas escribió:
> > > > > Hola Juan Fernando
> > > > >
> > > > > Lo he probado unas 15 veces y no he conseguido reproducir el error,
> > > > > por otro lado, me gustaría que probases de añadir unas líneas a ver si
> > > > > resuelve este problema, y me cuentas qué tal. Es nuevamente un
> > > > > problema de threads.
> > > > >
> > > > > prueba de hacer esta modificación en el archivo src/execute/jump.cs
> > > > >
> > > > > cambia las líneas 850 y 851
> > > > >
> > > > > ***************
> > > > > needUpdateGraph = true;
> > > > > }
> > > > > ***************
> > > > >
> > > > > por esto:
> > > > >
> > > > > ***************
> > > > > needUpdateGraph = true;
> > > > > updateProgressBar = new UpdateProgressBar (
> > > > >     true,
> > > > >     jumpsLimited,
> > > > >     Util.GetNumberOfJumps(tvString, false)
> > > > >     );
> > > > > needUpdateEventProgressBar = true;
> > > > > }
> > > > > ***************
> > > > >
> > > > > Ya nos contarás, gracias
> > > > >
> > > > > 2007/6/12, Juan Fernando Pardo <juanfer juanfer com ar>:
> > > > > > Xavier,
> > > > > > Encontré lo siguiente en el Chronojump del SVN.
> > > > > > En los saltos RJ(t), cuando se cumple el tiempo y estoy sobre la
> > > > > > plataforma, luego de realizar el salto y la caída para que verifique que
> > > > > > el tiempo terminó, en la ventana del evento pasa lo siguiente, (pero
> > > > > > solo en algunas oportunidades)
> > > > > >
> > > > > > 1. Me deja el tiempo de la última caída, no el que había antes de
> > > > > > realizar el último salto, pero me muestra bien la cantidad de saltos, ya
> > > > > > que no suma este último.
> > > > > >
> > > > > > 2. Me suma este último salto, pero me muestra bien el tiempo, ya que
> > > > > > queda mostrando el último tiempo válido antes que realice el salto.
> > > > > >
> > > > > > Pero estas 2 cosas solo están mal en la ventana del evento, en el
> > > > > > resumen que guarda en la base de datos lo muestra bien.
> > > > > >
> > > > > > Adjunto 2 imágenes para corroborar lo que digo.
> > > > > > En el caso 1, ver como en la ventana de eventos dice un tiempo, y en la
> > > > > > pantalla principal del programa dice otro.
> > > > > > En el caso 2, ver como en la ventana de eventos figura un salto más.
> > > > > >
> > > > > > Y me apareció nuevamente el bug que aparece reiteradamente el mensaje
> > > > > > cuando presiono "Cancelar" en la ventana de eventos, pero no lo pude
> > > > > > volver a reproducir, no recuerdo como hice para que aparezca. Voy a
> > > > > > seguir intentando.
> > > > > >
> > > > > >
> > > > > > Saludos
> > > > > > Juanfer
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > _______________________________________________
> > > > > > Chronojump-list mailing list
> > > > > > Chronojump-list gnome org
> > > > > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> > > > > >
> > > > > >
> > > > > >
> > > > > _______________________________________________
> > > > > Chronojump-list mailing list
> > > > > Chronojump-list gnome org
> > > > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> > > >
> > > > _______________________________________________
> > > > Chronojump-list mailing list
> > > > Chronojump-list gnome org
> > > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> > > >
> > > >
> > > >
> > > _______________________________________________
> > > Chronojump-list mailing list
> > > Chronojump-list gnome org
> > > http://mail.gnome.org/mailman/listinfo/chronojump-list
> >
> > _______________________________________________
> > Chronojump-list mailing list
> > Chronojump-list gnome org
> > http://mail.gnome.org/mailman/listinfo/chronojump-list
> >
> >
> >
> _______________________________________________
> Chronojump-list mailing list
> Chronojump-list gnome org
> http://mail.gnome.org/mailman/listinfo/chronojump-list

_______________________________________________
Chronojump-list mailing list
Chronojump-list gnome org
http://mail.gnome.org/mailman/listinfo/chronojump-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]