Canonical Voices

What Bitácora de Vuelo talks about

facundo


La combinación de tener buena cámara en el teléfono, y tener el teléfono todo el tiempo a mano, hace que uno saque fotos con dicho dispositivo bastante seguido. Por no decir todo el tiempo.

Lo que no es tan fácil o automático es cómo guardar las fotos, cómo salvarlas de manera que no perderlas si te roban el celular, o lo perdés, o se te rompe, o se rompe la memoria interna, etc. Y además, cómo tenerlas siempre a mano: poder ir a buscarlas fácil para meterlas en un documento y mandarlas por mail, o mezclarlas con las fotos de la cámara grande, etc.

Yo tengo algo armado que me soluciona esto, hace rato, y me está funcionando tan bien que pensé en compartirlo. ¿Es trivial de montarlo para que funcione? No. Pero una vez armado todo, anda pipí cucú. Y gratis :D

Yes!

El setup o configuración tiene tres partes: un servicio online, el teléfono, y la compu o laptop donde trabajes normalmente.

El servicio online que uso es Flickr. Podés sacar una cuenta gratis, te da 1000 GB de almacenamiento. Son cuatro clicks, dale.

Luego, te instalás la aplicación de Flickr en el teléfono, y la configurás para que automáticamente suba las fotos a la nube cuando estés conectado por WiFi. Acá, algunos detalles. Está piola que las suba automáticamente, pero no te consuma internet de la compañía de teléfonos, así que no vas a terminar pagando más a fin de mes. Y funciona bien el "subirlas automáticamente", si estás conectado te las sube al toque, y no es para nada intrusivo. Además, te las sube por default en modo "no compartido con nadie", así que no tengas miedo en sacarte fotos en bolas o al resumen de la tarjeta de crédito, que nadie va a ver esas fotos (a menos que vayas al sitio web de Flickr, las elijas, y les cambies los permisos).

Hasta acá, tenés un backup automático de las fotos. Todo lo que saques lo vas a tener en la nube. Queda el último paso, que es tener las fotos bien a mano.

Para eso, yo tengo un script que corro cada dos horas automáticamente (lo puse en el crontab; dos horas parece mucho, pero no quería pegarle a Flickr todo el tiempo indiscriminadamente, y de última si quiero bajar algo que recién subió y no quiero esperar que se cumplan las dos horas, corro el script a mano). El script va a Flickr, se fija qué fotos nuevas hay en el álbum donde la aplicación del teléfono las sube sola, y las baja. Simple y efectivo.

Lo ejecuto así:

    baja_flickr.py --quiet album_id algun_path

El --quiet es para que si todo funciona como es esperado no tire ninguna salida, así crontab no me manda mail al cuete (al principio, especialmente al probarlo a mano, no le pongan esta opción). El album_id es el identificador del álbum en Flickr donde se suben las fotos automáticamente, la forma más fácil de saber este numerito es ir al sitio de Flickr, ir al álbum donde están estas fotos, y sacar el código de la URL. Finalmente, algun_path es el directorio donde querés que el script te ponga las fotos que baja.

Un detalle importante, para que esto funcione. Como dije arriba, las fotos no son visibles para cualquiera, así que el script tiene que autenticarse como ustedes. Esto se maneja automáticamente, pero el script tiene que saber unos datos de ustedes; como pueden ver en el script, tienen que poner dos claves en dos archivos, más vuestro id de usuario de flickr en una constante. Las dos claves esas las sacan de acá.

Finalmente, un comentario sobre cómo se guardan las fotos bajadas. El script arma el nombre del archivo como, por ejemplo, el siguiente:

    20160507-201900-26273387653_c1da64d753_o.jpg

Básicamente el nombre se arma primero con la fecha y hora de cuando fue tomada la foto, y luego con el nombre original que le puso Flickr.

Read more
facundo

Muchas películas nuevas


Se nota que le dediqué tiempo a la series, porque no vi tantas películas estos meses.

  • 10 Rules for Sleeping Around: -0. Una comedia de elaboradísimo enredos, bastante divertidas por partes, pero muy, muy mala.
  • And So It Goes: -0. Comedia sencilla, medio touchy, pero nada que termine de valer la pena.
  • Jupiter Ascending: +0. Mucha acción, tiros y persecuciones, más una chica y un chico, mucho lugar común, bah... pero estuvo interesante, especialmente por la mezcla de iconografías y explicaciones pseudocientíficas que daban :). Notable colección de actores conocidos, también.
  • Kingsman: The Secret Service: +0. Como una de James Bond pero en joda. Divertida, pasatista.
  • Kon-Tiki: +0. El hombre y sus obsesiones. Gran historia, maravilloso que sea verdad :) Muy bien filmada, aunque un toque lenta en algunos momentos.
  • Only You: +0. Comedia romanticona de mitad de los 90, deberían saber de lo que hablo. Así y todo está linda: Marisa Tomei y Robert Downey Jr. en Italia :)
  • Perfect Sense: +0. Me encanta como muestra lo que pasaría en la situación hipotética que describe, más allá que no trata de explicarla, me encanta como está filmada, actuada.
  • Radio Free Albemuth: -1. Con una trama rara, muy lenta, poco creíble, no me llevaba a nada, a duras penas terminé de verla.
  • Reservoir Dogs: +1. Un clásico absoluto, un Tarantino de pura cepa. Impecable.
  • Salmon Fishing in the Yemen: +1. Una hermosa historia, con el tipo de humor que me gusta, con unos paisajes increibles y buenas actuaciones.
  • Sleeping with Other People: +0. Una comedia romanticona divertida.
  • Star Wars: Episode VII - The Force Awakens: +1. Bien hecha, bien contada, con mil guiños, y con un detalle interesante (teniendo en cuenta que es una película, y que es de ciencia ficción): creible.
  • The Intern: +0. Es una comedia simpática, bien llevada, buenas actuaciones y con ritmo.
  • The Signal: -0. A nivel argumento con algo de sentido en una parte, pero demasiado volado todo alrededor, y el resto de la peli que simplemente no suma.
  • Transcendence: +0. Con muchas partes demasiado fantasiosas, pero el núcleo del asunto da para pensar bastante; muy interesante para disparar puntos de vista.


Por otro lado, aparecieron toneladas de nuevas para ver. Me hice un scriptcito que va a una página en YouTube de FilmTrailerZone, donde hay una lista de muchos trailers, y te los empieza a listar hasta que llega a lo que había visto en la última corrida. Te da unos datos del trailer, y vos le indicás si querés que lo baje, o no, o pare de ofrecer trailers. Luego los baja. Todo por linea de comandos, claro.

