19 de junio de 2010

Nuestro Proyecto

Las imagenes de nuestro proyecto las subimos al siguiente enlace , aca hay unos preview

http://rapidshare.com/files/400796521/secuencia_de_imagenes_de_funcionamiento_aplicacion.docx.html















7. Framework y lecciones aprendidas

¿Qué es Symfony?
El framework symfony es un conjunto de relacionados, pero independientes sub-frameworks, que forman un completo framework MVC (Modelo, Vista, Controlador). Antes de la codificación inicial, nos tomamos un tiempo para leer la historia y la filosofía de symfony. Entonces, comprobamos del framework sus requisitos previos y usamos el script check_configuration.php para validar tu configuración.
Finalmente, instalamos symfony. Después de algún tiempo también desearás actualizar a la última versión del framework.
El framework también proporciona herramientas para facilitar el despliegue.
El Modelo
La parte del Modelo de symfony se puede hacer con la ayuda del ORM Doctrine. Basado en la descripción de la base de datos, esta genera las clases para los objetos, formularios, y filtros. Doctrine también genera las sentencias SQL utilizada para crear las tablas en la base de datos. La configuración de la base de datos se puede hacer con una tarea o editando un archivo de configuración. Además de su configuración, también es posible hacer la inyección inicial de datos, gracias a los archivos de datos. Puede incluso hacer que estos archivos sean dinámicos.
Los objetos Doctrine también puede ser fácilmente internacionalizados.
La Vista
De forma predeterminada, la capa de la Vista de la arquitectura MVC utiliza archivos PHP planos como plantillas.
Las plantillas puede utilizar helpers para tareas recurrentes como crear una URL o un enlace. Una plantilla puede ser decorada por un layout para abstraerse del encabezado y pie de las páginas. Para hacer vistas aún más reutilizables, puedes definir slots, partials, y componentes.
Para acelerar las cosas, puedes utilizar el sub-framework del cache para guardar en cache una página entera, solo la acción, o tan solo partials o componentes. También puedes eliminar el cache manualmente.


El Controlador
La parte del Controlador es gestionado por controladores frontales y acciones.
Las tareas se puede utilizar para crear simples módulos, módulos CRUD, o aun para generar completos y funcionales módulos admin para las clases del modelo.
Los módulos admin te permiten construir una aplicación completamente funcional sin codificación alguna.
Para abstraer la implementación técnica de un sitio web, symfony utiliza un sub-framework enrutamiento que genera URLs amigagles. Para hacer la implementación de servicios web aún más fácil, symfony soporta formatos en forma nativa. También puedes crear tus propios formatos.
Una acción puede ser reenviada a otra, o redirigida.

La Configuración
El framework symfony hace que sea fácil tener diferentes ajustes de configuración para distintos entornos. Un entorno es un conjunto de ajustes que permite diferentes comportamientos en los servidores de desarrollo o de producción. También puedes crear nuevos [entornos].
Los archivos de configuración de symfony puede definirse en diferentes niveles y la mayoría de ellos son conscientes del entorno:
* app.yml
* cache.yml
* databases.yml
* factories.yml
* generator.yml
* routing.yml
* schema.yml
* security.yml
* settings.yml
* view.yml

La mayoría de los archivos de configuración usan el formato YAML.
En lugar de utilizar la estructura de directorios por defecto y organizar tus archivos de aplicaciones por capas, también puedes organizarlos por función, y agruparlos en un plugin. Hablando de la estructura de directorios por defecto, también puedes personalizarla de acuerdo a tus necesidades.

La Depuración
Desde el logging hasta la la barra de herramientas de depuración web, y las significativas excepciones, symfony proporciona un montón de herramientas útiles para ayudar a los desarrolladores a depurar problemas con mayor rapidez.
Los Principales Objetos de Symfony
Los frameworks de symfony proporciona un buen número de objetos básicos que nos abstraen de necesidades recurrentes en los proyectos web: la petición, la respuesta, el usuario, el logging, las rutas, y el administrador del cache .
Estos objetos básicos son gestionados por el objetos sfContext, y que se configuran a través de las factorias.
El objeto user gestiona la autenticación, autorización, flashes, y atributos para ser guardado en la sesión.


