lunes, 11 de noviembre de 2013

Charla en el Google Dev Fest Sur

Bueno... despues de mucho tiempo me he acordado que tenía un blog. Ya, lo poco que escribo lo hago en twitter.
Pero quería poner esto aquí. Para que no se me olvide. Magnífica experiencia y pedazo de evento.


viernes, 16 de septiembre de 2011

Y... bueno ya es hora de venderme

Ya llevo tiempo pensando en la poca publicidad que doy al trabajo que realizo. Y analizando el trabajo de otras personas mucho más famosas que yo y cuya trayectoria es sobradamente conocida, hoy me encuentro con muy poca autoestima, así es que necesito recordarme algunas cosas, que me hacen pensar en lo banal de esas reputaciones que en muchos casos se deben más al éxito comercial de los proyectos en los que se han implicado que al mérito técnico, al buen análisis y diseño, o a la elección de la tecnología más adecuada.

Desde que comencé con la programacion en el sector privado allá por el año 2002 o desde que cree una red social para mi proyecto fin de carrera en PHP allá por el año 2003, y tras el éxito comercial de este tipo de portales al cual no supe dar salida en su momento, la enumeración de trabajos que he realizado en "background" sin importarme que se supiera que mi mano está ahí ha sido innumerable.

Soy inquieto y quiero aprender más siempre. Por eso estoy seguro de que siempre tendré actitud y potencial para cumplir con cualquiera de los objetivos que se me plantean. Y lo he demostrado.

He desarrollado mis habilidades haciendo uso de varios conocidos frameworks, como struts e hibernate en Java y con el desarrollo frameworks propios que siempre me han resultado más útiles, escalables y sencillos, quedando demostrado en los desarrollos que hoy en día andan... por ahí...
y que por otro lado me abren las puertas para que tras un largo periodo, tenga acceso a dirigir proyectos y por ejemplo, analizar y codificar un gestor de trámites administrativos que incluye el diseño de cualquier procedimiento con la administración y su adecuación a la legalidad sobre la e-administración. Un proyecto sin precedentes que la Junta de Andalucía seleccionó para incluir en su repositorio de aplicaciones disponibles para su uso como software libre para cualquier administración en esta tierra.

El trabajo que he realizado pasa por el análisis y desarrollo para empresas en distintos sectores que también incluyen sectores como la aeronáutica, la formación y el e-learning, pero también he dirigido procesos de certificación de calidad y realizado labores de consultoría.

Entre muchos otros trabajos se me ocurre también destacar el proyecto "Dentro Video" para Joomla, con la investigación y desarrollo de su sistema de almacenamiento y taggeo, el análisis y desarrollo de un sistema de grabación televisiva y de analizar, diseñar y codificar la primera escuela de poker en Internet que reproduce, almacena y auto-corrige las manos subidas de cientos de miles de jugadores en internet, con un proceso de minería de datos que en su conjunto, conforma una de las herramientas de formación y análisis del poker mas novedosas en el mundo.

Y todo bajo la potencia y escalabilidad del framework que desarrollé hace ya algunos años con el que además me he lanzado al universo del "reality mining" con City Analytics, un sistema que en tiempo real ofrece información sobre el movimiento de las personas en las ciudades, integrándome con todo tipo de clientes en PHP, Ruby o Python y además estando a cargo de los sistemas que soportan tal cantidad de datos.

Y tras tanto desarrollo y después de haber visto como "programadores" (según ellos) de toda índole mienten descaradamente a costa de otros incautos como yo, me encuentro que no es suficiente porque nunca dije "Esto es mío", por que nunca dije "Esto lo hice yo".

Pero ya va llegando el momento. Y sobre todo después de estudiar en la universidad, donde ahora me encuentro que no sirvió de nada, puesto que el gobierno reconocerá un título a todos aquellos que se aprovecharon de mi trabajo, y que puedan acreditar que llevan 10 años en este trabajo. Así, por el intrusismo laboral y por listos, ahora, perfectos inútiles podrán conseguir un título. Debí ponerme a trabajar sin estudiar, puesto que ahora, tendría más dinero y el título que tanto trabajo me costó conseguir. Desde luego esta es la mejor forma de fomentar la ignorancia y la "cutrez", en lugar de potenciar la calidad, que es lo único que le queda al mundo occidental.

viernes, 29 de julio de 2011

En un periquete

Tanto tiempo sin escribir que ni recuerdo por donde iba... y es que han sido casi cuatro meses de infarto.

Por un lado el trabajo. En Ciudad 2020 no paramos, siempre tenemos nuevos retos y nuevos proyectos. He estado integrándome con todo tipo de clientes y aplicaciones que beben de nuestra API, y además en Mayo terminé con el desarrollo del mapa de movilidad de Córdoba. Un proyecto muy interesante en el que he aprendido más de la API de Google Maps V3 de lo que jamás pensé que me haría falta.... jejeje. Encontré especialmente interesante el sistema de InfoWindows y el sistema que dibuja el HeatMap, que se complementa con java.awt.Graphics2D en el servidor.

Y lo hemos presentado al mundo en el "Living Labs Global" en Estocolmo, donde estuve en un Workshop group con Lewis Carl de Oracle debatiendo sobre "Cloud Computing".



Por otro lado City Analytics sigue creciendo y madurando, de forma que hemos incluido muchas mejoras en el rendimiento, tras algún que otro traspiés, hasta que hemos liberado la versión 1.9 del cliente. Esto unido a nuevos servicios como el Checkin Físico y otras novedades que incorporaremos en breve me ha tenido bastante ocupado.

Y por otro lado, hay algo que se ha hecho un hueco en mi vida, y que está creciendo de forma que casi asusta. Pero ya no hay quien lo pare. No hay palabras para esto y solo aquellos que lo han sentido lo pueden entender. Me viene al pelo esa frase de la canción de Los Suaves que dice que "hay cosas que solo se dicen con silencio y yo callándome te las digo". Mi hija vino al mundo el día 9 de abril.

lunes, 28 de marzo de 2011

Optimización de MySql InnoDB en un servidor Linux

Tras un arduo proceso de investigación y documentación, voy a describir el proceso a seguir para configurar un servidor MySql para producción. Las bases consultadas no son otras que la documentación oficial en dev.mysql.com y mysqlperformanceblog.com.

En la configuración de un servidor debes pensar en una instalación que tenga un rendimiento acorde con lo que se necesita, empezando por la instalación del sistema operativo. Como es de imaginar principalmente MySql realiza tareas pesadas sobre los discos duros, por lo tanto la elección de discos duros con bajos tiempos de búsqueda es importante pero también es importante si tienes varios discos, optar por usar RAID 0 para unirlos, lo cual afecta bastante al rendimiento de las búsquedas.