Bueno, decía, encima que me hice ese script y estoy viendo más trailers (lo que redunda en más pelis anotadas), en esta lista hay algunas recomendaciones que me hicieron, más un par de títulos que saqué de alguna nota en un diario o revista.

  • 10 Cloverfield Lane (2016; Drama, Horror, Mystery, Sci-Fi, Thriller) Soon after leaving her fiancé Michelle is involved in a car accident. She awakens to find herself sharing an underground bunker with Howard and Emmett. Has she been saved from an apocalyptical event as Howard & Emmett tell her or are there other motives for her being held against her will? [D: Dan Trachtenberg; A: John Goodman, Mary Elizabeth Winstead, John Gallagher Jr.]
  • 400 Days (2015; Mystery, Sci-Fi, Thriller) "400 Days" centers on four astronauts sent on a simulated mission to a distant planet to test the psychological effects of deep space travel. Locked away for 400 days, the crew's mental state begins to deteriorate when they lose all communication with the outside world. Forced to exit the ship, they discover that this mission may not have been a simulation after all. [D: Matt Osterman; A: Brandon Routh, Dane Cook, Caity Lotz]
  • Approaching the Unknown (2016; Drama, Sci-Fi, Thriller) Captain William Stanaforth is on a one-way solo mission to take the first steps in colonizing Mars. Like all pioneers throughout history, Stanaforth will face insurmountable odds and life and death decisions as he rockets bravely through space. [D: Mark Elijah Rosenberg; A: Mark Strong, Luke Wilson, Sanaa Lathan]
  • Boyhood (2014; Drama) Filmed over 12 years with the same cast, [D: Richard Linklater; A: Ellar Coltrane, Patricia Arquette, Elijah Smith]
  • Captain America: Civil War (2016; Action, Adventure, Sci-Fi, Thriller) With many people fearing the actions of super heroes, the government decides to push for the Anti-Hero Registration Act, a law that limits a heroes actions. This results in a division in The Avengers. Iron Man stands with this Act, claiming that their actions must be kept in check otherwise cities will continue to be destroyed, but Captain America feels that saving the world is daring enough and that they cannot rely on the government to protect the world. This escalates into an all-out war between Team Iron Man (Iron Man, Black Panther, Vision, Black Widow, War Machine, and Spiderman) and Team Captain America (Captain America, Bucky Barnes, Falcon, Sharon Carter, Scarlett Witch, Hawkeye, and Ant Man) while a new villain emerges [D: Anthony Russo, Joe Russo; A: Chris Evans, Robert Downey Jr., Scarlett Johansson]
  • Captain Fantastic (2016; Drama) In the forests of the Pacific Northwest, a father devoted to raising his six kids with a rigorous physical and intellectual education is forced to leave his paradise and enter the world, challenging his idea of what it means to be a parent. [D: Matt Ross; A: Viggo Mortensen, George MacKay, Samantha Isler]
  • Creative Control (2015; Drama, Sci-Fi) In near future Brooklyn, an ad executive uses a new Augmented Reality technology to conduct an affair with his best friend's girlfriend...sort of. [D: Benjamin Dickinson; A: Benjamin Dickinson, Nora Zehetner, Dan Gill]
  • Criminal (2016; Action, Crime, Drama, Mystery, Sci-Fi, Thriller) Bill Pope (Ryan Reynolds) is a CIA agent on a mission in London tracking down a shadowy hacker nicknamed "The Dutchman." When he gets mysteriously ambushed and killed, an experimental procedure is used to transfer his memories into dangerous ex-convict Jericho Stewart (Kevin Costner). When he wakes up with the CIA agent's memories, his mission is to find The Dutchman and eliminate him before the hacker launches ICBM's and starts World War III. But complications soon arise and the mission turns personal. [D: Ariel Vromen; A: Kevin Costner, Gary Oldman, Tommy Lee Jones]
  • Al final del túnel (2016; Crime, Thriller) A paraplegic computer engineer that moves in a wheelchair and works in his basement starts hearing noises and voices of bank-robbers. [D: Rodrigo Grande; A: Leonardo Sbaraglia, Pablo Echarri, Clara Lago]
  • High-Rise (2015; Drama) Life for the residents of a tower block begins to run out of control. [D: Ben Wheatley; A: Tom Hiddleston, Jeremy Irons, Sienna Miller]
  • Jason Bourne (2016; Action, Thriller) Jason Bourne, now remembering who he truly is, tries to uncover hidden truths about his past. [D: Paul Greengrass; A: Alicia Vikander, Matt Damon, Julia Stiles]
  • Kill Command (2016; Action, Horror, Sci-Fi) Kill Command is a sci-fi action thriller set in a near future, technology-reliant society that pits man against killing machines. Against this backdrop an elite army unit is helicoptered to a remote, off-the-grid island training facility. What starts out as a simple training exercise for Captain Bukes and his tight-knit unit, descends into a terrifying battle to the death, as the marines discover the island is overrun by an enemy that transcends the human concept of evil. [D: Steven Gomez; A: Vanessa Kirby, Thure Lindhardt, David Ajala]
  • Koblic (2016; Drama, Thriller) 1977, during the days of the Argentinian Dictatorship. A former pilot and captain of the Argentinian Navy disobeys an order and becomes a fugitive in order to survive. He chooses to hide in a small town in the south of the country, where his presence will catch the attention of the unscrupulous and violent local marshal. [D: Sebastián Borensztein; A: Ricardo Darín, Oscar Martínez, Inma Cuesta]
  • Manhattan Nocturne (2016; Crime, Drama, Mystery, Thriller) Based on Colin Harrison's acclaimed novel Manhattan Nocturne (a New York Times Notable Book of the Year), MANHATTAN NIGHT tells the story of Porter Wren (Adrien Brody), a New York City tabloid writer with an appetite for scandal. On the beat he sells murder, tragedy and anything that passes for the truth. At home he is a model family man, devoted to his loving wife (Jennifer Beals). But when a seductive stranger (Yvonne Strahovski) asks him to dig into the unsolved murder of her filmmaker husband Simon (Campbell Scott), he can't resist. In this modern version of a classic film noir, we follow Porter as he is drawn into a very nasty case of sexual obsession and blackmail - one that threatens his job, his marriage, and his life. MANHATTAN NIGHT will be released by Lionsgate Premiere in theaters and On Demand May 20, 2016. Lionsgate Premiere, Grindstone Entertainment Group and 13 Films present in association with Sparkle Roll Media Corporation and Big Indie Pictures a production of Fable House, Untravelled Worlds and DeCubellis Films. [D: Brian DeCubellis; A: Yvonne Strahovski, Adrien Brody, Jennifer Beals]
  • Miss Peregrine's Home for Peculiar Children (2016; Adventure, Fantasy) When Jacob discovers clues to a mystery that spans different worlds and times, he finds a magical place known as Miss Peregrine's Home for Peculiar Children. But the mystery and danger deepen as he gets to know the residents and learns about their special powers... and their powerful enemies. Ultimately, Jacob discovers that only his own special "peculiarity" can save his new friends. [D: Tim Burton; A: Eva Green, Samuel L. Jackson, Kim Dickens]
  • Nina (2016; Biography, Drama, Music) The story of the late jazz musician and classical pianist Nina Simone including her rise to fame and relationship with her manager Clifton Henderson. [D: Cynthia Mort; A: Zoe Saldana, David Oyelowo, Kevin Mambo]
  • Precious Cargo (2016; Action, Crime, Drama, Thriller) After a botched heist, Eddie (Bruce Willis), a murderous crime boss, hunts down the seductive thief Karen (Claire Forlani) who failed him. In order to win back Eddie's trust, Karen recruits her ex-lover and premier thief Jack (Mark-Paul Gosselaar) to steal a cargo of rare precious gems. But when the job goes down, allegiances are betrayed and lines are crossed as Jack, Karen, and Eddie face off in a fateful showdown. Lionsgate Premiere will release the action thriller in theaters and on demand on April 22, 2016. [D: Max Adams; A: Mark-Paul Gosselaar, Bruce Willis, Claire Forlani]
  • Suicide Squad (2016; Action, Adventure, Fantasy, Sci-Fi, Thriller) A secret government agency run by Amanda Waller, named A.R.G.U.S creates a task force comprising super villains, the "Suicide Squad". They are assigned to execute dangerous tasks in exchange for shorter prison sentences. [D: David Ayer; A: Margot Robbie, Cara Delevingne, Scott Eastwood]
  • The Lobster (2015; Comedy, Drama, Romance, Sci-Fi) A love story set in a dystopian near future where single people are arrested and transferred to a creepy hotel. There they are obliged to find a matching mate in 45 days. If they fail, they are transformed into an animal and released into the woods. [D: Yorgos Lanthimos; A: Jacqueline Abrahams, Roger Ashton-Griffiths, Jessica Barden]
  • The Driftless Area (2015; Comedy, Drama, Mystery, Romance) Pierre Hunter (Anton Yelchin), a bartender with unyielding optimism, returns to his tiny hometown after his parents' death. When he falls for the enigmatic Stella (Zooey Deschanel), Pierre is unknowingly pulled into a cat-and-mouse game that involves a duffel bag full of cash, a haphazard yet determined criminal (John Hawkes), and a mystery that will determine all of their fates. With Alia Shawkat, Frank Langella, Aubrey Plaza, and Ciarán Hinds. Zachary Sluser's film, based on the novel by Tom Drury, is a contemporary fable about the ways we struggle to control time and fate in a possibly predetermined universe. [D: Zachary Sluser; A: Anton Yelchin, Zooey Deschanel, John Hawkes]
  • The Huntsman: Winter's War (2016; Action, Adventure, Drama, Fantasy) Eric and fellow warrior Sara, raised as members of ice Queen Freya's army, try to conceal their forbidden love as they fight to survive the wicked intentions of both Freya and her sister Ravenna. [D: Cedric Nicolas-Troyan; A: Chris Hemsworth, Charlize Theron, Jessica Chastain]
  • The Man Who Knew Infinity (2015; Biography, Drama) Growing up poor in Madras, India, Srinivasa Ramanujan Iyengar earns admittance to Cambridge University during WWI, where he becomes a pioneer in mathematical theories with the guidance of his professor, G.H. Hardy. [D: Matt Brown; A: Jeremy Irons, Dev Patel, Malcolm Sinclair]
  • La belle saison (2015; Drama, Romance) There was little chance, in the year 1971, that Carole, a Paris Spanish teacher and feminist militant, would ever meet Delphine, the daughter of a couple of Limousin farmers. But they did meet and not only did they come across each other but they fell passionately in love as well. Unfortunately, Delphine's father fell victim to a stroke, and the young woman had no other choice but to go back home to help her mother run the family farm. Carole, who was so smitten by Delphine, couldn't stand the estrangement and decided to join her lover at the farm. But could feminism and lesbianism easily be transferred to the countryside and its standards of the time...? [D: Catherine Corsini; A: Cécile De France, Izïa Higelin, Noémie Lvovsky]
  • Doctor Strange (2016; Action, Adventure, Fantasy) After his career is destroyed, a brilliant but arrogant and conceited surgeon gets a new lease on life when a sorcerer takes him under her wing and trains him to defend the world against evil. [D: Scott Derrickson; A: Rachel McAdams, Tilda Swinton, Benedict Cumberbatch]
  • Hush (2016; Horror, Thriller) A deaf writer who retreated into the woods to live a solitary life must fight for her life in silence when a masked killer appears at her window. [D: Mike Flanagan; A: John Gallagher Jr., Kate Siegel, Michael Trucco]
  • The Girl on the Train (2016; Mystery, Thriller) The Girl on the Train is the story of Rachel Watson's life post-divorce. Every day, she takes the train in to work in London, and every day the train passes by her old house. The house she lived in with her husband, who still lives there, with his new wife and child. As she attempts to not focus on her pain, she starts watching a couple who live a few houses down -- Megan and Scott Hipwell. She creates a wonderful dream life for them in her head, about how they are a perfect happy family. And then one day, as the train passes, she sees something shocking, filling her with rage. The next day, she wakes up with a horrible hangover, various wounds and bruises, and no memory of the night before. She has only a feeling: something bad happened. Then come the TV reports: Megan Hipwell is missing. Rachel becomes invested in the case and trying to find out what happened to Megan, where she is, and what exactly she herself was up to that same night Megan went missing. [D: Tate Taylor; A: Emily Blunt, Haley Bennett, Luke Evans]


Finalmente, el conteo de pendientes por fecha:

(Sep-2010)    2   1
(Dic-2010)    5   1
(Abr-2011)   22  17   4
(Ago-2011)   11  11  11   4
(Ene-2012)   17  17  17  11   3
(Jul-2012)   15  15  15  14  11
(Nov-2012)   11  11  11  11  11   6
(Feb-2013)   19  16  15  14  14   8   2
(Jun-2013)   19  18  16  15  15  15  11   2
(Sep-2013)       18  18  18  18  17  16   8
(Dic-2013)           14  14  12  12  12  12   4
(Abr-2014)                9   9   8   8   8   3
(Jul-2014)                   10  10  10  10  10   5
(Nov-2014)                       24  22  22  22  22
(Feb-2015)                           13  13  13  13
(Jun-2015)                               16  16  15
(Dic-2015)                                   21  19
(May-2016)                                       26
Total:      121 125 121 110 103 100  94  91  89 100

Read more
facundo

Algunos te pedimos perdón


Si el agua que tomo se pudre, se pudre, me pudro por dentro también.
Si el aire que respiro se pudre, se pudre, se pudre mi forma de ser.

Agoniza montaña vacía de su mineral, de su corazón.
La represa que linda energía se muere otro río, se muere la vida.

Pachamama, Madre Tierra, Madre de todos los colores.
Pachamama, Madre Tierra, Madre de todos los sabores.

Hay bosques que daban oxígeno y sombra y ahora ya ni se ven.
La Tierra se retuerce por dentro y hay tantas flores que ya no crecen.

Pachamama, Madre Tierra, Madre de todos los colores.
Pachamama, Madre Tierra, Madre de todos los sabores.

Algunos te pedimos perdón.

("Pachamama", Arbolito)

Read more
facundo

¿Te gusta el tango?


Si sí, hacete un favor.

Te bajás e instalás Encuentro, refrescás la metadata, y filtrás por "tango". Ahí vas a ver varias cosas, lo que te quiero resaltar son los programas de "Encuentro" que son "Series" (no Micros).

De la mano de Horacio Ferrer, la historia del tango, desde los orígenes hasta la actualidad. Las diferentes épocas y estilos del género musical son abordados por este historiador y poeta, fundador de la Academia Nacional del Tango. La serie presenta materiales de archivos fotográficos, sonoros y audiovisuales.

Son 8 capítulos, "Tango y ciudad", "Tango y baile", "Tango y bandoneón", "El Gardelazo", "Tango y renovación", "Los grandes temas", "Tango y mundo", "Tango y noche". Cada uno dura unos 28 minutos.

Te abrís un vino, y los mirás tranquila/o. Sola/o, o acompañada/o de alguien con quien te animes a llorar.

De nada.

Read more
facundo

Ordenando fotos


Hace un par de semanas sucediose el PyCamp. En este tipo de eventos, como en tantos otros, o paseos, o reuniones, o lo que sea, pasa que uno lleva "la cámara", pero no la usa todo el tiempo.

Con "la cámara" me refiero al dispositivo para sacar fotos de mejor calidad que uno tiene. Puede ser una reflex toda pipona, o una point and shoot berretona, o algo intermedio (o "bridge") como la que tengo yo (una Canon G15).

Canon G15

Y uno no la usa todo el tiempo por dos razones. La primera es que en general, a menos que sea una point and shoot finiiiiita, molesta un poco llevarla: te ocupa al menos una mano, o rellena bastante un bolsillo, o hay que llevarla al cuello, o hay que llevar todo un bolso al hombro.

La segunda razón es que como las cámaras en los teléfonos avanzaron bastante, uno siempre termina sacando fotos al voleo más con el celular que con otra cosa, y deja para momentos "más cuidados" el usar "la cámara".

Y me pasa todo el tiempo. Ejemplo típico del del PyCamp: tengo la cámara en la mochila, donde la guardé luego de sacar un par de fotos donde estábamos trabajando, pero luego fui a otro lado a preguntarle algo a alguien, y tuve ganas de sacar una determinada foto, y en el momento lo resolví con el teléfono. No iba a volver a buscar la cámara grande. O la sacaba con el teléfono, o no la sacaba.

Entonces, esta combinación de factores hizo que, en los últimos tiempos, termine con una serie de fotos de la cámara grande, más una serie de fotos del teléfono. Separadas.

Yo miro/edito las fotos con distintas herramientas. Pero en general, las veo ordenadas por el nombre del archivo. Entonces, tener dos series de fotos separadas me jodía bastante.

Es por eso que me armé un pequeño script que agarra todas las fotos de un directorio y las renombra en función de la fecha/hora que tiene guardada la foto, quedando ambas series efectivamente mezcladas de forma cronológica al ordenarlas por el nombre del archivo.

Un par de detalles con respecto al script.

  • Todavía está en desarrollo, pero está bastante estable y las últimas veces que lo usé anduvo 100% ok
  • Asume que las fotos de "la cámara" tienen el formato IMG99999.JPG, siendo los 99999 cinco dígitos cualesquiera. Si este no es tu caso, vas a tener que pedirme una mejora, o toquetear vos misma/o el código.
  • Tenés que tener fades instalado, para que te maneje automágicamente las dependencias (acá tenés una explicación al respecto). Si no querés instalar fades, arreglate.

Enjoy.

Read more
facundo

PyCamp 2016


Durante este finde largo de semana santa hicimos la edición 2016 del PyCamp, el que para mí es el mejor evento del año.

