Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Python context managers: son fáciles!

Yo es­ta­ba el otro día tra­tan­do de ha­cer co­sas de she­ll scrip­ting con py­thon (co­mo par­te de un se­tu­p.­py mons­truo) y me mo­les­ta­ba que en she­ll es muy fá­cil ha­cer es­to:

cd foo
bar -baz
cd -

O es­to:

pushd foo
bar -baz
popd

O es­to:

(cd foo && bar -baz)

Y en py­thon te­nia que ha­cer es­to, que es lar­go y feo:

cwd = os.getcwd()
try:
    os.chdir('foo')
    os.system('bar -baz')
finally:
    os.chdir(cwd)

Cuan­do en rea­li­dad quie­ro es­to:

with os.chdir('foo'):
    os.system('bar -baz')

Por su­pues­to, eso no es­tá. En­ton­ce­s, pre­gun­té, co­mo se ha­ce eso? Y tu­ve va­rias res­pues­ta­s:

  1. Usá Fa­­bri­­c:

    wi­th   cd("foo"):        run("ba­r")  
  2. No es di­­fí­­ci­­l:

    cla­ss   Dir­Con­textM(ob­ject):        def   __i­ni­t__(se­lf,   new_­dir):            se­lf.new_­dir   =   new_­dir            se­lf.ol­d_­dir   =   No­ne          def   __en­te­r__(se­lf):            se­lf.ol­d_­dir   =   os.ge­tcwd()            os.ch­dir(se­lf.new_­dir)          def   __e­xi­t__(se­lf,   *_):            os.ch­dir(se­lf.ol­d_­dir)  
  3. Es más fá­­ci­­l:

    from   con­tex­tlib   im­port   con­text­ma­na­ger    @con­text­ma­na­ger  def   cd(pa­th):        ol­d_­dir   =   os.ge­tcwd()        os.ch­dir(pa­th)        yield        os.ch­dir(ol­d_­dir)  
  4. Es­­tá bue­­­no, agre­­gué­­mo­s­­lo a pa­­th.­­py pa­­th.­­py

  5. Me­­jor atra­­par ex­­ce­p­­cio­­­nes:

    @con­text­ma­na­ger  def   cd(pa­th):        ol­d_­dir   =   os.ge­tcwd()        os.ch­dir(pa­th)        try:            yield        fi­na­lly:            os.ch­dir(ol­d_­dir)  

Apren­dí co­mo ha­cer con­text ma­na­ger­s, so­bre con­tex­tli­b, so­bre fa­bric y so­bre pa­th.­p­y. Na­da mal pa­ra 15 mi­nu­tos :-)

Book review: The Windup Girl by Paolo Bacigalupi


I started this book wi­th hi­gh ho­pes. After all, this was a book by a new-ish au­thor that had won Hu­go Award for Best No­vel (2010), Ne­bu­la Award for Best No­vel (2009), Lo­cus Award for Best First No­vel (2010), John W. Cam­pbe­ll Me­mo­rial Award (2010), Comp­ton Crook Award (2010) Comp­ton Crook Award (2010), Goodrea­ds Choi­ce Award No­mi­nee for Scien­ce Fic­tion (2009). Im­pres­si­ve, uh?

We­ll, I do­n't know what they saw in it. Sha­llow cha­rac­ter­s, per­va­si­ve fa­ta­lism dis­gui­s­ed as dep­th, mpro­ba­ble slang ust be­cau­se it soun­ds cool (win­dup gir­l? Rea­ll­y? Tha­t's how they wi­ll ca­ll ge­ne­ti­ca­lly en­gi­nee­red hu­mans in the fu­tu­re? Win­dup­s? Yeah, ri­gh­t).

Oh, and it's fu­ll of orien­ta­lis­m. And of things like im­planting ge­ne dogs in­to win­dups to make them lo­yal and sub­ser­vien­t. And ghos­ts. Oh, cra­p, al­most no­thing in this no­vel wo­rked for me. Most pa­ges had me sla­pping myself on the fo­re­hea­d.

I am­not against a so­lid do­se of weir­d. I like weir­d. I read Mié­vi­lle, for cra­p's sake. But this is not weir­d, it's con­tri­ve­d.

And do­n't get me started on the en­d. The end is su­ch an ob­vious ana­lo­gy to Eden it al­most ma­de me puke. It's like the end of Ba­ttles­tar Ga­lac­ti­ca, but set on the fu­tu­re. And wi­th lad­y­bo­ys.

