Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

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: Que no te lleve el basurero

Qt tie­ne sus me­ca­nis­mos pa­ra crear y eli­mi­nar ob­je­tos (el ár­bol de QOb­jec­ts, smart poin­ter­s, etc.) y Py­Qt usa Py­tho­n, así que tie­ne gar­ba­ge co­llec­tio­n.

Con­si­de­re­mos un ejem­plo sim­ple:

from PyQt4 import QtCore

def finished():
    print "El proceso termino!"
    # Salir de la aplicación
    QtCore.QCoreApplication.instance().quit()

def launch_process():
    # Hacer algo asincrono
    proc = QtCore.QProcess()
    proc.start("/bin/sleep 3")
    # Cuando termine, llamar a finished
    proc.finished.connect(finished)

def main():
    app = QtCore.QCoreApplication([])
    # Lanzar el proceso
    launch_process()
    app.exec_()

main()

Si eje­cu­tás eso, te va a pa­sar es­to:

QProcess: Destroyed while process is still running.
El proceso termino!

Encima el script no termina nunca. ¡Diversión! El problema es que proc está siendo borrado al final de launch_process porque no hay más referencias a él.

És­ta es una me­jor ma­ne­ra de ha­cer­lo:

from PyQt4 import QtCore

processes = set([])

def finished():
    print "El proceso termino!"
    # Salir de la aplicación
    QtCore.QCoreApplication.instance().quit()

def launch_process():
    # Hacer algo asincrono
    proc = QtCore.QProcess()
    processes.add(proc)
    proc.start("/bin/sleep 3")
    # Cuando termine, llamar a finished
    proc.finished.connect(finished)

def main():
    app = QtCore.QCoreApplication([])
    # Lanzar el proceso
    launch_process()
    app.exec_()

main()

Al agregar un processes global y meter ahí proc, mantenemos siempre una referencia, y el programa funciona. Sin embargo, sigue teniendo un problema: nunca eliminamos los objetos QProcess.

Si bien en es­te ca­so la pér­di­da de me­mo­ria es muy bre­ve por­que el pro­gra­ma ter­mi­na en­se­gui­da, en un pro­gra­ma de ver­dad es­to no es bue­na idea.

Así que necesitamos agregar una manera de sacar proc de processes cuando no lo necesitemo. Esto no es tan fácil como parece. Por ejemplo, esto no funciona bien:

def launch_process():
    # Hacer algo asincrono
    proc = QtCore.QProcess()
    processes.add(proc)
    proc.start("/bin/sleep 3")
    # Sacamos el proceso del global cuando no lo necesitamos
    proc.finished.connect(lambda: processes.remove(proc))
    # Cuando termine, llamar a finished
    proc.finished.connect(finished)

¡En esta versión, todavía tenemos un memory leak de proc, aunque processes esté vacío! Lo que pasa es que el lambda contiene una referencia a proc.

No tengo una my buena respuesta para este problema que no involucre convertir todo en miembros de un Qbject y usar sender para saber cuál proceso es el que termina, o usar QSignalMapper. Esa versión la dejo como ejercicio para el lector ;-)

Es sobre Divididos, debe ser en dos partes.

Sys­tem Me­ss­age: ERRO­R/3 (<s­­tri­n­­g>, li­­ne 1)

Do­cu­ment or sec­tion may not be­gin wi­th a tran­si­tio­n.


Des­pués de mi post de ayer acer­ca de la le­tra de "Pai­sano de Hur­lin­gha­m" re­ci­bí un alu­vión de co­rrec­cio­nes y ex­pli­ca­cio­nes, que enu­me­ro a con­ti­nua­ció­n.

Opalina:

Es una re­fe­ren­cia a Opa­li­nas Hur­lin­gha­m, una fá­bri­ca abier­ta en 1948, y aban­do­na­da des­de 1994. Hay una in­te­re­san­te co­lec­ción de fo­tos de su in­te­rior en fli­ckr

La em­pre­sa fué a la quie­bra prin­ci­pal­men­te por un jui­cio pio­ne­ro so­bre da­ño am­bien­ta­l: en­ve­ne­na­ba las na­pas de la zo­na con ar­sé­ni­co.

La línea de tren:

Es el ra­mal Re­ti­ro­/­Pi­lar del fe­rro­ca­rril San Mar­tí­n, que efec­ti­va­men­te pa­sa por Hur­lin­gha­m. Mea cul­pa.

