Acceso a servicios en una pbx utilizando comandos de voz ... · 118 Invest Apl Innov 2(2), 2008...

8
117 Invest Apl Innov 2(2), 2008 Acceso a servicios en una PBX utilizando comandos de voz con asterisk Access to services in a PBX using voice commands with asterisk Renatto Gonzales Resumen Implementar soluciones tecnológicas modernas es vital para que las compañías puedan competir actualmente. Mejorar la forma de comunicarse obedece a la necesidad de acortar distancias, acortar tiempos y por consiguiente, reducir costos y brindar un mejor servicio. Actualmente los menús de voz interactiva o IVRs son muy populares en las compañías porque permiten al usuario interactuar, mediante el envío de tonos, con las opciones de la central telefónica para acceder a los servicios que esta entrega. Los IVRs permiten, en muchos casos, auto- matizar totalmente el acceso a los servicios, un ejemplo podría ser: realizar una recarga virtual en un celular. Entre otras alternativas de interacción encontramos el uso de reconocimiento de voz. Lo que se puede utilizar principalmente en dos tipos de aplicaciones: reconoci- miento de quién habla, pues se utilizan en autenticación de usuarios y en qué es lo que se habla, ya que podemos reconocer letras, palabras o frases completas. Esta última aplicación tiene múltiples usos y uno de ellos es el reco- nocimiento de comandos de voz. El de comandos de voz puede ser agregado a las imple- mentaciones de IVR adicionándole una interface de co- municación humana más natural, teniendo como ventaja, además, el disponer de las manos libres al no tener que marcar dígitos, lo que haría que esta aplicación sea parti- cularmente útil para usuarios que quieren acceder a ser- vicios desde un automóvil u otro vehículo. Los costos de una solución de este tipo pueden ser muy altos dependiendo del hardware y software a utilizar; en nuestro caso, para mantener los costos lo más bajo po- sible, recurriremos al software libre. Utilizaremos el ser- vidor de comunicaciones asterisk como plataforma de implementación sobre la cual se configurará el IVR y lo integraremos con una librería de reconocimiento de voz para el reconocimiento de comandos hablados a través del teléfono. Como resultado, obtendremos una central telefónica as- terisk que recibirá comandos de voz de los usuarios a tra- vés de la línea telefónica y los convertirá en acciones que serán ejecutadas por el servidor; para, luego, ser converti- dos en respuestas que le llegarán al usuario por el mismo medio. De esta manera nos acercamos más al despliegue de interfaces de comunicación que sean más fáciles de utilizar y más naturales para los seres humanos. Abstract Deploy modern technological solutions is vital for compa- nies to compete today. Improve the way you communica- te due to the need to shorten distances, shorten time and therefore reduce costs and provide a better service. Currently, the voice interactive menus or IVRs are very popular in companies because allow users to interact, by sending tones, with the options for the telephone to access the services that this release. In many cases, IVRs allow fully automate access to services; an example might be to perform a virtual recharge to a cell phone. Another option for interaction is using speech recogni- tion. Speech recognition can be used in two main types of applications: recognition of who speaks, these applica- tions are used in user authentication, and in recognition of what he speaks, we can recognize letters, words or phrases. This latest application has multiple uses and one of them is recognizing voice commands. The recognition of voice commands can be added to the implementations of IVR adding a more human-like inter-

Transcript of Acceso a servicios en una pbx utilizando comandos de voz ... · 118 Invest Apl Innov 2(2), 2008...

117

Invest Apl Innov 2(2), 2008

Acceso a servicios en una pbx utilizando comandos de voz con asterisk

Access to services in a pbx using voice commands with asterisk

Renatto Gonzales

Resumen

Implementar soluciones tecnológicas modernas es vital

para que las compañías puedan competir actualmente.

Mejorar la forma de comunicarse obedece a la necesidad

de acortar distancias, acortar tiempos y por consiguiente,

reducir costos y brindar un mejor servicio.

Actualmente los menús de voz interactiva o IVRs son muy

populares en las compañías porque permiten al usuario

interactuar, mediante el envío de tonos, con las opciones

de la central telefónica para acceder a los servicios que

esta entrega. Los IVRs permiten, en muchos casos, auto-

