martes, 22 de octubre de 2013

Libros gratuitos de programación

Libros Gratis de Programación

Revisando las estadísticas de este blog, veo que los posts más populares han sido históricamente los que se refieren a libros gratuitos, así que en un arranque de populismo, decidí agregar uno más.  :)   Al fin y al cabo, si son tan populares, espero que sea porque a los lectores les sirve contar con esos recursos.

Hay una lista ENORME de libros de programación gratuitos en inglés, que se actualiza periódicamente, y de manera colaborativa, y puede verse en:

Quienes quieran colaborar, pueden hacerlo a través de este proyecto en GitHub.

Para quienes prefieren el español hay un recurso bueno y legal que tiene varios libros para leer directamente en línea, de temas genéricos como HTML, CSS, JS, Bootstrap y GIT.

martes, 8 de octubre de 2013

La era de las interfaces aéreas

Desde hace un tiempo vemos cómo las interfaces empiezan a alejarse del mouse, el teclado y últimamente las pantallas.

Mientras que todavía estamos tratando de optimizar al máximo las interfaces táctiles, seguimos teniendo montones de casos en los que lo ideal sería no tener que tocar la pantalla u otro dispositivo. Por ejemplo, en situaciones en las que estamos a cierta distancia de la computadora, o cuando tenemos las manos ocupadas en otras cosa, o sucias (cocinando, reparando un auto, o en medio de una cirugía, por ejemplo).

Kinect

Primero fue Xbox y su accesorio Kinect, uno de los desarrollos más revolucionarios salidos de Microsoft últimamente, que aunque arrancó más orientado al mercado de juegos, pronto agregó una edición para Windows, con su correspondiente SDK, abriendo el dispositivo a lo que que nuestras mentes quieran hackear.

Kinect utiliza una combinación de sensores y un láser infrarrojo que brinda datos de posicionamiento de objetos en 3D. Básicamente, tiene cámaras HD normales e infrarrojas, con lo que consigue no solamente una imagen plana, sino información de distancia. A esto se le suma una serie de micrófonos y una buena cantidad de software.

El SDK para Windows tiene un par de maneras principales de programar: la primera es manipulando los datos en crudo, con el nivel de complejidad que implica, y la segunda es usando un API de más alto nivel que básicamente rastrea posiciones del esqueleto de hasta dos personas simultáneamente. De esta manera se puede programar a más alto nivel, siguiendo el posicionamiento de manos, cabeza, rodillas, etc. Kinect no es muy fuerte aún en reconocimiento de dedos individuales, ni está pensado inicialmente para estar a corta distancia.

 

Leap Motion

Más recientemente se agregó a la partida Leap Motion, un dispositivo mínimo (ver foto), más chico que un teléfono convencional, tal vez un poco más alto. Se conecta por USB a una PC o Mac, y debe ubicarse entre nosotros y el teclado o el trackpad, básicamente bajo el área donde vamos a mover las manos.

La cajita contiene dos cámaras infrarrojas monocromáticas en conjunto con tres LEDs infrarrojos para lograr unos 300 cuadros por segundo a una resolución altísima, y es procesada por software propietario en el mismo dispositivo para proporcionar información de posicionamiento de los dedos muy detallada. Incluso permite detectar cosas como un lápiz en nuestra mano, y utilizarlo para dibujar sin necesidad de tocar la pantalla.

Leap Motion también provee un SDK con lo que pueden desarrollarse aplicaciones que exploten todo es potencial, que en principio es mucho mayor para aplicaciones de precisión, y como medio de interactuar con nuestra computadoras personales.

 

Flutter

Y ahora llega Flutter, recientemente adquirido por Google, y disponible para OS X y Windows, con la particularidad de que no requiere ningún dispositivo externo. Solamente utiliza la cámara incorporada en las notebooks, y detecta (por ahora) unos pocos gestos, orientados en principio a controlar reproductores de media como iTunes, VLC y unos cuantos más que van sumándose, incluyendo ahora algunos sitios como Grooveshark o YouTube, utilizando una extensión de Chrome.

