[Buoh-dev] Varios asuntos
Esteban Sánchez
esteban at steve-0.com
Mon Sep 5 12:18:18 MDT 2005
El lun, 05-09-2005 a las 19:33 +0200, Carlos Garcia Campos escribió:
> El primero de todo, acabo de hacer commit, y os cuento:
>
> El tema del hilo estaba muy bien y daba mayor fluidez al gui, pero su
> objetivo principal era proporcionar una manera de poder parar la carga
> del comic lo mas rápido posible para que el usuario pueda seleccionar
> los distintos comics de la lista y obtener respuesta inmediata por parte
> del gui. Bien, pues esto antes no era cierto en el 100% de los casos.
> Hay un momento critico, desde que seleccionas un comic hasta que empieza
> a verse la imagen en que si seleccionas otro comic el gui no responde de
> forma inmediata. Este momento crítico, del que ya hemos hablado mas
> veces por motivos de feedback, se produce porque la llamada open de
> gnome_vfs se queda bloqueando el hilo hasta que resuelve la url y
> devuelve un manejador. Lo peor que nos puede pasar es que el hilo se
> bloquee. Y esto sucede de forma escándalosa si, por ejemplo, se caen los
> servidores de dns, o tienes el interfaz de red levantado con un gw que
> no existe.
> La solución ha sido usar llamadas async en gnome_vfs. De esta manera,
> mientras el open hace su trabajo el hilo no está bloqueado, y puedes
> detener al open con un gnome_vfs_async_cancel y terminar el hilo
> después.
Eso fue algo que miré en la versión antigua, pero no tenia suficiente
idea como para hacerlo.
> Como ya os habréis dado cuenta, esto trae un problema añadido. Si un
> hilo no es mas que una función y termina con el return de la función, si
> tras ejecutar el opne asincrono la función sigue ejecutando sin
> bloquearse a la espera del resultado de open continuaría hasta el return
> y el hilo moriría inmediatamente. La solución cutre es poner un bucle
> infinito en espera activa, pero ni se me ha pasado por la cabeza. En su
> lugar he creado un nuevo bucle de ejecución de glib donde ejecutará el
> hilo. De esta manera, la forma de parar el hilo es tan simple como hacer
> un g_main_loop_quit ()
Interesante :)
> Pues esta es la explicación de los cambios realizados. La conclusión es
> que ahora el hilo nunca está bloqueado de forma que podemos hacerle lo
> que sea cuando sea. Por otro lado ahora queda mas definida ese momento
> crítico en que el hilo está resolviendo, de manera que podemos añadir un
> nuevo estado al cargador en el futuro que nos indique que en ese momento
> se está resolviendo y proporcionar feedback para ello. Está claro que
> ese tiempo no lo podemos reducir, así que lo mas que podemos hacer es
> tratar de que hasta que empieza a aparecer la imagen no de la sensación
> de no estar haciendo nada.
Feedback powah!! :D
Como solución se me ocurrió hace tiempo el de poner un spinner (un icono
que se mueve) como en los web-browsers. Si no recuerdo mal te lo comenté
y la idea quedó aparcada a la espera de reducir el tiempo de espera.
Visto que has dado un gran paso en este sentido lo retomo. ¿Qué os
parece un spinner?
> Por otro lado, ya he reportado el bug de gnome-vfs sobre el error
> generico siempre después de un 404
Cosa rara...
> Sobre el comic manager he estado pensando algunas ideas:
>
> * El comic manager crea un nuevo problema: como saber cual es el primer
> comic? si queremos proporcionar la funcionalidad de ir al primero, y
> controlar en la de ir hacía atras, que no se pase del primero,
> necesitamos saberlo. Para ello es necesario realizar trabajo de becario
> como dice esteban y proporcionar la fecha incial de cada tira al xml. Es
> la manera que se me ocurre de hacerlo. Esto nos da otra ventaja, y es la
> posibilidad de implementar las tiras de tipo nombre[0-9]+ ya que si
> sabemos cuando fue la primera y cada cuanto tiempo sale, podemos
> calcular los nombres en función de la fecha actual.
Supongo que el trabajo de becario no le mola a nadie, y en cierto modo
como yo soy el encargado de los comics, sé cual es su web y demás, pues
me tocará hacerlo a mi :P
Otra curro de becario sería el de poner un enlace a la web original para
todos los comics.
> * Como distinguir en el gui los distintos comics de una misma tira. Hay
> que proporcionar al usuario la posibilidad de saber en que comic de toda
> la tira está, es decir, si está en el primero, en el último o por
> fechas, si está en el del dia tal del tal, o en el de la semana tal,
> etc. No se si una barra de tiempos tipo f-spot podría encajar, es un
> tema que no he pensado en profundidad.
Aquí entra el concepto de "página", entrecomillado porque quizás no es
un buen nombre. Si hacemos la analogía de que al usar el programa
estamos leyendo un libro de tiras de comics, cada imagen sería una
página del libro. Si se os ocurre otro nombre más explicativo u otra
metáfora pues decidlo :)
El comic manager proporcionará un método para saber en qué página está,
así que sólo hay que ver cual es la mejor manera de mostrárselo al
usuario. La pega de la barra de F-spot (cogida tal cual) es que es más
para rangos de fechas, mientras que a nosotros sólo nos interesa una
fecha concreta. Quizás nos toque innovar en este aspecto...
> Se que se me olvida algo que iba a contar, pero como este correo ya es
> lo suficientemente largo lo dejo para otro momento cuando me acuerde.
>
> Animo que poco a poco estamos avanzando en el roadmap hacia la primera
> release.
Oeoeoeoe :D
> Salu2
Saludos!
--
Esteban Sánchez
esteban at steve-0.com
http://steve-o.org
http://subanales.com/
------------------------------------------------
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xB6E0F8AF
More information about the Buoh-dev
mailing list