Facundo Batista: ¿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.

Facundo Batista: 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.

Juanjo Conti: Taller El brillo de la palabra, año 5, clase 1

Hace un par de semanas me llegaba la invitación para este año:

Si estás buscando un lugar para expresarte, lee este aviso:

Otro comienzo, otro renacer… 5ta Temporada de…

“El brillo de la palabra”

Porque creemos que las palabras no significan solo “cosas”, sino que además, y sobre todo, vehiculan emociones, sentimientos y deseos por cumplir.

Somos un Taller para escribir, pensar, leer y en especial, sentir. En el 2016, queremos hacer de las palabras el mejor Atrapa sueños. Cada participante aportará el aro que representa la rueda de la vida y la malla serán los sueños que tejemos en el tiempo. Con las palabras crearemos sueños, pero también la posibilidad de transformarlos en nuevas realidades.

Ya nos conocés, desde el 2012 estamos todos los miércoles a las 17 hs. en Piedras 7370. Para saber más: 4194356 ó 154-869485 Apertura: 06 de abril de 2016.

Cosas a buscar

  • Biblioteca popular Osvaldo Bayer.

Libros mencionados en la clase

  • Inteligencia emocional, Daniel Golman
  • La magia del orden, Marie Kondo

Tarea

Me tuve que ir antes, así que la tarea me llegó por mensaje de texto:

Contar la historia de una hombre que de tanto mirarse el ombligo un día el obligo se lo tragó.

Juanjo Conti: Diario de vacaciones 2016, día 10 y 11

Mucho Hard Rock pero se me tapó el inodoro :)

Ya estamos en Córdoba. No pude escribir el diario de los últimos dos días en vivo de tantas cosas que hicimos cada día, así que voy a usar los tweets que estuve posteando para ayudarme:

Desayuno

El día empezó con el mejor desayuno de todas las vacaciones siendo lo más destacable un vasito que tenía algo rosa, esponjoso y con cereales.

En un momento me voy al baño y cuando vuelvo Ceci me dice que el que está sentado al lado nuestro es famoso, vino alguien con una camiseta de Argentina para que le filme. Después de averiguar nos enteramos de que es Mario Alerto Kempes.

City Tour

Después del deayuno contratamos un taxi para dar unas vueltas por la ciudad.

Nos ofrecieron un city tour, pero como dije no somos muy amigos de los guías.

Pasamos por algunos barrios medio fuleros y ahí recién me di cuenta de que a pesar de los rascacielos, en Panamá hay mucha desigualdad. El chorrillo y Caledonia.

Luego paramos en algo llamado Mercado de artsanías a comprar algunos recuerdos.

De ahí fuimos a la Calzada de Amador donde estuvimos un largo rato sacándonos fotos con las gabiotas en el puerto. La foto no es muy representativa pero muesrta algo divertido. En Panamá no es obligatoria la patente en la parte de adelante así que la gente suele poner ahí cualquier cosa:

El siguiente lugar fue la zona colonial o casco antiguo, pero entramos por la parte de atrás. Una barriada con edificios bajos destruídos y ropa colgada de las ventanas que en nada se diferenciaba de la part vieja y pobre de La Habana. Algo bastante feo. Cuando pueda subo algunas fotos.

Típico nuestro, nos metimos en todas las iglesias que encontramos. Pasamos por la de San José, la de San Francisco de Asís (que tenía aire acondicionado muy fuerte y velas eléctricas) y la catedral (que estaba cerrada).

Canal de Panamá

Teníamos el dato de que entre la 1:30 y las 2:00 iba a pasar un barco por el canal, así que fuimos para el complejo Miraflores. La entrada es de 15 dólares y da acceso a ver las esclusas, un video y dos museos.

Lo mejor es ver los barcos entrar e ir bajando por gravedad hasta el nivel del mar. Lo siguiente son los museos (donde se puede aprender sobre su historia y te podés meter en un simulador de barco que atraviesa el canal). El video es en 3D e innecesario. Es innecesario que sea en 3D y es incesario perder 10 minutos verlo.