matizar totalmente el acceso a los servicios, un ejemplo

podría ser: realizar una recarga virtual en un celular.

Entre otras alternativas de interacción encontramos el

uso de reconocimiento de voz. Lo que se puede utilizar

principalmente en dos tipos de aplicaciones: reconoci-

miento de quién habla, pues se utilizan en autenticación

de usuarios y en qué es lo que se habla, ya que podemos

reconocer letras, palabras o frases completas. Esta última

aplicación tiene múltiples usos y uno de ellos es el reco-

nocimiento de comandos de voz.

El de comandos de voz puede ser agregado a las imple-

mentaciones de IVR adicionándole una interface de co-

municación humana más natural, teniendo como ventaja,

además, el disponer de las manos libres al no tener que

marcar dígitos, lo que haría que esta aplicación sea parti-

cularmente útil para usuarios que quieren acceder a ser-

vicios desde un automóvil u otro vehículo.

Los costos de una solución de este tipo pueden ser muy

altos dependiendo del hardware y software a utilizar; en

nuestro caso, para mantener los costos lo más bajo po-

sible, recurriremos al software libre. Utilizaremos el ser-

vidor de comunicaciones asterisk como plataforma de

implementación sobre la cual se configurará el IVR y lo

integraremos con una librería de reconocimiento de voz

para el reconocimiento de comandos hablados a través

del teléfono.

Como resultado, obtendremos una central telefónica as-

terisk que recibirá comandos de voz de los usuarios a tra-

vés de la línea telefónica y los convertirá en acciones que

serán ejecutadas por el servidor; para, luego, ser converti-

dos en respuestas que le llegarán al usuario por el mismo

medio. De esta manera nos acercamos más al despliegue

de interfaces de comunicación que sean más fáciles de

utilizar y más naturales para los seres humanos.

Abstract

Deploy modern technological solutions is vital for compa-

nies to compete today. Improve the way you communica-

te due to the need to shorten distances, shorten time and

therefore reduce costs and provide a better service.

Currently, the voice interactive menus or IVRs are very

popular in companies because allow users to interact,

by sending tones, with the options for the telephone to

access the services that this release. In many cases, IVRs

allow fully automate access to services; an example might

be to perform a virtual recharge to a cell phone.

Another option for interaction is using speech recogni-

tion. Speech recognition can be used in two main types

of applications: recognition of who speaks, these applica-

tions are used in user authentication, and in recognition

of what he speaks, we can recognize letters, words or

phrases. This latest application has multiple uses and one

of them is recognizing voice commands.

The recognition of voice commands can be added to the

implementations of IVR adding a more human-like inter-

CompendioT2_nov 2008_p56_p63.indd 117 12/1/08 10:59:17 PM

118

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

face, taking the advantage of having free hands by not

having to dial digits. this would make this application par-

ticularly useful for users who want access to services from

a car or other vehicle.

The costs of such a solution can be very high depending

on the hardware and software that is used; in our case

to keep costs as low as possible we are going to use free

software. We use asterisk as a communications server pla-

tform on which to implement the IVR will be set up and

integrate it with a library of speech recognition to recog-

nize spoken commands over the telephone.

As a result we get an asterisk pbx that will receive voice

commands from users through the telephone line and

convert them into actions that will be implemented by

the server, and then be converted into answers that will

reach the user through the same medium. In this way, we

get closer to deploying more communication interfaces

that are easier to use and more human-like.

palabras claves

Telefonía Ip, telefonía con asterisk, reconocimiento de voz,

comandos de voz, IVR.

Key words

Ip Telephony, telephony with asterisk, voice recognition,

voice commands, hybrid telephony, IVR.

INTRODUCCIÓN

Los primeros sistemas de reconocimiento de voz apare-

cieron a fines de los años 80 y permitían introducir infor-

mación a la computadora utilizando sintetizadores, pero

su desempeño no era suficiente para satisfacer a los con-

sumidores.

El reconocimiento de voz permite convertir las palabras

habladas por una persona en una entrada que pueda

ser utilizada por una máquina. Las aplicaciones del reco-

nocimiento de voz son variadas y van desde el marcado

(utilizado por ejemplo en los celulares), ingreso de datos,

conversión de voz a texto (utilizado en programas de dic-

tado para procesadores de textos o correos electrónicos),

aplicaciones para personas discapacitadas hasta su uso

para controlar aeronaves en aplicaciones militares.

A pesar de que los programas de reconocimiento de voz

son actualmente bastante avanzados y los encontramos

con facilidad en los dispositivos móviles, no son emplea-

dos todavía de manera masiva por las personas en sus ta-

reas comunes. Algunos programas comerciales son poco

accesibles debido a su costo lo que aleja más a las perso-

nas y compañías de utilizar este tipo de tecnología.

En este proyecto se presenta una alternativa de código

abierto para implementar una aplicación de reconoci-

miento de voz, en particular el reconocimiento de co-

mandos de voz, utilizando como plataforma un servidor

de comunicaciones asterisk y un sistema de reconoci-

miento de voz desarrollado por la Universidad Carnegie

Mellon, conocido comúnmente como Sphinx. Aunque se

ha planteado como escenario posible una aplicación en

particular es posible extenderla a otras aplicaciones apro-

vechando la flexibilidad de la plataforma escogida.

Escenario propuesto

El escenario planteado para este proyecto consiste en

proporcionar una interface basada en reconocimiento de

comandos de voz para la fuerza de ventas de una empre-

sa que se encuentra constantemente en el campo y re-

quiere conocer en tiempo real las citas programadas, así

como escuchar los mensajes de su correo de voz.

La fuerza de ventas cuenta con celulares convencionales

que utilizarán para acceder a los servicios de agenda de ci-

tas y correo de voz. Una persona en la compañía, agendará

durante el día, nuevas citas o modificará las existentes.

El objetivo de esta implementación es que la fuerza de

ventas no necesite regresar a la oficina y se mantenga

todo el día en el campo, monitoreando en tiempo real sus

mensajes y su agenda. Un gráfico que describe el escena-

rio planteado lo vemos en la Figura 1.

FUNDAMENTOS

para cumplir el objetivo planteado en el escenario pro-

puesto, utilizaremos como plataforma de implementa-

ción un servidor de comunicaciones Asterisk, una base de

datos MySQL para almacenar la información relacionada

con las agendas de los vendedores, Festival como servidor

de TTS y Sphinx como sistema de reconocimiento de voz.

CompendioT2_nov 2008_p56_p63.indd 118 12/1/08 10:59:17 PM

119

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

Se implementaran cuatro sistemas base:

- Central telefónica basada en asterisk.

- Sistema de reconocimiento de comandos de voz.

- Sistema de correo de voz.

- Sistema de agenda de ventas, utilizará un motor TTS

para convertir en palabras habladas la información

en la base de datos.

Asterisk actuará como central telefónica y, aprovechando

su flexibilidad para integrarse con otros sistemas y len-

guajes de programación, lo utilizaremos, además, como la

plataforma sobre la cual implementaremos el sistema de

correo de voz y el sistema de agenda de ventas.

El sistema de reconocimiento de comandos de voz será

implementado utilizando el sistema Sphinx sobre aste-

risk, su función es reconocer los comandos de voz ingre-

sados por el usuario a través del teléfono. Este sistema, a

su vez, se integrará con asterisk para comunicar al usuario

con cualquiera de los dos servicios que solicite: correo de

voz o agenda.

para este proyecto se definirán dos comandos de voz

que activaran las aplicaciones: CORREO y AGENDA. Cabe

resaltar que el reconocimiento de comandos de voz será

independiente del hablante.

El sistema de correo de voz recibirá los mensajes de voz

que dejen los clientes cuando llaman a los anexos de los

vendedores en las oficinas de la compañía y éstos no se

encuentran. Esta aplicación cuenta además con una inter-

face para que los vendedores puedan ingresar a su buzón

de voz y consultar sus mensajes. para implementar este

sistema utilizaremos las aplicaciones integradas de aste-

risk: Voicemail y VoiceMailMain.

El sistema de agenda de ventas consiste en una aplicación

que genere una agenda en base de datos para los vende-

dores. Cuando un vendedor llame la agenda le leerá sus

nuevas citas o la modificación de las existentes. para esto

se utilizará una aplicación TTS (Text To Speech) de código

