MadeInFlex
Autenticación en aplicaciones Flex con Spring Security 3
Agosto 12th, 2010 - [Enlace local]
Spring Security es un framework que se centra en proveer mecanismos de autenticación y autorización para aplicaciones basadas en Spring. Mediante el paquete de integración de Spring con BlazeDS spring-flex, conjuntamente con Spring Security, podemos añadir seguridad a nuestras aplicaciones Flex/BlazeDS.
En este artículo veremos, a través de un ejemplo, cómo podemos utilizar el mecanismo de autenticación de Spring Security desde una aplicación Flex. En la aplicación que desarrollaremos tenemos la información de los usuarios y los roles asignados a éstos en una base de datos MySQL, a la cual accederemos utilizando JPA e Hibernate. Desde Flex invocaremos el servicio de autenticación de Spring Security, el cual utilizará la información de los usuarios y roles en la base de datos para comprobar las credenciales de usuario suministradas, si el proceso termina exitosamente tendremos en la aplicación Flex la información del usuario autenticado, en caso contrario se nos notificará del error.
Para el desarrollo de la aplicación utilizaremos:
- Spring 3.0.2
- Spring Security 3.0.3
- Spring-Flex 1.5.0.M1
- BlazeDS 4.0.0.14931
- Flex 4
- Flash Builder 4 plugin en Eclipse IDE for J2EE (Galileo)
- RobotLegs 1.1.2
La aplicación la desarrollaremos en dos proyectos, un proyecto Web J2EE para el back-end y un proyecto Flex para la interface visual.
El back-end
Comenzaremos por la creación del proyecto Web J2EE
- File … Import … Web->War File
- WAR File: El camino del archivo blazeds.war
- Web Project: FlexSpringSecurity
- Target Runtime: Alguno que se haya configurado previamente
- War Import: Web Libraries. No seleccionamos ningún paquete
Copiamos en la carpeta WebContent\WEB-INF\lib los archivos de Spring, Spring Security, Spring-Flex, el driver JDBC de MySQL. El listado de los archivos de la carpeta se puede ver aquí.
Como utilizamos el paquete de integración de Spring con BlazeDS solamente necesitamos en la carpeta WebContent\WEB-INF\flex el archivo services-config.xml. También necesitamos modificar el archivo web.xml en WebContent\WEB-INF, en el que se hace referencia a los archivos web-application-config.xml y web-application-context-config.xml, donde se configura el contexto de Spring.
Comenzaremos por crear la capa que accederá a la base de datos para obtener la información de usuarios y roles.
User.java
Role.java
RoleType.java
IUserService.java
UserService.java
Escribimos ahora un código en forma de test para generar las tablas de la base de datos y llenarlas con alguna información.
UserServiceTest.java
Para la interacción entre spring-flex y Spring Security debe registrarse en el archivo web.xml el un filtro del tipo DelegatingFilterProxy.
Debemos crear una clase a través de la cual Spring Security recuperará de la base de datos la información del usuario que intenta autenticarse. Esta clase implementará la interface UserDetailsService, que tiene un único método, loadUserByUsername, el cual será invocado por el proveedor de autenticación del framework.
MyUserDetailsService.java
El objeto de tipo org.springframework.security.core.userdetails.User contiene la información que llegará a la aplicación Flex, en este caso el nombre de usuario y los roles que tiene asignados.
Ahora debemos informar a Spring Security que use nuestra clase y no la que trae el framework, esto se hace en el archivo web-application-context-config.xml, la configuración final queda como sigue:
Y finalmente de debemos informar a spring-flex (en el archivo web-application-config.xml) que utilice el servicio de autenticación de Spring Security.
La aplicación Flex
Crearemos un proyecto Flex que llamaremos FlexSpringSecurityUI con las siguientes características:
- Application Type: Web
- Flex SDK Version: Flex 4.0
- Application Server Type: J2EE
- Remote access service: BlazeDS
- RootFolder: el camino a la carpeta FlexSecurity/WebContent
- Root URL: el URL donde se desplegó el proyecto FlexSpringSecurity
- Context root: flexspringsecurity
Nuestra aplicación Flex contendrá un formulario para autenticación y un botón para entrar (login) y salir (logout).
Crearemos un objeto de tipo ChannelSet y le adicionaremos un canal de tipo AMFChannel, luego para invocar al servicio de autenticación de Spring Security desde Flex utilizaremos el método login de lal objeto ChannelSet, lo invocaremos pasándole como argumentos el nombre de usuario y la contraseña introducidos en el formulario. En esta aplicación recuperaremos el URL donde está desplegado el back-end en tiempo de ejecución, desde un archivo xml, y utilizaremos esa información para crear programáticamente el canal e insertarlo en el ChannelSet. Nos auxiliaremos del framework Robotlegs.
channels.xml
Cuando presionamos el botón “Entrar” invocamos el método login del objeto ChannelSet con la credencial del usuario:
Si la credencial de usuario no es válida obtendremos:
En caso contrario:
Más información del usuario en Flex
Con el objeto org.springframework.security.core.userdetails.User solo obtenemos información del nombre de usuario y los roles, pero casi nunca esa información es suficiente. Haremos los cambios necesarios para poder traer hacia la aplicación Flex información extra del usuario que se ha autenticado.
Primeramente debemos crear nuestra propia implementación de UserDetails y añadir toda la información que necesitemos, en nuestro caso solo añadimos el nombre completo del usuario (fullname).
AuthenticatedUser.java
Luego necesitamos crear nuestro propio interceptor de mensaje implementando MessageInterceptor. Esta clase es la encargada de extraer del resultado del proceso de autenticación la información que llegará a la aplicación Flex una vez concluido éste exitosamente.
MyLoginMessageInterceptor.java
Como vemos, esta clase hace uso de MyAuthenticationResultUtils, la cual crearemos también, y donde ocurre la creación del objeto que llegará a la aplicación Flex en la propiedad result de la clase ResultEvent.
Finalmente debemos registrar nuestro interceptor de mensaje personalizado:
Cuando nos autenticamos nuevamente obtenemos:
El código fuente de los proyectos se puede descargar aquí.
Conclusiones
Spring Security provee un mecanismo flexible de autenticación (y control de acceso) para aplicaciones basadas en Spring. En nuestra aplicación de ejemplo utilizamos JPA e Hibernate para acceder a la información de los usuarios.
Utilizando el paquete de integración de Spring con BlazeDS y Spring Security podemos implementar mecanismos de autenticación en nuestras aplicaciones Flex/BlazeDS.
» Leer más, comentarios, etc...
Joan Garnet :: Arquitectura y desarrollo RIA
Evento Flash/Flex/AIR en Barcelona
Agosto 11th, 2010 - [Enlace local]
En MadeInFlex, el grupo de usuarios de Adobe Flex en España, hemos preparado un evento presencial para el día 16 de Agosto en Barcelona.
Se trata de un evento muy especial ya que traerá a varios Adobe Flash Platform Evangelists de distintos puntos de Europa y se darán charlas acerca de los últimos avances en tecnologías Flash, Flex y AIR.
A continuación programa y pequeña bio de los ponentes: (todas las charlas serán en inglés)
Tom Krcha :: P2P with FP 10.1
![]() |
Tom lleva cerca de 10 años desarrollando en el mundo Flash. Tiene mucha experiencia en soluciones basadas en flash media streaming. Nos hablará sobre P2P con FP 10.1. Aquí está el enlace a su blog. |
Mihai Corlan :: Building Multiscreen apps
![]() |
Lleva en Adobe desde 2006 y desde junio del 2008 como Platform Evangelist sobre Flex, AIR, LCDS, BlazeDS y ColdFusion. Su charla se centrará en la construcción de aplicaciones multiscreen. El enlace de su blog. |
Mark Doherty :: Mobile development with AIR 2.5
![]() |
Mark esta centrado en plataformas móbiles y desarrollo con tecnologías Flash. Hablará del desarrollo de aplicaciones mobiles con AIR 2.5. Su blog. |
Mike Jones :: Flash CS5 and Flash Builder 4 integration
![]() |
Lleva trabajando desde 1996 con tecnologias Flash. Es experto en Flash Professional, Flash Builder, Flash Catalyst, ActionScript, Flex y AIR. Hablará sobre Flash CS5 y la integración con Flash Builder 4. Aquí os dejo el enlace de su blog. |
Michael Chaize :: Migrating from Flex 3.0 to Flex 4.0
![]() |
Trabaja en Adobe Francia desde 2006. Está centrado en la sección Entreprise (LiveCycle & Flex). Nos explicará como migrar de Flex 3.0 a Flex 4.0. Aqui os dejo el enlace de su blog. |
Dónde es y cuánto vale?
MIF onsite IV tendrá lugar en el hotel H10 Marina Barcelona: Av. Bogatell, 64-68 y es 100% gratuito para todos los inscritos.
Las conferencias serán de 16h a 19h y posteriormente se podrá charlar personalmente con los ponentes en la terraza del lugar.
Registro
El registro se hace a través de la página oficial del User Group y las plazas son limitadas.
Para registrate tienes que loguearte con tus credenciales de adobe.com y clicar en RSVP.
Os esperamos a todos!!
» Leer más, comentarios, etc...
Joan Llenas at garnet.io :: Thoughts on software development
Evento Flash/Flex/AIR en Barcelona
Agosto 11th, 2010 - [Enlace local]
En MadeInFlex, el grupo de usuarios de Adobe Flex en España, hemos preparado un evento presencial para el día 16 de Agosto en Barcelona.
Se trata de un evento muy especial ya que traerá a varios Adobe Flash Platform Evangelists de distintos puntos de Europa y se darán charlas acerca de los últimos avances en tecnologías Flash, Flex y AIR.
A continuación programa y pequeña bio de los ponentes: (todas las charlas serán en inglés)
Tom Krcha :: P2P with FP 10.1
![]() |
Tom lleva cerca de 10 años desarrollando en el mundo Flash. Tiene mucha experiencia en soluciones basadas en flash media streaming. Nos hablará sobre P2P con FP 10.1. Aquí está el enlace a su blog. |
Mihai Corlan :: Building Multiscreen apps
![]() |
Lleva en Adobe desde 2006 y desde junio del 2008 como Platform Evangelist sobre Flex, AIR, LCDS, BlazeDS y ColdFusion. Su charla se centrará en la construcción de aplicaciones multiscreen. El enlace de su blog. |
Mark Doherty :: Mobile development with AIR 2.5
![]() |
Mark esta centrado en plataformas móbiles y desarrollo con tecnologías Flash. Hablará del desarrollo de aplicaciones mobiles con AIR 2.5. Su blog. |
Mike Jones :: Flash CS5 and Flash Builder 4 integration
![]() |
Lleva trabajando desde 1996 con tecnologias Flash. Es experto en Flash Professional, Flash Builder, Flash Catalyst, ActionScript, Flex y AIR. Hablará sobre Flash CS5 y la integración con Flash Builder 4. Aquí os dejo el enlace de su blog. |
Michael Chaize :: Migrating from Flex 3.0 to Flex 4.0
![]() |
Trabaja en Adobe Francia desde 2006. Está centrado en la sección Entreprise (LiveCycle & Flex). Nos explicará como migrar de Flex 3.0 a Flex 4.0. Aqui os dejo el enlace de su blog. |
Dónde es y cuánto vale?
MIF onsite IV tendrá lugar en el hotel H10 Marina Barcelona: Av. Bogatell, 64-68 y es 100% gratuito para todos los inscritos.
Las conferencias serán de 16h a 19h y posteriormente se podrá charlar personalmente con los ponentes en la terraza del lugar.
Registro
El registro se hace a través de la página oficial del User Group y las plazas son limitadas.
Para registrate tienes que loguearte con tus credenciales de adobe.com y clicar en RSVP.
Os esperamos a todos!!
» Leer más, comentarios, etc...
MadeInFlex
Más sobre el MIF onsite IV
Agosto 10th, 2010 - [Enlace local]
Publicamos un nuevo post para daros más información sobre el MIF onsite 4, que como ya sabeis, tendrá lugar el próximo 16 de Agosto en Barcelona. A continuación os amplio la información.
Como ya publicamos hace días, en esta ocasión tendremos la suerte de contar con Adobe Platform Evangelists de distintos puntos de Europa.
La nueva información que aportamos con este post es que ya conocemos los ponentes y el contenido de sus charlas. Teneis a continuación el listado de los ponentes y de que hablará cada uno de ellos:
Tom Krcha
![]() |
Tom lleva cerca de 10 años desarrollando en el mundo Flash. Tiene mucha experiencia en soluciones basadas en flash media streaming. Nos hablará sobre P2P con FP 10.1. Aquí está el enlace a su blog. |
Mihai Corlan
![]() |
Lleva en Adobe desde 2006 y desde junio del 2008 como Platform Evangelist sobre Flex, AIR, LCDS, BlazeDS y ColdFusion. Su charla se centrará en la construcción de aplicaciones multiscreen. El enlace de su blog. |
Mark Doherty
![]() |
Mark esta centrado en plataformas móbiles y desarrollo con tecnologías Flash. Hablará del desarrollo de aplicaciones mobiles con AIR 2.5. Su blog. |
Mike Jones
![]() |
Lleva trabajando desde 1996 con tecnologias Flash. Es experto en Flash Professional, Flash Builder, Flash Catalyst, ActionScript, Flex y AIR. Hablará sobre Flash CS5 y la integración con Flash Builder 4. Aquí os dejo el enlace de su blog. |
Michael Chaize
![]() |
Trabaja en Adobe Francia desde 2006. Está centrado en la sección Entreprise (LiveCycle & Flex). Nos explicará como migrar de Flex 3.0 a Flex 4.0. Aqui os dejo el enlace de su blog. |
Os recuerdo que el MIF onsite tendrá lugar en el hotel H10 Marina Barcelona: Av. Bogatell, 64-68.
El registro se hace a través de este enlace y las plazas son limitadas.
a ver si con esta información animamos a los indecisos
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering / Project Management
Informe Anual de Sueldos y Salarios IT
Agosto 9th, 2010 - [Enlace local]
Un informe muy completo de los sueldos que prevalecen en México en el área de TI vía Informationweek
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
CP/M en vivo
Agosto 8th, 2010 - [Enlace local]
Ya os hablé hace bastante tiempo de CP/M (Control Program for Microcomputers), lo que hoy os traigo es un video de alta calidad, que muestra brevemente su funcionamiento.
Si no lo pudisteis disfrutar en su día, os va a servir para haceros una idea más clara de como era, y sobretodo, para valorar justamente la innovación que aportara hoy hace casi 35 años, en 1975.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación
CP/M en vivo
Agosto 8th, 2010 - [Enlace local]
Ya os hablé hace bastante tiempo de CP/M (Control Program for Microcomputers), lo que hoy os traigo es un video de alta calidad, que muestra brevemente su funcionamiento. Si no lo pudisteis disfrutar en su día, os va a servir para haceros una idea más clara de como era, y sobretodo, para valorar justamente la [...]Artículos relacionadosWorkbench 3.1 en vivo
Windows 3 en vivo
Actualización del idioma español de SPHPBLOG
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering / Project Management
Computo en la nube / Cloud Computing
Agosto 6th, 2010 - [Enlace local]
Definitivamente es una revolución este tema pero ¿como esta posicionado uno de los jugadores mas importantes de software en este ámbito?, bueno Luis Daniel Soto presenta varios números que nos dan una idea de la estrategia del Gigante de Software Microsoft
» Leer más, comentarios, etc...
Monocaffe
No más JavaScript!
Agosto 5th, 2010 - [Enlace local]
Bienvenido CoffeScript
Hace poco tuvo lugar OSCON y uno de los eventos más populares fue el Emerging Languages Camp donde muchas personas muy inteligentes dieron distintas presentaciones sobre nuevos lenguajes de programación, buenas practicas, patrones, etc. Por lo que después de ver las distintas presentaciones obvias como la de PyPy y Clojure me llamo la atención CoffeScript.CoffeScript permite, utilizando una sintaxis muy parecida a la de Python, generar código JavaScript. Por ejemplo, una de las cosas que odio a muerte de JavaScript es su supuesto soporte de objetos. Veamos como se hace con CoffeScript:
class Animal
constructor: (@name) ->
move: (meters) ->
alert @name + " moved " + meters + " meters"
class Person extends Animal
move: (meters) ->
super(meters)
walk: (steps) ->
this.move(0.6 * steps)
me = new Person "Ale"
me.walk(10)
El código JavaScript generado es el siguiente:
var Animal, Person, me;
var __extends = function(child, parent) {
var ctor = function(){};
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.prototype.constructor = child;
if (typeof parent.extended === "function") parent.extended(child);
child.__superClass__ = parent.prototype;
};
Animal = function(_a) {
this.name = _a;
return this;
};
Animal.prototype.move = function(meters) {
return alert(this.name + " moved " + meters + " meters");
};
Person = function() {
return Animal.apply(this, arguments);
};
__extends(Person, Animal);
Person.prototype.move = function(meters) {
return Person.__superClass__.move.call(this, meters);
};
Person.prototype.walk = function(steps) {
return this.move(0.6 * steps);
};
me = new Person("Alex");
me.walk(10);
Ugh!
» Leer más, comentarios, etc...
4 bits blog
Los formularios en django
Agosto 5th, 2010 - [Enlace local]
Después de ver las vistas de django y los modelos de django, toca ver cómo crear formularios web para poder interactuar con los datos de la aplicación.
La clase Forms de django
Los formularios en django son clases que heredan la clase Forms del módulo django.forms, las partes más interesantes de este módulo son los:
- Widgets: son los elementos que forman un formulario, por ejemplo: un cuadro para la introducción de texto (
). - Campos: Son clases que representan el tipo de datos que tendrán las diferentes partes del formulario, de modo que al enviar el formulario se validarán que se introducirán ese tipo de datos. Por ejemplo:
CharFieldindicará un campo de texto (como se puede ver es similar a los datos de los modelos).
Además, los campos se transforman automáticamente en widgets que tienen asociados de forma predeterminada, o indicándoles el widget que se quiere usar.
En el caso que se ha venido realizando en estos posts, un formulario para introducir los datos del usuario podría ser:
# forms.py
#-*- coding: utf-8 -*-
from django import forms
class FormularioUsuario (forms.Form):
"""Formulario para guardar un usuario en la base de datos."""
nombre = forms.CharField (max_length=40)
apellidos = forms.CharField (max_length=40)
email = forms.EmailField ()
Este formulario se podrá utilizar en la vista correspondiente de modo que cualquiera pueda introducir los datos de un usuario y que la vista los procese para guardarlos en la base de datos.
Utilizando el formulario en una vista de django
Una vez creado el formulario se podrá utilizar desde una vista, de modo que se puedan recibir y validar los datos que alguien introduzca en dicho formulario. En el caso de ejemplo se podría tener una vista para guardar nuevos usuarios:
# views.py
# -*- coding: utf-8 -*-
from proyecto.aplicación.forms import FormularioUsuario
from proyecto.aplicación.models import Usuario
from django.shortcuts import render_to_response
def guardar_usuario (request):
"""Guarda los datos de un usuario en la base de datos."""
# Se ha enviado el formulario utilizando POST
if request.method == 'POST':
# Se consiguen los datos del formulario
form = FormularioUsuario (request.POST)
# Se validan los campos del formulario
if form.is_valid():
usuario = Usuario ()
# Se consiguen los datos filtrados del formulario
usuario.nombre = form.cleaned_data['nombre']
usuario.apellidos = form.cleaned_data['apellidos']
usuario.email = form.cleaned_data['email]
try:
usuario.save ()
# Se redirecciona a la página que confirma que
# se ha guardado el usuario
return HttpResponseRedirect ('/usuario/guardado/')
# No se ha podido guardar
except:
return HttpResponseRedirect ('/usuario/incorrecto/')
# Algún dato del formulario es incorrecto
else:
# Se crea un formulario vacío
form = FormularioUsuario ()
# Se vuelve a la página del formulario
return render_to_response ('usuario.html', { 'form': form })
Para mostrar el formulario en el archivo «usuario.html» (que es una plantilla de django) se puede utilizar el siguiente trozo de código:
Con esto se muestra el formulario separando los elementos de éste entre párrafos, existen otras formas de mostrar el formulario utilizando otro tipo de separadores, como siempre para más información está la documentación sobre cómo representar los formularios en las plantillas de django.
Creando un formulario a partir de un modelo de django
Si como en este caso se quiere crear un formulario que contendrá los mismos datos que un modelo ya creado, django permite crear formularios a partir de modelos ya creados. Para ello sólo se debe crear la clase del formulario que herede la clase ModelForm del módulo django.forms y luego crear una clase Meta dentro de la del formulario.
En este caso sería algo así:
# forms.py
#-*- coding: utf-8 -*-
from proyecto.aplicación.models import Usuario
from django import forms
class FormularioUsuario (forms.ModelForm):
"""Formulario generado a partir del modelo Usuario."""
class Meta:
model = Usuario
Este ejemplo es bastante básico, ya que este método de creación de formularios partiendo de modelos tiene bastante más opciones, como la posibilidad de excluir campos del modelo en el formulario, ordenarlos, etc.
Como siempre lo mejor es consultar la documentación sobre cómo crear formularios partiendo de modelos de django.
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering / Project Management
Blog de Líderes de Opinión en Tecnologías de Información
Agosto 4th, 2010 - [Enlace local]
Ya desde hace años sigo los boletines de Select quien se especializa en artículos de Tecnologías de Información asi como de presentar estudios de mercado en el mismo ramo, otra fuente de información importante de Select es su su blog donde se presenta información muy interesante de TI.
» Leer más, comentarios, etc...
Cerebro en la Sombra » Técnico
Desempaquetar varios archivos tar a la vez
Agosto 3rd, 2010 - [Enlace local]
Este es uno de esos problemas que cada vez que me pasa no recuerdo como lo solucioné la vez anterior.
Imaginemos la situación. Tenemos varios archivos tar (o tgz) en una carpeta y queremos desempaquetarlos todos del tirón. Como somos muy listos haremos algo tan sencillo como:
-
tar xvf *.tar
Vaya, no funciona… En efecto, no funciona porque tar no entiende esta sintaxis como nosotros.
Hay varias posibles soluciones, a mi me gusta la que considero más sencilla y fácil de recordar:
-
find . -name *.tar -exec tar xvf {} ;
Útil ¿no?
» Leer más, comentarios, etc...
jordisan.net blog: sobre lo humano, lo divino... y lo técnico: desarrollo
¿Existe el Diseño Centrado en el Usuario?
Agosto 2nd, 2010 - [Enlace local]
El Diseño Centrado en el Usuario (DCU) es un tema del que cada vez se habla más, pero que en la práctica parece ser más una declaración de buenas intenciones que un proceso definido, aplicable a la mayoría de proyectos de desarrollo.
La expresión "Diseño Centrado en el Usuario" (DCU, o UCD en inglés de User Centered Design) parece estar adquiriendo cada vez más popularidad, y no es de extrañar. ¿Quién va a oponerse a que el usuario, destinatario último del software, sea precisamente el centro del proceso de diseño? Pero rascando un poco bajo la superficie encontramos que no existe un consenso general sobre lo que entendemos precisamente como DCU.
Las definiciones más o menos formales como la de la Wikipedia o la de ISO 13407:1999 (no os voy a aburrir aquí con ellas) se refieren en términos muy generales a "filosofías de diseño", "modelos", "elementos que lo forman", "principios generales", "recomendaciones", … Todo eso está muy bien, pero no sirven en el momento de la verdad: cuando uno se enfrenta al desarrollo de una interfaz de usuario.
El proceso de Diseño Centrado en el Usuario es, según la ISO 13407, algo tan genérico como esta figura.¿Qué tenemos en la práctica?
En la práctica, la expresión DCU se refiere casi siempre a un conjunto de técnicas que se pueden aplicar a lo largo del ciclo de vida de una aplicación software, y que lo único que tienen en común es que, al menos en teoría, incluyen al usuario como principal protagonista. El número de esas técnicas puede ir desde seis (como en este artículo de Webcredible) a varias decenas (como en esta tabla interactiva de UsabilityNet). Entre esas técnicas suelen estar algunas tan dispares como los focus group, los tests con usuarios o el prototipado de interfaces.
Curiosamente, también se suelen incluir como técnicas de DCU algunas en las que no participan usuarios reales; por ejemplo, las evaluaciones heurísticas de usabilidad.
» Leer más, comentarios, etc...
jordisan.net blog: sobre lo humano, lo divino... y lo técnico: desarrollo
¿Existe el Diseño Centrado en el Usuario?
Agosto 2nd, 2010 - [Enlace local]
This post is also available in English.
La expresión "Diseño Centrado en el Usuario" (DCU, o UCD en inglés de User Centered Design) parece estar adquiriendo cada vez más popularidad, y no es de extrañar. ¿Quién va a oponerse a que el usuario, destinatario último del software, sea precisamente el centro del proceso de diseño? Pero rascando un poco bajo la superficie encontramos que no existe un consenso general sobre lo que entendemos precisamente como DCU.
Las definiciones más o menos formales como la de la Wikipedia o la de ISO 13407:1999 (no os voy a aburrir aquí con ellas) se refieren en términos muy generales a "filosofías de diseño", "modelos", "elementos que lo forman", "principios generales", "recomendaciones", … Todo eso está muy bien, pero no sirven en el momento de la verdad: cuando uno se enfrenta al desarrollo de una interfaz de usuario.
El proceso de Diseño Centrado en el Usuario es, según la ISO 13407, algo tan genérico como esta figura.¿Qué tenemos en la práctica?
En la práctica, la expresión DCU se refiere casi siempre a un conjunto de técnicas que se pueden aplicar a lo largo del ciclo de vida de una aplicación software, y que lo único que tienen en común es que, al menos en teoría, incluyen al usuario como principal protagonista. El número de esas técnicas puede ir desde seis (como en este artículo de Webcredible) a varias decenas (como en esta tabla interactiva de UsabilityNet). Entre esas técnicas suelen estar algunas tan dispares como los focus group, los tests con usuarios o el prototipado de interfaces.
Curiosamente, también se suelen incluir como técnicas de DCU algunas en las que no participan usuarios reales; por ejemplo, las evaluaciones heurísticas de usabilidad.
Cada técnica puede aplicarse en diferentes momentos del desarrollo de software, aunque las directrices en ese sentido suelen ser aproximadas (ver la tabla anteriormente reseñada de UsabilityNet); también la ejecución y resultados obtenidos son totalmente dependientes de la técnica en concreto. Así pues, en los proyectos reales suele quedar a criterio del experto en usabilidad o en diseño decidir qué técnicas van a aplicarse durante el desarrollo, en qué momento, etc. Todo ello, por supuesto, en función de las habituales limitaciones de recursos: tiempo, personal, etc.
Con todo eso, ¿podemos llamarle "Diseño Centrado en el Usuario" a un proceso de desarrollo en el que se ha aplicado alguna de esas técnicas? ¿Cuál es el criterio para decidir cuántas y cuáles son necesarias? ¿Podemos decir que hemos realizado un proceso de DCU sólo por el hecho de haber realizado entrevistas para la definición de requerimientos?
Es más, ¿tiene sentido hablar de un proceso de diseño (sea cual sea), sin indicar cuál es su relación con el resto de procesos del desarrollo?
¿Qué sería de esperar de un verdadero DCU?
Diríase pues que la expresión "Diseño Centrado en el Usuario" queda un tanto vacía de significado concreto. Podríamos pensar que un verdadero DCU debería incluir:
- Una integración entre las diferentes técnicas, indicando cómo y cuándo deben aplicarse en proyectos de desarrollo reales.
- Una integración con la metodología de desarrollo del propio software.
Podemos encontrar algunos intentos de relacionar el DCU con las propias metodologías de desarrollo (son los casos, por ejemplo, del framework LUCID o de la metodología MPIu+a), pero parecen estar todavía en un proceso de definición y/o limitadas al ámbito académico.
Quizás por eso la mayoría de aproximaciones prácticas al DCU parecen estar orientadas a aplicaciones web de publicación de contenidos. En un proyecto web de ese tipo muchos de los elementos (infraestructura, lenguajes, tecnologías) vienen definidos de antemano: arquitectura de servidor web + navegador, lenguaje HTML para los contenidos, etc. Por tanto, prácticamente toda la problemática del desarrollo se centra en el diseño (de páginas, de contenidos, de navegación, etc.); y aplicar un proceso de Diseño Centrado en el usuario parece ser suficiente para llevar adelante el proyecto.
Pero ¿qué ocurre con otro tipo de aplicaciones (no web)? En el desarrollo de ese tipo de aplicaciones "más tradicionales" es necesario hacer un análisis más complejo y definir, por ejemplo, la infraestructura necesaria, la arquitectura, el modelo de bases de datos… Decisiones que no corresponden directamente al diseño de las interfaces, pero que sí están relacionadas con él. ¿Cómo se aplica un proceso de DCU en estos casos? ¿Debe el diseño guiar el resto de actividades? ¿O debe realizarse en paralelo? ¿Qué ocurre con técnicas comunes (como la recogida de requerimientos)?
Parece, en definitiva, que queda todavía un largo camino por recorrer antes de que exista la posibilidad de aplicar un verdadero Diseño Centrado en el Usuario al desarrollo de cualquier proyecto, más allá de aplicar técnicas concretas en momentos puntuales de su ciclo de vida.
Como nota final, en el próximo XI Congreso Internacional de Interacción Persona-Ordenador, INTERACCIÓN 2010, que se celebra en Valencia en septiembre, presentaré un artículo relacionado con esta temática titulado "Más allá del cuchillo de palo: hacia una herramienta integrada para un verdadero diseño centrado en el usuario".
» Leer más, comentarios, etc...
Arragonán
Por la TLP2k10
Agosto 1st, 2010 - [Enlace local]
Tenía pendiente escribir un poco por aquí lo que dio de sí para mi la Tenerife Lan Party, que tampoco pudo ser mucho, pero me pude pasar por varias charlas y talleres; además de ver el ambientazo de jugones y otakus que había en la party.
Por la zona de gaming sólo me pasé un par de ratos por ver un poco el ambiente, y la verdad que se veía un ambiente “clásico” de party de esos que molan: 1024 puestos, ordenadores personalizados, una zona de consolas, gente jugando y bajándose todo internet, juguetes por encima de los escritorios, alguien durmiendo por ahí… y alguna muñeca hinchable, elemento que empieza a parecerme habitual en las lan parties
Lo que menos pude disfrutar fueron las actividades del salón manga, bien porque no me enteraba o porque coincidía con alguna charla que me interesaban en la zona profesional. Eso sí era divertido entrar al recinto y empezar a ver a muchísima gente disfrazada de sus personajes favoritos, vamos lo que llaman cosplay, cada vez que pasaba por la zona manga no podía evitar esbozar una sonrisa… la gente se lo curra muchísimo y las caracterizaciones eran espectaculares!
Y por supuesto donde me pegué la mayor parte del tiempo fue en la TLP+i, que viene a ser la zona profesional (vale, vale… y en la llamada sala VIP bebiendo cerveza
). Hubo actividades que me gustaron más y otras menos:
- Minube, o cómo una idea pasa a ser una multinacional: Una charla de la historia y la trayectoria de esta empresa de internet, que estuvo bastante bien; pero al parecer hubieron algunos problemas y terminó retrasando la charla y cambiando de sala, quizás eso hizo que se resintiera el número de asistentes.
- Taller de integración continua: Yeray Darias y Fran Reyes hicieron una buena introducción de que es la integración continua y luego nos pusimos manos a la obra a trabajar con Hudson y Mercurial, una pena que hubiera poquita gente, la verdad que estuvo muy bien pensado.
- Introducción al mundo Android: En mi opinión fue demasiado introductorio, no me esperaba ver mucho código pero sí que se hablara al menos de la arquitectura de una aplicación Android.
- Taller de gráficos para Android: La verdad que aquí tuve el problema de no conocer el contenido de taller con anterioridad, porque no hubiera ido. Yo esperaba de nuevo ver código, pero resultó ser un taller de edición de gráficos con Adobe Fireworks, eso sí, pensado para ser utilizado en Android.
- Penalizaciones en Google: Sólo vi los últimos minutos porque mi charla se retrasó media hora y entonces coincidió gran parte. El rato que pude ver, a mi me resultó también un pelín introductorio, aunque bien pensado quizás el tema de penalizaciones tampoco de para mucho más.
Otras cosas que me perdí y que tenían buena pinta: un taller de Django, otro de Arduino, de Azure… Y hablando de mi charla, la asistencia fue muy baja y en mi caso no creo que fuera por el retraso :S. La verdad que no sé cuál es la razón, pero viendo que al parecer en el resto de talleres para desarrolladores tampoco tuvieron excesivo éxito seguramente será un problema del gremio. Aparte que creo que es difícil dar entidad a unas jornadas para profesionales enmarcadas dentro de una lan party, porque la imagen que se suele tener desde fuera es que “es un evento para frikis”(o sea jugones y otakus).
Y bueno, que os dejo las poquitas fotos que fui haciendo por ahí:









