Ultimando detalles

martes, 25 de enero de 2011 0 comentarios
Estos días estoy ultimando la publicación de la nueva versión del plugin de integración de Redmine con Enterprise Architect, aunque ya no se si llamarlo así sinceramente, ya que como mostré en un post anterior he desarrollado también la integración con Trac, como feature de esta nueva versión.


Aún queda mucho por hacer, y como ya anuncie por Twitter, me gustaría liberarlo ya, pero quiero terminar de ultimar esta versión. Los ultimos retoques se han centrado en confirmar la compatibilidad de este plugin con la rama 1.1.x de Redmine, y en mejorar un poco la experiencia del usuario con la aplicación, concretamente optimizando el acceso a los datos mediante cache, reduciendo el tiempo de generación de la descripción y el análisis del fichero de especificación definido en Enterprise Architect y depurando algunos errores. En cuanto la tenga lista, la indexare en el nuevo directorio de plugins de Redmine, mientras tanto podéis ver la documentación de la versión anterior.


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

#opendata con Yahoo Pipes

miércoles, 19 de enero de 2011 0 comentarios
A pesar de que el movimiento #opendata dentro de la iniciativa de #oGov es relativamente reciente, la extracción de datos publicados en la web no es algo tan nuevo. La iniciativa #opendata recomienda la semantificación de contenidos y la exposición de los mismos en formatos abiertos tales como RDF o JSON. Sin embargo, tal y como acabo de mencionar ya existian con anterioridad otro tipo de iniciativas y plataformas para la extracción, exposición y generación de valor añadido a los datos expuestos. En este caso es importante destacar una de las más extendidas como son las aplicaciones web híbridas o mashups.

Un mashup de datos es básicamente una aplicación web que provee un servicio determinado haciendo uso de fuentes de datos de información de la cual no es dueña. La información necesaria es consumida de diversas fuentes de datos y formatos y es tratada en la lógica de negocio del mashup para posteriormente proporcionar el resultado de su procesamiento. Una de las plataformas más conocidas para el desarrollo de mashups de datos es Yahoo Pipes


Yahoo Pipes nos proporciona una interfaz web para el diseño, depuración y publicación de mashups de una forma rápida y sencilla. El único requisito para poder acceder es disponer de una cuenta de usuario en Yahoo. Una vez dentro del diseñador de mashups dispondremos de un conjunto de componentes con el que podremos definir la lógica de extracción e integración de datos. Visto esto, he desarrollado un pequeño experimento consistente en extraer y consumir datos de la web mediante la definición de un mashup en Yahoo Pipes y posteriormente publicar estos datos tratados en un formato abierto. Para ello he decidido además extraer datos de una fuente de datos no liberada, es decir, quiero extraer, exponer, consumir y generar valor a partir de datos no publicados en un catalogo RISP (Reutilización de Información del Sector Público), o lo que es lo mismo, a partir de una plataforma que no podriamos considerar a priori #opendata, voy a hacer uso de Yahoo Pipes para consumir los datos que en esta hay publicados y a exponerlos tras su tratamiento.

Para realizar nuestro pequeño experimento he optado por usar como fuente de datos la web del Servicio Andaluz de Empleo de la Junta de Andalucía. Voy a extraer datos de su sección Mapa de Recursos, concretamente simulando la operativa que ya se proporciona en esta web de obtención de la oficina del Servicio Andaluz de Empleo más cercana a partir de un código postal introducido por el usuario. En la siguiente imagen vemos una captura de la web mencionada proporcionando el servicio que acabamos de detallar:


Partimos de la base de que no tenemos acceso a la fuente de datos de donde se obtienen los datos de las oficinas y de que en la web del Servicio Andaluz de Empleo no se proporciona esta información en ningun formato reutilizable. 

A continuación pasamos a definir un mashup en Yahoo Pipes cuya lógica de negocio implemente el comportamiento de la búsqueda de oficinas del Servicio Andaluz de Empleo de su web. El mashup definido puede observarse en la siguiente figura:



