Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Sacrifices & Rock & Roll

Sor­ry: eng­lish on­ly be­cause my kbd is act­ing up an typ­ing is a chore.


Here I am, writ­ing in a place of evil so deep they charge you $56 (that's pe­sos) for a tiny sand­wich and a bot­tle of wa­ter: the Gi­an­ni & Vit­to­rio café at Cór­do­ba Air­port.

It's like Mor­dor, ex­cept the wa­ter is kin­da-­sor­ta-s­light­ly-­cold, and I car­ry no rings. And there is very lit­tle la­va. But the evil... the evil is dense, as it can on­ly be at air­port­s, Mi­nas Morgul, and per­haps the choripán place near Lisan­dro de la Torre sta­tion (which I strong­ly rec­om­mend).

But why do I do it? Be­cause I have al­ready failed. I will not post ev­ery­day this year. I may not even be close. But I will post as much as I can. And I prom­ise it won't be filler about why I did not do a re­al post.

So, on­to the meat of this post we go.

It's in­evitable that air­ports will have ex­pen­sive and bad food. It will be ex­pen­sive be­cause there are a lim­it­ed num­ber of sell­er­s, and get­ting to be one of them is ex­pen­sive. Since they can charge what­ev­er they wan­t, they have no in­cen­tives to pro­vide qual­i­ty or ser­vice.

Plus, they own a cap­tive cus­tomer base, since you are locked there, and there is no place to go out­side the air­port eti­her.

That is clas­sic gov­ern­men­t-­man­dat­ed mar­ket dis­tor­tion, with the air­port man­age­ment as the gov­ern­men­t, and you play­ing the role of you. This kind of clear ex­am­ples are good be­cause they show cap­i­tal­ism and free mar­ket ad­vo­cates ac­tu­al­ly have a de­cent point when they re­mark on the de­fects of im­per­fect mar­ket­s.

OTO­H, I don't see any com­mu­nists around here op­press­ing me, I see on­ly hap­py cap­i­tal­ists tak­ing my mon­ey.

PS: it seems there was a tor­na­do here to­day.

A Deepness in the Sky

Cover for A Deepness in the Sky

Review:

Not near­ly as much fun as the first two books in the se­ries. Plus the end is left wide open, sure­ly be­cause the au­thor is writ­ing a se­quel.

The problem is is. Is it not?

Al­gu­no­s, por al­gu­na ra­zó­n, ha­cen es­to:

>>> a = 2
>>> b = 2
>>> a == b
True
>>> a is b
True

Y des­pué­s, cuan­do ven es­to, se sor­pren­den:

>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False

Se sorprenden porque "2 es 2" es más intuitivo que "1000 no es 1000". Podría atribuirlo a una tendencia innata al platonismo, pero en realidad es porque is no es eso.

El operador is es (en CPython) apenas una comparación de direcciones de memoria. Si los objetos a y b son el mismo cacho de memoria, entonces "son" el otro. Como python crea de antemano una cantidad de enteros pequeños, cada 2 que creás no es un nuevo 2, sino otra vez el 2 de la última vez.

Es­to fun­cio­na por dos mo­ti­vo­s:

  1. Los en­­te­­ros son so­­­lo le­c­­tu­­ra. Po­­­dés te­­ner mu­­chas va­­ria­­bles que "co­n­­tie­­nen" el mis­­mo 2, po­r­­que no lo pue­­den ro­m­­pe­­r.

  2. En py­tho­n, la asig­na­ción es tan só­lo crear alia­ses. No se ha­ce una co­pia de 2 cuan­do se ha­ce a = 2, so­la­men­te se di­ce "a es otro nom­bre pa­ra es­te 2 que ten­go acá".

Esto sorprende a la gente que viene de otros lenguajes, por ejemplo C o C++. En esos lenguajes, una variable int a nunca usaría la misma memoria que int b porque justamente, una variable es un pedazo de memoria, y se puede cambiar el contenido. En C y C++, los enteros son mutables. Este 2 no es ese 2, a menos que lo hagas intencionalmente con punteros.

De he­cho, la for­ma en que la asig­na­ción fun­cio­na en py­thon lle­va a otras sor­pre­sas que son más in­te­re­san­tes en la vi­da rea­l. Por ejem­plo:

>>> def f(s=""):
...     s+='x'
...     return s
...
>>> f()
'x'
>>> f()
'x'
>>> f()
'x'

Eso no sor­pren­de na­da. Aho­ra, ha­ga­mos un pe­que­ño cam­bio:

>>> def f(l=[]):
...     l.append('x')
...     return l
...
>>> f()
['x']
>>> f()
['x', 'x']
>>> f()
['x', 'x', 'x']

Y eso sí es sorprendente, si no lo esperabas. Sucede porque las listas son mutables. El argumento por default se define cuando la función se define, y cada vez que llamás f() estás usando y devolviendo la misma l. Antes, también usábamos siempre la misma s pero como los strings son inmutables, nunca cambiaba, y devolvíamos una nueva cada vez.

Podés comprobar que no te miento, obviamente que usando is. Y ya que estamos, eso no es un problema para listas. Es un problema para los objetos de cualquier clase que vos definas, a menos que los hagas inmutables. Así que seamos cuidadosos con los argumentos por defecto, ¿ok?

Volviendo al problema original de que 1000 is not 1000, lo sorprendente es que en realidad, no es interesante. Los enteros son fungibles. No te importa que sea el mismo entero, solo que sean iguales.

Com­pro­bar iden­ti­dad de en­te­ros es co­mo si me pres­ta­ras $1 y cuan­do te lo de­vuel­vo, en vez de ver si es una mo­ne­da de $1, te fi­ja­ras si es la mis­ma mo­ne­da. Sim­ple­men­te no im­por­ta. Lo que que­res es un 2, un 1000 o una mo­ne­da de $1.

Además, el reultado de 2 is 2 depende de la implementación de python. No hay motivo, en realidad, mas allá de una optimización, para que sea True.

Es­pe­ran­do que es­to acla­re el te­ma, les de­jo un úl­ti­mo frag­men­to de có­di­go:

.. code-block:: pycon
>>> a = float('NaN')
>>> a is a
True
>>> a == a
False

UP­DA­TE: Mu­chos co­men­ta­rios ite­re­san­tes en re­ddit y una con­ti­nua­ción chi­qui­ta acá

¡Hola!

Por otro la­do, no so­y:

  • Ro­­­be­r­­to Al­­si­­na, que vi­­ve en Hous­­ton y es ac­­ti­­vo en la co­­­mu­­ni­­dad ar­­gen­­ti­­na de la re­­gió­­n.

  • Ama­­do Ro­­­be­r­­to Al­­si­­na, po­­­lí­­ti­­co pa­­ra­­gua­­yo.

  • Ro­­­be­r­­to Ariel Al­­si­­na (a­­lias Ro­­­ber­s­­to­r­­m) que an­­da en mo­­­to.

  • Ro­­­be­r­­to Al­­si­­na, ar­­qui­­te­c­­to pue­r­­to­­­rri­­que­­ño.

  • Ro­­­be­r­­to Al­­si­­na, que vi­­ve en Vi­­lla Ale­­ma­­nay fué al Co­­­le­­gio Bu­­cki­n­­gha­­m.

  • Ro­­­be­r­­to Al­­si­­na Rui­­ba­­l, que oja­­lá es­­té usan­­do una pe­­lu­­ca en esa fo­­­to.

  • Ro­­­be­r­­to Go­n­­za­­les Al­­si­­na, que vi­­ve en Ca­­ne­­lo­­­nes, ciu­­dad ape­­ti­­to­­­s­a.

  • El TE­­MI­­DO Ro­­­be­r­­to Na­­va Al­­si­­na que con 15 añi­­tos an­­da ha­­cien­­do go­­­les en una li­­ga ama­­teur en al­­gu­­na pa­r­­te.

  • Ro­­­be­r­­to Le­­bron Al­­si­­na (ten­­go un ca­­chi­­to más de pe­­lo)

  • Ro­­­be­r­­to An­­to­­­nio Gó­­­mez Al­­si­­na, ac­­ti­­vis­­ta contra la tau­­ro­­­ma­­quia.

Oja­lá es­to acla­re las co­sas. Gra­cias por su aten­ció­n.


Contents © 2000-2023 Roberto Alsina