Promesas vacías

August 4th, 2009 by AlbertEin 3 comments »
Promesas Vacías

Promesas Vacías

Para los que dudaban de su memoria y pensaron que la promesa no fue mas que un mal sueño acido me llego por correo la evidencia de la promesa que rompió el actual presidente, al fin y al cabos todos los Mexicanos somos como las viejas a las que se les promete todo por tal de llevarlas a la cama, y a la hora de la verdad solo se lava las manos.

Si Felipe calderon ya nos la metio, de perdida que cumpla, ¿no?

Leído: Momo – Michael Ende

August 3rd, 2009 by AlbertEin 7 comments »
Momo - Michael Ende

Momo - Michael Ende

Durante el transcurso de la vida uno va acumulando recuerdos, algunos gratos, algunos malos, otros vergonzosos, pero indudablemente todos son valiosos, ya que nosostros mismos, nuestra personalidad no es mas que el conjunto de los recuerdos que guardamos. A pesar de esto, hay recuerdos que atesoramos mas que los otros, ya que de alguna forma se recuerda como un momento mágico que cambio o impacto de manera significativa tu vida.

Momo, la novela de Michael Ende (El autor de la historia interminable), es uno de mis recuerdos mas preciados. Es un libro que descubrí en una pequeña biblioteca que se encontraba en el salón, hace bastantes años cuando yo cursaba la primaria, tome el libro y lo lleve a casa para leerlo, y nunca mas lo regrese. En retrospectiva, Momo es uno de los factores que sirvieron como detonante a mi gusto a la lectura (otro de ellos es el lector de este blog “eldaniel” y la biblioteca personal de mi padre).

Pues bien, mi copia vieja de Momo estaba maltratada cuando llego a mis manos, con todo y hojas sueltas, que al pasar de los años y con motivo de moverse de aquí para haya terminaron perdiéndose, lo que dejo a mi copia de Momo mutilada con algunas paginas faltantes. Sin embargo fue grande mi sorpresa cuando hace algunos días revisaba unos libros de “eldaniel” encontré una copia de la misma novela, la tome para releerla y un par de días después “eldaniel” me la regalo.

Momo es un libro que podría parecer para niños pero que la profundidad del mensaje lo hace especialmente importante para los adultos, el libro explica por que en esta época moderna, a pesar de ahorrar tiempo de muchas maneras distintas cada ves tenemos menos tiempo para disfrutar. La trama y la realización de Michael Ende es espectacular, pero no pienso hablar demasiado de ella para no arruinarles la experiencia.

Consigan una copia y leenla, no se arrepentirán, pocos libros podría recomendarlos tantos como Momo

Leído: Un mundo sin fin – Ken Follet

July 23rd, 2009 by AlbertEin 8 comments »
Un mundo sin fin - Ken Follet

Un mundo sin fin - Ken Follet

Un mundo sin fin es una especie de secuela de “Los pilares de la tierra”, del que les hable aquí recientemente. Mi esposa sabiendo lo mucho que me encanto los pilares de la tierra me sorprendió con este libro que yo ni sabía de su existencia como regalo del día del padre.

Nos encontramos en la misma Kingsbridge un par de siglos después de que nuestros ya apreciados amigos de los pilares de la tierra deambularon por el lugar, estos al terminar sus luchas políticas no les quedo otra mas que aparearse como conejos, y son los descendientes de este frenesí fornicador los que conocemos en un mundo sin fin.

Aquí conocemos una Kingsbridge mucho mas grande, pero el priorato a caído en decadencia por la mala administración de los últimos priores. Es la tarea de los personajes de esta nueva obra luchar en contra de la iglesia para apartarla del control opresor y corrupto de la ciudad para que esta pueda prosperar fuera del yugo opresor y retrograda del priorato.

La formula de este libro es muy similar (si no es que idéntica) a los pilares de la tierra, cosa que no es de extrañar siendo este su semisecuela y siendo el ultimo libro la obra mas afamada del autor. Aun así en momentos se espera algo de frescura que le de una identidad única al libro, pero esta nunca llega