Para el desarrollo de este mashup hemos usado los siguientes componentes:

Number Input Module: nos proporciona un método de entrada de datos de tipo numérico. Hemos definido un mensaje descriptivo para el formulario que se mostrará así como un valor por defecto, concretamente un código postal de Sevilla (41007). Más info de este componente aqui.

URL Builder: nos proporciona un método para construir URLs a partir de una URL base y sus correspondientes parámetros. Más info de este componente aqui. Concretamente para nuestro ejemplo hemos definido dos parámetros, el que determina que estamos consultando recursos de tipo 'Oficina del Servicio Andaluz de Empleo', definido por el valor 'prov1' dentro del parámetro combo, y el código postal definido por el parámetro 'cp' al cual le hemos inyectado el valor que introducirá el usuario definido en el componente anterior. La URL en concreto que hemos construido es:


Fetch Page: nos proporciona a partir de una URL su contenido en formato HTML, podemos opcionalmente seleccionar un subconjunto de ese contenido. En este caso hemos usado esta opción para extraer del código HTML resultante la porción donde se encuentra formateado el resultado de la consulta  que invocamos a partir de la URL construida en el componente anterior y que es inyectada a este. Más info de este componente aqui.

Create RSS: nos proporciona un mecanismo para poder mostrar el resultado obtenido del componente anterior bien formateado bajo RSS. Más info de este componente aqui.

Pipe Output: expone el resultado de la lógica definida en el mashup. Para más información de estos, asi como del resto de componentes de Yahoo Pipes, acceder aqui.

Una vez diseñado, pasamos a guardarlo y a exponerlo dentro de la plataforma de Yahoo Pipes. Así pues lo que se nos proporcionará en un formulario a partir del cual introduciremos un código postal y la ejecución del mashup nos dará el resultado deseado, además con la posibilidad de obtener el resultado obtenido en formatos abiertos tales como JSON:

Podeis acceder a este mashup y comprobar su funcionamiento, asi como obtener la definición en JSON del ejemplo. De esta forma hemos visto que es posible llevar a cabo la extracción de datos de una fuente de datos que podriamos considerar 'no #opendata'. Inconvenientes de esta solución: fundamentalmente la dependencia que se crea con el contenido HTML del website del que se esta consumiendo la información. Supongamos que la fuente de datos es una base de datos sobre la que se hace una consulta y cuyo resultado se muestra en un gestor de contenidos como es el caso, concretamente OpenCMS para esta web. En el caso de que el contenido HTML se autogenere y/o que cambiemos de gestor de contenidos, aun a pesar de que el modelo de datos permanezca intacto, la extracción podría dejar de funcionar.  Es por esto que lo más recomendable es que nuestras soluciones de #opendata extraigan directamente la información de la fuente de datos y de otros catálogos RISP.


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

El principio de Hollywood

viernes, 14 de enero de 2011 0 comentarios
Hace unos cuantos días, un antiguo compañero y amigo de fatigas en esto de la informática me planteaba una pregunta muy interesante en una conversación a traves de Twitter:

Imagina que es ahora cuando el boom de la informática se dispara. Gestionarias tú a los recursos e implantarías qué modelo? :)

Desde luego, la pregunta se las trae, sobre todo porque no puedo ser totalmente imparcial en mi respuesta ya que ambos hemos vivido en primera mano lo que muy inteligentemente otro gran amigo mio definió como  la desintegración de la informáticaToda esta conversación viene al hilo de un magnifico regalo de reyes como es el libro El principito se pone la corbata de Borja Vilaseca, de cuya lectura he disfrutado plenamente, y cuya trama principal se vertebra en las relaciones entre los empleados de una consultora donde todo cambia radicalmente tras la llegada de el Principito como nuevo director de recursos humanos, o mejor dicho responsable de personas y valores de la organización.