Otros tweets pocos reprsentativos:

Supermercado

Cansados de que nos timen, fuimos a un super a comprar comida.

Enorme nuestra felicidad al encontrar precios descentes. Por ejemplo, la botellita de medio litro de Gatorate nos venía saliendo 3 o 4 dólares. En el super estaba a 1 dólar, menos que en Argentina.

Nos sorprendió la gran variedad de jugos (por ejemplo, había varias marcas de jugo de aloe vera) pero la falta de variedad de embutidos (no tenían nuestras típicas bolsitas de fiambre en fetas).

Shoppings

Nuestro hotel estaba conectado al shopping Multicentro (medio chico y muy caluroso). El primer día fuimos a su patio de comidas en el tercer piso y comimos en un lugar llamado "Tango" que supuestamente era "argentino". No.

Luego de visitar el canal fuimos a uno llamado Multiplaza, a 15 cuadras del hotel. Era grande, pero no tanto como el tercero, al que fuimos al día siguiente: Albrook Mall.

Hard Rock

Cierro con algnos tweets con detalles del hotel:

Facundo Batista: 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á.

Marcos Dione: ruby-cheatsheet-for-pythonistas

In a shallow but long yak shaving streak, I ended up learning Ruby (again). Coming from a deep Python background (but also Perl and others), I sat to write down a cheatsheet so I can come back to it time and again:

module Foo  # this is the root of this namespace
# everything defined here must be referenced as Foo::thing, as in
Foo::CamelCase::real_method()

:symbol  # symbols are the simplest objects, wich only have a name and a unique value
:'symbol with spaces!'

"#{interpolated_expression}"  # how to iterpolate expressions in strings

/regular_expression/  # very Perl-ish

generator { |item| block }  # this is related to yield

%q{quote words}  # à la perl!
%w{words}  # same?

def classless_method_aka_function(default=:value)  # Ruby calls these methods too
    block  # ruby custom indents by 2!
end

method_call :without :parens

class CamelCase < SuperClass  # simple inheritance
    include Bar  # this is a mixin;
    # Bar is a module and the class 'inherits' all its 'methods'

    public :real_method, :assign_method=
    protected :mutator_method!
    private :query_method?

    self  # here is the class!
    def real_method(*args)  # splat argument, can be anywhere
        # no **kwargs?
        super  # this calls SuperClass::real_method(*args)
        # comapre with
        super()  # this calls SuperClass::real_method()!

        local_variable
        @instance_variable  # always private
        @@class_variable  # always private
        $global_variable

        return self
        # alternatively
        self
        # as the implicit return value is the last statement executed
        # and all statements produce a value
    end

    def assign_method=()
        # conventionally for this kind of syntactic sugar:
        # When the interpreter sees the message "name" followed by " =",
        # it automatically ignores the space before the equal sign
        # and reads the single message "name=" -
        # a call to the method whose name is name=
    end

    class << self
        # this is in metaclass context!
    end

    protected
    def mutator_method!(a, *more, b)
        # conventionally this modifies the instance
    end

    private
    def query_method?()
        # conventionally returns true/false
    end
end

# extending classes
class CamelCase  # do I need to respecify the inheritance here?
    def more_methods ()
    end
end

obj.send(:method_name_as_symbol, args, ...)

begin
    raise 'exceptions can be strings'
rescue OneType => e  # bind the exception to e
    # rescued
rescue AnotherType
    # also
ensure
    # finally
else
    # fallback
end

=begin
Long
comment
blocks!
=end

statement; statement

long \
line

# everything is true except
false
# and
nil

variable ||= default_value

`shell`

AConstant  # technically class names are constants
# so do module names
A_CONSTANT  # conventionally; always public
# The Ruby interpreter does not actually enforce the constancy of constants,
# but it does issue a warning if a program changes the value of a constant

# case is an expression
foo = case
    when true then 100
    when false then 200
    else 300
end