El libro es muy bueno, a pesar de que el final ni el desarrollo es tan espectacular como en los pilares de la tierra, incluso este libro tiene menor complejidad narrativa, ya que se centra tan solo en un par de personajes principales al contrario de su antecesor, donde conocíamos a los que creíamos los personajes principales tan solo para verlos muertos un capitulo después y observar un giro en la trama.

En fin, es un libro bueno, pero no tengas muy altas expectativas, no esperes que sea Los pilares de la tierra perfeccionado, muy al contrario, es tan solo una sombra del libro anterior, aun así bien vale que le dediques tu tiempo

Leído: El quinto día – Frank Schätzing

July 23rd, 2009 by AlbertEin No comments »
El quinto día - Frank Schätzing

El quinto día - Frank Schätzing

Estaba en el super y como siempre pase por la seccion de libros para ver si había algo interesante mezclado entre el mar de caldos de pollo para el alma y desgracias de adolecentes de Carlos Cuauhtémoc Sánchez, había terminado de leer mi ultimo libro recientemente por lo que revise los titulos con un poco mas de atención que cuando lo hago tan solo por curiosidad.

Y entonces lo vi.

Y entonces me vio.

Un libro negro con un enorme ojo en la portada, pero lo que mas llamo la atención fue el grosor, es un libro choncho de 1100+ paginas, el autor jamas lo había escuchado pero decidí tomar el riesgo y comprarlo, después de todo, si el libro tenia mas de mil paginas seguro que el autor no era como Og Mandino, Paulo Coelho o el Temoc Sánchez

La historia es un tipo thriller de ciencia ficción que se lleva a cabo en los mares de todo el mundo, es bastante despiadada en muchos momentos, donde nos dan a conocer un personaje con sus sueños e ilusiones tan solo para poder destruirlo mas adelante de una manera mas impactante y significativa.

El ritmo, la historia y la narrracion son buenas y enganchan, a pesar de que al final pierde fuerza la trama, aun así y a pesar de sus tupidas paginas es una lectura recomendada, ¡por lo menos te entretiene varios días! :D

Hagalo usted mismo: Twitt al azar con JQuery, Ajax y la Search API de Twitter

June 11th, 2009 by AlbertEin 4 comments »

Con motivo del Partido del No Trabajo hice una pequeña pagina de broma donde gracias a la API de búsqueda de Twitter se muestra aleatoriamente un twitt que haga referencia al partido (hashtag #PNT). Una ves terminado decidí aprovechar un poco de lo realizado para hacer una mini guia para realizar un visor de twitts aleatorios sobre algún tema en especifico.

Debido a que la API de twitter no te informa la cantidad de twitts sobre un tema en particular tenemos que hacer un poco de trampa, y en ves de buscar un twitt aleatorio buscamos un twitt aleatorio entre los últimos N twits respecto al tema. Con esta aclaración en mente iniciamos con el Markup de la pagina.

1
2
3
4
5
6
7
8
9
10
11
12
13
<p>
    Show me a random twitt about 
    <input type="text" id="topic" /> 
    using the last 
    <input type="text" id="twittsQty" /> 
    twitts. 
    <span id="go">GO!</span>
</p>
<p>
    <img src="" id="userImage" alt="" /> 
    <span id="user"></span>
    : <span id="text"></span>
</p>

El input con id “topic” sera donde el usuario especificara el tema a buscar, como “#PNT”, y además ocupamos saber de entre cuantos twitts vamos a buscar, esto lo obtendremos del input con id “twittsQty”. Por ultimo el span con id “go” hará la funcion de un botón. Al presionar el span con id “go” obtendremos el twitt aleatorio y pondremos su contenido en el segundo p, img con id “userImage” contendra el avatar del autor, el span “user” tendrá su nombre de usuario y el span “text” contendrá el contenido del twitt.

Lo siguiente es ver como obtener el twitt, si buscamos en la documentación de twitter descubriremos que ocupamos llamar a “http://search.twitter.com/search.json?q=BUSQUEDA&show_user=true&rpp=1&page=PAGINA&callback=?” donde BUSQUEDA es el tema a buscar y PAGINA el numero aleatorio generado, ¿por que PAGINA es el numero aleatorio?, como se puede ver rpp tiene un valor de “1″, por lo que twitter tomara en cuenta un twitt por pagina, de esta forma el valor de PAGINA nos daré el Nesimo twitt. Con eso solo debemos de tener en mente que la BUSQUEDA debe de estar escapada. El código seria entonces:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$(document).ready (function ()
{
    $("#go").click (function ()
    {
        var twitterPage = 1 + Math.floor (Math.random () * $("#twittsQty").val ());
        var twitterQuery = encodeURIComponent ($("#topic").val ());
        var requestUrl = "http://search.twitter.com/search.json?q=@query&show_user=true&rpp=1&page=@page&callback=?".
            replace (/@query/g, twitterQuery).
            replace (/@page/g, twitterPage);
        $.getJSON (requestUrl, function (data)
        {
            var twitt = data.results [0];
            $("#userImage").attr ("src", twitt.profile_image_url);
            $("#user").text (twitt.from_user);
            $("#text").html (twitt.text);
 
        });
    });
});