Voy a partir de la hipotesis de que efectivamente no conozco el futuro, es decir, soy el director de recursos humanos de una consultora donde se esta viviendo el pelotazo de eso que se llama informática, y de la cual no tengo ni la mas remota idea, es decir, no dispongo de formación en ese área ni tengo conocimientos previos para trabajar como informático.  Es época de bonanza, totalmente distinta a lo que estamos viviendo ahora mismo, y los proyectos nuevos llueven, mis principales clientes invierten en nuevos desarrollos y servicios, y el departamento comercial de mi empresa no para de generar beneficios, aun cuando a veces no saben ni lo que puñetas esten vendiendo, y por tanto los marrones que estan encargando a sus empleados desarrollar. Creo que es un punto de partida lamentablemente realista.

Mi primera decisión vendría motividada por mi ignorancia, quiero decir, si veo que los que estan generando beneficios para mi empresa son mis comerciales, es más que razonable que retenga el talento de ese departamento. Mejoraria sus condiciones laborales y entre otras medidas complementaria su salario en base a incentivos, y pactaría su subida en relación al grado de beneficios que han aportado cada año. Incluso podria llegar a plantearles la posibilidad de trabajar un dia en remoto desde sus casas (seria un director de recursos humanos moderno para aquella epoca, pero es que leo mucho). Hasta ahi, todo normal, no es muy distinto de lo que se ha vivido. El problema empieza cuando me llegan las primeras quejas de empleados de la compañia que no pertenecen al departamento de ventas, marketing tambien quiere su parte del pastel, a fin de cuentas, estan siempre sacando notas de prensa, mejorando la imagen de la compañia, etc. y generando de forma proactiva beneficios. Soy un director de recursos humanos humano, valga la redundancia, y entiendo que tambien me estan aportando beneficios, con lo que negocio tambien mejoras laborales con ellos en la linea de las anteriores.

Todo controlado, los incentivos y sueldos que salen por los beneficios que llegan, además es época de bonanza, entra más dinero del que sale, y supongamos que tengo bien gestionadas partidas presupuestarias destinadas a viajes y otras áreas relacionadas. Ninguno de mis superiores me protesta, esta entrando dinero y todo va bien, ese año regalamos una cesta de Navidad con un jamón.

De repente, mis cuentas van variando, cada vez sale más dinero, los beneficios van bajando, (sin invertirse aún la balanza) y adicionalmente, me van llegando peticiones de responsables de proyecto para contratar a personal. El volumen de proyectos a ejecutar cada vez es mayor, los comerciales continuan haciendo su trabajo, y es lógico que hay que introducir personal nuevo para afrontar este volumen de trabajo. Además, cada vez van entrando más proyectos de outsourcing con necesidades muy particulares, que hay que sacar adelante, por lo que vamos realizando nuevos contratos por obra y servicio para ejecutarlos, si puede ser con periodo en practicas bajo una fundación mejor, así continuo teniendo controlada la partida presupuestaria de este año.

Pasa el tiempo, y tanto mi departamento comercial, como marketing continuan más motivados que nunca, son unos profesionales y van introduciendo más y más beneficios. Sin embargo me llueven nuevas quejas, en este caso de personal responsable del desarrollo y ejecución de proyectos. Un equipo de trabajo entero se ha tenido que quedar trabajando el fin de semana completo. Los ánimos estan algo crispados, el proyecto de ese equipo no marcha como debería y se dan algunas bajas. El cliente a su vez esta cada vez mas descontento de nuestro servicio, no obtiene lo que espera en el plazo establecido, y tiene la sensación de que la empresa no sabe gestionar un proyecto como el que les ha encargado. Hay que exigir más compromiso o perdemos una fuente de ingresos. En poco tiempo más, esta situación se multiplica y ya no es solo un proyecto, sino el 40% del total de proyectos de la compañia. Muchos se van con el motivo de que no se reconoce su trabajo, cobran poco y para colmo no le pagan las horas extras.  Ese año no hay jamón por Navidades.

