De Orador en el “Java Day”, auspiciado por el INACAP de Osorno

¿¡Qué!? No que yo odiaba Java?

Bueno, no precisamente. pienso que es usado para muchas tareas en las que un lenguaje más poderoso debiera ser usado. Por ejemplo, pienso que hacer desarrollo web en Java en el 2011 es similar a haber hecho desarrollo web con C en 1997. Pero aún pienso que es un buen lenguaje para programación a nivel de sistemas y que tiene una impresionante plataforma en la JVM.

Así que no es raro que yo esté dando una charla mañana en el Java Day Osorno. Voy a hacer dos charlas, una de ellas titulada “El lado cool de java” en la cual mostraré las características modernas de Java que todos los proyectos modernos debieran usar pero, hasta donde veo, no son usadas porque la gente no sabe de ellas. O quizás están pegados en una versión antigua de Java. Pero aún así, saber de Java 6 es bueno (y puede ayudar en poner presión sobre los desarrolladores pegados en el pasado para volver al presente)

La otra charla será una charla introductoria de Ruby. Yeah, puede sonar extraño hablar acerca de Ruby en un evento de Java, pero es uno de los beneficios de ser un charlista ;) . Pienso que haciéndola, podría estar salvando al mundo de algunas líneas de Java que debieran ser implementadas en un lenguaje más expresivo. Y poner JRuby en la mezcla va a hacer que todo quede perfectamente justificado :)

Lee este post en inglés

Sounds good – HTML5 Video Sound Editor – made in continuum (Chile).

¿Cuantas veces hemos querido cambiar o agregar sonidos en un video?

Ya sea haciendo una presentación, o quizás por pura diversión hemos preguntado a Google como hacerlo y luego terminado teniendo que instalar editores, o gastando horas leyendo y entendiendo de formatos, contenedores, y codecs de videos. Todo para agregar algún sonido a un video. Solo para agregar algún sonido a un video.

Sounds good: A video sound editor online

Sounds good

Pues bien, cansados de eso, expertos en web y luego de estudiar alternativas nos propusimos implementar nuestro propio editor de sonidos para videos online, si, online, una aplicación web, que no necesita que instales nada.

Basta con subir un video que esté en alguno de los formatos más conocidos (digase .mov, .avi, .mp4, .flv, .ogv, .mpg, .webm), y agragarle sonidos. Hay sonidos pre-definidos tales como efectos sonoros, ruidos ambientales, voces de personas, botones de instantes, instrumentos, transiciones usados en trailers de peliculas, en fin, muchos, incluso puedes también subir tus propios sonidos.

Una vez que hayas agregado los sonidos, hayas ejecutado pruebas, incluso eliminando el sonido original del video y estes contento con el resultado aprietas un solo botón y la aplicación se encarga de procesar el video. Esta tarea toma tiempo y recursos, por lo que no ves el resultado al instante, sino que la aplicación te envía un mail una vez terminado el proceso donde anexa la url para poder bajar el video o ver el resultado online. El proyecto (video + sonidos) quedan guardados en tu carpeta de videos, cosa que lo puedas volver a retocar.

Alpha

La aplicación está en versión «alpha», esto significa que no es estable aunque si funcional, que faltán muchas características por implementar, y que claro, puede fallar. Por esto, para saber cuan cool la hallaste, o que esperarías que tuviera, o cuanto te enfadó usarla, o por último incluso felicitar al equipo que la hizó le agregamos un botón de «feedback», porque lo que más nos interesa en esta versión es saber si te fue útil, o porque no te fue útil.

¿Como lo hicimos?

Sounds good no usa flash para la edición de los sonidos del video. Si como lo oyes, no usa flash (¿a estas alturas quien quiere flash para eso?).

Del lado cliente, varios javascripts construidos sobre  jQuery, Sammy y underscore se encargan de manipular los tags de <video> y <audio> de HTML5.

Del lado del servidor una sencilla pero poderosa aplicación hecha en Ruby on Rails se encarga de guardar el estado, y/o procesar el proyecto (video + sonidos) del usuario. No quisimos implementar un sistema de login, por lo que usamos a Google accounts como proveedor de openid para el login. No quisimos implementar un servidor de archivos, por lo que usamos amazon s3, y no quisimos preocuparnos por temas de escalabilidad, por lo que lo deployamos en instancias de amazon ec2 corriendo ubuntu 10.04.

Nota: La aplicación completa fue hecha usando proyectos open sources, por supuesto, no se nos ocurriría jamas gastarnos un centavo en licencias.

webm