Los gestos que reconoce por ahora son mano abierta para detener o continuar, pulgar a un lado o a otro para ir al track siguiente o al anterior, pero prometen algunos más.

Lo que todavía no está anunciado es un SDK o API para programar sobre el análisis que ellos ya realizan sobre la imagen, pero ahora que Google ha tomado el control, no cuesta mucho pensar en que se integre como funcionalidad básica de Chrome, y porque no, se abra a más usos.

 

Finalmente, para mi lo que queda esperar es más sensores del estilo de Leap Motion integrados directamente en una próxima generación de notebooks, tabletas y teléfonos (hay algunos de Smasung que reconocen ya algunos gestos básicos sin tocar la pantalla) y sobre todo, la aparición de capas de software que realicen la mayor parte de las transformaciones matemáticas necesarias para que podamos luego programar a más alto nivel.

lunes, 7 de octubre de 2013

Agile Solo: prácticas ágiles para corazones solitarios

Agile Solo

Espero que este post sea el primero de una serie (que quedará bajo el tag AgileSolo para poder rastrearla más fácil) que puede ir creciendo a lo largo del tiempo.

La idea surgió a partir de invitar a un amigo de toda la vida, que mantiene desde hace años su empresa de un sólo hombre con éxito, a uno de los talleres de Scrum que damos en Kleer.

Su experiencia fue muy buena, pero muchas veces durante el taller yo iba pensando cómo aplicar algunas de las prácticas que veíamos en un contexto como el de él, navegante solitario. Y como su situación no es única y yo mismo estuve ahí varios años (trabajando a veces solo y otras en equipos remotos y distribuidos) nació la idea de compartir aquí algunas ideas.

El mito del programador solitario

Lo primero que vale aclarar es que en realidad difícilmente trabajemos realmente solos. Gran parte de la estrategia a la que apunto en esta serie es que aunque nuestro equipo principal seamos nosotros mismos, podemos ampliarlo favoreciendo la colaboración con nuestros clientes, con terceros involucrados en nuestros proyectos, y con la comunidad misma.

Scrum en solitario

Por supuesto, no existe algo como "hacer Scrum al 100%". Como en todo marco de mejora continua, no existe un techo al que debamos alcanzar. Dicho esto, practicar Scrum en solitario es una solución de compromiso, distante del ideal, pero...

Repasemos rápidamente los roles de Scrum:

  • Scrum Master
    Su responsabilidad es facilitar que el equipo de Scrum  (incluyendo al PO) alcance su máxima productividad, calidad y felicidad. En la práctica facilita reuniones, remueve impedimentos y usualmente lleva un backlog de mejoras surgidas de las retrospectivas.
     
  • Product Owner
    Su responsabilidad es lograr que el equipo pueda desarrollar el mejor producto posible, lo que implica un fuerte foco en la prioridad de negocio, estar seguro que todo lo que se necesita está en condiciones de construirse, y lograr impulsar la entrega y puesta en producción lo más frecuentemente posible, para facilitar el aprendizaje conjunto con los usuarios, clientes y otros involucrados.
     
  • Equipo de desarrollo
    Es el equipo multi-disciplinario que se encarga de construir el producto, involucrando diseño, desarrollo, pruebas, arquitectura, manejo de datos y servicios, etc. Scrum propone que el equipo cuente con toda la gente necesaria para construir el producto adecuadamente.

¿Cómo compensamos estos roles en un one-man-team?

En principio, la alternativa para el Scrum Master es sin duda, auto-organizarse. Es todo un desafío hacer retrospectivas con uno mismo, pero se puede apartar un cierto tiempo y poner en práctica, aunque sea de manera individual, algunas ideas clásicas de las retros de equipos, como buscar qué queremos seguir haciendo, qué queremos probar y qué debemos cambiar. 

