Mi posición con respecto a pinning

Si ya voy mezclando palabras raras en el título pueden empezar a adivinar que este es un post técnico, y tendrán razón.

¿Qué significa pinning? Un montón de cosas, pero en el mundo del software, o al menos en la parte de distribución de software, significa especificar exactamente la versión de una dependencia.

Por ejemplo, yo puedo hacer un programejo que usa la biblioteca requests, y no me importa la versión, entonces en la lista de dependencias pongo requests y ya. Pero si quiero especificar exactamente qué versión de esa biblioteca necesito, pondría algo como requests == 2.7.1. Eso es pinnear (mezclando ahora inglés y castellano) la versión de la dependencia, que es como agarrarla con un alfiler para que no se mueva y siempre sea la misma.

Le ponemos un pin

¿Cuándo tiene sentido hacer eso y cuándo no? ¿Depende del entorno donde correrá mi programejo? ¿De las dependencias que estoy usando? ¿De la forma de distribución? Un poco de todo eso apunta a contestar este post.

Entonces...

Mi posición con respecto a pinning

Ya sabemos que los extremos son malos. Traducido al tema que nos atañe, podemos decir que no queremos ni nada pinneado nunca, ni todo pinneado todo el tiempo.

El problema de "nada pinneado nunca" es que es muy difícil poder garantizar la calidad del sistema que estamos armando. Si en desarrollo usamos la biblioteca versión X, pero luego cuando desplegamos todo en un servidor termina instalando la versión Y, puede ser que nos explote todo. O peor, que parezca funcionar, pero que no funcione correctamente. Y si lo distribuimos es aún más complicado: si el sistema lo instalan un montón de personas en sus computadoras vamos a tener mil combinaciones de distintas versiones.

Por otro lado, si tenemos "todo pinneado todo el tiempo", rompemos la evolución del software que contiene nuestro sistema. La evolución es un concepto central, no podemos cortar la evolución de las dependencias de nuestro software porque terminamos atados a versiones viejas. Y no es un problema de alguna funcionalidad más o menos, sino de seguridad: a menos que tengamos atrás un equipo de especialistas en seguridad haciéndose cargo del mantenimiento de versiones viejas, tenemos que tratar de usar todo lo nuevo en todos lados.

Entonces, tenemos que encontrar un balance entre ambos extremos, que es lo que les comento en el resto del post.

Tengamos en cuenta que queremos distintos comportamientos si tenemos bibliotecas o aplicaciones, y en este último caso dónde correrán las aplicaciones, si del lado del cliente (luego de que empaquetamos el software) o en un servidor (que desplegamos directamente).

Por qué les decimos bibliotecas a las bibliotecas

Bibliotecas

Si estamos trabajando con bibliotecas, las mismas tienen que ser lo más flexibles posible, ya que van a ser usadas de maneras que no se pueden prever: nunca vamos a tener el contexto en el qué se usarán nuestras bibliotecas.

Debemos especificar qué dependencias se necesitan, pero ser lo más libres y genériques posibles con respecto a las versiones, luego la aplicación que use nuestra biblioteca especificará la versión, o no. No es de nuestra incumbencia, nuestra biblioteca debería ser independiente de las versiones de sus dependencias... y aunque ya sabemos que esto no es posible en su totalidad, debemos tratar de restringir las versiones lo menos posible.

En otras palabras, está mal definir que nuestra biblioteca necesita la dependencia X en la versión == 2.7.1, pero está bien definir que la necesita en una versión => 2 o incluso => 2; != 2.0.4, en caso de que haya alguna incompatibilidad puntual. Y después será la aplicación la que defina en qué versión necesita sus propias dependencias, y se hará el análisis en conjunto para determinar si hay un conflicto. Si la biblioteca defina una dependencia X en una versión específica, y la aplicación también depende de la misma X, está condicionada a usar sólo esa versión. Peor aún, si la aplicación necesita las bibliotecas foo y bar, y foo define la dependencia X en una versión y bar define la misma dependencia X en otra versión, la aplicación directamente no podrá usar ambas foo y bar.

Entonces, recapitulemos: para las bibliotecas seamos lo menos específicos posible en las versiones de sus dependencias. Arranquemos con no indicar ninguna versión en ninguna dependencia, y vayamos agregando restricciones con el tiempo, sólo si encontramos alguna incompatibilidad.

Local para eventos en el lago Pavillión, en Copenhague, Dinamarca

Aplicaciones

Con las aplicaciones es diferente. En el momento en que empaquetamos una aplicación para distribuirla, o la desplegamos en servidores para ser usada, queremos poder garantizar que se ejecutará correctamente de cara a les usuaries finales.

La calidad de la aplicación la garantizamos con distintas evaluaciones que hacemos, que pueden ser pruebas de unidad, pruebas de integración, pruebas manuales. Un proyecto robusto siempre tendrá alguna combinación de todas estas pruebas que se realizarán para determinar la calidad de una determinada versión de la aplicación.

Pero esta versión de la aplicación, ¿qué versión de cada una de sus dependencias utilizará? Si corremos todas las pruebas para la versión que queremos liberar de nuestra aplicación usando la versión X de una dependencia, pero al momento de empaquetarla o desplegarla en un servidor se termina usando la versión Y de esa dependencia, en realidad las pruebas que corrimos no son válidas.

