martes, julio 29, 2008

Varios sobre D

Se acumulan cosillas sobre D que me he ido guardando, así que, haciendo un dump:

La misma entrada y más comentarios en Varios sobre D en barrapunto

sábado, julio 12, 2008

Bugs antiguos y moralejas

A veces coinciden en el tiempo sucesos de los que se puede sacar una especie de moraleja común y la serie reciente de errores con muchísimos años de historia me parece una de ellas. La grave vulnerabilidad en el protocolo DNS, que ha hecho actualizar a toda internet ha sido el ejemplo más claro, pero no el único y las tres historias son muy instructivas...

El primero, hace unos dos meses detectó un bug de 25 años en los BSD, en seekdir()[1] en el que, en algunos casos seekdir() no daba el resultado correcto. Como comentan en la propia historia, un bug muy difícil de encontrar y muy fácil de corregir.

El segundo es un bug con 33 años de antigüedad en yacc, encontrado por Otto Moerbeek[2], quien curiosamente también ha tenido un papel muy relevante en el descubrimiento del bug anterior.

El último es más peliagudo: problemas de diseño en el protocolo DNS permitían a un atacante hacer DNS cache poisoning de modo más efectivo que anteriores técnicas[3]. El descubridor de la vulnerabilidad, Dan Kaminsky, hace comentarios muy interesantes al respecto (las negritas son mías):
DJB was right. All those years ago, Dan J. Bernstein was right: Source Port Randomization should be standard on every name server in production use.

There is a fantastic quote that guides a lot of the work I do: Luck is the residue of design. Dan Bernstein is a notably lucky programmer, and that's no accident. The professor lives and breathes systems engineering in a way that my hackish code aspires to one day experience. DJB got "lucky" here — he ended up defending himself against an attack he almost certainly never encountered.

Such is the mark of excellent design. Excellent design protects you against things you don't have any information about. And so we are deploying this excellent design to provide no information.


Es muy curioso seguir los enlaces, porque la historia del parche es muy poco común y puede enseñar de la parte técnica y de la parte social del ecosistema internet.

Creo que la moraleja de todos ellos es clara, sobre todo leyendo las historias. Pero por recopilarlas (aún a riesgo de decir obviedades):

[1]Un buen resumen en castellano, con interesantes conclusiones en El valle del viento helado "Un bug de 25 años en los BSD: seekdir()"
[2]Comentado en barrapunto en Corregido un error de hace 33 años en Yacc
[3]Comentado en barrapunto en Un agujero de seguridad en el protocolo DNS causa gran alarma
[4]Me ha llamado la atención el caso de un bug casi trivial en el en interop de .NET desde C++ nativo que lleva la menos seis años sin ser resuelto. No es el único caso ni el más grave ni la única empresa donde sucede eso, por supuesto. Sólo me ha parecido un ejemplo ilustrativo...

La misma entrada y más comentarios en Bugs antiguos y moralejas en barrapunto

jueves, julio 03, 2008

Parámetro "lo digo en serio" en Content-Type para IE8

Pues esa es la propuesta que se puede leer en el blog de desarrollo del Internet Exporer 8: añadir un authoritative=true al Content-Type, o sea, fiarse de cual es el tipo de contenido que está proporcionando el servidor, pero sólo si lo dice en serio...

Por supuesto esta propuesta ha levantado bastantes reacciones. Unos, como Sam Ruby en authoritative=true, lo ven desde el punto de vista pragmático como un mal menor al evitar content-sniffing. Otros, como Daniel Stenberg en This is the type and I mean it se lo toman con humor. Más en las listas de la w3c y en reddit: Microsoft's "I mean it" content-type parameter

La misma entrada y más comentarios en Parámetro "lo digo en serio" en Content-Type para IE8 en barrapunto

jueves, junio 26, 2008

Lenguajes de la A a la Z: Entrevistas

En Computerworld están publicando extensas entrevistas acerca de un montón de lenguajes de la A a la Z. La verdad es que había visto alguna referencia, pero después de la de Stroustrup (y sus repercusiones en Slashdot y reddit) le he prestado más atención y parece que pueden ser bastante curiosas. También en LtU - The A-Z of Programming Languages prometen seguirles la pista, enlazando a su vez a las pasadas:Actualización: La entrevista a Stroustrup también se comenta en la portada de barrapunto

La misma entrada y más comentarios en Lenguajes de la A a la Z: Entrevistas en barrapunto

viernes, junio 20, 2008

Propuesta para introducir C++ en gcc

