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

jueves, 24 de febrero de 2011

Festejando los 20 años de Python con la versión 3.2

Pyton

La mejor imagen de la celebración es el tweet de hace unos días del creador de Python, Guido van Rossum:

Guido Tweet

En nuestra industria 20 años parecen dos o tres generaciones de lenguajes, y Python sigue demostrando su relevancia y popularidad.

Mientras que la versión 2.7 será probablemente la última importante de la línea 2.x, la rama 3.x empieza a tomar más impulso.

Siguiendo la PEP 3003, que declaró una moratoria para los cambios en el lenguaje, no hay cambios sintácticos en esta versión tampoco, y las mejoras se concentran en librerías y portabilidad desde 2.x.

Algunas de las principales novedades son:

  • mejoras en el módulo unittest (varias provenientes del amigo Michael Foord)
  • una nueva librería para programación concurrente
  • un GIL mejorado que reduce la contención (uno de los temas más problemáticos de Python en su historia)
  • manejo extendido de mails
  • mejor soporte para SSL incluyendo contextos y comparación de certificados
  • un módulo para acceder a información de configuración
  • mejoras al depurador pdb

Pueden leer (en inglés) el detalle completo de la versión, o la lista detallada de las novedades.

 

jueves, 3 de febrero de 2011

Programando en Windows Azure con el Maestro Angel "Java" López

@ajlopez

En la última reunión VAN (Virtual Alt.Net) de Alt.Net Hispano, el Maestro presentó una profunda sesión sobre programación en la plataforma de cloud computing de Microsoft. Para quienes quieran saber más sobre este grupo, pueden leer este post previo.

En esta sesión, como siempre, registrada en video (disponible más abajo), el Maestro @ajlopez recorre los conceptos básicos de Windows Azure, el SDK correspondiente para poder programar aplicaciones para esa plataforma, las opciones de computación (roles web y roles de trabajo), y las alternativas de almacenamiento (tablas, blobs y colas).

Pero lo más jugoso es ver en acción la manera de programar, sobre todo a través de los ejemplos e ideas del Maestro, que sabe mantener el interés con buen nivel de detalles y muy buen humor.

Tras las sesión, hubo en la lista de Alt.Net hispano un mensaje de Eugenio Pace, Sr. Program Manager en Microsoft patterns & practices, que desde Redmond mandó felicitaciones por la sesión y aprovechó para puntualizar algunos detalles que Angel dejó planteados, para beneficio de los asistentes.

Antes de dejarles el video, aviso para todos los que estén interesados en profundizar en el tema y estén alrededor de Buenos Aires, que Angel va a dar un seminario gratuito de dos días sobre Azure, el 15 y 17 de febrero, en el Grupo de Usuarios Microsoft de Argentina.

Que lo disfruten:

Unable to display content. Adobe Flash is required.

viernes, 28 de enero de 2011

Zapatero a tus zapatos; con Ruby

Shoes

Shoes es un pequeño entorno multi-plataforma para escribir aplicaciones gráficas en Ruby.

El objetivo de Shoes no es generar aplicaciones de muy alta complejidad, sino más bien ser una plataforma para desarrollar utilidades o fundamentalmente, aprender y practicar. Sin embargo, a veces es sorprendente el nivel de cosas que se pueden llegar a lograr.

Shoes está basado en Ruby y puede utilizarse en Windows, Mac OS X o Linux, y el proyecto fue iniciado originalmente por _why, una celebridad del mundo Ruby que desapareció de la web en agosto de 2009, sin que se sepa más de él, cerrando todas sus cuentas, pero dejó además de Shoes, una serie de productos notables como la clásica "Why's (poignant) Guide to Ruby", realmente un libro completo sobre Ruby pero completamente ilustrado y muy divertido, licenciado bajo Creative Commons (libro completo en pdf comprimido como zip).

Pero volvamos a Shoes. Así describía _why algunas de las cosas que se pueden hacer con esta herramienta, en la guía original "Nobody Knows Shoes":

Nobody Knows Shoes

Y veamos algunos ejemplos en la práctica, con un poco de código y capturas de pantalla, empezando con algo similar al canónico "Hola, Mundo":

Shoes.app :width => 300, :height => 200 do
2   button("Click me!") { alert("Good job.") }
3 end

Da por resultado lo siguiente, en Windows, Linux y OS X, respectivamente:

GoodJob WinGoodJob Linux
GoodJob OS X

Y un ejemplo un poco más complicado, pero donde pueden ver lo sencillo y práctico de este entorno:

#
# Shoes Clock by Thomas Bell
# posted to the Shoes mailing list on 04 Dec 2007
#
Shoes.app :height => 260, :width => 250 do
  @radius, @centerx, @centery = 90, 126, 140
  animate(8) do
    @time = Time.now
    clear do
      draw_background
      stack do
        background black
        para @time.strftime("%a"),
          span(@time.strftime(" %b %d, %Y "), :stroke => "#ccc"),
          strong(@time.strftime("%I:%M"), :stroke => white),
          @time.strftime(".%S"), :align => "center", :stroke => "#666",
            :margin => 4
      end
      clock_hand @time.sec + (@time.usec * 0.000001),2,30,red
      clock_hand @time.min + (@time.sec / 60.0),5
      clock_hand @time.hour + (@time.min / 60.0),8,6
    end
  end
  def draw_background
    background rgb(230, 240, 200)

    fill white
    stroke black
    strokewidth 4
    oval @centerx - 102, @centery - 102, 204, 204

    fill black
    nostroke
    oval @centerx - 5, @centery - 5, 10, 10

    stroke black
    strokewidth 1
    line(@centerx, @centery - 102, @centerx, @centery - 95)
    line(@centerx - 102, @centery, @centerx - 95, @centery)
    line(@centerx + 95, @centery, @centerx + 102, @centery)
    line(@centerx, @centery + 95, @centerx, @centery + 102)
  end
  def clock_hand(time, sw, unit=30, color=black)
    radius_local = unit == 30 ? @radius : @radius - 15
    _x = radius_local * Math.sin( time * Math::PI / unit )
    _y = radius_local * Math.cos( time * Math::PI / unit )
    stroke color
    strokewidth sw
    line(@centerx, @centery, @centerx + _x, @centery - _y)
  end
end

Todo esto da por resultado este coqueto reloj analógico, que obviamente, funciona:

Shoes Clock

Espero haber generado interés suficiente. La mejor manera de familiarizarse con Shoes (y probablemente con Ruby, para quien no lo hizo) es descargarlo y empezar a divertirse.

lunes, 27 de diciembre de 2010

La campaña Anti-IF

 

I have joined Anti-IF Campaign

Francesco Cirillo, de Italia, conocido por muchos como el creador de la Técnica Pomodoro para manejar el tiempo personal, inició tiempo atrás una campaña más específicamente orientada a los programadores:

El objetivo de esta campaña iniciada en 2007 es captar la atención en la comunidad de desarrollo sobre el abuso de técnicas procedurales en detrimento de las capacidades de orientación a objetos que los lenguajes que en general utilizamos tienen. El apuntar específicamente en contra del IF (y por extensión su derivado extremista, SWITCH/CASE) implica hacer foco en el valor del polimorfismo en lugar del abuso de condiciones que pueden expresarse en forma más clara y mantenible de otra manera.

El ejemplo canónico que presenta el sitio de la campaña es:


// Bond class
double calculateValue() {
   if(_type == BTP) { 
       return calculateBTPValue();
      } else if(_type == BOT) { 
       return calculateBOTValue();    
      } else {
       return calculateEUBValue();
      }
   }

 

¿Cuántas veces vemos código como éste? Peor aún, es probable que nosotros mismos seamos los culpables, tiempo atrás, o no tanto...

Entre otros problema, este código viola el principio Abierto/Cerrado (Open/Close) popularizado por el tío Bob Martin, ya que cada vez que un nuevo tipo de bono aparezca tendremos que "abrir" nuevamente esta clase para ampliar el tipo de cálculo. La solución es obvia, aunque no la vemos aplicada tan frecuentemente: utilizar polimorfismo basándonos herencia (aunque pronto puede que la herencia no se tan conveniente y cambiemos a composición). Veamos la respuesta propuesta en el sitio:


// Bond class
double calculateValue() {
_bondProfile.calculate();
}
// AbstractBondProfile class
abstract double calculate()

// BTPBondProfile class >> AbstractBondProfile
double calculate() {
...
}
// BOTBondProfile class >> AbstractBondProfile
double calculate() {
...
}
// EUBondProfile class >> AbstractBondProfile
double calculate() {
...
}

 

A partir de crear una clase base con un método abstracto, respetamos el principio Abierto/Cerrado porque podemos agregar más tipos de bono simplemente agregando nuevas subclases, sin tener que tocar (necesariamente) la base.