Ahora agregamos un poco de estilo:

1
2
3
4
5
6
7
8
9
10
11
#go
{
	color: Blue;
	text-decoration: underline;
	cursor: pointer;
}
#userImage
{
	width: 52px;
	height: 52px;
}

Y nos quedamos con lo siguiente:

Show me a random twitt about

using the last

twitts.
GO!



:


Tamien pueden ver el resultado aquí o en la Web del Partido del No Trabajo (PNT)

Leído: Los pilares de la tierra – Ken Follet

June 4th, 2009 by AlbertEin 8 comments »
Los pilares de la tierra - Ken Follet

Los pilares de la tierra - Ken Follet

Mientras algunos fisicos se enredan con paradojas y discusiones teóricas respecto a la posibilidad (o imposibilidad) del viaje en el tiempo yo llego de una visita rapida al pasado, ¡y ni siquiera necesite del De Lorean!

¿A donde viaje? Inglaterra

¿A que epoca me dirigi? El medievo, en el siglo XII (11xx)

¿Como lo hice? ¡Leyendo!

¿Disfrute el viaje? ¡Me encanto!

Los pilares de la tierra es una novela histórica, toda una obra maestra del autor Ken Follet, cuya historia transcurre durante la mayor parte del siglo XII en la Inglaterra medieval mientras vemos crecer y desarrollarse hasta tres generaciones de personajes.

El libro esta escrito con un estilo peculiar, y vemos narrada la historia a través de los ojos de varios (¡mas de 5!) personajes principales, los cuales van apareciendo y extinguiéndose a lo largo de la historia, a pesar de la cantidad de personajes principales Follet logra que los conozcamos, y nos inspira desde el mas profundo respeto por Phillip hasta el mas mezquino odio hacia William de Hamleigh, pasando por la gran pena hacia Aliena y Richard.

El libro es una obra muy atrevida por parte del autor, pero a pesar de la dificultad técnica por el gran periodo de tiempo que abarca y la gran cantidad de personajes Ken Follet sale airado de la travesía.

Los pilares de la tierra es una interesantisima lectura, donde nos encontramos romances e intrigas políticas, corrupción, y el mas vil salvajismo de la época.

Es un libro que no pueden dejar de leer

Hagalo usted mismo: Efecto marquesina con Javascript

May 30th, 2009 by AlbertEin 4 comments »

Recientemente m313n45 me pidio ayuda para hacer un efecto de marquesina con unas imágenes y al dar click sobre alguna de ellas se viera la versión completa, todo esto sin usar flash.

Lo realice obviamente con Javascript + JQuery y a continuacion veremos paso a paso como lograrlo.

Tambien pueden ver el ejemplo completo aquí

Las imágenes para las marquesina son 6, iniciamos con el markup de las imágenes.

1
2
3
4
5
6
7
8
9
10
<div id="container">
	<img src="01.png" alt="1"/>
	<img src="02.png" alt="2"/>
	<img src="03.png" alt="3"/>
	<img src="04.png" alt="4"/>
	<img src="05.png" alt="5"/>
	<img src="06.png" alt="6"/>