Tomado de : http://www.symfony-project.org/jobeet/1_2/Doctrine/es/24

9. Hola mundo Symfony

6. Seguridad symfony

6. Seguridad symfony

El framework symfony tiene incorporadas protecciones contra XSS y CSRF. Estos ajustes pueden ser configurados desde la línea de comandos, o la edición de un archivo de configuración.El framework de formularios proporciona características incorporadas de seguridad.
Symfony en sus inicios tuvo muchos problemas de seguridad, y tenía grandes cambios versión a versión en cuanto al manejo de la seguridad. En mayo de 2008 se modificó su política de seguridad tras un grave agujero de seguridad que tardó demasiado tiempo en corregirse. Hoy en día Symfony incluye numerosas estrategias y utilidades para hacer frente a los ataques XSS y CSRF.
Symfony para el manejo de la seguridad recomiendo mantener actualizado su sistema.
Se pueden encontrar las actualizaciones del sistema en la siguiente página, los desarrolladores de symfony encuentras problemas o bugs como SQL INYECTION o problemas particulares de tipo y realizan una actualización.

http://www.symfony.es/categoria/seguridad/

5. Descripción del FrameWork de desarrollo web SYMFONY MVC

Anteriormente se dijo que el patrón MVC es un estilo de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos, y con base en esto el framwork de desarrollo Symfony cuenta con una abstracción donde se conoce con nombres diferentes a las distintas capas de este patrón.
En el framework symfony las distintas funcionalidades son creadas en modulos dentro de la aplicación web, cada modulo ofrecerá un servicio en particular y su creación estará estructurada en una carpeta con el nombre del modulo, dentro de esta por lo general hay dos carpetas denominadas actions y templates.
Un modulo se compone de un controlador frontal, un layout donde se ubica el código HTML y el código de la acción, es en el que se encuentra la información del acceso a la base de datos.
En el transcurso de la evolución del proyecto se tuvo que trabajar en la abstracción, para usar el patrón MVC con symfony, sobretodo en la construcción del chat ya que fue creado sin ayuda de ningún plugin, aprendiendo a realizar el acceso a la base de datos necesario y el código html y las diferentes acciones para dar por concebido el chat del GROUPWARE para el grupo IDIS.

PATRONES ARQUITECTURALES QUE SE UTILIZARON
En el desarrollo del proyecto para construir un GRUOPWARE para el grupo IDIS, empleamos el patrón MVC como ya se dijo anteriormente, ya que el framework adopta este patrón y es un patrón bastante útil al momento de separa la lógica del negocio de la parte de la presentación y demás artefactos necesarios en la aplicación, MVC es un patrón de alto nivel. Además el proyecto de creación GROUPWARE se hizo uso del patrón controlador de frente ya que se hacia el llamado del modulo y la acción correspondiente, dicho patrón maneja la lógica recibiendo las solicitudes del servidor para analizarles y según sea el caso delega la acción requerida. Además se empleo el patrón de información solicitada al momento de realizar la autenticación de usuarios al solicitar la información del usuario en particular, dependiendo de los privilegios con los que cuente el usuario en cuestión y existirá un menú para el usuario administrador y para el usuario miembro del grupo IDIS, al igual que la solicitud de datos en el chat.

4. METODOLOGÍA DE DESARROLLO APLICADA AL PROYECTO DE CREACIÓN DE UN SISTEMA GROUPWARE PARA EL GRUPO IDIS DE LA UNIVERSIDAD DEL CAUCA