Un tip para general alto del azar y la perspectiva diferente que aportan otras personas es recurrir a métodos como el I-Ching ó las tarjetas Oblique Strategies de Brian Eno. En ambos casos se trata de una selección de frases o estrategias que tomamos al azar y usualmente nos dan una perspectiva totalmente diferente, por ser cosas muy genéricas. Son un antídoto contra el bloqueo mental, más que nada. Para ambos casos existen muchas aplicaciones gratuitas, con lo que no cuesta nada probar.

Lo importante (al igual que en los equipos) es acostumbrarse a mantener un backlog de mejoras. Mi recomendación usual suele ser priorizar las cosas que queremos mejorar, y comprometerse únicamente a la primera de ellas durante el siguiente sprint.

En el caso del Producto Owner la opción ideal siempre es que sea un rol cubierto por una persona de nuestro cliente. Cuando trabajamos solos es más importante aún para poder separar mejor los criterios, pero como siempre, hasta que esa persona comprenda y ejecute bien ese rol, deberemos asistirla en la priorización y mantenimiento del backlog, en el empleo de historias de usuario, y en la planificación de entregas.

Respecto al Equipo de Desarrollo, es la parte que más tradicionalmente encaramos en solitario. En estos casos solemos ser multi-disciplinarios casi por naturaleza, porque todo debemos resolverlo solos, pero podemos además aplicar sobre todo muchas de las prácticas principales de XP, como TDD y ATDD, integración continua, y si somos algo esquizoides, hasta programación de a pares. :)

En realidad, algo que me sirvió personalmente para compensar los pares de un equipo es buscar oportunidades de trabajar regularmente de a pares con otros colegas, aprovechando los canales comunitarios, y la tecnología disponible hoy día para hacerlo de manera remota.

Pero ya es bastante por esta primer entrega. Espero que les sea útil, y si tienen preguntas o sugerencias, les pido las discutamos en Twitter.

 


miércoles, 2 de octubre de 2013

Se viene RubyConf AR el 27 y 28 de noviembre (+ video)

RubyConf AR

La grandiosa mitad de conferencia de Ruby rio-platense (la otra mitad es la RubyConf UY, que se hace en Montevideo por marzo) ya tiene fecha y unos cuantos oradores anunciados.

Entre las grandes figuras está mi amigo y Maestro Angel "Java" López, con foto y todo en el sitio, lo que es poco frecuente.

Y por algún error administrativo, me han aprobado mi propuesta y estaré facilitando el clásico Yoseki Coding Dojo en el Ruby Fun Day que se realiza el 26 de octubre (un día antes) en la Universidad de Palermo.

La conferencia principal será en Ciudad Cultural Konex, como en el 2011.

Como siempre, RubyConf (tanto en Buenos Aies como en Montevideo) es un evento organizado con amor y pasión, que se nota en cada detalle, desde las camisetas hasta la atención permanente, el ambiente entre asistentes y oradores, las reuniones antes, durante y después del evento, y la magia permanente durante todos los días.

El contenido es muy variado, desde temas súper técnico a cuestiones meteorológicas y más de negocios, por lo que todos tienen algo interesante, pero los encuentros entre charlas son una parte enorme del espíritu de esta conferencia.

Dejo de regalo un video divertidísimo de la charla del amigo Jano Gonzalez, "¿Dónde están mi interfaces?", el año pasado:

jueves, 26 de septiembre de 2013

TDD rocks! con el Maestro Angel "Java" López (+videos)

Desde hace un par de meses el Maestro comenzó a grabar unos Hangouts sobre TDD, mostrando ejemplos de algunos de sus proyectos reales, mientras implementa funcionalidades.

Los vídeos no están en español, sino en Anglish (pueden aprender algo de este dialecto en este post previo), pero si hacen click en su nombre en YouTube encontrarán otros que tiene grabados en español. Me pareció particularmente interesante esta serie porque sigue un hilo temático.

Recuerden que además de multitud de conocimientos compartidos en Twitter, el Maestro también publica un post diario (al menos) los 365 días del año, en alguno de sus blogs:

¡Que disfruten la serie!