Conforme los años pasan las cosas van cada vez peor, mis empleados me exigen más, tengo que afrontar planes de formación realistas, la competencia es feroz, las tecnologías van cambiando y tengo que formar a mis empleados o sino mi departamento comercial no podrá afrontar nuevos proyectos ya que no dispone de personal cualificado, y si afronta estos proyectos, ultima salida cuando no queda otra, al final tendremos más clientes descontentos con el resultado final. Además, uno de mis clientes estratégicos recorta su presupuesto y cada vez es más dificil sacar nuevos proyectos y por tanto mis beneficios se ven reducidos, a pesar de que tanto mis comerciales como marketing estan más motivados que nunca, ellos no paran de intentar sacar nuevos clientes, nuevos proyectos, y van de reunión en reunión día a día, navegando entre mil plataformas de contratación distintas, están al 200%. Menos mal que tenemos más clientes, sino no se que seria de esta empresa si solo tenemos que respaldarnos en uno que cada año va a limitar más el número de proyectos a ejecutar. Es aqui donde comienza el caos, mis jefes, directivos de la compañia, y sus inversores principales me piden explicaciones y me exigen recortes y despidos de aquellos que no aporten beneficios. El resto ya lo sabemos todos. Por cierto, ya no hay regalos por Navidad.

Esta es mi respuesta partiendo de la hipótesis planteada, no nos engañemos, no hay otra respuesta. He actuado como actuaria cualquier otro en mi situación, premiando al que se lo merece. Pero ese ha sido mi gran error. ¿Que ha pasado con todo el talento que se ha ido? ¿Por que me sorprendo cuando me llegan comentarios de que hay empleados de mi empresa que están buscando otro sitio donde trabajar? ¿Por que no me he parado a pensar en ellos y en el retener su talento? ¿Por que a fin de cuentas no he motivado a todos los empleados de mi empresa, en lugar de vincularme solo a un sector especifico de la misma? ¿Por que hay empleados de mi empresa que ni conozco? ¿Por que no se han comprometido con la situación que estamos viviendo?

Ese es el quid de la cuestión, que el compromiso a cambio de nada se llama cinismo, y que como bien dices amigo nadie es tonto. Compromiso a cambio de compartir el éxito entre todos. Soluciones: como bien dices un modelo plano basado en objetivos para todos es lo más idóneo, se continua con la politica de beneficios para comerciales, marketing, etc. y se introducen nuevas herramientas de medir la productividad de los empleados, grado de satisfacción de clientes, iniciativas impulsadas en la empresa, participación en proyectos estrategicos, redacción de ofertas, etc. que impulsen sus mejoras laborales y que por tanto incrementen el grado de motivación y retención del talento. Un desarrollo equitativo entre esfuerzo y recompensa para todos.

Tres notas aclaratorias. La primera de ellas es que por mi parte no responsabilizo a los técnicos de recursos humanos, es cierto que son victimas tambien, y creo que el problema viene de quienes les han impuesto decisiones en ocasiones poco acertadas. Para mi son unos sufridores y unos profesionales que como nadie pudieron preveer esta situación. La segunda de las anotaciones es que a pesar de que ahora las cosas estan muy mal, las empresas IT sabremos reinventarnos. Solo espero que tengamos todos la lección bien aprendida para la próxima. La tercera y ultima, el titulo de este post, 'don't call us, we'll call you', una filosofia que creo que deberia aplicarse dentro del área de recursos humanos de cualquier empresa: 'No vengas a solicitarme mejoras laborales, ya te las proporcionare yo', es decir, motiva a tus trabajadores de forma proactiva y no reactiva.


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

Consumiendo #opendata y generando valor

jueves, 13 de enero de 2011 0 comentarios
Como se comento con anterioridad, la verdadera riqueza de introducir soluciones #opendata dentro de una organización consiste en la posibilidad de que los datos que se liberan pueden ser no solo consultados por los ciudadanos a través de la plataforma sobre la que se exponen, sino también consumidos desde otras plataformas o sistemas y pueden emplearse para generar valor añadido a la información que se expone desde el origen de los mismos.