I had a be­tter ti­me rea­ding H. Ri­der Ha­ggar­d's "A­llan Qua­ter­mai­n", whi­ch I saw men­tio­ned in the awe­so­me se­ries "The vic­to­rian Hu­go­s". Old and date­d? Su­re. But I would vo­te for it ins­tead of "The Win­dup Gir­l" eve­ry da­y, and twi­ce if they let me.

¡Eso es Matemática! ¡Yo sé Matemática! (No, no sé)

Bue­no, así es mi vi­da, exp­cep­to con ma­te­má­ti­ca. Y sin di­no­sau­rio­s. Es­toy ro­dea­do de pro­ble­ma­s, al­go es­tá ro­to y no sé por­qué, se sien­te li­ge­ra­men­te ra­ro­... y de re­pen­te... ¡e­so es ma­te­má­ti­ca! (por su­pues­to no sé ma­te­má­ti­ca, na­die sa­be ma­te­má­ti­ca. To­dos sa­be­mos al­go de ma­te­má­ti­ca).

En una de esas veo un avi­so y me avi­vo que el enor­me des­cuen­to es un des­cuen­to chi­quiti­to dis­fra­za­d. Una no­ti­cia es un ob­vio dis­pa­ra­te des­pués de 30 se­gun­dos de aná­li­sis. Un mail reen­via­do es un po­qui­to más mo­les­to por­que es un po­qui­to más idio­ta. Por cul­pa de la ma­te­má­ti­ca.

Ma­te­má­ti­ca es la he­rra­mien­ta que ten­go pa­ra en­ten­der las co­sas. Cuan­do el mun­do es con­fu­so y da mie­do, si lo pue­do po­ner en nú­me­ro­s, me cal­ma. ¿Mie­do al fu­tu­ro? Pen­se­mos en la ma­ra­vi­lla del in­te­rés com­pues­to. ¿Ṁie­do a la muer­te? Vea­mos pro­ba­bi­li­da­des. ¿Ne­ce­si­tás una aven­tu­ra? Teo­ría de jue­go­s. ¿Ne­ce­si­tás em­pe­zar una con­ver­sació­n? Pue­do men­cio­nar al pa­sar que pa­sé tiem­po en cla­se en­contran­do el ho­meo­mor­fis­mo que ex­pli­ca la es­ce­na de Flas­h­dan­ce en que la sol­da­do­ra se saca el cor­pi­ño por la man­ga.

La ma­te­má­ti­ca me di­ce que el mun­do no es per­fec­to. Que los nú­me­ros que veo en mi com­pu no son real­men­te rea­les y no pue­do con­fiar en ello­s. Que no pue­do cru­zar los puen­tes de Kö­nis­berg una so­la ve­z, que 1 es el nú­me­ro más fre­cuen­te en el dia­rio de ho­y, que Pla­tón te­nía ra­zón y hay un mun­do de ideas del cual es­te es só­lo un re­fle­jo.

Por otro la­do, me di­ce que pue­do cor­tar una na­ran­ja en unos po­cos pe­da­zos que din es­ti­rar ni de­for­mar pue­den ser reen­sam­bla­dos en dos na­ran­jas igua­les a la ori­gi­na­l. Así que hay que to­mar lo que di­ce con mu­cho cui­da­do.

Mi café y yo.

Ha­bré te­ni­do 12, y lo ha­bía vis­to que­dar­se ahí con un cor­ta­do mien­tras ma­má y yo com­prá­ba­mos al­go, o yo me iba a al­gu­na de esas co­sas de chi­cos (¿­cla­ses de ex­pre­sión ar­tís­ti­ca? ¿Ta­ller de tí­te­res?) y era un mis­te­rio. Eran tres ho­ras de su vi­da que es­ta­ban es­con­di­do­s, blo­quean­do el flu­jo de in­for­ma­ción tan efec­ti­va­men­te co­mo si es­tu­vie­ran del otro la­do de un ho­ri­zon­te de even­to­s.

¿Qué ha­cía? ¿Con quién ha­bla­ba? ¿Leía al­go? Y siem­pre ahí, en la me­sa cuan­do vol­vía, la ta­za de un cor­ta­do, chi­co, va­cía.