Abejas con ombú:

Las abe­jas son tra­ba­ja­do­ra­s. Om­bú es la mar­ca más co­no­ci­da de ro­pa de tra­ba­jo en Ar­gen­ti­na. Ha­bla tal vez mal de mí que no se me ocu­rrie­ra.

Sapo explota:

Mi ma­má ha­cía ex­plo­tar sapos for­zán­do­los a fu­ma­r, cuan­do era chi­ca. No he oí­do otra re­fe­ren­cia a sapos ex­plo­si­vo­s.

Si­gue sien­do un mis­te­rio el por­qué el sapo ex­plo­ta los do­min­gos a las 10.

Berretín de mayor:

Jer­ga zo­nal acer­ca de ser un ma­lan­dra.

Me acer­can ro­ck che­co, aun­que no es­lo­va­co.

Des­de ya mu­chas gra­cias por sus apor­tes!

Visto de cerca, todo está hecho de nada

Sys­tem Me­ss­age: ERRO­R/3 (<s­­tri­n­­g>, li­­ne 1)

Do­cu­ment or sec­tion may not be­gin wi­th a tran­si­tio­n.


Si tu­vie­ra 5 blogs y la ener­gía pa­ra pos­tear en to­do­s, el cuar­to se­ría "a­na­li­zan­do de­ma­sia­do la le­tra de can­cio­nes". En ho­me­na­je a ese blog que nun­ca va a exis­ti­r, es­te se­ría el pri­mer pos­t: Pai­sano de Hur­lin­gha­m, de Di­vi­di­dos (pro­ba­ble­men­te mi ban­da fa­vo­ri­ta).

Pri­me­ro, 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 pa­re­cer hay un cier­to con­sen­so (en­tre las tres per­so­nas a quie­nes les pre­gun­té), de que es­ta can­ción es la des­crip­ción de un via­je en tren.

Las le­tras de Di­vi­di­dos no se ca­rac­te­ri­zan por ser in­ter­pre­ta­bles li­neal­men­te, De he­cho, sos­pe­cho que la ma­yo­ría son sim­ple­men­te una se­rie de pa­la­bras una des­pués de la otra por­que "sue­nan bien jun­ta­s".

El pri­mer ver­so "Pai­sano de Hur­lin­gha­m" es el tí­tu­lo mis­mo de la can­ció­n, y, su­pon­go, el pro­ta­go­nis­ta de es­ta mí­ni­ma odi­sea su­bur­ba­na. "po­da ne­bli­na" es in­te­re­san­te. No en­cuen­tro (gra­cias google) nin­gu­na re­fe­ren­cia a esa fra­se fue­ra de es­ta can­ció­n. Es po­si­ble que na­die ja­más ha­ya di­cho "po­da ne­bli­na" has­ta que Mo­llo can­tó esa es­tro­fa.

Pa­ra que se ha­gan una idea de lo ra­ro que es eso, hay dos re­fe­ren­cias in­de­pen­dien­tes a "na­va­ja de­sier­ta", que son dos pa­la­bras al azar saca­das del dic­cio­na­rio. ¿En­ton­ce­s, qué es "po­da ne­bli­na"? Bue­no, si es muy tem­pra­no, hay ne­bli­na, y el pai­sano la atra­vie­s­a, la cor­ta, la po­da. Así que, ti­ran­do de los pe­los (que lo va­mos a ha­cer bas­tan­te), po­de­mos su­po­ner que nos ubi­ca tem­po­ral­men­te en una ma­dru­ga­da ne­bli­no­sa.

Más ob­vio es "mo­ne­da o bo­tó­n". Ha­bla de ha­cer tram­pa, de pa­sar un bo­tón don­de de­be­ría ha­ber una mo­ne­da. No se pue­de ha­cer eso con el ca­je­ro, ni con un ven­de­do­r, pe­ro sí se pue­de en la li­mos­na del "cie­go bi­lin­güe".

"pa­so mo­ra­le­s" es ob­via. Es la ca­lle Pa­so Mo­ra­le­s, en Vi­lla Te­sei. De he­cho esa ca­lle cor­ta la vía del tren que vie­ne de Cha­ca­ri­ta, lo que con­fir­ma que ha­bla­mos de un via­je por las vía­s.