Después será necesario revisar la implementación y el diseño de tu base de datos. Respecto al diseño no contaré nada puesto que depende de la aplicación/es que hagan uso del Data Source con MySql, pero respecto a la implementación si que hay un par de cuestiones a tener en cuenta:
  • Manten el tamaño de los campos de tu BBDD lo más pequeño posible. Si puedes usar mediumint en lugar de bigint hazlo, y a colación e igual de importante es que:
  • No utilices campos `varchar`. Y si lo necesitas, al final de la tabla. Dependiendo de tus necesidades por supuesto, pero ten en cuenta que en su lugar puedes usar el tipo `char`. Un tamaño variable para las cadenas ahorra espacio en disco pero un tamaño fijo permite un acceso más rápido a los datos puesto que no hay que calcular la longitud del registro variable como ocurre cuando tenemos un `varchar` y saltamos al siguiente registro. InnoDB realiza algunas optimizaciones por ejemplo convirtiendo `varchar` de tamaño menor de 4 en `char`, pero es deseable que calcules la longitud máxima de un campo y crees campos de tamaño `fixed`. Dentro de poco cuando regalen TeraBytes con las cajas de galletas, esta pérdida de espacio con registros `fixed` no será tan importante como el rendimiento de las consultas a tu servidor... ;)
  • Crea solo los índices que necesitas y elimina índices duplicados. Los índices benefician el proceso de lectura pero pueden complicar el de escritura, así que debes tener cuidado con esto. También ocurre que borras y creas una tabla un varias veces cambiando el script, modificando... y al final, revisando te das cuenta de que tienes un índice duplicado. Si el tamaño de tu tabla no es muy grande, el gasto en memoria puede no ser demasiado, pero he llegado a reducir en cerca de 3 Gb el tamaño de una tabla tan solo descubriendo y eliminando un par de índices duplicados.

Una vez que hayas revisado esto lo deseable es afinar el rendimiento de la ejecución de MySql. Los parámetros más importantes son (para InnoDB):

  • innodb_data_home_dir ( =/var/lib/mysql): Es el lugar donde InnoDB almacenará la información (anteponiéndolo a innodb_data_file_path en caso de existir) así como los ficheros de registro. Asegúrate que apunta a tus discos en RAID 0.
  • innodb_data_file_path | innodb_file_per_table: Con estos parámetros configuras como se almacenan tus datos y donde. Si especificas innodb_file_per_table, indicas a MySql que guarde los datos de cada tabla en un fichero distinto. Esto es beneficioso si tienes en mente ampliaciones y/o migraciones.
  • innodb_buffer_pool_size: El tamaño que ocupa en memoria el almacenamiento intermedio de datos. Cuanto mayor es este valor, menor es la cantidad de operaciones de lectura/escritura en disco. El valor adecuado para un servidor dedicado solo a MySql debería permitir la ejecución del sistema operativo sin problemas. Ten en cuenta que a este tamaño se suma el del parámetro key_buffer_size en el motor MyISAM. Desde la documentación oficial de MySql especifican un 80% de la memoria del ordenador, pero con 64Gb de RAM tendríamos 12 Gb para el SO... es mucho ¿no?
  • innodb_log_file_size: Es el tamaño de los ficheros de registro de InnoDB. Pueden existir varios y la suma de sus tamaños no puede exceder los 4Gb. Un tamaño mayor reduce las operaciones de lectura/escritura en disco, así que este parámetro también es importante. Una regla para fijar este valor se basa en darle el 25% del tamaño especificado en innodb_buffer_pool_size. Ten en cuenta que cada vez que quieras cambiar el tamaño de los ficheros de registro debes fijarte en que probablemente ya existan así es que tendrás que:
    1. Parar el servidor,
    2. Hacer copia de seguridad de los ficheros de log. Normalmente ib_logifle0 e ib_logfile1 en /var/lib/mysql renombrados a ib_logfile0.BAK e ib_logfile1.BAK. En caso de pánico y horror puedes restaurarlos.
    3. Borrar los originales (ib_logfile0 e ib_logfile1),
    4. Especificar el nuevo tamaño, e
    5. Iniciar MySql
  • innodb_log_buffer_size: Es el tamaño del almacenamiento intermedio en los ficheros de registros, por lo tanto valores altos también reducen el número de operaciones de lectura/escritura. Aún así el tamaño de esta variable (evidentemente siempre menor que innodb_log_file_size) se establece como razonable entre 8 y 16 Mb ya que este buffer se vuelca forzosamente cada segundo, así que puede no ser necesario un tamaño mayor y si que sería un gasto de memoria.
  • innodb_flush_log_at_trx_commit: Este parámetro controla cuando se vuelcan los datos del buffer en los ficheros de registros. Este volcado se realiza cada segundo forzosamente pero puede hacerse más a menudo. El valor por defecto de 1, indica que este volcado se realiza tras un commit. Un valor de 2 sería cada 2 commit, o cada segúndo, lo que ocurra antes. De esta forma un valor de 2 reduce las operaciones de E/S en disco pero podríamos perder un segundo de transacciones en caso de error del sistema. Yo pongo 2... ;)
  • innodb_flush_method: Indica la forma de volcado de los ficheros de registros y datos. Si está disponible, con la opción O_DIRECT evitamos el uso de memoria swap y así MySql vuelca estos ficheros directamente en memoria física evitando consumir ancho de banda entre la memoria y la CPU por las copias de la cache del kernel y del espacio de memoria del usuario.

Pues con esto espero haber arrojado algo más de información sobre los parámetros más importantes, aunque evidentemente me dejo mucho en el tintero, pero para mí estas son las cuestiones más importantes. Suerte!!

sábado, 26 de febrero de 2011

Libertad, igualdad y democracia

Hace poco que leía un artículo sobre este tema que me parece muy interesante. Sobre todo en estos tiempos en los que a mi juicio, el sistema esta a prueba como nunca antes lo había estado.

Una prueba que dudo que supere si no cambian las cosas puesto que este "liberalismo" en el que vivimos (pese a que el partido actualmente en el poder se denomine "socialista") no parece tal. Un liberalismo entre comillas puesto que si nos atenemos a sus principios, parece haberse olvidado del que a mi juicio es el más importante. En este sistema respeta el individualismo, respeta la libertad y por supuesto respeta la propiedad privada, así como el establecimiento de códigos civiles, y resolución de problemas por medio de asambleas.