abierto conocida como Festival, que leerá para el usuario

el texto obtenido de la base de datos.

Cabe recalcar que para este proyecto no se ha implemen-

tado la interface que permite ingresar las citas en la base

de datos, por lo que esta tarea se realizó directamente.

Hardware

para implementar esta solución se utilizaron los siguien-

tes equipos:

Servidor de Comunicaciones

- pentium IV 3.0 Ghz

- Memoria RAM: 521 Kb

- Disco Duro: 40 Gb

- 1 tarjeta de red

- 1 tarjeta Digium TDM404p

Figura 1. Escenario planteado.

CompendioT2_nov 2008_p56_p63.indd 119 12/1/08 10:59:18 PM

120

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

Licea Telulink

- 1 puerto FxO

- 1 chip GSM

Teléfono celular

Software

para implementar esta solución se utilizó el siguiente soft-

ware:

Servidor de Comunicaciones

- Sistema Operativo Linux CentOS 4.4

- Asterisk y librerías (ZApTEL, Libpri)

Estaciones de trabajo

- Softphone: x-Lite o SJphone

Reconocimiento de Comandos de Voz:

CMU Sphinx: conocido simplemente como Sphinx, hace

referencia a un conjunto de sistemas de reconocimiento

de voz de código abierto desarrollado por la universidad

Carnegie Mellon que abarca los siguientes sistemas:

Sphinx2: es un sistema rápido para reconocimiento de

voz, utiliza Modelos de Markov Ocultos (HMM son las si-

glas en inglés) con salidas semicontinuas de funciones de

densidad de probabilidad y a pesar de no ser tan preciso

como Sphinx3 o Sphinx4 correo en tiempo real lo que lo

hace ideal para ese tipo de aplicaciones.

Sphinx3: también utiliza Modelos de Markov Ocultos

(HMM son las siglas en inglés) con salidas semicontinuas

de funciones de densidad de probabilidad. Funciona en

diversos modos: el modo “Flat Decoder” es el de mayor

precisión y el modo “tree decoder” es el más rápido.

Sphinx4: Está basado en Sphinx3, pero ha sido desarrolla-

do enteramente en Java.

para esta implementación utilizaremos Sphinx2 debido a

su rapidez y características de trabajo en tiempo real; cabe

agregar que la mayor cantidad de información encontra-

da en internet es relativa a la integración de Asterisk con

Sphinx2.

TTS (Text to Speech)

Festival, es un programa de código abierto de sinteti-

zación de voz que convierte una entrada escrita en una

salida hablada a través de la generación de voz sintética.

puede ser integrado con asterisk para convertir las entra-

das de texto en voz que será enviada por un canal hacia

un teléfono o troncal telefónica.

pROCEDIMIENTO

Servidor de comunicaciones:

1. Instalar el sistema Operativo Linux CentOS 4.4 en la

pC seleccionada como servidor de comunicaciones.

Instalación del servicio de correos

2. Instalar un servidor de correos interno utilizando

Sendmail (viene por defecto en la distribución Cen-

tOS 4.4).

Instalación del servicio asterisk

3. Compilar asterisk y las librerías necesarias en el si-

guiente orden:

a. Compilar la librería ZApTEL

b. Compilar la librería LIbpRI

c. Compilar Asterisk

4. Configurar la tarjeta analógica Digium TDM404p uti-

lizando el archivo /etc/zaptel.conf, aquí determina-

mos la señalización y el tipo de interfase.

Configuramos 4 interfaces FxO con señalización KewlS-

tart.

5. Configurar los canales analógicos en el archivo /etc/

asterisk/zapata.conf. Esta configuración es necesaria

para poder utilizar los canales analógicos en el plan

de discado, asterisk reconocerá estos canales analó-

gicos como canales ZAp.

Estos canales serán utilizados principalmente como líneas

de entrada por lo que las pondremos dentro de un con-

texto especial [sistema], esto hará que cada vez que una

llamada ingrese por cualquiera de estas líneas, la llamada

sea recibida por asterisk en el contexto sistema.

CompendioT2_nov 2008_p56_p63.indd 120 12/1/08 10:59:18 PM

121

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

Configurando el correo de voz

