X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/f3afa7617592cc9232025f8207bbb42d71b902ec..9322e49b932d824e5664aa8c0e0f9a41464537b1:/docs/manual_proyecto.lyx diff --git a/docs/manual_proyecto.lyx b/docs/manual_proyecto.lyx index 7b83ce1..c39f71a 100644 --- a/docs/manual_proyecto.lyx +++ b/docs/manual_proyecto.lyx @@ -1,18 +1,23 @@ #LyX 1.3 created this file. For more info see http://www.lyx.org/ \lyxformat 221 -\textclass article +\textclass book \language spanish \inputencoding auto -\fontscheme default +\fontscheme palatino \graphics default \paperfontsize default +\spacing single \papersize Default \paperpackage a4 -\use_geometry 0 +\use_geometry 1 \use_amsmath 0 \use_natbib 0 \use_numerical_citations 0 \paperorientation portrait +\leftmargin 1.5cm +\topmargin 1.5cm +\rightmargin 2.5cm +\bottommargin 1.5cm \secnumdepth 3 \tocdepth 3 \paragraph_separation indent @@ -25,7 +30,14 @@ \layout Title -Manual del Proyecto PlaQui +Manual del Proyecto +\newline +PlaQui +\layout Author + +Taller de Programación I +\newline +Universidad de Buenos Aires \layout Standard @@ -34,7 +46,7 @@ Manual del Proyecto PlaQui \end_inset -\layout Section +\layout Chapter Integrantes. \layout Itemize @@ -46,7 +58,7 @@ Leandro Lucarella (77.891) \layout Itemize Ricardo Markiewicz (78.226) -\layout Section +\layout Chapter Programas de Prueba. \layout Standard @@ -55,13 +67,26 @@ Los programas de prueba se pueden encontrar en la carpeta \emph on tests \emph default -, allí se almacenaron los primeros ejecutables con los que luego se comenzó - el desarrollo. +, allí se almacenaron los primeros ejecutables con los cuales se experimentó + en temas que no se habían visto hasta el momento como +\emph on +drag&drop +\emph default +, +\emph on +threads +\emph default + y +\emph on +sockets +\emph default +. \layout Standard Con la ayuda de la herramienta subversion no fue necesario ir guardando - parcialmente el proyecto, ya que subversion guarda en un repositorio todas - las versiones intermedias del proyecto. + versiones parciales del proyecto, ya que subversion guarda en un repositorio + todas las versiones intermedias por nosotros, a las cuales se puede acceder + en cualquier momento. Para obtener una versión particular del proyecto basta ejecutar: \layout LyX-Code @@ -72,7 +97,7 @@ Donde \family typewriter -r \family default - toma un parametro que puede ser el número de revisión que se quiere obtener + toma un parámetro que puede ser el número de revisión que se quiere obtener ( \family typewriter rev @@ -88,7 +113,7 @@ rev svn co -r1 http://svn.llucax.hn.org/svn/plaqui/ \layout Standard -Y para obtener la versión de la fecha de la preentrega se puede hacer: +Y para obtener la versión de la fecha de la pre-entrega se puede hacer: \layout LyX-Code svn co -r'{2003-11-20 18:00}' http://svn.llucax.hn.org/svn/plaqui/ @@ -96,7 +121,7 @@ svn co -r'{2003-11-20 18:00}' http://svn.llucax.hn.org/svn/plaqui/ Es por esto que nos pareció que no tenía mucho sentido acompañar este manual con una versión particular del repositorio en un momento dado. -\layout Section +\layout Chapter Evolución del proyecto. \layout Standard @@ -121,14 +146,261 @@ svn log -r0:HEAD http://svn.llucax.hn.org/svn/plaqui/ \layout Standard Por conveniencia, en el directoria raíz del código fuente entregado en el - CD se encuentra un archivo ChangeLog con los mensajes de todas las revisiones - del proyecto. -\layout Section + CD se encuentra un archivo +\family typewriter +ChangeLog +\family default + con los mensajes de todas las revisiones del proyecto. +\layout Standard + +A continuación se muestra una gráfica generada con un +\emph on +script +\emph default + hecho en Perl ( +\family typewriter +log_trace.pl +\family default +, que se adjunta en el CD) que indica la cantidad de +\emph on +commits +\emph default + (cambios de versión) que se hicieron día a día, donde cada +\family typewriter +* +\family default + representa un +\emph on +commit +\emph default +. +\layout LyX-Code + +PlaQui - Grafica de Progreso SVN +\layout LyX-Code + +-------------------------------- +\layout LyX-Code + +Fech Commits +\layout LyX-Code + +2003-10-08 ** + (luca) +\layout LyX-Code + +2003-10-10 ***** + (luca) +\layout LyX-Code + +2003-10-11 *** + (luca) +\layout LyX-Code + +2003-10-12 ********** + (rmarkie) +\layout LyX-Code + +2003-10-13 ***** + (luca) +\layout LyX-Code + +2003-10-14 * + (rmarkie) +\layout LyX-Code + +2003-10-15 **** + (rmarkie|luca) +\layout LyX-Code + +2003-10-16 ***** + (rmarkie) +\layout LyX-Code + +2003-10-17 ************ + (luca) +\layout LyX-Code + +2003-10-18 ********** + (luca) +\layout LyX-Code + +2003-10-19 ***** + (luca) +\layout LyX-Code + +2003-10-20 **** + (rmarkie) +\layout LyX-Code + +2003-10-21 ***** + (luca) +\layout LyX-Code + +2003-10-22 ************ + (luca) +\layout LyX-Code + +2003-10-23 ****** + (rmarkie) +\layout LyX-Code + +2003-10-24 *********** + (sagar) +\layout LyX-Code + +2003-10-25 * + (sagar) +\layout LyX-Code + +2003-10-26 ** + (sagar|luca) +\layout LyX-Code + +2003-10-28 *** + (sagar) +\layout LyX-Code + +2003-10-29 *** + (luca) +\layout LyX-Code + +2003-11-05 **** + (luca) +\layout LyX-Code + +2003-11-06 ********** + (rmarkie|luca) +\layout LyX-Code + +2003-11-07 ****** + (luca) +\layout LyX-Code + +2003-11-08 ******* + (sagar) +\layout LyX-Code + +2003-11-09 **** + (luca) +\layout LyX-Code + +2003-11-11 ******** + (sagar|rmarkie) +\layout LyX-Code + +2003-11-12 **** + (sagar) +\layout LyX-Code + +2003-11-13 ************* + (rmarkie|luca) +\layout LyX-Code + +2003-11-15 * + (rmarkie) +\layout LyX-Code + +2003-11-16 ******* + (rmarkie) +\layout LyX-Code + +2003-11-17 ************* + (luca) +\layout LyX-Code + +2003-11-18 ********************** + (luca) +\layout LyX-Code + +2003-11-19 *************** + (sagar|luca) +\layout LyX-Code + +2003-11-20 *************************** + (rmarkie) +\layout LyX-Code + +2003-11-21 **** + (luca) +\layout LyX-Code + +2003-11-22 ** + (luca) +\layout LyX-Code + +2003-11-23 ***************** + (luca) +\layout LyX-Code + +2003-11-24 ******* + (rmarkie|luca) +\layout LyX-Code + +2003-11-25 ****** + (rmarkie) +\layout LyX-Code + +2003-11-26 *** + (luca) +\layout LyX-Code + +2003-11-27 **** + (rmarkie) +\layout LyX-Code + +2003-11-28 *** + (luca) +\layout LyX-Code + +2003-11-29 ******* + (luca) +\layout LyX-Code + +2003-11-30 ********************** + (rmarkie) +\layout LyX-Code + +2003-12-01 ******************************************************* + (luca) +\layout LyX-Code + +2003-12-02 ***************************************** + (luca) +\layout LyX-Code + +( ) = Máximo/s Commiteador/es del Día +\layout LyX-Code + +* == 2 Commit +\layout LyX-Code + +\layout Standard + +Los usuarios son: +\layout Description + +sagar Nicolás Dimov +\layout Description + +luca Leandro Lucarella +\layout Description + +rmarkie Ricardo Markiewicz +\layout Standard + +Vale la pena aclarar que en este gráfico no se muestran la cantidad de líneas + modificadas, por lo que una gran cantidad de +\emph on +commits +\emph default + no significa necesariamente un gran cambio en el repositorio. +\layout Chapter División de Tareas. \layout Standard -A continuación se menciona, en terminos generales la tarea que realizó cada +A continuación se menciona, en términos generales la tarea que realizó cada integrante: \layout Description @@ -147,21 +419,155 @@ Dimov PlaQui Constructor. Obviamente en algunas circunstancias algún integrante aporto al desarrollo de un módulo que no le estaba asignado. La documentación fue realizada y revisada entre todos los integrantes. -\layout Section +\layout Chapter Inconvenientes Encontrados. -\layout Subsection +\layout Section Servidor. \layout Standard -El servidor termina su ejecución si el XML que se le pasa como argumento - no es válido. -\layout Comment +El Servidor trajo varios problemas, en especial en cuanto al manejo de +\emph on +sockets +\emph default + y +\emph on +threads +\emph default +. + El uso de señales (para hacer el servidor orientado a eventos) dio también + algunos problemas menores. +\layout Subsection + + +\emph on +Threads +\emph default +. +\layout Standard + +El principal problema de los threads fue el no poder saber fácilmente donde + se producía un error, en especial cuando el error venía por la falta de + un +\emph on +mutex +\emph default +. + En términos generales, cada vez que el server tenía una violación de segmento + se debía a la falta de un +\emph on +mutex +\emph default +. +\layout Standard + +Otro problema eran las excepciones no manejadas dentro del método +\family typewriter +real_run() +\family default + (que se ejecuta en su propio +\emph on +thread +\emph default +). + Aunque se incluía un bloque +\family typewriter +try ; catch +\family default + en el programa principal, al ocurrir una excepción en un +\emph on +thread +\emph default +, dicha excepción no +\emph on +sube +\emph default + hasta el hilo padre y el programa sale con +\family typewriter +abort() +\family default +. + Es por esto que cada +\family typewriter +real_run() +\family default + tiene su propio bloque +\family typewriter +try ; catch +\family default + donde pueda surgir una excepción y se incluyó la +\family typewriter +signal_error() +\family default + en +\family typewriter +Runnable +\family default + para poder avisar de dicho error a quien lo necesite. +\layout Subsection + + +\emph on +Sockets +\emph default +. +\layout Standard + +El principal problema con los +\emph on +sockets +\emph default + fue la imposibilidad (por enunciado) de usar +\emph on +sockets +\emph default + no bloqueantes. + Esto tuvo particular repercusión en el +\family typewriter +TCPServer +\family default +, ya que una vez llamado al +\family typewriter +accept() +\family default + para aceptar una nueva conexión, esta no retorna hasta que efectivamente + se reciba una nueva conexión, haciendo imposible terminar el servidor de + otra manera. + Para resolver esto, al finalizar el +\family typewriter +TCPServer +\family default + se hace una +\emph on +conexión suicida +\emph default + para hacer que la llamada a +\family typewriter +accept() +\family default + retorne y el servidor pueda ser cerrado limpiamente. +\layout Subsection + +Señales. +\layout Standard -los otros puntos no se como explicarlos (sockets no bloqueantes etc) +La señales no dieron mayores problemas. + El único inconveniente es que complican la depuración del programa, ya + que uno no sabe de antemano quien las atenderá y se hace difícil seguir + el flujo del mismo. \layout Subsection +Falencias. +\layout Standard + +El Server está preparado para servir (y simular) una cantidad indeterminada + de plantas. + Por problemas de tiempo esto no se llegó a implementar correctamente en + el programa, en particular por la complicación que traería implementar + dicha función en el cliente. +\layout Section + Constructor. \layout Standard @@ -170,7 +576,7 @@ A lo largo del desarrollo nos hemos encontrado con diferentes tipos de problemas \layout Standard -Al tabajar con imágenes independientes, las verificaciones sobre cada una +Al trabajar con imágenes independientes, las verificaciones sobre cada una de estas, dependen mucho de su posición en el área de trabajo y su orientación. Esto provoca que haya que realizar demasiadas validaciones para los diferentes tipos de verificaciones, y trae apareados problemas en la codificación @@ -184,27 +590,38 @@ Otro inconveniente no solucionado, fue que las im que para un elemento de cuatro imágenes, se cargarían en memoria solamente esas cuatro imágenes y luego los elementos iguales apuntarían su imagen actual a la que corresponda. - Esto no pudo ser solucionado pués no encontramos la forma de inicializar + Esto no pudo ser solucionado pues no encontramos la forma de inicializar las imágenes de manera estática, se producían errores en el momento del linkeo. \layout Standard -Por probemas de tiempo, hubo algunas implementaciones sobre el Constructor +Por problemas de tiempo, hubo algunas implementaciones sobre el Constructor luego de cerrado el tema de la documentación, por ejemplo, el Constructor pregunta si quiere guardar el trabajo antes de salir del programa. Esto no fue documentado. -\layout Subsection +\layout Section Cliente. \layout Standard -El principal problema del cliente fueron las threads. +El principal problema del cliente fueron los +\emph on +threads +\emph default +. El asunto fue descubrir la forma de hacer que las actualizaciones de refresco - de las propiedades y la creación dinámica de objetos sea thread-safe para - garantizar a la Gtk+ cierta estabilidad. - Luego de mucho leer se encontro el Glib::Distpatcher, que es un evento - asíncrono especialmente diseñado para comunicación entre hilos. -\layout Subsection + de las propiedades y la creación dinámica de objetos sea +\emph on +thread-safe +\emph default + para garantizar a la Gtk+ cierta estabilidad. + Luego de mucho leer se encontró el +\family typewriter +Glib::Distpatcher +\family default +, que es un evento asíncrono especialmente diseñado para comunicación entre + hilos. +\layout Section Modelo. \layout Standard @@ -215,7 +632,7 @@ El Modelo ten en forma asíncrona. Luego de mucho diseño, análisis de todas las combinaciones posibles entre las entradas se llego a un método que resulto exitoso en la mayoría de - las pruebas y fue adoptado como definivito. + las pruebas y fue adoptado como definitivo. \layout Standard Otro inconveniente fue la suma de colores. @@ -226,9 +643,15 @@ Otro inconveniente fue la suma de colores. distribución RGB. En base a sus recomendaciones hicimos las sumas de colores en los distintos objetos. -\layout Section +\layout Standard -Conclusiones Generales. +Por último, al verificarse la validez del conexionado de un archivo XML + de planta en el Constructor, el Modelo no vuelve a realizar el chequeo, + por lo que si se quiere levantar una planta desde un XML invalido los resultado +s son impredecibles. +\layout Chapter + +Conclusiones. \layout Standard Se reforzaron los conocimientos en programación C++ y la programación orientada @@ -238,54 +661,87 @@ Se reforzaron los conocimientos en programaci creado. \layout Standard -Con el programa de desarrollo de interfaces, Glade-2, y las bibliotecas - Gtk+ y Glademm facilitaron mucho la creación del Cliente y el Constructor, - y nos hemos familiarizado con sus prestaciones, para crear aplicaciones - visuales. +El programa de desarrollo de interfaces Glade-2, y las bibliotecas Gtk+ + y Glademm facilitaron mucho la creación del Cliente y el Constructor, y + nos hemos familiarizado con sus prestaciones, para crear aplicaciones visuales. \layout Standard -Contamos con la ayuda de trabajar a distancia, gracias al subversion el - cual facilitó muchisimo las cosas y permitió que los tres integrantes del - equipo pudieramos contar con la totalidad del proyecto en todo momento, - pudiendo conocer el trabajo de los demás y al mismo tiempo reportar -\begin_inset Quotes eld -\end_inset - +Contamos con la ayuda del subversion y una lista de correos pudimos trabajar + a distancia cómodamente, lo cual facilitó muchísimo las cosas y permitió + que los tres integrantes del equipo pudiéramos contar con la totalidad + del proyecto en todo momento, pudiendo conocer el trabajo de los demás + y al mismo tiempo reportar +\emph on bugs -\begin_inset Quotes erd -\end_inset - +\emph default o complementar el trabajo de otro. En todo momento estuvimos actualizados sobre el desarrollo. + Cabe mencionar que necesitamos juntarnos solamente una vez para distribuirnos + las tareas. + El resto del trabajo práctico se realizó a distancia. \layout Standard Nos ha parecido muy importante haber hecho todo el trabajo con ayuda de - herramientas comunes de desarrollo de software libre, las cuales dejaron + herramientas comunes de desarrollo de Software Libre, las cuales dejaron un producto final de una calidad igual o superior a cualquier otro entorno - de desarrollo de aplicaciones, sobre todo las aplicaciones visuales. + de desarrollo de aplicaciones, sobre todo las aplicaciones visuales que + aprovechan un excelente trabajo de la GTK+ que suma un valor agregado como + la posibilidad de cambiar la apariencia de la aplicación a través de +\emph on +themes +\emph default +, sin costo alguno. + Esto también nos permitió hacer un trabajo práctico usando 100% software + legal, cosa que incluso grandes empresas no pueden realizar en muchos casos + (ni hablar un estudiante). \layout Standard La documentación online generada con el Doxygen, si es bien utilizado, queda muy completa y es muy fácil realizar una búsqueda con la ayuda de un navegador. Esto puede comprobarse con la documentación online de la biblioteca Gtkmm - (www.gtkmm.org). + ( +\family typewriter +www.gtkmm.org +\family default +). + La documentación en formato HTML del proyecto se encuentra en el CD y en + +\family typewriter +http://www.llucax.hn.org/plaqui/docs/html/ +\family default +. \layout Standard Hubo algunas ideas que no pudieron ser implementadas por cuestión de tiempo, y la documentación estaba programada para realizarse en cuatro días, pero - tres días antes de la entrega nos avisaron que debíamos entregar el martes, - siendo que nosotros cursábamos los jueves, lo que redujo el tiempo de documenta -ción a solo dos días. + tres días antes de la entrega nos enteramos que debíamos entregar el Martes, + siendo que nosotros cursábamos los Jueves, lo que redujo el tiempo de documenta +ción a sólo dos días. + Aún así creemos que se logró hacer un trabajo muy completo de documentación, + en parte gracias a Doxygen (como se dijo antes) porque a medida que íbamos + escribiendo el código lo íbamos documentando en línea. \layout Standard -En general estamos muy conformes con el trabajo y la forma en la cuál fué +En general estamos muy conformes con el trabajo y la forma en la cuál fue realizado, cumplimos los requisitos pedidos por el enunciado y creemos - que lo hicimos de una manera sobresaliente. + que lo hicimos de una manera correcta. \layout Standard -El proyecto completo es entregado en un CD que puede ser leido desde cualquier - sistema operativo en cualquier tipo de lectora, y también es un CD booteable - con lo cual no es necesario ni siquiera tener un sistema opertativo instalado +El proyecto completo es entregado en un CD que puede ser leído desde cualquier + sistema operativo en cualquier tipo de lectora, pero también es un CD +\emph on +booteable +\emph default + con lo cual no es necesario ni siquiera tener un sistema operativo instalado o un disco rígido para poder operar el PlaQui. + Basta activar la opción de +\emph on +booteo +\emph default + desde el CD en el +\emph on +BIOS +\emph default + y colocar el CD. \the_end