miércoles, 4 de septiembre de 2013

Aprendiendo Ruby on Rails en dos días

Tras largos meses ausente, hola de nuevo a tod@s!

He vuelto porque tengo algo nuevo que contar sobre temas de desarrollo. Y es que, por motivos que quizá comente en futuros posts, he tenido que aprender Ruby on Rails y hacer un pequeño ejercicio en 2 días. Usaré este posts para documentar brevemente este proceso y recopilar los materiales interesantes que he recopilado.

En primer lugar, hace varios meses realicé un taller de introducción a Ruby on Rails (RoR por brevedad) en la feria técnica T3chFest que tuvo lugar en febrero en la Universidad Carlos III de Madrid. Seguimos este estupendo tutorial.

Taller de introducción a Ruby on Rails en el t3chFest-uc3m
Hasta aquí todo bien. Seguí el tutorial y entendí un poco por encima los aspectos básicos de rails, porque ruby lo conocía un poco de este curso introductorio en codeschool. Había intentado entender los principios básicos en el curso de SaaS de BerkeleyX pero durante el curso no hice mucho más que ver los videos.

Pero esta semana he tenido que aprender a marchas forzadas, y el primer recurso que tenía en mente para comenzar era el famoso tutorial de rails de Michael Hartl. La aproximación del tutorial es que, a parte de enseñarte los fundamentos de rails, te enseña buenas prácticas de desarrollo como usar un sistema de control de versiones (git con github), deployear a producción en heroku y, lo que más me interesaba, hacer desarrollo dirigido por tests (TDD), en concreto una forma específica de hacerlo que es BDD (Behavior Driven Development) donde lo que prima es el comportamiento de nuestro aplicativo. Estuve siguiendo el tutorial hasta los 5 primeros capítulos, saltándome el 2 ya que no me interesaba la generación automática de código (scaffolding, que no se usa en el "mundo real"). Como iba orientado a realizar un ejercicio concreto con esta información tuve bastante, complementándolo con un videotutorial de nettuts orientado a aprender lo más básico y lo más de verdad útil. Una vez entendí bien cómo funcionan las rutas y ciertas convenciones de nombrado, pude ponerme más en serio con el ejercicio que tenía que realizar ya que el patrón básico de rails, MVC, lo conocía desde hace tiempo de mis trabajos con J2EE.

Para la última parte del desarrollo me fueron bastate útiles las referencias de código de ruby, para revisar la documentación de los objetos, principalmente string, array y hash. Además, para los test de integración fue muy útil el uso de la documentación de capybara, que no fue tan fácil de encontrar como pensaba. Todo esto, con alguna ayudita de omnipresente StackOverflow te puedan ayudar a aprender RoR en dos días!


jueves, 29 de marzo de 2012

Tecnologías a explorar tras el codemotion

Tras el codemotion del sábado pasado tengo un montón de nuevas ideas en la cabeza, y eso hay que dejarlo reflejado en algún sitio... que si no se olvidan!. Voy a hacer un breve recorrido por las charlas a las que asistí (apretada agenda con 7 tracks en paralelo, muchas veces la elección fue complicada) y las tecnologías que quisiera explorar en ratos libres, o directamente en proyectos actuales.

En primer lugar, asistí a una abarrotada charla Iván Loire, en la que introdujo el uso de node con express (hasta aquí todo conocido), pero introdujo un par de herramientas que no conocía: zombie (navegador sin UI para testing unitario) y knockout (que permite hacer bindings entre el modelo de datos y los componentes de la UI, de forma que si se actualizan los datos se reflejará automágicamente en la UI). En este bloque, oí muy buenos comentarios de la charla de metaprogramación en ruby.

A continuación le tocó el turno a Ricardo Borillo y la firma digital con el DNIe en java. Buena charla técnica de aspectos de seguridad, pero java me empieza a cansar bastante... Al final me quedé con las ganas de la charla de DevOps.

Después de un descanso en el que no pude llegar ni siquiera a la cafetería debido a la aglomeración de gente en el único pasillo de acceso (mitad ocupado por stands de patrocinadores), asistí a la chala de Hadoop ya que estoy trabajando en un proyecto que a la larga requerirá infraestructuras de BigData (según contaron, cuando tienes tantos datos que en sí mismo constituye un problema). Primera parte de charla muy buena, pero cuando se hicieron demos de las herramientas de Microsoft pasó a ser un poco más aburrido. Otro proyecto Apache relacionado que tengo que explorar es Mahout, que facilita la minería de los datos y el machine learning, permitiendo hacer por ejemplo collaborative filtering y recomendaciones. Respecto al resto de charlas, me hubiese gustado pasarme por la de Enrique Amodeo de OOCSS, cuya presentación hizo con impress.

