libclang
by Leandro Lucarella on 2010- 12- 24 16:45 (updated on 2010- 12- 24 16:45)- with 0 comment(s)
The 2010 LLVM Developers' Meeting was almost 2 months ago, and this time Apple employees videos are available.
I saw the libclang talk video and it was really interesting, it made me want to play with clang. I wonder if there are Python bindings to it, is so much easier to try things out using Python ;)
Project Gutenberg considers adopting RST as master format
by Leandro Lucarella on 2010- 12- 17 00:04 (updated on 2010- 12- 17 00:04)- with 0 comment(s)
Marcello Perathoner, from Project Gutenberg, has just announced that they are considering using ReStructuredText as master format. In his own words:
Project Gutenberg (PG) is a volunteer effort to digitize and make available to everybody books whose copyright has expired. We OCR the books and proofread them and make them available in a variety of formats.
PG has been evaluating RST as a master format to generate HTML, EPUB, Kindle, PDF and plain text formats.
In that course I have written some patches to RST. I now want to discuss them and maybe improve my ways. If you see fit, my patches could be added to the RST core.
It's nice to see this two lovely projects playing together :)
Engineer
by Leandro Lucarella on 2010- 12- 08 21:33 (updated on 2010- 12- 08 21:33)- with 0 comment(s)
Finally, I defended my thesis last Monday and now I'm officially (well, not really, the diploma takes about a year to be emitted) an Ingeniero en Informática (something like a Informatics Engineer). I hope I can get some free time now to polish the rough edges of the collector (fix the weakrefs for example) so it can be finally merged into Tango.
Día D
by Leandro Lucarella on 2010- 11- 30 22:31 (updated on 2010- 11- 30 22:31)- with 3 comment(s)
Finalmente, luego de más de una década de carrera (no voy a decir estudio porque de estudio fue bastante menos :), me recibo. Defiendo la tesis el lunes 6 a las 19:30 horas en el aula 402 de FIUBA y dejo el planito solo porque a alguna gente le resultó gracioso (por lo que me siento muy insultado).
Por si algún extra-terrestre está interesado en el tema, les dejo el abstract:
El manejo de memoria es un problema recurrente en los lenguajes de programación; dada su complejidad es muy propenso a errores y las consecuencias de dichos errores pueden ser muy graves. La recolección de basura es el área de investigación que trata las técnicas de manejo automático de memoria. D es un lenguaje de programación compilado, con tipado estático y multi-paradigma que combina el poder de lenguajes de programación de bajo nivel, como C, con la facilidad de los de alto nivel, como Python o Java. D provee recolección de basura pero ha sido frecuentemente criticada por sus varias falencias. Dadas las particularidades del lenguaje, plantea un desafío casi único en cuanto al diseño de un recolector.
Este trabajo hace un recorrido por el estado del arte en recolección de basura teniendo en cuenta los requerimientos de D; analiza la implementación del recolector actual y propone mejoras con el objetivo principal de minimizar los tiempos de pausa. Finalmente se construye un banco de pruebas para verificar los resultados, que muestran una disminución de hasta 200 veces en el tiempo de pausa del recolector y de hasta 3 veces en el tiempo total de ejecución.
Hot Festival 2010
by Leandro Lucarella on 2010- 11- 28 05:48 (updated on 2010- 11- 28 20:51)- with 0 comment(s)
Bueno, ya estoy un poco recuperado de la maratón recitalística, así que voy a tratar de resumir un poco mi experiencia, antes de que lo olvide todo.
Vamos por orden cronológico.
Llegué un poco después de las 16:50, hora en que comenzaba el show de Brian Storming en el escenario "No sé para que lo pongo si el sonido está como el orto y no se escucha nada por queda completamente tapado por el sonido de los escenarios más grandes". Bueno, los organizadores lo llaman simplemente "CARPA EMERGENTE", supongo que es por razones de marketing.
Lo muchachos (que para mí son altamente recomendables) hicieron lo que pudieron (como los demás que tuvieron la desgracia de sufrir ese escenario, realmente es una falta de respeto invitar a una banda en esas condiciones, pero eso ni pongas ese escenario...
De fondo sonaba Cobra Starship que realmente me parecieron (musicalmente) lamentables, banda popera MAL, pero así onda 'N Sync, pero de actitud buena onda, el tipo hablaba muy bien castellano y arengaba mucho (creo que hubiera ido mejor para el día anterior en el que tocaban todas las bandas maracas fiesteras). Pasé por el escenario a ver que onda (y porque al lado estaba la carpa de la cruz roja y tuve que manguear una curita porque tenía una ampolla en el pié) pero aguanté pocos minutos y como no había nada tentador me volví al escenario "No sé para que lo ...", digo, a la "CARPA EMERGENTE" a ver que había.
Lo que había era Wapaq, un trio raro de música "electrónica" con batería, guitarra y un muchacho con una consolita o algo de eso. Le ponían onda, y a pesar de no ser el tipo de música que más disfruto, estaba bien. Bah, bien mientras tuvieron sonido, la mitad del recital se quedaron sin la consola y guitarra. El pobre batero la piloteo solo, dándole duro. Nadie les dio una mano con nada (a simple vista al menos) y el guitarrista terminó arreglando los problemas, pero se había acabado el tiempo. Por lo que entendí, la banda que venía atrás, Los Coholins, se coparon y les dieron unos minutos de ellos para que se puedan despedir al menos con una canción con toda la instrumentación. Bien por los Wapaq que la tuvieron que remar e hicieron la última canción poniéndole mucha onda.
Los Coholins parecían prometedores, mucho disfraz bizarro, pero resultaron, a juzgar por los 15 segundos que me quedé a escucharlos, unos Auténticos Decadentes. Perdonen muchachos por el injusto prejuicio en 15 segundos pero empezaba Massacre, que no es una banda que me fascine pero que nunca había visto y me daba la impresión de que podría ser entretenida de ver en vivo. No me equivoqué. El gordo Walas es un personaje importantísimo. Se la pasaba tratando al público como una minita que se quería levantar en un boliche (decía "Hola, preciosa!", por ejemplo) y metiendo bocados delirante entre canción y canción. También tenían un muñeco tipo bebote de juguete bastante creepy y una especie de bastón-cruz con una cabeza de otro muñeco bizarro en la punta. En fin, particulares los muchachos, pero buen show.
Luego seguí con mi calendario oficial y me fui a ver a Benjamin Biolay. Tipo raro, parecía como una persona muy tímida tratando de hacerse la desinhibida; eso combinado con un tipo cool, pero no en el sentido de usar anteojos negros y estar a la moda, si no de todo lo contrario, de estar en la suya y no importarle lo que opinen los demás. La verdad que escuché poco de él, lo conocí por un video con Chiara Mastroianni que me resultó agradable en exceso (tanto el video como la canción). Fue suficiente como para escuchar un par de discos y me resultaron buenos pero nunca le presté demasiada atención. El show fue incrementando en energía e intensidad empezó con temas más bien sencillos y alegrones como el del video y terminó con temas más densos e intensos, como À l'origin (en una versión mucho más intensa que la del disco) que finalizó muy pulenta con el benjamín gritando enfurecidamente À l'origin!.
Siguiente parada: Stereophonics, que empezaron con palabras en perfecto castellano argento pronunciadas por el baterista, que me desayuné ahí mismo que es argentino. Los vi de bastante más lejos de lo que me hubiera gustado y estuvieron en una postura mucho más rock clásico de lo que esperaba. Yo la verdad que el disco que más escuché fue Just Enough Education to Perform que es más tranqui y elaborado. De ese disco tocaron Mr. Writer y el hitazo Have a Nice Day y fueron probablemente los temas que más disfruté.
En el intervalo sin bandas de mi calendario, escuché a lo lejos el show de Catupecu Machu, sentado descansando las patas, que desde su ingreso al mainstream me tiene sin cuidado. Dentro de todo es una banda por la cual tengo una cierta simpatía y creo que tratan de hacer cosas copadas tecnológicamente, pero tienen un estigma tercermundista que hace que me terminen resultando insulsos. Lo único realmente bueno de Catupecu para mí, es su primer disco (Dale!), en el cual eran todo lo contrario, eran primitivos, crudos, completamente transparentes y viscerales (bueno, Cuentos decapitados es un disco que, aunque un poco más elaborado, está bien igual, creo que la decadencia definitiva se produce cuando se va el batero). De Dale! hicieron justamente el tema homónimo que también me resultó el más atractivo.
Volviendo a la agenda programada, venían los Thievery Corporation, de quienes había escuchado un poco hace tiempo pero tenía la impresión de que era una especie de colectivo de DJs. Era una banda nomás (o lo que vino fue una banda :) y de nuevo se escuchó una voz con perfecto castellano y claramente argentino, pidiendo la participación de los porteños. Estuvo bien, banda más para bailar que para escuchar, pero en vivo estuvieron bien, aunque me terminó aburriendo un poco. Y es todo lo que voy a decir sobre ellos, y que terminaron anunciando al plato fuerte de la noche.
Massive Attack. Realmente es muy complicado explicar lo que es un show de Massive Attack en vivo, tan complicado, que cuando volví tuve que describir mi estado con un video y que ahora voy a citar a la gente de Stay Free para dar otro (muy buen) resumen de lo que es:
De repente siento que estoy totalmente relajado flotando en el mar, con un cielo azul a pleno totalmente (¿confortablemente?) adormecido y sereno. Floto, floto y floto cuando de repente me golpe una ola, me hunde, me hace dar mil vueltas en el agua y luego de jugar conmigo me deja tirado en la orilla y yo no puedo describir lo que me acaba de pasar.
La sensación es un poco esa, es como un tornado que pasa y que te deja culo para arriba, prenguntándote que carajo pasó... Por momentos caes en el ojo del tornado y todo parece tranquilo, pero cuando menos lo esperás, pum! Te levanta de nuevo por el aire y te llevan a un lugar completamente distinto. Es realmente indescriptible. Pueden leer algunos detalles más del show en la nota de los stayfree-boys. Con respecto a los número y noticias locales, es notable lo bien asesorados que están los tipos, y como usan la ironía. Luego de pasarte número de cuanto es el gasto militar de Argentina, cuanta gente pobre hay, etc., te baten un "Aguante Argentina" y te quedás pensando. Ojo que la autocrítica no falta, en otro momento pasaban cual es la máxima cantidad de tiempo que te pueden tener detenido en distintos países legalmente sin explicaciones, y mientras la mayoría de los europeos están en menos de una semana, en UK eran unos 45 días, y en USA, obviamente, tiempo indeterminado. O sea, te das cuenta? Estuve en un recital leyendo todo eso. Los tipos te trabajan a todos los niveles, es una invasión a todos los sentidos, te trabajan todas las regiones del cerebro.
Finalmente, al otro día, me quedaba Pavement en La Trastienda (porque evidentemente no convocaron tanto como para un Luna Park. Me costó ir, ya estaba un poco saturado de tanto recital, de hecho llegué tarde :S (aunque eso fue culpa del 93). La verdad quedé un poco decepcionado porque tocaron poco, (menos de una hora y media calculo. Yo tuve una hora y monedas de show gracias a la llegada tarde y unas dos horas y media de viaje :S
El show igual estuvo bueno, aunque viniendo de Massive todo se complica. La Trastienda está bueno igual para ver bandas así más de ruaaack. Los tenés ahí a los tipos. Habían varios pendejitos haciendo mosh que se subían al escenario al lado de los tipos. A veces se sorprendían un poco con la energía del público :).
En resumen, una semana movidita, terminé un poco molido y la verdad que creo que a Pavement lo disfruté menos de lo que esperaba gracias a ello. Bandas, cópense y venga un poco más espaciadamente, no caigan todas la misma semana...
Massive Attack @ Hot Festival 2010
by Leandro Lucarella on 2010- 11- 21 05:54 (updated on 2010- 11- 21 05:54)- with 0 comment(s)
Estoy muy cansado así que les voy a resumir mi apreciación sobre el show de Massive Attack utilizando un video. Reemplacen "double rainbow" (y variaciones) por "Massive Attack":
La zarparon MAL los muchachos, y eso que ya los había visto y sabía que esperar...
Espero juntar voluntad como para comentar como estuvo el resto de la jornada del Hot Festival 2010 en algún momento, pero no ahora, tengo que recuperarme...
Cronograma Hot Festival 2010
by Leandro Lucarella on 2010- 11- 20 17:23 (updated on 2010- 11- 27 14:54)- with 0 comment(s)
Si están buscando el cronograma de hoy para el Hot Festival 2010, está escondido en las entrañas de Facebook. ¡Facebook te maldigo!
Update
¡Ja! Me acabo de avivar que los muchachos del Hot tienen un typo. NO es Brain (como cerebro en inglés), es Brian Storming, brutos! =P
Mi selección:
- 16:50 - BRIAN STORMING
- 18:05 - MASSACRE
- 18:50 - BENJAMIN BIOLAY
- 19:45 - STEREOPHONICS
- 21:35 - THIEVERY CORPORATION
- 23:20 - MASSIVE ATTACK
Y les copio el cronograma completo acá por conveniencia:
ESCENARIO PRINCIPAL 16:45 - COBRA STARSHIP 18:05 - MASSACRE 19:45 - STEREOPHONICS 21:35 - THIEVERY CORPORATION 23:20 - MASSIVE ATTACK ESCENARIO 2 15:10 - WALTER DOMINGUEZ 15:40 - ROSAL 16:10 - MARTINA TOPLEY BIRD 17:30 - JAMES YUILL 18:50 - BENJAMIN BIOLAY 20:40 - CATUPECU MACHU CARPA METRO 17:30 - GABRIEL SALAZAR DJ 19:00 - RAMA 20:30 - TOY SELECTA CARPA EMERGENTE 15:15 - LA MARIMBA 15:35 - CORAL 16:00 - ROBOT ZONDA 16:25 - ALAI 16:50 - BRAIN STORMING (sic =P) 17:20 - WAPAQ 17:50 - LOS COHOLINS 18:20 - TOBOGANES A MARTE 18:50 - JOE FERNANDEZ 19:20 - UTOPIANS 19:50 - CHARLIE 3 20:20 - NO LO SOPORTO
Billy Corgan's Metal Band
by Leandro Lucarella on 2010- 11- 19 22:56 (updated on 2010- 11- 19 22:56)- with 0 comment(s)
No sabía bien como empezar este post, así que lo empiezo con un elije tu propia aventura con las posibilidades que tenía en mente:
- Titular este post como Smashing Pumpkins hubiera sido una gran mentira.
- No sé cuándo Smashing Pumpkins se convirtió en una banda de Metal de los 80'.
- Grave error.
- ¡Devuelvan mi dinero!
Se imaginarán como la pasé en el recital de la banda tributo a Smashing Pumpkins con Billy Corgan en voz, ¿no? Tal vez me debería haber informado un poco más antes de comprar la entrada, porque la verdad que me enteré que Smashing Pumpkins se había convertido en el proyecto solista de Billy Corgan cuando salieron a escena. Tal vez también tendría que haber escuchado el último disco, porque todos los temas que no conocía me parecieron considerablemente mediocres (aunque las versiones que hicieron de los temas conocidos también me parecieron bastante mediocres, así que tal vez el problema no eran los temas en sí; aunque, por otro lado, para mí después de Adore ya empezaron a derrapar bastante).
La cosa es que me llevé una gran decepción. Más allá de que no haya sido Smashing Pumpkins posta, la performance en vivo fue mucho más heavy metalosa de lo que esperaba, presentaron en su gran mayoría temas del álbum nuevo (que me parecieron malos) y los temas buenos los hicieron en versión... muy heavy metalosa y limitada. ¡¡¡Tocaron Tonight, Tonight y Disarm sin cuerdas!!! Traelas grabadas al menos las cuerdas, pero poné algo... Fueron como cuerpos sin alma (Disarm al menos fue en versión acústica y no estuvo tan mal). Para que se den una idea de lo poco que hicieron del repertorio clásico, ni tocaron 1979. En resumen, sonó como una banda extremadamente limitada, nada que ver con sus discos, al menos los de la formación original, que se caracterizaron por tener muchos matices diferentes, una riqueza instrumental importante y arreglos muy detallados y sutiles; exactamente lo opuesto a lo que fue este show en vivo.
Además Billy Corgan me pareció bastaaaante salamín, aunque tal vez estuve un poco condicionado por la nota que leí antes de ir donde se despacha con boludeces new age contra Pavement (mea culpa por leer chusmeríos =P). Igual me pareció bastante soberbio en actitud (estuvo siempre en pose de súper estrella, pero a la vez tratando de hacerse el humilde) y con pésimo manejo del escenario y público; se puso a decir que se llamaba Messi, agregando que era el mejor jugador del mundo, y después se despachó con burlas a Maradona, jodiendo con que lo echaron de la selección y que era un cocainómano; dada la falta de recepción del público preguntó si entendían inglés y todos respondieron con un fuerte YES! (le faltó preguntar si estaba encendido el micrófono =P). En fin, cero piel. Tal vez tiene que ver que vengo de dos shows que me parecieron excelentes y no puedo evitar compararlo con ellos.
El sonido además fue malo, saturaba mucho, y por momentos parecía más una bola de ruido que otra cosa. Lo único bueno fue el escenario y en especial las luces, tenían luces realmente muy potentes e imponentes, pero hasta con eso se zarparon, y las usaban tanto que ya para el final del show tenía que evitar mirar al escenario porque me jodía la vista porque estaban prendidas todo el tiempo, e insisto, eran muy potentes.
En fin, les juro que por momentos hasta se me cruzó la idea de irme antes de que termine...
¡¡¡Durísimo!!!
Si quieren leer otros reviews o ver videos, búsquenlos ustedes, me calenté =P
Cambio de lugar y fecha de Pavement
by Leandro Lucarella on 2010- 11- 17 00:57 (updated on 2010- 11- 17 00:57)- with 2 comment(s)
Aviso por las dudas, porque yo me acabo de enterar al buscar para poner un link en el post anterior:
Pavement toca el domindo 21 en La Trastienda en vez del lunes 22 en el Luna Park.
Más data en la página del evento de La Trastienda.
Madafacas, nadie avisa nada! Si me lo perdía iba a correr sangre...
Belle & Sebastian ✓
by Leandro Lucarella on 2010- 11- 17 00:11 (updated on 2010- 11- 17 00:11)- with 0 comment(s)
Otra banda menos en la lista de bandas a ver en vivo antes de morirme (y sigo sumando, se vienen Smashing Pumpkins, Pavement y Massive Attack, aunque a estos ya los vi hace 6 añitos en el BUE).
El show estuvo excelente, los tipos tienen muchísima onda, muy carismáticos y fieles al estilo que hacen en espíritu, dieron un show alegre y verborrágico con mucha participación del público en ambos sentidos (subieron gente al escenario y Stuart Murdoch bajo varias veces del escenario, una llegando hasta casi la mitad de alto de la platea cabecera).
Lo único malo fue que no haya habido campo, es realmente un pecado un recital sin campo. Toda la gente de la platea que pusieron donde va el campo se la pasó todo el recital parada, así que al pedo total. Yo lo vi en pullman, que por un lado una garcha por lo lejos, por otro porque me esta en el último asiento para el costado (al lado de la platea lateral), pero más que nada porque al estar lejos es muy difícil no distraerse, por un lado por las pantallas (que a veces hay verlas para ver algo de detalle sobre el show), y por otro porque la gente va y viene y los patovas del Luna cada tanto andaban "retando" gente que se movía de su lugar, con unos punteros láser re potentes que te distraían mucho y a veces yendo hasta donde estaba la gente porque no les daban bola.
Y hablando de patovas, la verdad que re mala onda por parte del staff del Luna, muy forros al pedo.
Hace tiempo que me da mucha paja dar reseñas detalladas de shows, total ya hay mucha gente que lo hace, así que les dejo la primera que encontré (por mucho que odie la Rolling Stone). También les dejo uno de los muchos videos que ya están disponibles en YouTube, uno con participación del público.
Si quieren ver más videos, los de morrisey tienen bastante buena calidad...
Update
Acá tienen un mejor review de IndieHearts.
Legalícenla
by Leandro Lucarella on 2010- 11- 13 23:43 (updated on 2010- 11- 13 23:43)- with 0 comment(s)
No hablo de esto. Hablo de la copia del título secundario.
Para empezar el trámite del título, la UBA pide una copia legalizada del título secundario (si, otra). Como no tenía ninguna, tuve que ir a Uriburu 950 y como encontré poca información al respecto, comento mi experiencia a modo de un nuevo servicio a la comunidad...
¿Qué hay que llevar?
- Título secundario original.
- Tantas (foto)copias como quieran legalizar.
- $3 por cada copia que quieras (o te dejen) legalizar.
¿En qué consiste el trámite?
- Ir a Uriburu 950 de lunes a viernes de 11 a 16 hs.
- Bajar al subsuelo, a donde se hacen las legalizaciones.
- Sacar número.
- Ir a esperar a que toque nuestro número.
- Entregar el original y copia del título en ventanilla cuando toca el turno.
- Con el talón que entregan en el paso anterior ir a la caja y pagar.
- Esperar a ser llamado por nombre y apellido para recibir el original y copia legalizada.
Tips e información útil
Esta es la papa del post =)
Las indicaciones para llegar no son espectaculares pero prestando un poco de atención y buscando cartelitos se llega (los carteles están, pero son chicos).
Hay 2 lugares para esperar, uno chico cerca de las ventanillas, un poco escondido y uno más grande, más a la vista pero apenas más alejado de las ventanillas. Dependiendo de la cantidad de gente, se puede ir a la grande o a la pequeña. En la grande cada tanto viene una persona y pide que la gente con número hasta un N dado pase a la sala pequeña.
Observar bien el número porque originalmente es de dos cifras pero agregan una a mano adelante. Yo tenía el 478 e iban por el 362 cuando llegué, y al no ver el 4 inicial pensé que me faltaban solo 16 números =P
En general el número de caja que se indica cuando te toca el turno no sirve para nada, hay que ir a la ventanilla libre.
Se supone que entregan 500 números por día SIN EXCEPCIÓN, pero cuando fui yo entregaban números con serie 500 (¿tal vez no empiezan del 0?).
Vayan tarde, las 14 ~ 14:30 es el horario ideal. Yo fui tipo 13:20 y tuve que esperar alrededor de una hora y diez minutos en total. La gente que cayó después de las 14 esperó mucho menos. Tal vez se corre el riesgo de que se queden sin números si van muy tarde, a mí me tocó el 478 y cuando me iba estaban por el 530 aprox. Así que yo creo que es bastante seguro llegar tipo 14 ~ 14:30.
Los números avanzan a una tasa de 1 cada 30 segundos en promedio. Es decir, unos 20 números cada 10 minutos. La estimación es muy buena, yo la calculé cuando llegué y me fui casi exactamente a la hora que predije usando ese cálculo =P
Si tienen que ir temprano por alguna razón pueden usar esta cuenta para salir a pasear un rato porque van a tener (probablemente) mínimo una hora de espera =D
Una vez que te toca el número, tardan unos 15 ~ 20 minutos más en darte la copia legalizada (en llamarte por apellido).
Se rumorea que se pueden legalizar hasta 3 copias pero a mí me dejaron legalizar sólo una porque "depende de en que etapa de la carrera estás", dijeron.
¡De nada!
DMDFE copyright assigned to the FSF?
by Leandro Lucarella on 2010- 11- 10 23:07 (updated on 2010- 11- 10 23:07)- with 0 comment(s)
CDGC experimental branch in Druntime
by Leandro Lucarella on 2010- 11- 09 18:51 (updated on 2010- 11- 09 18:51)- with 0 comment(s)
Sean Kelly just created a new experimental branch in Druntime with CDGC as the GC for D2. The new branch is completely untested though, so only people wanting to help testing should try it out (which will be very appreciated).
FreeDroidRPG
by Leandro Lucarella on 2010- 11- 07 01:48 (updated on 2010- 11- 07 01:48)- with 0 comment(s)
Ahora que ando con un poco más de tiempo al pedo, estuve buscando algunos jueguitos. El Wesnoth para mí es un clásico, y está siempre ahí, y aunque dispuesto para ofrecer alguna campaña nueva cada tanto, ya me quedan muy pocas sin jugar =P
Así que estuve tratando de ampliar horizontes, motivado por un simpático directorio de juegos que encontré en algún feed RSS. Probé, o intenté probar, varios juegos, en particular de estrategia y RPG (por turnos o de tiempo real) y si bien hay cosas muy prometedoras (como el 0 A.D.) la mayoría están verdes.
Así di con el FreeDroidRPG, una mezcla entre Monkey Island (por el humor), el Diablo (por la forma de jugarlo) y un juego que ya no recuerdo bien el nombre, creo que era algo como The Vault (por lo elije-tu-propia-aventurezco y el universo pseudo post-apocalíptico). No es una locura, pero tiene buena calidad, es muy jugable, es particularmente simpático para geeks (tiene muuuchos guiños) y la verdad que hace mucho que un juego no me resultaba tan adictivo. Lo terminé en una semana aproximadamente, y me quedé con ganas de más.
Sé que está activamente en desarrollo (de hecho participó del GSoC 2010), pero no sé si agregarán más quests o de que manera lo extenderán, lamentablemente en la web hay bastante poca información.
En fin, si les gusta este tipo de juegos, es muy recomendable :)
No llame (no joda)
by Leandro Lucarella on 2010- 10- 28 15:09 (updated on 2010- 10- 28 15:09)- with 2 comment(s)
En otro servicio a la comunidad, y por si no lo sabían, les comento que existe una Ley 2014 en la CABA que crea un Registro No Llame.
De la página web:
El Registro No Llame fue creado por la Ley N° 2014 con el objetivo de proteger a los usuarios de servicios telefónicos de los posible abusos que puedan surgir del uso del telemarketing para publicitar bienes o servicios.
Las empresas que utilizan el sistema de telemarketing para publicitar, ofertar, vender y/o regalar bienes y/o servicios en el ámbito de la Ciudad, no pueden dirigirse a ninguno de los inscriptos en el Registro No Llame.
Si vivís en la Ciudad Autónoma de Buenos Aires y queres inscribirte en el Registro No Llame.
- Llama al 147 desde el Telefono que desean incorporar.
- Selecciona la opción “Registro No Llame”
- Selecciona la opción “Alta en el Registro”
- El sistema automáticamente Pre-Inscribirá tu numero en el Registro
- Al finalizar vas a escuchar el mensaje de éxito de la operación y los requerimiento para confirmar la registración.
- Presentate en el CGPC que te quede mas cómodo
Documentación a presentar
- DNI
- Ultima factura de la Linea telefónica que registraste en el 147, recorda que debes ser el Titular de la Linea.
- Si estas alquilando, y la linea no esta a tu nombre, trae una copia del contrato de alquiler
- Si la linea no esta a tu nombre, podes traer una autorización del titular
El procedimiento para darse de alta al registro parece ser levemente engorroso, pero si funciona creo que puede valer la pena, al menos a mí me solían joder bastante (aunque últimamente menos).
CDGC Tango integration
by Leandro Lucarella on 2010- 10- 21 02:34 (updated on 2010- 10- 21 02:34)- with 0 comment(s)
El misterio de las tapitas
by Leandro Lucarella on 2010- 10- 17 01:17 (updated on 2010- 10- 17 01:17)- with 0 comment(s)
No sé si notaron que hay una promo de Coca-Cola en la que te podés ganar un auto (yeah, right!) o botellas chicas gratis, que sorprendentemente salen bastante seguido, pero que nadie sabe donde canjear.
Por una de esas cosas de la vida, me dio curiosidad y me puse a investigar. Encontré los centros de canje y las bases y condiciones, que leí por primera ver en la vida, y que tiene muchas cosas curiosas, que paso a comentarles como un servicio a la comunidad:
- Los centros de canje se pueden averiguar por teléfono aparentemente (0-800-888-8888) o buscando en la lista con 10273 centros de cambios en todo el país =P
- Las bases dan la probabilidad matemática de ganar un premio: la de ganar un auto es de 0.00001%, la de ganar una coca de 600 de 5% y la de ganar una de 350 de 10%.
- La promoción es sin obligación de compra. Nunca le había dado bola a esto, pero al menos en esta promoción significa que "presentando un dibujo original, hecho a mano y coloreado de la Botella de Coca-Cola que incluya al dorso el nombre y apellido, tipo y número de documento, domicilio y correo electrónico se podrá, sin necesidad de compra alguna, retirar de un recipiente, sin mirar, una Tapa, a su elección, a razón de una por día y por persona". ¿Qué bizarro, no?
- "Los ganadores de esta Promoción, por su sola participación, autorizan expresamente al Organizador a difundir sus nombres, datos personales e imágenes y los de sus familias, por los medios y en la forma que aquélla considere convenientes, con fines publicitarios y/o promocionales, sin derecho a compensación alguna, durante la Promoción y hasta transcurrido un período de 24 meses de su finalización.". Me pregunto como definen "participar", si compro una coca y miro la tapita, ¿Coca-Cola ya puede venir, y sacarme fotos a mí y mi familia y usarlas para promoción por 2 años?
Trying CDGC HOWTO
by Leandro Lucarella on 2010- 10- 10 19:28 (updated on 2010- 10- 10 19:28)- with 0 comment(s)
Here are some details on how to try CDGC, as it needs a very particular setup, specially due to DMD not having precise heap scanning integrated yet.
Here are the steps (in some kind of literate scripting, you can copy&paste to a console ;)
# You probably want to do all this mess in some subdirectory :) mkdir cdgc-test cd cdgc-test # First, checkout the repositories. git clone git://git.llucax.com/software/dgc/cdgc.git # If you have problems with git:// URLs, try HTTP: # git clone https://git.llucax.com/r/software/dgc/cdgc.git svn co http://svn.dsource.org/projects/tango/tags/releases/0.99.9 tango # DMD doesn't care much (as usual) about tags, so you have to use -r to # checkout the 1.063 revision (you might be good with the latest revision # too). svn co -r613 http://svn.dsource.org/projects/dmd/branches/dmd-1.x dmd # Now we have to do some patching, let's start with Tango (only patch 3 is # *really* necessary, but the others won't hurt). cd tango for p in 0001-Fixes-to-be-able-to-parse-the-code-with-Dil.patch \ 0002-Use-the-mutexattr-when-initializing-the-mutex.patch \ 0003-Add-precise-heap-scanning-support.patch \ 0004-Use-the-right-attributes-when-appending-to-an-empty-.patch do wget -O- "https://llucax.com/blog/posts/2010/10/10-trying-cdgc-howto/$p" | patch -p1 done cd .. # Now let's go to DMD cd dmd p=0001-Create-pointer-map-bitmask-to-allow-precise-heap-sca.patch wget -O- "https://llucax.com/blog/posts/2010/10/10-trying-cdgc-howto/$p" | patch -p1 # Since we are in the DMD repo, let's compile it (you may want to add -jN if # you have N CPUs to speed up things a little). make -C src -f linux.mak cd .. # Good, now we have to wire Tango and CDGC together, just create a symbolic # link: cd tango ln -s ../../../../../cdgc/rt/gc/cdgc tango/core/rt/gc/ # Since I don't know very well the Tango build system, I did a Makefile of my # own to compile it, so just grab it and compile Tango with it. It will use # the DMD you just compiled and will compile CDGC by default (you can change # it via the GC Make variable, for example: make GC=basic to compile Tango # with the basic GC). The library will be written to obj/libtango-$GC.a, so # you can have both CDGB and the basic collector easily at hand): wget https://llucax.com/blog/posts/2010/10/10-trying-cdgc-howto/Makefile make # Again add -jN if you have N CPUs to make a little faster # Now all you need now is a decent dmd.conf to put it all together: cd .. echo "[Environment]" > dmd/src/dmd.conf echo -n "DFLAGS=-I$PWD/tango -L-L$PWD/tango/obj " >> dmd/src/dmd.conf echo -n "-defaultlib=tango-cdgc " >> dmd/src/dmd.conf echo "-debuglib=tango-cdgc -version=Tango" >> dmd/src/dmd.conf # Finally, try a Hello World: cat <<EOT > hello.d import tango.io.Console; void main() { Cout("Hello, World").newline; } EOT dmd/src/dmd -run hello.d # If you don't trust me and you want to be completely sure you have CDGC # running, try the collect_stats_file option to generate a log of the # collections: D_GC_OPTS=collect_stats_file=log dmd/src/dmd -run hello.d cat log
Done!
If you want to make this DMD the default, just add dmd/src to the PATH environment variable or do a proper installation ;)
Let me know if you hit any problem...
Pixies ✓
by Leandro Lucarella on 2010- 10- 07 02:51 (updated on 2010- 10- 07 02:51)- with 0 comment(s)
Una banda menos en la lista de bandas a ver en vivo antes de morirme.
2 horas a puro RAAAAACCCCC, hace mucho que no salía tan empapado de un recital, todavía me zumban los oídos. Hasta hubieron dos bises honestos, o tienen mucha producción, porque los dos últimos temas, lejos de los más conocidos (y que vinieron después de Where is my mind y Gigantic), los tocaron con las luces del Luna Park completamente prendidas y las pantallas indicando como salir.
El review se los dejo a los demás, estoy muy cansado y debería comer y tratar de seguir un poco con la tesis =P
Fuaaaaa, cuanto RAAAAAAACCCC!
Bacap updates
by Leandro Lucarella on 2010- 10- 02 00:11 (updated on 2010- 10- 02 00:11)- with 2 comment(s)
Just in case you are a Bacap user (and a lazy one, that doesn't want to subscribe to the repository RSS feed :), you might be interested in a few recent updates:
- Make pinging hosts configurable (a little older :).
- Add FORCE_SYNC option.
- Let rsync do the hard linking.
- Don't provide any default options for ssh.
- Add a Tips section to the README (you can see the tips in the updated website).
- Fix console error reporting when using a LOG_FILE.
Enjoy!
CDGC done
by Leandro Lucarella on 2010- 09- 28 15:16 (updated on 2010- 09- 28 15:16)- with 0 comment(s)
I'm sorry about the quick and uninformative post, but I've been almost 2 weeks without Internet and I have to finish the first complete draft of my thesis in a little more than a week, so I don't have much time to write here.
The thing is, to avoid the nasty effect of memory usage being too high for certain programs when using eager allocation, I've made the GC minimize the heap more often. Even when some test are still a little slower with CDGC, but that's only for tests that only stress the GC without doing any actual work, so I think it's OK, in that cases the extra overhead of being concurrent is bigger than the gain (which is inexistent, because there is nothing to do in parallel with the collector).
Finally, I've implemented early collection, which didn't proved very useful, and tried to keep a better occupancy factor of the heap with the new min_free option, without much success either (it looks like the real winner was eager allocation).
I'm sorry I don't have time to show you some graphs this time. Of course the work is not really finished, there are plenty of things to be done still, but I think the GC have come to a point where it can be really useful, and I have to finish my thesis :)
After I'm done, I hope I can work on integrating the GC in Tango and/or Druntime (where there is already a first approach done by Sean Kelly).
Telecom y LA PUTA QUE TE PARIÓ
by Leandro Lucarella on 2010- 09- 27 23:10 (updated on 2010- 09- 27 23:10)- with 0 comment(s)
Note
English version below.
Huy, tal vez estuve un poco fuerte con el título... O tal vez no.
Hace 13 días que estoy sin teléfono (y por consiguiente Internet, porque tengo ADSL). En realidad vengo con problemas con el teléfono desde junio; los días de lluvia se escuchaba con ruido hasta cortarse (pero extrañamente se cortaba el teléfono pero no Internet) y luego volvía solo.
La fantástica empresa, tan apreciada y conocida por todos, llamada Telecom Argentina funciona tan bien, que llamás al 114 (bah, llama algún conocido porque vos no tenés teléfono) y te atiende un contestador y te dice que tomó el reclamo. Nadie habla de tiempos, nadie habla de nada. Ni te gastes en buscar algún lugar físico de atención al cliente porque al menos en la factura no figura nada, es una empresa fantasma.
Llamé varias veces por el tema de los cortes por lluvia pero nada, solo te amenazan con que cobran la visita si es problema interno de tu casa así que te dicen que te fijes bien que en la entrada del cable a tu casa ande todo bien. El problema es cuando nunca te dijeron donde pusieron la mágica cajita de Telecom que divide tu reino del de ellos. Tener un techo de tejas altísimo no ayuda, porque en general eso está en la terraza.
Luego de probar de todo, llamé y pedí un técnico, cagándome en las amenazas. Pero no, claro, ellos no pueden concertar una cita para un día y hora... Bueno, nadie te dice hora, pero ellos ni siquiera día te dicen. La mecánica es así, te mandan a alguien cuando ellos quieren, si estás bien, y si no recién ahí ven si combinan algún día. ¡Súper eficiente! Y no es que tampoco tarden un día en venir, perder una visita no es poca cosa.
La cosa es que un día cayeron tipo 8 de la mañana, y estaba más dormido que alguien que no está tan tan dormido como yo estaba, que era bastante mucho, y no escuché el timbre. Pero fueron lo suficientemente amables como para llamarme al celular hasta despertarme, a lo que después de regañar un poco por ser unos forros por caer cuando se le canta le dije que ahora los atendía, que me banquen 10 minutos que me levantaba. Ahhhh, la amabilidad de Telecom, tocaron impacientemente el timbre un par de veces más mientras me cambiaba y cuando salí ya se habían ido. Llamé a Telecom para ver que onda, y obviamente nadie sabe nada, es la compañía con peor comunicación interna del mundo, o con peor atención del mundo (me inclino por la segunda). Además, tampoco nadie te dice nada sobre plazos, le pregunté explícitamente si podían tardar un día o una semana o un mes y el muy descarado me dijo "sí". Todo es posible en el maravilloso mundo de Telecom.
Finalmente me llamaron para concertar la entrevista pero el día anterior había llovido y no había pasado nada así que la cancelé (porque lo último que faltaba era que cuando vengan no puedan encontrar el problema y me quieran cobrar diciendo que era problema mío).
Y bueno, así pasaron los días y se hizo 14 de septiembre y el teléfono se cortó a las 16:00hs para nunca más volver, así que llamé de nuevo. El viernes 17, con la velocidad de una babosa sedada, llegó el técnico (de nuevo sin avisar y que me enganchó de pedo antes de salir al laburo) y quiso entrar a la casa, pero le advertí que no había nada que ver adentro, que Telecom a mí nunca me dijo ni donde había puesto la caja. Así que totalmente perdido, se fue a la puerta a verificar una caja externa, con su escalerita de metro y medio que apenas le alcanzó para llegar a esa caja (a mi techo de unos 5 o 6 metros mucho no podía llegar). Y ahí había tono. Con cara de preocupado me dijo que tenía que pedir a otra gente para que lo arregle, a lo que, con cara de resignado, le pregunté "y cuando van a venir", y me dijo, siguiendo firme la política de Telecom "ni idea, ahora con la lluvia viste como es, aparecen todas estas cosas y hay poco personal" a lo que le imploro con cara de desesperado que al menos me de un mínimo o máximo, y me dice que mínimo una semana... ¡Groso!
Llamé de nuevo a Telecom, al área comercial porque en reparaciones te atiende un contestador que dice "su línea ya está en reparaciones" y te corta, y me dicen que ellos no saben nada, que llame a reparaciones. Unos FE NO ME NOS.
El fin de semana, de pedo mirando por la ventana, noté que de la pared del fondo salía un cable, que iba todo por la medianera del fondo hasta el jardín de la vecina, que colgaba largamente hasta subir a su tejado, pero que por la mitad tenía un hermoso empalme, sin siquiera un poco de cinta. Así a lo machote, al aire libre.
Me brillaron los ojitos un poco, pero la indignación casi me mata. Haciéndola corta, le pedí escalera larga a mis viejos prestada, permiso a la vecina y esta tarde por fin pude poner mis manos en él, y voilá! Tengo teléfono/Internet luego de 13 días de corte, gracias a mi alpedismo de mirar por la ventana, mi vecina que se copó, y mis viejos que se ultra-coparon en traerme la escalera. NO gracias a Telecom. Ahora tendré que seguir peleándome para que por un lado me descuenten los días sin servicio, por otro me paguen la multa del doble del abono proporcional por cada día sin servicio por no arreglarlo dentro de los 3 días y finalmente porque vengan a hacer una instalación como la gente, no ese mamamarracho que hicieron de cables colgados y empalmes (hay 2 cables más iguales colgando en el jardín de la vecina).
En fin, están advertidos, si tienen problemas con Telecom, empiecen a buscar la forma de arreglárselos ustedes mismos...
English
I'm sorry but I'll only do a short version in English. I was without phone and Internet for 13 days (and having problems when it rained since June) because the damn Telecom Argentina did my phone installation by throwing an spliced wire, hanging in my neighbor's backyard, that eventually got rusty and finally cut.
They just not respond, they won't do anything, I had to fix it myself. Now I have to keep trying to make them come to do a proper installation, as what I did is a patch over a patch.
El hombre de al lado
by Leandro Lucarella on 2010- 09- 14 00:06 (updated on 2010- 09- 14 00:06)- with 0 comment(s)
Ayer fui a ver El hombre de al lado y la verdad que es muy recomendable. Se trata de una comedia negra con una trama muy simple (un conflicto entre dos vecinos porque uno hace una ventana en la medianera) que resalta la calidad de los personajes. El cordobés Daniel Araoz está realmente impecable en su papel, ya por eso solo vale la pena.
No voy a hablar mucho más al respecto, si quieren aún más spoilers pueden buscar en Google o ver el trailer oficial, aunque no sé si se los recomiendo porque para mí el trailer es muy poco representativo de la película (la venden como una película de acción/terror más o menos y nada que ver).
Como una curiosidad, la música original es cortesía de Sergio Pángaro (Baccarat, San Martín Vampire, Las Mil Copas), quien además tiene una pequeña aparición. Acá dejo lo que parece ser una escena recortada de la película (o un backstage) en donde canta un rato. Pueden verla sin temor, es spoiler-free.
Otra perlita es que hay agradecimientos a Alberto Laiseca (cuyo bigote inconfundible van a poder reconocer en el video de arriba si miran con atención), de quien nunca leí nada, pero tal vez debería (aunque no acostumbre a leer mucho), porque he sabido disfrutar de sus micro-relatos Cuentos de Terror que pasaban por por I.Sat (y que pueden revivir gracias a vos-tubo).
64 bits support for mutest
by Leandro Lucarella on 2010- 09- 13 19:51 (updated on 2010- 09- 13 19:51)- with 0 comment(s)
Truly concurrent GC using eager allocation
by Leandro Lucarella on 2010- 09- 10 03:01 (updated on 2010- 09- 10 03:01)- with 0 comment(s)
Finally, I got the first version of CDGC with truly concurrent garbage collection, in the sense that all the threads of the mutator (the program itself) can run in parallel with the collector (well, only the mark phase to be honest :).
You might want to read a previous post about CDGC where I achieved some sort of concurrency by making only the stop-the-world time very short, but the thread that triggered the collection (and any other thread needing any GC service) had to wait until the collection finishes. The thread that triggered the collection needed to wait for the collection to finish to fulfill the memory allocation request (it was triggered because the memory was exhausted), while any other thread needing any GC service needed to acquire the global GC lock (damn global GC lock!).
To avoid this issue, I took a simple approach that I call eager allocation, consisting on spawn the mark phase concurrently but allocating a new memory pool to be able to fulfill the memory request instantly. Doing so, not only the thread that triggered the collection can keep going without waiting the collection to finish, the global GC lock is released and any other thread can use any GC service, and even allocate more memory, since a new pool was allocated.
If the memory is exhausted again before the collection finishes, a new pool is allocated, so everything can keep running. The obvious (bad) consequence of this is potential memory bloat. Since the memory usage is minimized from time to time, this effect should not be too harmful though, but let's see the results, there are plenty of things to analyze from them (a lot not even related to concurrency).
First, a couple of comments about the plots:
- Times of Dil are multiplied by a factor of 0.1 in all the plots, times of rnddata are too, but only in the pause time and stop-the-world plots. This is only to make the plots more readable.
- The unreadable labels rotated 45 degrees say: stw, fork and ea. Those stand for Stop-the-world (the basic collector), fork only (concurrent but without eager allocation) and eager allocation respectively. You can click on the images to see a little more readable SVG version.
- The plots are for one CPU-only because using more CPUs doesn't change much (for these plots).
- The times were taken from a single run, unlike the total run time plots I usually post. Since a single run have multiple collections, the information about min, max, average and standard deviation still applies for the single run.
- Stop-the-world time is the time no mutator thread can run. This is not related to the global GC lock, is time the threads are really really paused (this is even necessary for the forking GC to take a snapshot of threads CPU registers and stacks). So, the time no mutator thread can do any useful work might be much bigger than this time, because the GC lock. This time is what I call Pause time. The maximum pause time is probably the most important variable for a GC that tries to minimize pauses, like this one. Is the maximum time a program will stay totally unresponsive (important for a server, a GUI application, a game or any interactive application).
The stop-the-world time is reduced so much that you can hardly see the times of the fork and ea configuration. It's reduced in all tests by a big margin, except for mcore and the bigarr. For the former it was even increased a little, for the later it was reduced but very little (but only for the ea* configuration, so it might be a bad measure). This is really measuring the Linux fork() time. When the program manages so little data that the mark phase itself is so fast that's faster than a fork(), this is what happens. The good news is, the pause times are small enough for those cases, so no harm is done (except from adding a little more total run time to the program).
Note the Dil maximum stop-the-world time, it's 0.2 seconds, looks pretty big, uh? Well, now remember that this time was multiplied by 0.1, the real maximum stop-the-world for Dil is 2 seconds, and remember this is the minimum amount of time the program is unresponsive! Thank god it's not an interactive application :)
Time to take a look to the real pause time:
OK, this is a little more confusing... The only strong pattern is that pause time is not changed (much) between the swt and fork configurations. This seems to make sense, as both configurations must wait for the whole collection to finish (I really don't know what's happening with the bh test).
For most tests (7), the pause time is much smaller for the ea configuration, 3 tests have much bigger times for it, one is bigger but similar (again mcore) and then is the weird case of bh. The 7 tests where the time is reduced are the ones that seems to make sense, that's what I was looking for, so let's see what's happening with the remaining 3, and for that, let's take a look at the amount of memory the program is using, to see if the memory bloat of allocating extra pools is significant.
Test | Maximum heap size (MB) | ||
---|---|---|---|
Program | stw | ea | ea/stw |
dil | 216 | 250 | 1.16 |
rnddata | 181 | 181 | 1 |
voronoi | 16 | 30 | 1.88 |
tree | 7 | 114 | 16.3 |
bh | 80 | 80 | 1 |
mcore | 30 | 38 | 1.27 |
bisort | 30 | 30 | 1 |
bigarr | 11 | 223 | 20.3 |
em3d | 63 | 63 | 1 |
sbtree | 11 | 122 | 11.1 |
tsp | 63 | 63 | 1 |
split | 39 | 39 | 1 |
See any relations between the plot and the table? I do. It looks like some programs are not being able to minimize the memory usage, and because of that, the sweep phase (which still have to run in a mutator thread, taking the global GC lock) is taking ages. An easy to try approach is to trigger the minimization of the memory usage not only at when big objects are allocated (like it is now), but that could lead to more mmap()/munmap()s than necessary. And there still problems with pools that are kept alive because a very small object is still alive, which is not solved by this.
So I think a more long term solution would be to introduce what I call early collection too. Meaning, trigger a collection before the memory is exhausted. That would be the next step in the CDGC.
Finally, let's take a look at the total run time of the test programs using the basic GC and CDGC with concurrent marking and eager allocation. This time, let's see what happens with 2 CPUs (and 25 runs):
Wow! It looks like this is getting really juicy (with exceptions, as usual :)! Dil time is reduced to about 1/3, voronoi is reduced to 1/10!!! Split and mcore have both their time considerably reduced, but that's because another small optimization (unrelated to what we are seeing today), so forget about those two. Same for rnddata, which is reduced because of precise heap scanning. But other tests increased its runtime, most notably bigarr takes almost double the time. Looking at the maximum heap size table, one can find some answers for this too. Another ugly side of early allocation.
For completeness, let's see what happens with the number of collections triggered during the program's life. Here is the previous table with this new data added:
Test | Maximum heap size (MB) | Number of collections | ||||
---|---|---|---|---|---|---|
Program | stw | ea | ea/stw | stw | ea | ea/stw |
dil | 216 | 250 | 1.16 | 62 | 50 | 0.81 |
rnddata | 181 | 181 | 1 | 28 | 28 | 1 |
voronoi | 16 | 30 | 1.88 | 79 | 14 | 0.18 |
tree | 7 | 114 | 16.3 | 204 | 32 | 0.16 |
bh | 80 | 80 | 1 | 27 | 27 | 1 |
mcore | 30 | 38 | 1.27 | 18 | 14 | 0.78 |
bisort | 30 | 30 | 1 | 10 | 10 | 1 |
bigarr | 11 | 223 | 20.3 | 305 | 40 | 0.13 |
em3d | 63 | 63 | 1 | 14 | 14 | 1 |
sbtree | 11 | 122 | 11.1 | 110 | 33 | 0.3 |
tsp | 63 | 63 | 1 | 14 | 14 | 1 |
split | 39 | 39 | 1 | 7 | 7 | 1 |
See how the number of collections is practically reduced proportionally to the increase of the heap size. When the increase in size explodes, even when the number of collections is greatly reduced, the sweep time take over and the total run time is increased. Specially in those tests where the program is almost only using the GC (as in sbtree and bigarr). That's why I like the most Dil and voronoi as key tests, they do quite a lot of real work beside asking for memory or using other GC services.
This confirms that the performance gain is not strictly related to the added concurrency, but because of a nice (finally! :) side-effect of eager allocation: removing some pressure from the GC by increasing the heap size a little (Dil gets 3x boost in run time for as little as 1.16x of memory usage; voronoi gets 10x at the expense of almost doubling the heap, I think both are good trade-offs). This shows another weak point of the GC, sometimes the HEAP is way too tight, triggering a lot of collections, which leads to a lot of GC run time overhead. Nothing is done right now to keep a good heap occupancy ratio.
But is there any real speed (in total run time terms) improvement because of the added concurrency? Let's see the run time for 1 CPU:
It looks like there is, specially for my two favourite tests: both Dil and voronoi get a 30% speed boost! That's not bad, not bad at all...
If you want to try it, the repository has been updated with this last changes :). If you do, please let me know how it went.
Scola
by Leandro Lucarella on 2010- 09- 07 20:31 (updated on 2010- 09- 10 12:15)- with 0 comment(s)
Qué animalada, bestialidad, monstruosidad lo que está haciendo Luis Scola...
¡Imparable, de otro planeta!
Update
¡Ups! Lo yetee... ¡Perdón Luisito!
The Wilderness Downtown
by Leandro Lucarella on 2010- 09- 01 01:40 (updated on 2010- 09- 01 01:40)- with 0 comment(s)
The Wilderness Downtown is a new interactive film by Chris Milk (done in HTML5 as a Google Chrome Experiment), and the new video for the song We Used To Wait from Arcade Fire. Judging from this, and the Unstaged show it looks like they are willing to play with the new technologies.
I like the video, for some reason it reminds me of House Of Cards (maybe because Google was involved too). The downside is, it only works on Chrome / Chromium.
Recursive vs. iterative marking
by Leandro Lucarella on 2010- 08- 30 00:54 (updated on 2010- 08- 30 00:54)- with 0 comment(s)
After a small (but important) step towards making the D GC truly concurrent (which is my main goal), I've been exploring the possibility of making the mark phase recursive instead of iterative (as it currently is).
The motivation is that the iterative algorithm makes several passes through the entire heap (it doesn't need to do the full job on each pass, it processes only the newly reachable nodes found in the previous iteration, but to look for that new reachable node it does have to iterate over the entire heap). The number of passes is the same as the connectivity graph depth, the best case is where all the heap is reachable through the root set, and the worse is when the heap is a single linked list. The recursive algorithm, on the other hand, needs only a single pass but, of course, it has the problem of potentially consuming a lot of stack space (again, the recurse depth is the same as the connectivity graph depth), so it's not paradise either.
To see how much of a problem is the recurse depth in reality, first I've implemented a fully recursive algorithm, and I found it is a real problem, since I had segmentation faults because the (8MiB by default in Linux) stack overflows. So I've implemented an hybrid approach, setting a (configurable) maximum recurse depth for the marking phase. If the maximum depth is reached, the recursion is stopped and nodes that should be scanned deeply than that are queued to scanned in the next iteration.
Here are some results showing how the total run time is affected by the maximum recursion depth:
The red dot is how the pure iterative algorithm currently performs (it's placed arbitrarily in the plot, as the X-axis doesn't make sense for it).
The results are not very conclusive. Even when the hybrid approach performs better for both Dil and Voronoi when the maximum depth is bigger than 75, the better depth is program specific. Both have its worse case when depth is 0, which makes sense, because is paying the extra complexity of the hybrid algorithm with using its power. As soon as we leave the 0 depth, a big drop is seen, for Voronoi big enough to outperform the purely iterative algorithm, but not for Dil, which matches it near 60 and clearly outperforms it at 100.
As usual, Voronoi challenges all logic, as the best depth is 31 (it was a consistent result among several runs). Between 20 and 50 there is not much variation (except for the magic number 31) but when going beyond that, it worsen slowly but constantly as the depth is increased.
Note that the plots might make the performance improvement look a little bigger than it really is. The best case scenario the gain is 7.5% for Voronoi and 3% for Dil (which is probably better measure for the real world). If I had to choose a default, I'll probably go with 100 because is where both get a performance gain and is still a small enough number to ensure no segmentation faults due to stack exhaustion is caused (only) by the recursiveness of the mark phase (I guess a value of 1000 would be reasonable too, but I'm a little scared of causing inexplicable, magical, mystery segfaults to users). Anyway, for a value of 100, the performance gain is about 1% and 3.5% for Dil and Voronoi respectively.
So I'm not really sure if I should merge this change or not. In the best case scenarios (which requires a work from the user to search for the better depth for its program), the performance gain is not exactly huge and for a reasonable default value is so little that I'm not convinced the extra complexity of the change (because it makes the marking algorithm a little more complex) worth it.
Feel free to leave your opinion (I would even appreciate it if you do :).
The Yes Men Fix The World
by Leandro Lucarella on 2010- 08- 23 22:54 (updated on 2010- 08- 23 22:54)- with 0 comment(s)
I once recommended The Yes Men, now their new movie, The Yes Men Fix The World is officially available for download in Vodo (HD and mobile versions included) via BitTorrent. There are subtitles for several languages (more are coming) and you can donate to The Yes Men so they can film their next movie.
Great mov(i)e!
CDGC first breath
by Leandro Lucarella on 2010- 08- 23 02:03 (updated on 2010- 08- 23 02:03)- with 0 comment(s)
I'm glad to announce that now, for the first time, CDGC means Concurrent D Garbage Collector, as I have my first (extremely raw and unoptimized) version of the concurrent GC running. And I have to say, I'm very excited and happy with the results from the very small benchmark I did.
The stop-the-world (pause) time was reduced by 2 orders of magnitude for the average, the standard deviation and, probably the more important, the maximum (these are the results for a single run, measuring the pause time for all the collections in that run). This is good news for people needing (soft) real-time in D, even when using the GC. Where the standard D GC have a pause time of 100ms, the CDGC have a pause time of 1ms.
The total run-time of the program was increased a little though, but not as much as the pause time was reduced. Only a 12% performance loss was measured, but this is just the first raw unoptimized version of the CDGC.
All this was measured with the voronoi benchmark, with -n 30000. Here are some plots:
Please note that the GC still has a global lock, so if 2 threads needs to allocate while the collection is running, both will be paused anyways (I have a couple of ideas on how to try to avoid that).
The idea about how to make the GC concurrent is based on the paper Nonintrusive Cloning Garbage Collector with Stock Operating System Support. I'm particularly excited by the results because the reduction of the pause time in the original paper were less than 1 order of magnitude better than their stop-the-world collector, so the preliminary results of the CDGC are much better than I expected.
Cazadores de sueños
by Leandro Lucarella on 2010- 08- 22 15:54 (updated on 2010- 08- 22 15:54)- with 0 comment(s)
Se viene el mundial de basquet...
The Suburbs Unstaged
by Leandro Lucarella on 2010- 08- 21 22:03 (updated on 2010- 08- 21 23:04)- with 0 comment(s)
You might already know about the new Arcade Fire album, The Suburbs.
Even when is a good album, I think is by far the less interesting / innovative / emotional from the band (at least from the musical point of view, I didn't payed much attention to the lyrics yet), but I still love their live performance, and I've came across the Unstaged series at the Madison Square Garden and directed by Terry Gilliam. The videos are available in YouTube in HD (many thanks to youtube-dl [*] that let me see the concert without suffering the f*cking Flash Player).
Here is Sprawl II (Mountains Beyond Mountains), my favourite song from the new album:
Update
You can download all the videos in HD using youtube-dl with this small bash script:
for i in h0DpBOYzXcQ 5pp3olGyku0 TtbrY6QrgPw 7vS5crSXJ6k GGdyG_83nX4 \ DSykB-j_2UQ Q2T-ZAharmY 0L6ZFhZVOx0 CLjrQ3cwzJ4 RdYyYFymH-Y \ sVW9usMRgNE bjhAP3V1o0w Q7fRvPjKDLs N9WR_eK0Rac bhwdd_01Ots \ 0ozdCLrTrtA diK1tZOXgDk 0ozdCLrTrtA aXuymDSGCko MQvZ4N1RfS8 \ siFsdInZqC0 MXJi5_yThNY do youtube-dl -f 37 -t "http://www.youtube.com/watch?v=$i" done
[*] | Tip: Download the files using the option -f 37 to get the HD version =) |
Newton Faulkner
by Leandro Lucarella on 2010- 08- 16 04:26 (updated on 2010- 08- 16 04:26)- with 0 comment(s)
A través de esteifri llegué a estos de videos del muchacho Newton Faulkner en los que realmente muestra una habilidad sorprendente (me hicieron acordar a Mister Orkester pero solo con una guitarra).
Cover de Teardrop:
Cover de Bohemian Rhapsody:
Cover de Here Comes the Sun:
Si se quedaron con ganas hay una playlist con más videos (pero por lo que vi, estos son los mejores lejos).
TypeInfo, static data and the GC
by Leandro Lucarella on 2010- 08- 16 00:39 (updated on 2010- 08- 16 00:39)- with 0 comment(s)
The D compiler doesn't provide any information on the static data that the GC must scan, so the runtime/GC have to use OS-dependant tricks to get that information.
Right now, in Linux, the GC gets the static data to scan from the libc's variables __data_start and _end, from which are not much information floating around except for some e-mail from Hans Boehm to the binutils mainling list.
There is a lot of stuff in the static data that doesn't need to be scanned, most notably the TypeInfo, which is a great portion of the static data. C libraries static data, for example, would be scanned too, when it makes no sense to do so.
I noticed CDGC has more than double the static data the basic GC has, just because of TypeInfo (I use about 5 or so more types, one of them is a template, which makes the bloat bigger).
The voronoi test goes from 21KB to 26KB of static data when using CDGC.
It would be nice if the compiler could group all the static that must really be scanned (programs static variables) together and make its limits available to the GC. It would be even nicer to leave static variables that have no pointers out of that group, and even much more nicer to create a pointer map like the one in the patch for precise scanning to allow precise heap scanning. Then only the scan should be scanned in full conservative mode.
I reported a bug with this issue so it doesn't get lost.
Memory allocation patterns
by Leandro Lucarella on 2010- 08- 14 06:28 (updated on 2010- 08- 14 16:09)- with 0 comment(s)
Note
Tango 0.99.9 has a bug in its runtime, which sometimes makes the GC scan memory that should not be scanned. It only affects Dil and Voronoi programs, but in a significant way. The tests in this post are done using a patched runtime, with the bug fixed.
Update
The results for the unpublished programs are now available. You can find the graphic results, the detailed summary and the source code for all the programs (except dil, which can be downloaded from its home site).
After seeing some weird behaviours and how different benchmarks are more or less affected by changes like memory addresses returned by the OS or by different ways to store the type information pointer, I decided to gather some information about how much and what kind of memory are requested by the different benchmarks.
I used the information provided by the malloc_stats_file CDGC option, and generated some stats.
The analysis is done on the allocations requested by the program (calls to gc_malloc()) and contrasting that with the real memory allocated by the GC. Note that only the GC heap memory (that is, memory dedicated to the program, which the GC scans in the collections) is counted (internal GC memory used for bookkeeping is not).
Also note that in this post I generally refer to object meaning a block of memory, it doesn't mean they are actually instance of a class or anything. Finally bear in mind that all the figures shown here are the sum of all the allocations done in the life of a program. If the collected data says a program requested 1GiB of memory, that doesn't mean the program had a residency of 1GiB, the program could had a working set of a few KiB and recycled memory like hell.
When analyzing the real memory allocated by the GC, there are two modes being analyzed, one is the classic conservative mode and the other is the precise mode (as it is in the original patch, storing the type information pointer at the end of the blocks). So the idea here is to measure two major things:
- The amount of memory wasted by the GC because of how it arranges memory as fixed-size blocks (bins) and large objects that uses whole pages.
- The extra amount of memory wasted by the GC when using precise mode because it stores the type information pointer at the end of the blocks.
I've selected a few representative benchmarks. Here are the results:
bh allocation pattern
This is a translation by Leonardo Maffi from the Olden Benchmark that does a Barnes–Hut simulation. The program is CPU intensive an does a lot of allocation of about 5 different small objects.
Here is a graphic summary of the allocation requests and real allocated memory for a run with -b 4000:
We can easily see here how the space wasted by the GC memory organization is significant (about 15% wasted), and how the type information pointer is adding an even more significant overhead (about 36% of the memory is wasted). This means that this program will be 15% more subject to false pointers (and will have to scan some extra memory too, but fortunately the majority of the memory doesn't need to be scanned) than it should in conservative mode and that the precise mode makes things 25% worse.
You can also see how the extra overhead in the precise mode is because some objects that should fit in a 16 bin now need a 32 bytes bin to hold the extra pointer. See how there were no waste at all in the conservative mode for objects that should fit a 16 bytes bin. 117MiB are wasted because of that.
Here is a more detailed (but textual) summary of the memory requested and allocated:
- Requested
- Total
- 15,432,462 objecs, 317,236,335 bytes [302.54MiB]
- Scanned
- 7,757,429 (50.27%) objecs, 125,360,510 bytes [119.55MiB] (39.52%)
- Not scanned
- 7,675,033 (49.73%) objecs, 191,875,825 bytes [182.99MiB] (60.48%)
- Different object sizes
- 8
- Objects requested with a bin size of:
- 16 bytes
- 7,675,064 (49.73%) objects, 122,801,024 bytes [117.11MiB] (38.71%)
- 32 bytes
- 7,734,214 (50.12%, 99.85% cumulative) objects, 193,609,617 bytes [184.64MiB] (61.03%, 99.74% cumulative)
- 64 bytes
- 23,181 (0.15%, 100% cumulative) objects, 824,988 bytes [805.65KiB] (0.26%, 100% cumulative)
- 256 bytes
- 2 (0%, 100% cumulative) objects, 370 bytes (0%, 100% cumulative)
- 512 bytes
- 1 (0%, 100% cumulative) objects, 336 bytes (0%, 100% cumulative)
- Allocated
- Conservative mode
- Total allocated
- 371,780,480 bytes [354.56MiB]
- Total wasted
- 54,544,145 bytes [52.02MiB], 14.67%
- Wasted due to objects that should use a bin of
- 16 bytes
- 0 bytes (0%)
- 32 bytes
- 53,885,231 bytes [51.39MiB] (98.79%, 98.79% cumulative)
- 64 bytes
- 658,596 bytes [643.16KiB] (1.21%, 100% cumulative)
- 256 bytes
- 142 bytes (0%, 100% cumulative)
- 512 bytes
- 176 bytes (0%, 100% cumulative)
- Precise mode
- Total allocated
- 495,195,296 bytes [472.26MiB]
- Total wasted
- 177,958,961 bytes [169.71MiB], 35.94%
- Wasted due to objects that should use a bin of
- 16 bytes
- 122,801,024 bytes [117.11MiB] (69.01%)
- 32 bytes
- 54,499,023 bytes [51.97MiB] (30.62%, 99.63% cumulative)
- 64 bytes
- 658,596 bytes [643.16KiB] (0.37%, 100% cumulative)
- 256 bytes
- 142 bytes (0%, 100% cumulative)
- 512 bytes
- 176 bytes (0%, 100% cumulative)
bigarr allocation pattern
This is a extremely simple program that just allocate a big array of small-medium objects (all of the same size) I found in the D NG.
Here is the graphic summary:
The only interesting part of this test is how many space is wasted because of the memory organization, which in this case goes up to 30% for the conservative mode (and have no change for the precise mode).
Here is the detailed summary:
- Requested
- Total
- 12,000,305 objecs, 1,104,160,974 bytes [1.03GiB]
- Scanned
- 12,000,305 (100%) objecs, 1,104,160,974 bytes [1.03GiB] (100%)
- Not scanned
- 0 (0%) objecs, 0 bytes (0%)
- Different object sizes
- 5
- Objects requested with a bin size of
- 128 bytes
- 12,000,000 (100%, 100% cumulative) objects, 1,056,000,000 bytes [1007.08MiB] (95.64%, 95.64% cumulative)
- 256 bytes
- 2 (0%, 100% cumulative) objects, 322 bytes (0%, 95.64% cumulative)
- 512 bytes
- 1 (0%, 100% cumulative) objects, 336 bytes (0%, 95.64% cumulative)
- more than a page
- 302 (0%) objects, 48,160,316 bytes [45.93MiB] (4.36%)
- Allocated
- Conservative mode
- Total allocated
- 1,584,242,808 bytes [1.48GiB]
- Total wasted
- 480,081,834 bytes [457.84MiB], 30.3%
- Wasted due to objects that should use a bin of
- 128 bytes
- 480,000,000 bytes [457.76MiB] (99.98%, 99.98% cumulative)
- 256 bytes
- 190 bytes (0%, 99.98% cumulative)
- 512 bytes
- 176 bytes (0%, 99.98% cumulative)
- more than a page
- 81,468 bytes [79.56KiB] (0.02%)
- Precise mode
- Total allocated
- 1,584,242,808 bytes [1.48GiB]
- Total wasted
- 480,081,834 bytes [457.84MiB], 30.3%
- Wasted due to objects that should use a bin of:
- 128 bytes
- 480,000,000 bytes [457.76MiB] (99.98%, 99.98% cumulative)
- 256 bytes
- 190 bytes (0%, 99.98% cumulative)
- 512 bytes
- 176 bytes (0%, 99.98% cumulative)
- more than a page
- 81,468 bytes [79.56KiB] (0.02%)
mcore allocation pattern
This is program that test the contention produced by the GC when appending to (thread-specific) arrays in several threads concurrently (again, found at the D NG). For this analysis the concurrency doesn't play any role though, is just a program that do a lot of appending to a few arrays.
Here are the graphic results:
This is the most boring of the examples, as everything works as expected =)
You can clearly see how the arrays grow, passing through each bin size and finally becoming big objects which take most of the allocated space. Almost nothing need to be scanned (they are int arrays), and practically there is no waste. That's a good decision by the array allocation algorithm, which seems to exploit the bin sizes to the maximum. Since almost all the data is doesn't need to be scanned, there is no need to store the type information pointers, so there is no waste either for the precise mode (the story would be totally different if the arrays were of objects that should be scanned, as probably each array allocation would waste about 50% of the memory to store the type information pointer).
Here is the detailed summary:
- Requested
- Total requested
- 367 objecs, 320,666,378 bytes [305.81MiB]
- Scanned
- 8 (2.18%) objecs, 2,019 bytes [1.97KiB] (0%)
- Not scanned
- 359 (97.82%) objecs, 320,664,359 bytes [305.81MiB] (100%)
- Different object sizes
- 278
- Objects requested with a bin size of
- 16 bytes
- 4 (1.09%) objects, 20 bytes (0%)
- 32 bytes
- 5 (1.36%, 2.45% cumulative) objects, 85 bytes (0%, 0% cumulative)
- 64 bytes
- 4 (1.09%, 3.54% cumulative) objects, 132 bytes (0%, 0% cumulative)
- 128 bytes
- 4 (1.09%, 4.63% cumulative) objects, 260 bytes (0%, 0% cumulative)
- 256 bytes
- 6 (1.63%, 6.27% cumulative) objects, 838 bytes (0%, 0% cumulative)
- 512 bytes
- 9 (2.45%, 8.72% cumulative) objects, 2,708 bytes [2.64KiB] (0%, 0% cumulative)
- 1024 bytes
- 4 (1.09%, 9.81% cumulative) objects, 2,052 bytes [2KiB] (0%, 0% cumulative)
- 2048 bytes
- 4 (1.09%, 10.9% cumulative) objects, 4,100 bytes [4KiB] (0%, 0% cumulative)
- 4096 bytes
- 4 (1.09%, 11.99% cumulative) objects, 8,196 bytes [8KiB] (0%, 0.01% cumulative)
- more than a page
- 323 (88.01%) objects, 320,647,987 bytes [305.79MiB] (99.99%)
- Allocated
- Conservative mode
- Total allocated
- 321,319,494 bytes [306.43MiB]
- Total wasted
- 653,116 bytes [637.81KiB], 0.2%
- Wasted due to objects that should use a bin of
- 16 bytes
- 44 bytes (0.01%)
- 32 bytes
- 75 bytes (0.01%, 0.02% cumulative)
- 64 bytes
- 124 bytes (0.02%, 0.04% cumulative)
- 128 bytes
- 252 bytes (0.04%, 0.08% cumulative)
- 256 bytes
- 698 bytes (0.11%, 0.18% cumulative)
- 512 bytes
- 1,900 bytes [1.86KiB] (0.29%, 0.47% cumulative)
- 1024 bytes
- 2,044 bytes [2KiB] (0.31%, 0.79% cumulative)
- 2048 bytes
- 4,092 bytes [4KiB] (0.63%, 1.41% cumulative)
- 4096 bytes
- 8,188 bytes [8KiB] (1.25%, 2.67% cumulative)
- more than a page
- 635,699 bytes [620.8KiB] (97.33%)
- Precise mode
- Total allocated
- 321,319,494 bytes [306.43MiB]
- Total wasted
- 653,116 bytes [637.81KiB], 0.2%
- Wasted due to objects that should use a bin of
- 16 bytes
- 44 bytes (0.01%)
- 32 bytes
- 75 bytes (0.01%, 0.02% cumulative)
- 64 bytes
- 124 bytes (0.02%, 0.04% cumulative)
- 128 bytes
- 252 bytes (0.04%, 0.08% cumulative)
- 256 bytes
- 698 bytes (0.11%, 0.18% cumulative)
- 512 bytes
- 1,900 bytes [1.86KiB] (0.29%, 0.47% cumulative)
- 1024 bytes
- 2,044 bytes [2KiB] (0.31%, 0.79% cumulative)
- 2048 bytes
- 4,092 bytes [4KiB] (0.63%, 1.41% cumulative)
- 4096 bytes
- 8,188 bytes [8KiB] (1.25%, 2.67% cumulative)
- more than a page
- 635,699 bytes [620.8KiB] (97.33%)
voronoi allocation pattern
This is one of my favourites, because is always problematic. It "computes the voronoi diagram of a set of points recursively on the tree" and is also taken from the Olden Benchmark and translated by Leonardo Maffi to D.
Here are the graphic results for a run with -n 30000:
This have a little from all the previous examples. Practically all the heap should be scanned (as in bigarr), it wastes a considerably portion of the heap because of the fixed-size blocks (as all but mcore), it wastes just a very little more because of type information (as all but bh) but that waste comes from objects that should fit in a 16 bytes bin but is stored in a 32 bytes bin instead (as in bh).
Maybe that's why it's problematic, it touches a little mostly all the GC flaws.
Here is the detailed summary:
- Requested
- Total requested
- 1,309,638 objecs, 33,772,881 bytes [32.21MiB]
- Scanned
- 1,309,636 (100%) objecs, 33,772,849 bytes [32.21MiB] (100%)
- Not scanned
- 2 (0%) objecs, 32 bytes (0%)
- Different object sizes
- 6
- Objects requested with a bin size of
- 16 bytes
- 49,152 (3.75%) objects, 786,432 bytes [768KiB] (2.33%)
- 32 bytes
- 1,227,715 (93.74%, 97.5% cumulative) objects, 31,675,047 bytes [30.21MiB] (93.79%, 96.12% cumulative)
- 64 bytes
- 32,768 (2.5%, 100% cumulative) objects, 1,310,720 bytes [1.25MiB] (3.88%, 100% cumulative)
- 256 bytes
- 2 (0%, 100% cumulative) objects, 346 bytes (0%, 100% cumulative)
- 512 bytes
- 1 (0%, 100% cumulative) objects, 336 bytes (0%, 100% cumulative)
- Allocated
- Conservative mode
- Total allocated
- 42,171,488 bytes [40.22MiB]
- Total wasted
- 8,398,607 bytes [8.01MiB], 19.92%
- Wasted due to objects that should use a bin of
- 16 bytes
- 0 bytes (0%)
- 32 bytes
- 7,611,833 bytes [7.26MiB] (90.63%, 90.63% cumulative)
- 64 bytes
- 786,432 bytes [768KiB] (9.36%, 100% cumulative)
- 256 bytes
- 166 bytes (0%, 100% cumulative)
- 512 bytes
- 176 bytes (0%, 100% cumulative)
- Precise mode
- Total allocated
- 42,957,888 bytes [40.97MiB]
- Total wasted
- 9,185,007 bytes [8.76MiB], 21.38%
- Wasted due to objects that should use a bin of
- 16 bytes
- 786,400 bytes [767.97KiB] (8.56%)
- 32 bytes
- 7,611,833 bytes [7.26MiB] (82.87%, 91.43% cumulative)
- 64 bytes
- 786,432 bytes [768KiB] (8.56%, 100% cumulative)
- 256 bytes
- 166 bytes (0%, 100% cumulative)
- 512 bytes
- 176 bytes (0%, 100% cumulative)
Dil allocation pattern
Finally, this is by far my favourite, the only real-life program, and the most colorful example (literally =).
Dil is a D compiler, and as such, it works a lot with strings, a lot of big chunks of memory, a lot of small objects, it has it all! String manipulation stress the GC a lot, because it uses objects (blocks) of all possible sizes ever, specially extremely small objects (less than 8 bytes, even a lot of blocks of just one byte!).
Here are the results of a run of Dil to generate Tango documentation (around 555 source files are processed):
Didn't I say it was colorful?
This is like the voronoi but taken to the extreme, it really have it all, it allocates all types of objects in significant quantities, it wastes a lot of memory (23%) and much more when used in precise mode (33%).
Here is the detailed summary:
- Requested
- Total
- 7,307,686 objecs, 322,411,081 bytes [307.48MiB]
- Scanned
- 6,675,124 (91.34%) objecs, 227,950,157 bytes [217.39MiB] (70.7%)
- Not scanned
- 632,562 (8.66%) objecs, 94,460,924 bytes [90.08MiB] (29.3%)
- Different object sizes
- 6,307
- Objects requested with a bin size of
- 16 bytes
- 2,476,688 (33.89%) objects, 15,693,576 bytes [14.97MiB] (4.87%)
- 32 bytes
- 3,731,864 (51.07%, 84.96% cumulative) objects, 91,914,815 bytes [87.66MiB] (28.51%, 33.38% cumulative)
- 64 bytes
- 911,016 (12.47%, 97.43% cumulative) objects, 41,918,888 bytes [39.98MiB] (13%, 46.38% cumulative)
- 128 bytes
- 108,713 (1.49%, 98.91% cumulative) objects, 8,797,572 bytes [8.39MiB] (2.73%, 49.11% cumulative)
- 256 bytes
- 37,900 (0.52%, 99.43% cumulative) objects, 6,354,323 bytes [6.06MiB] (1.97%, 51.08% cumulative)
- 512 bytes
- 22,878 (0.31%, 99.75% cumulative) objects, 7,653,461 bytes [7.3MiB] (2.37%, 53.45% cumulative)
- 1024 bytes
- 7,585 (0.1%, 99.85% cumulative) objects, 4,963,029 bytes [4.73MiB] (1.54%, 54.99% cumulative)
- 2048 bytes
- 3,985 (0.05%, 99.9% cumulative) objects, 5,451,493 bytes [5.2MiB] (1.69%, 56.68% cumulative)
- 4096 bytes
- 2,271 (0.03%, 99.93% cumulative) objects, 6,228,433 bytes [5.94MiB] (1.93%, 58.61% cumulative)
- more than a page
- 4,786 (0.07%) objects, 133,435,491 bytes [127.25MiB] (41.39%)
- Allocated
- Conservative mode
- Total allocated
- 419,368,774 bytes [399.94MiB]
- Total wasted
- 96,957,693 bytes [92.47MiB], 23.12%
- Wasted due to objects that should use a bin of
- 16 bytes
- 23,933,432 bytes [22.82MiB] (24.68%)
- 32 bytes
- 27,504,833 bytes [26.23MiB] (28.37%, 53.05% cumulative)
- 64 bytes
- 16,386,136 bytes [15.63MiB] (16.9%, 69.95% cumulative)
- 128 bytes
- 5,117,692 bytes [4.88MiB] (5.28%, 75.23% cumulative)
- 256 bytes
- 3,348,077 bytes [3.19MiB] (3.45%, 78.68% cumulative)
- 512 bytes
- 4,060,075 bytes [3.87MiB] (4.19%, 82.87% cumulative)
- 1024 bytes
- 2,804,011 bytes [2.67MiB] (2.89%, 85.76% cumulative)
- 2048 bytes
- 2,709,787 bytes [2.58MiB] (2.79%, 88.56% cumulative)
- 4096 bytes
- 3,073,583 bytes [2.93MiB] (3.17%, 91.73% cumulative)
- more than a page
- 8,020,067 bytes [7.65MiB] (8.27%)
- Precise mode:
- Total allocated
- 482,596,774 bytes [460.24MiB]
- Total wasted
- 160,185,693 bytes [152.76MiB], 33.19%
- Wasted due to objects that should use a bin of
- 16 bytes
- 26,820,824 bytes [25.58MiB] (16.74%)
- 32 bytes
- 85,742,913 bytes [81.77MiB] (53.53%, 70.27% cumulative)
- 64 bytes
- 18,070,872 bytes [17.23MiB] (11.28%, 81.55% cumulative)
- 128 bytes
- 5,221,884 bytes [4.98MiB] (3.26%, 84.81% cumulative)
- 256 bytes
- 3,400,557 bytes [3.24MiB] (2.12%, 86.93% cumulative)
- 512 bytes
- 4,125,611 bytes [3.93MiB] (2.58%, 89.51% cumulative)
- 1024 bytes
- 2,878,763 bytes [2.75MiB] (1.8%, 91.31% cumulative)
- 2048 bytes
- 2,760,987 bytes [2.63MiB] (1.72%, 93.03% cumulative)
- 4096 bytes
- 3,143,215 bytes [3MiB] (1.96%, 94.99% cumulative)
- more than a page
- 8,020,067 bytes [7.65MiB] (5.01%)
Conclusion
I've analyzed other small fabricated benchmarks, but all of them had results very similar to the ones shown here.
I think the overallocation problem is more serious than what one might think at first sight. Bear in mind this is not GC overhead, is not because of internal GC data. Is memory the GC or the mutator cannot use. Is memory wasted because of fragmentation (planned fragmentation, but fragmentation at least). And I don't think this is the worse problem. The worse problem is, this memory will need to be scanned in most cases (Dil needs to scan 70% of the total memory requested), and maybe the worse of all is that is subject to false pointer. A false pointer to a memory location that is not actually being used by the program will keep the block alive! If is a large object (several pages) that could be pretty nasty.
This problems can be addressed in several ways. One is mitigate the problem by checking (when type information is available) what portions of the memory is really used and what is wasted, and don't keep things alive when they are only pointed to wasted memory. This is not free though, it will consume more CPU cycles so the solution could be worse than the problem.
I think it worth experimenting with other heap organizations, for example, I would experiment with one free list for object size instead of pre-fixed-sizes. I would even experiment with a free list for each type when type information is available, that would save a lot of space (internal GC space) when storing type information. Some specialization for strings could be useful too.
Unfortunately I don't think I'll have the time to do this, at least for the thesis, but I think is a very rich and interesting ground to experiment.
Add PC-beep whitelist for an Intel board
by Leandro Lucarella on 2010- 08- 11 00:49 (updated on 2010- 08- 11 00:49)- with 0 comment(s)
Yaii! My beep will be back in the next kernel release :)
This is a note to let you know that I've just added the patch titled ALSA: hda - Add PC-beep whitelist for an Intel board to the 2.6.35-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: ../tmp/alsa-hda-add-pc-beep-whitelist-for-an-intel-board.patch and it can be found in the queue-2.6.35 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@kernel.org> know about it. >From e096c8e6d5ed965f346d94befbbec2275dde3621 Mon Sep 17 00:00:00 2001 From: Takashi Iwai <tiwai@suse.de> Date: Tue, 3 Aug 2010 17:20:35 +0200 Subject: ALSA: hda - Add PC-beep whitelist for an Intel board From: Takashi Iwai <tiwai@suse.de> commit e096c8e6d5ed965f346d94befbbec2275dde3621 upstream. An Intel board needs a white-list entry to enable PC-beep. Otherwise the driver misdetects (due to bogus BIOS info) and ignores the PC-beep on 2.6.35. Reported-and-tested-by: Leandro Lucarella <luca@llucax.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+) --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5183,6 +5183,7 @@ static void fillup_priv_adc_nids(struct static struct snd_pci_quirk beep_white_list[] = { SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1), + SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1), {} }; Patches currently in stable-queue which might be from tiwai@suse.de are queue-2.6.35/alsa-hda-add-pc-beep-whitelist-for-an-intel-board.patch
If you feel it should not be added to the stable tree, and let <stable@kernel.org> know about it, I kill you!.
GWENE
by Leandro Lucarella on 2010- 08- 10 01:25 (updated on 2010- 08- 10 01:25)- with 0 comment(s)
GDC activity
by Leandro Lucarella on 2010- 08- 10 01:21 (updated on 2010- 08- 10 01:21)- with 0 comment(s)
There is a lot of activity lately in the GDC world, both the repository and the mailing list (mostly closed bug reports notification).
The reborn of GDC is a courtesy of Vincenzo Ampolo (AKA goshawk) and Michael P. (I'm sorry, I couldn't find his last name), but it received a big boost lately since Iain Buclaw (apparently from Ubuntu, judging from his e-mail address) got commit access to the repository in July.
They are working in updating both the DMD front-end and the GCC back-end and judging from the commits, the front-end is updated to DMD 1.062 and 2.020 (they are working on Druntime integration now) and the back-end works with GCC 3.4, 4.1, 4.2, 4.3 and 4.4 is in the works.
Really great news! Thanks for the good work!
Lo' redó
by Leandro Lucarella on 2010- 08- 09 03:30 (updated on 2010- 08- 09 03:30)- with 0 comment(s)
¡No lo puedo creer! ¡Acabo de descubrir un tema de Los Redondos que me gusta!
El tema se llama Pensando como una acelga y es de Momo Sampler (2000) y sorprendentemente tiene arreglos y sutileza que lo separan un poco de los clásicos temas fierita (no se dejen engañar por el comienzo).
Jamás creí que este momento iba a llegar...
Type information at the end of the block considered harmful
by Leandro Lucarella on 2010- 08- 07 17:24 (updated on 2010- 08- 09 13:22)- with 0 comment(s)
Yes, I know I'm not Dijkstra, but I always wanted to do a considered harmful essay =P
And I'm talking about a very specific issue, so this will probably a boring reading for most people :)
This is about my research in D garbage collection, the CDGC, and related to a recent post and the precise heap scanning patch.
I've been playing with the patch for a couple of weeks now, and even when some of the tests in my benchmark became more stable, other tests had the inverse effect, and other tests even worsen their performance.
The extra work done by the patch should not be too significant compared with the work it avoids by no scanning things that are no pointers, so the performance, intuitively speaking, should be considerably increased for test that have a lot of false pointers and for the other tests, at least not be worse or less stable. But that was not what I observed.
I finally got to investigate this issue, and found out that when the precise version was clearly slower than the Tango basic collector, it was due to a difference in the number of collections triggered by the test. Sometimes a big difference, and sometimes with a lot of variation. The number usually never approached to the best value achieved by the basic collector.
For example, the voronoi test with N = 30_000, the best run with the basic collector triggered about 60 collections, varying up to 90, while the precise scanning triggered about 80, with very little variation. Even more, if I ran the tests using setarch to avoid heap addresses randomization (see the other post for details), the basic collector triggered about 65 collections always, while the precise collector still triggered 80, so there was something wrong with the precise scanning independently of the heap addresses.
So the suspicions I had about storing the type information pointer at the end of the block being the cause of the problem became even more suspicious. So I added an option to make the precise collector conservative. The collection algorithm, that changed between collectors, was untouched, the precise collector just don't store the type information when is configured in conservative mode, so it scans all the memory as if it didn't had type information. The results where almost the same as the basic collector, so the problem really was the space overhead of storing the type information in the same blocks the mutator stores it's data.
It looks like the probability of keeping blocks alive incorrectly because of false pointer, even when they came just from the static data and the stack (and other non-precise types, like unions) is increased significantly because of the larger blocks.
The I tried to strip the programs (all the test were using programs with debug info to ease the debugging when I brake the GC :), and the number of collections decreased considerably in average, and the variation between runs too. So it looks like that in the scanned static data are included the debug symbols or there is something else adding noise. This for both precise and conservative scanning, but the effect is worse with precise scanning. Running the programs without heap address randomization (setarch -R), usually decreases the number of collections and the variance too.
Finally, I used a very naïve (but easy) way of storing the type information pointers outside the GC scanned blocks, wasting 25% of space just to store this information (as explained in a comment to the bug report), but I insist, that overhead is outside the GC scanned blocks, unlike the small overhead imposed by storing a pointer at the end of that blocks. Even with such high memory overhead, the results were surprising, the voronoi number of collections doing precise scanning dropped to about 68 (very stable) and the total runtime was a little smaller than the best basic GC times, which made less collections (and were more unstable between runs).
Note that there are still several test that are worse for the CDGC (most notably Dil, the only real-life application :), there are plenty of changes between both collectors and I still didn't look for the causes.
I'll try to experiment with a better way of storing the type information pointers outside the GC blocks, probably using a hash table.
At last but not least, here are some figures (basic is the Tango basic collector, cdgc is the CDGC collector with the specified modifications):
Here are the same tests, but with the binaries stripped:
Here are the same tests as above, but disabling Linux heap addresses randomization (setarch -R):
Update
I noticed that the plots doesn't always reflect 100% what's stated in the text, that is because the text was written with another run results and it seems like the tested programs are very sensitive to the heap and binary addresses the kernel assign to the program.
Anyway, what you can see in the plots very clear is how stripping the binaries changes the results a lot and how the performance is particularly improved when storing the type information pointer outside the GC'ed memory when the binaries are not stripped.
Calling abort() on unhandled exception
by Leandro Lucarella on 2010- 07- 30 15:01 (updated on 2010- 07- 30 15:01)- with 0 comment(s)
Presenting CDGC
by Leandro Lucarella on 2010- 07- 28 21:48 (updated on 2010- 07- 28 21:48)- with 0 comment(s)
I've just published the git repository of my D GC implementation: CDGC. The name stands for Concurrent D Garbage Collector but right now you may call it Configurable D Garbage Collector, as there is no concurrency at all yet, but the GC is configurable via environment variables :)
It's based on the Tango (0.99.9) basic GC, there are only few changes at the moment, probably the bigger ones are:
- Runtime configurability using environment variables.
- Logging of malloc()s and collections to easily get stats about time and space consumed by the GC (option malloc_stats_file [str] and collect_stats_file [str]).
- Precise heap scanning based on the patches published in bug 3463 (option conservative [bool]).
- Runtime configurable debug features (option mem_stomp [bool] and sentinel [bool]).
- Other non user-visible cleanups.
The configuration is done via the D_GC_OPTS environment variable, and the format is:
D_GC_OPTS=opt1=value:opt2=value:bool_opt:opt3=value
Where opt1, opt2, opt3 and bool_opt are option names and value is their respective values. Boolean options can omit the value (which means true) or use a value of 0 or 1 to express false and true respectively. String options have no limitations, except they can't have the : char in their values and they have a maximum value length (255 at this moment).
At the moment is a little slower than the Tango basic GC, because the precise scanning is done very naively and a lot of calls to findPool() are done. This will change in the future.
There is a lot of work to be done (cleanup, optimization and the concurrent part :), but I'm making it public because maybe someone could want to adapt some of the ideas or follow the development.
C++ template WTF
by Leandro Lucarella on 2010- 07- 25 23:22 (updated on 2010- 07- 25 23:22)- with 0 comment(s)
See this small program:
template<typename T1> struct A { template<typename T2> void foo_A() {} }; template<typename T> struct B : A<T> { void foo_B() { this->foo_A<int>(); // line 10 } }; int main() { B<int> b; b.foo_B(); return 0; }
You may think it should compile. Well, it doesn't:
g++ t.cpp -o t t.cpp: In member function ‘void B<T>::foo_B()’: t.cpp:10: error: expected primary-expression before ‘int’ t.cpp:10: error: expected ‘;’ before ‘int’
Today I've learned a new (horrible) feature of C++, foo_A is an ambiguous symbol for C++. I've seen the typename keyword being used to disambiguate types before (specially when using iterators) but never a template. Here is the code that works:
template<typename T1> struct A { template<typename T2> void foo_A() {} }; template<typename T> struct B : A<T> { void foo_B() { this->template foo_A<int>(); // ^^^^^^^^ // or: A<T>::template foo_A<int>(); // but not simply: template foo_A<int>(); } }; int main() { B<int> b; b.foo_B(); return 0; }
Note how you have to help the compiler, explicitly saying yes, believe me, foo_A is a template because it has no clue. Also note that the template keyword is only needed when A, B and A::foo_A are all templates; remove the template<...> to any of them, and the original example will compile flawlessly, so this is a special special special case.
Yeah, really spooky!
In D things are more natural, because templates are not ambiguous (thanks to the odd symbol!(Type) syntax), you can just write:
class A(T1) { void foo_A(T2)() {} } class B(T) : A!(T) { void foo_B() { foo_A!(int)(); } } void main() { B!(int) b; b.foo_B(); }
And all works as expected.
Proposition Infinity
by Leandro Lucarella on 2010- 07- 24 23:10 (updated on 2010- 07- 24 23:10)- with 0 comment(s)
I'm sorry if I'm being a little repetitive about Futurama lately, but I just saw Proposition Infinity (6ACV04) which talks about egalitarian marriage between humans and robots (obviously parodying gay marriage legalization).
Well, it turns out, in case you didn't know, in Argentina, egalitarian marriage (AKA gay marriage) is legal since July 15th. This Futurama episode was aired on the July 8th, so it was kind of premonitory (leaving out the fact that the law in Argentina was in discussion long before that :).
Anyway, cheers to all homosexual couples that can get married now in Argentina, and to all robosexual couples that will be able to get married sometime after the year 3000 =P.
The attack of the killer app
by Leandro Lucarella on 2010- 07- 22 21:08 (updated on 2010- 07- 22 21:08)- with 0 comment(s)
The attack of the killer app (6ACV03) is one of the best and geekest episodes of Futurama I've ever seen.
Making fun of iPhone and Twitter is really easy, and done everywhere now days, but Futurama does it in another level, in a level only geeks can enjoy that much. One clear example (leaving aside the title of the episode) is this little jewel:
Fry: Since when is the Internet about robbing people of their privacy?
Bender: August 6th, 1991.
Referencing the announcement of the creation of the WorldWideWeb.
Rocanrrrrrollllll n-n-n!!!
by Leandro Lucarella on 2010- 07- 21 00:02 (updated on 2010- 07- 21 00:02)- with 0 comment(s)
Hoy estuve de tour por el centro y aproveché para comprar entradas para dos bandas legendarias que se juntan para rockear. Aunque una levemente más popular que la otra, 8 veces más popular si la popularidad fuera proporcional al precio de la entrada, pero creo que el precio favorece a la banda menos conocida :P
Se trata de Pixies (apurensennn que mañana es el último día con descuento, las dos módicas gambas que sale un campo son con descuento!) y Asado Violento (apurensennnn que tocan el viernes).
Les dejaría una foto de las entradas para que se mueran de envidia, pero la razón por la cual salí a pasear en primera instancia es que mi hermosa camarita anda con problemas así que la llevé a la garantía (al negocio porque las importan ellos y Canon Argentina se lava las manos, y Canon USA también). Tengo un poco de miedo con la garantía por esto y por esto, espero que sean excepciones, aunque ya de por sí me dijeron que llame en 20 o 30 días :S. Igual debo darles un par de porotos porque fueron muy amables e hicieron tudu bom, tudu legal (me dieron comprobante con fecha, con los datos de la cámara y todo lo que les dejaba). Como buen justiciero que soy, los mantendré informados al respecto.
Por esta razón lamentablemente no habrá reporte gráfico del primer recital, espero que para el segundo ya esté todo listo.
¡Ah! También vi quietLOUDquiet, está buena, aunque me dejó una sensación amarga ver que los geniales Pixies son un rejunte de patéticos perdedores =P. Creo que Joey Santiago es el único más o menos normal (y tal vez Frank Black si no lo hubieran filmado yéndose a dormir escuchando el cassette de auto-ayuda).
Zuiikin' English
by Leandro Lucarella on 2010- 07- 18 00:20 (updated on 2010- 07- 18 00:20)- with 0 comment(s)
I spent hours laughing at this Zuiikin' English videos.
Debian unstable + amd64 + flashplugin-nonfree
by Leandro Lucarella on 2010- 07- 17 23:25 (updated on 2010- 07- 17 23:25)- with 0 comment(s)
I've done my regular aptitude full-upgrade and noticed the f*cking Adobe Flash player stopped working for amd64.
If you are experiencing the same, take a look at the workaround here.
Flash must die, DIE!
Futurama S06
by Leandro Lucarella on 2010- 07- 16 20:54 (updated on 2010- 07- 16 20:54)- with 0 comment(s)
Today is a happy day. Even when the new Futurama season started in Comedy Central some weeks ago, I completely forgot about it and I didn't see any new episode until today.
I really missed the sensation of viewing a Futurama episode that I didn't see several times before (there were some movies, but it's not the same).
Oh! What a beautiful series! Really good first episode, very well spent 20 minutes.
Performance WTF
by Leandro Lucarella on 2010- 07- 14 03:47 (updated on 2010- 07- 25 03:11)- with 0 comment(s)
How do I start describing this problem? Let's try to do it in chronological order...
Introduction
I've collected a bunch of little programs to use as a benchmark suite for the garbage collector for my thesis. I was running only a few manually each time I've made a change to the GC to see how things were going (I didn't want to make changes that degrade the performance). A little tired of this (and missing the point of having several tests using just a few), I've decided to build a Makefile to compile the programs, run the tests and generate some graphs with the timings to compare the performance against the current D GC (Tango really).
The Problem
When done, I noticed a particular test that was notably slower in my implementation (it went from ~3 seconds to ~5 seconds). Here is the result (see the voronoi test, if you can read the labels, there is some overlapping because my effort to improve the graph was truncated by this issue :).
But I didn't recall it being that way when running the test manually. So I ran the test manually again, and it took ~3 seconds, not ~5. So I started to dig where the difference came from. You'll be surprised by my findings, the difference came from executing the tests inside the Makefile!
Yes, take a look at this (please note that I've removed all output from the voronoi program, the only change I've made):
$ /usr/bin/time -f%e ./voronoi -n 30000 3.10 $ echo 'all:' > Makefile $ echo -e '\t$C' >> Makefile $ make C="/usr/bin/time -f%e ./voronoi -n 30000" /usr/bin/time -f%e ./voronoi -n 30000 5.11 $
This is not just one isolated run, I've tried hundreds of runs and the results are reproducible and stable.
Further Investigation
I don't remember exactly how I started, but early enough, noticing that the Tango's basic GC didn't suffered from that problem, and being my GC based on that one, I bisected my repository to see what was introducing such behaviour. The offending patch was removing the difference between committed and uncommitted pages in pools. I can see that this patch could do more harm than good now (I didn't tried the benchmark when I did that change I think), because more pages are looped when working with pools, but I can't see how this would affect only the program when it's executed by Make!!!
I had a patch that made thing really nasty but not a clue why they were nasty. I've tried everything. First, the obvious: use nice and ionice (just in case) to see if I was just being unlucky with the system load (very unlikely since I did hundreds of runs in different moments, but still). No change.
I've tried running it on another box. Mine is a Quad-Core, so I've tried the Dual-Core from work and I had the same problem, only the timing difference were a little smaller (about ~4.4 seconds), so I thought it might be something to do to with the multi-cores, so I've tried it in a single core, but the problem was the same (~10.5 seconds inside make, ~7 outside). I've tried with taskset in the multi-core boxes too. I've tried putting all the CPUs with the performance governor using cpufreq-set too, but didn't help.
Since I'm using DMD, which works only in 32 bits for now, and since my box, and the box at work are both 64 bits, I suspected from that too, but the old AMD is 32 bits and I see the problem there too.
I've tried valgrind + callgrind + kcachegrind but it seems like valgrind emulation is not affected by whatever difference is when the program is ran inside make because the results for the run inside and outside make were almost identical.
I've tried env -i, just in case some weird environment variable was making the difference, but nothing.
I've tried strace too, to see if I spotted anything weird, and I saw a couple of weird things (like the addresses returned by mmap being suspiciously very different), but nothing too concrete (but I think inspecting the strace results more thoughtfully might be one of the most fertile paths to follow). I took a look at the timings of the syscalls and there was nothing taking too much time, most of the time is spent in the programs calculations.
So I'm really lost here. I still have no idea where the difference could come from, and I guess I'll have to run the tests from a separate shell script instead of directly inside make because of this. I'll ask to the make developers about this, my only guess is that maybe make is doing some trickery with the scheduler of something like that for the -j option. And I'll take a look to the offending patch too, to see if the performance was really degraded and maybe I'll revert it if it does, no matter what happen with this issue.
If you have any ideas on what could be going on, anything, please let me know (in a comment of via e-mail). Thanks :)
Update
I've posted this to the Make mailing list, but unfortunately didn't got any useful answer. Thanks anyway to all the people that replied with nice suggestions!
Update
Thanks Alb for the investigation, that was a 1/4kg of ice-cream well earned =P
A couple of notes about his findings. An easy way to trigger this behaviour is using the command setarch, the option -L changes the memory layout to ADDR_COMPAT_LAYOUT, see the commit that introduced the new layout for more details.
The call to setrlimit(RLIMIT_STACK, RLIM_INFINITY) by Make (which has a reason) triggers that behaviour too because the new layout can't have an unlimited stack, so using ulimit (ulimit -s unlimited) causes the same behaviour.
The same way, if you type ulimit -s 8192 ./voronoi as a command in a Makefile, the effect is reverted and the command behaves as outside the Makefile.
Part of the mystery is solved, but a question remains: why the test is so address-space-layout dependant? It smells like a GC bug (present in the basic GC too, as other tests I've done show the same odd behaviour, less visibly, but still, probably because of the removal of the distinction between committed and uncommitted memory patch).
Update
Last update, I promise! =)
I think I know what is adding the extra variance when the memory layout is randomized: false pointers.
Since the GC is conservative, data is usually misinterpreted as pointers. It seems that are address spaces that makes much more likely that simple data is misinterpreted as a valid pointer, at least for the voronoi test. This is consistent with other tests. Tests with random data notably increases their variance among runs and are pretty stable when the memory layout is not randomized.
I'll try to give the patch to integrate precise heap scanning a try, and see if it improves things.
What remains a mystery is what happened with the committed memory distinction, now I can't reproduce the results. I made so many measures and changes, that maybe I just got lost in a bad measure (for example, with the CPU using the ondemand governor). I've tried again the tests with and without that change and the results are pretty the same (a little better for the case with the distinction, but a really tiny difference indeed).
Well, that's all for now, I'll give this post a rest =)
Update
Don't believe me, ever! =P
I just wanted to say that's is confirmed, the high variance in the timings when heap randomization is used is because of false pointers. See this comment for more details.
Blu's Muto
by Leandro Lucarella on 2010- 07- 05 00:54 (updated on 2010- 07- 05 03:30)- with 0 comment(s)
Here is Muto (an ambiguous animation painted on public walls), a stop motion animation by the street artist Blu:
You can also download it in HD (it's CC licensed) via Bittorrent.
As a side note, parts of this film has been done in Buenos Aires, particularly very close to my actual and previous homes. There are a quite a few of other Blu paintings in both neighborhoods, some can be viewed in his home page:
I'd always wanted to take some pictures to all that nice graffiti, but never did. Maybe I should.
By the way, I've end up in this video via a top 10 stop motion videos in youtube. Not all videos are great, but some really are, I recommend viewing at least number 1, 2 (Muto :), 3, 4, 7, 9 and 10.
Enjoy!
Update
Blu just released a new video (with another scene in Buenos Aires, I can't tell where, but I can recognize the trash bins and sidewalks =):
Alemanes
by Leandro Lucarella on 2010- 07- 03 22:41 (updated on 2010- 07- 03 22:41)- with 2 comment(s)
Empezamos así:
Y terminamos así:
Que se le va a hacer... A chuparla, a seguiarla mamando hasta el 2014.
Pixies @ Argentina
by Leandro Lucarella on 2010- 07- 02 12:38 (updated on 2010- 07- 02 12:38)- with 0 comment(s)
From http://www.pixiesmusic.com/:
Pixies are Coming to Argentina!Wednesday, October 6, 2010Buenos Aires, ArgentinaLuna Parkticketing information to be announced shortly....
Whoa!
Bacap
by Leandro Lucarella on 2010- 07- 02 01:02 (updated on 2010- 07- 02 01:02)- with 0 comment(s)
I've published my backup script (and named it Bacap, which is how it sounds when you pronounce "backup" in Spanish ;), as it suddenly became used by somebody else and received some patches =)
It has a simple home page for those wanting to see what is it about. I won't be doing formal releases thought, since is such a simple script, that would be overkill (just be thankful it has a git repo and a home page ;).
Delegates and inlining
by Leandro Lucarella on 2010- 06- 28 15:30 (updated on 2010- 06- 28 15:30)- with 0 comment(s)
Sometimes performance issues matter more than you might think for a language. In this case I'm talking about the D programming language.
I'm trying to improve the GC, and I want to improve it not only in terms of performance, but in terms of code quality too. But I'm hitting some performance issues that prevent me to make the code better.
D support high level constructs, like delegates (aka closures). For example, to do a simple linear search I wanted to use this code:
T* find_if(bool delegate(ref T) predicate) { for (size_t i = 0; i < this._size; i++) if (predicate(this._data[i])) return this._data + i; return null; } ... auto p = find_if((ref T t) { return t > 5; });
But in DMD, you don't get that predicate inlined (neither the find_if() call, for that matter), so you're basically screwed, suddenly you code is ~4x slower. Seriously, I'm not joking, using callgrind to profile the program (DMD's profiler doesn't work for me, I get a stack overflow for a recursive call when I try to use it), doing the call takes 4x more instructions, and in a real life example, using Dil to generate the Tango documentation, I get a 3.3x performance penalty for using this high-level construct.
I guess this is why D2's sort uses string mixins instead of delegates for this kind of things. The only lectures that I can find from this is delegates are failing in D, either because they have a bad syntax (compare sort(x, (ref X a, ref X b) { return a > b; }) with sort!"a < b"(x)) or because their performance sucks (mixins are inlined by definition, think of C macros). The language designer is telling you "don't use that feature".
Fortunately the later is only a DMD issue, LDC is able to inline those predicates (they have to inhibit the DMD front-end inlining to let LLVM do the dirty work, and it definitely does it better).
The problem is I can't use LDC because for some unknown reason it produces a non-working Dil executable, and Dil is the only real-life program I have to test and benchmark the GC.
I think this issue really hurts D, because if you can't write performance critical code using higher-level D constructs, you can't showcase your own language in the important parts.
The IT Crowd S04
by Leandro Lucarella on 2010- 06- 26 23:38 (updated on 2010- 06- 26 23:38)- with 0 comment(s)
The IT Crowd is back, a new season (4) has started yesterday.
Hurray!
Youtube, corneta, botón
by Leandro Lucarella on 2010- 06- 26 21:52 (updated on 2010- 06- 26 21:52)- with 0 comment(s)
Youtube agregó un botón a los videos que es una pelotita de fútbol que todo lo que hace es agregarle ruido de cornetas (¿¡ma qué vuvuzela ni vuvuzela!?) de fondo al video.
Genial! Para cagarlos a trompadas...
Página de la FIFA
by Leandro Lucarella on 2010- 06- 24 13:25 (updated on 2010- 06- 24 13:25)- with 0 comment(s)
¡Qué verga que es la página de la FIFA!
Solo quería compartir ese pensamiento con ustedes...
DMD 64 bits
by Leandro Lucarella on 2010- 06- 21 14:37 (updated on 2010- 07- 17 15:37)- with 0 comment(s)
Big news: DMD 64 bits support has just been started! It almost shadows the born of the new public DMD test suite (but I think the latter if far more important in the long term).
Update
Mr. Orkester
by Leandro Lucarella on 2010- 06- 16 01:43 (updated on 2010- 06- 16 01:43)- with 0 comment(s)
Me gusta Indiefolks (si bien no puedo dejar de pensar en los precursores, como The Black Cab Sessions o La Blogotheque's Concerts à Emporter cuando lo veo).
Hoy descubrí a Mr. Orkester gracias a ellos:
Directo desde Noruega nos llega Sebastian Uul, más conocido como MR. ORKESTER y que se gana la vida viajando por todo el mundo tocando en la calle, en este caso hace parada en Buenos Aires.
Con formato multi-instrumentista cuenta con una batería casera colgada en la espalda, guitarra acústica, armónica, pandereta en pie derecho. Posee una energía y una personalidad que lo convierten en uno de los exponentes más originales de la música urbana moderna.
En este caso y a pedido de él, nos fuimos hasta el puente de la facultad de derecho donde Mr Orkester siempre quiso tocar pero que debido a la falta de gente no le convenía.
Sebastian provoca una curiosidad pocas veces vista en artistas callejeros; algo me dice que dentro de poco tiempo esos cables que cuelgan de su guitarra y la armónica oxidada se van a cambiar por escenarios más acordes a la calidad musical que representa.
Es un artista, siempre dispuesto a trasmitir alegría y energía positiva en cada tema que toca. Con una voz desgarradora, nos recuerda al gran "Tom Waits" y nos regala este URBAN LIVE con más personalidad hasta la fecha.
Más:
Together
by Leandro Lucarella on 2010- 06- 13 18:54 (updated on 2010- 06- 13 18:54)- with 0 comment(s)
Solid new Album from The New Pornographers: Together. I will not say much more, if you now them, this new album won't disappoint you. If you don't know them, give them a try.
Probably my favourites are the catchy whistling of Crash Years, and the ballady My Shepherd.
How can you don't love FLOSS?
by Leandro Lucarella on 2010- 06- 12 00:11 (updated on 2010- 06- 12 00:11)- with 0 comment(s)
Let me tell you my story.
I'm moving to a new jabber server, so I had to migrate my contacts. I have several jabber accounts, collected all over the years (I started using jabber a long time ago, around 2001 [1]; in that days ICQ interoperability was an issue =P), with a bunch of contacts each, so manual migration was out of the question.
First I thought "this is gonna get ugly" so I thought about using some XMPP Python library to do the work talking directly to the servers, but then I remember 2 key facts:
- I use Psi, which likes XML a lot, and it has a roster cache in a file.
- I use mcabber, which has a FIFO for injecting commands via the command line.
Having this two facts in mind, the migration was as easy as a less than 25 SLOC Python script, without any external dependencies (just Python stdlib):
import sys import xml.etree.ElementTree as et def ns(s): return '{http://psi-im.org/options}' + s tree = et.parse(sys.argv[1]) accounts = tree.getroot()[0] for account in accounts.getchildren(): roster_cache = account.find(ns('roster-cache')) if roster_cache is None: continue for contact in roster_cache: name = contact.findtext(ns('name')).strip().encode('utf-8') jid = contact.findtext(ns('jid')).strip().encode('utf-8') print '/add', jid, name print '/roster search', jid g = contact.find(ns('groups')).findtext(ns('item')) if g is not None: group = g.strip().encode('utf-8') print '/move', group
Voilà!
Now all you have to do is know where your Psi accounts.xml file is (usually ~/.psi/profiles/<your_profile_name>/accounts.xml), and where your mcabber FIFO is (usually ~/.mcabber/mcabber.fifo, but maybe you have to configure mcabber first) and run:
python script.py /path/to/accounts.xml > /path/to/mcabber.fifo
You can omit the > /path/to/mcabber.fifo first if you have to take a peek at what mcabber commands will be executed, and if you are happy with the results run the full command to execute them.
The nice thing is it's very easy to customize if you have some notions of Python, for example, I didn't want to migrate one account; adding this line just below the for did the trick (the account is named Bad Account in the example):
if account.findtext(ns('name')).strip() == 'Bad Account': continue
Adding similar simple lines you can filter unwanted users, or groups, or whatever.
And all of this is thanks to:
Thank god for that!
[1] | A few people will be interested in this, but I think the ones that are will appreciate this link :) (in spanish): http://www.lugmen.org.ar/pipermail/lug-org/2001-December/004482.html |
Les Mentettes Orchestra @ Ciudad Emergente 2010
by Leandro Lucarella on 2010- 06- 08 23:56 (updated on 2010- 06- 08 23:56)- with 0 comment(s)
Les Mentettes, in Orchestra formation, at Ciudad Emergente 2010.
Excellent show, even when they clearly needed a little more space. =)
Release: Mutt with NNTP Debian package 1.5.20-8luca1
by Leandro Lucarella on 2010- 06- 07 02:12 (updated on 2010- 06- 07 02:12)- with 2 comment(s)
I've updated my Mutt Debian package with the NNTP patch to the latest Debian Mutt package.
If you have Debian testing/unstable and amd64 or i386 arch, just download and install the provided packages.
For other setups, here are the quick (copy&paste) instructions:
ver=1.5.20 deb_ver=$ver-8luca1 url=https://llucax.com.nyud.net/proj/mutt-nntp-debian/files/latest wget $url/mutt_$deb_ver.dsc $url/mutt_$deb_ver.diff.gz \ http://ftp.de.debian.org/debian/pool/main/m/mutt/mutt_$ver.orig.tar.gz sudo apt-get build-dep mutt dpkg-source -x mutt_$deb_ver.dsc cd mutt-$ver dpkg-buildpackage -rfakeroot # install any missing packages reported by dpkg-buildpackage and try again cd .. sudo dpkg -i mutt_${deb_ver}_*.deb mutt-patched_${deb_ver}_*.deb
See the project page for more details.
Breathtaking Sculptures Made Out of A Single Paper Sheet
by Leandro Lucarella on 2010- 06- 03 22:50 (updated on 2010- 06- 04 04:17)- with 2 comment(s)
What every programmer should know about memory
by Leandro Lucarella on 2010- 06- 01 23:53 (updated on 2010- 06- 01 23:53)- with 0 comment(s)
This LWN large article looks like a very interesting read (specially for people like me that have a very vague idea about modern memory systems):
Ulrich Drepper recently approached us asking if we would be interested in publishing a lengthy document he had written on how memory and software interact. We did not have to look at the text for long to realize that it would be of interest to many LWN readers. Memory usage is often the determining factor in how software performs, but good information on how to avoid memory bottlenecks is hard to find. This series of articles should change that situation.
The original document prints out at over 100 pages. We will be splitting it into about seven segments, each run 1-2 weeks after its predecessor. Once the entire series is out, Ulrich will be releasing the full text.
The full paper in PDF format is also available.
RSS feed (and other problems) fixed
by Leandro Lucarella on 2010- 06- 01 00:08 (updated on 2010- 06- 01 00:08)- with 0 comment(s)
After moving my home page (and this blog) from home to a proper (VPS) hosting, there were some problems because I have to migrate from Apache to LIGHTTPD.
The RSS feed was affected, so if you read this blog using an aggregator, you probably didn't received any updates in the last weeks. I also fixed some other problems that made the feed not W3C valid. Fortunately now it is. =)
Cloud Cult
by Leandro Lucarella on 2010- 05- 29 19:11 (updated on 2010- 05- 29 19:11)- with 0 comment(s)
For some unknown reason I had a new album by Cloud Cult (Feel Good Ghosts (Tea-Partying Through Tornadoes)) which I resisted to hear for about 2 years because I thought it was Coldcut! I didn't hear Coldcut very much either to be honest, because the little I heard I didn't like a lot.
Well, it turns out from time to time I like to hear my music collection in random order, and I was impressed by a song by Cloud Cult (and I still thought it was Coldcut until I started writing this post =P).
So I'm hearing the complete album and is plain genius, I'll have to check out their other albums soon.
The band have some very nice curiosities too. From Last.fm:
The band’s founder and singer Craig Minowa has a degree in Environmental Science, and his environmental, political, and social awareness is reflected in much of Cloud Cult’s music.
In 1997, lead singer Craig Minowa formed Earthology Records on his organic farm, powered by geothermal energy and built partially from reclaimed wood and recycled plastic. This nonprofit label uses only recycled materials and donates all profits to environmental charities. The band also tours in a biodiesel van.
6 Degrees of Black Sabbath
by Leandro Lucarella on 2010- 05- 28 23:50 (updated on 2010- 05- 28 23:50)- with 0 comment(s)
I think everyone know the Six Degrees of Kevin Bacon and The Oracle of Bacon. Well, now we have the same but for music connections!
Meet 6 Degrees of Black Sabbath.
It's easier to find paths with more than 6 degrees ;)
Nuevo hogar
by Leandro Lucarella on 2010- 05- 26 23:33 (updated on 2010- 05- 26 23:33)- with 0 comment(s)
Bicentenario
by Leandro Lucarella on 2010- 05- 26 05:00 (updated on 2010- 05- 26 21:00)- with 0 comment(s)
200 years from the Revolución de Mayo, the main parade in charge of Dicky James, creator of De La Guarda and Fuerzabruta.
More (and better) photos here.
Grey Oceans
by Leandro Lucarella on 2010- 05- 24 19:15 (updated on 2010- 05- 24 19:15)- with 0 comment(s)
The CocoRosie sisters are back with a new album, Grey Oceans. After seeing their new video, I guess nobody would wonder why their music is labeled as freak folk.
Weird stuff! =P
It's been some time since I was surprised by a video. It reminds me of videos like Closer, almost any video from Tool, Teardrop, Black Hole Sun and the later Peacebone. One wonders where these people get their imagination (besides hard drugs, of course).
Bicentenario
by Leandro Lucarella on 2010- 05- 21 15:18 (updated on 2010- 05- 21 15:18)- with 0 comment(s)
Mural Bicentenario (flash) del canal Encuentro.
Todavía no lo vi en detalle como para formarme una opinión fuerte, pero lo poco que vi se ve bastante bien hecho y con contenidos sensatos.
Copyleft
by Leandro Lucarella on 2010- 05- 21 01:06 (updated on 2010- 05- 21 01:06)- with 0 comment(s)
LDC and LLVM 2.7
by Leandro Lucarella on 2010- 05- 19 23:32 (updated on 2010- 05- 19 23:32)- with 0 comment(s)
The lady and the reaper
by Leandro Lucarella on 2010- 05- 18 22:38 (updated on 2010- 05- 18 22:38)- with 0 comment(s)
TPB
by Leandro Lucarella on 2010- 05- 18 15:11 (updated on 2010- 05- 18 15:11)- with 0 comment(s)
After a couple of days of downtime, TPB sais:
OTOH, one of the creators launched, a couple of months ago, Flattr (from Wikipedia):
Flattr is a project started by Peter Sunde and Linus Olsson. Users will be able to pay a small monthly amount and then click buttons on sites to share out the money they paid in among those sites, sort of like an Internet tip jar. The minimum users will have to pay is 2 euros. Sunde said, "the money you pay each month will be spread evenly among the buttons you click in a month. We want to encourage people to share money as well as content."
In the beginning of the service Flattr itself will take a 10% of all the users monthly flatrate. It's currently in a closed beta but users can sign up for a beta invite code on their own site.
Let's see how it goes...
Romanzo Criminale
by Leandro Lucarella on 2010- 05- 17 01:01 (updated on 2010- 05- 17 01:01)- with 0 comment(s)
Description stolen from Wikipedia:
Romanzo Criminale (Crime Novel) is an Italian-language film released in 2005, directed by Michele Placido, a criminal drama, it was highly acclaimed and won 15 awards. It is based on Giancarlo De Cataldo's 2002 novel, which is in turn inspired by the Banda della Magliana true story. The Magliana gang was one of the most powerful Italian criminal associations, dominating Rome's drug, gambling and other kinds of crime activities from the early 1970s to 1992 (death of Enrico De Pedis). The gang's affiliates start their career kidnapping rich people, drug dealing (hashish, cocaine, heroin, etc.) from the 70s they started working with the Italian secret service, fascists, terrorists, the Sicilian Cosa Nostra, Camorra and many more. Some gang members are still alive, as inmates of an Italian prison, or justice collaborators (Massimo Carminati, Maurizio Abbatino).
Highly recommended.
Boogie
by Leandro Lucarella on 2010- 05- 16 23:00 (updated on 2010- 05- 16 23:00)- with 0 comment(s)
Sr. Tomate!
by Leandro Lucarella on 2010- 05- 15 04:17 (updated on 2010- 05- 15 04:17)- with 0 comment(s)
Sr. Tomate! is a great psychotic-rock-folk band from La Plata, Buenos Aires, Argentina. You can (legally and freely) download all their albums from Mandarina Records website (consider making a donation if you like them ;).
First time I've seen them live. Very nice show, excelente performance, full of energy!
Debugging C++ with less pain
by Leandro Lucarella on 2010- 05- 14 23:52 (updated on 2010- 05- 14 23:52)- with 0 comment(s)
It turns out GDB 7.0+ can be extended through Python scripts, for instance, to add pretty-printers. And it turns out GCC 4.5 comes with some good pretty-printers for GDB.
Do you want to see the result of that combination?
$ cat -n p.cpp 1 2 #include <string> 3 #include <vector> 4 #include <map> 5 6 int main() 7 { 8 std::string s = "hello world"; 9 std::vector<std::string> v; 10 v.push_back(s); 11 v.push_back("nice"); 12 std::map<std::string, std::vector<std::string> > m; 13 m[s] = v; 14 v.push_back("yeah"); 15 m["lala"] = v; 16 return 1; 17 } 18 $ g++ -g -o p p.cpp $ gdb -q ./p (gdb) break 16 Breakpoint 1 at 0x400f86: file p.cpp, line 16. (gdb) run Starting program: /tmp/p Breakpoint 1, main () at p.cpp:16 16 return 1; (gdb) print m $1 = std::map with 2 elements = { ["hello world"] = std::vector of length 2, capacity 2 = {"hello world", "nice"}, ["lala"] = std::vector of length 3, capacity 3 = {"hello world", "nice", "yeah"} } (gdb)
Nice, ugh?
The only missing step is configuration, because most distribution don't do the integration themselves yet (or don't have packages with the scripts).
Here are 3 quick steps to make it all work:
$ mkdir ~/.gdb # can be stored anywhere really $ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python ~/.gdb/python $ cat << EOT > ~/.gdbinit python import sys sys.path.insert(0, '/home/$HOME/.gdb/python') from libstdcxx.v6.printers import register_libstdcxx_printers register_libstdcxx_printers (None) end EOT
That's it!
If like to suffer once in a while you can get the raw values using /r:
(gdb) print /r m $2 = {_M_t = { _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool>> = {<No data fields>}, <No data fields>}, _M_header = { _M_color = std::_S_red, _M_parent = 0x6070b0, _M_left = 0x6070b0, _M_right = 0x607190}, _M_node_count = 2}}}
Looks more familiar? I guess you won't miss it! =P
TestDisk
by Leandro Lucarella on 2010- 05- 14 19:56 (updated on 2010- 05- 14 19:56)- with 0 comment(s)
I accidentaly removed a couple of files from a FAT partition, and even when undeleting files from a FAT patition is possible from ancient times, it took me some time to find a tool that worked in Linux and was packaged.
So in case you find yourself with this very same need, search no more: meet TestDisk.
Pequeñas victorias
by Leandro Lucarella on 2010- 05- 12 22:48 (updated on 2010- 05- 12 22:48)- with 0 comment(s)
¡Pero costosas!
Por un lado tal vez recuerden mi disco muerto, que finalmente hoy, después de 3 meses, hoy me han cambiado. Por un lado estoy extremadamente agradecido a Western Digital porque me reconoció la garantía de un disco que estaba claramente fuera de los términos, creyendo en mi buena fe. Pero por otro me queda un gustito amargo por lo... no sé como explicarlo, ineficientes tal vez, que han sido manejando las cosas acá (por la empresa ISS).
Si bien siempre fueron muy amables, me hicieron dar cincuenta mil vueltas innecesarias. Diciéndome una y otra vez que el disco estaba fuera de garantía, cuando yo me puse en contacto con ellos unas vez que WD aceptó mi disco, y a pesar de haberles pasado el número de incidente en reiteradas ocasiones. Todo se solucionó cuando me pasaron un teléfono (0-800-444-0839, ténganlo porque les puede ser útil) para hablar directamente con WD y todo lo que tuve que hacer fue pasarle el número de incidente donde lo aprobaban y listo. Pero después de eso ISS me seguía diciendo que no tenían aprobación para recibirlo.
Finalmente me lo terminaron tomando, según ISS de onda. No sé que pasó, si realmente fue un mal manejo de WD (me resulta raro porque siempre que hablé con ellos me dieron el OK en horas) o si los de ISS son unos panchos (me inclino más por esto), pero lo bueno es que ya tengo mi reemplazo en la mano (todavía no lo probé pero al menos no vino golpeado XD).
Por otro lado tal vez recuerden mi sesión de terapia abierta al público rant sobre la casa de azulejos de reposición Cepillo, también luego de tres meses hoy logré que me devuelvan la plata. Sin comentarios sobre esto, ya dije todo en el otro post.
Audience 2 (mom and dad taking pictures)
by Leandro Lucarella on 2010- 05- 10 03:26 (updated on 2010- 05- 10 03:26)- with 0 comment(s)
Luciana Tagliapietra 2
by Leandro Lucarella on 2010- 05- 10 03:26 (updated on 2010- 05- 10 03:26)- with 0 comment(s)
Luciana Tagliapietra 1
by Leandro Lucarella on 2010- 05- 10 03:25 (updated on 2010- 05- 10 03:25)- with 0 comment(s)
Luciana Tagliapietra and her band (don't pay attention to the drums).
Boring, boring show. I don't mean to be rude, but I don't know know how she got there. Maybe if you are an emo teenager you might enjoy it.
Vaqueros Paganos 9
by Leandro Lucarella on 2010- 05- 10 03:18 (updated on 2010- 05- 10 03:18)- with 2 comment(s)
Vaqueros Paganos 8
by Leandro Lucarella on 2010- 05- 10 03:14 (updated on 2010- 05- 10 03:14)- with 0 comment(s)
Vaqueros Paganos 7
by Leandro Lucarella on 2010- 05- 10 03:10 (updated on 2010- 05- 10 03:10)- with 0 comment(s)
Vaqueros Paganos 6
by Leandro Lucarella on 2010- 05- 10 03:08 (updated on 2010- 05- 10 03:08)- with 0 comment(s)
Vaqueros Paganos 5
by Leandro Lucarella on 2010- 05- 10 03:07 (updated on 2010- 05- 10 03:07)- with 0 comment(s)
Vaqueros Paganos 4
by Leandro Lucarella on 2010- 05- 10 03:05 (updated on 2010- 05- 10 03:05)- with 0 comment(s)
Audience
by Leandro Lucarella on 2010- 05- 10 03:03 (updated on 2010- 05- 10 03:03)- with 0 comment(s)
Vaqueros Paganos 3
by Leandro Lucarella on 2010- 05- 10 03:03 (updated on 2010- 05- 10 03:03)- with 0 comment(s)
Vaqueros Paganos 2
by Leandro Lucarella on 2010- 05- 10 03:02 (updated on 2010- 05- 10 03:02)- with 0 comment(s)
Vaqueros Paganos 1
by Leandro Lucarella on 2010- 05- 10 03:01 (updated on 2010- 05- 10 03:01)- with 0 comment(s)
Anfiteatro Eva Perón
by Leandro Lucarella on 2010- 05- 10 02:54 (updated on 2010- 05- 10 02:54)- with 0 comment(s)
New section
by Leandro Lucarella on 2010- 05- 10 02:48 (updated on 2010- 05- 10 02:48)- with 0 comment(s)
I like my flickr, but I reached the limit of 200 photos. I have a few options:
- Pay USD25/year for a pro account.
- Look for another image hosting.
- Don't care about old photos not being shown.
- Start hosting the photos myself.
Since I'm starting to pay a hosting for my home page (and this blog), I'll go with option 4 :)
I'll use this same blog for that, but I will use the pic tag. I've created a new feed in feedburner, so you can use directly that one. The photos will not have a language tag (they will probably be always in english), this way the other feeds (en, es and D) will not get polluted by photos; so if you're reading this post trough one of those and you want to see the photos I'll post, you probably want to switch to the general feed or subscribe to the new feed too.
Name FAIL
by Leandro Lucarella on 2010- 05- 09 23:40 (updated on 2010- 05- 09 23:40)- with 0 comment(s)
Failed... Twice!
Ciudad Emergente 2010
by Leandro Lucarella on 2010- 05- 09 16:45 (updated on 2010- 05- 09 16:45)- with 2 comment(s)
Ya está disponible el calendario de la edición 2010 de Ciudad Emergente, del 2 al 6 de junio.
La tercera edición de Ciudad Emergente reúne novedad, atractivo y variedad en todas las expresiones de la cultura joven: música, cine, poesía, danza y arte callejeros, arte digital, moda. Durante 5 días, en los cómodos espacios y salas del Centro Cultural Recoleta, se podrá ver un completo panorama de lo nuevo, aquello que merece ser descubierto, el arte es su estado más puro. Y vivo.
Cosas que quiero ir a ver yo:
- Les Mentetes Orchestra
- Inside The Smiths
- Blur: No Distance Left to Run
- Tal vez Intima
- Tal vez Nairobi + Mad Profesor
- Roskilde
- Suspensivos Inflamables
- Morrissey: Who Put the ‘M’ In Manchester
- Los Reyes del Falsete
- Festival de los Viajes
- The T.A.M.I. Show
- Tal vez Fuera de limite crew "Street and urban dance"
- The Devil and Daniel Johnston
Y veremos que hay en el show sorpresa =P
Enjoy!
Carlos Muñoz
by Leandro Lucarella on 2010- 05- 04 03:10 (updated on 2010- 05- 04 03:10)- with 0 comment(s)
I took this picture from Parc Güell at Barcelona.
Take the advice and go to his blog, it has great graffiti artwork.
Mapa2
by Leandro Lucarella on 2010- 05- 02 16:03 (updated on 2010- 05- 02 16:03)- with 0 comment(s)
Hace un tiempo que había dejado de usar el Mapa Interactivo de (la Ciudad de) Buenos Aires porque Google Maps ahora tiene información de las calles de la ciudad y es mucho más rápido. Sin embargo, a Google Maps le faltan muchas cosas que el mapa de la ciudad tiene, como información de líneas de colectivo, etc., aunque acceder a esa información es muy rebuscado y tedioso, por lo que cuando necesitaba saber como ir a algún lado usaba ComoViajo (o la vieja y querída Guía T), a pesar de seguir lejos de lo ideal.
En fin, toda esta introducción es solo para comentar (a los que todavía no lo sepan) que hace un tiempo está disponible en BETA (digno de Web 2.0) el nuevo Mapa Interactivo de Buenos Aires, que es mucho más rápido que el anterior, se puede consultar como llegar de un lugar a otro usando transporte público (colectivos, subtes y trenes) y bastante más información útil.
Enjoy!
GDB will support the D programming language
by Leandro Lucarella on 2010- 04- 28 18:48 (updated on 2010- 04- 29 20:07)- with 6 comment(s)
Greate news! I think I can say now that GDB will support the D programming language soon (basically name demangling and pretty-printing some data types, like strings and dynamic arrays; if you're looking for the D extension to DWARF, you'll have to wait a little longer for that).
The D support patch was started by John Demme a long time ago, and finished by Mihail Zenkov, who was in charge of merging the patch to the current development branch of GDB and going through the review process.
In the words of Joel Brobecker:
The patch is approved (good job!).
I hope the patch is committed soon, so we can have it in the next GDB release.
Congratulations and thanks to all the people involved in both the patch itself and the review process.
Rincón del arte: El Milagro del Padre Flato
by Leandro Lucarella on 2010- 04- 28 04:18 (updated on 2010- 04- 28 04:18)- with 0 comment(s)
Warning
Este post puede resultar ofensivo si usted es religioso, le recomiendo dejar de leer aquí. Si es cabeza dura y sigue leyendo, si se ofende por el texto es mi culpa, pero si se ofende por la pintura, es culpa de los suyos, así que replantéese las cosas, ¿vió?
Con este post inauguro una nueva sección cultural en este blog: el Rincón del arte.
En esta primera entrega podemos observar una joya, una obra maestra hallada en los Musei Vaticani.
Se trata de nada menos que el niño Jesús obrando uno de sus más piadosos milagros, la salvación del Padre Flato, que estaba siendo atormentado hace meses por un malestar estomacal diabólico.
Pero siempre hay una historia más detrás de cualquier obra de esta genialidad. En este caso la historia es triste; lamentablemente ni el Padre Flato ni el niño Jesús habían visto una familia de ciervos que se encontraban felizmente pastando en la orilla, justo detrás del Padre al momento del milagro. Perecieron tristemente asfixiados.
Pero la controversia no termina aquí, muchos expertos aseguran que no se trataría del niño Jesús sino del Pitufo Enrique. Probablemente nunca sabremos la verdad.
Palabras argentas que provienen del portugués
by Leandro Lucarella on 2010- 04- 27 12:29 (updated on 2010- 04- 27 12:29)- with 0 comment(s)
Todos sabemos que el castellano que se habla en Argentina (y más en particular probablemente en Buenos Aires) está muy influenciado por el italiano. Algunas palabras también vienen del francés, pero no tenía tan clara la influencia del portugués.
Por ejemplo "coima" en portugués es "multa" y "buraco" es "agujero".
¿Qué loco, no?
Se dice doses y treses
by Leandro Lucarella on 2010- 04- 27 00:12 (updated on 2010- 04- 27 00:12)- with 0 comment(s)
Hoy en el trabajo un compañero nos comentaba que el plural de "dos" y "tres" era "doses" y "treces". Todos lo miramos con cara de desconfianza, pero nos aseguro que se lo había dicho su profesora de lengua en el secundario, con lo que lo miramos con más cara de desconfianza todavía.
Pero bueno, hice la tarea y leí el artículo sobre plurales en la RAE y efectivamente es "doses" y "treses", o de forma más general:
Sustantivos y adjetivos terminados en -s o en -x. Si son monosílabos o polisílabos agudos, forman el plural añadiendo -es: tos, pl. toses; vals, pl. valses, fax, pl. faxes; compás, pl. compases; francés, pl. franceses. En el resto de los casos, permanecen invariables: crisis, pl. crisis; tórax, pl. tórax; fórceps, pl. fórceps. Es excepción a esta regla la palabra dux, que, aun siendo monosílaba, es invariable en plural: los dux. También permanecen invariables los polisílabos agudos cuando se trata de voces compuestas cuyo segundo elemento es ya un plural: ciempiés, pl. ciempiés (no Marca de incorrección.ciempieses); buscapiés, pl. buscapiés (no Marca de incorrección.buscapieses), pasapurés, pl. pasapurés (no Marca de incorrección.pasapureses).
Todo muy lindo (bah, medio feo decir "me saqué dos doses"). ¿Pero cómo distingo (al hablar) si me están diciendo el plural de "dos" o de "doce" (o de "tres" o "trece")? ¡Por contexto no sale, son dos números!
En fin, ante la duda si quieren decir el plural de una palabra terminada en "s", agréguenle el "es" al final, van a sonar brutos pero tiene buenas chances de decirlo bien =P
PD: El corrector ortográfico del VIM me está resaltando "treses" como si estuviera mal escrito! No hay problema:
/treses zg
Back to business
by Leandro Lucarella on 2010- 04- 26 23:49 (updated on 2010- 04- 26 23:49)- with 0 comment(s)
I'm back from a 1.5 month trip to Europe (half working, half vacations :). I hope I can find some time to start posting again...
Cepillo te cepilla
by Leandro Lucarella on 2010- 03- 06 01:12 (updated on 2010- 03- 06 01:12)- with 3 comment(s)
Esto es, además de un nuevo rant, un servicio para la comunidad. Vengo a advertirles que:
NUNCA, JAMÁS, COMPREN UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Se los repito por si no quedó claro:
NUNCA, JAMÁS, COMPREN UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Cepillo es una casa que vende azulejos de reposición. Es decir, de esos que tenés que comprar cuando un pelotudo te rompe el baño al pedo cuando se podía arreglar desde la cocina sin romper azulejos, y gracias a que los hijos de puta de los fabricantes de azulejos cambian de modelo todos los putos días, haciendo imposible conseguir un azulejo que se hacía hace más de un par de años.
En fin, queda en Córdoba 5285 y en la puerta dice que están hasta las 19 pero en realidad están hasta las 18:30, así que si salís del laburo y llegás justito unos minutos antes de las 19, no te gaste, porque va a estar cerrado. Igual no querés llegar temprano tampoco, porque recordá:
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Si a pesar de esta advertencia cometés el error de llegar temprano y comprar algo ahí, compralo solo si te lo dan en el momento, porque si lo tienen que ir a buscar al depósito te van a boludear y bicicletear y cuando te lo traigan, luego de haber prometido que es igual y que vos confíes es su palabra como buen inocentudo que sos, te lo vas a llevar a tu casa para darte cuenta que no coincide ni el color ni el tamaño. En ese momento vas a darte cuenta que tampoco te dieron factura. Es por esto que:
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Pero puede pasar que uno se equivoque y lo haga, y si luego de todo esto cuando le llevás las cosas que te dieron mal te dicen que te las cambian, que te lo traen al otro día, no les creas, porque te van a tener dos o tres semanas llamando y llamando a un celular, haciéndote preguntar por un tal Jorge que vas a encontrar solo en 1 de cada 10 llamadas (cuando no te atiende un contestador al tercer ring). Jorge te va a decir que no lo pudo conseguir todavía hasta que se de cuenta que no te vas a dar por vencido y un martes te va a decir que el jueves a la tarde lo va a tener pero que llames a la mañana por las dudas. El jueves vas a llamar porque seguís teniendo fe en la raza humana, pero el infrahumano de Jorge te va a decir que no llegó, que llega mañana (viernes) seguro, y le vas a decir "Bueno, mañana paso directo entonces a última hora" y te va a decir que pases. Y adiviná qué? Sí, vas a pasar y no lo van a tener. Por lo tanto te recomiendo que:
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Pero si lo hacés, Jorge te va a decir que lo va a buscar al depósito, que ya está ahí, y mañana lo tenés seguro y le vas a decir que mañana no podés ir y que luego te vas de viaje así que lo vaya a buscar ahora y luego de insistirle varias veces te va a decir que lo va a buscar cuando cierra (a las 18:30, no a las 19 como dice el cartel) y que te lo lleva. Te va a anotar la dirección y el teléfono y hasta te va a pedir indicaciones para llegar y te va a decir que a las 19 te llama. Pero no va a llamar. Así que espero que ya estés convencido de:
NUNCA, JAMÁS, COMPRAR UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
Si aún así lo hiciste, y pasaste por todo eso, vas a insistir y llamar al celular mugriento en el que te atiende una persona random cada vez que llamás y obviamente no te va a atender Jorge, te va a atender otro hijo de puta que te va a decir que está en el depósito y que está cerrando y que no sabe nada de Jorge. Cuando le pidas un teléfono donde ubicar a Jorge te va a decir que no tiene y que él lo va a ver en una hora y media y que le dice que te llame. Ya con la inocencia por el piso no le vas a creer una palabra pero no vas a tener mucho para hacer hasta volver de tu viaje.
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
NUNCA, JAMÁS, COMPRES UN AZULEJO DE REPOSICIÓN EN LA CASA CEPILLO
PD: Obviamente esto no es autoreferencial.
DMD(FE) speller (suggestions)
by Leandro Lucarella on 2010- 03- 05 15:07 (updated on 2010- 03- 05 15:07)- with 0 comment(s)
After some repetitive discussions about how to improve error messages (usually inspired by clang), it looks like now the DMD frontend can suggest the correct symbol name when you have a typo =)
Upcoming new albums
by Leandro Lucarella on 2010- 03- 02 01:31 (updated on 2010- 03- 02 01:31)- with 0 comment(s)
This year 3 of my favourite bands will be releasing a new album, and it will be the third for all of them. I think these bands have a thing in common, the first time I heard them it was very refreshing, they all given the existing sound a twist.
From older/more consecrated to newer/less known:
- Gorillaz
- I don't think this band need any presentation. Their new album is called Plastic Beach and it will be available this month (if you can't wait, you can get it using your favourite P2P network).
- Arcade Fire
I think many people don't know this band. For me is one of the greatest bands ever, really. They did a incredible, memorable presentation with Bowie, and I'll just quote this video description:
If you don´t cry watching this, you are dead inside.
=)
Their new album doesn't have a name or a release date yet, but it's supposed to be finished.
- MGMT
They have to change their name from The Management to MGMT because that name was already being used by another band. They have some weird charm. Go, read some reviews, I'm a little lazy to write more about them :)
The new album is called Congratulations and it's supposed to be released on April 13.
Do yourself a favor, listen to these bands, and let's all hope together that their new albums are as good as the previous ones.
Connections in the Knowledge Web
by Leandro Lucarella on 2010- 02- 28 01:17 (updated on 2010- 02- 28 01:17)- with 0 comment(s)
If you don't know what Connections is, you should watch it, it's really great.
When you watch Connections, you'll get a little curious about the host, James Burke. And you probably will end up searching about him, and finding out what else he has done. At that point, you will discover the Knowledge Web project, go to their home page and watch the presentation video.
Mutt patched with NNTP support for Debian (and friends), now with home page!
by Leandro Lucarella on 2010- 02- 23 00:35 (updated on 2010- 02- 23 00:35)- with 0 comment(s)
I've updated my Mutt Debian package with the NNTP patch to the latest Debian Mutt package. I've put up a small home page for the project too, so it's easier to find.
I'll post new releases here anyway, so stay tuned =)
First accepted patch for DMD(FE)
by Leandro Lucarella on 2010- 02- 22 16:45 (updated on 2010- 02- 22 16:45)- with 0 comment(s)
Some time ago I wrote a partial patch to fix DMD's issue 3420:
Allow string import of files using subdirectories
const data = import("dir/data.txt");Specifying -J. for DMD 1.041 is sufficient to allow this to compile.
I couldn't find an option for DMD 1.042 and newer which would allow this to compile.
It's a partial patch because it's implemented only for Posix OSs. The patch passed unnoticed until changeset 389, when the restrictions on string imports became even more evident, and I commented the issue in the DMD internals ML. Fortunately Walter accepted the patch; well accept might be a very strong word, since Walter never really accepts a patch, he always write a new patch based on the submitted one, don't even dream on getting some feedback about it.
But well, that's how he works. At least now in Posix (he said he didn't find a way to do this in Windows) there are no silly restrictions on string imports, without sacrificing security =)
Bluetooth USB Adapter ES-388
by Leandro Lucarella on 2010- 02- 22 02:02 (updated on 2010- 02- 22 02:02)- with 0 comment(s)
This is mostly a reminder to myself, since I'm throwing away the blister and I want to be able to identify this little gadget in case I have to buy another one in the future.
The is a very cheap USB Bluetooth adapter. It's made in China and don't even have a brand name, the blister just says Bluetooth USB Adapter ES-388. Linux report it as:
Bus 004 Device 003: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter
And it works very well using a stock Linux kernel; just plug it and enjoy!
Here is what the blister looks like:
In Argentina you can buy it for as low as ARS 10 (USD 3) so I guess in another coutries they are practically given away for free =P
La odisea del pasaporte italiano
by Leandro Lucarella on 2010- 02- 14 00:25 (updated on 2010- 02- 14 00:25)- with 0 comment(s)
A riesgo de convertir definitivamente este blog en un rlog (rant log =P), voy a comentarles mis lindas aventuras tratando de sacar un pasaporte italiano sin tener DNI o cédula con menos de 5 años de antigüedad.
Un poco de contexto
Por alguna razón mística, los italianos piden para sacar el pasarpote un documento con menos de 5 años de antigüedad (DNI o cédula), como dice en su página web. Previendo eso, y dado que mi DNI tiene bastaaaante más de 5 años, fui a hacer la cédula (que no tenía) y pasaporte alrededor del 22 de diciembre (excelente época para hacerla ya que estamos, había muy poca gente). El pasaporte habrá llegado a los 20 días y la cédula todavía la estoy esperando. Siendo que viajo para las uropas el 8 de marzo, y el pasaporte italiano tarda unos 20 días más me pareció una buena idea ir a ver si lo podía sacar con DNI y comprobante de cédula en trámite (llamar por teléfono no es opción, te atiende un contestador diciendote que vayas al consulado -.-).
Para los que le gusten las cosas más gráficas, acá tienen un mapa del recorrido.
Hacia el consulado
El consulado abre sus puertas a las 7:30 y empieza a atender a las 8:00, así que siguiendo el consejo de gente que ya ha pasado por esto, me propuse ir bien temprano.
Me puse el despertador a las 6 y 6:07 estaba yendo al baño a tratar de convertirme de una masa amorfa y somnolienta en una persona nuevamente. Casi lo logré.
Me preparé un desayuno rápido porque sabía que iba a ser un día largo. Salí no mucho después de las 6:30.
93, subte B hasta florida, un par de cuadras, y a las 7:45 ya estaba haciendo la cola en la puerta del consulado italiano. La gente ya empezaba a entrar pero ya habían unas 15 personas haciendo cola afuera. Llegamos al guardia de seguridad privada y a la persona adelante mío ya le pedían DNI o cédula con menos de 5 años. A mí me miraron el DNI y me dejaron pasar. Detector de metales, orden de apagar el celular y estoy haciendo cola adentro, al menos ahora con aire acondicionado.
Todavía la atención al público no empezaba, pero el clima tenso ya se sentía. Hordas de cuasi-argento-italianos invadiendo el pueblo consular, con sus 3 únicos soldados y blandiendo sus lanzas para aguantar el ataque ferozmente. Más allá de la posición defensiva, se alcanzaba a ver la espadas enfundadas pero lista para liquidar a cualquier enemigo que llegue al cuerpo a cuerpo [*]. Además de los 3 soldados se ve un general en control de la situación, más feroz aún que éstos, en estado de frenética atención a cualquier movimiento extraño y exhibiendo sus condecoraciones orgullosamente.
Se hacen las 8 y la cola empieza a avanzar. Se desata la batalla y ante tal clima bélico, y siendo que yo iba a implorar piedad, ya podía oler mi derrota.
8:30 y es mi turno de verme cara a cara con el enemigo. Explico mi situación y sin más recibo el primer ataque, una hoja con los requisitos para sacar el pasaporte y un seco "ahí están los requisitos, en la web también, no los cumplís... NEXT!". Le vuelvo a explicar y le pregunto si no hay alguien más con quien pueda hablar si no hay algún otro documento que pueda presentar y me dice "no, vas a tener que ir a la Policía Federal, es problema de ellos no nuestro". Sin piedad. Un hombre en la fila que escucha a lo lejos mis alaridos intenta darme una mano al grito de "si vas acá cerca al registro de las personas con el pasaje te lo sacan en el día". Con esa información en mano me pareció razonable llevar mi lucha a otros horizontes, a terreno argentino, al menos por un rato.
Hacia el registro de las personas (1)
Por malas indicaciones hago un par de cuadras de más pero llegó. Luego de presenciar una discusión de un pobre tipo que lo citaron a las 8 pero le dijeron que la persona que tenía que ver no llegaba hasta las 9:30 pregunto por mi situación, pero me informan que ahí manejan DNI, nada de cédula (supongo que el tipo de la cola habrá pensando que tenía el DNI en trámite). Pregunto cuanto lleva hacer el DNI y me dicen que 5 días así que lo empiezo a considerar una opción. Me mandan a la vuelta por otra puerta para que me informen. Explico de nuevo. Me dan un número de teléfono y me dicen que saque turno, que son 5 días hábiles luego de tener el turno, que se hacen maaaaaas o meeeeeenos 10 días. Ya no es tan tentador. Me dicen que para averiguar de la cédula vaya a Azopardo [†].
Hacia Policía Federal
Azopardo, alrededor de las 9:45, cola de al menos una cuadra (no di la vuelta manzana para ver hasta donde llegaba) para sacar número para empezar el trámite del pasaporte/cédula. Panorama desolador. Encuentro una fisura en las líneas enemigas, una ventanilla de informes de estado del trámite con solo 5 refugiados. Espero. Me atienden.
No, mirá, tu cédula todavía está para imprimir, no hay forma de acelerar el trámite porque están trabadas por falta de materia prima.
OOOOOOOOOK! Rápido y sin dolor. Miro el papel con el 0-800 para sacar turno para el DNI con más cariño.
Hacia el registro de las personas (2)
Me acerco al locutorio más cercano. Llamo. Todas las líneas ocupadas. Llamo. Me comunico, marco 2 para sacar turno. Suena 3 o 4 veces, me dicen "Gracias por llamar", me cortan. Repito 4 o 5 veces. La dirección es Paseo Colón 1093, menos de una decena de cuadras de distancia. Noto una ampolla prominente de tanto caminar en ojotas. Me mando igual.
Paseo Colón al 1000, 10:00 aprox. Tipo con pinta de patovica de boliche discutiendo con gente que se queja, detrás de unas vallas (con pinta de boliche), al frente de un edificio grande (sin pinta de boliche). Guardia de seguridad privada a un costado. Voy a preguntarle al guardia; me dice que hable con el patovica. Le comento. Me dice "llamá al número, no hay otra forma de hacer el DNI, sacá turno". Le digo que llamo y no me atienden y me dicen que hay millones de argentinos llamando, que siga tratando. Una señora se acerca y comenta misma experiencia, pero que está hace días sin poder comunicarse. Misma respuesta. Se aproxima un tipo con pinta de mejor onda. Con mejor onda nos dice lo mismo. Más gente quejándose.
A punto de sacar la bandera blanca y dado que todavía estoy en horario (serían las 10:15 y el consulado cierra las puertas a las 11), decido en un último impulso suicida volver a la lucha internacional, con intenciones de explicar que mis recursos para vencer al poderoso ejército argentino fueron agotados, tratando de inducir un poco de empatía y ganar un aliado.
Vuelta al consulado
Avanzo pero siento como un tiro en el pié: explotó la ampolla y ya no puedo caminar. Me arrastro hasta un puesto médico, compro un par de curitas en un quiosco (algo me dice que una no va a ser suficiente). Me repongo, sigo, pero como acumulé millas de tanto viaje a pie y la distancia a recorrer es grande, gasto mis puntos en un pasaje en 62. Vuelvo a llegar al consulado, luego de tener que re-acomodarme el vendaje que se sale frecuentemente (todavía no estoy dispuesto a sacrificar mi segunda curita).
10:30, vuelvo a pasar los controles, apagar el celular, pero esta vez evito la cola (mucho menor que antes, por lo que les recomiendo que si tienen que ir a hacer el trámite lo hagan a esta hora) y voy a hablar directamente con el general a cargo. Mala onda. Mucha, como siempre. Sigue en su postura inquebrantable a pesar de explicarle que ya el gobierno argentino me había dejado morir desangrado. Le digo que no puedo entender como el gobierno italiano está dispuesto a hacer lo mismo. No hay caso, se enoja más y cierra la cortina del diálogo bruscamente. Saco la bandera blanca y emprendo la retirada de la derrota.
Recuerdo que debía preguntarle algo más. Junto valor y me vuelvo a acercar con la bandera blanca en alto para que al menos me dirija la palabra. Le digo que tengo una consulta no relacionada a la anterior y me escucha. Le digo:
¿Me podrías decir al menos cual es el tiempo mínimo que puede tardar el pasaporte italiano? Porque si me llega la cédula así sé si vale la pena venir de nuevo o no, porque me tengo que pedir permiso en el trabajo para hacer el trámite.
Me pregunta varias veces cuando me va a llegar, sin entender mis varias explicaciones de que no tengo ni la más puta idea. Le pido que me informe un tiempo mínimo. Insiste, le pongo ejemplos:
¿Si me llega 10 días antes de viajar vengo a hacerlo o ya no va a estar a tiempo?
Le digo.
No, no, seguro que no. Si te llega 15 días antes le puedo preguntar al funcionario (sic) si lo pueden hacer.
Me responde.
Un par de intentos fallidos por pedirle de hablar yo directamente con el funcionario y me dice que le va a preguntar ella si me lo pueden hacer en 15 días si me llegara la cédula.
...
Pasan unos minutos. Suspenso.
...
Vuelve y me pide el DNI y el certificado de cédula en trámite. Empiezo a saborear la victoria silenciosamente y empiezo a enrollar la bandera blanca disimuladamente y sin que nadie lo note para que no generar más conflictos internacionales.
Me dice que pase por donde estaba su computadora y comienza a explicarme que me van a hacer el pasaporte igual, como súper-mega-excepción. Evidentemente el funcionario es un tipo con dos dedos de frente y le dijo:
¡Dejate de romper las pelotas y hacele el maldito pasaporte al pobre tipo!
El enemigo de pronto deja de ser tal y empieza a comportarse como un compatriota, como un servidor, como un amigo. Me explica simpáticamente que después le llevo la cédula cuando me llega y está todo bien, incluso si me llega cuando vuelva del viaje. Sonríe, increíble cambio de humor. El domicilio de DNI no es el actual, pero mira con cara compinche como diciendo "bueh, n'importa" y me dice que haga el cambio de domicilio y le lleve el documento y una fotocopia al retirar el pasaporte. Lleno el formulario, me da número y empieza la espera de un ciudadano italiano común y corriente.
El trámite
Los tiempos de argentino indocumentado quedaron atrás; ahora solo me queda esperar que otras 31 personas sean atendidas, apenas unas 2 horas de espera. La espera me permitió saborear mi pequeña victoria; costosa, agotadora y tardía, pero victoria al fin. Y bien sabrosa :). Luego media hora de trámite en sí y otra media hora para esperar otro momento triste, abonar los $482 (€85) concluyeron la batalla. Por alguna razón la mayor parte de la gente no tenía espera en la caja, pero evidentemente el destino creía que no había tenido suficiente así que me siguió poniendo a prueba un poco más.
13:30. Salgo, aprovechando que estaba en el centro y tenía que vender algunos dólares y que a solo unas cuadras está la comunidad más grande de casas de cambio del país, aprovecho.
El cambio
Miro un poco las pizarras y entro en una casa de cambio que compra a $3.84. Cola, espera y burocracia convierten unos pocos dólares en lo que parece una cantidad suculenta de pesos en alrededor de una hora de magia.
Con la mitad del dinero en cada cachete del trasero (en los bolsillos del pantalón, por supuesto), decido emprender la retirada. Las paradas de colectivos se mueven por la ampliación del subte E, tengo que caminar más y mis viejas heridas se resienten. El dolor no me deja más remedio que gastar mi segundo y último vendaje. 140 (con aire al menos! Aleluya!) y el viaje de vuelta se hace al menos llevadero.
Corolario
Be warned, los tanos son muy jodidos y los argentinos inútiles =P
[*] | Esto es posta, es muy loco el clima que hay ahí, se siente como una rivalidad en el aire muy inexplicable, o explicable porque el público en general es idiota, pero la postura defensiva de los que atendían parecía injustificadamente agresiva. Como que te trataban de idiota, de enemigo antes de darte aunque sea unos 5 segundos de dudas para ver si realmente lo eras, o si eras una persona con 2 dedos de frente. |
[†] | Azopardo al 600 está la Policía Federal, donde se saca cédula y pasaporte. |
Generating Good Syntax Errors
by Leandro Lucarella on 2010- 02- 13 22:04 (updated on 2010- 02- 13 22:04)- with 0 comment(s)
Here is a nice article by Russ Cox explaining how to plug nice syntax errors to parser generators, specifically Bison. The gc compiler suite for Google's Go now is using that trick.
Me cortaron las piernas
by Leandro Lucarella on 2010- 01- 31 05:37 (updated on 2010- 02- 13 22:07)- with 3 comment(s)
Luego de una semana entera quemando DVDs para hacer backup del disco como si no hubiera un mañana, el sábado a la mañana fui con mi disco rígido y mi linda factura a reclamar la garantía, con esa mezcla de esperanza y de fatalismo al mismo tiempo. Esperanza porque todavía está en garantía y fatalismo por lo de cambio de firma y porque en general que te tomen una garantía nunca es fácil
Hora y cuarto de viaje, llego 15 minutos antes de que cierren (con un poco de sensación de éxito por haber logrado llegar en horario =P), le doy el disco y me hacen la gran Mutombo. El tema es que el disco tenía un golpe en una esquina, vino así cuando lo compré y como un boludo inocente, le pasé un badblocks y un test del S.M.A.R.T. y como pasó todo no dije nada.
Moraleja: jamás aceptar algo golpeado por más que ande porque después te metés la garantía en el upite.
Todavía me queda probar directamente en Western Digital, que parece que tienen un representante acá que hace los RMA, pero todo el proceso se hace desde la web oficial de WD y te dicen que lo mandes por correo todo empaquetado para que lo manden a USA, y la verdad que hacer todo ese circo para que me digan "nou, flacou, tu discou está golpeadou" es medio al pedo, así que el lunes veré si puedo averiguar algo llamando, pero me veo mal. Al menos encontré un caso de éxito en un foro (pero claro, su disco seguro no estaba golpeado -.-).
Igual descubrí que el disco tiene sectores de repuesto por si se caga alguno. El tipo te mueve el sector roto a uno de "repuesto" solo, pero solamente cuando escribe (no cuando lee). Probé de sobreescribir uno de los archivos que tiraba error de lectura y se arreglo. Claro que es una gran cagada porque la confiabilidad del disco se fue al tacho, pero al menos si no aumenta mucho la cantidad de sectores rotos lo puedo seguir usando como un disco para guardar boludeces que no me molestan mucho si las pierdo.
En fin, espero que WD se copé y me lo cambie :S
Volver a mi disco IDE donde tenía la partición root antes de reinstalar Debian por la nueva compu (pasé de 32 bits a 64) no fue trivial, tuve una lucha contra mkinitramfs de un par de horas hasta averiguar por que no me podía montar el rootfs que está sobre un LVM. El tema era que el initramfs no se avivaba que ahora tenía que cargar el módulo IDE en vez de SATA, así que tuve que agregar los módulos a mano, pero costó.
Update
Luego de pedir soporte a WD por la página web (mandando fotitos del rígido y toda la lola, me informaron que me iban a tomar el RMA de todas formas =). Todavía no tengo el disco nuevo en mis manos (ni siquiera mande el roto todavía) así que no canto victoria pero es un gran paso.
200 cool points para la gente de WD.
Tales of Mere Existence
by Leandro Lucarella on 2010- 01- 29 01:44 (updated on 2010- 01- 29 01:44)- with 0 comment(s)
Tales of Mere Existence is a nice series of comics and videos by Lev Yilmaz.
Here is the last animation, which is very close to how I feel about God:
Google's Go will be part of GCC
by Leandro Lucarella on 2010- 01- 28 14:40 (updated on 2010- 01- 28 14:40)- with 0 comment(s)
Wow! Google's Go (remember there is another Go) programming language front-end for GCC has been accepted for merging into GCC 4.5.
Just when there was some discussion (started by Jerry Quinn [*]) in D on how the DMD front-end could be pushed to be merged in GCC too, but DigitalMars (Walter) doesn't want to give away the copyright of his front-end (they are exploring some alternative options though). Maybe the inclusion of Google's Go makes Walter think harder for a solution to the legal problems :).
[*] | He reported a lot of bugs in the language specification because he was planning to start a new D front-end, which can be donated to the FSF for inclusion in GCC. |
DMD beta
by Leandro Lucarella on 2010- 01- 28 00:01 (updated on 2010- 01- 28 00:01)- with 2 comment(s)
After some discussion [*] in the D newsgroup about the value of having release candidates for DMD (due to the high number of regressions introduced in new versions mostly), Walter agreed to make public what he called beta versions of the compiler, which he sent privately to people who asked for them (like some Tango developers).
The new DMD betas are announced in a special mailing list (available through Gmane too). It seems like Walter want to keep the beta releases with some kind of secrecy, or only for people really interested on them (the zip files are even password protected! But the password is announced in a public mailing list, that doesn't make much sense =/). I think he should encourage people to try them as much as possible instead, but one step at the time, at least now people have a way to test the compiler before it's released.
I can say without fear that the experience has been very successful already, even when there is no DMD release yet that came from a beta pre-release, you can see in the beta mailing list that multiple regressions have been discovered and fixed because this new beta releases. I think the reliability of the compiler has been increased already. Is really interesting to see how the quality of a product increases proportionally to the level of openness and the numbers of eyes doing peer review.
The new DMD release should be published very soon, as all the regressions seems to be fixed now and big projects like Tango, GtkD and QTD compiles (a lot of focus on fixing bugs that prevented the later to compile has been put into this release, specially from Rainer Schuetze, who submitted a lot of patches).
So kudos for a new era in D, I think this is another big milestone for having a reliable compiler.
[*] | I'm sure there was previos requests for having release candidates, I know I asked for it, but I can't find the threads in the archives =) |
Brasero chupa
by Leandro Lucarella on 2010- 01- 26 23:51 (updated on 2010- 01- 26 23:51)- with 0 comment(s)
Con el disco roto no queda otra que backup, así que fui a comprar unos 100 DVDs vírgenes (me había quedado justo sin ninguno) y me puse a grabar.
En general usaba K3B, pero nunca me gustó demasiado como se ven las aplicaciones de KDE, y ya que había instalado de 0 y todavía no había instalado nada de KDE todavía, dije:
Ppfff, vamos a probar Brasero que ya viene instalado.
Se ve lindo, mucho más simple que K3B (cosa que mientras que no necesite hacer nada raro, como en este caso, me agrada). Pero por alguna razón mística, grababa a 2x promedio (2.6x máximo). Esto se traduce en media hora por DVD, y teniendo en cuenta que tengo que grabar unos 50 DVD supongo, serían 25 horas (¡más de un día!) grabando en neto. Entre que tengo que trabajar, comer, dormir y vivir en general, creo que estaría una semana grabando. No escala.
Pero antes grababa bien esto, el problema es que cambiaron demasiadas variables como para averiguar que se rompió:
- Nuevo mother
- Nuevo CPU
- Nuevo cable IDE
- Nueva instalación de Debian
- Nueva tipo de DVD (-R, cuando siempre compraba +R)
- Nuevo entorno de escritorio (todavía no pude instalarme ion3 así que estoy con GNOME)
Y tal vez me olvido de algo más...
Lo primero que noté es que la lectora tiraba un error no muy alegre:
cdrom: This disc doesn't have any tracks I recognize! hda: command error: status=0x51 { DriveReady SeekComplete Error } hda: command error: error=0x54 { AbortedCommand LastFailedSense=0x05 } hda: possibly failed opcode: 0xa0 end_request: I/O error, dev hda, sector 0 Buffer I/O error on device hda, logical block 0
Pero solo cuando ponía un DVD vírgen. Haciendo un init 1 y repitiendo la prueba, los errores feos desaparecen, así que solo debe ser que el GNOME se está haciendo el pillo y leyendo cosas que no le corresponden o algo así (igual me llama la atención que el kernel no haga algo para evitarlo más felizmente, pero ni idea, tal vez es normal).
Así que me llevé un DVD vírgen al trabajo para ver si me vendieron caca redonda y finita. Pero no, anduvo bien, así que me traje la grabadora y un DVD vírgen del laburo de otra marca para probar. Antes de hacer tanto lío, y siendo que GNOME (o alguien) ya estaba metiendo la pata, se me ocurrió volver a ponerme los huevos, hacer el init 1 y grabar un DVD a lo machote usando growisofs. Y !voilà! anduvo a 6.6x promedio (que parece más que sensato para un DVD de 8x teniendo en cuenta que usa CAV). Bien, no hizo falta probar la grabadora del laburo y queda afuera de sospecha todo el hardware... ¡Fiuuuu!
Proximo paso, volver al runlevel 2 y ver si alguien está interfiriendo con mi grabadora mientras grabo, usando growisofs nuevamente (mi sospecha era que GNOME trataba de leer mientras escribía y eso la frenaba o algo así, vaya uno a saber). Pero no, también aduvo, así que no me queda otra que pensar que es el salame del Brasero es que la está cagando.
Long story short, acá está el reporte de bug, veremos que dicen =P
Por ahora, como quiero seguir evitando KDE (y volver a poner los huevos en el estante ;), instalé el GnomeBaker y anda bien.
Disco roto
by Leandro Lucarella on 2010- 01- 25 23:56 (updated on 2010- 01- 25 23:56)- with 0 comment(s)
Si fuera gracioso podría poner esto en el Failblog bajo el título HARD DRIVE FAIL.
Lamentablemente no tiene ninguna gracia, al menos para mí =P, pero al menos comprobé que el GNOME se está volviendo muy pillo para informar cosas al usuario. ¡Bien por él!
La buena noticia es que se supone que el disco está en garantía, la mala es que es en la otra punta de la capital de luntes a juércoles de 9:3.14 a 9:π (aunque está todo por verse porque el lugar donde lo compré se llamaba Abelyn pero eso ahora te manda a una interfaz de administración de algún hosting perdido; pero parece que cambió de nombre a PC Retail y que me toman la garantía igual; veremos cuando termine de hacer backups y lo lleve...).
Casi que aplacó por completo mi alegría de haberme decido y comprado un lindo combo Intel DG41RQ+Q8400+2GiB, que todavía no pude casi usar porque estuve todo el fin de semana moviendo gigas y gigas de acá para allá.
(Re)Instalando Debian me topé de nuevo con el bug que hace que todas las fuentes en QT se vean como el traste. ¡Grrrr! ¡Como lo odio! [*].
[*] | Tip rápido, desinstalar los paquetes ttf-arphic-uming y ttf-wqy-zenhei y voilà. |
Master and servant, let's go to bed
by Leandro Lucarella on 2010- 01- 20 22:08 (updated on 2010- 01- 21 00:00)- with 0 comment(s)
Don't you find Master and servant and Let's go to bed way too similar?
According to Wikipedia, Master and servant (1984 single) is newer than Let's go to bed (1982 single), so I guess Depeche Mode honors The Cure with his song ;) Or maybe it was really a coincidence? Who knows...
Rocknrolla
by Leandro Lucarella on 2010- 01- 16 23:24 (updated on 2010- 01- 16 23:24)- with 0 comment(s)
Yesterday I saw Rocknrolla, the last movie written (and directed) by Guy Ritchie. It doesn't disappoint, if you like Guy Ritchie's style, you'll get it:
The movie have some non-conventional kind of mafia/gangsters, lots of eccentric characters (including a crazy one that fucks everything up), a good twisted story, and a very visually-attractive style.
And that maybe the only thing you can criticize about the movie, it's very similar Guy Ritchie's previous work, but it's a great movie anyway.
I liked the piano scene (that's everything I'll say, no spoilers here ;) the most; great scene! :)
Luca-o-meter: 8/10 points.
Ideone.com (compiling online)
by Leandro Lucarella on 2010- 01- 15 00:19 (updated on 2010- 01- 15 00:19)- with 2 comment(s)
I'm almost sure I've seen this before, at least for D, but I just found ideone.com, a simple site where you can try your code online (compile and run), for several languages, including D (DMD 2.008, pretty old, but it's something ;)
You can see my simple hello world =)
The Coral Content Distribution Network
by Leandro Lucarella on 2010- 01- 14 00:24 (updated on 2010- 01- 14 00:24)- with 0 comment(s)
What is Coral?
Coral is a free peer-to-peer content distribution network, comprised of a world-wide network of web proxies and nameservers. It allows a user to run a web site that offers high performance and meets huge demand, all for the price of a $50/month cable modem.
Publishing through CoralCDN is as simple as appending a short string to the hostname of objects' URLs; a peer-to-peer DNS layer transparently redirects browsers to participating caching proxies, which in turn cooperate to minimize load on the source web server. Sites that run Coral automatically replicate content as a side effect of users accessing it, improving its availability. Using modern peer-to-peer indexing techniques, CoralCDN will efficiently find a cached object if it exists anywhere in the network, requiring that it use the origin server only to initially fetch the object once.
One of Coral's key goals is to avoid ever creating hot spots in its infrastructure. It achieves this through a novel indexing abstraction we introduce called a distributed sloppy hash table (DSHT), and it creates self-organizing clusters of nodes that fetch information from each other to avoid communicating with more distant or heavily-loaded servers.
Seems like a nice project, just append .nyud.net to the domain of the page you want to see and that's it. Try it with this very same blog ;)
UCEP, va a estar bueno Buenos Aires
by Leandro Lucarella on 2010- 01- 12 12:22 (updated on 2010- 01- 12 12:22)- with 0 comment(s)
No es un tema nuevo, pero merece toda la difusión posible. Cito una nota del Página 12:
Los veintiséis pesados de Macri
Se especializan en desalojar a indigentes de espacios públicos y de edificios. Su característica es “tener calle”, su legalidad es tenue, sus uniformes son oscuros y sus acciones ya terminaron en la Justicia por varias denuncias.
Habla de la UCEP, o Unidad de Control del Espacio Público, algo así como un grupo de tareas encargado de limpiar a la gente en situación de calle.
Acá les dejo un video tristísimo pero muy claro:
Y acá les dejo otro que se toma las cosas con un poco más de humor pero que no es menos aterrador:
Futurama theme origins
by Leandro Lucarella on 2010- 01- 11 23:51 (updated on 2010- 01- 11 23:51)- with 0 comment(s)
I have recently found out that the Futurama opening theme was inspired in a very old experimental song by the French musicians Pierre Henry and Michel Colombier. The original song is called Psyché Rock, was created in 1967 and interpreted using bells, percussion, zithers and electronic music!
Fatboy Slim did a version of the song too.
Trip-Hop's not Dead
by Leandro Lucarella on 2010- 01- 11 00:50 (updated on 2010- 01- 11 00:50)- with 0 comment(s)
Two years ago, a new album from Portishead (Third) was released, after 10 years of silence; and Tricky released Knowle West Boy [*]. Now, we are about a month away from the release of a new Massive Attack album, after 7 years of silence (and exactly 7 years after 100th Window's release): Heligoland. Trip-hop is about quality, not quantity ;)
The new album has, as usual, have several collaborations (among others):
- Horace Andy (always there)
- Tunde Adebimpe (TV On The Radio)
- Damon Albarn (Blur, Gorillaz, The Good, the Bad & the Queen, etc)
- Guy Garvey (Elbow)
- Martina Topley-Bird (female voice in several Tricky albums)
- Adrian Utley (Portishead)
The album is already leaked, so if you are really eager to hear it, you can find it in the usual places...
[*] | But he is probably the most active big artist in the Trip-Hop scene anyways, so it's not very surprising ;) |
El Eternauta
by Leandro Lucarella on 2010- 01- 10 19:05 (updated on 2010- 01- 10 19:05)- with 0 comment(s)
If you are Argentine and like comics and science fiction, you read El Eternauta, but if you are not around here, it's most likely that you didn't (specially because, sadly, I couldn't find any English translation of the comic).
Since I'm lazy, I'll quote Wikipedia to summarize what is it about:
El Eternauta is a science fiction comics series created by Argentine comic strip writer Héctor Germán Oesterheld initially with artwork by Francisco Solano López. It was first published in Hora Cero Semanal from 1957 to 1959.
[...]
The story begins with an extraterrestrial invasion to Earth. A deadly snowfall produced by the invaders covers Buenos Aires wiping out most life in a few hours. Juan Salvo, along with a couple of friends [...] soon find out the true nature of the strange phenomenon and join an improvised resistance army to fight the invaders back. [...]
For us porteños it has a little more magic than other science fiction stories, because we are not used to stories taking place in our city, but I think it's a great story besides that.
Well, the story will hit the big screen soon, so I guess non-Spanish speaking people will be able to see a version of it after all (I'm sure the movie will be subtitled to English). Surprisingly, the director will be Lucrecia Martel, who is characterized by making slow, intensive, dramatic movies, with really dense atmospheres. I think she is an excellent director, with an extremely particular style, which is not usually associated with science fiction movies, which make me even more intrigued about this movie.
Here is an interview with Lucrecia talking about the movie (sorry, Spanish only):
And here is a proof-of-concept of the visual effects (I don't really know if this is really something done for the movie or if it is a fake, so be warned):
The risk is high, I think it could turn up being a complete disaster, or a beauty peace of art. I hope it will turn up to be the latter :)
There is another fan film project on the works theses days called Nevada (in Spanish), which is worth mentioning. You can see a small article about it in English.
La eterna búsqueda de un ISP que no apeste tanto
by Leandro Lucarella on 2010- 01- 09 00:10 (updated on 2010- 01- 09 00:10)- with 6 comment(s)
Hoy Arnet/Telecom sumó ooootra más a la lista de pedos atómicos y una vez más colmó mi paciencia [*] y tengo ganas de mandarlo bien a la mierda (pardon my french), así que estuve averiguando sobre alternativas.
Las alternativas son... Telecentro y ¿Metrotel? (porque Fibertel ya probé y no vuelvo ni aunque fuera el único proveedor sobre la faz de la tierra [†], IPLAN no llega ni a palos a mi casa y cualquier ADSL, al menos en la zona monopólica de Telecom, es considerablemente más caro que Arnet y le sigo regalando mi plata a Telecom).
El precio por Internet de 3MB no está nada mal: $70 (lo mismo que Arnet 1MB de promoción). Eso si no entendí mal, porque me tiró 400 precios distintos, porque cambia si pagas en efectivo (más caro) que si ponés débito automático por tarjeta de crédito o débito. La cagada es que la instalación sale $108 (de nuevo, ya no me acuerdo si en efectivo o con tarjeta o qué). Por otro lado, me dijeron que puedo pedir el triple play del orto que sale $150 el primer mes y luego cambiarme a solo Internet de 3MB (lo que es más barato que poner Internet de 3MB pero me da miedo que después el cambio no me lo dejen poner, o tenga que ir a dejarles una muestra de sangre y orina para que me dejen hacerlo). También me olvidé de preguntarles el upstream y si filtran puertos, si alguien lo sabe, se agradece la información; si alguien alguna vez hizo esto de cambiarse de plan con Telecentro, también se agradece la info.
Con respecto a telefonía (porque Telecom tampoco me agrada demasiado y odio su maldito monopolio), Telecentro ya no es nada tentador, por agregar línea de teléfono IP se va a $110 por mes (y baja $9 la instalación !?), $40 mangos más (con Telecom gasto unos $20, de los cuales son como $17 gasto fijo y $3 de llamadas, y además es más confiable porque no depende de Internet, ni de la luz ni de nada).
Por otro lado está Metrotel, que ofrece Internet y telefonía IP. Internet no se si llega hasta mi zona (intenté llamar al teléfono de la compañía de Internet, MetrotelIper pero me dice que no pertenece a un abonado en servicio, no sé si los de Metrotel son tan grasas que no tienen más teléfono o si Telecom no lo rutea a propósito para que no se le vayan clientes :P). Mandé un mail preguntando, vamos a ver que responden. Pero la telefonía IP que ofrecen (Metrotel ivoz), al menos para mí que casi no uso el teléfono, se ve mucho más tentadora que la de Telecentro, porque ofrecen un plan prepago, sin abono fijo (con recargas). Las llamadas al AMBA salen $0.02 +IVA el minuto según el cuadro tarifario (asumo que será 21%, por lo tanto serían $0.0242). Teniendo en cuenta que hablo alrededor de una hora y media por mes (a todo esto, creo que me están afanando porque no veo como puedo hablar tanto si casi no toco el teléfono), sería un gasto de 2 pesos y monedas. Así que llamé a Metrotel pero no me atendió nadie, no sé si porque fue un viernes tarde pero no es muy alentador (sumado a que el teléfono de MetrotelIper ni existe, de nuevo, a menos que sea todo una manganeta de Telecom para no perder clientes :P). Además también tiene el problema de la instalación cara Metrotel, activar una línea prepaga sale $170 (con una cajita ATA en comodato, creo que no existe la opción de contratar el servicio sin que te den un aparato de algún tipo, y ese es el más barato) + $10 de envío.
Se que no me van a atender mejor en ninguna de estas otras empresas, pero al menos quiero distribuir mi plata entre distintos chorros, no dársela siempre a los mismos, o al menos que me roben menos plata :P.
En fin, me encantaría saber sus experiencias con cualquiera de estas empresas (Telecentro y las distintas ramas de Metrotel), si saben el upstream o si filtran puertos o si andan bien los P2P o si conocen otros proveedores que puedan recomendar (yeah! right...).
[*] | Ahora me mandaron la factura el 7 cuando había vencido el 4, por lo que la tuve que pagar con recargo. Sabiendo que me iba a amargar más y no me iba a servir de nada y me iban a tener esperando 15 minutos (sospechosamente siempre te tienen esperando 15 minutos por reloj), pero sin poder evitarlo (hasta mis debilidades son más fuertes que yo dijo una vez Felipe), llamé para quejarme y me hicieron la gran "te tomo númeor de reclamo". |
[†] | Bueno, si son el único tal vez sí :P |
Plug Computing
by Leandro Lucarella on 2010- 01- 07 14:20 (updated on 2010- 01- 07 14:20)- with 0 comment(s)
A plug computer is a small form factor network-attached server for use in the home. It is a lower cost and lower power alternative to a PC-based home server. In effect, a plug computer is a network appliance that is fully enclosed in an AC power plug or AC adapter.
Look at this little bastard (up to 2Ghz CPU, 512MB of RAM + 512MB of flash memory, 1.8" hard drive, gigabit ethernet, SD reader, USB, Wi-fi, Bluetooth, under USD100):
Runs Linux and it's supposed to be fully open source.
I want one! =)
Merging DMD FE 1.055 in LDC
by Leandro Lucarella on 2010- 01- 07 01:09 (updated on 2010- 01- 07 01:09)- with 1 comment(s)
Motivated by a couple of long waited forward references bug fixes in the DMD front-end, I decided to experiment merging it into LDC.
The task wasn't so hard, just apply the patches, ignore changes to the back-end (mostly), resolve some conflicts and you're done!
Christian Kamm kindly helped me with a couple of doubts when resolving conflicts and I got commit access to the LDC repository in the way (thanks for the vote of confidence, even when LDC are very relaxed when giving commit access :).
However I found a changeset that was a little harder to merge: r251, which added support for appending dchar to a char[] (fixing bug 111, another long waited one). The problem was, 2 new runtime functions were added (_d_arrayappendcd and arrayappendwdarrayappendwd) but I didn't know how to tell the back-end about them.
Trying to compile Dil with the new LDC with the DMD 1.055 front-end, I discovered this change also added a regression. So I tried to fix those two issues before pushing my patches, but Christian told me I should push them first and fix the problems later. I really prefer the other way around, but I won't tell the LDC developers how to run the project :), so I did it [*].
Christian disabled the new feature later because Tango is still lacking the new runtime functions, so LDC can't do much about them yet. I filled a bug so this issue don't get lost.
I would be nice to have some feedback if you try the new merged front-end in LDC :)
[*] | I'm sorry about the lame commit messages including the diffstat output, but I did the work using git and then exported the patches to mercurial and I didn't realize the import tool didn't remove the diffstat output. |
Una especie de documental
by Leandro Lucarella on 2010- 01- 03 17:58 (updated on 2010- 01- 07 01:17)- with 0 comment(s)
Una especie de documental (or A kind of documentary in English) is a short documentary film about a very good young Argentine krautrock post-rock indie band: Go-Neko!. Their music is completely instrumental (besides some samples taken from the radio and some shouting ;) and their albums, the EP Go-Neko! and the LP Una especie de mutante (A kind of mutant), were released by Mamushka Dogs Records [*] an Argentine netlabel that release all the material under a Creative Commons (by-nc-nd 2.5 ar).
The film was made by María Luque in a trip to Rosario and you can see it online or download it here or here. Unfortunately there are no English subtitles yet, so you have to learn Spanish to see it right now ;), but I hope somebody can provide the subtitles soon. But there are no excuses not to listen to the band, so you should at least download the albums or see some online videos.
Update
María Luque tell us in the comments that english subtitles are comming soon, so stay tuned! :)
[*] | All the website content is both in Spanish and English, the English text is always in italics, below the Spanish text. |