Se realizó nuevamente en La Serranita, un lugar muy lindo y muy cómodo, el Complejo Soles Blancos. A diferencia del año pasado, que fue en Agosto, esta vez a la noche sólo estuvo bastante fresco, :). Las tardes eran con un lindo calorcito, y las noches y madrugadas estaban fresconas, ideal para pasear por la calle o dormir!

Como la vez pasada, hice Buenos Aires - Córdoba (Capital) en micro, y de ahí a La Serranita en auto (a la vuelta lo mismo). Es más, el trayecto de ida lo manejé yo (porque Pancho estaba rotazo), y la vuelta la hizo él, con lo que pude disfrutar más del paisaje.

Alta vista

Como todos los PyCamps, este se dividió mucho entre lo que es Python propiamente dicho, y lo que son otras actividades. Arranquemos con lo que es programación propiamente dicho.

El proyecto más largo en el que participé fue un Tower Defense: el típico jueguito donde uno ubica torres que atacan un flujo de enemigos que se vienen encima, y en función de la habilidad de colocar qué torres y dónde, uno se defiende mejor o peor. La idea era no sólo diseñar y armar el juego, sino también crear una inteligencia artificial que aprendiera a ubicar las torres.

En esto se anotaron casi todos, así que fue con lo primero que arrancamos. Lo más interesante fue la organización. En seguida separamos lo que es "core" de la "ai", y un grupo se quedó arriba y otro nos fuimos para la sala de abajo. No sé bien qué hicieron los de AI, arriba, pero abajo armamos entre todos la estructura básica del core, nos separamos en pequeños grupos, y atacamos todo el código en paralelo, charlando las interfaces/APIs a medida que íbamos agregando o solucionando cosas.

Fue genial. El primer día ya teníamos como un 80% de lo que logramos finalmente, y luego seguimos trabajando. El producto fue un core a todo lujo, con gráficos y todo (usamos pyglet), más una inteligencia artificial que aprendía eficientemente a ubicar las torres. Impecable.

Screenshot del TD

De los proyectos que llevaba yo, en el que más se enganchó la gente fue fades. Como con Nico tenemos los issues bien claritos y clasificados, los chicos encontraban enseguida algo para hacer. Metimos varios fixes y cerramos muchos issues, se avanzó bastante. También se anotaron varios para trabajar en la web de PyAr, se avanzó un poco, sobre problemas de formateo y links rotos (porque no existen, pero también porque apuntan mal internamente en el wiki). No hicimos tanto, quedó pendiente para seguir en otro momento. También otro grupo (principalmente Matu Varela, Mati Barrientos y Toni) estuvieron con la integración del sitio de PyAr y unos bots de Telegram, que originalmente estaban planeados para desparramar info, pero sobre los cuales luego armaron esquemas de moderación de noticias, eventos y trabajos postulados.

Con otros proyectos estuve también bastante tiempo, pero con menos gente. Para Linkode estuvimos charlando mucho con Mati Barrientos y Pablo Celayes, sobre los próximos planes a nivel de interfaz. Decidimos ir a algo como una "single page application" pero que apenas es tal, porque la interfaz de linkode es muy sencilla. Así y todo, la idea es que el "cliente web" use la API de linkode como cualquier otro cliente. Más allá de toda la charla y la decisión de cómo seguir para adelante, Matías va a estar liderando todo el lado "javascript" de linkode, metiendo código él y revisando/empujando el de otros.

Gente trabajando

Para cerrar todo lo hecho, y el PyCamp en sí, hicimos un video! Jose Luis Zanotti tiene pendiente de editarlo y armarlo, así mostramos todo lo que hicimos en un par de días...

Y por otro lado, hubieron varias actividades no relacionadas directamente con programar en Python.

El más centralizadamente coordinado fue un torneo de Tron, que ganó Jose Luis Zanotti Ya habíamos hecho algo parecido en el PyCamp de La Falda, hace varios años, y es notable como uno se engancha mirando a las personas que compiten y cómo juegan. También hubieron clases de sable, una tarde, y noches de juegos de mesa. Yo jugué dos veces al Resistance, un juego donde (aunque tiene soporte de fichas y tarjetitas) lo importante es la interacción entre las personas y como todos se tratan de convencer entre todos de que no son nazis.

La estrella de las actividades de "no programación" fue la reunión de PyAr (gracias Ariel por armar la minuta). Estuvo buenísima, por cuanto y cómo participaron todos. Charlamos de la próxima PyCon, de cómo venía el tema de la creación de la Asociación Civil, y también del PyCamp actual, y cosas que deberíamos mantener o mejorar. Luego de la reunión, un asadazo, que lo preparó (muy bien, como siempre), el anfitrión del complejo, Leandro.

En la reunión

Todas las fotos que saqué yo, acá.

Read more
facundo

Vacaciones en Colombia


El principio del año estuvo marcado por el viaje más largo que hice (a excepción de cuando hice el Master en Italia, a principio de siglo), y seguramente las vacaciones más largas que nos tomamos en familia: fuimos a Colombia.

Aprovechamos Enero porque los chicos están de vacaciones en la escuela, y cómo el trabajo de Moni en el Hospital Tornú también está relacionado con las escuelas, era la época ideal. Por mi parte, me tomé sólo dos semanas de vacaciones y trabajé el resto.

Estuvimos unos días en Santa Marta, unos días en Cartagena, y luego volvimos a Santa Marta (esta última etapa es la que yo trabajé de lunes a viernes, mientras que la familia seguía de "vacaciones" :p).

Paseando por Cartagena

Obviamente no voy a relatar día por día las vacaciones, pero sí voy a comentar algunas impresiones de Colombia en general, o las ciudades, o de los paseos.

Una de las cosas que más le tenía "miedo" era el viaje en sí. Es que para llegar a Santa Marta nos teníamos que tomar tres aviones (en la ida las escalan fueron San Pablo y Bogotá, a la vuelta fueron Bogotá y Lima), y entre los vuelos y las esperas intermedias fue mucho tiempo. Mi "miedo" era en función de los pequeños, de cuanto se iban a bancar todo el baile y cuanto nos iban a complicar la existencia a Moni y a mi :).

Peques en la pile

La verdad, se portaron genial. Estaban excitados por la movida, pero no tanto como para descontrolarse. En los aeropuertos se portaron muy bien, y arriba de los aviones también :). Durmieron bastante, teniendo en cuenta que a la ida viajamos de día. Incluso, Malena se quedó dormida al toque de subirse al primer avión, y se despertó cuando ya había aterrizado... se desperezó y preguntó "¿Ya subió el avión?". Muy gracioso.

Al llegar a Colombia, la primera impresión fue sobre como manejan. El taxista que nos llevó del aeropuerto al primer departamento que habíamos alquilado iba muy rápido, tomando las curvas cerradas, tocando bocina por doquier, y en general con una forma de manejo peligrosa. Con el transcurso de los días nos fuimos dando cuenta que es la forma normal de manejar de los colombianos, al menos en Santa Marta y en Cartagena. Es raro que los taxis tengan cinturón de seguridad. Y las bocinas son insoportables, incluso cuando uno va caminando por la calle. Están todo el tiempo tocando bocina, ¡todo el tiempo!

Familia en la playa

Con los taxis nos dimos cuenta también que la economía es bastante informal: no tienen reloj, sino que hay que preguntar (negociar) antes de subirte cuanto va a salir el viaje en función de a donde uno va. Incluso nos ha pasado que a mitad del viaje nos quisieron cambiar el monto pactado :/. Pero no sólo en los taxis se ve la ausencia de precios regulados: excepto en los supermercados grandes, las cosas no tienen nunca precio, todo hay que preguntarlo, negociarlo, y jugarte a que no te hayan visto demasiado la cara de extranjero.

A nivel dinero, el cambio era alrededor de 1000 pesos colombianos igual a 4.50 argentinos. Más allá que las cosas estaban un poco más baratas que en casa, te manejás con números grandes (algo a lo que mi generación no está acostumbrada, teniendo el Peso desde principio de los noventa). Una buena: en todos lados tienen los postnet inalámbricos, y se puede pagar con tarjeta. Una mala: redondean para arriba, como en Argentina (o sea, gastaste 17380 pesos y te cobran 17400, o 17500...). Lo que me llamó mucho la atención es que conviven monedas distintas para la misma denominación, tuve en mis manos dos monedas válidas pero totalmente distintas de $200.

Hicimos un castillo de arena :)

Otra cosa que aprendimos al pasear en taxi, micro, o caminando, es cómo es el esquema de direcciones. Se basan en "carreras" (que son las calles paralelas a la costa) y "calles" que son las perpendiculares. Eso es simple, el resto es un bardo. Es que claro, las calles no tienen un trazado cuadriculado perfecto, entonces empezás con esquinas como carrera 1A y calle 7B, y cosas así. Por otro lado, se guían mucho por los nombres de los edificios (todos tienen nombre!), y al taxista quizás le das la esquina exacta y no se ubican, pero le mencionás el nombre del edificio y saben al toque a donde ir.

Un detalle de color: en el centro histórico de Cartagena (el "casco viejo", lo que está dentro de la muralla original, digamos) cada cuadra tiene su nombre. O sea, uno va caminando por una calle, y en cada esquina, aunque uno siga derecho, cambia el nombre :)

Cartagena de Indias

Cuando planeamos las vacaciones, una de los puntos críticos que decidimos fue no ir a "hoteles". Queríamos, al menos, que sean apart-hotel, para tener la comodidad de tener cocina, heladera, etc, de manera de poder hacer comida piola para los chicos (ni comer porquerías ni tener que salir a comer todos los días afuera) o prepararles el desayuno y la merienda, etc. Finalmente, optamos por alquilar departamentos vía Airbnb y TripAdvisor.

Ambos servicios son similares. Usamos ambos, sólo en función de los lugares que queríamos alquilar y las fechas que estaban disponibles (no fue trivial coordinar el alquiler de los tres lugares y las fechas de los aviones, que ya los teníamos de antes). Si tengo que destacar una ventaja de uno sobre el otro es que Airbnb te manda un SMS cada vez que el locador te contesta un mensaje, lo cual está piola porque lo más probable es que uno, en el viaje, esté sin internet, y justamente tratando de coordinar a qué hora se llega, quien te da las llaves del lugar, etc.

Y la verdad es que alquilar un departamento es muuuuucho más ventajoso que un apart hotel. O sea, es una casa, no un lugar "temporario", las instalaciones son distintas. Un ejemplo sencillo: tenés lavarropas (no en todos lados, OK, pero si el departamento está más o menos bien puesto, sí). Y termina resultando más barato.

Hicimos galletitas

Lo que vimos que todos tienen es ventiladores y aire acondicionado (y eso que la electricidad es bastante cara), pero evidentemente son necesarios en función del calor intenso. Como ejemplo, vale que nosotros usamos aire acondicionado casi todos los días, ¡y estábamos en invierno! Y eso que no nos gusta demasiado el tema del aire, eh. Es más, yo terminé confirmando que prefiero otras soluciones. Es que al final estábamos todo el tiempo apagando y prendiendo el aire, a veces terminábamos con mucho calor, a veces terminábamos con dolor de garganta por el frío, etc.

Un detalle con respecto a eso de que estábamos en invierno: nos comentaron que allá le dicen "invierno" a los días que llueve, y "verano" al resto de los días. Claro, por la latitud en que se encuentran, tienen un clima parecido todo el año. Por otro lado, el clima les estuvo cambiando los últimos años. El fenómeno de El Niño les pegó fuerte, y están sufriendo sequía tras sequía. Ríos enteros que ya casi no existen. Y en Santa Marta no llovía desde hace cuatro meses! Mientras estuvimos nosotros, un día se nubló bastante, ¡nada más!

Atardecer

El lado positivo es que pudimos disfrutar todos los días. Fuimos muchísimas veces a la playa, como imaginarán, y los cuatro la pasamos bárbaro jugando en el mar y la arena. Además de ir a la playa que teníamos cerca hicimos excursiones a playas lejanas, paseamos varias veces por el Parque Nacional Tayrona (fuimos a Bahía Concha a hacer playa, a Playa del Muerto (o Playa Cristal), donde también hicimos "careteo" (te llevan flotando boca abajo, con un snorkel, mirando los corales y miles de peces de colores), a Playa Blanca, en Santa Marta, y varios lugares más. A nivel excursiones y paseos también fuimos al Museo del Oro de Cartagena, a recorrer el Castillo de San Felipe, y recorrimos en general las ciudades por todos lados :)