Es di­fí­cil jus­ti­fi­car "sin la opa­li­na". De he­cho, no lo voy a in­ten­ta­r. "de Re­ti­ro a Pi­lar / bus­ca el chan­cho al cha­bó­n" es tal vez la lí­nea más ob­via: es un guar­da de tren que bus­ca a un pa­sa­je­ro que no pa­ga, y lo per­si­gue des­de Re­ti­ro a Pi­la­r. El pro­ble­ma con esa ob­vie­dad es que:

  1. El tren que ha­­ce Re­­ti­­ro­­/­­Pi­­lar no pa­­sa por Hu­r­­li­n­­gham

  2. El tren que co­r­­ta Pa­­so Mo­­­ra­­les sa­­le de Cha­­ca­­ri­­ta (y sí pa­­sa por Hu­r­­li­n­­gha­­m).

¿Es tal vez que "De Cha­ca­ri­ta a Hur­lin­gha­m" es im­po­si­ble des­de un pun­to de vis­ta de mé­tri­ca? Se­ría com­pren­si­ble si así fue­ra.

"S­apo ex­plo­ta en San Mar­tín / los do­min­gos a las die­z" es os­cu­ra. Ade­más de que nin­gu­na de las lí­neas de fe­rro­ca­rril men­cio­na­das pa­sa por San Mar­tí­n. ¡Pe­ro el re­co­rri­do Re­ti­ro­/­Pi­lar es de la lí­nea San Mar­tí­n! Si bien no lo­gra­mos es­cla­re­cer qué sapo ex­plo­ta, por­qué ni dón­de, si bien sa­be­mos cuan­do. Es­to for­ta­le­ce la hi­pó­te­sis de que el pai­sano por al­gún mo­ti­vo es­tá yen­do a Pi­la­r.

Tam­bién es san­mar­ti­nia­na la re­fe­ren­cia al "sa­ble rec­to en la es­ta­ció­n", por contra­po­si­ción al fa­mo­so sa­ble cor­vo del Ge­ne­ra­l. Que nun­ca ja­más tu­vo el gra­do de Ma­yor (as­cen­dió de ca­pi­tán a ge­ne­ra­l), lo que com­pli­ca en­ca­si­llar "be­rre­tín de ma­yo­r".

"Ca­ni­lla en el an­dén / go­tea no­ti­cias / te gri­ta el ti­tu­lar / men­ti­ras sin pi­ca­r" es di­rec­ta. Un ca­ni­lli­ta, un ca­ni­lla, es un ven­de­dor de dia­rio­s. Las ca­ni­llas go­tean, los ca­ni­lli­tas go­tean no­ti­cia­s. Gri­tan los ti­tu­la­res (aun­que creo que nin­gún ca­ni­lli­ta gri­ta los tí­tu­los des­de 1947 o al­go así). Men­ti­ras sin pi­ca­r, por­que el pa­pel no es­tá pi­ca­do, to­da­vía, por­que es un dia­rio de ho­y.

Y lle­ga­mos a la es­tro­fa fi­na­l, "A­be­jas con om­bu / via­jan­do en el pa­nal / va la tim­ba en el fur­gó­n." Me re­sis­to a dar una in­ter­pre­ta­ció­n, mas allá de que las abe­jas en el pa­nal van apre­ta­da­s, y que om­bú es una mar­ca de pa­pel pa­ra ar­mar ci­ga­rri­llo­s, que se­gu­ra­men­te la gen­te de la ban­da ha usa­do en abun­dan­cia pa­ra dro­gar­se, lo que se­gu­ra­men­te es un in­gre­dien­te im­por­tan­te en la es­cri­tu­ra de sus le­tra­s.

¿Qué con­clu­sión po­de­mos sa­car de es­te aná­li­sis? Bue­no, yo, per­so­nal­men­te, pre­fe­ri­ría no en­ten­der lo que di­cen, que Di­vi­di­dos fue­ra una ban­da de ro­ck es­lo­va­co, y po­der sen­tir la pa­ta­da en la fren­te que es es­ta can­ción sin tra­tar de en­ten­der qué ca­ra­jo es "s­apo ex­plo­ta en san mar­tí­n". Pe­ro eso es un pro­ble­ma mío.


Contents © 2000-2021 Roberto Alsina