Pero ha olvidado la igualdad, y en algunos casos la necesidad de que los gobiernos proporcionen un nivel mínimo de seguridad y vida para su correcto funcionamiento, lo cual es condición necesaria para el ejercicio de la democracia, el poder del pueblo, la forma de gobierno en la que se ha manifestado el liberalismo.

Esta democracia es considerada por algunos la tiranía de las mayorías. Y en ocasiones puede ser cierto. Pero a mi juicio debe ser aceptada esta tiranía, siempre que las decisiones de la mayoría respeten los principios de este liberalismo.

Explicado mediante un ejemplo, quiero decir que una decisión democrática de prohibir el consumo de drogas no tiene sentido, puesto que no cumple con el principio de libertad individual. Otra discusión es si las drogas aumentan los niveles de delincuencia, lo cual sin duda es así. Pero a mi juicio, no es por los efectos en la mente humana, si no por la prohibición del comercio de estas sustancias.

Otro claro ejemplo a mi juicio sería la decisión democrática de privatizar la educación, la justicia o la sanidad, puesto que es incompatible con la igualdad, desde el momento en el que es obvio que en ese supuesto los individuos con más recursos (hoy en día el dinero) tendrán acceso a una mejor educación, una mejor sanidad o una justicia más favorable a ellos, y por el principio de igualdad, esto tampoco tiene sentido.

Los gobiernos deberían facilitar como mínimo los sistemas de seguridad social, pensiones, justicia, educación y sanidad. Así mismo deberían garantizar la igualdad en los dos sentidos en los que eran planteados por Tocqueville, igualdad de recursos e igualdad de poder.

Pero el hecho es que actualmente no es así, puesto que el modelo de economía capitalista con su ley de oferta y demanda (basados en el liberalismo económico), establecen un equilibrio en los precios de los productos que favorece a las grandes multinacionales, especialmente si además se establece la "economía global". Estas multinacionales que provocan un exceso de producción sitúan el precio de los productos en un punto insostenible para los pequeños productores, y su consiguiente sumisión a los grandes, de forma que los dueños de estos grandes productores obtienen todos los beneficios. Esto no es igualdad.

Y así llegamos al punto actual, en el que la medida del bienestar en un país sigue evaluándose por el PIB, y no por la renta per cápita o el grado de libertad individual. Y todo esto apoyado por el FMI y el Banco Internacional. Y en esas estamos, en un estado en el que el consumismo nos hace exclavos de los bancos y las multinacionales. Y entonces no somos libres.

Las grandes multinacionales dominan los mercados, y los mercados corrompen a los gobiernos, que aunque se auto denominan democráticos y liberales, aprueban medidas que protegen los intereses de la banca (por ejemplo recientemente con la dación en pago de las hipotecas), que implacable, nos tratan a los individuos como objetos que compran. Y gracias a esa corrupción, aumentan la presión fiscal sobre los pequeños productores, a los pobres que no podemos afrontarlos, y no a los que realmente tienen dinero, y así es como también los pequeños productores vemos reducidos nuestros beneficios por unos impuestos que no se corresponden con lo obtenido. Por eso se hace difícil emprender, y por eso nuestra economía está favoreciendo cada vez más a los grandes y debilitando cada vez más a los pequeños.

lunes, 14 de febrero de 2011

Epitafio

En honor a Manolo Prieto Villegas. Hoy nos ha dejado una gran persona. Un gran amigo que tenía todo mi respeto y admiración.
Fue él quien despertó en mi la fascinación por gran parte de las cosas que de las que más orgulloso me siento. Con él he compartido largas noches de borrachera escuchando solos de batería de Carl Palmer y charlando de cosas que solo con él podías hablar, me guió en los momentos críticos de mi proyecto fin de carrera así como me escuchó cuando lo necesitaba. Fue la persona que me animó a perfeccionarme siempre en todos los aspectos de la vida tanto laboralmente como intelectualmente.
Quise charlar más con él y olvidar los pequeños detalles que ocultan la verdad. Para mí era una gran persona, una de esas de las que se te llena la boca al hablar de él, de esas que presumes de ser su amigo. Un perfecto caballero inglés, como a él le hubiera gustado que le llamaran.
Lo cierto es que en estos últimos años no fue así y ahora me arrepiento de ello. Pero me alegro por esos años en los que disfruté de su compañía y nos reímos y nos emocionamos, y también nos enfadamos y nos ayudamos a tener una juventud como, en mi opinión, pocos pueden presumir de haber tenido.
Él no aprobaría aquello de "Donde quiera que estés", o "allí en los cielos" porque como yo, creía que no estaría en ningún sitio. Ahora sé que se equivocaba, pero ya no puedo decírselo, tomarnos unos cubatas y discutir sobre ello escuchando un disco del "Robert Fripp String Quintet".
Pero se equivocaba porque sí estará en algún sitio. Estará en los corazones de Dani, de Javi Guti, de Javi X, de Javi Cacho, de Karlos, de Pipe de Adolfo, de Rafa, de Álvaro, de Diego y en el mio propio, porque cada canción que oiga, y cada logro de mi vida yo seguiré pensando en lo que Manolo pensaría, en si le gustaría o no, en lo que me diría si viera lo que hago. Me hubiera gustado presentarle a mi futura hija y no he podido. Y se ha ido sin decir nada, sin avisar y sin quejarse, como un caballero, como lo que era para los que le conocíamos, una gran persona.
Se te echará mucho de menos. Adiós Manolo.

Te recordaremos siempre

domingo, 2 de enero de 2011

Tendencias Musicales II

Y Continuando con lo que habĺe en la parte I de este post explicare mi punto de vista sobre estos gustos. Son también producto de la generación del "rock alternativo".

Antes éramos capaces de pasar horas escuchando música y hoy en día esto apenas se hace, y no solo por la vida que se vuelve cada vez mas estresante sino que la música es distinta.

Esta claro que la música es arte pero también es negocio, y correr riesgos es el objetivo a minimizar. Si vas a sacar un disco, o sacas "más de lo mismo" incluyendo baile, caras bonitas e interpretes que llamen la atención del público o pocos apostarán por ello. Por lo tanto necesitas un estilo que venda (Rock, pop, baile) y una imagen rompedora o bonita. Pongamos por ejemplo a las Spice Girls, Lady Gaga o no se... Ricky Martin, pero también a Marilyn Manson o a ¿cuantas caras bonitas?...

Para examinar la música actual yo me planteo si realmente lo que escuchamos es arte o solo son unos superventas. Yo creo que muchos de estos cracks, al final han quedado en nada. Sin embargo otros realmente han marcado época, estilo, moda incluso la forma de pensar. Así ha sido dentro del rock-pop con Los Beatles, con Jimi Hendrix, o los Sex Pistols etc... que realmente crean escuela y automáticamente aparecen grupos que los han imitado extrayendo lo más comercial de ellos y explotando "la idea de otro". Estos son los superventas, esta es la "radio fórmula". Realmente hoy en día creo que se investiga poco, la evolución es mínima y por eso creo que existe una tendencia a escuchar música de otras décadas.

