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