]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - docs/manual_proyecto.lyx
Se arregla el bug que hacia que el cliente levante mal archivos XML grandes.
[z.facultad/75.42/plaqui.git] / docs / manual_proyecto.lyx
1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
2 \lyxformat 221
3 \textclass book
4 \language spanish
5 \inputencoding auto
6 \fontscheme palatino
7 \graphics default
8 \paperfontsize default
9 \spacing single 
10 \papersize Default
11 \paperpackage a4
12 \use_geometry 1
13 \use_amsmath 0
14 \use_natbib 0
15 \use_numerical_citations 0
16 \paperorientation portrait
17 \leftmargin 1.5cm
18 \topmargin 1.5cm
19 \rightmargin 2.5cm
20 \bottommargin 1.5cm
21 \secnumdepth 3
22 \tocdepth 3
23 \paragraph_separation indent
24 \defskip medskip
25 \quotes_language english
26 \quotes_times 2
27 \papercolumns 1
28 \papersides 1
29 \paperpagestyle default
30
31 \layout Title
32
33 Manual del Proyecto
34 \newline 
35 PlaQui
36 \layout Author
37
38 Taller de Programación I
39 \newline 
40 Universidad de Buenos Aires
41 \layout Standard
42
43
44 \begin_inset LatexCommand \tableofcontents{}
45
46 \end_inset 
47
48
49 \layout Chapter
50
51 Integrantes.
52 \layout Itemize
53
54 Nicolás Dimov (77.624)
55 \layout Itemize
56
57 Leandro Lucarella (77.891)
58 \layout Itemize
59
60 Ricardo Markiewicz (78.226)
61 \layout Chapter
62
63 Programas de Prueba.
64 \layout Standard
65
66 Los programas de prueba se pueden encontrar en la carpeta 
67 \emph on 
68 tests
69 \emph default 
70 , allí se almacenaron los primeros ejecutables con los cuales se experimentó
71  en temas que no se habían visto hasta el momento como 
72 \emph on 
73 drag&drop
74 \emph default 
75
76 \emph on 
77 threads
78 \emph default 
79  y 
80 \emph on 
81 sockets
82 \emph default 
83 .
84 \layout Standard
85
86 Con la ayuda de la herramienta subversion no fue necesario ir guardando
87  versiones parciales del proyecto, ya que subversion guarda en un repositorio
88  todas las versiones intermedias por nosotros, a las cuales se puede acceder
89  en cualquier momento.
90  Para obtener una versión particular del proyecto basta ejecutar:
91 \layout LyX-Code
92
93 svn co -r[rev|{fecha}] http://svn.llucax.hn.org/svn/plaqui/
94 \layout Standard
95
96 Donde 
97 \family typewriter 
98 -r
99 \family default 
100  toma un parámetro que puede ser el número de revisión que se quiere obtener
101  (
102 \family typewriter 
103 rev
104 \family default 
105 ) o una fecha ingresada entre llaves (
106 \family typewriter 
107 {fecha}
108 \family default 
109 ).
110  Por ejemplo para obtener la revisión 1 se puede hacer:
111 \layout LyX-Code
112
113 svn co -r1 http://svn.llucax.hn.org/svn/plaqui/
114 \layout Standard
115
116 Y para obtener la versión de la fecha de la pre-entrega se puede hacer:
117 \layout LyX-Code
118
119 svn co -r'{2003-11-20 18:00}' http://svn.llucax.hn.org/svn/plaqui/
120 \layout Standard
121
122 Es por esto que nos pareció que no tenía mucho sentido acompañar este manual
123  con una versión particular del repositorio en un momento dado.
124 \layout Chapter
125
126 Evolución del proyecto.
127 \layout Standard
128
129 La evolución del proyecto también se documentó a través del subversion,
130  ya que a cada versión que se sube al servidor se la acompaña de un comentario
131  sobre los avances realizados.
132  Para ver el mensaje de cualquier cambio realizado en una revisión 
133 \family typewriter 
134 X
135 \family default 
136  se puede hacer:
137 \layout LyX-Code
138
139 svn log -rX http://svn.llucax.hn.org/svn/plaqui/
140 \layout Standard
141
142 Para ver todos los mensajes basta con:
143 \layout LyX-Code
144
145 svn log -r0:HEAD http://svn.llucax.hn.org/svn/plaqui/
146 \layout Standard
147
148 Por conveniencia, en el directoria raíz del código fuente entregado en el
149  CD se encuentra un archivo 
150 \family typewriter 
151 ChangeLog
152 \family default 
153  con los mensajes de todas las revisiones del proyecto.
154 \layout Standard
155
156 A continuación se muestra una gráfica generada con un 
157 \emph on 
158 script
159 \emph default 
160  hecho en Perl (
161 \family typewriter 
162 log_trace.pl
163 \family default 
164 , que se adjunta en el CD) que indica la cantidad de 
165 \emph on 
166 commits
167 \emph default 
168  (cambios de versión) que se hicieron día a día, donde cada 
169 \family typewriter 
170 *
171 \family default 
172  representa un 
173 \emph on 
174 commit
175 \emph default 
176 .
177 \layout LyX-Code
178
179 PlaQui - Grafica de Progreso SVN
180 \layout LyX-Code
181
182 --------------------------------
183 \layout LyX-Code
184
185 Fech            Commits
186 \layout LyX-Code
187
188 2003-10-08      **                                                     
189   (luca)
190 \layout LyX-Code
191
192 2003-10-10      *****                                                  
193   (luca)
194 \layout LyX-Code
195
196 2003-10-11      ***                                                    
197   (luca)
198 \layout LyX-Code
199
200 2003-10-12      **********                                             
201   (rmarkie)
202 \layout LyX-Code
203
204 2003-10-13      *****                                                  
205   (luca)
206 \layout LyX-Code
207
208 2003-10-14      *                                                      
209   (rmarkie)
210 \layout LyX-Code
211
212 2003-10-15      ****                                                   
213   (rmarkie|luca)
214 \layout LyX-Code
215
216 2003-10-16      *****                                                  
217   (rmarkie)
218 \layout LyX-Code
219
220 2003-10-17      ************                                           
221   (luca)
222 \layout LyX-Code
223
224 2003-10-18      **********                                             
225   (luca)
226 \layout LyX-Code
227
228 2003-10-19      *****                                                  
229   (luca)
230 \layout LyX-Code
231
232 2003-10-20      ****                                                   
233   (rmarkie)
234 \layout LyX-Code
235
236 2003-10-21      *****                                                  
237   (luca)
238 \layout LyX-Code
239
240 2003-10-22      ************                                           
241   (luca)
242 \layout LyX-Code
243
244 2003-10-23      ******                                                 
245   (rmarkie)
246 \layout LyX-Code
247
248 2003-10-24      ***********                                            
249   (sagar)
250 \layout LyX-Code
251
252 2003-10-25      *                                                      
253   (sagar)
254 \layout LyX-Code
255
256 2003-10-26      **                                                     
257   (sagar|luca)
258 \layout LyX-Code
259
260 2003-10-28      ***                                                    
261   (sagar)
262 \layout LyX-Code
263
264 2003-10-29      ***                                                    
265   (luca)
266 \layout LyX-Code
267
268 2003-11-05      ****                                                   
269   (luca)
270 \layout LyX-Code
271
272 2003-11-06      **********                                             
273   (rmarkie|luca)
274 \layout LyX-Code
275
276 2003-11-07      ******                                                 
277   (luca)
278 \layout LyX-Code
279
280 2003-11-08      *******                                                
281   (sagar)
282 \layout LyX-Code
283
284 2003-11-09      ****                                                   
285   (luca)
286 \layout LyX-Code
287
288 2003-11-11      ********                                               
289   (sagar|rmarkie)
290 \layout LyX-Code
291
292 2003-11-12      ****                                                   
293   (sagar)
294 \layout LyX-Code
295
296 2003-11-13      *************                                          
297   (rmarkie|luca)
298 \layout LyX-Code
299
300 2003-11-15      *                                                      
301   (rmarkie)
302 \layout LyX-Code
303
304 2003-11-16      *******                                                
305   (rmarkie)
306 \layout LyX-Code
307
308 2003-11-17      *************                                          
309   (luca)
310 \layout LyX-Code
311
312 2003-11-18      **********************                                 
313   (luca)
314 \layout LyX-Code
315
316 2003-11-19      ***************                                        
317   (sagar|luca)
318 \layout LyX-Code
319
320 2003-11-20      ***************************                            
321   (rmarkie)
322 \layout LyX-Code
323
324 2003-11-21      ****                                                   
325   (luca)
326 \layout LyX-Code
327
328 2003-11-22      **                                                     
329   (luca)
330 \layout LyX-Code
331
332 2003-11-23      *****************                                      
333   (luca)
334 \layout LyX-Code
335
336 2003-11-24      *******                                                
337   (rmarkie|luca)
338 \layout LyX-Code
339
340 2003-11-25      ******                                                 
341   (rmarkie)
342 \layout LyX-Code
343
344 2003-11-26      ***                                                    
345   (luca)
346 \layout LyX-Code
347
348 2003-11-27      ****                                                   
349   (rmarkie)
350 \layout LyX-Code
351
352 2003-11-28      ***                                                    
353   (luca)
354 \layout LyX-Code
355
356 2003-11-29      *******                                                
357   (luca)
358 \layout LyX-Code
359
360 2003-11-30      **********************                                 
361   (rmarkie)
362 \layout LyX-Code
363
364 2003-12-01      *******************************************************
365   (luca)
366 \layout LyX-Code
367
368 2003-12-02      *****************************************              
369   (luca)
370 \layout LyX-Code
371
372 ( ) = Máximo/s Commiteador/es del Día
373 \layout LyX-Code
374
375 * == 2 Commit
376 \layout LyX-Code
377
378 \layout Standard
379
380 Los usuarios son:
381 \layout Description
382
383 sagar Nicolás Dimov
384 \layout Description
385
386 luca Leandro Lucarella
387 \layout Description
388
389 rmarkie Ricardo Markiewicz
390 \layout Standard
391
392 Vale la pena aclarar que en este gráfico no se muestran la cantidad de líneas
393  modificadas, por lo que una gran cantidad de 
394 \emph on 
395 commits
396 \emph default 
397  no significa necesariamente un gran cambio en el repositorio.
398 \layout Chapter
399
400 División de Tareas.
401 \layout Standard
402
403 A continuación se menciona, en términos generales la tarea que realizó cada
404  integrante:
405 \layout Description
406
407 Leandro\SpecialChar ~
408 Lucarella PlaQui Server.
409 \layout Description
410
411 Ricardo\SpecialChar ~
412 Markiewicz PlaQui Model y PlaQui Client.
413 \layout Description
414
415 Nicolás\SpecialChar ~
416 Dimov PlaQui Constructor.
417 \layout Standard
418
419 Obviamente en algunas circunstancias algún integrante aporto al desarrollo
420  de un módulo que no le estaba asignado.
421  La documentación fue realizada y revisada entre todos los integrantes.
422 \layout Chapter
423
424 Inconvenientes Encontrados.
425 \layout Section
426
427 Servidor.
428 \layout Standard
429
430 El Servidor trajo varios problemas, en especial en cuanto al manejo de 
431 \emph on 
432 sockets
433 \emph default 
434  y 
435 \emph on 
436 threads
437 \emph default 
438 .
439  El uso de señales (para hacer el servidor orientado a eventos) dio también
440  algunos problemas menores.
441 \layout Subsection
442
443
444 \emph on 
445 Threads
446 \emph default 
447 .
448 \layout Standard
449
450 El principal problema de los threads fue el no poder saber fácilmente donde
451  se producía un error, en especial cuando el error venía por la falta de
452  un 
453 \emph on 
454 mutex
455 \emph default 
456 .
457  En términos generales, cada vez que el server tenía una violación de segmento
458  se debía a la falta de un 
459 \emph on 
460 mutex
461 \emph default 
462 .
463 \layout Standard
464
465 Otro problema eran las excepciones no manejadas dentro del método 
466 \family typewriter 
467 real_run()
468 \family default 
469  (que se ejecuta en su propio 
470 \emph on 
471 thread
472 \emph default 
473 ).
474  Aunque se incluía un bloque 
475 \family typewriter 
476 try ; catch
477 \family default 
478  en el programa principal, al ocurrir una excepción en un 
479 \emph on 
480 thread
481 \emph default 
482 , dicha excepción no 
483 \emph on 
484 sube
485 \emph default 
486  hasta el hilo padre y el programa sale con 
487 \family typewriter 
488 abort()
489 \family default 
490 .
491  Es por esto que cada 
492 \family typewriter 
493 real_run()
494 \family default 
495  tiene su propio bloque 
496 \family typewriter 
497 try ; catch
498 \family default 
499  donde pueda surgir una excepción y se incluyó la 
500 \family typewriter 
501 signal_error()
502 \family default 
503  en 
504 \family typewriter 
505 Runnable
506 \family default 
507  para poder avisar de dicho error a quien lo necesite.
508 \layout Subsection
509
510
511 \emph on 
512 Sockets
513 \emph default 
514 .
515 \layout Standard
516
517 El principal problema con los 
518 \emph on 
519 sockets
520 \emph default 
521  fue la imposibilidad (por enunciado) de usar 
522 \emph on 
523 sockets
524 \emph default 
525  no bloqueantes.
526  Esto tuvo particular repercusión en el 
527 \family typewriter 
528 TCPServer
529 \family default 
530 , ya que una vez llamado al 
531 \family typewriter 
532 accept()
533 \family default 
534  para aceptar una nueva conexión, esta no retorna hasta que efectivamente
535  se reciba una nueva conexión, haciendo imposible terminar el servidor de
536  otra manera.
537  Para resolver esto, al finalizar el 
538 \family typewriter 
539 TCPServer
540 \family default 
541  se hace una 
542 \emph on 
543 conexión suicida
544 \emph default 
545  para hacer que la llamada a 
546 \family typewriter 
547 accept()
548 \family default 
549  retorne y el servidor pueda ser cerrado limpiamente.
550 \layout Subsection
551
552 Señales.
553 \layout Standard
554
555 La señales no dieron mayores problemas.
556  El único inconveniente es que complican la depuración del programa, ya
557  que uno no sabe de antemano quien las atenderá y se hace difícil seguir
558  el flujo del mismo.
559 \layout Subsection
560
561 Falencias.
562 \layout Standard
563
564 El Server está preparado para servir (y simular) una cantidad indeterminada
565  de plantas.
566  Por problemas de tiempo esto no se llegó a implementar correctamente en
567  el programa, en particular por la complicación que traería implementar
568  dicha función en el cliente.
569 \layout Section
570
571 Constructor.
572 \layout Standard
573
574 A lo largo del desarrollo nos hemos encontrado con diferentes tipos de problemas
575  los cuales pudieron ser solucionados, en su mayoría, de una forma aceptable.
576  
577 \layout Standard
578
579 Al trabajar con imágenes independientes, las verificaciones sobre cada una
580  de estas, dependen mucho de su posición en el área de trabajo y su orientación.
581  Esto provoca que haya que realizar demasiadas validaciones para los diferentes
582  tipos de verificaciones, y trae apareados problemas en la codificación
583  por el uso de gran cantidad de coordenadas.
584 \layout Standard
585
586 Otro inconveniente no solucionado, fue que las imágenes de cada elemento
587  que se coloca sobre la grilla se crean tantas veces como elementos de ese
588  tipo haya.
589  La idea en un principio fue crear todas estas imágenes estáticas, de modo
590  que para un elemento de cuatro imágenes, se cargarían en memoria solamente
591  esas cuatro imágenes y luego los elementos iguales apuntarían su imagen
592  actual a la que corresponda.
593  Esto no pudo ser solucionado pues no encontramos la forma de inicializar
594  las imágenes de manera estática, se producían errores en el momento del
595  linkeo.
596 \layout Standard
597
598 Por problemas de tiempo, hubo algunas implementaciones sobre el Constructor
599  luego de cerrado el tema de la documentación, por ejemplo, el Constructor
600  pregunta si quiere guardar el trabajo antes de salir del programa.
601  Esto no fue documentado.
602 \layout Section
603
604 Cliente.
605 \layout Standard
606
607 El principal problema del cliente fueron los 
608 \emph on 
609 threads
610 \emph default 
611 .
612  El asunto fue descubrir la forma de hacer que las actualizaciones de refresco
613  de las propiedades y la creación dinámica de objetos sea 
614 \emph on 
615 thread-safe
616 \emph default 
617  para garantizar a la Gtk+ cierta estabilidad.
618  Luego de mucho leer se encontró el 
619 \family typewriter 
620 Glib::Distpatcher
621 \family default 
622 , que es un evento asíncrono especialmente diseñado para comunicación entre
623  hilos.
624 \layout Section
625
626 Modelo.
627 \layout Standard
628
629 El Modelo tenía la complicación de la Union.
630  Este elemento es complicado ya que para poder saber el estado a su salida
631  se necesitaba saber el estado a sus 2 entradas, y esta información llegaba
632  en forma asíncrona.
633  Luego de mucho diseño, análisis de todas las combinaciones posibles entre
634  las entradas se llego a un método que resulto exitoso en la mayoría de
635  las pruebas y fue adoptado como definitivo.
636 \layout Standard
637
638 Otro inconveniente fue la suma de colores.
639  El ejemplo dado en el enunciado no era para nada correcto.
640  Para solucionar esto nos pusimos en contacto con Nicolás Reyna, estudiante
641  de diseño industrial en la Universidad de La Plata, quien tiene un conocimiento
642  mayor al nuestro acerca del comportamiento de los colores aditivos y su
643  distribución RGB.
644  En base a sus recomendaciones hicimos las sumas de colores en los distintos
645  objetos.
646 \layout Standard
647
648 Por último, al verificarse la validez del conexionado de un archivo XML
649  de planta en el Constructor, el Modelo no vuelve a realizar el chequeo,
650  por lo que si se quiere levantar una planta desde un XML invalido los resultado
651 s son impredecibles.
652 \layout Chapter
653
654 Conclusiones.
655 \layout Standard
656
657 Se reforzaron los conocimientos en programación C++ y la programación orientada
658  a objetos.
659  El modelo utilizado aplica fuertemente estos conceptos, motivo por el cual
660  no fue necesario utilizar un grafo para verificar los flujos por el circuito
661  creado.
662 \layout Standard
663
664 El programa de desarrollo de interfaces Glade-2, y las bibliotecas Gtk+
665  y Glademm facilitaron mucho la creación del Cliente y el Constructor, y
666  nos hemos familiarizado con sus prestaciones, para crear aplicaciones visuales.
667  
668 \layout Standard
669
670 Contamos con la ayuda del subversion y una lista de correos pudimos trabajar
671  a distancia cómodamente, lo cual facilitó muchísimo las cosas y permitió
672  que los tres integrantes del equipo pudiéramos contar con la totalidad
673  del proyecto en todo momento, pudiendo conocer el trabajo de los demás
674  y al mismo tiempo reportar 
675 \emph on 
676 bugs
677 \emph default 
678  o complementar el trabajo de otro.
679  En todo momento estuvimos actualizados sobre el desarrollo.
680  Cabe mencionar que necesitamos juntarnos solamente una vez para distribuirnos
681  las tareas.
682  El resto del trabajo práctico se realizó a distancia.
683 \layout Standard
684
685 Nos ha parecido muy importante haber hecho todo el trabajo con ayuda de
686  herramientas comunes de desarrollo de Software Libre, las cuales dejaron
687  un producto final de una calidad igual o superior a cualquier otro entorno
688  de desarrollo de aplicaciones, sobre todo las aplicaciones visuales que
689  aprovechan un excelente trabajo de la GTK+ que suma un valor agregado como
690  la posibilidad de cambiar la apariencia de la aplicación a través de 
691 \emph on 
692 themes
693 \emph default 
694 , sin costo alguno.
695  Esto también nos permitió hacer un trabajo práctico usando 100% software
696  legal, cosa que incluso grandes empresas no pueden realizar en muchos casos
697  (ni hablar un estudiante).
698 \layout Standard
699
700 La documentación online generada con el Doxygen, si es bien utilizado, queda
701  muy completa y es muy fácil realizar una búsqueda con la ayuda de un navegador.
702  Esto puede comprobarse con la documentación online de la biblioteca Gtkmm
703  (
704 \family typewriter 
705 www.gtkmm.org
706 \family default 
707 ).
708  La documentación en formato HTML del proyecto se encuentra en el CD y en
709  
710 \family typewriter 
711 http://www.llucax.hn.org/plaqui/docs/html/
712 \family default 
713 .
714 \layout Standard
715
716 Hubo algunas ideas que no pudieron ser implementadas por cuestión de tiempo,
717  y la documentación estaba programada para realizarse en cuatro días, pero
718  tres días antes de la entrega nos enteramos que debíamos entregar el Martes,
719  siendo que nosotros cursábamos los Jueves, lo que redujo el tiempo de documenta
720 ción a sólo dos días.
721  Aún así creemos que se logró hacer un trabajo muy completo de documentación,
722  en parte gracias a Doxygen (como se dijo antes) porque a medida que íbamos
723  escribiendo el código lo íbamos documentando en línea.
724 \layout Standard
725
726 En general estamos muy conformes con el trabajo y la forma en la cuál fue
727  realizado, cumplimos los requisitos pedidos por el enunciado y creemos
728  que lo hicimos de una manera correcta.
729 \layout Standard
730
731 El proyecto completo es entregado en un CD que puede ser leído desde cualquier
732  sistema operativo en cualquier tipo de lectora, pero también es un CD 
733 \emph on 
734 booteable
735 \emph default 
736  con lo cual no es necesario ni siquiera tener un sistema operativo instalado
737  o un disco rígido para poder operar el PlaQui.
738  Basta activar la opción de 
739 \emph on 
740 booteo
741 \emph default 
742  desde el CD en el 
743 \emph on 
744 BIOS
745 \emph default 
746  y colocar el CD.
747 \the_end