</div>
<div id="viewport">
</div>

Además ocupamos darle estilo:

1
2
3
4
5
6
7
8
9
10
11
12
13
#container
{
	overflow: hidden;
	width: 400px;
	height: 64px;
	border-style: solid;
}
#container img
{
	position: relative;
	width: 60px;
	height: 64px;	
}

overflow: hidden; hace que las imágenes que no quepan en el contenedor esten ocultas en ves de causar scrolling o un efecto similar, además hacemos las imágenes mas pequeñas y asignamos su posicion como relativa, lo cual sera útil a realizar la animación.

Hasta el momento esto se ve así:

123456

Notece que una de las imágenes se encuentra oculta de momento, debido a que no se alcanza a mostrar en el contenedor.

Después iniciamos con la animacion, requerimos a JQuery para facilitarnos las cosas, tendrán que agregar la referencia a la libreria en su header además de agregar el código de animación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var deltaX = 5;
var deltaT = 42;	
 
$(document).ready (function ()
{
	setTimeout("animate()", deltaT); //start animation
});
 
function animate ()
{
	var left = parseInt ($("#container img").css("left"));
	left -= deltaX;
 
	$("#container img").css("left", left + "px");
 
	setTimeout ("animate()", deltaT); //continue animation
}

Donde deltaT define cada cuantos milisegundos ocurrira la animacion y deltaX indica el desplazamiento cada intervalo de deltaT milisegundos. La animación la realizamos modificando la propiedad left del css. Ahora esto se ve así:

123456

Pero para el momento en que ustedes lleguen a leerlo todas las imágenes habrán desaparecido hacia la izquierda, así que recarguen la pagina por favor y bajen rápidamente hasta este punto para ver la animación.

Eso ocurre por que ocupamos hacer que la marquesina sea giratoria, para lograr el efecto debemos de quitar la primer imagen cuando esta ya no sea visible y ponerla después de la ultima imagen. La primer imagen no es visible cuando su atributo css left tenga un valor de -LongitudImagen, en este caso, -60px.

Como quitaremos la imagen, ocupamos volver a ajustar el desplazamiento a la izquierda aumentando el atributo css left con la longitud de la imagen que quitamos, es decir 60px. El script queda entonces:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var deltaX = 5;
var deltaT = 42;	
var imageWidth = 60;
 
$(document).ready (function ()
{
	setTimeout("animate()", deltaT); //start animation
});
 
function animate ()
{
	var left = parseInt ($("#container img").css("left"));
	left -= deltaX;
 
	if (left <= -imageWidth) //if first image is no longer visible
	{
		left += imageWidth;
		$("#container img:first")
                	.remove ()
                	.insertAfter("#container img:last");
	}
 
	$("#container img").css("left", left + "px");
 
	setTimeout ("animate()", deltaT); //continue animation
}

Y ya podemos ver la animación circular:

123456

Por ultimo requerimos que al dar click en una imagen la mostremos en su tamaño original, para dar el efecto de vinculo debemos de cambiar el css de las imágenes para que aparezca la “manita” cuando pongamos el puntero sobre la imagen, el css queda entonces:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#container
{
	overflow: hidden;
	width: 400px;
	height: 64px;
	border-style: solid;
}
#container img
{
	position: relative;
	width: 60px;
	height: 64px;	
	cursor: pointer;
}

Solo nos falta el script, pero debemos de tener cuidado, por que cuando quitamos la imagen para ponerla al final de la lista perdemos la asociación del evento y tenemos que volverla agregar,por lo que el script final queda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var deltaX = 5;
var deltaT = 42;	
var imageWidth = 60;
 
$(document).ready (function ()
{
	$("#container img").click (changeViewportImage);
	setTimeout("animate()", deltaT); //start animation
});
 
function changeViewportImage ()
{
	$("#viewport img").remove ();
	$("#viewport").append ($(this).clone ());
}
 