Sos­pe­cho que ahí me em­pe­zó a gus­tar la idea del ca­fé. Yo era, por su­pues­to, un de­di­ca­do to­ma­dor de cho­co­la­te (mar­ca El Qui­llá, des­co­no­ci­do fue­ra de la zo­na, pe­ro su­pe­rior en mi me­mo­ria), des­pués de un de­ma­sia­do lar­go pe­río­do de to­mar le­che dul­ce. Ya ha­bía to­ma­do ca­fé an­tes y lo ha­bía odia­do, pe­ro por su­pues­to, sen­ta­do ahí di­je "un cor­ta­do por fa­vo­r". Que co­sa mas re­pug­nan­te. No vol­ví a to­mar ca­fé por vein­te año­s.

Apren­dí a dis­fru­tar del té, o al me­nos del té con le­che, y en la fa­cul­tad a to­mar ma­te co­mo una es­pon­ja uru­gua­ya. Amar­go y fuer­te co­mo de­fen­sor de Co­ló­n, lo más pa­re­ci­do a un sue­ro con ca­feí­na, len­to, cons­tan­te flu­jo por ho­ra­s. Nun­ca es­tu­vis­te des­pier­to has­ta que te aga­rran las 5A­M, vas por el ter­cer ter­mo, y te sen­tís co­mo si fue­ran las 2PM. Es co­mo to­mar la pas­ti­lla equi­vo­ca­da en Ma­trix.

Y me mu­dé a Bue­nos Ai­res y es­ta­ba so­lo. Y to­mar ma­te so­lo es co­mo to­mar vo­dka so­lo, una ta­rea su­cia y de­pri­men­te, así que em­pe­cé a ir a ca­fés y to­mar lá­gri­ma­s. Una lá­gri­ma es el in­ver­so adi­ti­vo del cor­ta­do. Con una ta­za gran­de, una lá­gri­ma y un cor­ta­do, te­nés un lin­do ca­fé con le­che. La lá­gri­ma es una be­bi­da pa­té­ti­ca, so­lo ap­ta pa­ra el de­sas­tre emo­cio­nal que yo era.

Pe­ro tam­bién es una puer­ta. Y pa­ra el 2002 to­ma­ba cor­ta­do­s. Y pa­ra el 2006 te­nía mi pro­pia má­qui­na de es­pres­so y era una es­pe­cia de Kei­th Ri­char­ds de la ca­feí­na, to­man­do 10 ta­zas fuer­tes al día, com­pran­do mez­clas ca­ra­s... y tu­ve que pa­ra­r.

El pri­me­ro de ene­ro del 2008 me des­per­té a las 4 de la ma­ña­na con un do­lor en el pe­cho. Pen­sé que me da­ba un in­far­to. Ca­mi­né al hos­pi­tal y re­sul­tó ser gas­tri­tis. Y pa­só de nue­vo. Y otra ve­z. No muy se­gui­do, pe­ro una vez al año, des­pués ca­da seis me­s­es, des­pués to­dos los me­s­es, des­pués cua­tro días se­gui­do­s. Y tu­ve que de­jar de to­mar ca­fé.

Fue ho­rri­ble. Es­ta­ba dor­mi­do to­do el día y des­pier­to to­da la no­che, no te­nía mi pro­pio con­trol re­mo­to. Es­ta­ba ca­brón y mo­les­to. Hi­ce tram­pa. Pe­ro al fi­nal pa­ré.

Per­do­ná, vie­jo.

La pena de muerte y otras conspiraciones.

Em­pe­ce­mos por des­ha­cer­nos del gol­pe ba­jo: "si le pa­sa­ra a tu pi­be, vos los ma­ta­ría­s". Y sí, por su­pues­to que sí. Y se­ría una idea es­tú­pi­da, aún si la di­je­ra yo.

Si al­go real­men­te muy muy ma­lo le pa­sa­ra a mi ne­ne, yo es­ta­ría su­frien­do, en un es­ta­do de emo­ción vio­len­ta. ¿Si ahí te di­go que sal­tes de un puen­te, te ti­rá­s? Sos­pe­cho que no, por­que te da­rías cuen­ta que es­toy me­dio lo­co por lo que pa­só, y te lo di­je por­que me sien­to así.

