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

viernes, 14 de septiembre de 2018

3 elementos para una Arquitectura más Ágil

Esta semana me pidieron en un cliente si podía compartir algunas definiciones o lineamientos sobre agilidad en Arquitectura de Software, para trabajar en una reunión interna.

Como otras veces, después de pensar la respuesta y escribir un poco, les pedí permiso para compartir las ideas en este blog, y aquí van los tres elementos a los que llegué, a través de algunas preguntas de ellos:

Arquitectura incremental

Igual que con el diseño funcional, desconfiamos del "gran diseño preliminar", y tratamos de empezar con la arquitectura mínima necesaria para la funcionalidad que estamos encarando. Podemos hacer este ejercicio, idealmente, Sprint a Sprint, decidiendo sobre la arquitectura en cada planning.

IMPORTANTE: esto no implica que no iniciemos con algunos elementos mínimos de referencia, que nos son comunes (un lenguaje, un framework, una base de datos, etc). Es común que dentro de una organización tengamos algunos lineamientos (idealmente definidos de manera colaborativa). Lo que nos dejamos abierto es la posibilidad de cambiar algo más adelante, si nos damos cuenta que nos conviene.

Arquitectura Incremental en Scrum

Validación continua

Más allá de una visión general de guía, igual que con la funcionalidad, tratamos de dejar una prueba automatizada que nos ayuda a validar que logramos el efecto que queríamos al implementar cada pieza de arquitectura: por ejemplo, pruebas de performances, de extensibilidad, validaciones de nivel de acoplamiento o complejidad, etc. Esas pruebas se ejecutan de manera continua, al igual que las pruebas unitarias o de aceptación.

Esa validación permanente en el entorno de desarrollo/QA se extiende también a mediciones en el proceso automatizado de deployment, y al monitoreo de la solución en el ambiente productivo (monitoreo de servidor, clientes, dispositivos, plataforma, etc). Todo ese seguimiento es lo que nos permite entender si nuestra arquitectura realmente está soportando lo que necesitamos en este momento, y también comprobar si cualquier cambio tiene el efecto deseado o no. Ese nivel de feedback es lo que nos permite encarar cambios en la arquitectura sin entrar en pánico.

Validación Continua

Demasiado importante para dejárselo a los Arquitectos

Como no diseñamos la arquitectura por completo en el inicio, tampoco se define desde un rol centralizado o mediante especialista en un silo. Aunque haya personas en el equipo con el título de Arquitecto, el tema se discute con todo el equipo y con los involucrados del negocio, y las decisiones se realizan de manera colaborativa, teniendo en cuenta todos los puntos de vista.

Las decisiones tampoco suelen ser finales, sino que se diseñan experimentos, con métricas asociadas y un objetivo a alcanzar, que se validado o no en la implementación.

Nuevamente, este no quita que exista un equipo de Arquitectura Corporativa o algo similar. La diferencia es que esos grupos se ocupan más de entender las restricciones generales necesarias para el negocio, la plataforma común, el ecosistema de diferentes aplicaciones (propias y de terceros), y actúa como un participante frecuente en las reuniones de planificación de los equipos, no para imponer definiciones, sino para tener feedback y colaborar en las definiciones de cada aplicación.

Finalmente, como para otras actividades, interese o tecnologías (testing, diseño, JS, bases de datos, temas de negocios) el intercambio y alineamiento de temas de arquitectura entre diferentes equipos se puede realizar mediante espacios de Comunidades de Práctica.

Arquitectura Colaborativa

 

Continuando la discusión

Obviamente estas ideas están resumidas y tienen mucho más detrás. Si te interesa continuar este tema, algunas de las cosas en las que he trabajado a lo largo de los años son:

 

domingo, 22 de abril de 2018

Literatura Potencial al Aire Libre

Literatura Potencial al Aire LibreDurante la reciente edición 2018 del Agile Open Camp, en Bariloche, Argentina, presenté una charla relámpago (21 slides de 20 segundos cada uno; 7 minutos en total) que titulé “Restricciones para la Creatividad” y en la que contaba sobre el Oulipo, el “Ouvroir de littérature potentielle” que en los años '60 fundaron en Francia escritores de diferentes orígenes, dedicado a explorar las posibilidades de restricciones auto-impuestas, surgidas sobre todo de las matemáticas y sus derivados (como la música o el ajedrez) para desencadenar procesos creativos.

Debajo queda la presentación, aunque son sólo imágenes. Pero más importante que eso, para mi, es el libro que tiene el mismo título que este post, resultado del taller que realizamos más tarde, durante una sesión del Open Space.

Los asistentes escribieron varios Haiku, y luego comenzaron cuatro cuentos, algunos de los cuales fueron finalizados días más tarde. El librito es una compilación de esos trabajos, más una breve introducción que recupera (con notas adicionales) parte de la charla relámpago.

