Saltar a contenido

2015

Libro: Developing Backbone.js Applications

He terminado de releer estos días Developing Backbone.js Applications, escrito fundamentalmente por Addy Osmani con la colaboración de más gente vía pull-requests en github. Los primeros capítulos del libro (Introduction, Fundamentals, Basics) se leen muy rápido y dan una buena idea, no sólo de como usar backbone si no de porqué usar un framework MVC.

La idea de mezclar el uso concreto de la herramienta con explicaciones de más alto nivel de patrones se produce a lo largo de más capítulos del libro, por lo que uses backbone o no lo que aprendas te seguirá sirviendo. Esto creo que es el principal aliciente del libro, ya seas un programador novato e inexperto en backbone, o no, puedes aprovechar las explicaciones sobre patrones MV*, Mediator vs Event Aggregator, Desarrollo Modular, …

Otra de las cosas que me gusta del libro y que es muchas veces ignorada es que dedica un capítulo entero a testing. Tal vez demasiado centrado en explicar distintas herramientas (Jasmine, QUnit, Sinon) pero aún así d utilidad.

Algunos otros capítulos me dan la impresión de ser demasiado específicos, como aquellos dedicados a desarrollo para móviles y a otros frameworks construidos sobre backbone como Marionotte y Thorax. El capítulo sobre herramientas por ejemplo también es muy específico y al ritmo al que evolucionan en estos momentos ya se ha quedado desactualizado.

Salvando eso, creo que sigue siendo un libro muy recomendable.

¿Es «decrecimiento» una buena palabra?

Aunque puedo coincidir con algunas de sus ideas la palabra «Decrecimiento» me pone nervioso. Por eso el artículo de Kate Raworth en el blog de Duncan Green explicando algunos de los motivos por los que Decrecimiento es una mala palabra creo es digno de ser leído. Este otro post, con el que no concuerdo, es una respuesta al artículo original.

No dejéis de leer los comentarios y fijaros en la encuesta, en este momento la opción «buena idea, buena palabra» tienen 117 votos, «buena idea, mala palabra» 76 votos y «no una buena idea» tiene 41 votos. Es decir que aún sumando las dos últimas opciones el resultado está empatado. En cambio, la mayoría de comentarios, son críticos con la palabra.

Siendo un pelín malvado parece que a los fans del decrecimiento les va más la adhesión a la idea que a presentar argumentos a su favor.

El sol, la tierra la luna y animaciones con css3

Hace algún tiempo vi un ejemplo brutal de como usar únicamente html5 y css3 para hacer una «representación» del sistema solar.

Viendo que estaba como uno de los proyectos de codeacademy hice una pequeña prueba que comparto. La diferencia fundamental con el de code academy es que en lugar de usar imágenes para representar a los planetas uso div con background-color y que he añadido la luna para poder jugar un poco con las animaciones «anidadas». Que fundamentalmente es un problema de posicionamiento css.

Aquí el resultado. Hay otros experimentos muy chulos en esta línea como este que trata de reproducir el primer experimento usando un html más semántico. O este otro clon del primero donde también modifica la estructura del html usando div todos al mismo nivel de anidamiento. Este otro también sigue la idea del primero pero añade cosas chulas como usar funciones css para posicionar las estrellas de fondo en localizaciones aleatorias.

Y por último, uno que a pesar de incluir algo de javascript (para los controles) es capaz de reproducir el sistema solar en 3D.

Aitor Guevara hablando de la arquitectura de Ducksboard

Un vídeo algo antiguo (2013) en el que Aitor Guevara (CTO de Ducksboard) nos habla de cual era la arquitectura de Ducksboard en aquel momento. A pesar de que el vídeo dura más de una hora y media Aitor consigue hacer amena una charla técnica. No entra al mínimo detalle técnico pero si da una buena idea general. Responde sin rubor a preguntas como cual era el costo de la infraestructura que tenían en Linode (400$) o cuantos clientes de pago tienen.