En este caso vamos a ver como, a partir de los datos que hemos extraido y expuesto, desarrollar una solución de consumo de dichos datos. Para ello me he permitido reconfigurar la extracción de los datos que tenia previamente y he añadido una nueva consulta para obtener al conjunto de usuarios de yourtask (nuestro pequeño cajón desastre para cacharreo) que han informado sus datos de contacto. Concretamente:

1
2
3
4
5
6
7
$triplify['queries']=array(
 'users'=>array("SELECT p.id AS id, p.usuario AS 'foaf:name',
  CONCAT(m.direccion,' ',m.codigopostal,' ', m.localidad)
  as 'foaf:based_near' FROM usuarios p
  INNER JOIN miscelanea m ON (p.id=m.idusuario)",
  "SELECT u.id AS id, u.usuario AS 'foaf:name' FROM usuarios u",),
 );

Una vez hemos configurado esta extracción y comprobamos que efectivamente se esta exponiendo de forma correcta, pasamos a definir una pequeña aplicación que consume estos datos y genere valor añadido a los mismos. Concrétamente a modo de ejemplo supongamos que somos un proveedor que tenemos que realizar una ronda de visitas a nuestros clientes, y que nuestros clientes han publicado en su plataforma #opendata sus datos de contacto donde se incluye su dirección. Dada la ubicación de uno de mis clientes necesito una aplicación web que pueda consumir por ejemplo en mi dispositivo móvil que me proporcione una ruta a través de Google Maps para ir a ver a mi siguiente cliente. Vamos a suponer que la identificación de ambos clientes es un parametro que se proporciona a traves de la URL de acceso al servicio.

Planteado este supuesto, y suponiendo que la plataforma #opendata de mi cliente es yourtask, hemos decidido consumir los datos expuestos en formato JSON, de tal forma que hemos desarrollado la siguiente aplicación en PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// Punto de acceso a los datos expuestos en JSON
$url = "http://yourtask.webcindario.com/yourtask/opendata/triplify/?t-output=json";

// Accedemos al contenido del fichero JSON con los datos
$file = fopen($url, "r");
$text = "";
while ($t = fgets($file, 1024)){
$text .= $t;
}

// Procesamos el contenido
$finaltext1 = str_replace('http:\/\/yourtask.webcindario.com\/yourtask\/opendata\/triplify\/users\/','users',$text);
$finaltext2 = str_replace('http:\/\/xmlns.com\/foaf\/0.1\/name','name',$finaltext1);
$finaltext3 = str_replace('http:\/\/xmlns.com\/foaf\/0.1\/based_near','based_near',$finaltext2);

// Decodificamos el fichero JSON
$json = json_decode($finaltext3);

// Comprobamos que los parametros de URL se han introducido
if(isset($_GET['idorigen']) && isset($_GET['iddestino'])){

// Obtenemos la direccion origen y destino
$origen = $json->$_GET['idorigen']->based_near->value;
$destino = $json->$_GET['iddestino']->based_near->value;

// Redireccion a Google Maps con los parametros deseados
echo "<body onload=\"location.href= 'http://maps.google.es/maps?f=d&source=s_d&saddr=".$origen."&daddr=".$destino."'\"></body>";

}else{
echo 'Error! no se han proporcionado origen y/o destino';
exit;
}
?>

Como podemos observar, hemos accedido al punto de acceso de la información que queremos consumir a traves de la URL semantificada de la plataforma #opendata, he solicitado que la quiero consumir en formato JSON y he pasado a procesarlo a traves de las funciones JSON de PHP. Tras acceder al servicio vemos que el resultado es el deseado:


Podéis acceder a una demo de este servicio y comprobar que efectivamente los datos de origen y destino son correctos a traves de la siguiente consulta SPARQL

Como vemos, esto es solo un ejemplo de juguete, donde hemos podido ver como la semantificación de contenidos y apertura de los mismos posibilita el desarrollo de soluciones de terceros que generan valor añadido a los datos que se publican. Para ver más aplicaciones os recomiendo daros una vuelta por Desafio AbreDatos . Esta iniciativa fue celebrada en Abril del pasado año 2010 donde durante dos días se celebro un concurso de desarrollo de soluciones de consumo de datos públicos, algunas de ellas muy interesantes como infocarretera, para conocer el estado de las carreteras del Pais Vasco, o LosPresusDe, para ver la como se ha repartido la partida presupuestaria en un determinado municipio, o Sena2Info, para conocer un ranking de intervenciones en el senado. El listado completo de proyectos aqui.


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