Gracias a Marta Bendomir, Tommy Christie, Marcela Pelz y María Thompson por participar del taller y del libro, y gracias a Manuel Mandrafina Thompson que colaboró en el cierre de uno de los cuentos.

El libro puede descargarse en forma libre y gratuita desde aquí (o desde la imagen de tapa más arriba).

jueves, 3 de agosto de 2017

Cómo escribir tu propio intérprete (o compilador)

Interpreter Book

Suelo escuchar varios podcast mientras me muevo por Buenos Aires u otras ciudades en mi trabajo. Uno de los que sigo desde hace años es el de Scott Hanselman, que es quizá una de las personas que más me impactó dentro de lo que se conoce como la "comunidad Microsoft".

Scott, más allá de seguir trabajando para Microsoft en el grupo de ASP.NET y herramientas de Azure, es un tipo inquieto que mantiene varios podcasts e iniciativas, y sobre todo valoro su constante esfuerzo por lograr una industria más inclusiva, recibiendo a a gente de toda edad, raza, identidad u orientación sexual, religión o ideario.

Pero basta de elogios al amigo Scott. El tema que me atrajo especialmente en éste último podcast fue que entrevistaba a Thorsten Ball, quien auto-publicó el libro "Writing An Interpreter In Go", que trata básicamente de eso: recorre todos los pasos de escritura de un intérprete. En su caso del lenguaje Monkey que él diseñó para el libro mismo, y que es bastante similar a JavaScript o un montón de otros lenguajes de la familia de las llaves {}.

Más allá de que es un tema interesante, me gustó que la manera en que lo hace es utilizando lo más básico de Go, sin más que la librería standard, construyendo desde cero el parser y el lexer, y sin usar ninguna librería particular. Y por supuesto, utilizando TDD.

Es un libro que recorre en mayor detalle el camino constante del Maestro Ángel Java López, que como puede verse en su cuenta de GitHub escribe este tipo de intérpretes o compiladores todo el tiempo.

¿Por qué escribir un intérprete a esta altura? Básicamente porque las capacidades y el entendimiento de sus partes nos ayudan a ser mejores programadores en general, como llegado cierto punto un buen automovilista tiene que aprender de mecánica, o un rocker necesita aprender sobre ingeniería de sonido.

miércoles, 4 de diciembre de 2013

Ficciones y Realidades, aumentadas o virtuales (+ video)

Snow Crash

En 1992, Neil Stephenson publicaba su novela “Snow Crash”. En la historia, parte del movimiento literario de esa época conocido como Cyberpunk, Stephenson imaginaba un entorno virtual al que los usuarios se conectaban y en el que adoptaban un personaje, o “avatar” con características particulares, como un alter ego virtual. Aunque hay algún antecedente del uso de la palabra “avatar” para un concepto similar, esta novela fue la que lo popularizó y trajo hasta nuestros días. No fue su única influencia: el creador del célebre Doom reconoce este libro como influencia directa, y algunas plataformas como Second Life o similares están sumamente basadas en esa obra.

La principal diferencia entre la manera de “entrar” en el multiverso de Snowcrash, al igual que en otras ficciones de esa época, es que la interfaz no era, como en las aplicaciones que usamos, a través de un teclado y un monitor convencional, sino que se imaginaban cascos, guantes y hasta trajes de realidad virtual, que brindaban una experiencia totalmente inmersiva y en primera persona.

 

Pasaron diez años y pico para que en 2003 Cory Doctorow publicara su primera novela, “Down and Out in the Magic Kingdom”, en que imaginaba nuestra sociedad adaptada al uso de dispositivos auxiliares incorporados a nuestro cuerpo, de modo que estuviésemos conectados permanentemente con nuestros amigos o grupos especiales de personas cuando querramos, y que nuestra visión se complementase con datos relevantes sobre las personas, lugares o situaciones que estamos presenciando, nuevamente, en una experiencia totalmente integrada. Cory es un gran defensor de las licencias abiertas y esta novela, como todo lo que hace, puede descargarse gratis de su sitio, sin alguien está interesado (yo la recomiendo especialmente).

Saltando otro poco más de diez años, la realidad aumentada ya es algo a lo que nos estamos acostumbrando, en pequeñas dosis, y tal vez con grandes espacios de mejora, pero ya todos conocemos o usamos aplicaciones que nos permiten que nuestro celular “reconozca” ciertos objetos o imagenes y nos de información adicional, o reconozca el tema que estamos escuchando en la radio y nos muestre la letra. Y obviamente tenemos al menos cerca muchísima información disponible sobre rutas, personas, el clima y demás en nuestros dispositivos. Y es el principio, porque ya están llegando desde relojes más inteligentes a dispositivos “usables” como Google Glass, que nos acercarán a esa experiencia de disponer los datos adicionales sin mirar a otro lado, sino como parte de nuestra visión general.