Un punto aparte fue como se portaron los niños con el agua. Empezaron bastante tímidos (tanto en el mar como en la pileta que disfrutamos en nuestra segunda estadía en Santa Marta), pero se fueron soltando. Al final, Malena y Felipe se metían hasta el cuello en el mar (siempre con Moni o conmigo al lado), y en la pileta Malena iba sola por todos lados con los bracitos inflables, y Felipe nadaba solo, sin hacer pie, de un lado para el otro.

Familia en la pileta

Unas vacaciones inolvidables, que disfrutamos tantísimo, pero que también cerramos con ganas de volver a casa, que extrañamos bastante :)

Todas las fotos (que son en parte las culpables de que tardara tanto en publicar este post, ya que estuvimos semanas filtrándolas y eligiéndolas), acá.

Read more
facundo


(there is an English version of this post, here)

Python tiene una biblioteca estándar muy extensa ("viene con las pilas incluídas"), pero es frecuente la necesidad de usar otros módulos que están afuera de la misma, casi siempre desde el Índice de Paquetes de Python (PyPI).

La manera original de instalar esos módulos es a "nivel de sistema" (sudo pip install foobar), en el sistema operativo de forma general, habilitándolos para ser utilizados por cualquier programa que se ejecute.

Más allá de necesitar permisos de root o administrador para instalar las dependencias de esta manera, el primer problema con el que nos encontramos es el de conflictos: el caso típico de dos programas que necesitan la misma dependencia pero en versiones distintas, lo cual no puede lograrse al instalar las dependencias en forma global.

Por eso es que es tan normal en el mundo de Python usar "entornos virtuales". Se crea un entorno virtual para cada programa, se instala las dependencias necesarias para cada programa en cada entorno virtual, y como lo que instalamos en ese entorno es sólo accesible desde dentro del entorno, no hay más conflictos.

En este punto, sin embargo, aparece el problema de la administración de los entornos virtuales: crearlos, instalarles cosas, activarlos para usarlos con cada programa y desactivarlos luego, recordar los nombres de cada entorno para cada programa, etc.

Para automatizar esto nació fades.

fades les permite utilizar todo el poder de los entornos virtuales sin tener que preocuparse por ellos.

¿Quieren ejecutar un script que necesita la dependencia foobar?

    fades -d foobar script.py

¿Quieren un intérprete interactivo teniendo foobar instalado como dependencia?

    fades -d foobar

¿Necesitan ejecutar el script pero con varias dependencias, alguna en una versión específica?

    fades -d foo -d bar -d baz==1.1 script.py

¿Tienen todas las dependencias en un archivo de requerimientos?

    fades -r requirements.txt script.py

Esto es sólo lo más sencillo que podés hacer con fades. Los entornos virtuales son una herramienta poderosísima, y automatizar y simplificar su uso hace que fades tenga bastantes opciones, algunas que usarán todos los días, y otras que les van a resultar muy útiles en casos puntuales.

Empiecen a usar fades de a poco (acá tienen toda la documentación) y van a encontrar que van a tener resuelto el tema de la administración de dependencias en programas y scripts, usando entornos virtuales pero sin la complejidad de tener que hacerlo directamente y a mano.

Read more
facundo


Para arrancar el año pum para arriba, ¿qué mejor que una nueva versión de Encuentro?

Lo más destacado de esta nueva versión es que hay dos backends nuevos!

Por un lado, ahora se puede descargar de Contenidos Digitales Abiertos (también conocido como CDA), con casi 4000 episodios de centenares de documentales y series para mirar.

Por otro lado, trae más de 180 charlas TED del capítulo TEDx de Buenos Aires (que incluye TEDxBuenosAires, TEDxRíodelaPlata, TEDxJoven, y un par más).

Encuentro

También tiene varias mejoras importantes, como que se limpian los nombres de archivos para que puedan ser grabados en cualquier lado (pen drives, fat32, etc), o que rearmé el esquema de downloads y ahora es mucho mucho más robusto que antes. E incluso estuve mejorando los scrappers para backends que ya estaban incluidos en versiones anteriores, pero ahora tendrán mejores títulos, nombres más prolijos, etc.

Y claro, varias correcciones menores también, y seguramente algún par de bugs nuevos :p.

Las instrucciones para bajar Encuentro en tu sistema (Debian, Ubuntu, Arch, Windows, o cualquier otro sistema), junto con el detalle de los cambios, instrucciones, y todo eso, en la página del proyecto.

¡Disfruten!

Read more
facundo

Refresh de pelis de fin de año


Buena temporada para ver películas fue. Muchas vistas, pero con resultados variados... mucho voto negativo, y un sólo +1!

  • Beginners: +0. Linda película sobre la aceptación de lo que uno es. Muy buenas actuaciones, y lindo como está contada.
  • Chef: +1. Linda película sobre la búsqueda de lo que te divierte hacer y vivir. Imperdible si te gusta cocinar o ver cocinar.
  • Drinking Buddies: +0. Relaciones humanas, tan difíciles. Esta peli muesta un lado que no siempre se explicita, entre la amistad y la atracción, muy buena.
  • Edge of Tomorrow: +0. No es Groundhog Day, pero está bien tratado el tema. Y el resto de la peli divierte, pero termina siendo sólo una peli de acción.
  • Guardians of the Galaxy: -0. Todo lo que es construcción de bichos o mundos extraterrestres, está muy bien, y tiene bastantes partes con buen humor... pero el resto es muy childish, no termina de armar una película en serio.
  • Her: +0. Una buena historia, destacando que las relaciones humanas son siempre desde el punto de vista de las partes que componen la relación.
  • I Give It a Year: +0. Una comedia romántica suave. Todo predecible, nada particularmente interesante, pero vale la pena si estás buscando algo pasatista.
  • In a World...: -0. Una comedia semi-romántica, con nada especialmente interesante para destacar.
  • Leonera: +0. Cruda y fuerte como todas las de Trapero, pero es más importante la historia, que está buena.
  • Lucy: -0. Tiene partes muy interesantes, pero es demasiado flashera, demasiado... poco sustentable.
  • Mindscape: +0. Un thriller que te tiene hasta último momento tratando de entender lo que pasa. Me gustan las pelis así, especialmente cuando al final explican todo :)
  • Non-Stop: -0. Tiene algunos giros interesantes, y un suspenso y una resolución que fueron lo que me llevaron a verla... pero realmente, todo termina en un "suave" que no vale la pena :/
  • Out of the Furnace: -0. Con buenos actores, y aunque la historia está bien, deja demasiada cosas sin explicar o a medio sugerir.
  • Passion: -0. La historia podría estar buena... pero está mal "contada", las situaciones están mal llevadas, no tiene ritmo. Y el final... bleh.
  • Primer: -0. Interesante, pero muy rebuscada. Aplica un concepto que está piola, pero le sobra mucho alrededor y finalmente no explica bien lo que pasa.
  • Sabotage: -0. Tiene sus momentos interesantes, el misterio, la dinámica de algunas personas, la violencia cruda... pero no suma. No suma.
  • Sin City: A Dame to Kill For: -0. La fotografía es simplemente maravillosa, impecable, exhuberante... pero no tiene mucha historia, y es muy monótono todo.
  • The Family: +0. Típica comedia de gangsters, sin muchas pretensiones pero divertida :)
  • The Grand Budapest Hotel: +0. Bizarra, divertida, dinámica. Me gustó mucho la forma en que está contada, y la fotografía es GENIAL. Alta concentración de actores buenos, también...
  • The Kitchen: -0. Tiene sus momentos que valen algo, y es interesante la dinámica de filmar todo desde una habitación, pero no mucho más.
  • The Lifeguard: +0. Una linda historia sobre la búsqueda de qué ser, de que hacer con la vida.
  • Wakolda: +0. Interesante historia (no sé cuanto de verídica), buena peli.
  • X-Men: Days of Future Past: -0. Por momentos interesante, especialmente el juego de pasado/futuro, pero más de lo mismo, y aburre que no haya nada nuevo. Demasiado pasatista.


