El equipo de MinGW ha publicado los binarios de GCC 4.4.0 para Windows. De entre las novedades destacan un mejor tratamiento de excepciones, una versión de libstdc++ en forma de librería compartida, y soporte para TLS (thread-local storage), además de todas las novedades de la versión 4.4.0. Hay que recordar que la anterior versión soportada oficialmente era GCC 3.4.5. Más en reddit.
El manejo de las excepciones ha mejorado drásticamente debido a que se ha usado una implementación basada en DWARF, dejando de lado el viejo modelo SJLJ, que ya no estará disponible. Además con esta versión las excepciones ya pueden atravesar las fronteras de las DLL sin problemas.
La misma noticia y más comentarios en MinGW publica GCC 4.4.0 en barrapunto
jueves, junio 25, 2009
martes, mayo 26, 2009
memcpy y la concurrencia
Si el otro día comentaban en barrapunto que en MS marcaban como peligroso el uso de memcpy hoy podemos encontrar otra razón para usarlo con precaución. En memcpy() concurrency curiosities David Dice habla de un comportamiento antiintuitivo de dicha función que sale a la luz en entornos fuertemente concurrentes: sobreescribir la misma secuencia constante en memoria puede tener valores no válidos temporalmente durante su llamada, leídos por otros threads con resultado catastrófico si no se tiene cuidado. Otro caso más en el que las abstracciones que usamos evolucionan a su manera, quizás con explicación pero con resultados que contradicen la intuición y exigen, a veces, conocer que se cuece allá abajo. (No mucho) más en reddit
La misma entrada y más comentarios en memcpy y la concurrencia en barrapunto
La misma entrada y más comentarios en memcpy y la concurrencia en barrapunto
Etiquetas:
abstracción,
abstracción no perfecta,
C,
capas,
concurrencia,
memcpy,
memoria,
programación,
programadores
martes, mayo 05, 2009
Avances en las implementaciones de C++0x
Por lo que he leído hace un tiempo y ahora puedo comentar aquí, tanto gcc como VC++ se están poniendo las pilas en la implementación de C++0x.
Y ya que estamos en el tema dos enlaces de propina: Designing Multithreaded Programs in C++0x de Anthony Williams y GCC C++0x Features Exploration en C++ Soup! y por supuesto la imprescindible wikipedia que tiene un estupendo punto de entrada: C++0x
La misma entrada y más comentarios en Avances en las implementaciones de C++0x en barrapunto
- Vía Drizzt, Qt 4.5.1 y gcc 4.4 leo que entre las más notables novedades de gcc4.4 se incluyen muchas características del C++0x, entre las cuales están declaraciones con auto y la inicialización de objetos con listas. Bien :) Se puede saber más en la página de status de la implementación de c++0x en gcc 4.4 donde se puede ver que la concurrencia no es una de las características más adelantadas, empezando por el modelo de memoria. Tiempo al tiempo...
- En VC++ también van a buen ritmo, lo cual es bueno para el estándar, no como pasó con el VC++6 de infausto recuerdo y larga duración :). En el blog oficial de VisualC hablan de decltype (C++0x Features in VC10, Part 3) repasando esa característica de C++0x que por cierto ya está implementada también en gcc. Además apuntan a las dos entradas anteriores, que también resultan instructivas Lambdas, auto, and static_assert: C++0x Features in VC10, Part 1 y Rvalue References: C++0x Features in VC10, Part 2
Y ya que estamos en el tema dos enlaces de propina: Designing Multithreaded Programs in C++0x de Anthony Williams y GCC C++0x Features Exploration en C++ Soup! y por supuesto la imprescindible wikipedia que tiene un estupendo punto de entrada: C++0x
La misma entrada y más comentarios en Avances en las implementaciones de C++0x en barrapunto
lunes, abril 20, 2009
Bitácoras de Programación: selección personal
Llego tarde a la discusión generada con la entrada en la bitácora de leonidas en barrapunto que rvr pasó a portada acerca de blogs y feeds en general relacionados con la programación. Salen por supuesto muchos de los agregadores y planetas que consumo, como reddit, hacker news (uhmm, éste no sale), dzone o planeta código. Pero después de leer todas las respuestas me ha entrado la "necesidad" de hacer mi propia selección personal basada únicamente en gustos. Son bloggers que creo que son un poco distintos y, en su mayor parte combinan el bloguerío con un alto nivel técnico que dejan ver el sus posts. Allá van:
En inglés:
Ahora no se me ocurre ninguno más, pero pueden ser las prisas...
Actualización: He publicado este texto más o menos en un comentario por aquello de completar la información en su sitio. También lo pongo aquí y lo replicaré en mi bitácora en barrapunto, que a su vez se copiará en planeta código, por aquello de que lo que se replica queda y de que hay URLs que desaparecen...
- Mbpfernand0's Blog, el nuevo blog técnico de "nuestro" fernand0. El tema fundamental es la programación y la seguridad, aunque creo que no hace ningún asco a temas relacionados. Por cierto, que promete su propia selección de blogs sobre programación. Habrá que estar atento.
- El valle del Viento Helado de Drizzt, el Drizzt de barrapunto también. Sistemas operativos, compiladores, administración y seguridad. Muy interesante.
- .NET o no .NET, esa es la cuestión. Puedes no compartir sus preferencias tecnológicas, pero para mi es uno de los que mejor escribe y destila conocimiento y experiencia por todos los bits.
En inglés:
- intertwingly de Sam Ruby. La web y sus estándares. Para mí, imprescindible.
- jeffr_tech's Journal. Detalles internos del desarrollo de FreeBSD. No actualiza mucho pero merece la pena estar suscrito.
- daniel.haxx.se de Daniel Stenberg. Del autor de curl y Rockbox entre otros, el blog de un desarrollador prolífico.
- Coding Relic de Denton Gentry. Normalmente sobre Software embebido, pero toca otros palos.
- Ulrich Drepper. El blog del mantenedor de la glib. Poco prolífico, pero para no perderse ni una sola entrada.
- Nynaeve: Adventures in Windows debugging and reverse engineering. No se me ocurriría un mejor título nunca
- Y por fin el imprescindible Sutter’s Mill: Herb Sutter on software, hardware, and concurrency
Ahora no se me ocurre ninguno más, pero pueden ser las prisas...
Actualización: He publicado este texto más o menos en un comentario por aquello de completar la información en su sitio. También lo pongo aquí y lo replicaré en mi bitácora en barrapunto, que a su vez se copiará en planeta código, por aquello de que lo que se replica queda y de que hay URLs que desaparecen...
Etiquetas:
bitácoras,
blog,
bloggers,
blogstar,
programación,
programadores
martes, marzo 17, 2009
Erlang 5.7/OTP R13A: soporte para Unicode, mejoras en multicore y SSL
Acaba de salir la nueva versión del conjunto Erlang/OTP, en concreto la versión Erlang 5.7/OTP R13A. La nueva versión de un lenguaje y sus librerías no tiene por qué ser gran noticia, pero en este caso las novedades son tan notables que creo que merece una mención. Entre ellas se encuentran importantes mejoras de rendimiento en entornos multicore y SMP, que es especialmente importante teniendo en cuenta que una de las grandes bazas del lenguaje es su tratamiento de la concurrencia. Además destacan también el soporte para Unicode, posibilidad de usar WxWidgets a través del WxErlang (de momento en beta) y reescritura del soporte para SSL. Muchas de estas características eran necesarias para la introducción de este lenguaje más allá del entorno de las telecomunicaciones que históricamente ha sido su nicho natural. Más comentarios en reddit y Hacker News
La misma entrada y más comentarios en Erlang 5.7/OTP R13A: soporte para Unicode, mejoras en multicore y SSL en barrapunto
La misma entrada y más comentarios en Erlang 5.7/OTP R13A: soporte para Unicode, mejoras en multicore y SSL en barrapunto
miércoles, marzo 11, 2009
Aprendiendo de los errores (II)
Dan J. Berstein reconoció una vulnerabilidad en djbdns y la recompensó con mil dólares y por supuesto no se han hecho esperar reflexiones acerca de la seguridad informática, su (im)posibilidad y su relación con lo disponible del código.
Entonces leo con interés, vía el nuevo subarrapunto de fernand0, un comentario en hispasec que no por evidente debe dejar de repetirse: no existe software sin fallos de seguridad, pero los que menos tienen son aquellos que han sido diseñados y programados desde su inicio con la seguridad y la simplicidad como guía.
Y ello descarta a casi todo el software y probablemente más al comercial, que tiene más presiones para añadir más y más cosas. Recordemos, que como decía Alan J. Perlis A la larga cualquier programa se vuelve rococó. Después escombros. Lo de siempre, funcionalidad contra robustez y simplicidad :)
De todos modos el caso de djbdns es también interesante por el tipo de fallo encontrado. En Hacker News comentaban que el problema era en la implementación de la compresión que usa en el protocolo DNS para sus paquetes, para eliminar redundancias. Y precisamente Bernstein había hablado negativamente del método de compresión (descrito, claro, en el RFC 1035, 4.1.4, página 30) Extractando de la crítica de Bernstein:
Creo que la moraleja es clara, como se dice a veces exagerando el mejor código es el que no existe sobre todo desde el punto de vista de la reducción de bugs y aún más si se trata de seguridad.
(Esto se llama Aprendiendo de los errores (II) porque ya escribí en su día Bugs antiguos y moralejas , que iba sobre lo mismo, también salía DJB y el DNS, en aquel caso con el bug/error de diseño que explotó Kaminsky)
La misma entrada y más comentarios en Aprendiendo de los errores (II) en barrapunto
Entonces leo con interés, vía el nuevo subarrapunto de fernand0, un comentario en hispasec que no por evidente debe dejar de repetirse: no existe software sin fallos de seguridad, pero los que menos tienen son aquellos que han sido diseñados y programados desde su inicio con la seguridad y la simplicidad como guía.
Y ello descarta a casi todo el software y probablemente más al comercial, que tiene más presiones para añadir más y más cosas. Recordemos, que como decía Alan J. Perlis A la larga cualquier programa se vuelve rococó. Después escombros. Lo de siempre, funcionalidad contra robustez y simplicidad :)
De todos modos el caso de djbdns es también interesante por el tipo de fallo encontrado. En Hacker News comentaban que el problema era en la implementación de la compresión que usa en el protocolo DNS para sus paquetes, para eliminar redundancias. Y precisamente Bernstein había hablado negativamente del método de compresión (descrito, claro, en el RFC 1035, 4.1.4, página 30) Extractando de la crítica de Bernstein:
Muy interesante todo el texto original, incluidas las elipsis ;) anque bastante específicas del caso DNS. Lo que no me ha quedado claro es la razón de no usar LZ77, si fue un caso de Síndrome NIH, de hackerismo o tenía algo que ver con las patentes sobre estos tipos de compresión que llevaban haciéndose desde 1984 como la del LZ78. Pero vamos como regla general parece mucho mejor usar un algoritmo conocido que inventar uno nuevo, a no ser que trabajes en eso, en innovar...
Un problema con la compresión DNS es la cantidad de código necesario para analizarla. Localizar de modo fiable los nombres lleva un trabajo que habría sido evitable para una caché DNS. La compresión LZ77 habría sido mucho más fácil de implementar.
Otro problema con la compresión DNS es la cantidad de código necesario para generarlo correctamente. [...]
Otro problema con la compresión DNS es que no es particularmente efectiva. LZ77 habría funcionado mejor en esos tipos de datos y funcionaría mejor con los tipos de registros que se popularizarían en el futuro [...](Y aquí habla de incompatibilidades de algunas versiones de BIND con el RFC)
Creo que la moraleja es clara, como se dice a veces exagerando el mejor código es el que no existe sobre todo desde el punto de vista de la reducción de bugs y aún más si se trata de seguridad.
(Esto se llama Aprendiendo de los errores (II) porque ya escribí en su día Bugs antiguos y moralejas , que iba sobre lo mismo, también salía DJB y el DNS, en aquel caso con el bug/error de diseño que explotó Kaminsky)
La misma entrada y más comentarios en Aprendiendo de los errores (II) en barrapunto
jueves, febrero 26, 2009
Lo que Paul Graham ha aprendido con Hacker News
Hacker news es un sitio de envío y comentario de noticias muy al modo de reddit (o digg o menéame), pero con temática muy definida (temática técnica, hacker en el sentido MIT ), con editores estrictos y con políticas severas de ontopic. Pues Paul Graham, su creador ha escrito What I've Learned from Hacker News, o sea, lo que ha aprendido con el sitio. Se puede estar de acuerdo o en desacuerdo en algunas cosas, pero es sin duda interesante. Extracto, lo que me ha llamado la atención:
La misma entrada y más comentarios en Lo que Paul Graham ha aprendido con Hacker News en barrapunto
Recuerda, la motivación original pata Hacker News fue testear un lenguaje nuevo, uno centrado en experimentar con el diseño de lenguajes, no en el rendimiento. Cada vez que el sitio se vuelve lento, me refuerzo a mi mismo recordando la famosa cita de McIlroy y Bentley:La clave del rendimiento es la elegancia, no un batallón de casos especiales.
Y busco los cuellos de botella que puedo eliminar con menos código. Así he sido capaz de mantener un rendimiento mediocre a pesar de que el crecimiento se ha multiplicado por catorce.
Probablemente lo más importante que he aprendido acerca de la "disolución" es que se mide más por comportamiento que por usuarios. Es el mal comportamiento lo que hay que mantener alejado más que a las malas personas. El comportamiento de los usuarios es sorprendentemente maleable. Si se espera de la gente que se comporte bien tiende a hacerlo. Y viceversa.
Lo más peligroso de la portada son las que es demasiado fácil votar positivo. Si alguien prueba un nuevo teorema, le lleva tiempo al lector decidir si vota positivo o no.Un cómic divertido cuesta menos. Una crítica con un slogan como título cuesta cero, porque la gente lo vota sin ni siquiera visitar el enlace.
La forma más peligrosa de de comentario estúpido no es el argumento largo pero equivocado sino el chiste tonto. Los argumentos largos pero equivocados son bastante raros. Hay una gran correlación entre la calidad y la longitud del comentario.
[...]Visitar un foro online sólo cuesta un clic y se parece mucho superficialmente a trabajar. Puedes estar gastando tu tiempo, pero no estás parado. Alguien esta equivocado en Internet, y tú estás arreglando el problema.
Digg es conocido por su falta de trasparencia. La raíz del problema no son los tipos que llevan Digg sean especialmente furtivos, sino que usan un algoritmo equivocado para generar la portada. En lugar de subir conforme van teniendo más votos, como en Reddit, las historias empiezan arriba y las nuevas que van llegando las van empujando hacia abajo.
La razón de la diferencia es que Digg deriva de Slashdot mientras que Reddit de delicious/popular. Digg es Slashdot con votos en lugar de editores y Reddit es delicious/popular con votos en lugar de agregar a favoritos (Aún se pueden ver los fósiles de sus orígenes en sus diseños gráficos.)
Otra cosa que he aprendido de este experimento es que si vas a distinguir a las personas, hazlo bien. Este es uno de esos problemas en los que no funciona al prototipado rápido.Yo particularmente estoy de acuerdo en casi todo. Sólo puntualizaría que hay honrosas excepciones en la correlación entre longitud y calidad. Un enlace relevante, una cita, a veces es breve pero muy relevante en la discusión. De todos modos por eso habla de correlación :)
De hecho este es el argumento intelectualmente honrado para no discriminar a varios tipos de personas. La razón no es que todo el mundo es igual, sino que es malo hacerlo de modo incorrecto y es difícil hacerlo bien.
La misma entrada y más comentarios en Lo que Paul Graham ha aprendido con Hacker News en barrapunto
Etiquetas:
digg,
menéame,
noticias,
Paul Graham,
Paul Graham Facts,
promoción,
promoción social,
reddit
martes, febrero 17, 2009
¿Varios pájaros de un tiro?
Vía intertwingly, el blog de Sam Ruby, me encuentro con una cita extraída de una de las listas del W3C que traduzco sin más:
Sí, una tendencia común, más acusada curiosamente en los desarrolladores que se intentan preocupar por la calidad de su trabajo. Para no caer inercialmente en ella habría que evaluar lo económico del desarrollo con lo limitado de las soluciones, algo que demasiadas veces no se hace.
Me ha recordado además a un "cartel motivador" sobre el principio de responsabilidad única que vi hace poco en reddit (Aquí se pueden ver todos los carteles, por si a alguien le son de utilidad :)
Ah, ya que estoy aquí, recomiendo la lectura del blog de Sam y de las listas relativas al HTML5 para ver flames de altura :)
Actualización egórica: A través de una detección automática de referencias Sam se ha enterado de mi enlace y le ha gustado mi referencia al "cartel motivador", que le da más argumentos en el flame. Y me ha enlazado en un comentario. Nunca lo hubiera pensado :)
La misma entrada y más comentarios en ¿Varios pájaros de un tiro? en barrapunto
Un error muy común que los ingenieros de software cometen al diseñar una arquitectura es fijarse en cinco problemas, ver lo que tienen en común e intentar resolver los cinco a la vez. El resultado es casi siempre una solución por debajo de lo estándar para todos ellos.
Sí, una tendencia común, más acusada curiosamente en los desarrolladores que se intentan preocupar por la calidad de su trabajo. Para no caer inercialmente en ella habría que evaluar lo económico del desarrollo con lo limitado de las soluciones, algo que demasiadas veces no se hace.
Me ha recordado además a un "cartel motivador" sobre el principio de responsabilidad única que vi hace poco en reddit (Aquí se pueden ver todos los carteles, por si a alguien le son de utilidad :)
Ah, ya que estoy aquí, recomiendo la lectura del blog de Sam y de las listas relativas al HTML5 para ver flames de altura :)
Actualización egórica: A través de una detección automática de referencias Sam se ha enterado de mi enlace y le ha gustado mi referencia al "cartel motivador", que le da más argumentos en el flame. Y me ha enlazado en un comentario. Nunca lo hubiera pensado :)
La misma entrada y más comentarios en ¿Varios pájaros de un tiro? en barrapunto
Etiquetas:
diseño,
HTML5,
principio de responsábilidad única,
principios,
programación,
programadores,
Sam Ruby,
W3C
jueves, febrero 05, 2009
Epigramas sobre programación
Siguiendo un enlace en technovelty he llegado a un artículo de Alan J. Perlis en el que a través de ciento treinta epigramas trató, en 1982, de capturar algunos de los aspectos más curiosos, desconcertantes y antiintuitivos de la computación en general y la programación en particular. Han pasado más de veintiséis años, pero mucha de su naturaleza creo que sigue intacta. Algunos creo haberlos leído en otra parte y supongo que al que lea esto le pueden sonar, pero me gustan, así que aquí van. Traduzco los que me han parecido mejores:
La misma entrada y más comentarios en Epigramas sobre programación en barrapunto
El lector atento verá que si se juntan la 8 y la 93 no existen lenguajes de alto nivel. Pero si se mezcla con la 125 ya no está tan claro. Bueno, para pensar un rato. Pero no demasiado, que luego hay que codificar :)
Epigramas:
7. Es más fácil escribir un programa incorrecto que entender uno correcto.
8. Un lenguaje de programación es de bajo nivel cuando sus programas requieren atención sobre lo irrelevante.
9. Es mejor tener 100 funciones operando sobre una estructura de datos que 10 funciones sobre 10 estructuras de datos.
14. A la larga cualquier programa se vuelve rococó. Después escombros.
15. Todo debería desarrollarse de arriba a abajo, excepto la primera vez.
17. Si alguien parece que está asintiendo cuando le explicas tu programa, despiértale.
19. Si un lenguaje no cambia el modo en el que ves la programación es que no merece la pena.
21. La optimización dificulta la evolución.
31. La simplicidad no precede a la complejidad, la sigue.
40. Hay dos modos de escribir programas sin errores. Sólo la tercera funciona.
57. Es más fácil cambiar la especificación para que se ajuste al programa que al contrario.
58. Los locos ignoran la complejidad. Los pragmáticos la sufren. Algunos pueden evitarla. Los genios la eliminan.
63. En computación, los invariantes son efímeros.
65. No te equivoques: los ordenadores procesan números, no símbolos. Medimos nuestro conocimiento (y control) de una actividad en la medida en la que podemos arimetizar.
75. Debido a su vitalidad la informática está a la busca desesperada de nuevos clichés: la banalidad calma nuestros nervios.
93. Cuando alguien diga "Quiero un lenguaje de programación en el que sólo tenga que decir lo que deseo hacer", regálale una piruleta.
95. No tengas buenas ideas si no eres capaz de responsabilizarte de ellas.
104. La prueba del valor de un sistema es su existencia.
115. Mucha gente encuentra el concepto de programar obvio, pero hacerlo les resulta imposible.
MetaEpigramas:
124. Los epigramas son macros, porque son ejecutados en tiempo de lectura.
125. Los epigramas cristalizan incongruencias.
127. Los epigramas desdeñan los detalles y lo hacen con intención: son una documentación de alto nivel excelente.
La misma entrada y más comentarios en Epigramas sobre programación en barrapunto
Etiquetas:
Epigramas,
frases,
programación,
programadores
miércoles, febrero 04, 2009
5 Secrets To Ninja Writing
5 Secrets To Ninja Writing. (Vía reddit)
Es mucho más recomendable pinchar en el enlace anterior si conoces el blog de Jeff Atwood, Coding Horror.
Está muy logrado, sobre todo la parodia del abuso de la autorreferencia, un vicio muy de blogstar, muy feo :)
La misma entrada y más comentarios en 5 Secrets To Ninja Writing en barrapunto
Es mucho más recomendable pinchar en el enlace anterior si conoces el blog de Jeff Atwood, Coding Horror.
Está muy logrado, sobre todo la parodia del abuso de la autorreferencia, un vicio muy de blogstar, muy feo :)
La misma entrada y más comentarios en 5 Secrets To Ninja Writing en barrapunto
Etiquetas:
autorreferencia,
bloggers,
blogstar,
blogueros,
humor,
parodia,
programación,
programadores,
¿humor?,
¿programación?,
¿programadores?
Suscribirse a:
Entradas (Atom)