Y así como la realidad aumentada creció lentamente, la realidad virtual está regresando, después de unos 20 años en suspenso. De la mano de procesadores y sensores más rápidos, dispositivos como “Oculus Rift” están finalmente resolviendo los problemas que detuvieron el avance de esas experiencias virtuales inmersivas. Este producto, que está todavía en etapa de prototipo para desarrolladores de juegos, ya tiene muchisimo soporte de los principales productores de la industria, y está por salir al mercado, cuando haya cantidad de software generado, y cuando se haya pulido aún más para el mercado de consumo. Básicamente es una pantalla muy liviana, como la de una tablet, pero de alta resolución, montada en una especie de antifaz, y que produce dos mitades de la imagen, una para cada ojo, y tiene sensores de posición que hacen que al girar, subir o bajar la cabeza, la imagen virtual acompañe nuestros movimientos con una latencia tan baja que no podemos percibirla. Lo que falta por ahora es que no nos vemos a nosotros mismos, pero ya hay varios experimentos en conjunto con dispositivos como Razer Hydra (ver video debajo), una especie de evolución del controlador de la Wii, que podemos tener en las manos y puede generar parte de nuestra imagen en el mundo real. Y claro, hay otros controladores en marcha del estilo de los guantes virtuales que se imaginaban hace 20 años.

Como mencioné vez pasada hablando de nuevas interfaces, el desafío para nosotros es probar los SDK de estas nuevas herramientas e imaginar nuevos productos o servicios que podemos desarrollar integrándolas.

En resumen, las realidades aumentadas (complemento de nuestro mundo real) y las virtuales (que reemplazan nuestros sentidos con otro mundo) estan para quedarse. Es buen momento para volver a pensar en qué es la realidad, como el Maestro hizo a lo largo de 50 posts en su blog.

Aquí queda el video que muestra Razer Hydra en acción (menos de 3 minutos):

miércoles, 30 de octubre de 2013

Nuevo sitio: Scrum Masters Community (+ video)

 

El amigo Tobias Mayer, pionero en dictar los talleres de Certified Scrum Master en Argentina, y un combatiente de la metodologías ágiles y Scrum en particular (incluso dando lucha desde adentro de la Scrum Alliance en su momento) lanzó recientemente un muy buen recurso para la comunidad de Scrum: un sitio web llamado scrummasters.community.

En el sitio se pueden encontrar libros, sitios y otros recursos recomendados por la comunidad de Scrum Masters en general, incluyendo algunos comentarios.

Es una especie de catálogo comunitario de recomendaciones, sencillo y útil.

Aprovecho el post para recomendar especialmente el último libro de Tobias, The People’s Scrum, que recopila los mejores artículos de Tobias en los últimos años, y no trata de explicar Scrum, sino que reflexiona sobre el espíritu, sobre el paradigma y las condiciones que estas prácticas crean, y a sus veces requieren.

Les dejo un video corto (~7 minutos; en inglés) de Tobias charlando en un evento sobre Scrum más allá de software.

miércoles, 23 de octubre de 2013

[Autobombo] Libro gratuito de "Introducción a los lenguajes de la web"

Atención: en este post hablo sobre un trabajo mío, porque se trata de un trabajo gratuito y espero que útil para algunos de los lectores. Para ser bien explícito en los casos en que mencione cosas que me involucran directamente, decidí usar un tag (en el título mismo del post) [Autobombo]. Para quienes no comprendan el término, es un argentinismo que usamos para usando alguien se hace propaganda a si mismo. Pueden quedarse tranquilo porque no soy tan productivo, así que no creo que ocurra muy a menudo. :)

Lenguajes de la Web

Con mi compañero de ruta Juan Gabardini terminamos recientemente la versión final (al menos por ahora) de este librito que es, como dice el título, una mera introducción a HTTP, HTML y CSS.

El objetivo del libro es acercar a los conceptos más básicos a gente que se está acercando al desarrollo, o que tiene experiencia en otras áreas, como aplicaciones de escritorio o tecnologías anteriores.

El libro cubre temas como Internet (dominios, direcciones IP y puertos), HTTP (peticiones y respuestas; cookies) HTML5 (elementos, texto, enlaces y formularios), CSS, aplicaciones web mínimas (en PHP, Python y Flask, Ruby y Sinatra), y algo sobre URL semánticas.

Como explicamos en el arranque, no nos metemos en JavaScript, que es un tema mucho más grande, ni entramos en detalles muy profundos, pero tratamos de dejar punteros a otros recursos abiertos donde poder profundizar.

Todavía no lo agregamos a la página de Kleer donde pueden encontrar otros libros gratuitos, pero se viene en breve.