En la versión alpha solo soportamos webm (y probablemente quede así), lo cual deja afuera a Safari (¿quien quiere pagar por el uso de h264?), pero incluye a Firefox 4, Chrome 6 y Opera 10.60, oh, y probablemente Internet Explorer 9 (según M$ webm estaría soportado si el usuario instala el codec) o sea la suma da positiva (+4 o +3 si no se suma ie9). Webm es la propuesta de formato de video para la web hecha por Google, y aceptada por varias organizaciones (http://www.webmproject.org/about/supporters/) entre las que destacan Mozilla, Chrome, Android, Java, Opera, Skype, Winamp, hardwares como AMD, o NVIDIA, o plataformas de video como YouTube, y la lista sigue creciendo.

No obstante, pensamos agregar un servicio de encoding para el formato del video resultado, y dejar que el usuario decida en que formato quiere el video. Por ejemplo, el usuario sube un video en .flv (flash), agrega sonidos y luego pide a la aplicación que lo procese y entrege el resultado en .mp4 o .avi.

Monetize

La aplicación es gratis, si, es gratuita, pero solo para los usuarios, para nosotros tiene costos que varian en dependencia de la cantidad de uso que tenga, por ejemplo debemos pagar a amazon por el uso de sus recursos, además de los costos en horas que ha significado su desarrollo, aunque dejemosnos de trampa, no vamos a cobrar por lo divertido que fue y está siendo escribir el código ¿verdad?, si ok, pero igual necesitamos alimentar a nuestras familias, pero bueno, son costos que no vamos a traspasar a los usuarios, al menos por ahora.

La aplicación siempre va a tener una parte gratuita con limitaciones (a no ser quebremos en el intento). Tenemos algunas ideas de como monetizar el servicio a futuro, pero no es el foco de esta versión. Quizás publiquemos las ideas para monetizar incluyendo los precios, todo de nuevo para obtener feedback.

Se agradece feedback

Entonces nada, les ruego que divulgen la aplicación y que usen el botón de feedback cada vez que les guste, la odien o se les ocurra una idea genial que podamos incluir.

- El equipo de sounds.gd

Truco en instalación de gema como usuario non-root.

El escenario:

Intentar instalar una aplicación Ruby on Rails en un servidor compartido del proveedor de nube Joyent.

Al ejecutar el comando:

> rake gems:install

Había una gema que necesitaba compilar e instalar extensiones nativas, desde un archivo Makefile generado via rake.

El problema:

Dentro de los tareas del make algunas se hacian con el usuario root, y como es un servidor compartido, ni soñar ejecutar comandos con un usuario diferente a $USER por tanto me encontré con el error:

make install
/usr/local/bin/install-sh -c -o root -g root -m 0755 generator.so /users/home/continuum/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext
chown: /users/home/continuum/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/#inst.13897#: Not owner
*** Error code 1
make: Fatal error: Command failed for target `/users/home/continuum/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.so'

La solución:

Ok, es fácil notar que basta con modificar el archivo Makefile para que en vez de -o root -g root, hiciera -o $USER -g $USER.

Pero en realidad es más que eso. Para que una gema quede correctamente instalada es necesario además de copiar los archivos, generar la especificación (el archivo gemspec) que queda en el directorio /path/to/gems/specifications.

Mirando la ayuda del comando spec de gem (> gem help spec) noté que es posible generar la especificación en varios formatos (entre ellos –ruby) teniendo como input el archivo de instalación de la gema (el paquete con extensión .gem).

Y además noté que cuando uno instala (o al menos intenta instalar) una gema, el paquete o archivo de instalación queda en el direcorio path/to/gems/cache (la misma filosofía de apt-get de debian para los linuxeros).

Uhmm, yeah, entonces siendo así lo tenemos todo y podemos hackear ls instalación de la gema, los pasos:

1.- Intentar instalar la gema que incluye la compilación de extensiones nativas

> gem install json

ERROR:
make install
*** Error code 1
make: Fatal error: Command failed for target `/users/home/continuum/.gem/ruby/1.8/gems/json-1.2.0/ext/json/ext/generator.so’

2.- Editar el archivo Makefile que generó el install

 > vim path/to/Makefile # (en mi caso path/to/gems/json-1.2.0/ext/json/ext/generator/Makefile

3.- Cambiar -o root -g root por -o $USER -g $USER

4.- Salvar el archivo (:wq)

5.- Ejecutar en el mismo directorio donde esta el Makefile

 > make clean

 > make install

6.- Y finalmente generar el archivo de specificación de la gema

 > gem spec path/to/gems/cache/nombre_gema.gem --ruby > path/to/gems/specifications/nombre_gema.gemspec

En mi caso el comando real fue:

 > gem spec ~/.gem/ruby/1.8/cache/json-1.2.0.gem --ruby > ~/.gem/ruby/1.8/cache/specifications/json-1.2.0.gemspec

Y voilá, ahora funciona ./script/server…

« Entradas Anteriores

Conócenos

Tel: +56 2 9341951

e-mail: info@continuum.cl

Copyright © 2010 Continuum Ltda.
Coronel Pereira 72. Oficina 903. Las Condes. Santiago. Chile