Exponiendo datos

miércoles, 12 de enero de 2011 0 comentarios
Tal y como comentaba en el anterior post, a la hora de decidir como exponer datos en un website corporativo suelen existir muchas alternativas: mostrar estos datos directamente en el propio sitio web en HTML estático o generado a través de una o varias consultas a una base de datos, subir documentos presentando esos datos estáticos disponibles para su descarga en distintos formatos, tanto propietarios como libres en el mejor de los casos, autogenerar estos documentos mediante herramientas de reporting, etc. Siguiendo con esas pautas, tu posición dentro del ranking The five-stars of Open Linked Data, sería como mucho de tres estrellas, lo que determina que publicas datos en tu website corporativo de forma estructurada y disponible en formatos abiertos.   

Para llegar a las cinco estrellas, necesitas introducir herramientas que te permitan la semantificación de tus contenidos. Es decir, aquellos que puedes identificar mediante URLs y que pueden enlazarse, consumirse, exponerse con otros datos y otras plataformas. Aqui Triplify vuelve a ayudarnos, ya que tal y como vimos, nos posibilita que la información extraida se pueda disponer en formatos RDF/n3 y JSON entre otros. 

Ahora hay que decidir como exponer estos datos. Al margen del diseño de la solución final, de como vaya a presentarse el catalogo de datos de una entidad, y del conjunto de datos que conforman ese catalogo, hay que proporcionar el listado de formatos disponible para cada uno de estos datos. Así pues vamos a volver a realizar un ejercicio práctico. En esta ocasión me he decidido a extraer y exponer el listado de usuarios activos de una aplicación propia de gestión de tareas denominada yourtask (uno de mis primeros proyectos web donde suelo cacharrear). Para ello he definido la siguiente configuración para extraer dichos datos:

1
2
3
4
$triplify['queries']=array(
 'users'=>"SELECT u.id AS id, u.usuario AS 'foaf:name'
   FROM usuarios u",
);

Con esto como sabemos es suficiente para definir como se llevará a cabo la extracción de los datos deseados. Ahora vamos a definir en esta misma configuración como se expondrán dichos datos, para ello fundamentalmente nos pararemos en dos: LinkedDataDepth y license

LinkedDataDepth: Con este parámetro configuramos el nivel de la URL donde expondremos los datos, con tres posibles valores: 0 que identifica que la exposición vendra dada cuando se acceda a triplify/ en el servidor; 1 que identifica que la exposición vendra dada por un nivel más de profundidad sobre la URL anterior, en este caso para consultar usuarios triplify/users/; y 2 para acceder a una instancia concreta a traves de su URL, por ejemplo triplify/users/1/. Para nuestro ejemplo hemos decidido exponer todos los usuarios con el nivel de profundidad que se determina por defecto (0)

1
$triplify['LinkedDataDepth']='0';

license:con este parametro especificamos con que licencia vamos a exponer nuestros datos en la web. Hay que decidir con el cliente que licencia desea. Para este ejemplo usare Creative Commons Attribution.

1
$triplify['license']='http://creativecommons.org/licenses/by/3.0/us/';

Tras esto, ya solo nos falta decidir si queremos publicar nuestros datos en algún otro formato, por ejemplo: un listado de los usuarios que se proporcione en un fichero .csv y en pdf. Explicar cómo autogenerar estos listados esta fuera del proposito de este post, ya que no requiere de semantificación de contenidos y es algo habitual en las soluciones que existen hoy dia.

Finalmente, publicamos nuestro catalogo en una URL determinada. A continuación vamos a hacer uso de la plataforma de exposición de datos semánticos de Triplify para ver si efectivamente nuestros datos estan expuestos mediante la identificación de los mismos bajo una URL, requisito indispensable para disponer de las cinco estrellas.