Pero además creo que existe otro motivo por el cual se escucha menos música, y es más fácil escuchar la de otras épocas. La guerra de volúmenes provoca esto, y cuando se escucha menos música, no educamos el oído para que sepa apreciar unas melodías más maduras, mas ricas e innovadoras. Y creo que este es un factor importante. Mirad la siguiente imagen:


Para los que no sepáis que es, lo explico. Esta captura de pantalla de Ardour es un análisis en amplitud de dos pistas de sonido. Un análisis en amplitud muestra el nivel de la señal, para entendernos, el volumen. La primera pista etiquetada con "(10) Science" es de un disco del 2001, en concreto de "System of a Down" (en realidad... me gustan), y la siguiente es "Nothing to say" de "Jethro Tull" en el 1970.

Creo que queda explicado que es eso de "La guerra de volúmenes". En comparación, la primera y más actual, no solamente esta claramente mucho más alta, sino que ese "chorizo" incluso supera los 0dB y satura. Sin embargo se puede observar la dinámica del tema grabado y masterizado en el 1970, que sin saturar, aumenta y disminuye el volumen en función de las distintas partes de la canción. El resultado final es que la canción más actual se escucha a un volumen mucho mayor y más constante, y esto provoca que:
  • Capte nuestra atención al instante
  • Que la primera impresión sea mejor, se oye todo y suena... perfecto y entonces si no es nuestro estilo bajaremos el volumen, pero sino... wow!! que bueno!!!

Con un estribillo que se repite mil veces (como el de "Stairway to Heaven"... ahh ¿que no tiene?...) corto y simple ya tienes un disco actual. Por contra estamos saturando el oído. Una señal tan alta y comprimida cansa el oído y el cerebro, que es el que finalmente procesa todo. Por eso escuchar durante varias horas temas a este nivel se nos hace en ocasiones difícil, sin embargo, si la música es de nuestro gusto, podríamos pasar horas escuchando canciones como la que se ve en la segunda pista sin cansar tanto nuestro oído. Y todavía podemos hacer otro análisis más, este en frecuencias sobre las mismas pistas:


Este análisis de espectro calcula una media de las frecuencias. De nuevo para entendernos, muestra las frecuencias (desde los graves a la izquierda hasta los agudos a la derecha) promedio que se escuchan en ambas pistas. Aquí también vemos que el espectro (el intervalo entre las frecuencias más graves y las más agudas) es más amplio en la canción del 2001 que en la canción del 1970. Las conclusiones son similares.

Así que eso es lo que están haciendo a nuestros oídos, saturándolos con más volumen y mayor rango de frecuencias. ¿Habréis oído comentar a alguna persona mayor que la música de hoy es demasiado estridente?... probablemente para nosotros que nos vamos acostumbrando no sea así, pero lo cierto es que TIENEN RAZÓN. E imagino que entenderéis porqué... las ventas, y la minimización de los riesgos.

La primera impresión es mejor, pero también hace que perdamos el interés por ello más fácilmente, y al final terminaremos bajando el volumen o poniendo algo más melódico (en mi caso algo más antiguo que no me sature) o simplemente apagando el reproductor, puesto que nuestro cerebro estará procesando demasiada información para poder compartir nuestra atención entre la música y cualquier otra cosa que queramos hacer mientras intentamos escucharla.

viernes, 31 de diciembre de 2010

Grabación de una batería acústica en estudio

La información que aquí vais a encontrar es fruto y resumen de una estupenda conferencia de Pepe Loeches en la sede de SAE en Madrid y que podéis ver completa en YouTube. He aquí mi experiencia con la grabación de las baterías siguiendo las recomendaciones de este magnífico profesional. Normalmente todo esto solía tomarlo bastante a la ligera porque evidentemente el equipo con el que cuentan estos profesionales no es el mío ni mucho menos, pero lo más importante es captar lo esencial y aplicarlo a tu gusto. Por otro lado, aunque apliques tu propio criterio, es estúpido creer que vas a inventar la rueda, y que los 40 años de este profesional no los necesitas... Pues bien, allá vamos... surgen muchas dudas cuando empiezas con esto que normalmente son referidas a:
  • Que micros pongo
  • Que posición pongo a los micros
  • Que ganancias pongo a los micros
O al menos estos son los problemas que yo me encontraba, y después de probar, leer y documentarme he llegado a la conclusión de que hay cosas más relevantes.
A la hora de grabar una batería es un error pensar que en la mezcla podemos solucionar los errores de la grabación. Para mi gusto es importante conseguir en la medida de lo posible una naturalidad con el mejor sonido que tu kit te permita y evitar de esta forma excesos en ecualización, compresión o puertas de ruido. Es decir:

Si lo que grabas suena mal no lo arreglarás a base de edición

Seguramente las pistas "soplaran" al intentar conseguir frecuencias que no tienes, o le faltará pegada etc. Tal vez consigas un sonido aceptable a base de ecualización, compresión... pero cuando añadas el resto de instrumentos los defectos se notarán mucho más. Por eso recomiendo:

Comprate una llave torque

Es muy difícil afinar una batería correctamente y este tipo de llaves te permiten acertar con esto y no hacerlo solo de oído... además no son caras.

Si puedes monta parches nuevos

Si no, al menos sustituye los que tengas mas machacados. Los parches rugosos duran más y bien afinados no tienen nada que envidiarle a los de doble capa y aceite. La clave está en afinar bien.

Quita los parches traseros

Tanto en bombo como en timbales, los parches traseros crean reverberaciones y armónicos que no necesitamos, y hacen que la afinación sea más complicada. Esto es lo más importante... por favor, pruébalo, esto es clave.

Quita los parches delanteros y...

Engrasa los tornillos y vuelve a montar los parches. Entonces afinas la batería. La tensión de los parches en la afinación dependerá de tu criterio sobre todo, pero deberías tener en cuenta el estilo de música que vas a tocar. En mi caso para tocar rock, tengo los timbales un tanto graves (menos tensión) y la caja algo más tensa. Además no apago de ninguna forma los armónicos de la caja, me gustan y le proporcionan una viveza y pegada increíbles.

La afinación del bombo es muy importante. Debes dejar el parche todo lo flojo que puedas sin chasquear y apagarlo apoyando una manta sobre el parche. Así que afloja todos los tensores del bombo y comienza a apretar todos por igual y de forma homogénea. En el momento en el que notes que el parche coge algo de tensión, para. Ya tienes el bombo afinado.