Tengamos en cuenta que en realidad no hay mucha diferencia entre si a la aplicación la empaquetamos para distribuirla o la desplegamos en un servidor para ser usada. En general tanto el proceso de empaquetado como el de despliegue terminarán instalando nuevamente las dependencias necesarias, y a menos que todas las versiones estén especificadas, no tenemos control de cuales serán usadas.

En otras palabras, para garantizar la calidad de la aplicación tenemos que pinnear las versiones de las dependencias, correr toda la batería de pruebas que tengamos utilizando esas dependencias, y luego empaquetar o desplegar la aplicación usando exactamente esas dependencias.

Pero si tenemos todo pinneado, volvemos al problema del que hablábamos antes de poder evolucionar, quedamos atrapados en versiones viejas con posibles problemas sin corregir. O peor, con fallas de seguridad expuestas.

Praga, de noche, luego de la lluvia

La forma más piola que he encontrado de tanto poder garantizar la calidad final como también de evolucionar en el tiempo es tener dos listas de dependencias.

La primera lista tendrá las dependencias directas de nuestra aplicación (no las dependencias de las dependencias) de la forma más laxa posible: similar a lo que hacemos con las bibliotecas, a priori no especificaremos ninguna restricción, y sólo las agregaremos con el tiempo si encontramos incompatibilidades puntuales.

La segunda lista tendrá todas las dependencias de nuestra aplicación y a la vez todas las dependencias de las dependencias, y las dependencias de las dependencias de las dependencias, etc., con la versión específica con que fueron instaladas. Todas las pruebas que correrá el desarrollador, o el sistema de CI/CD (Continuous Integration / Continuous Delivery) que tengamos, se harán utilizando esta segunda lista con todo bien especificado. Y el proceso posterior de empaquetado o despliegue también utilizará esta segunda lista, con lo cual terminamos garantizando la calidad de la aplicación. Incluso, si dudamos de la procedencia de los archivos de nuestras dependencias, podemos hasta sacar el hash de las mismas y luego validarlas; entonces no sólo indicamos que los tests se hacen con la versión foo == 2.1.7 sino que también podemos validar que cuando el server instale esa versión específica el archivo con el que lo haga sea exactamente igual al que usamos nosotros, y nadie nos vendió gato por liebre en el medio (lo que sería un tipo de ataque MITM).

Entonces, ya sabemos que tenemos dos listas para las dependencias de nuestra aplicación, la laxa que nos permite evolucionar y a partir de la cual se arma la muy específica sobre la cual se valida calidad y libera la aplicación.

¿Cómo vamos de una lista a la otra? En tiempo de desarrollo. Será responsabilidad de nosotres les desarrolladores el cada tanto (no tiene que ser todo el tiempo) generar el entorno de desarrollo desde cero utilizando la lista laxa y generar a partir de esa instalación la lista específica. Las distintas herramientas que nos permiten trabajar con entornos de desarrollo en general también nos dan la posibilidad de generar la lista específica a partir del entorno creado (por ejemplo en fades tenemos la opción --freeze).

Muy bien lograda la ambientación de una "taberna medieval" en Praga

Para terminar, tengamos en cuenta que todas las dependencias que vengo mencionando son las de producción, aquellas bibliotecas que nuestra aplicación necesita para finalmente correr.

Pero también tenemos aquellas dependencias de desarrollo: todas las bibliotecas y utilidades que usaremos les desarrolladores para, justamente, desarrollar la aplicación. Estas dependencias no se instalarán, incluirán, ni usarán en el paquete que armemos para distribuir la aplicación o en el servidor. Un ejemplo de este tipo de dependencias podría ser pytest, el corredor de pruebas de unidad.

Para estas dependencias tendremos otra lista, separada de las de producción. Hay distintas formas de manejar esta separación; por ejemplo, si utilizamos archivos de dependencias podemos tener un requirements.txt para las de producción y requirements-dev.txt para las desarrollo.

El punto es que a las dependencias de desarrollo no las tenemos que pinnear para nada (obviamente, a menos que encontremos alguna incompatibilidad o bug en particular). Siempre utilizaremos lo último de lo último cuando armemos los entornos de desarrollo, y si en algún momento algún test falla porque las herramientas que utilizamos evolucionaron (por ejemplo, flake8 detectando un caso nuevo) corregiremos nuestro código y seguiremos adelante. Pero no hay motivo alguno para pinnearlas.

Comentarios Imprimir

El arroz

Hace rato que tenía ganas de aprender un poco sobre el arroz.

Me llamaba la atención que esté ese "arroz para sushi" que en su preparación se le pone vinagre y sale muy "pegajoso" para armar las distintas piezas. O que esté la dicotomía entre "hacerlo en mucha agua y colarlo" y "hacerlo en la cantidad justa de agua". O que para la paella recomienden "ni tocarlo" y en el risotto le hagan bailar la tarantela.

Empecé a juntar algo de info, entonces, de lo cual resumo un poco a continuación y le doy algo de orden, haciendo foco en los detalles que me interesaron. Obviamente no es un "tratado sobre el arroz", nada más lejos de eso, y toda la data que tiro acá se puede encontrar más o menos rápido en Internet; si quieren profundizar arranquen por Wikipedia, el INTA, y Alimentos Argentinos.

La simpleza de un plato de arroz

Lo primero que quiero resaltar, para tirar abajo todas esas recomendaciones o recetas genéricas que te dicen "al arroz hay que hacerlo de tal manera o hacerle tal cosa", es que no podemos hablar de "el arroz".