Es interesante ver la lista de gente que apoya la campaña, entre los que se encuentran nombres conocidos como David Laribee (conocido miembro de la comunidad Alt.NET), Kent Beck (el "padre" de Extreme Programming y JNunit), Dave Nicolette (otro reconocido agilista), y muchos otros.

 

 

 

 

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, 6 de diciembre de 2010

Videos: Crockford habla sobre JavaScript

JavaScript: The Good Parts

Javascript sigue creciendo en relevancia. Hace bastante tiempo, hablaba sobre este tema en otro blog, aunque todavía este lenguaje no se había afianzado tanto del lado del servidor, cosa que está sucediendo ahora gracias a Node.js.

Así que siempre vale la pena conocer más sobre Javascript, incluyendo detalles acerca de su historia. Y quien mejor para esto que Douglas Crockford, actual Javascript Architect de Yahoo!, autor del excelente libro "Javascript: The good parts", y las herramientas indispensables JSLint (un verificador de prácticas) y JSMin (un minificador de código).

A principios de este año y a lo largo de varia semanas, Crockford dio una serie de seis charlas sobre Javascript que quedaron registradas en video (en inglés). El temario completo es:

  • Volume One: The Early Years
  • Chapter 2: And Then There Was JavaScript
  • Act III: Function the Ultimate
  • Episode IV: The Metamorphosis of Ajax
  • Part 5: The End of All Things
  • Scene 6: Loopage

Reproduzco aquí la primera de las charlas, que además de reveladora es muy divertida.

La serie completa está disponible en un sitio completo dedicado a las charlas, que incluye versiones de los videos para descarga en diferentes resoluciones, o la posibilidad de verlos online, y las transcripciones completas de las charlas para quienes les cuesta más escuchar el inglés que leerlo.

Finalmente, para quienes prefieren material estrictamente en castellano, les dejo enlaces a algunos de los trabajos de Corckford traducidos por distintas personas de la comunidad:

 

lunes, 29 de noviembre de 2010

Keynote de RubyConf 2010 de Matz (el creador de Ruby)

Yukihiro 'Matz' Matsumoto

Encontré publicadas las keynotes de la última Ruby Conference ocurrida hace unos días en New Orleans.

Quienes quieran escuchar el divertido acento de Matz hablando en inglés, pueden ver el video, que lamentablemente no está disponible para embeber en este post.

Durante la presentación habló entre otras cosas sobre las novedades planificadas para Ruby 2.0 y algunos proyectos como Rite, la implementación que está diseñando para correr embebida en dispositivos pequeños como relojes, teléfonos o televisores inteligentes.

Para quienes quieran simplemente revisar el material de la presentación, si ubiqué los slides que incluyen todo el contenido, incluyendo algunas bromas, y si pude embeber aquí abajo:

 

 

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#

 

Simposio sobre el Futuro de la Ingeniería de Software (en Zurich)

Es una pena que no nos quede muy cerca, pero este simposio promete ser interesante.

Según el sitio, el foco será en definir los logros de la ingeniería de software en las décadas pasadas y exponer visiones para el futuro.

Lo más impresionante es la lista de los oradores, incluyendo algunas de las figuras más legendarias de este campo, como:

Como colofón del evento, el tercer día estará dedicado a sesiones celebrando el cumpleaños número 25 de Eiffel, el lenguaje de programación que dio a luz características como Diseño por Contrato, Acceso Uniforme, el principio Abierto-Cerrado, una implementación limpia y segura herencia múltiple y muchísimas más cosas que la mayor parte de lso lenguajes modernos están empezando a adoptar.

Por supuesto, una de las sesiones estará a cargo del mismísimo Bertrand Meyer.

 

viernes, 29 de octubre de 2010

Adiós a Watts Humphery

Watts Humphrey

Watts Humphrey, una figura polémica pero innegablemente transformadora en el campo del desarrollo de software, falleció ayer, 29 de octubre, a los 83 años.

Entre otras cosas, fue fundador del Programa de Procesos de Software del Insitituto de Ingeniería de Software (SEI) de  la Universidad Carnegie Mellon.

Su trabajo sobre procesos y métricas fue fundamental en el desarrollo de CMMi, y más tarde desarrolló procesos más granulares desde una óptica más personal, como TSP (Team Software Process) y PSP (Personal Software Process), orientados a tomar métricas exhaustivas en las que basarse para la mejora continua y el estudio de la mecánica de trabajo grupal e individual.

Humphrey fue un espíritu tan inquieto e innovador que siempre fue discutido y admirado a la vez incluso desde paradigmas aparentemente lejanos a él como las metodologías ágiles.