Skip to main content

Ralsina.Me — Roberto Alsina's website

Kill the Dead (Sandman Slim, #2)

Cover for Kill the Dead (Sandman Slim, #2)

Review:

This is not a book. It's the sec­ond half of "Sand­man Slim". Read that and then de­cide if you ac­tu­al­ly want to read this sec­ond half or not.

Me, I liked it, thank you very much.

PyQt Quickie: Don't Get Garbage Collected

There is one area where Qt and Python (and in con­se­quence PyQt) have ma­jor dis­agree­ments. That area is mem­o­ry man­age­men­t.

While Qt has its own mech­a­nisms to han­dle ob­ject al­lo­ca­tion and dis­pos­al (the hi­er­ar­chi­cal QOb­ject trees, smart point­er­s, etc.), PyQt runs on Python, so it has garbage col­lec­tion.

Let's con­sid­er a sim­ple ex­am­ple:

from PyQt4 import QtCore

def finished():
    print "The process is done!"
    # Quit the app
    QtCore.QCoreApplication.instance().quit()

def launch_process():
    # Do something asynchronously
    proc = QtCore.QProcess()
    proc.start("/bin/sleep 3")
    # After it finishes, call finished
    proc.finished.connect(finished)

def main():
    app = QtCore.QCoreApplication([])
    # Launch the process
    launch_process()
    app.exec_()

main()

If you run this, this is what will hap­pen:

QProcess: Destroyed while process is still running.
The process is done!

Plus, the script never ends. Fun! The problem is that proc is being deleted at the end of launch_process because there are no more references to it.

Here is a bet­ter way to do it:

from PyQt4 import QtCore

processes = set([])

def finished():
    print "The process is done!"
    # Quit the app
    QtCore.QCoreApplication.instance().quit()

def launch_process():
    # Do something asynchronously
    proc = QtCore.QProcess()
    processes.add(proc)
    proc.start("/bin/sleep 3")
    # After it finishes, call finished
    proc.finished.connect(finished)

def main():
    app = QtCore.QCoreApplication([])
    # Launch the process
    launch_process()
    app.exec_()

main()

Here, we add a global processes set and add proc there so we always keep a reference to it. Now, the program works as intended. However, it still has an issue: we are leaking QProcess objects.

While in this case the leak is very short­-lived, since we are end­ing the pro­gram right af­ter the process end­s, in a re­al pro­gram this is not a good idea.

So, we would need to add a way to remove proc from processes in finished. This is not as easy as it may seem. Here is an idea that will not work as you expect:

def launch_process():
    # Do something asynchronously
    proc = QtCore.QProcess()
    processes.add(proc)
    proc.start("/bin/sleep 3")
    # Remove the process from the global set when done
    proc.finished.connect(lambda: processes.remove(proc))
    # After it finishes, call finished
    proc.finished.connect(finished)

In this version, we will still leak proc, even though processes is empty! Why? Because we are keeping a reference to proc in the lambda!

I don't really have a good answer for that that doesn't involve turning everything into members of a QObject and using sender to figure out what process is ending, or using QSignalMapper. That version is left as an exercise.

Es sobre Divididos, debe ser en dos partes.

Again: span­ish on­ly!


De­spués de mi post de ay­er ac­er­ca de la le­tra de "Paisano de Hurling­ham" recibí un alu­vión de cor­rec­ciones y ex­pli­ca­ciones, que enu­mero a con­tin­uación.

Opalina:

Es una ref­er­en­cia a Opali­nas Hurling­ham, una fábri­ca abier­ta en 1948, y aban­don­a­da des­de 1994. Hay una in­tere­sante colec­ción de fo­tos de su in­te­ri­or en flickr

La em­pre­sa fué a la quiebra prin­ci­pal­mente por un juicio pi­o­nero so­bre daño am­bi­en­tal: en­ve­nen­a­ba las na­pas de la zona con ar­séni­co.

La línea de tren:

Es el ra­mal Re­tiro/Pi­lar del fer­ro­car­ril San Martín, que efec­ti­va­mente pasa por Hurling­ham. Mea cul­pa.

Abejas con ombú:

Las abe­jas son tra­ba­jado­ras. Om­bú es la mar­ca más cono­ci­da de ropa de tra­ba­jo en Ar­genti­na. Habla tal vez mal de mí que no se me ocur­ri­er­a.

Sapo explota:

Mi mamá hacía ex­plotar sapos forzán­do­los a fu­mar, cuan­do era chi­ca. No he oí­do otra ref­er­en­cia a sapos ex­plo­sivos.

Sigue sien­do un mis­te­rio el porqué el sapo ex­plota los domin­gos a las 10.

Berretín de mayor:

Jer­ga zon­al ac­er­ca de ser un ma­lan­dra.

Me ac­er­can rock checo, aunque no eslo­va­co.

Des­de ya muchas gra­cias por sus aportes!

Visto de cerca, todo está hecho de nada

Sor­ry, span­ish on­ly post. But you can lis­ten to the song here


Divididos

Si tu­viera 5 blogs y la en­ergía para postear en to­dos, el cuar­to sería "anal­izan­do de­masi­a­do la le­tra de can­ciones". En hom­e­na­je a ese blog que nun­ca va a ex­i­s­tir, este sería el primer post: Paisano de Hurling­ham, de Di­vi­di­dos (prob­a­ble­mente mi ban­da fa­vorita).

Primero, la le­tra com­ple­ta:

Paisano de Hurlingham
poda neblina
moneda o botón
ciego bilingüe
paso morales fue
sin la opalina
de Retiro a Pilar
busca el chancho al chabon.
Sapo explota en San Martín
los domingos a las diez
sable recto en la estación
berretin de mayor.
Canilla en el anden
gotea noticias
te grita el titular
mentiras sin picar.
Abejas con ombu
viajando en el panal
va la timba en el furgón.

Al pare­cer hay un cier­to con­sen­so (en­tre las tres per­sonas a quienes les pre­gun­té), de que es­ta can­ción es la de­scrip­ción de un vi­a­je en tren.

Las le­tras de Di­vi­di­dos no se car­ac­ter­i­zan por ser in­ter­preta­bles lin­eal­mente, De he­cho, sospe­cho que la may­oría son sim­ple­mente una se­rie de pal­abras una de­spués de la otra porque "sue­nan bi­en jun­tas".

El primer ver­so "Paisano de Hurling­ham" es el tí­tu­lo mis­mo de la can­ción, y, supon­go, el pro­tag­o­nista de es­ta mín­i­ma odis­ea sub­ur­bana. "po­da nebli­na" es in­tere­sante. No en­cuen­tro (gra­cias google) ningu­na ref­er­en­cia a esa frase fuera de es­ta can­ción. Es posi­ble que nadie jamás haya di­cho "po­da nebli­na" has­ta que Mol­lo can­tó esa es­tro­fa.

Para que se ha­gan una idea de lo raro que es es­o, hay dos ref­er­en­cias in­de­pen­di­entes a "nava­ja de­sier­ta", que son dos pal­abras al azar sacadas del dic­cionari­o. ¿En­ton­ces, qué es "po­da nebli­na"? Bueno, si es muy tem­pra­no, hay nebli­na, y el paisano la atraviesa, la cor­ta, la po­da. Así que, tiran­do de los pe­los (que lo va­mos a hac­er bas­tan­te), pode­mos supon­er que nos ubi­ca tem­po­ral­mente en una madru­ga­da nebli­nosa.

Más ob­vio es "mone­da o botón". Habla de hac­er tram­pa, de pasar un botón donde de­bería haber una mon­e­da. No se puede hac­er eso con el ca­jero, ni con un vende­dor, pero sí se puede en la limosna del "ciego bil­ingüe".

"pa­so morales" es ob­vi­a. Es la calle Pa­so Morales, en Vil­la Te­sei. De he­cho esa calle cor­ta la vía del tren que viene de Chacar­i­ta, lo que con­fir­ma que hablam­os de un vi­a­je por las vías.

Es difí­cil jus­ti­ficar "sin la opali­na". De he­cho, no lo voy a in­ten­tar. "de Re­tiro a Pi­lar / bus­ca el chan­cho al chabón" es tal vez la línea más ob­vi­a: es un guar­da de tren que bus­ca a un pasajero que no pa­ga, y lo per­sigue des­de Re­tiro a Pi­lar. El prob­le­ma con esa ob­viedad es que:

  1. El tren que hace Re­tiro/Pi­lar no pasa por Hurling­ham

  2. El tren que cor­­ta Pa­­so Morales sale de Chacar­i­­ta (y sí pasa por Hurling­ham).

¿Es tal vez que "De Chacari­ta a Hurling­ham" es im­posi­ble des­de un pun­to de vista de métri­ca? Sería com­pren­si­ble si así fuer­a.

"S­apo ex­plota en San Martín / los domin­gos a las diez" es os­cu­ra. Además de que ningu­na de las líneas de fer­ro­car­ril men­cionadas pasa por San Martín. ¡Pero el recor­ri­do Re­tiro/Pi­lar es de la línea San Martín! Si bi­en no lo­gramos es­clare­cer qué sapo ex­plota, porqué ni dón­de, sí sabe­mos el cuán­do. Es­to for­t­alece la hipóte­sis de que el paisano por al­gún mo­ti­vo es­tá yen­do a Pi­lar.

Tam­bién es san­mar­tini­ana la ref­er­en­cia al "s­able rec­to en la estación", por con­tra­posi­ción al famoso sable cor­vo del Gen­er­al. Que nun­ca jamás tu­vo el gra­do de May­or (as­cendió de capitán a gen­er­al), lo que com­pli­ca en­casil­lar "ber­retín de may­or".

"Canil­la en el andén / gotea noti­cias / te gri­ta el tit­u­lar / men­ti­ras sin pi­car" es di­rec­ta. Un canil­li­ta, un canil­la, es un vende­dor de di­ar­ios. Las canil­las gotean, los canil­li­tas gotean noti­cias. Gri­tan los tit­u­lares (aunque creo que ningún canil­li­ta gri­ta los tí­tu­los des­de 1947 o al­go así). Men­ti­ras sin pi­car, porque el pa­pel no es­tá pi­cado, to­davía, porque es un di­ario de hoy.

Y lleg­amos a la es­tro­fa fi­nal, "Abe­jas con om­bu / vi­a­jan­do en el panal / va la tim­ba en el furgón." Me re­sis­to a dar una in­ter­pretación, mas al­lá de que las abe­jas en el panal van apre­tadas, y que om­bú es una mar­ca de pa­pel para ar­mar cigar­ril­los, que se­gu­ra­mente la gente de la ban­da ha us­a­do en abun­dan­cia para drog­a­rse, un in­gre­di­ente que sospe­cho im­por­tante en la es­crit­u­ra de sus le­tras.

¿Qué con­clusión pode­mos sacar de este análi­sis? Bueno, yo, per­sonal­mente, preferiría no en­ten­der lo que di­cen, que Di­vi­di­dos fuera una ban­da de rock eslo­va­co, y poder sen­tir la pata­da en la frente que es es­ta can­ción sin tratar de en­ten­der qué cara­jo es "s­apo ex­plota en san martín". Pero eso es un prob­le­ma mío.

UP­DATE: Al­gu­nas aclara­ciones, datos ex­tras, y un tema de rock checo, aquí


Contents © 2000-2024 Roberto Alsina