En este caso hemos publicado nuestro catalogo de datos para yourtask, de tal forma que el listado de usuarios esta disponible en RDF/N3 y JSON. Vamos a ver si efectivamente hemos expuesto nuestros datos de forma semantica mediante la plataforma de exposición de Triplify. Para esto accedemos a la siguiente URL:


Una vez procesado el RDF vemos que efectivamente se muestran los datos de los usuarios de la plataforma. Para ver si estos datos son validos vamos a exponer consultas SPARQL sobre los mismos que probaremos mediante Rasqal. En este caso construimos la siguiente consulta SPARQL:

1
2
3
4
5
6
7
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?name
WHERE {
?x foaf:name ?name
}
ORDER BY ?name

Dándonos el resultado deseado. Con esto hemos concluido nuestra exposición de datos y hemos demostrado que efectivamente nuestra solución esta completamente preparada para poder ser consumida por terceros. Esto lo veremos en un próximo post.


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

Requisitos de una buena solución #opendata

0 comentarios
En el anterior post mostramos cómo podemos diseñar una solución #opendata ligera integrando dentro del stack tecnológico de la misma herramientas opensource tales como Triplify para extraer datos de distintos orígenes. Pero una buena solución #opendata no solo debe ser capaz de extraer información en diversos formatos sino que además, en base a la especificación del W3C, debe cumplir con dos requisitos fundamentales más que son: exponer y generar valor. Definimos estos requisitos de la siguiente forma:

  • Extraer: una solución #opendata debe ser capaz de extraer datos de distintas fuentes de datos con independencia de la plataforma y ser capaz de proporcionárnoslos en los formatos abiertos adecuados que correspondan con las necesidades de categorización que se estimen oportunas. Esta categorización se basa en un sistema de ranking basado en estrellas, como los hoteles de una a cinco estrellas, donde se mide el grado de apertura de tus datos. Esto quiere decir que el cliente que opte por una solución de este tipo será el que determine cuantas estrellas quiere tener. Llegar a tener hasta tres estrellas es bastante facil y no exige demasiado. Con Triplify en nuestro stack llegar a las cinco estrellas es una realidad.
  • Exponer: una solución #opendata debe ser capaz de exponer los datos previamente extraidos y que esa exposición de datos asegure que los datos que se estan consultando en ese momento datos en tiempo real. Obviando, que no olvidando, esta ultima característica, la exposición de datos en una solución categorizada entre una y tres estrellas suele ser muy habitual para nosotros y estamos acostumbrados a ver en muchos websites institucionales información estadística de interes o datos relevantes disponibles en diversos formátos y catalogados en función de su naturaleza. Estos datos, en el mejor de los casos, son datos dinámicos generados en tiempo real en distintos formatos a traves de plataformas de reporting como JasperReport. En el peor de los casos, existe un equipo humano detras que de forma periodica genera esos datos y los va poniendo a disposición del ciudadano, siendo entonces considerados datos estáticos. El objetivo del siguiente post será explicar como exponer datos para soluciones de cuatro ~ cinco estrellas.
  • Generar valor: Una solución #opendata debe ser capaz de proporcionar a terceros la posibilidad de generar valor a partir de los datos expuestos. Recordando la definición de trasparencia dentro del contexto de Open Government, los ciudadanos, organismos terceros, etc. deben ser capaz no solo de consultar estos datos a través de la exposición de los mismos, sino ser capaces de consumirlos generando valor mediante estos. Veremos en un post próximo un ejemplo de generación de valor. 

Tras haber detallado esto, nos vemos en el siguiente post para ver cómo a partir de datos extraidos podemos exponer nuestros datos.

Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live

#opendata con Triplify

