Mostrando entradas con la etiqueta videos. Mostrar todas las entradas
Mostrando entradas con la etiqueta videos. Mostrar todas las entradas

jueves, 27 de octubre de 2011

Pragmatic Programmers: Aprovechando el poder de la web (+video)

The Pragmatic Programmer

Los lectores o conocidos desde hace tiempo ya saben que tengo mucho respeto y admiración por Andy Hunt y Dave Thomas, los Pragmatic Programmers. Su primer gran éxito en conjunto fue el libro que le dio título a su emprendimiento editorial: The Pragmatic Programmer: From Journeyman to Master, de 1999.

En este libro Andy y Dave destilaron una enorme cantidad de sabiduría aplicada a las labores, prácticas y actitudes básicas de la programación, justo antes de que algunas de ellas se convirtieran en parte del Manifiesto Agile poco tiempo después (siendo Dave uno de los firmantes iniciales).

En el libro apuntan a las premisas básicas del uso de editores, depuradores, control de versiones, generación de código, pruebas unitarias, meta-programación, cuestiones de diseño, refactorización, manejo de requerimientos, y muchísimo más.

Pero después del éxito de este libro, que es uno de los más populares de todos los tiempos en nuestra profesión (para mi, junto al decano The Mythical Man MonthCode Complete y los más recientes Clean Code y The Clean Coder), Andy y Dave fundaron una editorial bastante particular, The Pragmatic Bookshelf dedicada a publicar libros dedicados al desarrollo de software a costos realmente económicos y cubriendo una variedad de temas a los que las editoriales grandes generalmente no llegan por ser demasiado específicos.

Así llevan más de 120 títulos publicados, y además de editarlos en papel se pueden comprar en ediciones electrónicas, sin mecanismos de protección. Esto me parece destacable. A pesar de ser una editorial muy pequeña, ellos tienen un negocio que sobrevive y con altísima calidad y nivel de servicio, sin necesidad de "molestar" al usuario por temas de propiedad intelectual. De hecho, el único mecanismo que utilizan es un código de confianza: cuando uno compra un libro electrónico puede descargarlo en formato PDF, Mobi (para el Kindle) o EPub (para iOS, Android, etc). Lo único que ellos hacen es generar una copia personalizada con el nombre del cliente en los pies de página. Así, si alguien desparrama copias, al menos se hace responsable personal.

Otra cosa que les permite este modelo de negocio es permitir leer versiones preliminares de los libros mientras el autor todavía está escribiéndolo, a un precio reducido y con opción de recibir la edición impresa final o no, y por supuesto con posibilidad de ir comentando el avance con el autor y colaborar con él.

Pero toda esta publicidad gratuita (la hago sólo porque soy un cliente felíz) surgió por otro servicio sorpresa que agregaron esta semana y me comunicaron por email: ahora permiten sincronizar las sucesivas versiones de los libros con una cuenta personal de Dropbox, un servicio pionero en sincronización de archivos en la nube. Dropbox tiene la característica de ser el más exitoso de los múltiples competidores en ese área, basándose en la premisa de mantener el servicio sencillo en cuanto a características, pero siempre extremadamente funcional.

Si, también soy un cliente feliz de Dropbox, cuyo servicio básico y gratuito alcanza y sobra para uso personal y me ha permitido moverme y mantener sincronizados ambientes entre Windows, Mac OS X y móviles, y me liberó de la obsesión por los backups. Pero Dropbox también es un caso interesante para la comunidad Python, ya que usan este lenguaje para cubrir múltiples plataformas cliente, y también del lado del servidor.

Dejo para el final un video (en inglés) Rian Hunter, uno de los ingenieros de Dropbox contando detalles de la implementación en la PyCon 2011.

Ahora, volviendo al tema principal, lo que PragProg agregó a sus servicios es la integración con Dropbox, de manera que cada vez que hay una nueva versión disponible de uno de los libros que tengo comprados (ya sea una nueva versión preliminar o una nueva edición de uno ya publicado con agregados o correcciones).

Lo que me llamó la atención al recibir la noticia fue la experiencia completa como usuario de este mecanismo, que comenzó al recibir el mail con novedades de la editorial y esta noticia en particular:

Integrate DropBox

Al hacer click en esta parte del mensaje, mi navegador me llevó al sitio web, a una página a con todo el detalle, donde me explicaba cómo configurar esta opción en mi perfil:

DropBox options

Y en esta parte de mi perfil pude seleccionar qué formatos me interesan personalmente, lo que es muy prolijo. A continuación me redireccionó al sitio de DropBox utilizando (me di cuenta porque conozco el mecanismo) oAuth. De esta forma llegué al sitio de DropBox, donde me identifiqué con mis credenciales de ese servicio (que nunca llegaron al de la editorial), y el sitio de DropBox, que soporta este protocolo, me informó que PragProg.com deseaba establecer un vínculo, compartiendo mi identidad (mi nombre de usuario de DropBox y ningún otro dato).

Lo que me sorprendió gratamente es ver cómo dos servicios muy buenos permiten potenciar sus características utilizando protocolos estándares, brindando algo novedoso, seguro y práctico. Me pareció bueno compartirlo como un buen ejemplo de aprovechamiento de la infraestructura web actual para lograr productos de software más potentes.

 

 

martes, 20 de septiembre de 2011

Video: Google Developer Day en Buenos Aires

Buenos Aires, ArgentinaAyer estuve brevemente en el arranque de Google Developer Day en Buenos Aires, que continúa hoy (ya que a pesar del nombre son dos días). Fue bueno, como siempre, encontrar amigos y compartir alguna novedades.