Hay cerca de diez mil variedades de arroz, con un buen rango de distintas propiedades, entonces siempre hay que ser un poco más específicos, y hay que tener especial cuidado si estamos viendo recetas o recomendaciones de otros países ya que quizás no usen el mismo tipo de arroz que nosotros. Todas estas variedades son de la misma especie Oryza sativa (que me causa gracia su nombre porque la "oriza" es una especie de plato con filo que se usa en un libro de Stephen King como arma para decapitar enemigos, al tirarla como un disco), y tiene dos subespecies: la índica, que suele cultivarse en los trópicos, y la japónica, que también crece en climas templados y se caracteriza por su alto contenido en almidón (ya vamos a ver donde esto es importante).

Además, también depende de procesos que se le hagan al arroz luego de cosechado. El más común, que se le hace a la mayoría de arroces, es que se "pulen" para sacarles de la cubierta que los protege (que se convierte en salvado), lo que elimina así aceites y enzimas del arroz. Pero también hay otros procesos, algunos cuento abajo.

Cosechadora de arroz

Se produce mucho arroz. Alrededor de 750 millones de toneladas anuales, lo cual, obviamente, no nos dice nada porque no llegamos a "entender" un número tan grande. Las proporciones y comparaciones ayudan: el 90% de la producción y del consumo se concentra en el continente asiático.

En otras palabras, el 10% se produce y consume afuera de Asia. América es el segundo continente (aproximadamente un 6% del total), de lo que le corresponde un tercio a Brasil, el principal productor.

Argentina, puntualmente, no se destaca: sólo un 3.5% del continente. Concentra su producción en Corrientes (50%), Entre Ríos (32%), Santa Fe (13%) y el resto principalmente distribuido en Chaco y Formosa.

Algunos detalles del arroz a nivel nutricional:

  • tiene más lisina que el trigo/maíz/sorgo; la lisina es uno de los nueve aminoácidos esenciales para los seres humanos, y debemos incorporarlo de alguna manera
  • ojo cuando está limpio (sin salvado): tiene menos fibra que otros cereales
  • proporciona mayor contenido calórico y más proteínas por hectárea que el trigo y el maíz (lo que es importante a la hora de alimentar poblaciones)
  • ¡no tiene gluten! por lo tanto es apto para consumo por personas celíacas o con otras sensibilidades al gluten, pero no puede usarse para hacer panificados
Arroces varios

Decía que hay muchos tipos de arroz. La principal categorización es por la forma, o más bien por la relación entre su largo y su grosor (no podemos dejar de mencionar a Les Luthiers... "Mi nombre es Oblongo, que en dialecto Swahili quiere decir más largo que ancho").

Tenemos varios tipos:

  • grano corto: es casi esférico, ideal para sushi porque los granos quedan unidos incluso a temperatura ambiente.
  • grano medio: su longitud es de entre dos y tres veces su grosor; es el que más se consume en Argentina en particular, sudamérica y centroamérica en general, y es el tipo de arroz que se usa en el risotto o la paella (el arroz bomba pertenece a esta categoría).
  • grano largo: es entre cuatro y cinco veces más largo que grueso, no se ve mucho por acá; tiene mucha amilosa (almidón), por lo que necesita mucha agua en la cocción.
  • silvestre: es de casi 2 cm de largo

A algunos tipos de arroz se les dice glutinosos, para indicar que son pegajosos después de cocerse (¡no que tienen gluten!), efecto que viene dado por el tipo de almidón que contienen. También hay los aromáticos, característica de algunos tipos de arroces que desprenden aromas (a flores, frutos secos, etc.) luego de ser cocidos.

También podemos separar el arroz en común o integral, aunque esto es sólo una cuestión de proceso. Al integral sólo se le quita la cáscara exterior (o gluma), que no es comestible. Conserva el germen íntegro con la capa de salvado que lo envuelve, lo que le confiere un color moreno claro.

Si entramos en el detalle de la estructura del grano de arroz, veremos que es similar al de otros cereales, especialmente a la cebada y avena que también tienen una cáscara externa. El grano está constituido fundamentalmente por cuatro partes:

  • una cáscara externa que envuelve el grano
  • el salvado, constituido por diferentes capas que se encuentran por debajo de la cáscara
  • el germen, que es el embrión de la semilla (la parte reproductiva que germina para crecer y dar lugar a una nueva planta)
  • el endospermo (la parte más importante del grano en peso y tamaño) que contiene nutrientes de reserva que son utilizados durante la germinación (principalmente almidón).

Ya mencionamos varias veces el almidón. ¿Qué es? Es una macromolécula, compuesto por dos tipos de glucosas, la amilosa y la amilopectina, en distintas proporciones (cuanto de una y de otra varía según el vegetal). Es la forma en que la mayoría de los vegetales reservan energía, y notablemente es el carbohidrato más consumido por humanos.

Estructuras de la amilosa y amilopectina que forman el almidón

El arroz no es excepción y también contiene almidón. Nos afecta en dos situaciones, puntualmente.

El primero es el nutricional: aporta muchas calorías y no deja de ser un tipo de carbohidrato que convertimos en azúcar (lo cual es un riesgo para aquelles que sufren de diabetes). Habiendo dicho eso, existe algo que se llama almidón retrógado, que se consigue enfriando el arroz luego de cocinarlo, y que evita que el almidón sea digerido por el cuerpo, sino que pasa directamente y es aprovechado por los microbios intestinales. Así que ya saben, ¡nada como una buena ensalada fría de arroz!.

