martes, 28 de diciembre de 2010

Kod: un editor de código (abierto) para OS X

Kod

Kod es un editor orientado a escribir código para OS X. Es de código abierto, bajo licencia MIT (modificada para no permitir vender el editor como tal) y alojado en GitHub.

Tiene algunas características muy interesantes, que me llamaron la atención y por lo que estoy empezando a usarlo con bastante buen resultado (listo lo que detallan en el sitio oficial, con mis comentarios):

  • Tiene un comportamiento muy asincrónico, y aprovecha el poder de los procesadores de múltiples núcleos que tenemos hoy día. Esto es algo que hace tiempo espero de más aplicaciones.¿Porqué tengo que esperar a que las cosas se terminen de grabar para poder seguir trabajando? Kod es muy eficiente al estar trabajando con múltiples archivos de diferentes tamaños.
  • El entorno de scripting está basado en el ascendente Node.js, sobre lo que tengo que escribir un próximo post en más detalle.
  • Interfaz de usuario inspirada en Chromium, utilizando tabs que pueden soltarse en ventanas independientes y volverse a unir, pero sobre todo, permitiendo escribir el nombre del archivo a editar directamente en la barra de direcciones, algo que es muy práctico al editar código, en lugar de tener que abrir un cuadro de diálogo.
  • Tiene algunas cosas que no usé, como que permite editar directamente archivos a través de HTTP (aunque no grabarlo, claro), y para cambiar estilos en el editor todo se hace mediante CSS 3.
  • Soporta al parecer 65 lenguajes o dialectos, y al menos tiene buen soporte para Ruby, JScript y Python por lo que vi hasta ahora.

Atención: para los que buscar una IDE, este es sólo un editor. Pero es muy interesante, parece ser activamente mantenido, y puede ser una competencia interesante a los tradicionales TextMate y Vim habituales en el mundo Mac.

Dejo como muestra una captura del editor en mi máquina:

Kod-screen

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.

 

 

 

 

viernes, 24 de diciembre de 2010

Regalo de navidad: Code & Beyond versión móvil

C&B telefoneado

Para quienes leen este blog usualmente desde su celular, acabamos de agregar un estilo mejorado para navegadores con pantallas reducidas, como teléfonos o iPods.

Esperamos que el formato les sea más cómodo para leer.

Si tienen instalada una aplicación de lectura de códigos de barras bi-dimensionales (la mayoría de los teléfonos la tienen actualmente) pueden apuntar su cámara directamente al código debajo para navegar hacia este blog:

Code & Beyond móvil

 

 

 

 

 

¡Felíces fiestas!

jueves, 23 de diciembre de 2010

Resultados de la Reunión Alt.Net en Buenos Aires

Alt.Net Hispano

Hace un par de fines de semana, el sábado 11 de diciembre, se realizó una nueva reunión del movimiento Alt.Net en Buenos Aires, en las remodeladas oficinas de Microsoft de Argentina, que duró todo el día.

Por las características de la reunión, más alguna dificultad con la conectividad, se hizo imposible capturar video, pero afortunadamente nos quedó este excelente resumen que publicó el amigo Pedro Wood, quien se vino para esta reunión desde Bariloche, nada menos. Pueden leer ahí un buen compendio de las sesiones en las que él participó y comentarios generales.

Dejo un par de fotos que tomé en los momentos de descanso del evento:

5285547260_787225a0fc.jpg

5285547018_9c3b7e4528.jpg

El set completo (son solo cuatro fotos) está disponible en Flickr.

martes, 21 de diciembre de 2010

Lenguajes esotéricos

Esoterismo

Para quienes somos aficionados a los lenguajes de programación, todo paradigma alternativo o detalle de implementación novedoso tiene un atractivo especial, ya que sin importar el hecho de que sean prácticos o relevantes como lenguajes, todos dejan alguna lección que puede ser útil en algún momento.

De hecho, hay muchos lenguajes que ni siquiera intentan ser útiles, sino que son ejercicios intelectuales, de la misma forma en que años atrás en Europa el taller de literatura potencial Oullipo producía sus obra alrededor de desafíos como escribir una novela sin la letra e, poemas usando palabras de largo ascendente en cada verso, o utilizando palíndromos.

Siguiendo esa tradición de experimentar con lo absurdo, en el terreno de los lenguajes de programación se han generado muchos que están basados en ideas locas, pero cuya implementación plantea un desafío real y un buen ejercicio.

David Morgan, también conocido como Danger Mouse, tiene una sección entera de su sitio dedicada a este tipo de lenguajes, entre los que encontramos algunos como:

Chef: en el que los programas parecen recetas de cocina

Este ejemplo es un programa que imprime los primeros 100 números de la serie de Fibonacci.

Ingredients.
100 g flour
250 g butter
1 egg

Method.
Sift the flour. Put flour into mixing bowl. Serve with caramel sauce.
Stir for 2 minutes. Remove egg. Rub the flour until sifted.
Stir for 2 minutes. Fold the butter into the mixing bowl.
Pour contents of the mixing bowl into the baking dish.

Recuerden que esto no es sólo una idea, existe un intérprete (escrito en Perl) para este lenguaje.

Piet: en en que los programas parecen arte abstracto

No confundirse con Mondrian (ambos refieren al artista Piet Mondrian), que es un lenguaje de scripting que si existe y se utiliza bastante.

Piet se basa en bloques de colores llamados Codels (pueden pensarse como pixels, pero frecuentemente se amplían a más de un pixel por codel para ver los programas con más claridad).

El lenguaje está basado en stacks y tiene una cantidad de operaciones usuales como push y pop, operaciones como add, substract y multiply, comparaciones, punteros, etc. Pero en lugar de expresarse en forma textual, se expresan como cambios entre un set de 20 colores.

Va aquí un ejemplo con el mismo ejercicio de imprimir los primeros 100 números de la serie de Fibonacci:

Fibonacci escrito en Piet

Esta imagen está magnificada y muestra con fechas el sentido de flujo del programa. Nuevamente, este lenguaje cuenta con varios intérpretes e incluso herramientas de desarrollo, incluyendo alguna IDE.

 

Esta sección del sitio de Morgan es parte de una red de sitios (unidos bajo este antiguo concepto de las primeras épocas de la web) conocido como The Esoteric Programming Languages Ring.