La charla de apertura se transmitió en vivo a través de YouTube y afortunadamente ya está disponible para que disfruten aquí mismo quienes no llegaron a tiempo.

La agenda completa incluye temas como Google TV, Android, Chrome, App Engine, HTML5, oAuth, OpenID, Google+, App Script, YouTube Live Streaming, y otros temas.

Espero que pronto estén disponible el resto de las sesiones y pueda compartirlas.

Les dejo el video de la apertura, de aproximadamente una hora y cuarto de duración. Pueden saltear los primeros minutos de la cuenta regresiva, y queda sólo una hora.

viernes, 16 de septiembre de 2011

¿Qué significan Windows 8 y su nuevo WinRT? (+videos)

imageEsta semana arrancó la conferencia //build/ (nuevo nombre del tradicional PDC de Microsoft) y el foco principal fue el lanzamiento (en versión preliminar para desarrolladores) de Windows 8 y su nuevo modelo de programación. Para quienes no las vieron, dejo debajo los videos de las charlas de apertura del día 1 (mayor foco en Windows 8) y el día 2 (mayor foco en desarrollo).

Uno de los anuncios más polémicos o complejos fue el nuevo modelo para desarrollar aplicaciones Windows que puedan ser distribuidas a través del próximo Market, siguiendo el modelo popularizado por Apple y al que ya se ha sumado toda la industria, incluyendo Windows Phone.

El siguiente es el diagrama más visto en los últimos días mostrando cómo queda el stack de Windows, y debe tenerse en cuenta que es un diagrama aproximado, porque obviamente simplifica muchas cosas para servir como modelo introductorio:

Plataforma de Windows 8

Básicamente, la mayor novedad está en la sección verde del diagrama (aplicaciones estilo Metro). Este tipo de aplicaciones serán las que puedan distribuirse a través del Market, y su particularidad es que no pueden acceder al API completa de Win32, sino que dialogan contra el API de WinRT, la nueva estrella del mundo Microsoft.

En principio, WinRT es una buena idea. Lo que hace es proveer un contexto de ejecución seguro (similar al de un navegador) para aplicaciones Metro (insisto en que el modelo anterior existe, pero NO se puede distribuir por el Market). Lo que se logra con esto es que todas esas aplicaciones tienen acceso mediado y controlado a los recursos físicos del sistema, y son muchísimo más seguras, aun cuando pueden escribirse básicamente bajo tres paradigmas:

  • En .NET (utilizando el mismo CLR pero con un perfil especial que restringe el API disponible, similar a lo que sucede al escribir aplicaciones en Silverlight), utilizando XAML para el diseño de las interfaces.
  • En código nativo (C/C++) utilizando XAML también, pero sin acceso a Win32, sino a WinRT.
  • En JavaScript, utilizando HTML/CSS para el diseño de interfaces.

Otra característica importante de WinRT es que todas sus API tienen interfaces asincrónicas, salvo las que tienen tiempo de respuesta asegurado inferior a 50 milisegundos. El objetivo de esa decisión es mejorar la respuesta de Windows sobre todo en la interacción con el usuario. Todos sabemos que es normal en Windows tener demoras en el explorador o dentro de las aplicaciones, y mirar por unos segundos la famosa ruedita girando. Con el advenimiento de las interfaces táctiles (uno de los temas más fuertes en Windows 8) esos tiempos de respuesta no son viables. Por eso es importante volver a un modelo más similar al de programación en la web (con JavaScript) basado en operaciones que devuelven callbacks, que liberan el hilo de ejecución hasta que la operación termina.