6. La aplicación de correo de voz incluida en asterisk se

configura en el archivo /etc/asterisk/voicemail.conf,

aquí crearemos las cuentas de correo de voz para los

usuarios y sus contraseñas. No será necesario confi-

gurar un servidor de correo electrónico, ya que sólo

almacenaremos los mensajes de voz en el servidor y

estos serán leídos por los usuarios a través del teléfo-

no.

7. Configuraremos 2 anexos SIp para que actúen como

anexos locales en la central asterisk. A cada uno de

ellos se le agregará en el plan de discado una apli-

cación Voicemail(), para que reciban el mensaje si es

que los usuarios no contestan la llamada.

Configurando el plan de discado

8. El plan de discado es de vital importancia. Aquí crea-

remos los contextos y las extensiones necesarias

para recibir las llamadas y ejecutar las aplicaciones

solicitadas por el comando de voz.

Los contextos que crearemos serán los siguientes:

[sistema]

Este contexto alojara la extensión que recibe las llamadas

externas y las pasa por el procesamiento de voz.

[correo]

Aquí se ejecuta la aplicación de correo de voz.

[agenda]

Desde aquí se ejecuta la aplicación que ejecuta la agenda.

Ambas aplicaciones han sido creadas en contextos dife-

rentes para evitar que cualquiera que llame a las líneas

celulares tenga acceso directo desde el contexto “sistema”.

Un extracto del plan de discado lo vemos en la Figura 2.

LICEAs:

9. Los Liceas son conversores de líneas análogas a líneas

celulares, tienen un puerto FxS donde se conecta un

teléfono o una interface FxO. Utilizando un chip GSM

es posible establecer y recibir llamadas desde celula-

res. La configuración del Licea es bastante simple, en

realidad sólo hay que conectar cada puerto del FxO

al Licea. El resto se configura en asterisk en el plan de

discado.

Configuración de Sphinx

para configurar sphinx2 debemos descomprimir y compi-

lar el siguiente software:

- communicator-2000-11-17-2.tgz (Modelo Acústico)

- sphinx2-0.6.tar.gz (Software de reconocimiento de

voz)

- sphinxbase-0.3.tar.gz (Librerías para Sphinx- II)

- Speech-Recognizer-Spx-0.0801.tar.gz (Extensión perl

para Sphinx-II)

- TARxxxx.tar.gz (Modelo de Lenguaje para Sphinx-II)

Figura 2. Tarjeta Digium TDM con 4 FXO instalada en el servidor de comunicaciones.

CompendioT2_nov 2008_p56_p63.indd 121 12/1/08 10:59:18 PM

122

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

Operación de la solución

En esta sección vamos a describir cómo funcionan todos

los elementos descritos anteriormente. El siguiente gráfi-

co nos muestra la interacción entre los componentes del

sistema.

1. El usuario llama a la central telefónica de la empre-

sa desde su celular. Asterisk contesta la llamada y le

responde con un IVR que le da la bienvenida y las ins-

trucciones para continuar.

2. El usuario utiliza un comando de voz: CORREO o

AGENDA. El sistema graba la voz en un archivo de au-

dio con extensión WAV. Este es pasado por el sistema

de reconocimiento de comandos de voz, el comando

reconocido se almacena en un archivo de texto, que

a continuación es leído por el script AGI voz-file.pl

y comparado con los comandos válidos (CORREO Y

AGENDA).

Si coincide con alguno de ellos es llevado al contexto in-

dicado. En caso de que no coincida se escucha un men-

saje de error y se regresa al usuario al inicio del IVR para

escuchar otra vez las instrucciones.

3. Si el usuario pronunció CORREO entonces una ins-

trucción gotoif lo lleva al contexto “correo” desde el

cual se ejecuta su correo de voz.

4. Si el usuario pronunció AGENDA una instrucción

gotoif lo lleva al contexto “agenda” desde donde se

ejecuta el script AGI búsqueda-agenda.pl, este script

utilizará el número del usuario que llama (a través de

la variable de asterisk ${CALLERID(num)}) para buscar

en la base de datos y dictarle sus últimas reuniones.

para esto se ha seleccionado una tabla simple con el

nombre del cliente y la fecha y hora de la reunión.

