domingo, 6 de junio de 2010

El usuario de una petición WS con Axis y WSS4J

Hace tiempo que andaba buscando la manera de obtener las credenciales de identificación enviadas en una petición a un Web Service.

El problema viene dado por la necesidad de asegurar el acceso a los métodos que se ofrecen por XML-RPC y posteriormente en su implementación, identificar al usuario, pero resulta que Axis 1.4 (en su configuración más.. cómoda), realiza el despliegue de un servicio a partir de un POJO especificado en el wsdd, y entonces ¿Como podemos hacer referencia al contexto del mensaje recibido?

Pues todo viene a partir de la clase MessageContext de Axis. En cualquier momento de una petición, está disponible la llamada a dicho objeto, y a su método estático getCurrentContext mediante el cual tendremos acceso al mensaje objeto de la petición realizada.

La identificación del usuario ya se realiza por parte de WSS4J, y ahora nosotros queremos asociar los datos enviados al usuario que se identificó, de forma que en estos POJO's podremos escribir el siguiente código:


String username = null;
Iterator<SOAPHeaderElement> oItHeaderEnv = MessageContext.
        getCurrentContext().getMessage().getSOAPHeader().
        examineAllHeaderElements();
while (oItHeaderEnv.hasNext()) {
    Iterator<MessageElement> oItHeaderElems = oItHeaderEnv.next().
         getChildElements();
    while (oItHeaderElems.hasNext()) {
        Iterator<MessageElement> oItParams = oItHeaderElems.next().
            getChildElements();
        while (oItParams.hasNext()) {
            MessageElement oWSSParam = oItParams.next();
            if("Username".equals(oWSSParam.getName())) {
                username = oWSSParam.getValue().trim();
                break;
            }
        }
    }
}


Este código nos permitirá acceder al nombre de usuario enviado, o a cualquier otro parámetro enviado en la cabecera Security.

Otra de las opciónes, es la implementación de sesiones de Axis, ya que en la misma PasswordCallbackClass del Handler de WSS4J, podríamos implementar el inicio de la sesión, y después recuperarla en el método ofrecido por XML-RPC, previa configuración del manejador de sesiones de Axis en el wsdd.

viernes, 4 de junio de 2010

Tendencias musicales

Estoy harto de tener que explicar que tipo de música me gusta. Por eso normalmente digo que me gusta "el heavy" porque, ¿Cómo le explicas a alguien que es para mí la buena música?. Para mí la buena música es tantas cosas que no sé...

Ciertamente me gustan las guitarras, me gusta la distorsión y he escuchado mucho "heavy", desde Pantera, a Soziedad Alkoholica, pasando por Narco, Koma o System of a Down y como no, Metallica, Iron Maiden, Helloween...

Y también me gusta el blues, mucho blues, como la primera banda con la que empecé a tocar, y también me gusta Triana, uno de los mejores grupos de rock andaluz, que se acercan al rock progresivo en algunos de sus temas, y ahí es cuando viene la sorpresa. ¿Como le explicas a alguien que te gusta el rock progresivo? ¿Cómo llega a gustarte?

Creo que para eso hay que escuchar mucha música y no a las locas, empezando por el blues de los 60, y llegar al rock (y blues) de Cream, de Jimi Hendrix, y de Led Zeppelin. Es extraño que hoy en día pocos recuerden temas como No quarter de Led Zeppelin... para la mayoría, acaban en Stairway To Heaven.



Tengo la sensación de que hoy en día la gente cree que escuchar mucha música consiste en escuchar todos los grupos nuevos que sacan "más de lo mismo", letras de amor (que pesadilla), techno, modas retro, rap... ¿Y de que te saca escuchar lo mismo por distintos grupos que se copian entre si? ¿Porque no vale con los originales? no se, a lo mejor me estoy haciendo mayor, pero tengo la sensación de que ese tipo de personas solo pretenden mencionar un grupo que no conoces para que parezca que saben más de música. Y luego resulta que no han escuchado a Leño, a Rosendo, a Los Suaves o a Barricada... pero si no conoces a los que imitan el estilo de Platero y tu, o Extremoduro, no sabes de música ¿Pero son mejores? ¿Es que aportan algo más?

¿Quieren escuchar algo realmente bueno y que nadie conoce? pues que tengan criterio, conozcan los instrumentos, y entonces podrán valorar. Porque cuando ves los conciertos de Radio 3 con cuatro mindundis vestidos de retros y haciendo tonterias con un moog, y un batería que parece un albañil, pues me da la risa. Si John Bonham levantara la cabeza... ¿Realmente saben lo que hacen? Antes hay que demostrar que eres bueno, para saber expresarte, y poder hacer algo tan fantástico como esto:



Esto es el rock sinfónico, y progresivo. Y ¿Cómo explico que me encanta el solo de batería de In-A-Gadda-Da-Vida? pues esto es lo que no puedo explicar cuando me preguntan por mis gustos musicales. Y ¿Como explico que también me gusta El Ultimo de la Fila o U2 u O'funk'illo?

Y lo más gracioso es la tendencia a creer que el rock siempre es estridente. Me gustan las guitarras así, pero también las que no lo son, como las de Fito y Fitipaldis o dentro del rock progresivo cosas como esta:



Y esque claro, se suele decir que el rock no vende, aunque el segundo disco más vendido de la historia sea de AC/DC, y poco despues uno de Meatloaf. Pero claro el rock según algunos listos, está muerto, y yo les digo... toma esto:



Por cierto, nos vemos en Córdoba en el concierto de Deep Purple, o el de Joe Bonamassa, o en Sevilla en el concierto de AC/DC!!!!

Crisis

Politicos ineptos, que solo piensan en su ombligo, que solo saben quedar bien. Y para eso enchufan a los que pueden y viven como reyes, y nos piden que les ayudemos.

Y ahora, después de que hace algún tiempo "inyectaran" dinero a los bancos, nos piden que trabajemos más, más barato, y con más facilidad para echarnos. ¿Así se arregla? Menudos "Robin Hood" a la inversa, tiene delito robarle a los pobres para pagar a los ricos.

Y nos machacan a impuestos para pagar excesos y subvenciones a quienes no colaboran con la sociedad. Pues a los que no colaboran con la sociedad, la sociedad no debería colaborar con ellos.

Y muchos nos preguntamos porqué las mejores mentes, como notarios, médicos, e ingenieros que aprueban unas oposiciones imposibles, están dirigidas por unos ineptos, sin cultura, que no han demostrado nada acerca de su aptitud para el puesto de dirigente político. ¿No debería un alcalde, un concejal y ya no digamos un ministro demostrar su valía para el puesto? Así lo hacen las mejores mentes de este país en empresa privada y pública, demostrarlo día a día, y claro... así nos vá.

Y los sindicatos... bueno... no me quiero enfadar ahora, pero.. hay que cambiar el sistema como sea. ¿Que alternativas tenemos? Ya no es tiempo de revoluciones sangrientas, y la ley electoral impide votar libremente, a las personas, no a los partidos, y además se aseguran la perpetuidad.

Nos han quitado el poder, y ahora, el espabilado del hijo de la vecina, ese tontaina que se creía superior, y que lo más cercano a la lectura que conoce es el Marca, está dirigiendo tu ciudad, y tu país, porque ha estado de fiesta con los peces gordos de su partido.

Lo malo es que las buenas personas no se meten a políticos ni a sindicalistas. Las buenas personas trabajan, todos los días, con gana y con ánimo de hacer algo, de progresar y de conseguir por su propio esfuerzo vivir en un mundo mejor cada día y los políticos no, solo en contentar a sectores de población que les voten, y seguir como cabestros los designios del partido. Ni tienen personalidad ni quieren tenerla, porque si llevan la contraria, se les echa. Es extraño que se destroce la carrera de un político que piensa por si mismo, y se defienda a políticos corruptos.

Pues así pasan estas cosas, ahora a remediarlo como siempre, incrementando desigualdades y apretando las tuercas más todavía, hasta que no podamos más. Pero, ¿Que vamos a hacer? ¿Que podemos hacer? Sinceramente, ya no se me ocurre nada.

viernes, 25 de septiembre de 2009

Las nuevas tecnologías

La comunicación de texto, imágenes y vídeo de forma fácil y rápida, permite que una empresa local de pequeño tamaño sea vista desde el otro lado del planeta, o que escuchemos a grupos musicales de cualquier lugar, algo impensable hace algunas décadas de forma tan sencilla. Pero además permite a cualquier ciudadano opinar, y escribir sus vivencias y ponerlas a disposición de todo el mundo. Esto es la verdadera revolución de internet. Las fronteras han caído en lo que respecta a cualquier ámbito de la vida, económico, social o político.