El otro detalle con respecto al almidón es que cuanta más amilosa contiene un grano de arroz, más temperatura, agua y tiempo requiere para su cocción, y más pegajoso quedará luego. Al lavar o enjuagar el arroz, sacamos una capa importante de almidón y de esta manera terminamos consiguiendo arroz suelto y seco luego de cocinarlo. Si decidimos conservar el almidón al final quedará cremoso y pegajoso. Entonces, si queremos arroz para una ensalada (como recomiendo arriba), mejor lavarlo, y si queremos hacer un risotto, mejor no.

Hay otro factor que afecta esta dinámica: revolver el arroz cuando se está cocinando. Si estamos buscando que la preparación no salga pastosa debemos evitar revolver mucho, para que el arroz no largue el almidón, lo cual sí queremos cuando hacemos un risotto (y por eso se lo mueve tanto).

Y antes de dejar de hablar sobre formas de cocinar el arroz, un detalle sobre lo cual estaba intrigado: el agregarle vinagre al arroz del sushi. Parece ser que esto se hace para evitar el crecimiento bacteriano (el vinagre es un bactericida natural, como la canela que se usan en algunas preparaciones de la India), ya que el arroz crudo suele llevar esporas en estado de hibernación como la bacillus cereus, que produce toxinas que afectan al sistema gastrointestinal. Estas esporas sobreviven las altas temperaturas de cocción, por eso el arroz debe servirse inmediatamente tras su cocinado o conservarlo refrigerado, lo cual es fácil hoy en día pero muchas recetas o costumbres provienen de épocas donde mantener en frío no era sencillo o directamente imposible.

Arroz glutinoso

Les había prometido unas palabras sobre procesos que se le hacen al arroz. De quitarle la cáscara exterior (y convertirlo de integral a pulido ya hablé antes). Vamos con algunos otros.

El parboilizado (o vaporizado) es el proceso donde se somete el arroz con cáscara a un remojo de 60 ℃ y luego a una fuerte presión de vapor. De esta manera se elimina una buena parte del almidón pero se conservan vitaminas y sales minerales (se trasladan de la fibra al grano) que los arroces tradicionales pierden durante su pulido. Es por esto que el arroz vaporizado tiene un 80% del valor nutricional del arroz integral. Luego del proceso el arroz queda más duro y brillante que otros arroces (porque el almidón se gelatiniza), lo que lleva a requerir más tiempo de cocción, quedando luego más firme y menos pegajoso.

El precocido es, obviamente, cocinar el arroz antes de presentarlo para su venta. El proceso es muy genérico, y se usa como medio para otros fines. Se destacan el lograr un "arroz de cocción rápida" (como característica de venta), precocer el arroz parboilizado (para compensar que ese proceso aumenta el tiempo de cocción necesaria), y el precocido y posterior deshidratado del arroz, para preparar comidas pre-hechas (como esas que vienen en un sobrecito para hidratar y calentar y te sale el guiso listo). Ojo, no confundir este proceso de deshidratación recién mencionado con el proceso de secado que se le hacen a todos los arroces luego de cosechados para que los granos no se deterioren mientras están almacenados.

Almacenamiento de arroz en Laos

Bueno, se hizo largo pero espero que les haya gustado. Yo, por lo pronto, aprendí un montón, así que objetivo cumplido :)

Lo que me quedó pendiente es hacer una investigación de mercado... ¿qué tenemos a "nuestro alcance" a la hora de comprar arroz? ¡Comenten si saben!

Comentarios Imprimir

Análisis de pelis post pandemia

Wow, hace un año que no meto un post de estos... ¡y se nota! Muchas películas vistas, muchas anotadas nuevas (es evidente que la pandemia, en ese aspecto, ya pasó), y tantísimas series vistas.

Con respecto a estas últimas, de las comenzadas en el post anterior terminé Big Little Lies y The Americans, las dos cerraron muy bien.

Por otro lado series que ni había mencionado: tengo un montón, aca dejo algunas palabras de cada una de las que más me gustaron... Love, death & robots es una serie de cortos "filmados" con distintas técnicas, todas hablando de alguna manera de futuros distópicos en los que los robots están involucrados. Fleabag: una hermosa serie cortita (de Phoebe Waller-Bridge, de la que me estoy volviendo fana) que no rompe la cuarta pared, la destroza. 30 Monedas es una de terror escrita en parte por Alex de la Iglesia, y cumple con todo lo implícitamente prometido. The Kominsky Method es una serie tragicómica sobre ser vieje, con excelentes actuaciones y muy buen ritmo. When They See Us es una gran miniserie (dura, pero muy bien hecha) sobre la discriminación y el actuar tortuoso de las fuerzas de seguridad, con muy buenas actuaciones. Sobre The Boys, Stranger Things y Unorthodox no voy a decir nada porque son super conocidas.

Las mejores series de esta tanda

Hubieron otras que estuvieron bien y me gustaron, alguna bastante, pero tampoco me fascinaron: Altered Carbon, La Mante, Two Weeks To Live, Lisey's story, y The Sinner.

Me gustaron pero tampoco taaaaaanto

E incluso dejo afuera un par que no me gustaron, eso les da una idea de que series vi un montón :). Y con Moni seguimos con Rita, y arrancamos Sex Education. Con los chicos estamos viendo una oldie: Chuck.