Anteriormente se comentó que la metodología adoptada en el desarrollo de la aplicación Groupware para el grupo de investigación conocido como GRUPO IDIS, de la universidad del Cauca fue XP(PROGRAMACION EXTREMA), que fue una metodología de desarrollo muy apropiada debido al poco tiempo disponible, en esta ocasión durante la etapa de culminación del proyecto se conservaron los roles asignados anteriormente, debido a los buenos resultados arrojados en la anterior etapa no se realizaron modificaciones en los roles pero se debió de intensificar el trabajo durante los últimos días aun excediendo los horarios establecidos, de tal forma que si se había fijado trabajar jornadas diarias de 3-4 horas, se trabajó jornadas de 8 horas diarias en los últimos 3 días previos a la fecha de entrega del proyecto, puesto que surgieron inconvenientes en la construcción de los módulos que comprenden el chat y el calendario manejador de eventos.
Dentro del plan de trabajo establecido en el cronograma de actividades se logró construir la libreta de direcciones, donde Héctor Alcázar, programo la mayoría de las funcionalidades de esta, con ayuda de Vanessa y José Luis se llevaron a cabo los últimos detalles de este modulo, en las funcionalidades del chat y el calendario de eventos, se planeo dar solución con mudulos ya creados por el soporte de symfony frameowork , pero lamentablemente al momento de aplicarles al proyecto que se estaba construyendo , surgió la problemática que no era posible realizar con éxito dicha incorporación a la aplicación en construcción, por lo que se recomienda para futuros proyectos de desarrollo con ayuda del framework symfony el realizar un muy buen estudio de las funcionalidades que se desean incorporar a la aplicación ya que de no hacerlo sufrirán las consecuencias, en nuestro caso la mitología de desarrollo ayudo bastante para soportar los tropiezos con la planificación, pero se debe de buscar módulos de symfony bastante trabajados ya que de no ser así se deberán de concebir las distintas funcionalidades, paso a paso y no se aprovechara al máximo las bondades del framework symfony.
La metodología sugirió que las integrantes del grupo con mayores afinidades en las distintas necesidades fuera el encargado de tal responsabilidad, en este caso en el área de desarrollo se traba de forma conjunta donde todos los miembros trabajan en el desarrollo del código para la aplicación, nuestro desarrollador principal es Héctor Alcázar, Vanessa agredo se encarga de la planificación de actividades labores como pruebas son realizadas por José Luis Martínez entre otras tareas que son asumidas por los diferentes integrantes del grupo, el desarrollo fue manejado en conjunto debido a la naturaleza de symfony que no permite crear carpetas y archivos manualmente, copiar y pegar módulos creados en otros equipos, ya que symfony trabaja con la consola que con unas cuantas líneas de comando incorpora módulos completos a la aplicación, y basta con personalizar los módulos creados es por esta razón que se debió trabajar la creación de las distintas funcionalidades en conjunto, sin dejar de lado los roles de pruebas ,programación de actividades y demás para trabajar según la responsabilidad asignada en un principio.
La experiencia es bastante gratificante gracias a que el trabajo con este grupo de trabajo es bien distribuido y se trabajó a gusto, se debe tener en cuenta que al momento de querer trabajar en un determinado proyecto de desarrollo la escogencia de un framework de desarrollo y metodología de desarrollo marca una trayectoria bastante grande en la realización del mismo y de acuerdo con lo anterior se tendrá éxito más fácilmente o no, con cualquier framework de desarrollo se puede dar solución a la construcción de una aplicación en particular, pero es claro que cada herramienta y cada mitología de desarrollo aporta funcionalidades a cada proyecto.

Instalación de Symfony:



Symfony es un completo framework diseñado para optimizar el desarrollo de las aplicaciones web mediante algunas de sus principales características. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web. Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.

Symfony está desarrollado completamente con PHP 5. Ha sido probado en numerosos proyectos reales y se utiliza en sitios web de comercio electrónico de primer nivel. Symfony es compatible con la mayoría de gestores de bases de datos, como MySQL, PostgreSQL, Oracle y Microsoft SQL Server. Se puede ejecutar tanto en plataformas *nix (Unix, Linux, etc.) como en plataformas Windows.






Instalación Symfony 1.4 – Ubuntu - Readme

1. Requerimientos mínimos