El concepto (ya casi obsoleto) de Web 2.0 centra sus directrices en una web más clara, más ligera y más interactiva, que son las claves para conseguir una innovación real a parte de las buenas ideas que despierten la curiosidad del navegante, y por ello debería seguir vigente y tenido en cuenta. Una buena idea sin el respaldo de una buena navegabilidad, y velocidad de respuesta, no tiene cabida hoy en día. El triunfo de Google, aunque no pasa por respetar demasiados estandares, si corrobora que sus diseños simples, son de gran utilidad, y así facebook etc, etc. Este mismo blog, tampoco lo hará (imagino), pero es algo que siempre pretendo tener en cuenta en mis proyectos.

Y en base a estas directrices es en las que hay que seguir trabajando. Los estándares del W3C son claves para el éxito de una web, pese a que "los grandes" no los respeten, o no los tengan en cuenta en sus barómetros, todos deberíamos ser más exigentes respecto a ello. Llevar a cabo un proyecto cuidando estos factores es una clave en la recurrencia de las visitas

Hoy en día no es dificil encontrar webs con una saturación de contenidos en cada página que se visita, y carecen de un menú completo y descriptivo. En ese sentido deberíamos educar a los clientes, a las personas a las que realizamos la consultoría. ¿o no?

martes, 28 de julio de 2009

Estudio de grabación - Compilando Ardour 2.8.2 VST y Jack 0.116.2 en ubuntu

Pues como ya he comentado en otro post, mi interés en la grabación digital de audio viene desde tiempo atrás, cuando mi hermano se hizo con una pequeña mesa de mezclas Mackie y una tarjeta de sonido Terratec EWS88/MT, allá por el año... ni me acuerdo. Ese fué el primer equípo que utilizamos en nuestras grabaciónes caseras, junto con el programa de grabación de audio Logic.

Aunque la mesa solo tiene 4 entradas I/O balanceadas, los previos que tienen las mesas Mackie tienen una relación calidad/precio de las más elevadas. Actualmente, habiendo renovado también el equípo informático, nos hemos hecho con un módulo de previos a válvulas que incorporan ecualización y compresión de la señal. Además, para completar 8 pistas, de una pequeña mesa Yamaha utilizamos dos de sus inserts.

Todo esto lo hemos ido completando con sets de micros cada vez mejores donde no falta un set de microfoneado de batería AKG, micrófonos de condensador para ambiente, así como el conocido Shure SM57... uno de los micros mas versátiles del mercado, que graba la caja de mi batería con una pegada increible, y recoje a la perfección los agudos de una guitarra eléctrica.

Por otro lado, hace poco que terminamos una obra enorme en el local, que ha quedado como un auténtico estudio de grabación. Hemos tenído en cuenta desde las paredes, de madera y espuma acustica para evitar reflexiones en frecuencias medias, así como trampas de graves con "Rockwool" para el techo, tarima flotante con grosores mayores tanto para las piezas como para la espuma etc.

Y después de todo esto hay que sacarle partido. Hace tiempo que dejé de usar los sistemas Windows, por cuestiónes éticas, y en esto de la música no quería ser menos, así que me informé de las opciónes libres, y hasta el momento no puedo tener queja. Me he dado cuenta de que la grabación tiene más calidad, mas cuerpo y más realismo, aunque parezca imposible. He probado distribuciónes específicas como Musix y Ubuntu Studio, pero al final uso Ubuntu desktop 9.04 con el kernel rt, Ardour 2.8.2 sin Plugins VST pero con los LV2, que son una auténtica maravilla, así como Jack 0.116.2.
Lo peor es que en los repositorios de Ubuntu, así como de otras distros, las versiónes tanto de Ardour como de Jack no están actualizadas del todo, y en un proyecto tan vivo como Ardour, estas actualizaciónes incluyen mejoras significativas. Además no basta con instalar el kernel rt, sino que hay que asignar recursos adicionales del sistema para que realmente se pueda iniciar el servidor jack activando el modo rt y reducir la latencia de la señal, y un rendimiento mayor del equipo. Evidentemente todo dependerá de tu hardware, pero en mi caso, mi Terratec EWS88/MT tiene una latencia con la configuración por defecto, de 46 ms y configurando jack adecuadamente (sin xruns) baja a 5,4 ms, lo cual no está mal considerando los 128 ms de latencia que obtenía con un kernel "generic".

Antes de nada, comentar que me pareció sencillamente increible que Ubuntu detectase automáticamente mi Terratec con los drivers ALSA para tarjetas Envy24 (ICE), y empezase a funcionar perfectamente sin instalar nada, más allá del panel de control de la tarjeta, el "Envy24 Control", que también funciona a la perfección (en Windows XP tuve que buscar los drivers y descargarlos de una página de dudosa intención).