También muchas nuevas anotadas para ver...

  • Air (2015; Sci-Fi, Thriller) In the near future, breathable air is nonexistent. Virtually all of humanity has disappeared and those chosen to reestablish society reside in a controlled state of suspended animation. Two engineers (Norman Reedus and Djimon Hounsou) tasked with guarding the last hope for mankind struggle to preserve their own sanity and lives while administering to their vital task at hand. [D: Christian Cantamessa; A: Norman Reedus, Djimon Hounsou, Sandrine Holt]
  • Alice Through the Looking Glass (2016; Adventure, Family, Fantasy) When Alice wakes up in Wonderland she must travel through a mysterious new world to retrieve a magical scepter that can stop the evil Lord of Time before he turns forward the clock and turns Wonderland into a barren, lifeless old world. With the help of some new friends, Alice must also uncover an evil plot to put the Queen of Hearts back on the throne. [D: James Bobin; A: Johnny Depp, Anne Hathaway, Alan Rickman]
  • Amnesiac (2015; Drama, Horror, Mystery, Thriller) The story of a man who wakes up in bed suffering from memory loss after being in an accident, only to begin to suspect that his wife may not be his real wife and that a web of lies and deceit deepen inside the house where he soon finds himself a prisoner. [D: Michael Polish; A: Kate Bosworth, Wes Bentley, Olivia Rose Keegan]
  • Anesthesia (2015; Drama, Thriller) Philosophy professor Walter Zarrow is wounded during a mugging. In an effort to escape he rings buzzers indiscriminately, waking Sam, a middle aged father of two having an affair in the city. Sam reluctantly answers Zarrow's pleas, and Zarrow loses consciousness in his arms. Through an exploration of why these men, along with the mugger, and an addict named Joe, come together, we explore New York City. The experience of Zarrow, Sam, Joe and Zarrow's assailant ripple quickly out to include the connected lives of a housewife struggling with alcoholism, a stoner teen desperate to lose his virginity, a brilliant but failed writer fighting addiction, two parents confronting the prospect of terminal illness, and a brilliant grad student who wounds herself to feel alive. [D: Tim Blake Nelson; A: David Aaron Baker, Derrick Baskin, Jacqueline Baum]
  • Black Mass (2015; Biography, Crime, Drama) John Connolly and James "Whitey" Bulger grew up together on the streets of South Boston. Decades later, in the late 1970s, they would meet again. By then, Connolly was a major figure in the FBI's Boston office and Whitey had become godfather of the Irish Mob. What happened between them - a dirty deal to trade secrets and take down Boston's Italian Mafia in the process - would spiral out of control, leading to murders, drug dealing, racketeering indictments, and, ultimately, to Bulger making the FBI's Ten Most Wanted List. [D: Scott Cooper; A: Johnny Depp, Joel Edgerton, Benedict Cumberbatch]
  • Chloe & Theo (2015; Comedy, Drama) Theo, an Inuit from the Arctic, travels to New York City to warn world leaders about the catastrophic impact of global warming on the planet. Upon arrival he meets a homeless girl named Chloe, who has an unusual vigor for life, is mildly delusional, and completely obsessed by Bruce Lee. Together, they will save the world. [D: Ezna Sands; A: Theo Ikummaq, Dakota Johnson, Mira Sorvino]
  • Deadpool (2016; Action, Adventure, Sci-Fi, Thriller) Based upon Marvel Comics most unconventional anti-hero, DEADPOOL tells the origin story of former Special Forces operative turned mercenary Wade Wilson, who after being subjected to a rogue experiment that leaves him with accelerated healing powers, adopts the alter ego Deadpool. Armed with his new abilities and a dark, twisted sense of humor, Deadpool hunts down the man who nearly destroyed his life. [D: Tim Miller; A: Morena Baccarin, Gina Carano, Ryan Reynolds]
  • Experimenter (2015; Biography, Drama, History) Experimenter is based on the true story of famed social psychologist Stanley Milgram, who in 1961 conducted a series of radical behavior experiments that tested ordinary humans willingness to obey by using electric shock. We follow Milgram, from meeting his wife Sasha through his controversial experiments that sparked public outcry. [D: Michael Almereyda; A: Winona Ryder, Taryn Manning, Kellan Lutz]
  • Hail, Caesar! (2016; Comedy, Drama, Musical) A Hollywood fixer in the 1950s works to keep the studio's stars in line. [D: Ethan Coen, Joel Coen; A: Scarlett Johansson, Channing Tatum, Ralph Fiennes]
  • Jane Got a Gun (2016; Action, Drama, Western) Jane Got a Gun centers on Jane Hammond, who has built a new life with her husband Bill "Ham" Hammond after being tormented by the ultra-violent Bishop Boys outlaw gang. She finds herself in the gang's cross-hairs once again when Ham stumbles home riddled with bullets after dueling with the Boys and their relentless mastermind Colin. With the vengeful crew hot on Ham's trail, Jane has nowhere to turn but to her former fiancé Dan Frost for help in defending her family against certain destruction. Haunted by old memories, Jane's past meets the present in a heart-stopping battle for survival. [D: Gavin O'Connor; A: Natalie Portman, Ewan McGregor, Rodrigo Santoro]
  • Momentum (2015; Action, Thriller) Alex, a mysterious thief, is pulled in by her former partner for one last heist. She quickly finds it was never just about the diamonds. A brutal murder sparks a cat and mouse chase between Alex and a master assassin. Now she must uncover the lies behind the heist and discover the secrets behind the men who have made her a target. [D: Stephen S. Campanelli; A: Olga Kurylenko, Morgan Freeman, James Purefoy]
  • Now You See Me 2 (2016; Action, Comedy, Thriller) One year after outwitting the FBI and winning the public's adulation with their Robin Hood-style magic spectacles, The Four Horsemen resurface for a comeback performance in hopes of exposing the unethical practices of a tech magnate. The man behind their vanishing act is none other than Walter Mabry, a tech prodigy who threatens the Horsemen into pulling off their most impossible heist yet. Their only hope is to perform one last unprecedented stunt to clear their names and reveal the mastermind behind it all. [D: Jon M. Chu; A: Daniel Radcliffe, Lizzy Caplan, Michael Caine]
  • Rock the Kasbah (2015; Comedy, Music) A down-on-his-luck music manager discovers a teenage girl with an extraordinary voice while on a music tour in Afghanistan and takes her to Kabul to compete on the popular television show, Afghan Star. [D: Barry Levinson; A: Bill Murray, Bruce Willis, Kate Hudson]
  • Sleeping with Other People (2015; Comedy) A good-natured womanizer and a serial cheater form a platonic relationship that helps reform them in ways, while a mutual attraction sets in. [D: Leslye Headland; A: Alison Brie, Jason Sudeikis, Jordan Carlos]
  • Snowden (2016; Biography, Drama, Thriller) SNOWDEN stars Joseph Gordon-Levitt and is written and directed by Oliver Stone. The script is based on the books The Snowden Files: The Inside Story of the World's Most Wanted Man by Luke Harding and Time of the Octopus by Anatoly Kucherena. [D: Oliver Stone; A: Shailene Woodley, Scott Eastwood, Joseph Gordon-Levitt]
  • Spectre (2015; Action, Adventure, Thriller) A cryptic message from the past sends James Bond on a rogue mission to Mexico City and eventually Rome, where he meets Lucia, the beautiful and forbidden widow of an infamous criminal. Bond infiltrates a secret meeting and uncovers the existence of the sinister organisation known as SPECTRE. Meanwhile back in London, Max Denbigh, the new head of the Centre of National Security, questions Bond's actions and challenges the relevance of MI6 led by M. Bond covertly enlists Moneypenny and Q to help him seek out Madeleine Swann, the daughter of his old nemesis Mr White, who may hold the clue to untangling the web of SPECTRE. As the daughter of the assassin, she understands Bond in a way most others cannot. As Bond ventures towards the heart of SPECTRE, he learns a chilling connection between himself and the enemy he seeks. [D: Sam Mendes; A: Daniel Craig, Christoph Waltz, Léa Seydoux]
  • Star Trek Beyond (2016; Action, Adventure, Sci-Fi, Thriller) The plot is unknown at this time. [D: Justin Lin; A: Simon Pegg, Chris Pine, Idris Elba]
  • Star Wars: The Force Awakens (2015; Action, Adventure, Fantasy, Sci-Fi) 30 years after the defeat of Darth Vader and the Empire, Rey, a scavenger from the planet Jakku, finds a BB-8 droid that knows the whereabouts of the long lost Luke Skywalker. Rey, as well as a rogue stormtrooper and two smugglers, are thrown into the middle of a battle between the resistance and the daunting legions of the First Order. [D: J.J. Abrams; A: Harrison Ford, Mark Hamill, Carrie Fisher]
  • X-Men: Apocalypse (2016; Action, Adventure, Fantasy, Sci-Fi) Since the dawn of civilization, he was worshiped as a god. Apocalypse, the first and most powerful mutant from Marvel's X-Men universe, amassed the powers of many other mutants, becoming immortal and invincible. Upon awakening after thousands of years, he is disillusioned with the world as he finds it and recruits a team of powerful mutants, including a disheartened Magneto, to cleanse mankind and create a new world order, over which he will reign. As the fate of the Earth hangs in the balance, Raven with the help of Professor X must lead a team of young X-Men to stop their greatest nemesis and save mankind from complete destruction. [D: Bryan Singer; A: Oscar Isaac, Jennifer Lawrence, Michael Fassbender]
  • Youth (2015; Drama) Fred and Mick, two old friends, are on vacation in an elegant hotel at the foot of the Alps. Fred, a composer and conductor, is now retired. Mick, a film director, is still working. They look with curiosity and tenderness on their children's confused lives, Mick's enthusiastic young writers, and the other hotel guests. While Mick scrambles to finish the screenplay for what he imagines will be his last important film, Fred has no intention of resuming his musical career. But someone wants at all costs to hear him conduct again. [D: Paolo Sorrentino; A: The Retrosettes, Gabriella Belisario, Harvey Keitel]
  • Zipper (2015; Drama, Thriller) Sam Ellis is a man on the rise - a federal prosecutor on the cusp of a bright political future. But what was meant to be a one-time experience with a high-end escort instead turns into a growing addiction. His moral compass unraveling, his new demon threatens to destroy his life, family and career. [D: Mora Stephens; A: Patrick Wilson, Lena Headey, Ray Winstone]


Finalmente, el conteo de pendientes por fecha:

(Sep-2010)    9   2   1
(Dic-2010)   12   5   1
(Abr-2011)   23  22  17   4
(Ago-2011)   11  11  11  11   4
(Ene-2012)   17  17  17  17  11   3
(Jul-2012)   15  15  15  15  14  11
(Nov-2012)   12  11  11  11  11  11   6
(Feb-2013)   19  19  16  15  14  14   8   2
(Jun-2013)       19  18  16  15  15  15  11   2
(Sep-2013)           18  18  18  18  17  16   8
(Dic-2013)               14  14  12  12  12  12   4
(Abr-2014)                    9   9   8   8   8   3
(Jul-2014)                       10  10  10  10  10
(Nov-2014)                           24  22  22  22
(Feb-2015)                               13  13  13
(Jun-2015)                                   16  16
(Dic-2015)                                       21
Total:      118 121 125 121 110 103 100  94  91  89

Read more
facundo


¿Qué es?

La CDPedia es la Wikipedia Offline. O sea, la Wikipedia, lo más fiel posible a su formato y contenido original, pero armada (construida, compactada) de una manera que no se necesita nada de Internet para acceder a toda la info de la misma.

Se llama CDPedia porque la idea original era meterla en un CD. Hoy por hoy generamos cuatro imágenes en cada liberación de CDPedia: un CD, un DVD, y dos archivos comprimidos (uno mediano y otro grande) que se pueden poner en un pendrive o en cualquier disco rígido.

La CDPedia es multiplataforma: el mismo CD, DVD o archivo comprimido se puede usar en Linux, Windows, o Mac, sin necesitar nada instalado previamente por fuera de lo que cada sistema trae normalmente.

CDPedia


¿Cómo se usa? ¿Cómo se ve?

Para usarla, lo primero es descargarla. Pueden acceder a la página del proyecto y ahí encontrarán info acerca de las cuatro versiones que tenemos actualmente, con el detalle de cuantas páginas y cuantas imágenes tiene cada una. Para bajarlo, necesitan un cliente de Torrent; para Linux a mí me gusta mucho el Deluge, que también puede usarse en Windows y Mac; otro cliente recomendado para las tres plataformas es qBittorrent.

Si descargan la versión CD o DVD, lo primero que tienen que hacer es grabarlo a un disco virgen, para lo cual necesitan una grabadora y un software para grabar. Si usan Windows y no tienen ninguno instalado, les recomiendo InfraRecorder que es software libre y muy fácil de usar. Pongan el disco generado en el equipo y ejecuten la CDPedia.

Si descargan las versión tarball, directamente descompriman los archivos en el disco rígido. Entren a la carpeta descomprimida y ejecuten la CDPedia.

¿Cómo se ejecuta la CDPedia? Bueno, depende de cada sistema. En Windows con hacer doble click en cdpedia.exe, alcanza. En Linux o Mac, si tienen bien configurado el navegador de archivos, debería funcionar haciendo doble click en cdpedia.py, pero siempre pueden recurrir a abrir una terminal, ir hasta el directorio en cuestión, y hacer ./cdpedia.py.

En cualquier caso al ejecutar ese archivo se va a levantar el Server de CDPedia, y al mismo tiempo se abrirá un navegador apuntando a ese Server local. Luego, es sólo usarla, ya que se explora y utiliza de la misma manera que la Wikipedia Online (con la excepción obvia que la CDPedia es de lectura solamente: no permite editar el contenido como sí lo hace la Wikipedia).

(a este y otros screenshots, hagan click para verlos más grandes)

Cómo se ve la CDPedia

Una decisión estratégica de la CDPedia es tomar el HTML generado por los servers de Wikipedia y usarlos casi directamente (les recortamos unos headers, optimizamos algunas cositas). Exploramos en algún momento tomar la info de la base de datos directamente, pero no logramos generar una página web igual a la de Wikipedia online.

Y eso es una fortaleza de la CDPedia: por la manera en que armamos las páginas, la forma de ver y usar las páginas, de explorar y acceder a la información, es igual a la Wikipedia online, de manera que el usuario no tiene un costo cognitivo en pasar de la versión online a offline. Es más, también se puede considerar a la CDPedia como el paso previo de consumo de contenido a la Wikipedia: una persona se puede acostumbrar a explorar las páginas, leer, cruzar y criticar la información, etc, y recién cuando tiene todo armado va a la Wikipedia Online y al resto de Internet para completar su investigación.

Más allá de la página a nivel contenido, lo que sí modificamos mucho es la barra de la izquierda. No tiene la original de Wikipedia, porque no tiene sentido al ser todo offline, así que reemplazamos los botones y enlaces por otros: hay un botón para ver una página al azar, un campo de texto de búsqueda, el logo de CDPedia, el logo de PyAr, enlace a una página de ayuda, etc...

Algo que también modificamos bastante es como señalizamos los enlaces en la página misma, en el contenido de Wikipedia. Hay principalmente tres tipos, distinguibles en cómo decoramos el texto convertido en enlace:

  • Azul: un link normal, apunta a otra página de Wikipedia que se incluyó dentro de CDPedia.
  • Rojo, subrayado con guiones: un enlace a otra página de Wikipedia pero que no fue incluida en CDPedia por razones de espacio.
  • Azul, subrayado con guiones: un link que los sacaría de CDPedia, ya que apunta a recursos online (útiles solamente si tenés Internet, claramente).

Muestra de enlaces

Otra sección que modificamos es el pie de cada página: ponemos un enlace a la misma página pero online, en Wikipedia misma, por si el usuario necesita la información actualizada. También aquí incluimos el contenido original, ponemos algún disclaimer extra, mencionamos que CDPedia es un proyecto de Python Argentina (y apuntamos al tutorial de Python que está incluido en la CDPedia).

Cabe mencionar que la CDPedia funciona también en Modo Servidor. De esta manera, se puede instalar la CDPedia en el servidor de una escuela, y que todas las computadoras del establecimiento puedan usar la información desde allí. Así logramos el efecto deseado de que los chicos puedan tener acceso al contenido de Wikipedia sin realmente tener Internet, pero sin la complicación o el incordio de tener que instalar CDPedia en cada una de las computadoras. Acá hay más instrucciones para configurarla de este modo.