· Apache

· MySql

· PHP 5.2.4 o posterior

Nos fijamos a través de synaptic que estos estén instalados, si no es así, los instalamos.

2. Descarga de Symfony:

- Vamos a:

www.symfony-project.org

En la sección “installation” descargamos el source de symfony 1.4 y descomprimimos.

3. Otros Requerimientos:

- A través de la consola nos ubicamos en la carpeta del symfony, después en data y después en bin.

Una vez en esa ubicación ejecutamos la línea:

php check_configuration.php

Esta, nos mostrara otros requerimientos para un mejor funcionamiento de symfony y nos dirá como suplir estos mismos.

********************************

* *

* symfony requirements check *

* *

********************************

php.ini used by PHP: /etc/php5/cli/php.ini

** Mandatory requirements **

OK PHP version is at least 5.2.4 (5.2.10-2ubuntu6.4)

** Optional checks **

OK PDO is installed

OK PDO has some drivers installed: mysql

OK PHP-XML module is installed

OK XSL module is installed

OK The token_get_all() function is available

OK The mb_strlen() function is available

OK The iconv() function is available

OK The utf8_decode() is available

OK The posix_isatty() is available

[[WARNING]] A PHP accelerator is installed: FAILED

*** Install a PHP accelerator like APC (highly recommended) ***

OK php.ini has short_open_tag set to off

OK php.ini has magic_quotes_gpc set to off

OK php.ini has register_globals set to off

OK php.ini has session.auto_start set to off

OK PHP version is not 5.2.9

En este ejemplo nos muestra que falta un acelerador php y nos recomienda instalar APC, una vez instalado el apc el archivo queda así:

********************************

* *

* symfony requirements check *

* *

********************************

php.ini used by PHP: /etc/php5/cli/php.ini

** Mandatory requirements **

OK PHP version is at least 5.2.4 (5.2.10-2ubuntu6.4)

** Optional checks **

OK PDO is installed

OK PDO has some drivers installed: mysql

OK PHP-XML module is installed

OK XSL module is installed

OK The token_get_all() function is available

OK The mb_strlen() function is available

OK The iconv() function is available

OK The utf8_decode() is available

OK The posix_isatty() is available

OK A PHP accelerator is installed

OK php.ini has short_open_tag set to off

OK php.ini has magic_quotes_gpc set to off

OK php.ini has register_globals set to off

OK php.ini has session.auto_start set to off

OK PHP version is not 5.2.9

4. Otras Configuraciones:

Para hacer pruebas como mínimo debemos tener bien configurado el apache y que este se encuentre corriendo.

Basta con modificar el archivo httpd.conf el cual se encuentra en /etc/apache2/httpd.conf

agregando las siguientes líneas al final:

# Be sure to only have this line once in your configuration

NameVirtualHost 127.0.0.1:8080

# This is the configuration for your project

Listen 127.0.0.1:8080

DocumentRoot "/home/sfproject/web"

DirectoryIndex index.php

"/home/sfproject/web">

AllowOverride All

Allow from All

Alias /sf /home/sfproject/lib/vendor/symfony/data/web/sf

"/home/sfproject/lib/vendor/symfony/data/web/sf">

AllowOverride All

Allow from All


Las ubicaciones puestas en rojo deben apuntar a la carpeta web del proyecto symfony que se va a crear, las ubicaciones en verde deben apuntar a la carpeta sf del symfony que descargamos.

Ejecutamos para reiniciar apache:

sudo /etc/init.d/apache2 restart

5. Ejecución y pruebas:

a) Creación de un Proyecto (lÍnea):

symfony generate:project ProyectoPrueba

b) Creación de una aplicación:

symfony generate:app AplicacionPrueba

c) Creación de un módulo:

symfony generate:module AplicacionPrueba ModuloPrueba

6. Probar.

Accedemos desde un navegador web, escribiendo en el espacio de direcciones:

http:// 127.0.0.1:8080

Aquí se encuentra el index de la aplicación podemos ver que el proyecto ha sido creado con éxito.