La contra de este modelo en general es que el nivel de complejidad para manejar callbacks anidados y el control de errores se eleva considerablemente. No es casualidad entonces que tanto en .NET 4.5 como en JavaScript veamos crecer el uso de patrones asincrónicos (en C# 5 a través de las nuevas cláusulas await y async, heredadas de F#) y en JS con la creciente adopción de promesas (utilizando las abstracciones .then() y .when() ) en bibliotecas como jQuery, Dojo y otras derivadas de CommonJS.

Entre otros temores surgidos a partir de las presentaciones del nuevo modelo, está la confusión sobre si .NET ha perdido importancia. Personalmente creo que no, pero Microsoft ha vuelto a las fuentes en algunos sentidos, volviendo a poner énfasis en el código nativo para aplicaciones de alto rendimiento. Los lenguajes manejados dan mayor productividad en general, pero sólo en C/C++ se pueden crear aplicaciones de muy alto rendimiento en velocidad, consumo de recursos e incluso consumo de energía. Estos tres factores no eran tan importantes hasta hace un par de años porque pensábamos nuestra aplicaciones para correr en computadoras de escritorio o servidores, pero el desarrollo de los dispositivos móviles (teléfonos, tabletas, y otros) ponen de nuevo foco en ellos. Y en el otro extremo, aplicaciones del lado del servidor que ahora tenemos que pensar para miles de usuarios concurrentes hacen que tengamos que el ahorro de recursos en alta escala financie con creces el tiempo extra de desarrollo.

En fin, quedan muchos temas disparados que espero seguir tratando más adelante. Cualquier comentario o pregunta son bienvenidos. Les dejo los videos para que se diviertan.

Apertura del día 1 - Windows 8

Apertura del día 2 - Desarrollo y Operaciones

martes, 13 de septiembre de 2011

Video: Programando de a pares con Emilio Gutter

Emilio Gutter

En esta nueva sesión de programación de a pares me sumo a Emilio Gutter para hacer un ejercicio utilizando Java.

Conocí a Emilio a fines del 2006 cuando fuimos compañeros de equipo durante el curso de Certified Scrum Master dado por Tobias Mayer. Nos divertimos mucho durante ese curso, y varios de los que pasamos por ahí nos mantuvimos en contacto después a través de una primer lista de distribución que fue uno de los puntos focales de donde surgió el grupo de organizadores de la primer conferencia de la serie Ágiles: Ágiles 2008.

Emilio lleva más de 10 años trabajando en desarrollo de software y es un desarrollador trotamundos que ha trabajado en proyectos en Argentina, Brasil, UK, USA, Francia, Rumania y Bulgaria, por lo menos. Actualmente es uno de los líderes de su consultora 10pines, que brinda servicios de desarrollo, entrenamiento y coaching, con fuerte foco métodos ágiles, incluyendo un alto compromiso con la calidad y la cultura organizacional.

En el video podrán ver cómo hacemos un ejercicio de diseño en Java, usando Eclipse con JUnit 4 y la biblioteca de mock objects mockito y planeábamos utilizar también harmcrest,una biblioteca de matchers (o predicados) muy útil para realizar aserciones en las pruebas unitarias, pero no alcanzó el tiempo esta vez, así que quedará para más adelante.

Les dejo el video (de aproximadamente 25 minutos) y espero que lo disfruten:

lunes, 5 de septiembre de 2011

Smalltalks 2011, los días 3, 4 y 5 de noviembre en Quilmes (+video del 2010)

imageUna vez más, la imparable Fundación Argentina de Smalltalk (FAST) organiza la conferencia internacional del lenguaje decano de la orientación a objetos: Smalltalks 2011.

El año pasado se realizó en Entre Ríos, y este año le toca alojar el evento a la Universidad Nacional de Quilmes (Roque Saenz Peña 352, Bernal, Buenos Aires, Argentina).

La llamada a ponencias para el Track de Investigación cierra hoy mismo (lamento no haber publicado esto antes) pero aún se pueden proponer Sesiones Técnicas hasta el 3 de octubre (queda casi un mes).

Por ahora el único invitado especial confirmado es Ian Piumarta, pero seguramente la lista de celebridades se incrementará a medida que se acerque la fecha, como siempre sucede.

 

Como regalo, les dejo la sesión del Maestro Angel “Java” López (a la sazón, oriundo de Quilmes) durante Smalltalks 2010. Como la conferencia es internacional, las sesiones se presentan en inglés, aunque en este caso se presentó en “Anglish”, como el orador explica al comienzo, antes de sumergirse de lleno en AJTalk, su intérprete del lenguaje Smalltalk sobre el CRL de .NET. Altamente recomendable:

Unable to display content. Adobe Flash is required.

Unable to display content. Adobe Flash is required.

jueves, 18 de agosto de 2011

Scrum Guide 2011 en español (+ video en inglés)

Jeff Sutherland (arriba) y Ken Schwaber (abajo)Recientemente Scrum.org, la organización detrás de la difusión de la metodología, publicó la versión actualizada de la guía escrita originalmente por Jeff Sutherland y Ken Schwaber y revisada este año: Scrum Guide 2011.

En la misma página se encuentran disponible traducciones de la guía a muchos idiomas, incluyendo la versión en español (PDF, versión del 2010).

Para quienes no conocen más que lo anecdótico de Scrum, dejo un brevísimo resumen de este framework que se basa en tres pilares:

  • Transparencia
  • Inspección
  • Adaptación

El equipo de Scrum está compuesto por:

  • El Product Owner (PO, dueño del producto), que se ocupa de maximizar el valor del producto y el trabajo del equipo de desarrollo. Por eso es el responsable principal del Backlog de producto, y debe asegurarse que esta lista está siempre priorizada, de manera que nadie trabaje en lo que no es la máxima prioridad en cada momento.
  • El Equipo de Desarrollo es el grupo que se encarga de entregar incrementalmente un producto funcional al fin de cada Sprint (iteración). La guía agrega un poco más de detalle incluyendo la composición y tamaño.
  • El Scrum Master se encarga de que las reglas y principios de Scrum se mantengan y de que los bloqueos potenciales se eviten o eliminen cuanto antes. La guía detalla un poco más los servicios que el Scrum Master proporciona al PO, al Equipo de Desarrollo y a la Organización.

Los eventos de Scrum son:

  • El Sprint (o iteración) durante el que el compromiso asumido por el equipo y consensuado por el PO no debe cambiar, y se ejecuta manteniendo el orden de prioridad para el negocio, de manera de que al terminar el límite de tiempo impuesto (entre una semana y un mes) lo que quedó completo e incluido en el incremento de producto es siempre lo más importante. Dentro del Sprint se producen:
    • La planificación del Sprint, en el inicio, donde el Equipo y el PO acuerdan el compromiso para la iteración, tomando los ítems de máxima prioridad en el Backlog de Producto, en orden descendente, hasta donde el equipo estima que puede terminar dentro del límite de tiempo.
    • El Scrum Diario (o stand-up), donde el equipo se reúne (de pie, para evitar prolongar la reunión más de unos minutos) y cada miembro del equipo expone:
      • Qué terminó desde el último stand-up
      • Qué planifica terminar antes del próximo stand-up
      • Qué obstáculos puede llegar a tener (y que el Scrum Master deberá evitar que bloqueen al equipo)
    • El Sprint Review, en el que el equipo muestra el resultado del trabajo al PO y los interesados que éste considere apropiado para ayudarlo a continuar ajustando el Backlog de producto.
    • La retrospectiva en que el equipo reflexiona sobre la manera en que se desarrolló el trabajo, teniendo en cuenta relaciones, técnicas, herramientas y demás, y determina algunas medidas para mejorar en el siguiente Sprint.

Los artefactos de Scrum son muy pocos:

  • El Backlog de Producto, que el PO se encarga de construir y mantener priorizado en base al valor para el negocio a través del tiempo.
  • El Backlog del Sprint, que el Equipo y el PO determinan al comienzo de cada Sprint y cuyo seguimiento determina el nivel de avance dentro del Sprint.
  • El Incremento de producto es la entrega que el equipo realiza a final de cada Sprint, y que debe ser funcional desde el inicio, de manera que esté potencialmente en condiciones de usarse y agregar valor.

En la guía terminan volviendo a la importancia de la definición de cuándo una tarea está “terminada”, lo que debe convertirse en un contrato entre el Equipo, el PO y la Organización, de manera de ajustar las expectativas y evitar discusiones y problemas al respecto.

La guía amplía un poco este resumen, pero sólo tiene 17 páginas, incluyendo algunas con índice, historia, agradecimientos, etc. El framework es muy sencillo de describir, lo que no implica que sea fácil de implementar. Suele decirse que se parece en eso a un deporte: las reglas son sencillas, pero ser un buen jugador es típicamente un gran desafío y el secreto está en la práctica y la dedicación.

Video

Como final, dejo este video de una charla de Schwaber en el 2006 dentro de las oficinas de Google, que me parece que explica bien muchos de los principios, y aunque está en inglés, vale la pena escuchar esto desde uno de sus iniciadores.

miércoles, 17 de agosto de 2011

Video: Agiles @ Buenos Aires–Lean Startup, por Fernando Parra

Ágiles 2011El pasado 19 de julio el grupo Agiles.org de Buenos Aires realizó su ya tradicional reunión mensual, y en esta oportunidad el facilitador fue Fernando Parra (de MicroStrategy), quien contó un poco sobre los conceptos de emprendimiento alrededor del modelo Lean Startup, más basado en el foco en el diseño de producto y en el piloto inicial empujado por los mismos emprendedores más que el clásico modelo de buscar inversores para desarrollar una idea.

Este estilo de desarrollo de negocios está muy basado en una mezcla de métodos ágiles, software gratuito de código abierto, iteraciones cortas y extremo foco en el cliente final.

Algunos links adicionales:

Y como personalmente no pude quedarme a la sesión, agrego las notas tomadas por mi amigo Ricardo Colusso:

La presentación se centró en emprendimientos de desarrollo de producto.

¿Porqué muchos emprendimientos fallan? Algunas razones: Optimismo infundado, foco 100% en el producto antes que pensar en quienes lo van a usar, resultado: el producto no encuentra mercado.

Proceso propuesto: Concepto de producto mínimo viable (MVP). Por ejemplo el primer teléfono de Apple que no permitía copiar y pegar.

Ver http://pathfindersoftware.com/2011/01/exploring-customer-validation/

Hablamos del Lean Canvas: http://leancanvas.com/ - Forma Lean de presentar información de startups.
Puede bajarse gratis y usarlo/adaptarlo a lo que necesitemos (licencia Creative Commons)

La charla luego de la presentación fue por el lado de pensar cuan útil es un plan de negocios para un Llean Startup. Si quiero un subsidio de algún organismo oficial seguro que necesito hacer un plan de negocios, pero se habla de que probablemente me convenga no pedir plata y arreglarme inicialmente con lo que tenga. Se habla también sobre "burbujas" (como las punto com en 2001) que son vistas como oportunidades en el momento, pero que no tienen un sustento firme a nivel ganancias por cliente nuevo obtenido. Después estuvimos analizando en más detalle en que consiste el lean canvas, y encaramos un caso específico.

Nombres y fuentes de información mencionadas en la sesión:

Agradezco a Rick por las notas y les dejo la serie de videos (5 en total, cubriendo unos 80 minutos). Los últimos 10 minutos de la parte 5, aproximadamente, quedaron ocupados por el inicio de una actividad posterior que no tuve oportunidad de editar.

miércoles, 13 de julio de 2011

¡Yukihiro "Matz" Matsumoto se suma a Heroku! (+video)

Matz en Heroku

Ayer Heroku, la plataforma para despliegue de aplicaciones en la nube (adquirida por SalesForce.com a fines del año pasado), anunció que Matz, el creador de Ruby, se sumó a su equipo como Arquitecto Jefe.

Esta es una gran noticia no solamente para la comunidad Ruby, sino para la industria en general, porque une más aún equipos innovadores y de una influencia muy positiva para toda la comunidad.

Por un lado, Matz es una persona inquieta y perseverante, que a mediados de los noventa decidió crear un lenguaje que hiciese feliz a los programadores, no a los compiladores, y a lo largo de los años mantuvo un gran liderazgo alrededor de una comunidad sumamente colaborativa que aportó grandes ideas al campo de los lenguajes y ecosistemas, y que incluso con la llegada de los "niños rebeldes" de Ruby on Rails, que trajeron una perspectiva muchas veces extrema y criticada, siguen llamando la atención sobre estilos de construcción de aplicaciones basados en agilidad, simplicidad y capacidad de expresión.

Por el otro, Heroku, desde sus humildes orígenes como una plataforma pequeña de aplicaciones en la nube en el 2007, siempre intentó hacer que el desarrollo y ejecución de las aplicaciones web fuese algo más sencillo y ordenado, y desde entonces su servicio creció para establecerse entre los mejores en satisfacción de los usuarios/desarrolladores y calidad de ejecución, además de mantener el espíritu de soporte a los emprendedores brindando la posibilidad de comenzar con niveles gratuitos que permiten construir cosas reales y empezar a invertir dinero cuando el negocio realmente empieza a despegar.

La combinación sólo puede deparar más fuerza en esa dirección sana de seguir impulsando a la "competencia", ya sean otras plataformas o lenguajes, en la dirección de la productividad y sencillez pero siempre basadas en una experiencia de desarrollo divertida y libre de stress.

Es interesante saber que Heroku planea seguir adelante con su soporte a otros lenguajes/entornos, como Node.js o Clojure (ambos soportados actualmente) mientras que el rol de Matz (y su pequeño equipo de colaboradores) será seguir desarrollando Ruby. Seguramente la cercanía aporte muchas cosas buenas a la plataforma en general, y probablemente le permita a Matz seguir jugando con otros lenguajes, algo que nunca dejó de hacer a pesar de su liderazgo en el desarrollo de Ruby.

Como regalo final les dejo un video de Matz recorriendo un poco la historia de Ruby antes de contar los planes para la próxima versión 2.0, que comenzó el desarrollo a fines del año pasado. En el video Matz habla en su tradicional simil-inglés, que espero que entiendan (tiempo total: ~35 minutos).

viernes, 8 de julio de 2011

Video: Comunicación no violenta, con Ingrid Astiz

IngridAstiz

En la última reunión mensual de Ágiles @ Buenos Aires el tema central fue "Comunicación no violenta", coordinada por Ingrid Astiz de Fuerza Tres.

Ingrid tiene un background mixto entre sus estudios de filosofía en UBA y sus 16 años trabajando en desarrollo de software, que canalizó volcándose a las metodologías ágiles, poniendo fuerte foco en la dinámica de grupos y las relaciones humanas.

Pueden ver, además del video debajo, la presentación de Ingrid embebida en este post de su blog.

El video está dividido en 3 segmentos, y dura en total unos 50 minutos.

martes, 5 de julio de 2011

Alt.NET Open Space en Buenos Aires: 16 de julio (+ video)

Alt.NET Hispano

Como comentaba días atrás, se está organizando una nueva reunión de la comunidad Alt.NET en Buenos Aires, y la fecha final es el sábado 16 de julio, de 9:00 a 18:00 en las oficinas de Microsoft Argentina (gracias al anfitrión Miguel Sáez), en Bouchard 710, 4to piso, Ciudad de Buenos Aires.

Para quienes no conocen el formato Open Space, les dejo el enlace a esta guía.

Como siempre el evento es gratuito pero hay que registrarse previamente y llevar un documento de identidad el día del evento. El registro se realiza en línea, y también puede verse la lista de quienes ya lo han hecho, para darse una idea del ambiente y ver si hay amigos asistiendo.

Tradicionalmente el almuerzo se hace en el mismo lugar, con empanadas o pizzas, en un intervalo a mediodía, de manera de aprovechar al máximo este sábado geek.

Otra cosa importante es que aunque la selección de temas se produce por presentación y votación en el primer momento del evento, hay una wiki donde se pueden ir proponiendo temas posibles, de manera de ir generando ideas. Es importante animarse a proponer temas, recordando que el que propone no necesariamente tiene que exponer, si no que puede hacer un llamado a charlar sobre algo que no conoce bien o que le genera dudas.

 

Como último detalle antes de cerrar (y que puede generar algún debate en el Open Space) les dejo el video de la más reciente de las VAN de Alt.NET Hispano (y recuerden que ya hay 75 sesiones de cerca de dos horas disponibles para ver a demanda):

El tema es "Identity Providers, oAuth y Autenticaciones on-line", presentado por Carlos Peix y Nelo Pauselli.

Unable to display content. Adobe Flash is required.

 

Video: JavaScript, jQuery, CSS and Razor in ReSharper 6

El video que comparto esta vez tiene un par de cosas raras para este blog:

  • Está en inglés (fue grabado en la reciente Norwegian Developers Conference)
  • Presenta un producto pago (no abierto)

¿Por qué lo publico entonces? Porque en 6 minutos, Hadi Hariri, colega que participa también en el grupo Alt.NET Hispano, y al que oportunamente espero conseguir para presentar algo de esto en español, demuestra algunas características de ReSharper 6, un complemento con Visual Studio que algunos describieron en Twitter como "una IDE que utiliza Visual Studio como host", por sus increíbles capacidades.

Específicamente, y más allá de que uno programe o no en .NET y eventualmente no utilice Visual Studio, me parece notable el nivel de análisis en vivo que pueden hacer sobre código JavaScript. Como Hadi dice en un momento del video, ya no es un tema de "estático o dinámico" sino de las herramientas adecuadas. JetBrains, la empresa detrás de ReSharper (conocidos también por su IDE para Java IntelliJ IDEA y otras como PyCharm y RubyMine) me sorprende siempre por su capacidad de innovación y de resolución de problemas complejos alrededor de la comprensión y análisis de lenguajes de todo tipo.

Va para ellos mi reconocimiento.

lunes, 4 de julio de 2011

Video: ¿Qué esperas de Agile? con Federico Zuppa

Federico Zuppa

Este video es de una de las reuniones mensuales de Agiles @ Buenos Aires, pero me había quedado en el tintero procesarlo y publicarlo, así que, con disculpas a Federico por la demora, acá va.

Federico es desarrollador y coach en metodologías ágiles en 10Pines, y anteriormente trabajó en EDS (hoy HP), Globant y otras empresas de software, involucrándose en proyectos muy interesantes.

Después de años utilizando metodologías ágiles y actuando como introductor en muchos equipos, se unió a 10Pines para dedicarle más tiempo a esta actividad de ayuda.

Mediante esta actividad encontró muchas veces una variedad de expectativas y objetivos respecto a la adopción de este paradigma, y de eso habla en esta sesión que presentó originalmente en Agiles 2010 en Lima y repitió en la reunión de Buenos Aires de marzo de este año.

Queda el video, entonces, dividido en 3 partes, que duran en total unos 50 minutos.

viernes, 1 de julio de 2011

Video: Programando de a pares con Mariano Koldobsky

Mariano Koldobsky

Mi invitado esta vez es Mariano Koldobsky, un experimentado trabajador al que conozco desde hace años, a raíz de conocernos en una empresa en que él trabajaba y yo daba consultoría, y reencontrarnos más tarde en la comunidad ágil.

Tiempo después logramos trabajar juntos por un tiempo, hasta hace poco cuando Mariano empezó a trabajar para bvision, que tienen oficinas cerca de su casa en La Plata, capital de la provincia de Buenos Aires.

Con Mariano compartimos la pasión por la programación, la electrónica y recuerdos de nuestra generación, ya que somos los dos bastante veteranos. Pero casualmente esas dos primeras aficiones nos llevaron a elegir como tema de nuestra sesión un ejercicio de programación y cableado, utilizando una placa Arduino, que es una plataforma de hardware abierto, ideal para realizar prototipos e implementaciones sencillas y caseras de dispositivos de control.

Como verán en el video, la placa se conecta por USB (anteriormente por puerto serie) y se programa en un lenguaje de programación propio (una especie de Processing, pero basado en C++ en lugar de Java).

Algo interesante de Arduino es que es la plataforma que tomó de base Google para desarrollar su propio Android Open Accessory Development Kit, con lo que conocerla ahora puede significar algo más que un mero pasatiempo.

El video dura un poco menos de 15 minutos, y espero que les resulte tan divertido como a nosotros grabarlo. ¡Al menos por una vez van a ver algo más que código!

 

jueves, 30 de junio de 2011

Raros lenguajes nuevos: Cobra (video)

Cobra - multiplataforma

(gracias a José Romaniello por descubrirme este interesantísimo lenguaje)

Cobra es un lenguaje multi-plataforma y multi-paradigma que combina una cantidad de características sumamente interesantes.

Es obra de Charles Esterbrook, y su autor describe sus principios de diseño de la siguiente manera:

  1. Programación rápida y expresiva
  2. Rápida ejecución
  3. Tipado estático y dinámico
  4. Calidad soportada a nivel del lenguaje

Por supuesto que suena ambicioso y vendedor, pero en principio, es bastante realista. Veamos cómo se soporta cada cosa:

Programación rápida y expresiva

Cobra tiene una sintaxis basada en Python (sobre todo) y Ruby, lo que lo hace mucho más legible que los lenguajes "con llaves y punto y coma". Entre otras cosas, en Cobra los bloques se determinan por indentación, las listas y diccionarios se pueden declarar como literales, hay comandos como print y assert de uso sencillo y poderoso, la manera de iterar y dividir listas es simple, y mucho más.

Un ejemplo rápido de la sintaxis, con la definición de una clase:

class Person
   """
   Declaración de una clase. Este comentario documenta la clase misma
   """

   var _name as String  # Declara variables de instancia (no estáticas)
   var _age as int

   cue init(name as String, age as int) # Inicializador (constructor)
      base.init
      _name = name
      _age = age

   def sayHello # Métodos
      # Los corchetes interpolan valores en las strings
      print 'Hello. My name is [_name] and I am [_age].'

   def divide(i as int, j as int) as int
      """ Este comentario documenta este método """
      assert j > 0 # Si el divisor 
      return i / j

 

Rápida ejecución

Esto es logrado a través del uso de tipos estáticos con inferencia permanente, sin perder las capacidades dinámicas para los casos necesarios.

La implementación actual de Cobra utiliza la Infraestructura Comun de Lenguajes (CLI) de .NET/Mono, por lo que el compilador genera código intermedio (IL) que a su vez es es llevado a código nativo por el motor de ejecución de .NET/Mono como en otros lenguajes.

 

Tipado estático y dinámico

La mayor parte de la resolución es estática y en tiempo de compilación, mientras que siempre que haga falta puede utilizarse resolución dinámica en tiempo de ejecución, basada en Reflection de .NET y apoyándose en técnicas específicas de optimización.

Veamos un ejemplo sencillo de una misma función declarada estáticamente:

def add(a as decimal, b as decimal) as decimal
   return a + b

... o dinámicamente:

def add(a, b) as dynamic
   return a + b

En la práctica, no son la misma función, ya que la primera opera solamente con números decimales, y la segunda con cualquier tipo que soporte la operación suma.

Obviamente la primer función es más rápida, ya que se verifica y compila, y no requiere más recursos que los operandos de un largo conocido (decimal), mientras que la segunda, al resolverse dinámicamente, es verificada en tiempo de ejecución y requieres más recursos para la conversión de parámetros, etc.

Por otro lado, contar con ambas variantes es lo ideal, ya que podemos aprovechar el contrato estricto de los tipos estáticos para gran parte de la aplicación, pero con la flexibilidad de los dinámicos para las porciones que son más variables, o para facilitar el prototipado.

Nótese que el soporte a tipos dinámicos de Cobra, comparado con el de C# o VB (a partir de .NET 4), es sintácticamente más sencillo, mucho más integrado a nivel del lenguaje.

Calidad soportada a nivel del lenguaje

Cobra soporta contratos de código (algo proveniente de Eiffel que .NET 4 soporta parcialmente), pruebas unitarias, comentarios para documentación y verificación de valores nulos en tiempo de compilación, todo como parte de su sintaxis.

Veamos como las pruebas unitarias quedan embebidas directamente como parte de un método:

class Utils
   shared
      def countChars(s as String, c as char) as int
         """
         Returns the number of instances of c in s.
         """
         test
            assert Utils.countChars('', c'x') == 0
            assert Utils.countChars('x', c'x') == 1
            assert Utils.countChars('X', c'x') == 0  # case sensitive
            assert Utils.countChars(' ! ! ', c'!') == 2
         body
            count = 0
            for ch in s
               if c == ch
                  count += 1
            return count

Las aserciones, además, pueden usarse en cualquier parte del código, y arrojan una excepción con información útil para depuración si no se cumplen (no son un IF).

Los contratos embebidos en el código permiten especificar pre y post-condiciones a los métodos, garantizando la consistencia antes de entrar y después de retornar el valor final. Por ejemplo:

class Customer

   var _contacts as List<of Contact>
   get contacts from var

   def addContact(contact as Contact)
      require # Arroja excepción si algo no se cumple ANTES de entrar
         contact not in .contacts
         contact.name
         contact.customer is nil
      ensure # Arroja excepción si algo no se cumple DESPUES de salir
         contact.customer == this
         .contacts.count = old .contacts.count + 1
      body
         contact.customer = this
         _contacts.add(contact)

Y otra característica muy buena de seguridad es que los parámetros o tipos que pueden recibir nil (llamado como en Smalltalk o LISP), son los que se declaran como tales, agregando al sufijo "?" al tipo, como en:

def bar(s as String?)
   if s  # Es igual que preguntar "if s is not nil"
      print Utils.countChars(s, c'x')

 

Cobra está escrito en Cobra

Una característica más que quiero remarcar es que este lenguaje está escrito sobre si mismo. Por supuesto hay una parte del compilador escrita para la plataforma nativa (C# en este caso), pero el resto está escrito en Cobra mismo, lo que hace que el lenguaje tenga un nivel de depuración y prueba mayor que otros que se construyen generalmente sobre lenguajes de más bajo nivel. Esto está sucediendo en otros lenguajes a posteriori, como en el caso de PyPy o Rubinius, pero en Cobra fue un principio de diseño.

Personalmente me parece uno de los lenguajes "experimentales" más interesantes y completos que he visto en los últimos tiempos, en parte porque se apoya en una plataforma que ya ofrece muchos servicios, y en parte por algunas de sus características maduras que y las herramientas con que ya cuenta (compilador, ejecutor de pruebas unitarias, generador de documentación, coloreador de sintaxis, etc).

Y también cuenta con soporte parcial en algunas IDEs y editores:

Visual Cobra es un complemento para Visual Studio que reconoce y colorea la sintaxis.

Naja es una IDE completa escrita en Cobra que ademas del coloreo de sintaxis tiene soporte para lista de tareas basada en comentarios, soporte para proyectos y un diseñador de formularios que genera código Cobra.

Y si uno prefiere un editor de texto hay muchos para los cuales hay complementos para soportar la sintaxis, incluyendo gedit, Notepad++, UltraEdit, Vim y TextMate (el que estoy usando yo), y mucho más para elegir según la plataforma que cada uno usa. Y para cualquier otro caso existe un detalle de las palabras clave y modificadores, de manera que en cualquier editor se puede partir del soporte para Python y cambiar estas listas.

 

Finalmente, dejo este video de la presentación de Esterbrook en el Lang .NET Symposium 2008. Aunque la implementación del lenguaje maduró bastante desde entonces, muchos de los principios siguen igual.

 

martes, 28 de junio de 2011

Videos de la Apple World Wide Developer Conference 2011

wwdc2011

Apple realizó su conferencia principal para desarrolladores, como todos los años, e imagino que la mayoría ya debe haber visto al menos algún compilado de la sesión de apertura, en la que se lanzaron Mac OS Lion, iOS 5 y iCloud, entre otras cosas.

Para quienes no lo vieron, dejo al final el video de esa sesión completa, aunque advierto que dura 158 minutos (casi 2 horas).

Si no tienen tiempo, pueden buscar en la web alguno de los compilados que muestran los anuncios más sobresalientes. Los hay super-comprimidos de 60 segundos, y algunos más detallados de unos 10 minutos.

Sin embargo, quienes quieran abundar en más información, no menos, ya pueden ver en video todas las sesiones (un centenear) de la conferencia, incluyendo algunas que captaron mi interés como (mi usual lista arbitraria; el sitio requiere un usuario gratuito registrado):

Espero que encuentren otros temas que les interesen.

Va la sesión de apertura:

lunes, 27 de junio de 2011

Video: Programando de a pares con Diogenes Moreira

Diogenes Moreira

En esa sesión mi par es Diogenes Moreira, amante de la Orientación a Objetos que a pasado por múltiples tecnologías desde Cobol y PowerBuilder hasta Java y C#, siempre con su corazón cerca de Smalltalk.

Diogenes trabaja actualmente para Ilon SA y aunque tiene múltiples responsabilidades no deja de programar junto a su equipo. Participó en varios proyectos de código abierto, incluyendo colaboraciones para Pharo.

Nos conocemos por amigos comunes y por el grupo Agiles de Buenos Aires, y casualmente durante una de las reuniones mensuales de éste nos escapamos un rato a grabar este video en que hacemos algunos ejemplos con Seaside, un framework web para Smalltalk.

Como acompañamiento del video, dejo esta presentación de Esteban Lorenzano, en la que se recorren varias de las características que Diogenes comenta mientras escribimos los ejemplos:

Sin más preámbulos, el video, que dura aproximadamente 35 minutos. Estoy usando un servicio que brinda mucho mejor calidad de video (sobre todo para el código), pero tengan paciencia porque el reproductor puede tardar varios segundos (a veces casi un minuto) en empezar.

 

martes, 21 de junio de 2011

Se aproxima otro Alt.NET Buenos Aires (y video de una VAN)

Alt.NET Hispano

Cada tanto la comunidad Alt.NET se pone de acuerdo para realizar un Open Space en Buenos Aires, como en muchas otras partes del mundo. Ya he cubierto ediciones anteriores en este blog, y ahora me toca informar sobre la organización de una nueva reunión.

Como suele ocurrir, hay mucha gente que está interesada pero aún no se ha acordado la fecha definitiva, aunque hay consenso en hacerla durante el mes de julio. Para votar por la fecha que prefieran los interesados, estamos utilizando este mecanismo:

http://whenisgood.net/p5734be

¡No sean tímidos! Todo el que esté realmente interesado en participar puede elegir qué sábado le queda mejor. Tengan en cuenta que usualmente s desde las 9 de la mañana hasta las 6 de la tarde, con la interrupción del almuerzo que se hace in-situ. Es probable que el lugar sea Microsoft de Argentina, en Bouchard 710, 4to piso, Ciudad de Buenos Aires.

Para quienes nunca estuvieron en un Open Space, dejo esta descripción en castellano del grupo Agile Spain.

Y como siempre, aprovecho para recordar que además de estas reuniones presenciales que se organizan esporádicamente en distintas ciudades, el grupo Alt.NET Hispano organiza reuniones virtuales en forma semanal (a veces más de una por semana), que se anuncian en la lista de distribución y en el calendario de reuniones del sitio.

Estas reuniones quedan grabadas y pueden verse a demanda una semana o dos después de su ejecución, y el grupo ya lleva (a hoy) 73 reuniones que pueden verse en línea o descargarse desde el histórico de reuniones.

Como muestra, dejo el video de la reciente sesión sobre REST Services y WCF Web Api, presentada por Pablo Cibraro, Gustavo Machado y José Romaniello, de Tellago.

Unable to display content. Adobe Flash is required.

 

jueves, 9 de junio de 2011

Video: Sesión NO presentada en Run WebCamp Chaco

Run WebCamp

Hoy tenía previsto estar en Resistencia, Chaco, participando en la edición local del Run WebCamp que está recorriendo el país, dando la sesión sobre Entity Framework que presentamos previamente en Buenos Aires con Daniel Laco.

Actualicé la presentación con algunos cambios en los poquísimos slides y mejoré un poco mi parte de los ejemplos, centrándome más en Code First que es la parte que me interesa más.

Pero no tuve mucha suerte: esta semana entró en erupción el volcán Pehueye en Chile, provocando bastantes problemas allá primero y en Argentina también, sobre todo en Bariloche, pero llegando a provocar demoras o cancelaciones de vuelos en toda la región.

Así que me quedé sin asistir, pero decidí grabar la sesión en video y compartirla. No llegué a tiempo con el procesamiento y la subida del video, me parece, pero espero que mis colegas y amigos de Chaco hayan podido compartir el link con el público de allá. Por mi parte, lo comparto aquí con todos los demás.

Duración aproximada: 55 minutos.

lunes, 6 de junio de 2011

Video: DHH en la RailsConf 2011

Este post contiene básicamente el video de la sesión de David Heinemeier Hansson (DHH) en la RailsConf 2011 a mediados del mes pasado en Baltimore, Maryland, EEUU.

El video, por supuesto, está en inglés, pero me parece interesante compartirlo porque en la sesión DHH comparte sus ideas acerca de los objetivos en los cambios en Rails 3.1, incluyendo la idea de más carpetas y archivos vacíos (para ayudar en la organización), y los motivos de la cuestionada inclusión de CoffeeScript y SCSS (comentada previamente en otro post).

Específicamente menciona que Rails seguirá siendo una plataforma con opiniones fuertes, donde las configuraciones por omisión serán las que el equipo considera las más relevantes y útiles en el momento, aunque siempre podrán cambiarse (por ejemplo, basta comentar las dos líneas que incluyen saas y coffee-script en el gemfile).

Sobre el final, menciona pjax, una biblioteca que maneja el contenido completo de una página estática como si fuese ajax pero manteniendo las url apropiadas, dejando que el botón BACK del navegador funcione perfectamente. Esa puede ser una de las próximas inclusiones en Rails.

miércoles, 1 de junio de 2011

RubyConf Argentina (+ video)

RubyConf

Finalmente llega la primer RubyConf a la Argentina, y con intenciones de atraer cierta audiencia latinoamericana y algunos presentadores internacionales.

El sitio web ya está habilitado, y permite presentar propuestas, ver los oradores principales y las condiciones de patrocinio para los interesados.

Por supuesto la conferencia tiene una cuenta de Twitter para las novedades, y el código fuente del sitio está alojado y disponible en GitHub.

La sede será Ciudad Cultural Konex (Sarmiento 3131, Buenos Aires) durante el 8 y 9 de noviembre.

Los oradores principales por ahora son:

Quienes estén desesperados por registrarse ya, aunque falta un tiempo, pueden hacerlo via Eventioz.

Como aperitivo les dejo este video de una hora de Scott Chacon haciendo una excelente introducción a Git (en inglés):