Archive | Uncategorized RSS feed for this section

StackOverflow

Si aún no lo conocen, les recomiendo visitar StackOverflow. Es un sitio donde los usuarios se ayudan unos a otros a resolver problemas de programacion, preguntando, respondiendo y votando por las mejores respuestas.

StackOverflow fomenta la participación con un sistema de puntos (karma). La cosa funciona así: cada usuario ganan puntos (karma) al responder acertadamente a una pregunta. Su puntaje le permite distinguirse de los demás y construirse una reputación. Como resultado, los usuarios compiten por responder rápida y acertadamente las preguntas de los demás. El hecho de que StackOverflow fuera hecho por dos de los blogueros mas conocidos en programación le dio el espaldarazo necesario para arrancar con un número inicial de usuarios suficiente. Hoy en día hay muchisima gente participando en toda clase de temas diferentes del mundo de la programación.

Aunque he escuchado que la interfaz web es excelente, hay algunas cosas que me molestan. Por ejemplo, el hecho de que los “interesting tags” no siempre aparezcan en la misma posición, dependiende de la página. Pero en general es un sitio simple y bien hecho.

Best of Twitter – volumen 1

Este, su blog favorito, no deja de innovar. Ahora traemos una nueva sección: lo mejor de twitter de la semana. Un selecto ramillete de twits escogidos manualmente por su servidor. Empecemos:

Actualidad nacional e internacional:
.bbpBox29017023310 {background:url(http://a3.twimg.com/profile_background_images/5487477/Pieter_Bruegel_d._Ä._075.jpg) #BADFCD;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

Vea pues; se inventaron un método infalible para compilar nombres de gente maluca. http://www.ipetitions.com/petition/ekz6491/ (via @Tefa_)less than a minute ago via web

.bbpBox28736801043 {background:url(http://a3.twimg.com/profile_background_images/121441053/4c37320392f76.jpg) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

Tanto que decían que la legalización de las drogas era impensable y al final resulta que todo se reduce a un referendo en California.less than a minute ago via web

.bbpBox28783196753 {background:url(http://s.twimg.com/a/1287420575/images/themes/theme1/bg.png) #a1989a;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

Apareció el pulpo Paul en Ocaña, vestido de guerrillero.less than a minute ago via web

NSFW:
.bbpBox28826435511 {background:url(http://a1.twimg.com/profile_background_images/145047778/bsg-wallpaper.jpg) #000000;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

Bueno, solamente me falta perderme en las drogas y en el sexo cochino. Digo cochino porque es conmigo.less than a minute ago via twitgether

Coup de gueule:
.bbpBox28650478640 {background:url(http://a1.twimg.com/profile_background_images/1438632/bg_twitter3.jpg) #353535;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

eres una imbécil, alejandra azcárateless than a minute ago via Nambu

Epistemológico:
.bbpBox28726095971 {background:url(http://a3.twimg.com/profile_background_images/121441053/4c37320392f76.jpg) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

El “rigor científico” está sobrevalorado.less than a minute ago via web

Meta:
.bbpBox28789838979 {background:url(http://a1.twimg.com/profile_background_images/73503512/giger_twt.jpg) #000000;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}

Pulpo paul, El agarron de Petro con el Polo y Zombie Cougars. Es un martes como cualquier otro en Twitterland.less than a minute ago via web

C-sharp

He estado jugando un poco con C#, el lenguaje que Microsoft desarrolló para competir directamente con java. Digo jugando porque por ahora no he hecho mas que leer por encima un manual del lenguaje y escribir un par de extensiones de un programa que usan donde trabajo, en este lenguaje. Aca van algunas impresiones tempranas que me llevo.

Primero, me he encontrado con que el lenguaje cuenta con muchas de las cosas que siempre me hicieron falta en java. Para nombrar solo dos:  una manera de obtener multiples valores al invocar un metodo sin tener que crear una estructura de datos unicamente para ese fin (con output parameters) y el poder manipular funciones como objetos (con los delegates, aunque se supone que en java van a agregar closures tarde o temprano). Tambien hay algunas cosas simpaticas como poder darle significado a un operador cuando se aplica a instancias de cierta clase (operator overloading, bastante criticado, existe en C++), incluido por ejemplo el operador “[index]” (indexers). En fin, son cosas que tal vez hacen el lenguaje un poco mas complicado pero que a cambio hacen los programas mucho mas breves. Lo cual es en ultimas la mision fundamental de un lenguaje de programacion. En todo caso me falta programar mucho en C# para poder opinar de manera realmente informada.

El lado negativo es la sensacion con respecto a la comunidad alrededor de C# que me queda al navegar los sitios de documentacion, foros, etc. Se siente bastante la mono-cultura Microsoft. En este esquema hay un solo proveedor de tecnologia (Microsoft) y el resto son consumidores (los desarrolladores). Esto se siente en el hecho de que casi todo es proveido por microsoft, la documentacion, el IDE que todo el mundo usa, las diferentes librerias, etc. En ese sentido la comunidad alrededor de java se siente bastante mas diversa, o al menos me da esa impresion.

Crítica de los IDEs

Durante los últimos dos años he usado eclipse constantemente en mi trabajo. Aca van un par de reflexiones sobre esta herramienta de desarrollo y en general sobre todas las herramientas de ese estilo (conocidas como IDEs, por las siglas en inglés de Ambiente de Desarrollo Integrado).

Poco ligero: Eclipse no es una herramienta ligera. Lanzarla, aun en un computador reciente, toma un tiempo considerable. Mas vale tener un equipo con bastante memoria.

Facilidad de uso: Los entusiastas de las interfaces de usuario gráficas defienden las IDEs por su supuesta facilidad de uso. A mi en cambio me parece que eclipse es todo menos facil de usar.

La programación es un proceso relativamente complejo que involucra diversas actividades (edición, compilación, debugging,…). Cada una de estas actividades involucra diferentes pequeñas acciones y una gran cantidad de parametros. En suma, se trata de una enorme cantidad de elementos que el programador debe conocer. En eclipse, todos estos elementos inundan la pantalla al tiempo, logrando más confundir que simplificar la tarea global.

Refactoring: Por otro lado, las herramientas para hacer refactoring de eclipse me parecen muy utiles. Eclipse “entiende” el código que se esta editando y permite automatizar cosas como convertir un pedazo de código al interior de un método en un método separado, o actualizar todas las referencias a una clase a la que se le cambió el nombre.

Prototipos

La programación me interesa mas como un medio de exploración de nuevas ideas que como la disciplina de crear programas con cualidades especificas (buen diseño, robustez, eficiencia, etc). La construcción de prototipos es una práctica muy ligada a la exploración creativa que consiste en crear “falsos” programas con el fin de obtener información sobre programas “reales” que se quieren construir.

En este reporte se discuten algunos conceptos claves de la práctica de la creación de prototipos y se proponen algunas ideas para la creación de un ambiente de creación de prototipos.

iPod: un review

Como aca la coherencia nos importa poco, me compré un iPod (alfabravoteam puede dejar de leer). Eso sí, me compré el mas pequeño (8 gigas). Aca van unos comentarios sobre el aparato.

Primero que todo, hay que reconocer que la interfaz de usuario está muy bien hecha. La prueba es que en pocos minutos uno aprendé todos los gestos necesarios para usarlo sin necesidad de leer ningún manual. Las aplicaciones de base son una delicia de usar. La duración de la bateria es aceptable. La navegación de la web con Safarí es excelente, a pesar del reducido tamaño de la pantalla y de la ausencia de teclado físico.

A pesar de todo, el aparato tiene sus fallas. De vez en cuando, una que otra aplicación “muere” sin mayor explicación, dejandolo a uno con el dedo sobre la pantalla, preguntandose que hace el menu principal ahi. El sistema operativo del iPod no puede garantizar que una aplicacion no falle, claro, pero creo que visualmente podrían tratar esas fallas de manera un poco mas elegante.

Otra cosa de la que me di cuenta luego de jugar con el iPod por un rato es que lo realmente chevere comienza cuando uno está conectado a internet todo el tiempo (lo cual solo se consigue con el iPhone).  Por ejemplo, luego de mirar la aplicacion de mapas (que usa el GPS) es obvio lo util que es tenerla disponible en cualquier momento, no solo en lugares que cuenten con una conexión wi-fi.

Ahora ando con ganas de escribir una aplicación para el iPod. Pero para eso se necesita un macintosh.

“Coders at Work”

Acabo de terminar “Coders at Work” de Peter Seibel. Esperaba bastante de este libro y desafortunadamente quedé un poco decepcionado. El libro transcribe entrevistas a varios programadores famosos, por ejemplo Ken Thompson (uno de los padres de unix), Guy Steele (uno de los padres de Scheme, Common Lisp y otros lenguajes), Jamie Zawinski (netscape), Knuth (tex, the art of computing programming) y otras estrellas. Todas las entrevistas se desarrollan alrededor de un puñado recurrente de preguntas que las conducen alrededor de la carrera, la manera de trabajar y en general la visión de la programación del entrevistado.

La parte que me gustó más del libro fueron las historias de cada programador: como aprendieron a programar, que caminos tomó su carrera, que proyectos forjaron sus estilos particulares de programación, etc. El libro reune programadores muy jovenes (el creador de livejournal, que tiene, creo, veinti-tantos años y empezo directamente en internet) hasta aquellos que empezaron programando con tarjetas perforadas. La variedad de historias es interesante.

Mi primer problema con el libro es que la mayoria de los temas de fondo se tocan de manera un tanto superficial y poco organizada. Esto era tal vez inevitable ya que los entrevistados no se han preparado para discutir un tema en particular. Seibel es un programador que sabe de lo que habla, así que me parece que peca de timidez al confrontar los puntos de vista de los entrevistados. Ha debido ser más agresivo, en el buen sentido; eso le hubiera dado mas sabor a las conversaciones.

El segundo problema es que siendo el formato de las entrevistas casi identico, el libro se hace un poco monótono a medida que se va avanzando. Una excepción se da por ejemplo en el caso de Fran Allen, la única mujer entrevistada, en el cual una parte de la entrevista trata el asunto del bajo número de mujeres en el campo de la programación y de los problemas profesionales particulares que tienen las mujeres programadoras. Eso me pareció interesante. Hay una entrevista en la que el personaje es (no recuerdo el nombre) uno de los creadores de ARPANET, quién hoy en día vive criando cabras en un lugar donde ni siquiera hay proveedores de internet, hubiera sido muy interesante que hubieran hablado de ese cambio de modo de vida.

Tal vez lo que más me decepcion es que realmente hay pocas sorpresas en las cosas que dicen los entrevistados. Hay varias diferencias entre sus puntos de vista preo creo que casí todas esas diferencias hacen parte de diferencias generales bastante conocidas y de las que ya se ha hablado y escrito mucho. Desafortunadamente las conversaciones del libro no me parece que aporten mucho a esas discusiones. Creo que una confrontación entre los diferentes puntos de vista hubiera dado un resultado mucho más rico.

Mas sobre el iPad

En otra ocasión escribí que no creo que el futuro de la computación este en las plataformas como el iPhone/iPad y la AppStore. Como si no fuera ya una plataforma terriblemente cerrada, hace poco se conoció otra restricción más: está prohibido escribir programas para el iPad en lenguajes diferentes a C++ y Objective C.

Según entiendo, Apple busca atacar a Adobe, quien van a incluir un programa que traduce aplicaciones Flash en aplicaciones iPhone/iPad en su proxima suite de desarrollo.

Ha habido toda clase de blogs en contra de esta restricción y unos cuantos blogs en su defensa. Estos últimos argumentan casi todos que esta medida tiene mucho sentido desde el punto de vista de Apple pero no explican por que es buena para los desarrolladores de aplicaciones. La idea detrás es que lo que es bueno para Apple y el iPhone/iPad es bueno para los desarrolladores.

Otros defensores de Apple pretenden que solo a hackers hermitaños y otras criaturas de poca importancia les interesa escribir aplicaciones en otros lenguajes, y que a los desarrolladores de verdad lo que les interesa es ganar plata y que una plataforma cerrada es la mejor manera de hacerlo. Ya veremos.

Aun cuando el poder desmedido de google me produce desconfianza, espero que Android (que segun entiendo es libre) se imponga en la guerra de los mobiles.

Leyendo código fuente

Sería chevere si uno pudiera leer un programa de computador tal como se lee un libro: en linea recta del principio al fin. Esto casi nunca es posible porque los programas no suelen estar organizados linealmente. Lo que hay, frecuentemente, es un manojo de archivos regados en directorios. Casi siempre me cuesta trabajo encontrar que pedazos del programa hay que leer, y en que orden, para entender globalmente su funcionamiento.

Las diferentes técnicas que he usado son:

  • Si hay suerte, el autor del programa ha escrito un archivo donde explica la estructura del programa y la responsabilidad de cada modulo. Eso da una idea de qué pedazos hay que leer, según lo que uno quiera entender del sistema. Si la documentación es suficientemente buena, el problema está mas o menos resuelto.
  • Mirar el sistema de “build” del programa (el Makefile, el archivo ant, .asd etc) e intentar deducir algo de la estructura del mismo.
  • Mirar los directorios en los que estan repartidos los archivos para deducir algo de la estructura.
  • Leer “de arriba a abajo”. Comenzar leyendo la función que arranca el programa (el “main”) e intentar identificar las funciones de alto nivel. Luego intentar leer “hacia abajo”, haciendo diagramas que muestran como se encadenan las funciones.
  • Si es un programa “orientado a objetos”, a medida que se lee el programa de arriba a abajo, se va haciendo el diagrama de clases.

Lamentablemente, salvo por los programas cuya estructura está bien documentada, la lectura de un programa escrito por otra persona tiene mucho de una actividad a ciegas.

Sospecho, por su nombre, que la técnica de literate programming de Knuth produce programas que se pueden leer como un libro. Nunca he intentado practicarla ni he leido programas escritos así. Que alguién me confirme.

P.S. Muchas veces el problema es que uno esta haciendo dos cosas al tiempo: intentando entender un programa e intentando aprender el idioma en el que esta escrito, es decir la manera particular en la que el autor del programa usa el lenguaje de programación subyacente. (Esto es mucho menos problematico cuando uno es mucho mas familiar con el lenguaje de programación y conoce estilos mas comunes con los que se usa.)

Buen diseño

Dieter Rams es una de las personas que mas han influido en la práctica del diseño industrial. Muchos de los productos que Rams ha diseñado durante su trabajo en la empresa Braun son admirados mundialmente. Rams ha resumido su pensamiento sobre el diseño en los siguientes principios:

  • Un buen diseño es innovador
  • Un buen diseño hace un producto util
  • Un buen diseño es estético
  • Un buen diseño no obstruye
  • Un buen diseño ayuda a entender un producto
  • Un buen diseño es honesto
  • Un buen diseño no envejece
  • Un buen diseño es coherente hasta en el mas mínimo detalle
  • Un buen diseño tiene en cuenta el medio ambiente
  • Un buen diseño es tan poco diseño como sea posible

Powered by WordPress. Designed by Woo Themes