Bue­no, eso mis­mo pa­sa con los pa­rien­tes de una víc­ti­ma (o la víc­ti­ma mis­ma) cuan­do pi­den un cas­ti­go: es un pe­di­do na­ci­do del do­lor y el su­fri­mien­to. Y co­mo so­cie­dad no de­be­mos de­ci­dir nues­tras ac­cio­nes ba­sán­do­nos en las pro­pues­tas de los en­lo­que­ci­dos de do­lo­r. Así que ol­vi­de­mos es­ta ape­la­ción a los sen­ti­mien­to­s, por­que es en­ten­di­ble, pe­ro es es­tú­pi­do por­que cuan­do uno su­fre, uno tie­ne per­mi­ti­do de­cir pa­va­da­s.

Otro ar­gu­men­to fa­lli­do pa­ra la pe­na de muer­te es que des­alien­ta crí­me­nes fu­tu­ro­s. Es­to se ha pro­ba­do fal­so es­ta­dís­ti­ca­men­te, por­que paí­ses o es­ta­dos si­mi­la­res pe­ro con y sin pe­na de muer­te no mues­tran ta­sas de cri­mi­na­li­dad sig­ni­fi­ca­ti­va­men­te di­fe­ren­tes.

Sos­pe­cho que es por­que en mu­chos ca­sos el cri­mi­nal no quie­re co­me­ter la par­te del cri­men que lo ha­ce "me­re­ce­r" la muer­te (¿a­se­si­na­to en ro­bo? Que­ría ro­ba­r, no ma­tar a al­guien. No se ga­na pla­ta ma­tan­do, si no ro­ban­do) O sim­ple­men­te lo ha­ría de to­das for­mas (no es co­mo si un vio­la­dor de me­no­res es­pe­ra pa­sar­la bien si lo pes­can. O asu­me que no lo van a pes­ca­r, o de­ci­de que va­le la pe­na de to­das for­ma­s).

Y por su­pues­to, el mo­ti­vo prin­ci­pal por el cual es una ma­la idea es que se­ría ad­mi­nis­tra­da por em­plea­dos pú­bli­co­s. ¿Con­fiás en el go­bierno pa­ra que de­ci­da tus im­pues­to­s? No, vas a un con­ta­dor y vos de­cís cuan­to tie­ne que co­brar­te. ¿Con­fiás en que la po­li­cía en­cuen­tre al que te cho­reó el ce­lu­la­r? No, lo de­nun­ciás y te com­prás otro. ¿Con­fiás en el co­rreo pa­ra man­dar una en­co­mien­da frá­gi­l? No creo­... Bue­no, en­ton­ces ¿por qué vas a con­fiar en ellos pa­ra que de­ci­dan si al­guien es muy muy ma­lo o no?

El go­bierno es una gran idea pa­ra las co­sas que na­die mas quie­re ha­cer (au­to­pis­tas a Ju­ju­y) o las que na­die más de­be­ría ha­cer (la po­li­cía) pe­ro aún en esos ca­sos te­nés que es­pe­rar un ser­vi­cio de mier­da, y apor­tar lo tu­yo pa­ra li­mi­tar su po­de­r.

La al­ter­na­ti­va es asu­mir que el go­bierno tie­ne una enor­me ca­pa­ci­dad y com­pe­ten­cia pe­ro sim­ple­men­te han de­ci­di­do es­con­der­lo, que es la par­te que siem­pre me im­pre­sio­na de las teo­rías cons­pi­ra­ti­va­s.

El go­bierno de USA no pue­de ma­tar a Cas­tro, pe­ro pue­de ma­tar a Ken­ned­y. No pue­den man­te­ner los tre­nes an­dan­do, pe­ro pue­den fin­gir el alu­ni­za­je. Y así ca­da una.

Una vez leí un li­bro don­de des­cri­bían una cien­cia in­te­re­san­te: Teo­ría de la Teo­ría Cons­pi­ra­ti­va. Es la cien­cia de es­tu­diar que teo­rías cons­pi­ra­ti­vas cree al­guien pa­ra ob­te­ner in­for­ma­ción so­bre lo que real­men­te creen. Si es­tás a fa­vor de la pe­na de muer­te, creés que la po­li­cía nun­ca se equi­vo­ca, o que ma­tar unos cuan­tos por error ca­da tan­to (por­que sí se equi­vo­can) no es un pro­ble­ma. En el pri­mer ca­so son es­tú­pi­do. En el se­gun­do sos mal­va­do.


Contents © 2000-2024 Roberto Alsina