Cuida la sala de grabación

Intenta apagar la sala y evitar reflexiones y cosas extrañas. Tu debes controlar el sonido que grabas.

Grabar en plano

No entiendo porque grabar la señal ecualizada o comprimida. Existen muchos plugins buenísimos para hacer esto a posteriori, y lo que pierdas en la señal procesada que grabes, no podrás recuperarlo... no tiene sentido comprimir o ecualizar antes de grabar.

Si haces esto habrás conseguido ya mejorar el sonido de tu batería sensiblemente. Es importante a la hora de afinar que tengas en cuenta que una batería suena en su conjunto. No es una unión de varios instrumentos, sino que el sonido de la caja y el bombo resuena en los timbales y viceversa, y todo junto es lo que proporciona el sonido final de tu batería.

Que micros pongo

En mi caso yo utilizo ocho pistas para grabar. Puedes necesitar más en función del tamaño de tu kit, pero debes tener en cuenta que son más variables que van a influir en el sonido puesto que todos los micros recogen la señal de todos los componentes. No puedes confiar en que una puerta de ruido te va a permitir aislar el sonido de la caja para tocarlo como quieras... queda mal porque perderías naturalidad, y siempre tendrás la caja en los platos puesto que no puedes ir cortando las colas de cada golpe de platillos.

Poner micros a cada plato puede ser interesante, pero en la mayoría de los casos hay señal de platos de sobra. Yo utilizo micros de ambiente que al abrir en estéreo y subir un poco en ecualizacion a partir de los 5Khz me dán lo que necesito.

Por otro lado he probado en ocasiones a poner un micro más, debajo de la caja. A mi la verdad es que no me ha servido para nada. Si la caja no suena bien intenta apagarla un poco y por supuesto afinarla como es debido, pero un micro debajo solo me ha dado quebraderos de cabeza.
Así que yo microfoneo con:
  • Un micro para bombo: El AKG D 112 de toda la vida, micro dinámico
  • Un micro para caja: Un SM57 (...dinámico)
  • Un micro para charles: Un micro tbone de condensador y membrana pequeña
  • Un micro para cada timbal: QToms de Shure, también dinámicos
  • Dos micros de ambiente: De condensador (unos shure de membrana grande)

Ten en cuenta que la base de una batería suele ser bombo, caja y charles.

Que posición de micros pongo

Respecto a esto mis dudas estaban en la distancia de los micros. Evidentemente los micros de ambiente son distintos al resto, y para estos tomo una distancia de aproximadamente 1,5 metros, uno a cada lado de la batería y por encima de ella.
El resto no los pongo demasiado cerca de los parches, pero si orientados hacia el aro del parche, no al centro. Orientarlos al aro proporciona más pegada.

La posición del micro del bombo una vez que has quitado el parche es dentro del bombo, en el centro del casco en todos los sentidos. Es decir, tanto en altura como en profundidad. Debe estar orientado al lugar donde la maza golpea, que es el centro del parche, y respecto a la profundidad, en el centro del ancho del casco de tu bombo.

Que ganancias doy a los micros

Evidentemente evitando clipear, una ganancia todo lo alta que puedas pero que te permita distinguir en la medida de lo posible el componente de la batería que está recogiendo ese micro, es decir, que la señal suba más al dar sobre el timbal o caja cuando golpeas.

Espero que todo esto os sirva como a mí, que estoy seguro de que si, si seguís todas las recomendaciones.

lunes, 20 de diciembre de 2010

Comprimiendo Streams en GZIP con java.util.zip

Bueno, pues algo muy sencillo pero que espero que facilite la vida a más de uno. La cuestión es que tienes "algo" que puede ser en el caso más sencillo una cadena, y que quieres enviar por red por ejemplo, o tus propias movidas.

Como decía un gran sabio en una conferencia sobre protocolos cuando hacían debates sobre XML-RPC y REST...

"En ocasiones uso sockets."

Pues bien... aún así estas dos funciones aumentarían la velocidad de usar solo sockets, y podrían en un determinado momento ayudaros mucho (como a mí cuando las terminé) para optimizar lo que enviéis... como os dé la gana.
Aunque se pueden usar otros algoritmos de compresión, GZIP es el de mejor relación de compresión/computación, y no tienes que añadir ninguna librería. Te permitirán aumentar la eficiencia en el envío o almacenamiento bastante así que ahí van:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
...


/**
* Obtiene el array de bytes comprimido a partir de otro array de bytes
* que se quiere comprimir.
* @param file los datos descomprimidos
* @return los datos comprimidos.
* @throws IOException de vez en cuando
*/
public byte[] comprimirGZIP(byte[] file) throws IOException {
ByteArrayOutputStream gzdata = new ByteArrayOutputStream();
GZIPOutputStream gzipper = new GZIPOutputStream(gzdata);
ByteArrayInputStream data = new ByteArrayInputStream(file);
byte[] readed = new byte[1024];
int actual = 1;
while ((actual = data.read(readed)) > 0) {
gzipper.write(readed, 0, actual);
}
gzipper.finish();
data.close();
byte[] compressed = gzdata.toByteArray();
gzdata.close();
return compressed;
}

/**
* Obtiene el array de bytes descomprimido a partir de otro array de bytes
* comprimido
* @param file los datos comprimidos
* @return los datos descomprimidos.
* @throws IOException de vez en cuando
*/
public byte[] descomprimirGZIP(byte[] file) throws IOException {
ByteArrayInputStream gzdata = new ByteArrayInputStream(file);
GZIPInputStream gunzipper = new GZIPInputStream(gzdata, file.length);
ByteArrayOutputStream data = new ByteArrayOutputStream();
byte[] readed = new byte[1024];
int actual = 1;
while ((actual = gunzipper.read(readed)) > 0) {
data.write(readed, 0, actual);
}
gzdata.close();
gunzipper.close();
byte[] returndata = data.toByteArray();
csvdata.close();
return returndata;
}

Para pensarlo un poco...

Me envian este correo con enlace a la página de "El confidencial"...

En Europa, los jóvenes protestan; en España, se van de botellón

En Reino Unido, en Francia, en Italia, en Grecia,...los jóvenes se
movilizan por la crisis y los recortes sociales, mientras que en España
la participación de los jóvenes brilla por su ausencia. También ha de
señalarse que esa falta de reacción frente a las situaciones que les
incomodan no ha tenido lugar cuando ha afectado a asuntos de ocio.
Parece que la indignación que surge cuando se prohíbe el botellón o
cuando se cierran pronto los locales de copas sí cristaliza en
manifestaciones.