https://www.youtube.com/watch?v=ArpNnabLqZE

Por el medio de la charla caen perlas del estilo de:

  • Usamos twisted para hacer aplicaciones asíncronas en python. ¿Conoceis nodejs? pues lo mismo pero tiene 10 años en lugar de 1.
  • Usamos backbone, porque tenemos un montón de javascript. Tenemos un montón no porque nos guste si no porque es lo que hay.

Otra de las cosas que más me gustan es la defensa que hace de PostgreSQL, que es el componente central de su infraestructura (especialmente hacia el minuto 50 pero en realidad lo hace en varios momentos). Hacia el minuto 44 explica como usan ellos backbone. La verdad es que aquí no me quedo muy claro desde donde servían el html, o si iba todo en los templates, porque el django del frontend en principio sólo actuaba como API Rest sirviendo JSON al navegador. Eso si, su django usa SQLAlchemy y no django-orm porque tenían cosas en el postgres que django-orm no soporta.

Los últimos minutos de la charla presenta un par de herramientas que «análisis del negocio» que también son de interés.

En este post además del vídeo están las transparencias.

Un sistema como otro cualquiera para recuperar tus contactos en un Android con la pantalla rota

Uno de esos días cualquiera en que te llega alguien (a quien no puedes mandar a freír puñetas buscar en google) que una semana después de comprarse su primer móvil con Android se le ha caído al suelo, se le ha roto la pantalla y quiere recuperar sus contactos.

La primera respuesta es fácil. No hay problema, estarán en la memoria de la tarjeta, o sincronizados en la cuenta de google. Pero no, ni uno ni otro. Están en la memoria del teléfono.

Las primeras búsquedas en google se refieren a sistemas que necesitan que el teléfono esté rooteado para por ejemplo copiar la base de datos (sqlite) con los contactos. Teniendo el sqlite es fácil sacar un csv o al menos un listado que copiar a mano. Pero por supuesto el teléfono no está rooteado.

Bueno, la pantalla no está del todo muerta, la parte de arriba responde. Así que igual da para hacer pulsar en los sitios clave. El teléfono en sí no puede desbloquearse, pero si se puede llegar al botón de «Ajustes«, porque no tiene activado la protección por figura. Jugando con la rotación automática para modificar los sitios a pulsar, podemos llegar de «Ajustes» a «Aplicaciones«, de ahí a la pestaña de «Todas» y desplazarnos hasta «Contactos«. Muchas de las apps, como la «Contactos» tienen un botón «Lanzar» equivalente a como si las abrieras desde el Launcher.

Estando en la app de Contactos sólo hay que poder lanzar la opción de «Exportar«, pero en este teléfono ese menú se lanza desde la tecla de «Menu» que no responde. Teóricamente con el conector adecuado, podríamos conectar un ratón al teléfono para controlarlo, pero a falta de conector resulta que es posible enviar eventos (como pulsaciones de teclas) al móvil a través de adb.

«Pulsamos» la tecla de menú:

<br></br>$ ./adb shell input keyevent 82<br></br>

Y un par de veces KEYCODE_DPAD_DOWN que actúa como el curso hacia abajo

<br></br>$ ./adb shell input keyevent 20<br></br>

Y enviamos el evento KEYCODE_DPAD_CENTER para hacer click / pulsar / tap sobre la opción seleccionada

<br></br>$ ./adb shell input keyevent 23<br></br>

Y ya tenemos lanzada la la aplicación de exportación. Siguiendo un proceso parecido de ver en que partes de la pantalla de puede pulsar y enviando eventos desde adb, seleccionamos como origen el smartphone, como destino la cuenta de gmail. Y listo. En un par de minutos tenemos los contactos en gmail, desde donde podemos exportarlos a csv, vcard o listos para ser usados desde otro teléfono android.

Espero que a alguien le sea de ayuda. Se admiten otros modos de hacerlo en los comentarios.