Antes de comer tocaba charla de SPA (Single Page Application) con backbone de la gente de medianet software. Bastante ejemplos de código de cómo usar backbone para implementar MVC en cliente en aplicaciones de tamaño medio-grande. Para mi classON creo que tiraré de knockout, ya que no necesita tanta complejidad. En este bloque me perdí la charla de webscrapping que me contaron como muy buena.


La charla de backbone petada de gente

La comida (y resto del día) pude compartirlo con Adolfo y Miguel, y a ratos con Javi (que como tenía su propia charla estaba con los VIPs :P). Tuvimos una interesante charla sobre software y recursos libres y preparando el "upcoming" grupo de estudio de javascript. También pude toparme con gente de betabeers después de la cena del día anterior.

Después de comer tocó ver cómo iba la estandarización de las comunicaciones en tiempo real en HTML5, y fuimos a la charla de Javier Cerviño sobre webRTC. La cosa de momento está muy verde, pero esperemos que durante lo que queda de año se estabilice el API y podamos usarlo el año que viene en el curso de Aplicaciones Multimedia de la Uni (de momento disponible en la beta de Chrome 18 y en Chrome Canary).  Aquí, me quedé con ganas de palomitas.

Next slot, unit testing a gran escala en javascript de Tomás Corral. Buena ponencia, a veces un poco rollete (bueno, es testing!), pero algunos truquillos buenos ganados con la experiencia. Me quedo con sinon como tecnología a explorar. Del aula de al lado, salían enormes carcajadas: nos enteramos luego que era la charla de APIs REST usables de Javier Ramírez, aclamada por bastante gente como una de las mejores.

Después del último coffee break, tocaba la recta final: en el primer slot no tenía muy claro qué hacer, así que seguí la recomendación de Javi y fui a la charla de jjmerelo sobre computación voluntaria. No me arrepentí. A parte del contenido técnico de la misma, con referencias a mongoDB que estoy mirando últimamente, el tipo es un crack. Charla muy divertido, en la que, en palabras del mismo Merelo, repasamos un conjunto de tecnologías que bien podríamos encontrar en un pasillo de IKEA: couchDB (BD NoSQL, pero no sólo eso), futon (administración web de la BD), cradle (driver para node), etc. y cómo usar todo esto para que otra gente "voluntariamente" haga parte del trabajo computacional de los algoritmos genéticos con los que trabaja.

Terminamos el día con boot2gecko, el chromeOS de la gente de mozilla. Nada espectacular, pero veremos cómo se las arregla este consorcio con varios UIs (gaia) sobre la misma plataforma móvil, y Telefónica metida por de por medio. En este slot, la gran afluencia se la llevó David Bonilla (parece que Adolfo siente algo especial por él :P) y su ecosistema para los desarrolladores. Había mucha gente con ganas de irse a ver canguros, me temo ;)

En conclusión, mereció bastante la pena. La organización bastante bien, a parte de algún problemilla con los micros y el pasillo abarrotado de gente. Y no puedo terminar sin agradecer a la gente de MadridJS por la haberme conseguido una entrada a última hora; la próxima vez, si quiero asistir tendré que prevenir ;)

lunes, 21 de marzo de 2011

Tips de JS

Simple entrada para recordar un tip muy útil de JS: el uso de los tres iguales.

Puede utilizarse la expresión === en una comparación en Javascript para comparar, además del resultados de dos expresiones, el tipo de las mismas (por eso del tipado dinámico de JS).

Por ejemplo, 0==false sería cierto pero 0===false sería falso ya que el tipo de ambas expresiones es diferente (uno es un número y el otro una expresión booleana).

Y esto ha sido todo por hoy. A más ver!

miércoles, 27 de octubre de 2010

Lo que he aprendido hoy (20101027)

Buenas amiguitos,

Hace muuucho, pero que muucho que no escribo en el blog. Pero hoy he llegado a la conclusión de que puedo usarlo para ir apuntando cosas útiles y no olvidarlas... uso raro y quizá inapropiado, pero veremos qué tal se da.

Hoy he estado bastante tiempo liado mirando cómo incrustar mis publicaciones en la página de la universidad desde Mendeley. ¿Para qué? os preguntaréis... pues para no tener que estar actualizando publicaciones en: la web de la universidad, Mendeley, la página del grupo, etc etc etc. Sí... además de tardío soy vago :)