3. Descripción de las técnicas de evaluación de usabilidad y desempeño que fueron aplicadas.

Para evaluar el prototipo de Storyboard se escogió a un estudiante de Ingeniería de Sistemas de La Universidad Del Cauca, Carlos Fabián Gaviria. Primero se le presento la copia del prototipo es decir cada una de las fotos realizadas, de forma que para cada una de las opciones que se solicitaba se iba mostrando la foto correspondiente a la respuesta del sistema a su solicitud. Luego de una hora de interacción con el prototipo se le realizó una entrevista para saber la opinión y la impresión en cuanto a lo que había visto e interactuado con el prototipo. Se realizó una entrevista realizada por el equipo de trabajo, que se fueron haciendo con el ánimo de evaluar elementos claves de usabilidad, y obteniendo así una retroalimentación de la interacción y ciertas sugerencias para su mejoramiento, permitiendo realizar una mejor CSS, teniendo en cuenta las sugerencias y las críticas realizadas.






Para evaluar esta simulación, se escogió al Ingeniero Pablo Mage quien mediante la experiencia de pensando en voz alta (Thiking Aloud), y realizo una serie de aportes con respecto al prototipo de aplicación generado por el equipo de desarrollo.
La evaluación del prototipo de software también lo realizó un estudiante del departamento de sistemas de la Universidad del Cauca: Mauricio Domínguez Díaz del Castillo, quien cursa actualmente octavo semestre.
Primero se les presentó la copia del prototipo, es decir se le entrego la plantilla, en donde se pretendió mostrar las funcionalidades de la aplicación para cada usuario que debía acceder al sistema. De manera que la aplicación permitía acceder a través de links a cada funcionalidad, y así quienes evaluaban la aplicación comentaba en voz alta lo que pensaba, sus impresiones y preferencias según lo que percibían según su interacción con la aplicación.
Obteniendo de esta evaluación por test, recomendaciones, sugerencias y correcciones que se comentaron en voz alta.



Cada una de las interfaces que se iban generando luego de cada una de las iteraciones se fue evaluando por los miembros del equipo, de forma que se dieran observaciones y se plantearan mejoras a posibles fallas que no se hallan tenido en cuenta a la hora del diseño y desarrollo de cierto módulo de la aplicación, esto se hizo a través de pruebas continuas, de introducción de información al sistema, para probar la validez de los resultados que arrojaba luego de una transacción realizada sobre esta.

Correcciones de ubicación de ciertos objetos, de facilidad de acceso a la página, de falta de información relevante solicitada para llenar formularios, conocimiento de errores a la hora de ser cometidos (ubicación y descripción), facilidad de acceso a las diferentes tareas ofrecidas por el sistema, fueron observaciones que se tuvieron como conclusión luego de las evaluaciones realizadas tanto a los prototipos en papel como a los prototipos funcionales que se evaluaron.

Las interfaces que se basaron desde aplicaciones tomadas desde internet, implementadas en php fueron probadas desde los prototipos que estaban como muestra en cada una de las páginas desde las que se tomó el código, de manera que se ibatesteando lo que servía y lo que no para nuestra aplicación, para luego de esto modificar y adaptarlo para que cumpliera con los requisitos propuestos para la realización del GroupWare del grupo de investigación IDIS de la Universidad del Cauca.

2. Descripción de las técnicas de prototipado utilizadas para la Interfaces Gráficas de Usuario

El estudio de crear un prototipo inicial para las interfaces graficas de usuario se realizó para evaluar la facilidad de uso del Sistema Groupware para pequeñas organizaciones. El principal objetivo era determinar si un usuario que nunca había utilizado el sistema era capaz de completar las tareas solicitadas sin necesidad de ayuda o asesoría por parte del equipo de desarrollo y conocer lo que un usuario siente y lo que piensa del prototipo desarrollado.