function animate ()
{
	var left = parseInt ($("#container img").css("left"));
	left -= deltaX;
 
	if (left <= -imageWidth) //if first image is no longer visible
	{
		left += imageWidth;
		$("#container img:first")
		    .remove ()
		    .insertAfter("#container img:last")
		    .click (changeViewportImage);
	}
 
	$("#container img").css("left", left + "px");
 
	setTimeout ("animate()", deltaT); //continue animation
}

Y queda finalmente así (recuerden dar click sobre alguna imagen):

123456

Tambien pueden ver el ejemplo completo aquí

Evaluando expresiones aritméticas con C# (Shunting-yard)

May 26th, 2009 by AlbertEin 2 comments »

Fire_Tony tenia que escribir un programa que parseara una expresión aritmética infija (3*1/(2-6)), la convirtiera en un arbol binario, para después mostrar la expresión en notación polaca inversa (sufija) y evaluara el resultado.

El pobre no pudo terminar el problema a tiempo, y como me llamo la atención y no tenia mucho que hacer me ofrecí a resolver el problema para que revisara el código y no se viera en ese dilema la próxima ocacion.

El programa por sencillez solo evalúa numeros de 0 al 9 y reconoce los operadores *,+,- y / pero puede ser expandido fácilmente para mas casos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
class SixPackJoy
{
    public static void Main(string[] args)
    {
        Console.WriteLine ("Expression: ");
        var expression = Console.ReadLine().Replace(" ", "");
        var output = new Stack<BinaryNode> ();
        var stack = new Stack<Operator> ();
        var index = -1;
 
        foreach (var token in expression)
        {
            index++;
            if ("0123456789".Contains(token)) //numeric token
            {
                output.Push(new BinaryNode (token));
            }
            else if ("*/+-".Contains(token)) //operator token
            {
                var op = new Operator (token);
 
                var lastOperator = stack.Count > 0 ? stack.Peek() : null;
                if (lastOperator != null && 
                    !lastOperator.IsParenthesis && 
                    op.ComparePrecedence(stack.Peek()) <= 0)
                {
                    var node = new BinaryNode(stack.Pop().Value);
                    if (output.Count < 2)
                    {
                        Console.WriteLine("Insuficcient operator argumets, process halted");
                        return;
                    }
                    node.RightChild = output.Pop();
                    node.LeftChild = output.Pop();
                    output.Push(node);
                }
                stack.Push(op);
            }
            else if (token == '(')
            {
                stack.Push(new Operator(token));
            }
            else if (token == ')')
            {
                while (true)
                {
                    if (stack.Count == 0)
                    {
                        Console.WriteLine("Parenthesis missmatch at {0}, process halted", index);
                        return;
                    }
                    var op = stack.Pop();
                    if (op.IsParenthesis)
                        break;
 
                    if (output.Count < 2)
                    {
                        Console.WriteLine ("Insuficcient operator argumets, process halted");
                        return;
                    }
                    var node = new BinaryNode (op.Value);
                    node.RightChild = output.Pop ();
                    node.LeftChild = output.Pop ();
                    output.Push (node);
                }
            }
            else
            {
                Console.WriteLine("Invalid token '{0}' at {1}, process halted", token, index);
                return;
            }
        }
 
        while (stack.Count != 0)
        {
            var op = stack.Pop();
            if (op.IsParenthesis)
            {
                Console.WriteLine ("Parenthesis missmatch, process halted");
                return;
            }
            if (output.Count < 2)
            {
                Console.WriteLine("Insuficcient operator argumets, process halted");
                return;
            }
            var node = new BinaryNode(op.Value);
            node.RightChild = output.Pop();
            node.LeftChild = output.Pop();
            output.Push(node);
        }
 
 
        if (output.Count != 1)
        {
            Console.WriteLine("Invalid expression, process halted");
            return;
        }
 
        var ast = output.Pop();
        Console.WriteLine("{0} = {1}", ast.GetSufixNotation (), ast.Evaluate());
 
    }
}
 
class BinaryNode
{
    public BinaryNode LeftChild;
    public BinaryNode RightChild;
 
    public BinaryNode(char value)
    {
        Value = value;
    }
 
    public char Value;
 