Vamos con las películas vistas, entonces...

  • 18 regali: +1. Fantástica historia. Para llorar un rato :)
  • Black Widow: -1. Me aburrió, más que nada...
  • Frequently Asked Questions About Time Travel: +0. Te tiene que gustar la temática, y la peli en sí no es la hostia, pero es muy divertida :)
  • Joker: +0. No deja de ser el Guasón, pero está muy bien hecha, y la actuación de Phoenix es increible.
  • La fiesta silenciosa: +0. Tiene algunos lugares comunes que bleh, y no me banco a Bigliardi, pero zafa.
  • Marriage Story: +0. Excelentes actuaciones, pero es una obra de teatro.
  • Parasite: +0. Está buena como peli en sí, y para espiar un poco esta cultura que no conocemos mucho.
  • Radioactive: +1. La historia es conocida, claro, pero las actuaciones y la puesta en escena son bárbaras.
  • Tenet: +1. Excelente. Hay que verla un par de veces para terminar de entenderla, porque tiene un concepto que nunca se exploró en otra película y es muy dificil de mostrar y de seguir, pero es genial.
  • The Heist of the Century: +1. Bárbara, muy bien hecha. Divertida y ágil. Claro, la historia es conocida (un hecho real), pero no por eso pierde interés.
  • The Invisible Man: -0. Más allá de algún giro sorpresivo (no voy a spoilear), el resto es una sarta de lugares comunes.
  • The Old Man & the Gun: -0. Me aburrió bastante :(
  • The Platform: +0. Muy cruda, pero super interesante. Me gusta que tocan y exploran un tema conocido pero desde una propuesta extremadamente original.
18 regali

Y las anotadas para ver... hubo un bache donde no aparecían películas nuevas (¿otro efecto secundario de la pandemia?), pero después levantaron el ritmo de nuevo.

  • All the Old Knives: (2022; Suspense, Acción) Cuando la CIA descubre que uno de sus agentes filtró la información que costó la vida a más de 100 personas, el veterano agente Henry Pelham (Chris Pine) es asignado para descubrir quién es el topo entre sus antiguos compañeros en la oficina de la agencia en Viena. Durante su investigación se reencuentra con su antigua colega y ex amante Celia Harrison (Thandiwe Newton). La pareja se verá obligada a difuminar los límites entre la profesión y la pasión mientras reexaminan la misión en la que participaron 6 años atrás. [D: Janus Metz; A: Chris Pine, Thandiwe Newton, Jonathan Pryce, Laurence Fishburne, Corey Johnson]
  • Army of the Dead: (2021; Acción, Crimen, Terror, Suspense) Un grupo de mercenarios decide llevar a cabo el mayor atraco que jamás se haya realizado en la ciudad de Las Vegas, Nevada justo después de que se produzca una epidemia de muertos vivientes. Para ello tendrán que adentrarse en una zona de cuarentena, con los riesgos que ello conlleva. [D: Zack Snyder, Damon Caro; A: Dave Bautista, Ella Purnell, Omari Hardwick, Ana de la Reguera, Theo Rossi]
  • Bullet Train: (2022; Acción, Comedia, Suspense) Cinco asesinos a sueldo se encuentran a bordo de un tren bala que viaja de Tokio a Morioka con unas pocas paradas intermedias. Descubren que sus misiones no son ajenas entre sí. La pregunta es quién saldrá vivo del tren y qué les espera en la estación final. [D: David Leitch; A: Brad Pitt, Joey King, Aaron Taylor-Johnson, Brian Tyree Henry, Andrew Koji]
  • Competencia oficial: (2021; Comedia, Drama) Dos actores de muy diferentes trayectorias chocarán por sus métodos contrapuestos durante la preparación de una película financiada por un millonario ávido de notoriedad y dirigida por una prestigiosa y algo excéntrica directora. [D: Gastón Duprat, Mariano Cohn; A: Penélope Cruz, Antonio Banderas, Oscar Martínez, José Luis Gómez, Manolo Solo]
  • Crimes of the Future: (2022; Drama, Terror, Ciencia ficción) En un futuro no muy lejano la humanidad está aprendiendo a adaptarse a su entorno sintético, en un mundo donde no existe el dolor. Esta evolución lleva a los humanos más allá de su estado natural y hacia una metamorfosis, alterando su estructura biológica. [D: David Cronenberg, David Warry-Smith; A: Viggo Mortensen, Léa Seydoux, Scott Speedman, Kristen Stewart, Welket Bungué]
  • Doctor Strange in the Multiverse of Madness: (2022; Fantasía, Acción, Aventura) Viaja a lo desconocido con el Doctor Strange, quien, con la ayuda de tanto antiguos como nuevos aliados místicos, recorre las complejas y peligrosas realidades alternativas del multiverso para enfrentarse a un nuevo y misterioso adversario. [D: Sam Raimi, Dominic Fysh; A: Benedict Cumberbatch, Elizabeth Olsen, Chiwetel Ejiofor, Benedict Wong, Xochitl Gomez]
El robo del siglo
  • Finch: (2021; Ciencia ficción, Drama, Aventura) Tom Hanks interpreta a Finch, un ingeniero especializado en robótica y uno de los pocos supervivientes de un cataclismo solar que ha convertido al mundo en un páramo. Pero Finch, que lleva una década viviendo en un búnker subterráneo, ha construido un mundo propio que comparte con su perro, Goodyear, y con un robot, interpretado por Caleb Landry Jones, que creó para que cuide de Goodyear cuando él ya no pueda hacerlo. Cuando el trío se embarca en un peligroso viaje al desolado oeste americano, Finch se esfuerza por mostrar a su creación, que se bautizó como Jeff, y la alegría y la maravilla que representan estar vivo. Su viaje está plagado de retos y de humor, ya que a Finch le resulta tan difícil lograr que Jeff y Goodyear se lleven bien como a él lidiar con los peligros de este nuevo mundo. [D: Miguel Sapochnik; A: Tom Hanks, Caleb Landry Jones, Oscar Avila, Lora Martinez-Cunningham, Marie Wagenman]
  • Nightmare Alley: (2021; Crimen, Drama, Suspense) Un buscavidas se compincha con una pitonisa para engañar a la gente y conseguir dinero... Remake del film "El callejón de las almas perdidas" (Nightmare Alley) de 1947. [D: Guillermo del Toro; A: Bradley Cooper, Rooney Mara, Cate Blanchett, Toni Collette, Willem Dafoe]
  • No Sudden Move: (2021; Crimen, Drama, Misterio) Detroit, año 1954. Unos delincuentes de poca monta son contratados para robar lo que ellos creen que es un simple documento y será un trabajo fácil. Cuando su plan no sale como ellos esperaban, emprenden la búsqueda de quien los contrató y del propósito real para el que fueron contratados. [D: Steven Soderbergh; A: Don Cheadle, Benicio del Toro, David Harbour, Jon Hamm, Ray Liotta]
  • No Time to Die: (2021; Aventura, Acción, Suspense) James Bond se encuentra disfrutando de unas merecidas vacaciones en Jamaica. Sin embargo, su paz termina cuando su amigo de la CIA, Felix Leiter, lo busca para una nueva misión que implica rescatar a un importante científico que ha sido secuestrado. [D: Cary Joji Fukunaga; A: Daniel Craig, Léa Seydoux, Rami Malek, Lashana Lynch, Ana de Armas]
  • Old: (2021; Suspense, Misterio, Terror) Thriller sobre una familia que, estando de vacaciones en un paraíso tropical, descubre que la recóndita playa elegida para relajarse unas horas está haciéndoles envejecer rápidamente... reduciendo toda su vida a un único día. [D: M. Night Shyamalan, Darrin Brown; A: Gael García Bernal, Vicky Krieps, Rufus Sewell, Alex Wolff, Thomasin McKenzie]
  • The Last Duel: (2021; Acción, Drama, Historia) Ambientada en Francia, en 1386, cuenta el enfrentamiento entre el caballero Jean de Carrouges y el escudero Jacques LeGris , al acusar el primero al segundo de abusar de su esposa, Marguerite de Carrouges. El Rey Carlos VI decide que la mejor forma de solucionar el conflicto es un duelo a muerte. El que venza será el ganador, sin embargo, si lo hace el escudero, la esposa del caballero será quemada como castigo por falsas acusaciones. [D: Ridley Scott; A: Matt Damon, Adam Driver, Jodie Comer, Ben Affleck, Harriet Walter]
  • The Suicide Squad: (2021; Acción, Comedia, Aventura) Un grupo de super villanos se encuentran encerrados en Belle Reve, una prisión de alta seguridad con la tasa de mortalidad más alta de Estados Unidos. Para salir de allí harán cualquier cosa, incluso unirse al grupo Task Force X, dedicado a llevar a cabo misiones suicidas bajo las órdenes de Amanda Waller. Fuertemente armados son enviados a la isla Corto Maltese, una jungla repleta de enemigos. [D: James Gunn; A: Margot Robbie, Idris Elba, John Cena, Joel Kinnaman, Sylvester Stallone]
  • Avatar: The Way of Water: (2022; Ciencia ficción, Acción, Aventura) Ambientada más de una década después de los acontecimientos de la primera película, 'Avatar: The Way of Water' empieza contando la historia de la familia Sully (Jake, Neytiri y sus hijos), los problemas que los persiguen, lo que tienen que hacer para mantenerse a salvo, las batallas que libran para seguir con vida y las tragedias que sufren. [D: James Cameron; A: Sam Worthington, Zoe Saldaña, Sigourney Weaver, Kate Winslet, Stephen Lang]
  • Emily: (2022; Drama, Historia) [D: Frances O'Connor; A: Emma Mackey, Fionn Whitehead, Oliver Jackson-Cohen, Alexandra Dowling, Gemma Jones]
  • Game Night: (2018; Misterio, Comedia, Crimen) Max y Annie son una pareja que forman parte de un grupo de amigos que queda todas las semanas para una noche de juegos organizada por uno de ellos. En una de esas noches Brooks (Kyle Chandler), el carismático hermano de Max, organiza un misterioso juego en el que sus amigos deberán resolver un asesinato con falsos matones y falsos agentes. Pero, cuando Brooks es secuestrado, los 6 jugadores comienzan a dudar sobre lo que es falso y lo que es real, y se ven inmersos en una noche caótica en la que deberán resolver el caso. [D: John Francis Daley, Jonathan M. Goldstein; A: Jason Bateman, Rachel McAdams, Kyle Chandler, Billy Magnussen, Sharon Horgan]
  • Glass Onion: A Knives Out Mystery: (2022; Comedia, Crimen, Misterio) El detective Benoit Blanc viaja a Grecia para despejar las capas de un misterio que involucra a un nuevo grupo de sospechosos. [D: Rian Johnson; A: Daniel Craig, Edward Norton, Dave Bautista, Janelle Monáe, Kate Hudson]
  • Mission: Impossible - Dead Reckoning Part One: (2023; Acción, Aventura, Suspense) Séptima entrega de la saga Misión Imposible. [D: Christopher McQuarrie, Wade Eastwood; A: Tom Cruise, Rebecca Ferguson, Simon Pegg, Ving Rhames, Hayley Atwell]
  • Smile: (2022; Terror) Tras presenciar un extraño y traumático incidente con un paciente, la doctora Rose Cotter (Sosie Bacon) comienza a experimentar sucesos aterradores que no puede explicar. A medida que un miedo sobrecogedor comienza a afectar a todos los aspectos de su vida, Rose se verá obligada a afrontar a su problemático pasado para sobrevivir y escapar de su terrorífica nueva realidad. [D: Parker Finn; A: Sosie Bacon, Jessie T. Usher, Kyle Gallner, Rob Morgan, Kal Penn]
  • The Menu: (2022; Terror, Comedia) Una joven pareja viaja a uno de los destinos más exclusivos del mundo para cenar en un restaurante que ofrece una experiencia culinaria única. Sin embargo, el chef ha preparado un ingrediente secreto que tendrá un resultado sorprendente en los dos enamorados. [D: Mark Mylod; A: Anya Taylor-Joy, Ralph Fiennes, Nicholas Hoult, Hong Chau, Janet McTeer]
Tenet

Finalmente, el conteo de pendientes por fecha:

(Dic-2015)    1
(May-2016)    9
(Sep-2016)   14   1
(Feb-2017)   23  21   9   1
(Jun-2017)   23  21  18   5
(Dic-2017)   19  19  18  16   5   2   1
(May-2018)       22  22  22  17   9   2
(Sep-2018)           12  12  12  10   3   1
(Mar-2019)               13  13  13  12   2   1   1
(Ago-2019)                   10  10  10   7   2   1
(Feb-2020)                        8   8   8   8   1
(Ago-2020)                            9   9   9   4
(Ene-2021)                                5   5   5
(Sep-2021)                                    5   5
(Sep-2022)                                       20
Total:       89  84  79  69  57  52  45  32  30  37
Comentarios Imprimir

Vacaciones en Mendoza

Durante las vacaciones de invierno nos fuimos en familia a pasear por Mendoza. No las dos semanas, porque Moni no tenía los días en el laburo, pero pudimos coordinar, ajustarnos, y hacer ocho días.

Salimos un viernes y viajamos derechito a San Rafael, donde nos quedamos un par de días. El martes siguiente viajamos a Potrerillos, donde estuvimos hasta el sábado, que volvimos.

Los viajes "largos" los hicimos en un sólo día, que no es lo que acostumbramos cuando vamos tan lejos: normalmente paramos una noche en un punto intermedio. Pero esta vez quisimos probar como era hacer el viaje "de un tirón", aprovechando que les chiques no son tan pequeñes, y teniendo en cuenta que podíamos aprovechar mejor los pocos días de vacaciones que teníamos. Es realizable, pero el invierno no es la mejor época para esos viajes tan largos, porque al anochecer temprano tuvimos un montón de horas de manejo ya siendo de noche (especialmente al final del día, donde estamos más cansades para manejar).

Moni y Male deleitándose con la vista del Embalse Los ReyunosSe chorearon las montañas del fondo

Durante los días que estuvimos en San Rafael y Potrerillos hicimos un montón de actividades, aunque también un poco de fiaca en el hotel y la cabaña, porque la idea también era descansar un poquito :)

La primer mañana en San Rafael luego del viaje arrancamos para el Laberinto de Borges, un actividad que estuvo bárbara, no sólo por el laberinto en sí sino que almorzamos ahí, habían juegos, etc. La tarde de ese día la pasamos en un parque infantil que hay en el centro de la ciudad y paseando por una feria artesanal.

Male y Felu en unos de los pasillos del laberintoLa familia exitosa al salir

El día siguiente lo aprovechamos entero para hacer el Cañón del Atuel, un paseo que se hace largo si se lo aprovecha yendo despacito y parando varias veces.

El lunes arrancó lluvioso y muy neblinoso, tanto que no se veían las montañas desde el hotel. Decidimos hacer paseo "indoor": fuimos a conocer la aicetera Yancanelo y hacer el paseo interno donde te cuentan la historia, cómo se fabrica, etc. Estuvo genial, cien por ciento recomendable. Felu le hizo 3856 preguntas a la guia y se las explicó una por una, ¡un lujo!

El Cañón del Atuel es bastante pedregosoEmbalse Valle Grande, al final del recorrido

Aunque a la tarde despejó un poco y mejoró el clima, todavía no estaba para hacer unas actividades que queríamos (cabalgata y tirobangi), así que basados en el pronóstico las pospusimos para el otro día antes de viajar (mala decisión) y pasamos la tarde descansando en el hotel :)