El sistema está diseñado para permitir a los integrantes del grupo de investigación IDIS de la Universidad Del Cauca, comunicarse, coordinarse entre ellos para trabajar de manera efectiva en la consecución de objetivos comunes. Un sistema basado en computadores que soportan tareas comunes (u objetivos) de grupos de personas, con una interfaz a un entorno compartido. Entre las operaciones disponibles se encuentran: conocer a los usuarios del sistema, coordinar tareas comunes o individuales, tener una libreta de direcciones que permitan tener todos los contactos organizados y comunicarse a través de un chat con los demás miembros del grupo. De manera que con todas estas tareas los miembros del grupo a través del sistema podrán realizar trabajos en grupo sin importar la posición geográfica en la que se encuentren y así no tengan problemas de comunicación y colaboración.

Teniendo en cuenta que el prototipado y la evaluación son parte básica en el proceso de diseño de un sistema centrado en el usuario, primero se procedió a realizar un prototipo inicial para el desarrollo de un sistema groupware dirigido al grupo de investigación IDIS.

Como primer prototipo en nuestro equipo de trabajo se realizó una Storyboard, diseñada con el programa PhotoShop, en el cual se hicieron diferentes proyectos en donde se incluían las interfaces, organizadas por los usuarios que acceden a la aplicación: el administrador y los miembros del grupo IDIS.

En cada una de estas interfaces se especifican las tareas que cada usuario puede realizar según la opción que este desee.

Este prototipo se realizó con todo el equipo de trabajo, de manera que todos los miembros del equipo de desarrollo conociendo los requerimientos del proyecto dieron ideas para el diseño de cada una de las interfaces y aportando opiniones y sugerencias para ello.



Teniendo presente que un CSS (Cascading Style Sheets) hojas de estilo en cascada, son un lenguaje que describe la presentación de los documentos estructurados en hojas de estilo para diferentes métodos de interpretación, es decir, describe cómo se va a mostrar un documento en pantalla.

Conociendo lo anterior, como funcionan y como se modifican para adecuarlos a nuestros requerimientos, se procedió a usar un template de CSS gratuito, y basándonos en las Storyboard representar todas las funciones que cada usuario podía acceder, teniendo muy en cuenta sugerencias, opiniones y correcciones obtenidas de la entrevista.

En nuestro equipo de trabajo se realizó la simulación, en el cual se definió una plantilla para la aplicación y se creó la simulación con los distintos roles de usuario que requiere la aplicación: el administrador y los miembros del grupo IDIS.

En cada una de estas interfaces se especifican las tareas que cada usuario puede realizar según la opción que este desee. De manera que se van mostrando cada una de estas interfaces según lo solicitado.







Para realizar la aplicación final se tomó como prototipo para la creación del chat, un chat ya realizado en php, encontrado en la web al cual se pudo acceder al código fuente que fue entregado directamente por la persona creadora, la cual se la contacto por medio de un correo, y quien muy comedidamente nos facilitó dicho código, con este se procedió a modificarlo y adecuarlo a nuestras necesidades para que fuera útil para el grupo de investigación y se pudiera acceder de forma correcta. El chat fue creado de manera que todos observaran los mensajes que se escribían en el campo para ello. Fue probado utilizando otro navegador que permitiera conectarse a la aplicación con dos usuarios diferentes y pudieran conversar por medio de este.


http://zital.no-ip.org/zitalk/


Version 2.0


Para realizar el calendario se pensó utilizar un calendario también ubicado en la red el cual permitía crear eventos según los días deseados, permitiendo tener el nombre de la actividad, el lugar donde se piensa realizar, y una descripción.

Permitía ver las fechas en diferentes formatos tanto diaria, semanal, mensual, de manera que fuera más útil para la persona que utilizara nuestro calendario.

El calendario se encuentra en http://monket.net/wiki-v2/Monket_Calendar



Por falta de tiempo el calendario no se pudo incorporar a nuestra aplicación y adecuarlo para que funcionara según lo que deseábamos, pero se pensó en seguir el anterior prototipo el cual serviría de referencia para nuestro GroupWare.