Y así, manos a la obra. Vamos a instalar y configurar el kernel realtime de ubuntu. La instalación de un nuevo kernel hoy en día no implica (necesariamente) nada complicado como una compilación o cosas así, que en el pasado nos han hecho renunciar. Ahora solo hay que abrir el gestor de paquetes de ubuntu (Synaptic) y buscar "linux rt" e instalar:
  • linux-image-rt
  • linux-headers-rt
  • linux-restricted-modules-rt
Una vez hecho esto, nos encontraremos con una opción más de inicio en el GRUB, que nos permitirá arrancar con dicho kernel, o para hacer que Ubuntu arranque con ese kernel, editar el archivo /boot/grub/menu.lst y hacer que por defecto arranque con ese kernel, indicando el número de opción del menu de grub en la sentencia default.

Ahora nos toca configurar el sistema para que jack tenga todos los recursos necesarios y aprovechar el rendimiento de este kernel lo máximo posible. Básicamente se debe configurar la cantidad de memoria que un proceso puede bloquear para si, ejecutandose como el usuario con el que entremos en ubuntu. Esta configuración básica la encontramos en el archivo /etc/security/limits.conf. La sintaxis de las líneas en este archivo es:

{nombre_de_usuario} {tipo_de_limite} {item} {valor}


de forma que podemos añadir unas líneas como las que vemos a continuación:
@audio - rtprio 99
@audio - nice -10
@audio - memlock unlimited
Donde @audio es el nombre del grupo de usuarios para el que asignamos los límites. Para el parámetro memlock también podemos calcular un tamaño en Kb en función de la RAM que tengamos y de lo que nos permita el sistema. Desde los desarrolladores de Jack recomiendan unlimited. El parámetro nice puedes también asignarle -15 en determinados equipos con lo que los procesos tendrán más prioridad. Por supuesto deberás crear el grupo audio y asignar tu usuario a dicho grupo, o cambiar el nombre del grupo por alguno al que ya pertenezcas.

Para la instalación de Jack además, es necesaria una partición para el directorio de archivos temporales que utiliza Jack y para ello creamos un directorio:

sudo mkdir /mnt/ramfs

Y añadimos la siguiente línea en /etc/fstab:

none /mnt/ramfs tmpfs defaults 0 0

Cuando reiniciemos el equipo, podremos comprobar en "Sistema > Administración > Monitor del sistema" que tenemos ubuntu arrancado con el nuevo kernel y la nueva asignación de prioridades etc.

Ya tenemos nuestro equipo listo para instalar Jack y Ardour. Jack es el servidor de audio, y permite establecer la ruta de las señales de audio que tengamos en nuestro equipo entrando y saliendo, derivandolas a plugins de efectos, a otras aplicaciónes como Jamin, o incluso con JackNet a otros equipos que podríamos utilizar como procesadores de efectos.
Ardour es una aplicación que nos dá una interfaz para realizar proyectos de audio utilizando Jack, y nos permite grabar, ecualizar, filtrar, y manipular las señales de audio. Así que nos descargamos:
Y ahora es cuando deberemos instalar unas cuantas librerías que nos permitan realizar una compilación correcta de ambos sistemas. Aquí os dejo las ordenes, que solo tendréis que copiar y pegar en un terminal y con permisos de root. Algunos paquetes están duplicados pero weno no os preocupéis puesto que los gestores de paquetes son mágníficos...