El martes también amaneció muy neblinoso, así que tuvimos que cancelar el plan de actividades antes del viaje; cargamos el auto y después de desayunar arrancamos para Potrerillos. Fue sin mayor novedad, y hasta interesante, porque sin saberlo fuimos vía Tupungato, donde comienza el Camino de la Carrera que lleva hasta Potrerillos, el cual es de ripio y hay que ir despacio, pero se tienen unas vistas espectaculares. Incluso empezamos a ver nieve por los costados del camino y hasta atravesamos por dentro una nube.

Lectura, una de las actividades preferidas para el relax

El miércoles nos levantamos bien temprano y fuimos a Puquios. En realidad primero paramos en Uspallata, que queda en el camino, y alquilamos equipo para la nieve: algunas cosas para complementar abrigo que nosotros teníamos (botas, pantalones, guantes) y también culopatines para tirarnos por alguna lomita.

Llegamos a Puquios antes del mediodía, y luego de vestirnos/disfrazarnos empezamos a jugar con la nieve :). No sólo tirándonos en culopatín sino también tratando de hacer un muñeco, revolearnos un poco entre nosotros, etc... la cosa sana.

Friazo no te tenemos miedoJugando con la nieve (y de fondo se ve gran parte del predio)

Bien pasadas las dos de la tarde decidimos almorzar. En el predio hay un pequeño restaurant que además de las comidas típicas rápidas (sánguches, hamburguesas, etc) tenían LENTEJAS como plato del día. Con Felu le entramos a las mismas, y fue una gran elección. La macana era que el lugar para comer era al aire libre, y justo había empezado a neviscar. Pero bueno, almorzar pudimos. Después Moni se fue para el auto porque tenía demasiado frío, y les peques y yo nos tiramos algunas veces más con el culopatín, y luego empezamos a regresar.