Espero que les resulte útil.

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.

miércoles, 5 de septiembre de 2012

PragPub de septiembre: revista gratuita y en varios formatos

PragPub

Comenté sobre PragPub hace un par de años, pero para quienes no estaban por ahí todavía, vuelvo a recomendarla.

Se trata de una revista publicada mensualmente por The Pragmatic Programmers, la editorial de Andy Hunt y Dave Thomas, autores, entre otros, de éste clásico libro que todo programador debería haber leído.

La revista en si tiene unas 60 páginas (en su edición PDF) y cubre temas generales (en inglés) de programación y sobre el perfil profesional de los desarrolladores de software. Se edita mensualmente y en formato HTML (para leer en el navegador), PDF, epub y mobi (estos últimos para lectores electrónicos como Sony Reader y Kindle, respectivamente).

 Los temas de este mes son:

  • Thinking Functionally with Haskell, por Paul Callaghan. Una exploración al sistema de tipos de Haskel y sus consecuencias en la validación de aplicaciones.
  • Tales from the Ops Side, por Michael Nygard. Aquí el author del libro "Release it!" cuenta algunas escenas comunes en un escenario de operaciones.
  • US Visa: My First iPhone App, por Alexander Demin. Cuenta la experiencia de construir la primer aplicación para iOS, incluyendo código.
  • Threads, por Michael Swaine. Es una nota donde el editor de la revista cuenta la historia de Chris Espinosa, miembro del equipo de desarrollo de Apple desde la primer etapa de la compañía.
Y como siempre incluye las seccione Up Front (la editorial), Choice Bits (el ranking de los libros más vendidos de la editorial), Calendar (conferencia, charlas interesantes en varias partes del mundo, y otros eventos) y Shady Illuminations (la columna de opinión de John Shade).
 
En el caso de la revista, que es gratuita, tal vez no llaman tanto la atención la variedad de formatos y el hecho de que los archivos estén libres de toda protección, pero es interesante que lo mismo sucede con los libros de la editorial, que publica muchos títulos de nicho como Deploying Rails, Programming Your Home, The Cucumber Book y otros que los programadores difícilmente consigamos en otro lado, con el agregado de que en general el nivel es muy bueno, tanto o más que en las principales editoriales técnicas.

miércoles, 29 de agosto de 2012

Libros gratuitos sobre Python

Libros de Python

A principios de este mes comenté sobre un sitio en GitHub con libros gratuitos de JavaScript, que en el ínterin creció de 11 a 25 títulos (cubriendo también más HTML5).

La misma gente de Revolunet (una compañía francesa de diseño web) amplió ahora la idea a una lista similar con libros gratuitos de Python.

Hay libros de nivel inicial, intermedio y avanzado, incluyendo varios iniciales para aprender a programar en general, basados en Python, que siempre me pareció una excelente opción de primer lenguaje, sobre todo para niños y adolescentes, porque es simple y directo en el arranque pero no tiene techo.

Los libros intermedios son en general para programadores Python que quieren entrar en detalles del lenguaje o frameworks, y los títulos avanzados son interesantes porque entran en temas complejos, basándose en Python para resolverlos, como Computer Vision, procesamiento de lenguaje natural, sistemas complejos, o probabilidad y estadística.

Casi todos los libros están en inglés, excepto (por ahora) un par en francés. 

También, varios de los libros son proyectos colaborativos y abiertos, algunos incluso publicados y actualizados como blogs, a lo largo de mucho tiempo (como en el caso de Python Module of the Week) con lo que quizá encuentren traducciones disponibles que a mi se me escaparon, o pueden colaborar en ese espacio.

Entre los libros hay dos que me gustan mucho, volviendo al tema de enseñar a chicos:

Snake Wrangling for Kids, justamente orientado a enseñar a programar a chicos, y que usa bastante los gráficos de tortuga provenientes del Logo, otro gran lenguaje. El libro es una guía de la que uno puede salirse, pero hay muchas ideas buenas. El libro está disponible para Python 3 o 2.7, y para Linux, OS X y Windows, con lo que incluso se puede reunir un grupo de jóvenes multi-plataforma (como mis dos hijas y yo).

Making Games with Python and PyGame es una buena continuación porque requiere un mínimo de conocimiento de programación y Python, pero rápidamente se mete en algo que los chicos amamos: programar juegos.

Espero que aprovechen todo este material, aprendan mucho, y sobre todo, enseñen nuestro arte a la próxima generación.

miércoles, 15 de agosto de 2012

Libros gratuitos sobre Arquitectura de Aplicaciones Open Source

Arcquitectura Open Source