¿Tendrán algo que ver las reformas de la educación? ¿Porque también en España aún tiene éxito "Gran Hermano"?... uffff....

domingo, 28 de noviembre de 2010

Lo peor de la sociedad

Estoy impresionado desde hace varias horas con un documental de TVE2 que me he tragado. No porque no supiera algunos datos, sino por la impresionante facilidad con la que la gente deja que sus hijos sean pasto de publicistas y sean inducidos a convertirse en otro borrego que solo ve televisión.

Y es sabido por todos que es así, "somos lo que compramos"... que ya decía alguien más interesante que yo, pero no tenía consciencia de el punto en el que nos encontramos hasta haber visto el dichoso documental.

Ha sido impresionante ver hasta que punto llega esa obsesión y ahora si que me preocupa tanto programa del corazón, reality show, y en concreto tantos gimnasios llenos de gente que tiene su mundo en la pantalla de la televisión y tantos telediarios con noticias de estrenos de películas (que antes simplemente criticaba conformado).

El problema es que no veo la televisión, y si lo hago, intento ver poca, por eso no soy consciente de ello. Ya se sabe que la prensa está totalmente contaminada con campañas de marketing, las películas con publicidad de los gobiernos... y de empresas privadas, etc. y que todo forma parte de una enorme campaña de publicidad que corroe las vidas de las personas, y las hace convertirse en máquinas de comprar sin necesidad real, lo que en muchas ocasiones no se puede pagar.

Pero ahora me doy cuenta de la magnitud del peligro real, y de la cantidad de personas que realmente viven en un programa de televisión constante, y creen que el estreno de la ultima película de vampiros adolescentes es la noticia importante del día. Pensaba que en realidad el mundo era más inteligente.

Y el pronóstico no es muy alentador, teniendo en cuenta las campañas de marketing más caras y que mejor resultado dan, las campañas políticas.

Es un largometraje documental británico de 2009 titulado "Fábrica de Famosos", dirigido por Chris Atkins y producida por S2S Productions.

Integrar el pago electrónico con paypal en java

Es increíble lo complicado que a veces puede resultar encontrar información sencilla sobre algo concreto. A la hora de la integración de una aplicación con sistemas de pago electrónico puedes encontrar algunos de los mejores ejemplos. Lo que voy a explicar es producto de un número demasiado elevado de horas buscando, leyendo, consultando y quebrándome la cabeza.

Y no solo con el caso específico de PayPal, sino con el resto de plataformas de pago con las que me he encontrado. Estoy pensando seriamente en crear un grupo en facebook "En contra de las explicaciones ambiguas para integrar plataformas de pago".

Bueno pues lo primero es saber si es complicado lo que tienes que hacer, porque lo que voy a contar es un pago estandar, es decir, una vez que en tu app ya sabes la cantidad que hay que pagar, quieres que se haga. Si quieres hacer pagos o gestionar tus cobros, o cosas más complejas con la interfaz SOAP, no es este tu artículo, jeje... Lo que vas a encontrar es lo que llaman:

  • Pago Express
  • Interfaz para NVP (abreviado de name-value pair)
  • Pago Estándar

Siempre hay un entorno de pruebas, como ya esperabas, y que funcionará exactamente igual que en el entorno real. Esta es una de las diferencias (entre otras) con plataformas con las que he trabajado y PayPal.

En esta última, el proceso que en principio creemos sencillo, que es el de obtener un número de tarjeta ficticio que sea aceptado por la validación de la tarjeta en la plataforma de pruebas, me implicó crear una cuenta ficticia de cliente en Paypal Sandbox y asociarle tarjetas.

Después de mucho clickar y urgar por el sandbox, trás intentar comprender que tipo de pago quiero realizar (..ufff) o ver mil veces el esquema de pago, tienes que tener una cuenta de empresa (o también llamado comerciante) e ir al menú "Perfil" para encontrar lo que buscas.
  • Preferencias de notificación de pago instantánea (IPN)
  • Configuración de pago codificado

1. Preferencias de notificación de pago instantánea IPN

En la primera opción tienes que indicar la url a la que se notifica el pago mediante petición POST. Esto quiere decir que cuando el pago se confirma, desde paypal se hará una solicitud a esa url que pongas, e incluirá además de una copia de los valores en la petición que mandamos desde nuestra web (desde el navegador del usuario) algunos parámetros más como el identificador de operación, que es el que a ti te interesa. ¿Problemas con el IPN? Se pueden deber a varios factores:

  • El pago no se confirma: Esto ocurre con cantidades elevadas, paypal desde hace poco está obligado a retener las cantidades elevadas (no recuerdo ahora el intervalo exacto) y las contrasta. Tu tendrás que acceder a tu cuenta de paypal (del sandbox) y confirmar el pago manualmente. Probablemente ya te habrá caducado la sesión, y tendrás que tirarte un rato logeandote de nuevo, pero de tanto hacerlo, tienes la contraseña grabada a fuego en tu cerebro... ¿verdad? :P
  • La url de respuesta no es correcta: Claro suele pasar... cámbiala

2. Configuración de pago codificado

En la segunda opción, configuras el certificado que vas a usar para "firmar un botón". Esta impresionante acción, como todas, al final no es para tanto y no es más que tomar una cadena con la información del pago, firmarla, y añadir el texto de la firma (...en PEM) a un formulario que se dirija a Paypal y que los navegantes presionan en tu página cuando quieren realizar el pago. Y con esto pues ya está, ahora:
  • Te descargas El SDK para java, descomprimes e incluyes las librerías en tu aplicación en /WEB-INF/lib
  • Descárgate todos los jars de las librerías criptográficas bouncycastle latest releases e incluyes las librerías en tu aplicación en /WEB-INF/lib
  • Creas tus certificados para firmar e identificarte con paypal: Para esto necesitas instalar OpenSSL (en ubuntu con "sudo apt-get install openssl"... en windows... no lo sé...) y ejecutar:

    #Generas la clave privada, el CSR
    openssl genrsa -out prvkey.pem 1024
    #La auto firmas y obtienes un certificado público
    openssl req -new -key prvkey.pem -x509 -days 365 -out pubcert.pem
    #Generas un almacen de certificados pkcs12 con ellos
    openssl pkcs12 -export -inkey prvkey.pem -in pubcert.pem -out prvkey.p12


    Después de todo esto te aparecen un montón de ficheros de los cuales solo te hace falta el almacén de certificados prvkey.p12 y el certificado de paypal que debes descargarlo desde paypal en la opción de "Configuración de pago codificado".