¿Qué contenido tiene?

El contenido de la CDPedia está fuertemente determinado por dos características intrínsecas del proyecto: la CDPedia es estática y fácilmente distribuible en un disco o pendrive.

Digo que la CDPedia es estática porque una vez armada, no se actualiza. Es por eso una especie de "fotografía de un momento de Wikipedia" que, por definición, siempre va a estar desactualizada.

Cuando se comienza a generar una nueva versión de la CDPedia, se baja la versión más actualizada de todo el contenido de Wikipedia y se empieza a procesar. Este procesamiento puede llevar varias semanas, incluso unos meses. Entonces, cuando se libera una nueva versión de CDPedia, no incluye todos los cambios que se generaron en Wikipedia misma desde que se empezó a procesar.

Es por esto que se trata de liberar una versión de CDPedia al menos una vez por año, para que contenga la información lo más actualizada posible.

Ejemplo de un artículo

También digo que la CDPedia se puede distribuir fácilmente: sólo hace falta quemar un CD o DVD, o incluso pasarse los archivos mediante un pendrive. En casi todas las versiones (menos la más grande), por una cuestión de formato, no entra todo el contenido de la Wikipedia. Por ejemplo, para la versión 0.8.3, tenemos lo siguiente:

  • CD (693 MB): 54 mil páginas y 5% de las imágenes
  • Tarball medio (3.6 GB): 400 mil páginas y 20% de las imágenes
  • DVD (4.3 GB): Todas las páginas y 8% de las imágenes
  • Tarball grande (8.7 GB): Todas las páginas y todas las imágenes

Entonces, a menos que estemos armando el tarball grande, es evidente que tenemos que decidir cuáles páginas e imágenes van a entrar, y cuáles van a quedar afuera.

Esa decisión se toma ordenando todas las páginas por un determinado puntaje (que explico abajo), y se eligen las primeras N páginas (para el ejemplo anterior, las primeras 54 mil para el CD, las primeras 400 mil para el tarball medio, etc). Esas páginas tienen a su vez imágenes, que naturalmente también quedan ordenadas por el puntaje de las páginas: se toma un primer porcentaje de imágenes que se incluyen al 100%, otro porcentaje de imágenes que se escalan al 75%, otro porcentaje de imágenes que se escalan al 50%, y el resto no se incluye.

Analizando las páginas

Como vieron, un tema clave en la selección es darle un puntaje a las páginas. Este puntaje está formado (hoy por hoy) en base a dos factores: levemente por el largo de la página (una página larga tiene más puntaje que una corta), y fuertemente por lo que llamamos "peishranc", que es la cantidad de otras páginas que enlazan a la que estamos evaluando. Entonces, si a una página se la menciona en otras mil páginas es mucho más importante que una página que casi no se la menciona en el resto de la Wikipedia.

Otro gran detalle en lo que es "contenido" es qué hacemos para mitigar el problema de la vandalización. O sea, cómo evitamos en lo posible incluir páginas que fueron vandalizadas. Cuando comienza el proceso de generar una nueva versión de la CDPedia, como les comentaba antes, bajamos todas las páginas de Wikipedia, ¡pero no siempre bajamos la última versión! Lo que hacemos es revisar cuándo fue modificada y por quién: si fue modificada por un usuario normal, perfecto; pero si fue modificada por un usuario anónimo (como sucede en la mayoría de las vandalizaciones) nos fijamos cuando fue modificada: si fue hace más de varios días, la incluimos (asumimos que la gente de Wikipedia ya tuvo tiempo de verificar el cambio), pero si es muy reciente evitamos la última versión de la página, y agarramos la versión anterior (y aplicamos nuevamente todos estos mismos controles).


¿Cómo surgió el proyecto?

Cuenta la leyenda que el proyecto arrancó en el sprint posterior al primer PyDay de Santa Fé, en Junio del 2006, con la idea base de poder distribuir la Wikipedia a aquellos lugares que no tenían o tienen acceso a Internet (en particular teníamos en mente a escuelas de frontera o de ciudades chicas, bibliotecas de barrio, centros culturales de pueblos pequeños, etc.).

El proyecto continuó, y aunque no siempre le pudimos dedicar tiempo, tampoco nos alejamos nunca demasiado. Las mejoras en el proyecto fueron muy por ráfagas. Quiero destacar que fuimos muchos los que colaboramos con el proyecto, a lo largo de los años, ¡casi 30 personas!

Se trabajó mucho en este proyecto durante los PyCamps (los dos en Los Cocos, el de Verónica, y el de La Falda), donde muchas personas le dedicaron un buen tiempo, y también se realizó bastante durante otras reuniones, especialmente durante el 2010 y 2011.

Trabajando en un PyCamp

A modo de ejemplo, dos sprints: uno fue en un incipiente hacklab, donde se experimentó mucho sobre el índice para las búsquedas, y también durante la fundación de Wikimedia Argentina, donde se presentó por primera vez el proyecto y se realizó un gran avance en la primera parte del procesamiento de datos.

En años más cercanos yo traté de involucrar colaboradores en algunos sprints efímeros que armé, con poca suerte. Lamentablemente en el último tiempo fui principalmente sólo yo el que empujó el proyecto (lo cual es una autocrítica, más que un autoreconocimiento).

Una gran característica de la CDPedia, indiscutiblemente el proyecto más grande y más largo de Python Argentina, es que siempre se mantuvo orientado a los mismos objetivos: tener una Wikipedia offline con fines sociales (distribuir en escuelas sin conexión a Internet, que el conocimiento sea libre, etcétera), que sea divertido de hacer (es decir, hacerlo en Python), y mantenerlo libre (no sólo el producto final, que recomendamos copiarlo y repartirlo, sino el código en sí).


¿Se logró cumplir el objetivo social?

Como decía arriba, uno de los objetivos de la CDPedia es difundir el conocimiento, lograr que gente que no tenga acceso a Internet igual pueda acceder a la información de la Wikipedia, que es tan valiosa. Siendo PyAr una comunidad relativamente pequeña, era difícil escalar a tener un impacto nacional en el común de la gente.

En su momento queríamos que se viralice persona a persona: que alguien la baje y haga un par de CDs y los reparta, que los que reciben cada CD hagan a su vez varias copias y las repartan a otras personas, a escuelas, bibliotecas de barrio, etc. Pero no tuvimos mucho éxito con esa movida.

Pero resulta que Martín Varsavsky se casó, y Jimmy Wales le regaló para el casamiento la posibilidad de que se distribuya una Wikipedia offline en Argentina. Preguntó cuáles habían, la CDPedia era la que mejor se ajustaba a lo que se necesitaba, y vino Jimmy a Buenos Aires, le mostramos la CDPedia, y luego hubo una reunión en Educ.ar para terminar de acordar esto (fueron Jimmy por Wikimedia, Enrique Chaparro por Wikimedia Argentina y Alecu por PyAr).

En gran parte porque Educ.ar quería meter la CDPedia en un disco de ellos (con carátula de ellos, algunas otras páginas, etc), se logró que dicha institución becara a dos chicos de PyAr, Diego Mascialino y Hernán Olivera, para trabajar part time en esto.

Así que agarraron la versión 0.6 que recién había salido (Alecu y yo nos habíamos apurado a cerrar muchos detalles para tener algo funcionando presentable a Jimmy Wales), y entraron a darle. Esto le dio bastante impulso al desarrollo del proyecto, sumado a que también aporté regularmente al proyecto, y a que luego de que se terminara la beca Diego siguió trabajando en CDPedia, y que se sumó como "laburante regular" Santiago Piccinini.

Con todo este trabajo, y un nuevo empujón en el PyCamp del 2011, pudimos terminar de cerrar la versión 0.7, que se entregó a Educ.ar y se distribuyó a todas las escuelas del pais.

Sin embargo el mayor hito a nivel de distribución masiva de la CDPedia es que en algún momento fue incluida en las notebooks que el Estado argentino distribuye a los chicos de escuelas de todo el país como parte del programa Conectar Igualdad. Y también se la muestran a alumnos y docentes en los talleres que hacen como parte del programa.


¿Se puede espiar abajo del capot?

¿Cómo se arma la CDPedia? ¿Cómo se logra cumplir todo lo que expliqué arriba?

Es bastante sencillo: hay que bajar el código con git desde la página del proyecto en github, y luego correr un script que hace todo solo: el cdpetron.

Este script tiene bastantes opciones (especialmente para no repetir partes del proceso: que no vuelva a listar todas las páginas, que no vuelva a bajarlas, que no limpie todo antes de comenzar, etc), pero lo básico es que se le especifica de dónde tomar el código, donde bajar y dejar páginas e imágenes, y en qué idioma trabajar.

Incluso hay una manera de correrlo en modo test, para que haga solo una parte del trabajo y poder arrancar pronto a probar cosas, ideal para mezclarlo con la opción de generar una sola de las versiones:

    $ utilities/cdpetron.py --test-mode --image-type=beta . /tmp/dumpcdpedia es

El comando anterior tarda relativamente poco (menos de cinco minutos en una máquina normal y con buena conexión a Internet) y nos deja todo el proceso realizado, pero con pocas páginas.

Ver lo que obtuvimos es sencillo, porque más allá de generarnos el tarball o el .iso correspondiente, podemos probar la CDPedia directamente del directorio donde realizamos el proceso, haciendo...

    ./cdpedia.py

...lo cual levantará el server y nos abrirá el browser, tal cual si lo hiciéramos de la versión final (pero con la ventaja que podemos pararlo, cambiar el código para probar el algo, levantarlo de nuevo, ver los resultados, etc.)

¿Y cómo es el proceso que realiza? Bueno, la estructura interna (y el proceso para obtenerla) de la CDPedia está muy influida por la necesidad de optimizar al máximo la compresión y el acceso a la información, de manera de poder meter en cada formato (CD, etc...) la mayor cantidad posible de artículos e imágenes.

Podemos delinear el proceso que se realiza en en el siguiente gráfico:

Proceso de la CDPedia

El primer paso es bajar de la Wikipedia misma todas las páginas (lo que realmente tiene dos sub-pasos, un listado general de todas las páginas que nos interesan, y luego efectivamente bajarlas). Esas páginas son pasadas por diferentes preprocesadores que hacen distintos trabajos. Algunas las filtran y eliminan páginas que no queremos, otras les asignan puntajes, otras las modifican mejorándolas para nuestro objetivo, otras extraen información que va a ser útil luego.

Al final de ese preprocesamiento tenemos dos grandes resultados intermedios: los HTMLs "útiles", más un montón de metadata. Aquí se abren tres grandes ramas de trabajo.

La primera es el manejo de las imágenes. Se buscan los enlaces en las páginas, se descargan todas las imágenes necesarias (que pueden no ser todas, dependiendo de la versión generada), se reducen las que corresponden (algunas se incluyen al 75% o 50% de su tamaño) y finalmente se arman los llamados "bloques de imágenes".

Por otro lado, con los resultados intermedios se generan los "bloques de artículos".

Y finalmente, se procesan todos los títulos de las páginas más algo de metadata y se hace pasar por un complejo algoritmo matemático que nos pre-arma la información para generar los "bloques del índice".

A esta altura tengo que explicar qué son estos "bloques" de imágenes, artículos o índice. Es una estructura no demasiado compleja pero muy bien pensada para el objetivo de la CDPedia que es funcionar sin usar demasiada memoria y poco espacio en disco. Básicamente tenemos bloques de información comprimidos de forma independiente: es un equilibrio entre comprimir todo por separado, o comprimir todo junto; logramos mejor ratio de compresión que comprimiendo la info por separada, y no tenemos que descomprimir algo demasiado grande al no estar todo junto. Para decidir qué bloque consultar hay un hasheo y selección, y luego dentro de cada bloque hay un índice binario de contenidos, pero no mucho más.

Finalmente, con estos bloques, más algunos recursos estáticos (imágenes, CSSs, algo de JSs, el tutorial de Python comprimido, etc.), más el código de Python propiamente dicho para servir la CDPedia, se arman los tarballs o .ISOs.