La arquitectura de software es un terreno interesantísimo que más allá de que uno pretenda o no ser Arquitecto como perfil profesional, es importante para todo desarrollador, porque tiene que ver con la estructura de lo que construimos y con cómo tomamos las decisiones respecto a ella. Como en el caso del diseño de un producto, no es algo que se pueda evitar, cuando uno no dedica tiempo a la arquitectura, el producto final tendrá muy probablemente una estructura deficiente o endeble, pero no dejará de tenerla.

De todas maneras, este es un terreno que siempre pareció de cierta sofisticación, y que por lo tanto no ha generado mucho material libre y gratuito, salvo últimamente, de la mano de sitios web como InfoQ ó High Scalability, que publican informes detallados o algunos libros breves.

En este caso se trata de un esfuerzo conjunto, coordinado por Amy Brown y Greg Wilson como editores, y una larga lista de colaboradores, que compila, en dos volúmenes, reseñas de la arquitectura de aplicaciones de código abierto, explicadas por expertos en el tema, a veces coautores o parte del equipo del proyecto. En algunos casos se cubren familias o ecosistemas de aplicaciones, en lugar de productos individuales.

Todo el material está disponible de manera gratuita en el sitio web, bajo licencia Creative Commons Attribution 3.0 Unported, pero para quienes prefieran leerlo en Kindle u otro dispositivo electrónico, está disponible una versión paga cuyos derechos se donan íntegramente a Anmesty International.

Los dos tomos están en inglés, y cubren unas 25 aplicaciones populares cada uno.

Algunos ejemplos del Volumen I son: Asterisk (la plataforma de telefonía), Audacity (el editor de audio), Eclipse, el file system distribuido de Hadoop, mecanismos de integración continua, el ecosistema LLVM, Mercurial, Python Packaging, Selenium WebDriver y otros.

Algunos ejemplos del Volumen II son: Arquitectura Web Escalable y Sistemas Distribuidos, Ingeniería de Actualizaciones de Firefox, el compilador Glasgow Haskell, Git, el Dynamic Language Runtime y la familia de lenguajes Iron (IronPython, IronRuby, etc), MediaWiki, Moodle, nginx, PyPy, Twisted, ZeroMQ y otros.

La cantidad de material es impresionante y los temas están muy bien cubiertos, a gran nivel de detalle técnico.

lunes, 6 de agosto de 2012

Libros: aprendiendo JavaScript con recursos gratuitos (+video)

Libros de JavaScript

JavaScript es el lenguaje ubicuo que todos tuvimos que aprender en algún momento, y que en los últimos años mejoró en cuanto a implementaciones, frameworks y técnicas generales de programación, a la vez que se posición fuertemente también del lado del servidor, evolucionando de un lenguaje que la mayoría evitaba a algo que la comunidad aprecia cada vez más.

Sin embargo para muchos todavía queda muchísimo por aprender, y a pesar de que hay una cantidad importante de recursos, suelen estar desparramados por la web. Reconociendo este tema, la gente de Revolunet (una compañía francesa de diseño web) decidió compilar esta lista creciente de libros (algunos PDF, otros en línea) sobre JS, Node, CoffeeScript y otras variantes que están disponibles gratuitamente. Por ahora los títulos están en inglés, pero la lista, que está alojada en GitHub, seguramente siga creciendo y aparezcan traducciones o títulos en otros idiomas.

Actualmente hay disponibles 11 títulos:

Libros Gratuitos de JavaScript 

De postre les dejo un video (en inglés; 25 minutos aprox) de Addy Osmani (una autoridad en JS, autor de dos de los recursos mencionados) hablando sobre cómo estructurar aplicaciones JS pequeñas, medianas y grandes (algo que es una consulta usual para los que se adentran en este terreno).

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, 26 de julio de 2011

Patrones de Diseño en JavaScript, por Addy Osmani

imageAddy Osmani es un reconocido diseñador y desarrollador web, experto en jQuery y colaborador del equipo de documentación de ese proyecto.

Recientemente Addy publicó el primer volumen de su libro en línea “Essential JavaScript Design Patterns For Beginners” (en inglés) que me parece un gran trabajo sobre patrones de diseño, cubriendo la definición conceptual de éstos, sus categorizaciones típicas, y finalmente recorre varios de ellos en JavaScript, no como una simple traslación de los patrones originales del GoF, sino apuntando a aquellos que muestran particularidades de JavaScript, y agregando otros muy específicos de este entorno.

Los patrones recorridos para JavaScript son: Creational, Constructor, Singleton, Module, Revealing Module, Observer,
Prototype (que en JavaScript es central), Command, DRY, Façade, Factory, Mixin y Decorator.

Pero Addy no podía dejar de lado jQuery, por lo que cubre también los siguientes patrones de diseño en jQuery (verán algunos repetidos, porque analiza el patrón en el contexto de la biblioteca, no en sí mismo): Module, Lazy Initialisation, Composite, Wrapper, Façade, Observer, Iterator, Strategy, Proxy, Builder, Prototype, Flyweight.