sudo apt-get install libxine1 libxine-dev libxine1-gnome libxine1-misc-plugins gxine gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-bad gstreamer0.10-pitfdll gstreamer0.10-ffmpeg jamin audacity jack libmp3lame0 jack-tools libjackasyn0 liblo0-dev libqt4-dev python-ogg-dbg jack-tools meterbridge libjackasyn0 nas libfftw3-dev liblo0-dev libqt4-dev python-ogg-dbg python-pyvorbis-dbg csladspa libfftw3-dev liblo0-dev libqt4-dev python-ogg-dbg python-pyvorbis-dbg qt4-dev-tools libmysqlclient15-dev libsqlite3-dev libiodbc2-dev audiooss phonon-backend-xine alsa-tools-gui build-essential libxml2 scons gettext pkg-config libtool xml2 libxslt1.1 python-libxslt1 libmodxslt0 libxalan110 xalan xmlstarlet libart-2.0-2 libart-2.0-dev libart2.24-cil libart-dev libart2 libgdk-pixbuf2 libgdk-pixbuf-dev libart2-ruby libasound2-plugins libsamplerate0 libsamplerate0-dev libgavl1 libgavl-dev raptor-utils libraptor1 libraptor1-dev liblrdf0 liblrdf0-dev jack-rack blepvco blop caps dssi-dev dssi-example-plugins dssi-utils fil-plugins jackeq libladspa-ocaml libladspa-ocaml-dev lv2core mcp-plugins rev-plugins rubberband-ladspa ladspa-sdk muse ubuntustudio-audio-plugins libgnome2-canvas-perl libgnomecanvas2-0 libgnomecanvas2-common libgnomecanvas2-dev libgnomecanvasmm-2.6-1c2a libgnomecanvasmm-2.6-dev guile-gnome0-canvas libgnomecanvas2-ruby1.8 libfftw3-3 libfftw3-dev pd-aubio python-aubio libaubio-dev libaubio2 aubio-tools libsndfile1 libsndfile1-dev wine wine-dev libsvn1 libsvn-perl subversion subversion-tools boost-build libboost-signals-dev libboost-regex-dev libboost-graph-dev libboost-dev libusb-1.0-0 libusb-1.0-0-dev libusbprog-dev alsa-firmware-loaders libdiscover-dev libdiscover2 libusb++-dev libmtp-dev libmtp8 libgphoto2-2 libgphoto2-2-dev alsa-source alsa-tools libbio2jack0 libbio2jack0-dev libbjack-ocaml libbjack-ocaml-dev libclalsadrv-dev libclalsadrv1 liblash-dev liblash2 liblo10k1-0 liblo10k1-dev libopenal-dev libopenal1 bse-alsa libesd-alsa0 libasound2-plugins libasound2-dev libasound2 libao2 gstreamer0.10-alsa alsa-base libpt2.6.1-plugins-alsa automake autoconf autotools-dev gnome-common libsigc++-2.0-0c2a libsigc++-2.0-dev libsigc++-1.2-5c2 libsigc++-1.2-dev libsigc++-dev lv2core libecasound2.2-dev libtse3-dev libwildmidi-dev libwildmidi0 libsdl-mixer1.2 libsdl-mixer1.2-dev dssi-host-jack libfluidsynth-dev libfluidsynth1 libportmidi-dev libportmidi0 redland-utils libsoprano4 librdf-perl librdf-ruby python-librdf librdf0 librdf0-dev libdmalloc-dev libxklavier12 libxklavier12-dev libdmalloc5

Un tostón, además os recomiendo no hacerlo de un tirón, pero enhorabuena!!! Ahora eres capaz de compilar un sistema de audio profesional completo!!! Además, ahora también podrás compilar el core de LV2, las librerías SLV2 y los plugins ll etc. es lo bueno de esta orden...

Evidentemente si has ejecutado todo lo anterior, ya tienes instalado Jack, en la versión del repositorio de Ubuntu, pero si quieres la última versión, escribe desde un terminal en el directorio donde has descomprimido los fuentes de jack:

./configure --with-default-tmpdir=/mnt/ramfs
make
sudo make install


Esto te compilará e instalará el ejecutable de Jack en /usr/local/bin/jackd, recuerda esto cuando intentes iniciar el demonio, y cuando configures qjackcontrol. Con estos nuevos parámetros, y dependiendo de la tarjeta de sonido que tengas, podrás ajustar el parametro de "Cuadros/periodo" (frames/period) para reducir la latencia. Yo actualmente tengo 5 ms con 256 frames/period, y ningún xrun.

Para compilar ardour vete preparando una taza de café, unos puritos e incluso un tablero de parchis porque va a tardar un poquito... jeje... Así que cuanto antes mejor. Entra en el directorio donde descomprimiste Ardour, y escribe:

scons LV2=1 FFT_ANALYSIS=1 SLV2=1 VST=1
sudo scons install


Imagino que no es muy normal que haya que intentarlo varias veces, pero en ocasiones, me fallo la compilación y misteriosamente al volver a intentarlo no da error. Supongo que el orden en script de scons estará mal, o hay interdependencias raras... vete tu a saber... La opción de VST es posible si has instalado todas las librerías que he mencionado, pero lo cierto es que aunque es más estable que antes, no va del todo bien, y los plugins LV2 y Jamin permiten hacer maravillas. Bueno pues si has sido capaz de realizar estos pasos tan sencillos, ya tienes un sistema de audio bastante profesional, y gratuito, a disfrutarlo.