Paramos un rato en el Puente del Inca para conocerlo (aunque ahora no se puede entrar/cruzar ni acercarse demasiado), luego en Uspallata para devolver el equipamiento, y luego de un largo viaje llegamos a la cabaña en Potrerillos bien entrada la noche.

Si quemamos leña para calefaccionar bien podemos aprovechar y tirar un cacho de carne, ¿no?

El jueves arrancamos más lentos, y luego de desayunar tranquiles salimos a pegar una vuelta. La actividad principal de la mañana fue hacer tirolesa (que ahí le decían canopy). El lugar en sí no tenía una gran vista pero la actividad estuvo buenísima (y fue muy divertido hacerla en familia).

Después apuntamos para el lado de Vallecitos con la idea de volver a ver algo de nieve. El camino era tortuoso y de cornisa pero lo recorrimos sin problemas... hasta que empezó a tener algo de nieve y agua. Ahí nos dio un poco de cagazo de seguir (no tengo 4x4 y tampoco iba a poner las cadenas por un ratito para arriesgarnos en un camino complicado) entonces nos quedamos jugando un poco con la nieve en una de las rectas del recorrido.

Acá si pasamos frío...

Todo muy lindo, pero había un detalle: no teníamos ropa de nieve, sólo algo de abrigo normal extra. Ahí nos dimos cuenta lo importante que es la ropa especializada, porque estuvimos diez minutos con la nieve y ya estábamos todos mojados y cagados de frío. Entonces, de vuelta al auto y a la cabaña.