Pues nada, ten a buen recaudo la contraseña para el acceso al almacen de certificados y el archivo p12 por que ahora viene cuando se usa.

Realización del pago, datos del pago y firma

Bueno pues ya estás en tu aplicación y estás desarrollando la parte en la que se realiza el pago, entonces, tu objetivo va a ser crear una página donde se indique al cliente lo que va a pagar y se muestre un botón que ponga "Pagar con Paypal". El código HTML del formulario lo pones tú, pero asegúrate de que tienes dos campos:

<input type="hidden" name="cmd" value="_s-xclick" />
<input type="hidden" name="encrypted" value="<%= signedPaymentStr %>" />


que se envían a la url que te pasan desde paypal (algo de documentación tendrás que leer).

Los datos del pago van en la cadena firmada del campo encrypted, y básicamente tendrás que rellenarlos creando una cadena con algunos parámetros. Aquí os dejo el código de un metodito que devuelve directamente la cadena que buscamos. Cópialo, pégalo y míra el Javadoc, te resultará fácil. Ten en cuenta que el pago está configurado para EUROS!!...



import com.paypal.wpstoolkit.util.PPCrypto;
import java.util.Properties;
import org.apache.log4j.Logger;

.....
.....



/**
*
* Obtiene la cadena del botón encriptada para una compra. Una cadena de
* ejemplo sería:
*
* cert_id=...
* cmd=_xclick
* business=....
* item_name=Lorem Ipsum Dolor sit amet...
* item_number=1234
* custom=sc-id-789
* amount=500.00
* currency_code=EUR
* tax=41.25
* shipping=20.00
* address_override=1
* address1=Calle inventada
* city=Ciudad
* state=Estado
* zip=23452345
* country=ES
* no_note=1
* cancel_return=http://url.de.retorno
* @param paymentData Variables adicionales que se quieran adjuntar.
* @param concepto Descripción de concepto por el que se va a pagar.
* @param codigoVenta Identificador de la venta
* @param cantidad Cantidad en euros que se va a cobrar
* @param impuesto Cantidad que se va a cobrar de impuestos
* @param direccion Dirección del pagador
* @param numero numero de la direccion postal
* @param cp Codigo postal
* @param localidad Localidad de la dirección postal
* @param pais País de la dirección postal
* @param nombre Nombre del pagador
* @param apellidos Apellidos del pagador
* @param pruebas Booleano que indica si se dirigirá al entorno de pruebas o no
* @return cadena de la firma de los datos.
* @throws Exception
*/
public String getButtonEncryptionValue(String paymentData,
String concepto, String codigoVenta, Float cantidad, Float impuesto,
String direccion, String numero, String piso, String puerta,
String cp, String localidad, String pais, String nombre,
String apellidos, String email, Boolean pruebas) throws Exception {

Properties oProps = new Properties();
ClassLoader oCL = Thread.currentThread().getContextClassLoader();

InputStream oIStr = oCL.
getResourceAsStream("archivodeconfiguracionenclasspathquesiempreexiste.properties");
oProperties.load(oIStr);
oIStr.close();

String env = ".sandbox";
if (!pruebas) {
env = "";
}

String signedStr = null;

String _keyPass = "password_que_tienes_que_poner_bien";
String user = "userquetienesqueponerbien";
String certId = oProps.getProperty("propiedad_con_el_valor_que_te_da_paypal_al_registrarte");
String returnURL = oProps.getProperty("propiedad_url_de_vuelta_en_navegador_despues_de_pagar");
String returnCURL = oProps.getProperty("propieda_de_la_url_si_cancela_el_pago");
if (piso == null) {
piso = "";
}
if (puerta == null) {
puerta = "";
}
if (_data == null) {
_data = "";
}
if (numero != null && numero.length() > 0) {
direccion += " nº " + numero;
}
if (piso != null && piso.length() > 0) {
direccion += " - " + piso + "º";
}
if (puerta != null && puerta.length() > 0) {
direccion += " " + puerta;
}

paymentData += "cert_id=" + certId + ","
+"item_name=" + concepto.replaceAll(",", "") + ","
+"item_number=" + codigoVenta + ","
+"amount=" + String.format("%1.2f", cantidad).replaceAll(",", ".") + ","
+"tax=" + String.format("%1.2f", impuesto).replaceAll(",", ".") + ","
+"address_override=1,"
+"address1=" + direccion.replaceAll(",", "") + ","
+"city=" + localidad + ","
+"zip=" + cp + ","
+"country=" + pais + ","
+"first_name=" + nombre + ","
+"last_name=" + apellidos + ","
+"payer_email=" + email + ","
+"cmd=_xclick,"
+"business=" + user + ","
+"currency_code=EUR,"
+"lc=" + pais + ","
+"cbt=Volver a la página,"
+"return=" + returnURL + ","
+"cancel_return=" + returnCURL + "";

logger.info("Encoding data: " + paymentData);

paymentData = paymentData.replace(',', '\n');
try {
signedStr = new String(PPCrypto.getButtonEncryptionValue(paymentData.getBytes("UTF-8"),
oProps.getProperty("ruta_al_archivo_p12"),
oProps.getProperty("ruta_al_certificado_de_paypal"),
_keyPass));
} catch (Exception ex) {
logger.error("Excepcion firmando: " + ex.getMessage());
}
return signedStr;
}

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.

lunes, 27 de julio de 2009

Vivencias de un consumidor desamparado

Sábado por la noche, verano, calor y mucha gente de vacaciones. Estábamos pocos amigos reunidos para tomarnos algo, bañarnos un poco y pasar una noche tranquila. No pasó nada fantástico y super increíble, esto no va de eso; no pasó nada, y la noche fue tranquila y magnífica. Lo único que quería contar fue algo sobre la conversación que tuvimos tras la cena. Voy a narrar los hechos reproduciendo las conversaciones de forma aproximada, porque quedará reflejado de forma más fiel el escenario. Así que comenzamos hablando entre todos:

-”…Que no lo pensamos más, pedimos pizza. Unas familiares, fácil, rápido y limpio. Y además me hacen descuento 2X1 a domicilio.” -Dijo alguno

Perfecto, buscamos el número, llamamos y pedimos las pizzas:

-”…El precio: 30,40 €… ¿Va ha necesitar cambio?” -Nos dijo la operadora

Terminamos la conversación y colgamos, pero mierda, ¿2 pizzas familiares esa pasta? No nos cuadraba:

-”¿Le has dicho lo del descuento?”

-¡¡¡No, antes no había que decirlo!!!

De nuevo buscamos el teléfono y llamamos. Lo cogió otra señorita, y le explicamos el tema. Después de 4 ó 5 minutos comprobando el pedido le decimos que nos haga el 2X1, y nos dice:

-”¿Pero ese cupón de donde es?”

-”De páginas amarillas…” -Respondimos nosotros.

-”Ahh!! de esos si, bueno pues entonces perfecto, aplicamos dos por uno… un momentito… El precio es 25,05€…”

Es indescriptible la sensación de colgar el teléfono justo en el momento en el que recapacitas y piensas en la mitad de 30,40€. Un fuego surge desde lo mas profundo de tus entrañas y recorre tu espina dorsal provocando un deseo incontrolable de maldecir a los familiares difuntos de Graham Bell, de Italia por crear las pizzas y del primero que pase por allí.

-”Ring, Ring!!!”

-”Pizzas a domicilio ¿Digame?”

-”Vera usted es que es la tercera vez que llamo, la primera vez fué para pedir 2 pizzas familiares, por las que me iban a cobrar 30.40€, después llamé para ver si era posible aplicar su promoción de 2X1, y la amable señorita que respondió al teléfono, nos aplicó dicho descuento, reduciendo el precio, a la asombrosa cantidad de 25,05€ ¿Usted ve eso normal?”

Evidentemente, lo que pensábamos se parecía más a:

-”Señorita, se me ha quedado una cara de gilipollas cuando he colgado y me he dado cuenta de que no se dividir, que he tenido que llamar otra vez, y como no me diga lo que quiero oír, voy a ir a esperarla a la salida, con tres o cuatro amigos, que me he “quedao con tu cara!!“”.

-”Un momento…” -Respondió la operadora.

…Y así estuvimos esperando un buen rato intentando que nos explicasen porque coño la mitad de 30,40€ son 25,05€, y para nuestra sorpresa, apareció de nuevo la señorita con un argumento infalible.

-”Verá señor, al precio de dos pizzas familiares sin ninguna promoción, se les aplica un descuento por el número de ingredientes, pero si solicita alguna de las promociones, ese descuento sobre el número de ingredientes no es aplicable, por lo tanto se cobra el descuento que usted solicita, que como es de 2X1, pues equivale a pagar sólo la pizza de mayor valor que son 25,05€”

Ahhggg!!! mierda, esta vez la sensación de ardor, de asco, de furia, de locura psicópata, queda contenida con una explicación que no has entendido del todo, pero que no puedes rebatir!!!

Esta claro, como no habíamos caído antes… o sea que te lo enseño, te lo vendo te lo escondo y cuando te descuidas, te la meto. Por alguna extraña razón todos los/las operadores/as que nos atendieron solo esperaron a que el ordenador les dijera la cantidad total.

Al fin entiendo el truco, te vendo la moto sobre duros a cuatro pesetas, y luego me invento un entramado de normas y leyes para quitártelo sin que puedas decir que no tengo razón. De hecho el entramado legal es incluso complicado para los operadores/as, que simplemente esperan a que lo calcule el ordenador, porque sino…

Lo más triste es que eso es totalmente extrapolable al funcionamiento de la justicia de un país, donde se sabe exactamente que hay que hacer, pero el entramado legal incomprensible permite saltarse las leyes según nos convenga, sino, mirad el post sobre la justicia.

Una sobre justicia

Extraido de un conocido diario me gustaría citar:
El ministro de Justicia, que estuvo cazando el pasado 7 de febrero en la Sierra de Andújar en una montería de ciervos junto al juez Garzón, no figura en el listado de autorizaciones de Medio Ambiente…..
…Bermejo ha reconocido durante una entrevista en televisión que carece de la licencia necesaria para cazar en Jaén. La Ley de Flora y Fauna de Andalucía tipifica como “sanción grave” la práctica de la caza sin poseer la licencia requerida……en el último balance de actuación del Seprona, el del año pasado, se impusieron más de 700 infracciones, al tiempo que se detuvieron a 13 personas, y por este motivo…
Cual es mi sorpresa cuando recientemente, en otro diario aparece:
El Tribunal Supremo ha decidido rechazar la admisión a trámite de la querella presentada contra el ex ministro de Justicia Mariano Fernández Bermejo…
…Tras analizar los hechos, los magistrados del Alto Tribunal han decidido rechazar la admisión a trámite de esta querella al entender, tal y como indicaba el Ministerio Público, que “los hechos reflejados en la querella no son integrantes de delito”
Yo encuentro varias razones por las que los medios deberían tener en cuenta toda esta información, y sin embargo, son noticias que caen fácilmente en el olvido.
  1. Un ministro de un gobierno socialista, del pueblo, que promulga la igualdad de los ciudadanos, paga los 2000 ó 3000 € para…. ¿que?… no solamente ocurre que la mayoría de los españoles no entendemos este extraño “arte de matar”, si no que además no podemos pagárnoslo.
  2. Un ministro de un gobierno cualquiera, también del pueblo, del ministerio de justicia, va a cazar con un juez que investiga casos de corrupción. Que tíre la primera piedra el que sepa separar completamente negocios y placer. Ojalá que una educación en valores morales “normales” impida que ocurran mayores desgracias.
  3. ¿Que dice la ley sobre la caza sin licencia? (Ley 1/1970, de 4 de abril art 43) claramente: Tendrán la consideración de faltas de caza y serán sancionadas con la pena de arresto menor o multa de 250 a 5.000 pesetas, la realización de alguno de los siguientes hechos: a) Cazar desde aeronave, automóvil o cualquier otro medio de locomoción, cuyo uso para esta finalidad no esté autorizado expresamente en el Reglamento, o transportar en ellos armas desenfundadas y listas para su uso, aun cuando no estuvieren cargadas. En los terrenos sometidos a reglamentación cinegética especial, mientras se estén celebrando en ellos ojeos o monterías, esta prohibición se concretará al hecho de cazar desde los vehículos o al de transportar en ellos armas cargadas. b) Cazar, sin el debido permiso, en terrenos sometidos a régimen cinegético especial, cuando el valor cinegético de lo cazado no exceda de 2.500 pesetas...
  4. ¿Por que es este caso tan famoso? Nadie creerá que es la primera vez en la historia que ocurre, pero con alcaldes, concejales etc. evidentemente ¿Tendrá algo que ver con el juicio que poco antes dirigía el juez por corrupción del partído de la oposición? Si tu te chivas de mi, yo me chivo de ti… y eso me lleva a pensar…
  5. ¿Y de qué no se chivan? ¿Cuantos ministros van a trabajar con un traje del mercadillo? (a colación del caso del presidente de la Generalitat Valenciana)

Esta claro, el pueblo llano no nos enteramos de nada, y voy a ir terminando que ponen ahora una película buenísima… ya protestaré mañana.