Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

MadeInFlex

Autenticación en aplicaciones Flex con Spring Security 3

Agosto 12th, 2010 - [Enlace local]


  1. El back-end
  2. La aplicación Flex
  3. Más información del usuario en Flex
  4. Conclusiones

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:

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

  1. File … Import … Web->War File
  2. WAR File: El camino del archivo blazeds.war
  3. Web Project: FlexSpringSecurity
  4. Target Runtime: Alguno que se haya configurado previamente
  5. 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:

Nuestra aplicación Flex contendrá un formulario para autenticación y un botón para entrar (login) y salir (logout).

login

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:

login-fail

En caso contrario:

login-ok-pre

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:

login-ok

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_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 :: Building Multiscreen apps

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 :: Mobile development with AIR 2.5

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 :: Flash CS5 and Flash Builder 4 integration

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 :: Migrating from Flex 3.0 to Flex 4.0

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.


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_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 :: Building Multiscreen apps

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 :: Mobile development with AIR 2.5

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 :: Flash CS5 and Flash Builder 4 integration

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 :: Migrating from Flex 3.0 to Flex 4.0

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.


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_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

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_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

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

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

http://blogs.msdn.com/b/luisdans/archive/2010/05/14/mayo-14-2010-est-microsoft-perdiendo-la-nube-cr-nica-desde-microsoft-am-rica-latina.aspx

» 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:

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:

{{ form.as_p }}

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:

  1. 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:

  1. 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.

Proceso de DCU según ISO 13407El 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.

(sigue …)

» 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.

Proceso de DCU según ISO 13407El 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:

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.

Metodología de Diseño Centrado en el UsuarioUna metodología de Diseño Centrado en el Usuario… orientada a sitios web

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 :P

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 :P ). Hubo actividades que me gustaron más y otras menos:

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í:

» Leer más, comentarios, etc...

Información legal y técnica