    public double Evaluate()
    {
        if (LeftChild == null)
            return double.Parse(Value.ToString ());
 
        var operations = new Dictionary<char, Func<double, double, double>> ()
          {
             {'*', (x, y) => x * y},
             {'/', (x, y) => x / y},
             {'+', (x, y) => x + y},
             {'-', (x, y) => x - y},
          };
 
        return operations[Value](LeftChild.Evaluate(), RightChild.Evaluate());
    }
 
    public string GetSufixNotation()
    {
        if (LeftChild == null)
            return Value.ToString ();
 
        return string.Format("{0} {1} {2}",
            LeftChild.GetSufixNotation(),
            RightChild.GetSufixNotation(),
            Value);
    }
}
 
 
class Operator
{
 
    public char Value;
 
    public Operator(char value)
    {
        Value = value;
    }
 
    public bool IsParenthesis
    {
        get
        {
            return Value == '(';
        }
    }
 
    public int ComparePrecedence(Operator o)
    {
        if ("+-".Contains(Value))
        {
            if ("+-".Contains(o.Value))
                return 0;
            else
                return -1;
        }
        else if ("+-".Contains(o.Value))
            return 1;
        else
            return 0;
    }
}

#twitterfail #fixreplies

May 13th, 2009 by AlbertEin 7 comments »

Recientemente las gentes de Twitter hicieron un pequeño cambio al que ellos llaman “Small Settings Update”, y del cual se puede saber un poco mas en su blog

Ese cambio a molestado a muchas personas (incluyéndome), dejando a varios inconformes mandando retwitts una y otra ves para tratar llamar la atención (hacer bola pues) a los admins de Twitter.

¿Pero de que se trata ese cambio?
Imaginemonos que tenemos a Alice, Bob y Carol, Alice es amiga de Bob, y Bob es amiga de Carol, por lo tanto Alice “sigue” (follow) a Bob y a su vez Bob sigue a Carol.

Si Carol escribe un reply a Bob, Alice no lo ve, lo cual es natural ya que Alice no esta siguiendo a Carol, pero cuando Bob responde a Carol es donde encontramos el dilema.

Anteriormente si Alice seguia a Bob, el reply de Bob hacia Carol era leído por Alice también, lo que parece poco natural pero tenia un efecto útil al que muchas personas se acostumbraron, permitía conocer nuevas personas, si un reply te llamaba la atención podías buscar la fuente de la informacion, y de esa manera Alice podía conocer a Carol.

Con el nuevo setting, Alice no vera la respuesta de Bob a Carol por no seguir a Carol, por lo que Alice jamas podrá conocer a Carol, la que pudo muy bien haber sido su mejor amiga de toda la vida.

Espero que estés contento Twitter, acabas de destruir la vida de Alice y Carol.

¿Por que twitter no dejo eso como una setting ya sea opt-in o bien opt-out?

Pandemia – II

May 12th, 2009 by AlbertEin 5 comments »

Ayer fui a el cine, hace poco fueron reabiertos después de que la psicosis haya terminado en el transcurso de la semana pasada y el espectáculo que presencie fue por lo menos curioso.

Al llegar a la plaza Forum (Centro comercial de la localidad) por una de las entradas había una pequeña hoja pegada en la puerta de cristal informando que había gel antivacterial para disposición de todos, y efectivamente, en unas de las mesitas unos pasos después se encontraba un frasco de gel esperando a ser usado.

Al entrar al cine la cosa se fue volviendo mas bizarra, todos los empleados tenían cubre boca (pero no todos lo portaban correctamente), incluso la tipa que vende los boletos detrás de una placa de cristal (WTF?!). Aparte de eso se encontraban pequeñas botellas amarillas con una cara sonriente (mas gel por supuesto) en distintos lugares, la taquilla, cafetería y dulcería, ninguna se salvaba. Además, se podían ver unas placas que mencionaban que por disposición oficial, era OBLIGATORIO desinfectarse las manos antes de entrar a la sala, junto con la ya clásica información sanitaria, lo curioso es que a nadie le importaba y no había nadie asegurándose que la “DISPOSICIÓN” fuera honrada, tan secillo que hubiera sido “forzar” el uso del gel al momento de entregar el boleto.

En fin, veremos como sigue la cosa.