¿En qué situación está el proyecto actualmente?

El proyecto avanza, pero lento.

Hay varios bugs abiertos, incluso algunos que son críticos porque se muestran un par de cosas feas luego de un cambio de formato de las páginas de Wikipedia, pero yo personalmente no estoy haciendo foco ahí, sino que estoy empujando un par de cambios más grandes.

Uno de ellos es lograr la internacionalización de la CDPedia. Cuando esté terminado, se van a poder crear CDPedias no sólo a partir de la Wikipedia en español, sino también de la Wikipedia en otros idiomas: portugués, aymara, guaraní, alemán, ruso, etc...

El otro cambio es más bien la construcción de una infrastructura en particular. Mi idea es tener una generación continuas de CDPedias, que se arme la CDPedia en español, y automáticamente luego se arme la de otro idioma, y otro, y otro, y otro, y luego de varios meses, vuelva a arrancar con la de español.

Trabajando

Pero, como decía, hay mil cosas para hacer.

Unos chicos en un PyCamp hicieron una app para Android que, luego de copiar los datos a mano, correría la CDPedia en cualquier teléfono o tablet (yo traté recientemente de usarlo y tuve unos problemas y no lo pude hacer andar del todo).

Otro detalle que necesita trabajo es que el código en sí está bastante feo... mezcla inglés y castellano, no cumple PEP 8 ni PEP 257, tiene poco y nada de pruebas de unidad, etc.

Si tienen ganas de participar de cualquier manera, lo principal es que se pongan en contacto con el grupo en general, a través de la lista de correo o del foro asociado (son espejo uno del otro, usen el
que sientan más cómodo). Lo mismo si desean hacer cualquier consulta, o ponerse en contacto para cualquier inquietud.

CDPedia necesita amor. Programadores con ganas de trabajar y aprender, tiempo de programador para continuar llevando este proyecto tan interesante y valioso por buen camino.

Read more
facundo

Escapándose


El jueves pasado jugué a mi primer "juego de escape". Fuimos a Eureka con mi amiga Silvana y dos compañeras de trabajo de ella.

Un juego de escape es como un juego de aventura gráfica, pero de forma reducida y en la vida real. En Eureka lo explican así:

Estas encerrado con tu equipo en una habitación y tenés 60 minutos para escapar. La única forma de lograrlo es ir develando pista por pista y avanzar hasta encontrar la llave que les permitirá abrir la puerta y salir de la habitación. Es una carrera contra el tiempo y el momento perfecto para dejar fluir tus habilidades como detective.

Nosotros jugamos a Enigma. Básicamente entramos a una habitación, y la persona del lugar nos dio algunas reglas básicas: tienen una hora, lo que se abre se abre sin esfuerzo (no hay que sacudirlo hasta que se abra, digamos, sino que hay que resolver algo que lo abre), hay una puerta que va a permanecer cerrada, etc.

Luego se fue, cerró la puerta por donde entramos, y empezó el juego. Una tele nos dió una explicación de escenario (o sea, nos puso en el contexto de lo que había que resolver... me hizo acordar mucho a los videos del japonés en Lost), y luego empezó a contar el tiempo.

La habitación era grande, y había varios elementos interesantes (tranquilos, no les voy a spoilear el juego, esto es lo que uno ve al entrar): una máquina con botones, perillas e interruptores, una mochila colgada, una computadora que decía "entren el código de los misiles (tienen 10 intentos)", un mapamundi con leds marcando algunas ciudades, un tablero con tres relojes, un par de mesas y sillas, y algunas cosas más (algunas importantes, otras no).

Y desde ahí para adelante es como jugar una aventura gráfica: hay que explorar, entender qué tenés que hacer, vas encontrando cosas, vas tratando de descifrar donde se usa lo que encontraste (si se usa), algunas cosas salen fáciles, a veces te trabás, no sabés como seguir y vas repasando lo que tenés y como puede servir, etc.

Estuvo muy bueno.

Read more
facundo

Cerrando etapas


El tiempo pasa, nos vamos volviendo tecnos.

No me voy a poner a hablar de la inevitabilidad del paso del tiempo, de que la flecha de la entropía sólo apunta para un solo lado, ni de esas cosas.  Quiero hacer foco en que hay que aprovechar el tiempo que tenemos.

Esta genial foto es de una de las últimas clases de natación donde llevé a Malena.

Male y Facu en el agua

Fuimos todo el año, una vez por semana. Empezó tímida, y terminó pasando más tiempo abajo del agua que arriba, totalmente acuática. Para mi fue un placer llevarla y disfrutar esa evolución con ella, lo mismo que hice con Felipe dos años atrás. Y ya está, ese tiempo pasó y nunca más los meteré en el agua con ellos agarrándose a mi. Más allá de la nostalgia anticipada, lo importante es que cuando tuve la oportunidad, la aproveché :)

Sé que van a haber mil otros momentos donde los lleve de la mano a territorios para ellos desconocidos. La clave es estar ahí, darles la mano, acompañarlos, y disfrutar ese proceso.

Otra foto del paso del tiempo: Felipe, en su acto de graduación del Jardín, donde él mismo estaba emocionado mientras otros compañeros pasaban a buscar sus diplomas (todavía no le había llegado su turno), y luego estudiaba la medallita que le habían dado...

Felu graduado

Read more
facundo


¡¡Salió la versión 4 de fades!!

Mucho mucho laburo le pusimos con Nico a esta versión (y tuvimos bastante ayuda de otros colaboradores, en particular durante el último PyCamp).

¿Pero qué es fades? Es un sistema que maneja automáticamente los virtualenvs de sistemas Python en los casos que uno normalmente encuentra al escribir scripts y programas pequeños, e incluso ayuda a administrar proyectos grandes.

Crea automáticamente un nuevo virtualenv (o reusa uno creado previamente) instalando las dependencias necesarias, y ejecutando el script dentro de ese virtualenv.

Todo lo que se necesita hacer es ejecutar el script con fades (en lugar de Python) y también marcar las dependencias necesarias. Más detalles en la documentación misma.

fades

¿Qué hay de nuevo en esta release?

  • Nueva opción para usar iPython en el interprete interactivo: --ipython (gracias Ariel Rossanigo)
  • Ahora es posible ejecutar un programa dentro del virtualenv con -x (gracias Ricardo Kirkner). Por ejemplo es posible crear un proyecto de django sin tener django instalado en tu sistema usando: fades -d django -x manage startproject foo
  • Podés ejecutar fades como un módulo de python. Simplemente hay que ejecutar python3 -m fades (gracias Javi Mansilla)
  • Soportamos Python 3.3 para ejecutar fades
  • Si sos un usuario especial y no te alanzan las opciones que tenemos tenemos cosas para vos!  Podes pasarle opciones a virtualenv con --virtualenv-options, también a pip con --pip-options, e incluso es posible eliminar un virtualenv con --rm <uuid>
  • Tenemos un logo!! (el que se ve arriba, claro)
  • Los tests de fades se ejecutan con fades! No hay necesidad de instalar nada previamente
  • Se pueden crear virtualevs con --system-site-packages
  • Varios bug fixeados y otros nuevos ;)

Para instrucciones de cómo obtenerlo o instalarlo, miren en la página del proyecto o la de PyPI.

Por otro lado, con Nico habíamos decidido que era importante para fades que puede ser instalado con apt-get install en Debian y Ubuntu.

Entonces, me puse con eso, pedí en el laburo si algún Debian Developer quería darme una mano para meter fades en Debian, y se copó uno de los mejores: Barry Barsaw. Me estuvo ayudando un montón, contestándome preguntas simples y complicadas.

Nosotros ya teníamos un .deb, pero no del todo bien armado. Al final, terminé dando vuelta completamente todo pero quedó todo más simple, más limpio, y con mejor forma. El .deb que generamos es un lujo, y además fades terminó entrando en Debian, en unstable al principio y luego en testing, :D. Es mi primer programa que entra en Debian, y para mí es todo un orgullo :).

El camino natural es que entre en Xenial Xerus (Ubuntu 16.04), que es LTS, así que seguramente liberaremos la v5 la primer quincena de febrero.

Rock.

Read more
facundo

PyCon Ar 2015


La semana pasada se hizo la séptima conferencia nacional de Python en Argentina, la PyCon Ar 2015.

Fue en Mendoza. Un poco lejos para ir en auto o en micro, así que decidí en ir en avión. A nivel de costo era lo mismo, y la ganancia en tiempo era notable. Me permitió viajar el jueves, y volver el domingo, sin perder completamente ambos días o más.

Allá me quedé en un hostel, que siempre es más comunitario que un hotel, aunque menos privado. Pero bien. Fuí a Casa Pueblo Hostel, lindo y barato.

El evento se hizo en el Espacio Cultural Julio Le Parc, un lugar muy grande (que no estaba para nosotros sólos, obviamente). Tenía sus limitaciones (el viernes para el segundo track se hizo en un aula que siempre desbordaba) pero estuvo bien.

Algo para destacar es que teníamos el almuerzo resuelto (una vianda fría, abundante) muy al estilo de las PyCon yanquies. Y como allá, se almuerza en rondas en el piso, en el parque, en cualquier lado, porque se desborda cualquier capacidad de "asientos para comer". Me gusta lo de proveer la solución para el almuerzo, se resuelven un par de problemas de un mismo golpe: la gente no tiene que salir masivamente a buscar qué come y dónde, y de yapa no se demora en llegar al bloque de la tarde.

Dando la charla de Async en Py3

A nivel contenidos, la conferencia estuvo espectacular. Aproveché un montón de charlas: la de "Practical OpenCV" de Diego Ramirez estuvo interesante; "Encantando PythonES para masticar data" del gran Juanjo Ciarlante me enseñó un montón de cosas sobre map&reduce; la de "socket a asyncio en 45 minutos" de Marcos Dione me pareció super valiosa para dar en dos horas, le explicaría mucho a mucha gente; David Weil con "Es posible detectar las excepciones de un código Python" siempre con análisis interesantes super prácticos y de bajo nivel; Sofía Martin con "Tu primera aplicación con Kivy para móviles" mostrando lo fácil y directo que es hoy día hacer Python para Android; y "Cacheando fuera de Django" de Guillermo Narvaja, con tips e info basada en experiencia real.

Y estoy dejando afuera a las dos keynotes: Ashwini Oruganti hablando del futuro de Python y la PSF, y Simon Willison disertando sobre Microservicios. Bien, pero nada del otro mundo.

A nivel personal, dí dos charlas, una sólo y otra acompañado. Por un lado "Programación asincrónica en Python 3: el futuro ya llegó", que no era la primera vez que la daba y encima me quedé sin tiempo y faltó explicar muchos ejemplos. Pero a la gente le gustó (o al menos eso me fueron comentando). Y además dimos con Joac "No es magia: descriptores al desnudo", una charla sobre un tema tan complicado que creo que haberla dado en tiempo y mostrando todo lo que queríamos fue un éxito por si mismo. Y de nuevo, recibimos mucho feedback positivo.

Joac y myself dando la charla

El lado negativo de todo fue que fui a Mendoza, pero no paseé ni conocí nada. Ya volveré, claro que sí.

Read more
facundo

El rumbo tan temido


Me gustó mucho la editorial de Eduardo Aliverti, en Marca de Radio del sábado pasado.

Me gustó porque se explaya un poco en conceptos que comparto, pero bien contado, mostrando lo que me parece que sería el rumbo si gana la derecha (a.k.a. Macri) en Argentina.

Acá pongo unos parrafitos centrales, pero pueden acceder al texto completo o incluso al audio.

Lean, por favor, que al final del post hago un par de preguntas...

Van a devaluar a lo pavote para recomponer la maximización de la renta agropecuaria exportadora. Van a satisfacer a una burguesía que es local, no nacional. Van a bajar la demanda por vía fiscal y monetaria, van a desregular el mercado cambiario, van a producir la caída del salario real, van a destruir a las pequeñas y medianas empresas, aumentará el desempleo y el trabajo informal y al final de la película que ya vimos y sufrimos chiquicientas veces van a reprimir y se fugarán de nuevo en helicóptero pero con su plata bien pipona.