El último día de actividades amaneció bien despejado. Averiguamos y fuimos a hacer una actividad que nos debíamos: cabalgata. Yo ya había hecho cabalgata dos o tres veces en mi vida, pero nunca tan copado como esto. Nos dieron un caballo a cada une, la guia se subió a otro, y fuimos a hacer un recorrido largo por la montaña. A Male al principio la llevaba ella (Male en su caballo, pero la guia lo llevaba de las riendas desde el otro caballo), pero a los cinco minutos como vio que estaba todo bien la dejó libre. La pasamos bárbaro, y entre la ida, un pequeño descanso, y el regreso, estuvimos cabalgando alrededor de una hora veinte. Para recomendar: se llaman "Cabalgatas Potrerillos", están sobre Los Cóndores.

A la tarde hicimos la última actividad. Nos fuimos caminando (unas doce cuadras) a la casita de Hansel y Gretel a tomar la merienda. El lugar es muy lindo, y aunque la especialidad es chocolate con churros tiene una buena variedad de cafetería y cositas para comer.

Los cuatro jinetes de la Poca LipsisA punto de merendar fuerte

Y llegó el sábado. Levantarse temprano, cargar todo en el auto, desayunar, partir. Viaje laaaaaaaargo, y como decía arriba, llegar muy de noche (¡ya había oscurecido completamente cuando llegamos a Junin!). Pero todo bien con el regreso.

Comentarios Imprimir

Primer curso de la Escuelita Python

¡Ya abrimos las inscripciones para el primer curso!

Está orientado para les que saben algo de programación pero quieren aprender el lenguaje más usado actualmente en el mundo y con más salida laboral. Es el curso ideal para ese público.

Tiene toda la parte de Introducción a Python pero también se van a ver temas como archivos, trabajando en red (cliente y servidor), bases de datos, pruebas de unidad, Unicode avanzado, decoradores, entornos virtuales, ejecución externa, logging, y serialización.

Todo eso no sólo teoría, también práctica supervisada. Son 12 clases de 3 horas cada una, 36 horas en total durante los tres meses que dura. Es presencial, en CABA (en unas oficinas del Polo Tecnológico, en Parque Patricios, a 4 cuadras del subte).

Super completo.

No estoy sólo para tremendo curso, claro, sino que me acompañan Diego Mascialino y Leandro Colombo Viña. Los tres tenemos gran experiencia docente en general y enseñando Python en particular.

Arranca el mes que viene, no hay que colgarse que los cupos no son tantos.

El precio es oferta lanzamiento (válido hasta fin de mes): $52360+IVA, y se puede pagar en hasta seis cuotas sin interés! Por otro lado, si es por transferencia, tiene un descuento extra y queda en $41888+IVA :). Es en blanco y se hacen las facturas correspondientes, así que no duden decirle a sus empleadores que les garpen el cursillo :)

Toda la info del curso.

En la imagen tienen toda la info, para inscribirse o por cualquier consulta manden mail a [email protected].

Comentarios Imprimir