Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Bloqueado

Es­ta es tal vez la co­sa más ob­via que no to­do el mun­do ve: pa­ra ha­cer co­sas hay que ha­cer­la­s. La ma­ne­ra de es­cri­bir so­ftwa­re li­bre es es­cri­bir so­ftwa­re que es li­bre. Pa­ra ir a Ala­ska hay que ir­se. A Ala­ska. Pa­ra es­cri­bi­r, hay que es­cri­bi­r. Pa­ra ha­cer mú­si­ca, hay que to­car mú­si­ca. Pa­ra ha­cer pan, hay que ha­cer pan.

¿Va a es­tar siem­pre bue­no ese pan? ¿Vas a es­cri­bir siem­pre co­sas in­te­re­san­tes? ¿Vas a lle­gar a Ala­ska? No. Vas a fra­ca­sar.

Pe­ro si no ha­cés ca­ga­das pri­me­ro, no hay ma­ne­ra de ha­cer co­sas me­jo­res des­pué­s. Creo que fue Ama­deo Ca­rri­zo el que di­jo de un ar­que­ro jo­ven "No es ma­lo, fal­ta que le ha­gan do­s, tre­cien­tos go­les más pa­ra que sea bue­no­".

Ten­go un lar­go his­to­rial de fra­ca­so­s. Ten­go una cor­ta lis­ta de éxi­to­s. Se­pan dis­cul­pa­r.

Problemas de abandono: rst2pdf

Así que lo voy a re­to­ma­r. Voy a de­di­car­le unas 4ho­ras por se­ma­na.El plan es:

  1. Jun­­tar pa­r­­ches que es­­tán jun­­tan­­do tie­­rra en el is­­sue tra­­cker

  2. Arre­­glar al­­gu­­nos bu­­gci­­tos

  3. Ha­­cer un re­­lea­­se con 1) y 2)

Y por su­pues­to:

  1. No aban­­do­­­na­r­­lo de nue­­vo

Mientras tanto, acá hay algo interesante de lo que recién me enteré. Dimitri Christodoulou hackeó rst2pdf para que soporte la directiva raw:: html.

Eso, ami­go­s, es tan lo­co que lo ten­go que ro­bar (con el cré­di­to co­rrec­to, etc :-)

Y Di­mi­tri, o cual­quier otro que quie­ra ha­cer al­go co­pa­do con rs­t2­pdf, ¡a­vi­sen! ¡Les doy co­m­mi­t!

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­text­M(ob­jec­t):
        def __i­ni­t__(sel­f, new_­di­r):
            se­l­f.­new_­dir = new_­dir
            se­l­f.ol­d_­dir = No­ne
    
        def __en­te­r__(sel­f):
            se­l­f.ol­d_­dir = os.­ge­tcw­d()
            os.­ch­di­r(sel­f.­new_­di­r)
    
        def __e­xi­t__(sel­f, *_):
            os.­ch­di­r(sel­f.ol­d_­di­r)
  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­tcw­d()
        os.­ch­di­r(­pa­th)
        yield
        os.­ch­di­r(ol­d_­di­r)
  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­tcw­d()
        os.­ch­di­r(­pa­th)
        tr­y:
            yield
        fi­na­ll­y:
            os.­ch­di­r(ol­d_­di­r)

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

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.


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.


Contents © 2000-2020 Roberto Alsina