miércoles, 5 de enero de 2011 0 comentarios
Tras ver que el estado del #opendata en Andalucia no esta muy activo a dia de hoy, aunque permanecemos a la espera de la solución que ya se ha anunciado para este año, en mi empresa hemos comenzado a desarrollar nuestras propias soluciones de apertura de datos. Una de las herramientas que hemos comenzado a utilizar y con resultados muy satisfactorios para nuestros desarrollos es Triplify. 

Triplify es una herramienta que posibilita la extracción o apertura de datos en formatos abiertos de un origen de datos basado en una base de datos relacional.  De todas las características que posee esta herramienta hay dos que me atraen especialmente. En primer lugar, es una herramienta muy ligera. No son más de 500 lineas de código desarrolladas en PHP, en base al algoritmo de extracción de tripletas RDF de contenidos semánticos definido en "S.Auer, S. Dietzold, J. Lehmann, S.Hellmann, D. Aumueller. Triplify: light-weight linked data publication from relational databases. In Proceedings of  the 18th International Conference on World Wide Web 2009. ISBN: 978-1-60558-487-4". Y en segundo lugar, la posibilidad de extraer desde origenes de datos basados en bases de datos relacionales, sin necesidad de tener que montar consultas RDF en base a frameworks como por ejemplo Jena, sino ejecutando las propias consultas SQL que pueden estar siendo ya ejecutadas en otras plataformas web para por ejemplo generar informes.



Además el proyecto, el cual es open source, esta recibiendo bastantes contribuciones de diversas comunidades de desarrolladores que estan definiendo configuraciones, y es que para semantificar tus datos solo tienes que definir una configuración donde especificas de donde salen y que salen -me encanta esto-, para diversos productos ya conocidos como Wordpress, Drupal, phpBB, etc. y que estan reescribiendo su algoritmo en otros lenguajes como Python.
Y como no se puede hablar de algo bien sin haberlo probado antes, me he montado un pequeño ejemplo en base a esta plataforma de tal forma que he realizado una apertura de datos de la forja de proyectos de la Consejeria de Empleo basada en RedminePara esto he definido una configuración donde especifico la cadena de conexión a la base de datos de la instancia de Redmine donde tenemos dando servicio nuestra forja de proyectos - en este caso MySQL (Triplify permite mas formatos gracias a que usa la interfaz PDO) y a continuación he definido a modo de ejemplo una consulta muy sencilla donde se me proporciona el listado de proyectos que tenemos registrados en nuestra plataforma. La consulta es: 

1
2
3
4
$triplify['queries']=array(
 'project'=>"SELECT p.id AS id, p.name AS 'foaf:name'
   FROM projects p",
);
A continuación he creado una pequeña aplicación cliente desde la cual invocar la consulta para extraer el listado de proyectos tanto en formato abierto RDF/N3, como Json. Esta me devuelve el listado de proyectos que estan disponibles en nuestra plataforma que pueden ser visualizados (previa autenticación con LDAP corporativo)

Una vez seleccionado el formato que quiero visualizar, se invoca a la consulta anteriormente mencionada para obtener el listado de proyectos y proporcionarlo tal y como corresponda. El formato de salida para el primero de los proyectos (Agata 2.x) es el siguiente si usamos RDF/N3:

1
2
3
4
5
<http://10.231.55.9/opendata/triplify/project/203>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://10.231.55.9/vocabulary/project>.
<http://10.231.55.9/opendata/triplify/project/203>
<http://xmlns.com/foaf/0.1/name> "Agata 2.x" .

Y en JSON:

1
2
3
4
5
6
7
8
"http://10.231.55.9/opendata/triplify/project/203":{
"http://www.w3.org/1999/02/22-rdf-syntax-ns#type":{
"value":"http://10.231.55.9/vocabulary/project",
"type":"uri"
},"http://xmlns.com/foaf/0.1/name":{
"value":"Agata 2.x",
"type":"literal"}
}

Con lo que podemos ver que gracias a la introducción de Triplify en nuestro stack tecnologico, llevar a cabo la apertura de datos públicos es una realidad total y absoluta. 


Compárteme en: Eskup Facebook Tuenti Meneame Bitacoras Google Yahoo Windows Live