Los científicos volverán a lavar los platos, a los pobres les mantendrán la AUH pero la cobrarán el día del arquero porque desfinanciarán al Estado como motor del consumo, los sectores medios se encantarán con ese comienzo de dólar para todos para más tarde o más temprano ir a reventar las puertas de los bancos, las empleadas domésticas tendrán que cantarle a Gardel en el reclamo de sus derechos adquiridos, los que tienen una pyme de producción quedarán en la lona por invasión de importados y los que la tienen de servicios sufrirán que no les pueden pagar la cuota o la tasa de lo que sea porque la gente se quedó sin laburo.

La inflación descenderá, eso sí, pero entonces habrá de preguntarse, otra vez, créase o no, para qué sirve que baje si no hay ni salario real ni empleo. Habrá ese período inicial de espejitos de colores porque, seguro, aparecerán los dólares que tienen guardados en las silobolsas (unos 10 mil millones, según cálculos aceptados por interesados y especialistas) y, grandemente probable, los que provengan de un nuevo endeudamiento internacional para engordar reservas.

No es tan sencillo como se lo expresa porque hay también reservas que no son monetarias sino sociales, y aun cuando ganaran en las urnas tendrán enfrente a una potencia movilizadora, combativa, nada despreciable.

Pero el rumbo es ése.

Si llegaron hasta acá, gracias por acompañarme :)

Entonces, creo que todos caemos en tres alternativas, luego de haber leido estos párrafos...

  • Aliverti está equivocado, las cosas no van a ser así si gana Macri
  • Está en lo cierto, y es un bajón
  • Está en lo cierto, y es el modelo ideal de país ideal

A mí me parece (como anticipé al comienzo), que está en lo cierto, y que es un bajón.

Aunque Scioli no me representa, y creo que habría que marcarle la cancha muy bien, me parece que más o menos va a seguir llevando el país por el modelo de los últimos años. A Macri, sin embargo, le tengo pavor.

Vos, ¿de qué lado estás?

Read more
facundo

Relación costo beneficio


Acabo de llegar a una conclusión, de esas apuradas, donde la certeza se ve reforzada por el no tan completo análisis científico que implica una corazonada.

La comida que más beneficio me da en función del costo (precio de los componentes, complejidad del laburo y tiempo de cocinero) es el pollo al horno con cebolla.

El proceso de armado del plato es, obviamente, sencillo.

Cómprese un par de "patamuslos" en la pollería amiga. Si es de pollo de campo, mejor. Yo en Italia lo hacía con pavo, y estaba igual de bueno. Cómprese cebolla. Se asume que en casa hay aceite neutro (girasol, ponele), sal y pimienta.

(se escuchan ruidos de frenada) Perá, ¿qué? ¿Nada más? No, nada más.

Agárrese una fuente, póngase un poco de aceite en la base (como para que no se pegue, apenas), acomódense las presas de pollo así nomás. Pélese y córtese las cebollas en partes grandes (si son cebollas chiquitas, en mitades; si son medianas, en cuartos; si son grandes, en octavos; y así). Revoléese las cebollas así nomás en la fuente, entre los huecos dejado por el pollo.

Métase en el horno, ya caliente. Una hora. Dese vuelta un poco todo. Salpiméntese. Dejar un rato más hasta que quede doradito doradito. Ante la duda, dejar un rato más.

Disfrútese.

Lleva menos laburo hacer esta comida para cuatro que lo que me costó hacer este post en el tiempo verbal pelotudo de ese pseudo presente-imperativo-en-tercera-persona que no sé como se llama.

Read more
facundo


Antes de cerrar el año armé un nuevo curso de Python, no como parte de un grupo cerrado para una empresa o institución, sino abierto al público en general. Esta vez, intensivo (muchas horas en sólo tres clases).

Será un Curso Introductorio a Python, apuntado a aquellos que no saben nada de este lenguaje, o saben algo pero quieren profundizar o formalizar conocimientos, y también incluirá un popurrí de temas enfocados a devops... todos los desarrolladores terminamos siendo un poco sysadmines a veces y está bueno saber usar algunas herramientas.

El nivel es introductorio, lo que significa que se van a ver muchos conceptos del lenguaje de manera profunda, pero no se tocarán temas avanzados ni satélites a lo que es Python en sí, con la intención que el asistente gane sólidos conocimientos que luego le permitan explorar el resto a su gusto. Para aprovechar el curso en todo su potencial se necesita tener conocimientos previos de programación (pero no hace falta ser un programador avanzado). En detalle, el contenido del curso versará sobre los siguientes ítems:

  • Introducción: ¿Qué es Python?; Primeros pasos; Recursos
  • Tipos de Datos: Haciendo números, y más números; Cadenas de texto; Tuplas y listas; Conjuntos; Diccionarios
  • Controles de flujo: if/elif/else; loops while y for; Excepciones
  • Encapsulando código: Funciones; Clases; Módulos; Espacios de nombres
  • Otros temas: Archivos; Serialización; Trabajando en Red; Ejecución externa; Multithreading/multiprocessing

El formato del curso será presencial, en un ambiente "tipo aula" con pizarrón y proyector, pero no basado en filminas, sino totalmente dinámico y adaptativo. Se hace un foco especial en la interacción profesor-asistente, de forma de ir resolviendo las dudas de todos y lograr un aprendizaje más profundo en el mismo tiempo. En función de esto también se limita el cupo, con una cantidad máxima de asistentes de alrededor de siete personas.

Como parte del curso se entregará un certificado de asistencia al mismo. No se necesita asistir al curso con computadoras, pero pueden traer laptops/netbooks si lo desean (van a disponer de conexión a internet via wifi y conexión eléctrica).

El curso es de 18 horas en total, dividido en tres clases, los Miércoles 4, 11 y 18 de Noviembre. El horario será de 10 a 17, considerando una hora para almorzar. El almuerzo será provisto como parte del curso: la idea es ofrecer esto resuelto, así comemos algo liviano, descansamos un rato, y seguimos trabajando, porque si vamos a almorzar a otro lado no nos va a alcanzar el tiempo. El lugar de realización es Borges 2145, Olivos.

El costo total del curso (incluyendo el almuerzo) es de $2720; es necesario abonar al menos el 50% para reservar la posición (recuerden que, como indicaba arriba, hay un máximo de lugares disponibles), abonando el saldo restante el primer día de clases.

Para reservar me envían un mail para confirmar disponibilidad y ahí les paso los datos necesarios.

Read more
facundo

De sprint en Boston


Una semana de trabajo intensivo.

Muy intensivo, como son los sprints, porque trabajás de 9 a 18 sin pausa, pero también socializás de 8 a 23. O más, o menos, pero estás todo el tiempo con compañeros de trabajo, y la mayoría del tiempo hablando en inglés.

Intensivo.

Pero está bueno, te corta la rutina, hacés cosas diferentes. Este sprint fue en USA, hace bastante que no iba por allá. Era en la zona de Boston, así que aproveché para visitar a mi amigo Nico Cesar.

Llegué el domingo, antes del mediodía, tiré las cosas en el hotel y me tomé un par de bondis para ir a la casa. Salimos a pasear, almorzamos una sopa de almejas (riquísima) y después de cruzar el campus de Harvard y estar un rato mirando un show callejero, nos fuimos a navegar un rato, en un velero.

Nico en el velero

Nunca me había subido a un velero, y esta vez no fui solamente un turista: agarramos uno de los grandes, que tiene una vela adelante (además de la principal), y yo estaba a cargo de la misma (así como de desenganchar y enganchar el velero al salir/volver). Estuvo bueno, aprendí un montón de cosas :)

Pero más allá de eso, me encanta cruzarme con Nico. Podemos pasar horas charlando de mil boludeces, caminando, paseando, tomando algo.

El mismo domingo mi jefe Bret hizo una "langosteada"... unos sanguchitos de langosta, básicamente, pero preparados de la forma local (tostando los panes con manteca, con salsitas especiales, etc... laburó un montón, estuvo bueno :).

Flor silvestre

El resto de la semana, mucho trabajo (como decía) y mucha socialización. Este es el segundo sprint con este equipo y estuvo mucho mejor que el primero.

El lunes estuve paseando un rato, pero terminé tomando algo y casi cenando con mucho del equipo.

El martes fuimos con varios del grupo al centro a una charla de Cory Doctorow que estuvo muy buena. Acá me volví a cruzar con Nico, y nos fuimos a cenar todos juntos. La charla de Cory estuvo muy buena, el resto de la noche también.

Cory Doctorow

El miércoles era cena de equipo... la cena formal, digamos. Fuimos todos a un lugar donde comimos muy rico, pero el lugar no estaba bueno. Muy moderno, muy ruidoso. No fue la mejor noche, el lugar no tenía... swing... no sé.

El jueves estuvo mucho mejor. Entre mi jefe y otro más armaron una "barbacoa" en el patio del hotel. Compraron mil cosas, mucha variedad (y orgánico!), con muy buena cerveza para acompañar. Así que comimos pollo, hamburguesas, salchichás, salmón, carne de vaca. Acompañado con mil y una verduras. Todo muy rico.

Compras para la barbacoa

La barbacoa amerita un punto aparte. Sí, parece una máquina del demonio, o sea, una parrilla a gas... pero debo admitir que estos que estaban ahí estaban muy bien. Por un lado, la llama están apuntando para abajo, así que no tocan la comida... y por otro lado, tienen una tapa que captura el calor. De nuevo: no es una parrilla de verdad, pero termina quedando algo medio parrilla medio horno que no está tan mal.

La verdad es que la comida estuvo muy bien.

El viernes estaba muy cansado, aproveché a quedarme en la habitación, acomodar mil cosas, preparar todo.

Y el sábado, ya casi volviendo, fuimos a pegar una vuelta con Guillo hasta el Best Buy, más como una excusa para caminar que otra cosa. Llegamos nueve y media... ¡y estaba cerrado! Vimos que abría a las 10, así que nos fuimos a un mall que estaba cerca, mientras tanto. Fuimos como pudimos, porque no hay senderos para caminar, ni para cruzar la calle, etc. Si no tenés auto, estás en el horno :/. Nosotros igual caminamos y nos metimos en todos lados. Caminamos bastante, la verdad... cuando nos fijamos habían sido 6.5km!!

El otoño es muy colorido

Después, la vuelta... un viaje siempre demasiado largo, y por fin de nuevo con la familia :)

Read more
facundo

Pico de segundo semestre


Ah, ¡qué semanas!

Vengo a recontrafull, pero fue un pico de un par de meses, ya se tranquiliza el segundo semestre. Bah, en un par de semanas se tranquiliza...

Se juntaron muchas cosas...

Estoy dando un curso de Python en Mercadolibre (bah, tres cursos) y eso me tiene ocupado los anocheceres de un día de la semana, o incluso de dos.

Pasó la charla que doy siempre en el postgrado para científicos en La Plata (de la mano de Manuel), y el PyDay en Junín (organizado por Juan), donde dí un taller de Intro a Python y además estrené una charla de programación asincrónica en Python 3.

Y el fin de semana pasado fue el cumpleaños de Felipe, que no sólo es que el sábado sea movidito (almuerzo con mi vieja, salón a la tarde para toda la familia y amigos con niños, más compañeritos del jardín, y cena con el resto de la familia), sino que hay mucha preparación los días anteriores.

Cumple 6 de Felu

Además, estuve corriendo para renovar la visa de USA, que me había expirado, y de repente pasé a necesitarla.

Todo eso teniendo en cuenta también que estoy bastante activo en varios proyectos de software libre.

  • CDPedia: Salió una nueva versión, la 0.8.3, principalmente con contenido actualizado y un par de fixes
  • fades: Con Nico sacamos la beta de la versión 4, con un montón de cambios! en breve sale el release final, una versión para no perderse!
  • Magicicada: seguimos laburando a full con Nati dandole forma para que sea ampliamente usable; estamos a un 80% de una gran beta inicial.
  • Encuentro: más allá de algunas acciones de mantenimiento que tuve que hacer, voy a tratar de incorporarle los videos de TED de Argentina...
  • Launcherposta: una nueva release, sólo en PyPI, con un par de fixes pequeños que fuí agregándole en algún momento.

En fin. Para ir cerrando ahora el año solamente (?!) me queda un viaje por laburo, más la PyCon Argentina en Noviembre (para la cual todavía tengo que preparar una charla con Joac).

Read more