Como valor agregado de este post, les dejo debajo esta presentación de Addy sobre trucos de rendimiento de jQuery:

martes, 17 de mayo de 2011

Libros: aprendiendo Objective-C y Cocoa

Para los programadores que usan Mac y siempre tuvieron ganas de desarrollar algunas aplicaciones nativas, o aquellos que quieren desarrollar aplicaciones para el iOS de iPhones, iPods y iPads, es fundamental aprender Objective-C (el lenguaje) y Cocoa (el framework).

Incluso si uno opta por usar entornos que nos permiten desarrollar en otros lenguajes, como MonoMac, MonoTouch ó MacRuby, siempre es importante tener una buena base del entorno original de Apple, porque ninguna de estas abstracciones evita que necesitemos un entendimiento general del entorno subyacente, el manejo de recursos, eventos, etc.

Por suerte hay algunas opciones de libros gratuitos para empezar en el tema:

Become an X Coder

BecomeAnXcoder

Es un libro gratuito disponible dentro del sitio Cocolab que incluso puede leerse en español, aunque ésta y otras versiones traducidas están una o dos versiones atrasadas con respecto la versión del sistema operativo de Mac, mientras que la versión en inglés está al día.

Una característica de este libro es que está orientado a gente sin conocimiento previo de programación, por lo que puede resultar demasiado básico, aunque siempre se puede acelerar la lectura e ir a los detalles específicos que nos importan.

Cubre una introducción general a la programación, el uso de las herramientas Xcode de Apple, funciones, compilación, condicionales y bucles, interfaz de usuario, métodos, punteros, strings y arrays, accesores y propiedades, manejo de memoria, y deja muchas fuentes posteriores para seguir aprendiendo.

 

Objective-C Essentials

Objective-C 2.0 Essentials

Este libro sólo está disponible en inglés pero está orientado a programadores con cierta experiencia, y es muchísimo más detallado. La versión gratuita es la que se lee en línea, y puede comprarse en PDF y ePub a un precio económico.

Cubre la historia de Objective-C (que nació como un intento de fusionar la sintaxis de C con el modelo de objetos de Smalltalk, unos pocos años después de la aparición de C++, y antes de su popularización), la instalación de Xcode y el proceso de compilación en Mac OS X, como usar GNUStep y Objective-C en Windows y Linux, los tipos de datos del lenguaje, uso de variables y constantes, operadores y expresiones, comentarios, control de flujo y bucles, orientación a objetos incluyendo métodos, encapsulamiento, accesores, herencia, punteros e indirección, vinculación dinámica, funciones, enumeradores, y manipulación de strings, números, arrays, diccionarios, directorios, archivos, carpetas, y muchísimo más.

Notarán que es muchísimo material.

 

David Chisnall

Objective-C for Java Programmers

También en inglés, pero en este caso se trata de un artículo de David Chisnall en InformIT, en 7 partes (breves) orientado a introducir el lenguaje a desarrolladores Java (también es útil para quienes conocen .NET).

Recorre las diferencias filosóficas entre los lenguajes, objetos y primitivas, archivos y unidades de compilación, modelos de objetos, comportamiento estático, diferencias de sintáxis, etc.

 

miércoles, 4 de mayo de 2011

CoffeeScript: el libro (más un video)

El libro de CoffeeScriptYa hablé antes en este blog sobre CoffeeScript y las ediciones de Pragmatic Programmers, y hoy quería combinar ambas cosas comentando el nuevo libro de Trevor Burnham que ya está disponible en Beta, y comencé a leer ayer.

Por supuesto, el libro está en inglés, y no está terminado, pero me parece otro indicio, junto con la decisión de incluir CoffeeScript por omisión en Rails, del auge que está tomando este dialecto simplificado para JavaScript.

Pero vamos al libro. En el prologo, Jeremy Ashkenas, el creador de CoffeeScript, explica entre otras cosas (la traducción es mía):

..."Afortunadamente para nosotros, el JavaScrit de hoy disfruta de un merecido renacimiento. Gracias al incansable esfuerzo de los implementadores de los navegadores, es actualmente el más rápido de los lenguajes dinámicos populares; está presente en todos lados, desde servidores hasta Photoshop; y es el único lenguaje que se puede usar para programar desde todos los ángulos de la web.

CoffeeScript es un pequeño lenguaje que apunta a brindar fácil acceso a las partes buenas de JavaScript: las funciones de primer clase, los objetos como hash, incluso la poco comprendida cadena de herencia por prototipos. Si hacemos bien nuestro trabajo, ustedes terminarán escribiendo un tercio del código para escribir el mismo JavaScript que hubiesen escrito de otra forma. CoffeeScript pone un alto valor a la legibilidad del código y a eliminar mucho del ruido sintáctico.Al mismo tiempo, hay una correspondencia prácticamente uno-a-uno entre CoffeeScript y JavaScript, lo que significa que no hay degradación de rendimiento -de hecho, muchas biblitoecas JavaScript terminan corriendo más rápido después de ser migradas a CoffeeScript debido a algunas optimizaciones que el compilador puede realizar."