Figura 3. Plan de discado: contextos sistema, correo y agenda.

CompendioT2_nov 2008_p56_p63.indd 122 12/1/08 10:59:18 PM

123

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

CONCLUSIONES

• Esposibleimplementarunsistemadereconocimien-

to de comandos de voz a través de la red telefónica

tradicional o Ip utilizando software de código abier-

to. Esto amplía las posibilidades de las compañías

para aprovechar esta tecnología a un bajo costo y en

plataformas flexibles.

• Utilizarasteriskcomoplataformapermitelaintegra-

ción con diversos sistemas, en este caso lo integra-

mos con un sistema de reconocimiento de voz, obte-

niendo resultados muy favorables. partiendo de este

punto es posible desarrollar otras aplicaciones de

mayor complejidad de acuerdo con las necesidades

particulares de las compañías.

• Los scripts para la integración con asterisk podrían

resumirse a un solo script que utilice la interface AGI

para ejecutar el reconocimiento de voz y guardar el

resultado en memoria para ser comparado. Esto me-

joraría la eficiencia del sistema, sobre todo si pensa-

mos en una aplicación a gran escala.

• Sphinx2hademostradoserunsistemadereconoci-

miento de voz rápido y potente, independiente del

hablante que trabaja en tiempo real y cubre las nece-

sidades básicas de esta implementación. Aun así será

RESULTADOS

• LosusuariospuedenrealizarllamadasalaPBXaste-

risk desde un celular a través de los LICEAS y utilizar

comandos de voz para acceder a los servicios imple-

mentados.

• Los servicios permiten al usuario estar en contacto

con información relevante a su trabajo en cualquier

momento, utilizando un celular convencional y de

forma automática sin necesidad que una persona en

la compañía tenga que contestar las llamadas.

• Laintegracióndesphinxconasteriskdependebas-

tante de los scripts de programación que se imple-

menten, en este caso hemos utilizado un script que

se ejecuta en la línea de comandos de Linux.

• Elgrabarenunarchivodetextoelcomandorecono-

cido y luego leerlo con otro script reduce la eficien-

cia del sistema al tener que escribir y leer del disco

duro.

Adicionalmente el tener que ejecutar dos scripts para

completar una única tarea agrega puntos de falla y con-

sume recursos de ejecución.

• Elreconocimientodecomandosdevozsehaceutili-

zando modelos acústicos, en este caso se ha limitado

a sólo dos comandos.

Figura 4. Plan de discado: contextos sistema, correo y agenda.

CompendioT2_nov 2008_p56_p63.indd 123 12/1/08 10:59:19 PM

124

Invest Apl Innov 2(2), 2008

Gonzales R. – Acceso a servicios en una pbx utilizando comandos de voz con asterisk

necesario hacer pruebas en entornos con un mayor

número de llamadas consecutivas para comprobar la

eficiencia y estabilidad de la solución.

REFERENCIAS

[1] VoIp-INFO.ORG (2008, Octubre). Asterisk [en línea], Recupe-

rado el 15 de mayo de 2008: http://www.voip-info.org/wiki-

Asterisk

[2] The Sphinx Group at Carnegie Mellon. The CMU Sphinx

Group Open Source Speech Recognition Engines [en línea],

Recuperado el 02 de Setiembre de 2008: http://cmusphinx.

sourceforge.net/html/compare.php

[3] VoIp-INFO.ORG (2008, Mayo) Sphinx and Asterisk [en línea],

Recuperado el 04 de Octubre de 2008: http://www.voip-

info.org/wiki-Sphinx

ACERCA DEL AUTOR

Renatto Gonzales Figueroa es ingeniero

electrónico. Cuenta con experiencia en la

implementación de aplicaciones con he-

rramientas de código abierto, orientado al

desarrollo de aplicaciones de Telefonía Ip

sobre Asterisk.

Es investigador en el área de Redes de

Datos y Telecomunicaciones. Sus áreas de interés son: Ingeniería

de tráfico, Telefonía Ip, desarrollo de aplicaciones de código abier-

to. Es consultor en soluciones con plataformas Linux, Java y pHp.

CompendioT2_nov 2008_p56_p63.indd 124 12/1/08 10:59:19 PM