Volviendo al tono un poco menos noticioso de esta bitácora, me gustaría referenciar la propuesta de Ian Lance Taylor de permitir determinadas características de C++ en el código de gcc, sobre todo aquellas que permiten hacer el código más compacto y mantenible. Nombra explícitamente STL, polimorfismo y punteros inteligentes en contraposición a la recolección de basura que se usa en gcc. Hay que hacer notar que la propuesta debería ser aprobada (no sin antes haber pasado por el adecuado flame C vs C++) aunque Ian propone crear una rama gcc-in-c++ para experimentar.

Me ha parecido una propuesta muy razonable, con una exposición muy clara de lo que se ganaría con el cambio. Es precisamente el (moderado) uso de las características de C++ lo que me ha parecido más reseñable. C++ es un lenguaje grande y no todas son adecuadas a todos los problemas, con lo que hay veces que es sano delimitar como se usa. Esto da lugar no obstante a estándares de codificación con casi obsesivo nivel de detalle, pero de los que se puede aprender si se lee con atención crítica.

Por cierto que para evitar dependencias indeseadas (y que C++ se convieta en el caballo de troya que potencialmente es) se propone un enlazado estático con la libstdc++. No sé que opinará Ulrich Drepper.

Se puede leer más sobre el tema en el propio blog de Ian , en reddit (posteado por un servidor), en LWN y (con poco éxito de crítica y público) en menéame.

La misma entrada y más comentarios en Propuesta para introducir C++ en gcc en barrapunto

miércoles, junio 18, 2008

martes, junio 17, 2008

code_swarm: visualización del desarrollo de proyectos libres

Acabo de ver vía slashdot (y me lo perdí en reddit) un proyecto de visualización del desarrollo de proyectos libres: code_swarm. A partir del control de fuentes genera vídeos en los que se puede seguir la evolución histórica del desarrollo de Python, PostgreSQL, Eclipse o Apache httpd. El autor promete además liberar el código para que cualquiera lo pueda aplicar a otros proyectos. Bonito, hipnótico y hasta revelador...

Actualización: Ya ha liberado el código en codeswarm - Google Code. A disfrutar...

La misma entrada y más comentarios en code_swarm: visualización del desarrollo de proyectos libres en barrapunto

miércoles, junio 04, 2008

Elizabeth Loftus y los recuerdos falsos

Vía El psicoanálisis ¡vaya timo! de El cerebro de Darwin me he encontrado con los estudios de Elizabeth Loftus acerca de un tema tan atractivo como los recuerdos falsos. En particular hay un buen resumen en "Our changeable memories: legal and practical implications". Me quedo con la cita de Eduardo Galeano a modo de resumen (que no he podido encontrarla en castellano, la traduzco de la traducción :\)
La memoria nace cada día, brotando del pasado y contraponiéndose a él.


La misma entrada y más comentarios en Elizabeth Loftus y los recuerdos falsos en barrapunto

jueves, mayo 29, 2008

Varios sobre concurrencia: Lock-free en Java, STM vs locks y consejos

Varios sobre concurrencia (versión n)Pequeña nota sentimental: hoy hace cinco años que escribí mi primera bitácora en barrapunto y hace muy poquito yapw ha sobrepasado las 100 entradas. Casi no me lo creo, como pasa el tiempo...

La misma entrada y más comentarios en Lock-free en Java, STM vs locks y consejos en barrapunto

lunes, mayo 26, 2008

Firefox 3, SQLite, fsync, ext3 y otras abstracciones

Vía LWN leo un buen resumen de uno de los grandes problemas de Firefox 3 en linux: es fácilmente observable como dicho navegador se congela durante bastantes segundos hasta que vuelve a responder. Es debido, al parecer al (ab)uso de las actualizaciones en SQLite, que usa fsync, que a su vez tiene un más que pobre rendimiento en ext3. La buena noticia es que todos ellos están tratando de mejorar.

A la vez que me parece un enlace interesante del que se pueden aprender bastantes cosas y un ejemplo de la tesis que manejaba el otro día en ¿Demasiadas capas de abstracción?: Los sistemas tienden a ser cada vez más complejos, y esto genera algunos problemas, pero la tendencia no tiene marcha atrás... En este caso además se le une la complejidad de la portabilidad. El mismo código usa implementaciones distintas de las mismas abstracciones, con lo que el testeo se complica enormemente y probablemente sólo es viable en un escenario de software libre.

La misma entrada y más comentarios en Firefox 3, SQLite, fsync, ext3 y otras abstracciones en barrapunto