El prólogo termina elogiando al autor del libro por sus colaboración con CoffeeScript desde los primeros días, lo que asegura que el tema está tratado desde un profundo conocedor.

El juego del 5x5

El libro recorre el lenguaje y compilador en detalle, incluyendo instalación y ejecución, integración en otros ambientes e interoperabilidad con bibliotecas populares como jQuery. Y a medida que recorre los diversos capítulos, utiliza como ejemplo la construcción de un juego sencillo para dos jugadores, llamado 5x5, del que puede verse la interfaz a la derecha.

Comparto el índice general para que se den una idea del alcance:

  • Prólogo y Agradecimientos
  • Prefacio (historia, audiencia y organización del libro, proyecto de ejemplo y comunidad)
  • Comenzando (instalación, editores, ejecución y depuración)
  • Funciones, alcance y contexto
  • Colecciones e Iteraciones
  • Módulos y clases
  • Interactividad web con jQuery
  • Aplicaciones del lado del servidor con Node.js
  • Respuestas a los ejercicios
  • Maneras de ejecutar CoffeeScript (consolas web, dentro de una aplicación web, en Rails, via middleware, en Node.js, usando Middleman, en scripts del sistema operativo)
  • Cartillas
  • Bibliografía

 

Para terminar, dejo un video de Ashkenas presentando (en inglés) CoffeScript en la JSConf de hace un año. Es interesante ver la presentación de parte del propio padre de la criatura, pero tengan en cuenta que los doce meses transcurridos han cambiado la situación (para mejor) y ampliado las características del compilador.

 

martes, 5 de abril de 2011

Recursos gratuitos para empezar con Node.js

Libro sobre Node

A través de un tweet de mi amigo Juancho Ladetto encontré este post de ReadWrite Hack comentando una series de recursos sobre Node.js.

Para los que no saben o no recuerdan de que se trata Node, hice una breve introducción en un post anterior, y los demás sabrán que es una de las tecnologías que me parece más prometedora entre las últimas apariciones, y creo que este año va a crecer muchísimo.

Uno de los recursos más interesantes es este libro (en progreso) de Tom Hughes-Croucher que O'Reilly, que puede leerse (en inglés) por ahora libremente en su versión previa (e incluso colaborar en la revisión).

El libro por ahora cubre los conceptos fundamentales, con buenas explicaciones incluyendo simpáticos dibujos como este:

Event Stack

También cubre las interfaces de programación principales como el EventEmitter, la sintáxis de Callbacks, servidores y clientes HTTP, peticiones GET, POST y PUT, el objeto ClientResponse y el uso de URLs, query strings, Streams de lectura, el FileSystem y Buffers.

Está iniciado también el capítulo cubriendo interfaces de ayuda, por ahora solo DNS, y el de documentación general que cubre varias clases, el depurador, marco de pruebas unitarias, sub-procesos, consola de comandos REPL, y mucho más (todo esto en formato de referencia).

Otro recurso interesante y en progreso es la guía de Felix (también en inglés), que cubre varias partes similares pero a distinta profundidad y con otro enfoque, y tiene una sección dedicada a "convencer al jefe" que apunta a resaltar las características principales de Node para poder explicarlo a otros.

lunes, 14 de marzo de 2011

Probar Haskell en tu navegador

Real World HaskellSiguiendo el camino que inicio _why con TryRuby.org, Chris Done creo TryHaskell.org, una página donde encontramos una consola interactiva para probar Haskell, el lenguaje puramente funcional por excelencia.

Esta consola es del tipo REPL (read, evaluate, print loop) y permite ingresar comandos y expresiones. Como en Haskell la declaración de funciones es una expresión (utilizando let) se pueden crear y ejecutar funciones dentro del entorno.

Por supuesto, como en el caso de TryRuby, se puede seguir un tutorial que va guiando al asistente secuencialmente a través de las expresiones más sencillas, manipulación de strings, manejo de listas, declaración de símbolos, etc.

La consola interpreta y muestra los resultados parciales e informa si hay situaciones de error, como puede verse debajo.

Consola de Haskell

 

Adicionalmente a los ejemplos que la misma página va proponiendo, hay también un link al libro "Real World Haskell", de Bryan O'Sullivan, Don Stewart, y John Goerzen, editado por O'Reilly Media y disponible gratuitamente en línea (en inglés), donde se pueden encontrar muchísimos más ejemplos y por supuesto un nivel de profundidad mucho mayor en la presentación del lenguaje.