do |args; another_local_variable|
    # args are local variables of this block
    # whose scope ends with the block
    # and which can eclipse another variable of the same name
    # in the containing scope

    # another_local_variable is declared local but does not
    # consume parameters
end

{ |args| ... }  # another block, conventionally single lined

# Matz says that any method can be called with a block as an implicit argument.
# Inside the method, you can call the block using the yield keyword with a value.

# Matz is Joe Ruby

# yield is not what python does
# see http://rubylearning.com/satishtalim/ruby_blocks.html
# block_given?

a= []  # array
a[0] == nil

ENV  # hash holding envvars
ARGV  # array with CL arguments

(1..10)  # range
(0...10)  # python like
5 === (1..10)  # true, 'case equality operator'

{ :symbol => 'value' } == { symbol: 'value' }  # hashes, not blocks :)

lambda { ... }  # convert a block into a Proc object

# you cannot pass methods into other methods (but you can pass Procs into methods),
# and methods cannot return other methods (but they can return Procs).

load 'foo.rb'  # #include like
require 'foo'  # import, uses $:
require_relative 'bar'  # import from local dir

It's not complete; in particular, I didn't want to go into depth on what yield does (hint: not what does in Python). I hope it's useful to others. I strongly recommend to read this tutorial.

Also, brace yourselves; my impression is that Ruby is not as well documented as we're used in Python.


python

Juanjo Conti: Diario de vacaciones 2016, día 9

Anoche pusimos el despertador a las 7.30 pero me desperté cinco minutos antes. El trasnporte al aeropuerto pasaba a las 9 hs. Fue puntual y después de pasar a buscar a dos grupos más de personas llegamos al aeropuerto de Punta Cana, famoso por sus tchos de paja y ventiladores de techo tamaño industrial :)

El control de seguridad estaba bastant estricto: creo que es la primera vez que me hacen sacarme las zapatillas antes de pasar por el detector de metales.

Como en el aeropuerto había wifi gratis, me senté a trabajar un rato mientras esperábamos. Publiqué el post de ayer, escuché una entrevista a Humitos que tenía pendiente y empecé a escribir este :p

El vuelo fue tranquilo y como nota de color viajamos con la banda de Belinda.

Panamá

Apenas salimos a la calle el calor me pegó una piña. Hacía unos 34° y mucha humedad. Viajamos unos diez minutos hasta al centro y luego de ver algunas zonas en construcción y la costa con el Pacífico nos topamos con los rascacielos.

Mucha opulencia, mucho shopping (malls), mucho hotel, muchos autos yankees, mucho hotdog. Es como si la ciudad dijera "colonia americana y con orgullo!".

"Hagan de cuenta que están en Miami", dijo el choffer.

En el transfer venía también una pareja de Usuahia cuyo destino anterior había sido La Habana... De un extremo al otro!

Hard Rock

Impresionate.

Sarpado.

Este hotel es distinto a cualquier en el que haya estado. Es una mezcla de bar/pu con museo del rock. Hay vitrinas con guitarras de Elvis y Kiss, vestidos de Shakira y trajes de Mickel Jackson. La habitación tiene muchos detalles de diseño y cuenta con equipo de audio y video geniales. Dejamos video clips de música sonando en el tele.

vista-habitacion.thumbnail.jpeg

Vista de la habitación en el piso 31

El hotel está conectado a uno de los malls, Multicentro, así que fuimos a conocerlo: ropa deportiva a buen precio, pero iPhones no.

Como estaba muy cansado me fui a acostar. Ceci se dedicó a mapear el hotel (es enorme, 62 pisos, pileta, bares, boliche) y encontrar comida no tan cara (por ejemplo, un agua mineral Fiji de medio litro le salió 7 dólares. Lo pagamos por que tenemos 20 dólares "gratis" para gastar por noche en cualquier bar del hotel).

vista-piso-62.thumbnail.jpeg

Vista desde el piso 62

--

Mañana vamos a recorrer la ciudad, pero por nuestra cuenta: Ceci odia a los guías.