En primer lugar he tratado de buscar alguna forma fácil de embeberlas, estilo "embed this code in your site", pero de ese estilo sólo he encontrado añadir el logo que veis en el primer "widget" a la derecha del blog con un link a mi perfil. Después he averiguado que hasta hace poco podían embeberse los artículos de colecciones públicas... pero han capado la opción desde la actualización de colecciones a grupos públicos. De todas formas, me he creado una nueva colección pública con mis publicaciones (a esto se le llama cacofonía xD) y copiando la forma en que lo han hecho en otro blog, he conseguido que se embeban en un iframe a través de una URL como ésta: http://www.mendeley.com/groups/617591/publications/embed/4486C7/ , con el id del grupo y otro id del estilo (si se borra el último id de la URL cambia el estilo, por eso lo sé). Así que quedaría algo de este estilo:



Pero de esta forma podemos adecuarlo al formato que queramos (la web de la universidad tiene unos estilos definidos) y además perdemos flexibilidad (ej., ordenar por año de publicación). Así que me he decidido a echar un ojo al API REST de Mendeley, a ver cómo se podía implementar. Para testear el API he estado usando Poster, muy útil para interfaces REST, pero no conseguía de ninguna forma que me devolviese datos en los métodos donde no es necesaria autenticación. Peeeero, me he dado cuenta de que es necesario registrar una aplicación en dev.mendeley para obtener un consumer_key que pasar como parámetro para que no esté todo el rato devolviendo errores 401. Siguiente paso conseguido!

Ahora que podía acceder a las publicaciones de mi nuevo grupo público, tocaba meterlo en una web para probar... peeeero me he topado de frente con un viejo conocido al tratar de implementar todo en Javascript: los problemas de cross-domain, es decir, que no podemos hacer con un objeto XMLHttpRequest peticiones a servidores distintos del que esta alojada la página. ¿Tendría que seguir usando truculentos IFrames ocultos para hacer las peticiones y pasar los datos a la página principal no-recuerdo-de-qué-forma? Y así he encontrado la referencia a un tipo de implementación que no había escuchado antes JSONP. Como se puede leer en la página de Wikipedia, es hacer llamadas REST a un servidor que responde con JSON, pero indicándole qué método debe llamar en el callback. Por tanto, cargando la llamada como una librería javascript se ejecutaría la función de callback que quisiéramos. Pero claro, para esto tendríamos que tener acceso al servidor para implementar esta funcionalidad... Mi gozo en un pozo!

Así que seguí buceando Google y descubrí que algunos servicios que ofrecían API lo implementaban, como GMaps (al menos en la v2), ¿por qué mendeley iba a no hacerlo? Intenté hacer la llamada a ciegas usando el parámetro "callback" y no funcionó, y demás leí en el grupo de google para desarrolladores del API y decían la funcionalidad había existido pero que la habían capado al terminar la beta (oooooh!) pero prometían activarla pronto. Así que por casualidad me puse a probar la llamada con el nombre de parámetro del artículo de la wikipedia (jsonp) y... tachán! el poster me ha devuelto lo que yo quería. No quepo en mí de gozo :)

El ejemplo de llamada es la siguiente:
http://www.mendeley.com/oapi/documents/groups/617591/docs/?details=true&consumer_key=KEYc&jsonp=createPubs

Pues ale, ya tengo tarea para mañana: realizar la implementación con JSONP e incrustarlo en mi página web. Veremos si encuentro tiempo...

Hasta mañana leyentes!

PD: Sé que la implementación la pude hacer desde un principio usando un proxy para acceder a los servicios del API, pero no tenía ganas de ponerme a PHPear... y que lo de los proxies no me mola! Ójala quiten de una vez la restricción de X-domain de XMLHttpRequest porque para mí es una tontería (quien quiere se la salta).

miércoles, 28 de enero de 2009

Discurso de motivación de Steve Jobs

Me gustó mucho este video de motivación de Jobs en la Universidad. Es largo pero merece la pena.

Notas sobre Wonderland



Hemos estado probando Wonderland en clase. Cosas que hemos descubierto:
- Cambiar la ruta del fichero de configuración de art a localart/art
- Para mostar el pdf hay que pegarlo en la raíz del mundo (ejemplo)
- Para que el pdf se inicie por defecto poner la propiedad slideShow=true
- Las aplicaciones X11 sólo las pueden ejecutar los clientes con Linux/Unix (ni Windows ni Mac OS X)

martes, 27 de enero de 2009