Para aprovechar a fondo la combinación entre el libro y TryHaskell basta con arrancar por el capítulo 1, donde se describen muchos ejemplos iniciales utilizando ghci, que es la consola interactiva del entorno Haskell, lo que es el equivalente directo de la consola que encontramos en la página.

Para todos aquellos interesados en la programación funcional pero que no tuvieron la oportunidad (o el coraje) de acercarse a Haskell, puede ser una buena manera de entender un poco más de que se trata sin la necesidad de tener que hacer una gran inversión inicial de tiempo.

 

martes, 14 de diciembre de 2010

13 cosas que todo Programador debería saber

Portada del libro

A principio de este año O'Reilly publicó este libro que compila 97 cosas que todos en esta profesión deberíamos saber, expresadas por una serie de profesionales de diferentes orígenes, algunos muy famosos, otros no tanto.

Lo que no me había enterado es que el libro completo surgió de un proyecto colaborativo y abierto, y que todo el contenido está disponible en línea en forma gratuita, además de muchos otros consejos que quedaron fuera del libro, pero pueden ser leído y evaluados.

En la Wiki pública del proyecto puede accederse todo este contenido, proponer colaboraciones y muchos más.

Aunque el contenido principal está en inglés, creo que es un material interesante para revisar.

Una de las preguntas más frecuentes alrededor del proyecto es ¿por qué 97? La respuesta es que apuntaban a alrededor de 100 consejos, pero no querían caer en los obvios 99 o 101, por lo que decidieron tomar el número primo más cercano: 97. Toda una muestra del espíritu nerd detrás del proyecto.

Siguiendo ese tono, traduzco los primeros 13 puntos, con sus respectivos links a la wiki (cuyos textos siguen en inglés, lamentablemente; si alguien conoce alguna iniciativa para traducir el contenido, por favor, avísenme).

  1. Actúa con Prudencia por Seb Rose

  2. Aplica Principios de Programación Funcional por Edward Garson

  3. Pregúntate: "¿que haría el usuario?" (tu no eres el usuario) por Giles Colborne

  4. Automatiza tus estándares de código por Filip van Laenen

  5. La belleza está en la simplicidad por Jørn Ølmheim

  6. Antes de refactorizar por Rajith Attapattu

  7. Cuidado al compartir por Udi Dahan

  8. La regla de los Niños Exploradores por Uncle Bob

  9. Verifica tu código antes de buscar otro a quien culpar por Allan Kelly

  10. Elige tus herramientas con cautela por Giovanni Asproni

  11. Programa en el lenguaje del dominio por Dan North

  12. Codificar es Diseñar por Ryan Brush

  13. El formato del código importa por Steve Freeman

lunes, 1 de noviembre de 2010

Masterminds of Programming ganó el premio JOLT

El libro de entrevistas "Masterminds of Programming" ganó el premio JOLTMasterminds of Programming (portada) que entrega la histórica revista de programación Dr. Dobbs.

El libro contiene entrevistas a los diseñadores de lenguajes de programación más reconocidos, incluyendo a:

  • Adin D. Falkoff: APL
  • Thomas E. Kurtz: BASIC
  • Charles H. Moore: FORTH
  • Robin Milner: ML
  • Donald D. Chamberlin: SQL
  • Alfred Aho, Peter Weinberger, and Brian Kernighan: AWK
  • Charles Geschke and John Warnock: PostScript
  • Bjarne Stroustrup: C++
  • Bertrand Meyer: Eiffel
  • Brad Cox and Tom Love: Objective-C
  • Larry Wall: Perl
  • Simon Peyton Jones, Paul Hudak, Philip Wadler, and John Hughes: Haskell
  • Guido van Rossum: Python
  • Luiz Henrique de Figueiredo and Roberto Ierusalimschy: Lua
  • James Gosling: Java
  • Grady Booch, Ivar Jacobson, and James Rumbaugh: UML
  • Anders Hejlsberg: Delphi inventor and lead developer of C#

 

miércoles, 27 de octubre de 2010

Pragmatic Guide to GIT ya está disponible en edición impresa

Pragmatic Guide to GIT cover

Esta en una guía de Travis Swicegood sobre GIT, el famoso sistema de control de versiones distribuido creado por Linus Torvalds originalmente para el equipo del kernel de Linux.

Vengo leyendo las versiones preliminares y definitivamente esta guía es lo mejor que se puede tener a mano si uno está usando o planea usar GIT, que es un sistema muy flexible pero tiene sus secretos.

Como todos los libros de Pragmatic Programmers, se puede comprar en papel (con los consecuentes gastos de envío), o en formato electrónico (PDF, mobi o epub, que soportan casi todos los dispositivos de lectura) sin protecciones de ningún tipo.

¡Recomendado!