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.

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

Hoy Ceci se levantó tarde así que yo desayuné dos veces. La primera wafles con caramelo y leche con chocolat y después piña y té de limón.

BBQ Party

Cuando salimos de la habitación camino al mar, pasamos por la pileta y escuchamos que empezaba la clase de aquaerobic. Me distraje mirando lo blanco de la piel de un cerdito norteamericano que estaba marmolado rosa en los lugares que no se había puesto protector y cuando volví a buscar a mi mujer ya había saltado al agua y agitaba en el aire un flota flota imitando al instructor.

Luego de la clase, todos los participantes salieron del agua bailando la conga camino a la playa donde se había montado un escenario para un show musical y varias parrillas.

El show no prometía mucho y la bbq es lo más distante de un asado, así que nos fuimos al mar.

Libros

Sigo de vez en cuando con El cometa Halley de Isaac Asimov pero es muuuuy aburrido. No parece escrito por él.

Tamién me bajé en epub Hojas de Hierva y El viejo y el mar.

Baile

A la noche después de comer se puede bailar en el patio jnto al bar bachata, merengue... y a veces, solo a veces cuarteto (que es con lo único que me defiendo). Hoy había música en vivo y tocaron dos temas seguidos. La rompimos.

La última taza

Esta noche le dejé una propina al cantinero del Sport Bar. Le debo haber pedido cincuenta tazas.

Vuelo

Mañana nos buscan a las 9 de la mañana. Volamos en el CM109 de las 12:27 rumbo a Panama. Ya hice el web checkin y tenemos buenos asientos (fila 6).

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

Hoy el mar también tenía bandera amarilla y el celular, además de decirnos que el lugar preciso en el que estábamos es Los Ranchitos, también nos dijo que se esperaba una llovizna para las cuatro. Peeero, tomamos un desayuno livinao y nos fuimos a la playa.

Para mí, liviano fue: un té de limón, dos wafles, piña y un pote de cereales.

Playa Bávaro

Caminamos a Playa Bávaro, que habiamos leído era la mejor de la zona. Protector solar y al agua. Estuvimos varias horas en el agua. Yo nadaba un poco mar adentro, flotaba, volvía. Después caminábamos un poco más y de nuevo al agua.

En un momento aparecieron las presagiadas nubes negras, pero el viento se las llevó rápido y no fueron más que unos minutos de llovizna. Nadar en el mar con llovizna está bueno :)

Misa pascual

La misa fue en una especie de salón de convenciones en el hotel de al lado. El tema es que nos habían dicho que estaba a tres minutos caminando cuando en realidad fueron quince. Por lo tanto, como para sentirnos en casa, llegamos tarde.

La misa fue bilingue aunque los sacerdotes no hablaban inglés. Le dieron una biblia en inglés a una de las yankees y ella leía algunas de las partes.

Fue raro porque no había altar, ni cruz. También fue raro que en la parte de la comunión no hicieron una fila, sino que el sacerdote pasó banco por banco entregando hostias... incluso a quienes no pensaban comulgar. Vimos a una chica que se fue con el cuerpo de Cristo en las manos sin saber que hacer :/

En el momento de la colecta iba a poner unos dólares, pero vi al sacerdote pasar con una bolsa de Walt-Mart. El resto de las personas (que habían llegado a tiempo) tenían un sobre de papel madera en el que habían puesto su ofrenda. Como yo no tenía, no puse. Por suerte, al final dijeron que la primer colecta era para los necesitados y que ahora harían una segunda para la Iglesia. Tamién pidieron si alguien sabía inglés, que lo repita traducido para que entiendan todos :/ Ahí pude poner.

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

Anoche se largó un "aguacero" mientras estábamos en el lobby. "Traé el paraguas, que va a llover", me había dicho la Ceci. "Pero noooo, si llueve yo después te los busco", fue mi respuesta. Así que así estaban las cosas, estaba yo viendo como llovía y Ceci se quiso volver a la habitación por lo que tuve que ir a buscar el paraguas bajo el agua.

La calle caribeña

Entre los hoteles hay algo llamado "la calle caribeña", una especia de callejón Diagon (seguro lo estoy escribiendo mal) de Harry Potter en la que se pueden conseguir elementos mágicos, como Gatorade.

También hay una farmacia, que es donde me habían dejado las fotos (?)

Masajes

Hoy en la playa se me ocurrió preguntar cuánto salía tomar un masaje. Los 25 minutos salen 40 dólares y los 55 minutos 60. Me pareció caro. En Argentina una sesión de masaje de una hora sale unos 130 pesos.

Teléfono

El teléfono de la habitación estaba con muchísimo ruido a fritura. Tanto que no se podía hablar. Hicimos el reclamo una par de veces y a la tercera llegó un técnico vestido de heladero que cambió el aparato. Cuando terminó, no solo no lo había arreglado sino que directamente no teníamos tono.

Ceci le preguntó por qué estaba tan apurdo. "Es que ya voy de salida". Le preguntó qué horario hacía. "De 9 a 6, con dos horas para descansar". Eran las 17:30 y le quedaban 4 reclamos con lo cual su apuro era entendible.

Pileta

Hoy rompimos una de nuestras reglas: no ir a la pileta si hay mar. En el mar había bandera amarilla y un viento que te tumbaba.

Hoy conseguí llegar a la habitación con un té sin que se me vuelque. El problema fue que me lo dieron preparado y recién cuando estaba llegando vi volar en el aire la etiquetita que decía "Lemon Tea". Ceci toma té negro. Cuando le pedí dije: "¿me das un té negro?". Temo que me hayan entendido "¿Me das un té, negro?" :)

Misa

Parece que mañana hay misa de Pascuas en una capilla en unhotel cercano. Mañana cuento que tal estuvo.

Manuel Kaufmann (Humitos): Jupyter, no me vuelvas loco

Este es un post de mierda, pero que quizás te salve una par de horas en caso de que tengas el mismo problema: "jupyter intenta utilizar un binario de python que no existe más"

En algún momento de mi vida creé 2 virtual envs, uno con la versión de 2 de Python y otro con la 3 en los que instalé Jupyter. Luego de unos cuantos meses, borré esos dos virtual envs y volví a crear uno solo para python 3 en el que instalé Jupyer con pip.

mkvirtualenv -p python3 jupyter
pip install jupyter

Sin embargo, cuando ejecutaba jupyter notebook me daba un problema de que no encontraba el binario:

File "/home/humitos/.virtualenvs/j/lib/python3.4/site-packages/jupyter_client/manager.py", line 189, in _launch_kernel
  return launch_kernel(kernel_cmd, **kw)
File "/home/humitos/.virtualenvs/j/lib/python3.4/site-packages/jupyter_client/launcher.py", line 123, in launch_kernel
  proc = Popen(cmd, **kwargs)
File "/usr/lib/python3.4/subprocess.py", line 859, in __init__
  restore_signals, start_new_session)
File "/usr/lib/python3.4/subprocess.py", line 1457, in _execute_child
  raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/home/humitos/.virtualenvs/jupyter-py3/bin/python3'

Por algún motivo está buscando el binario de python3 en un entorno virtual llamado jupyter-py3 (creado hace varios meses y borrado hace unos momentos).

Luego de una tediosa búsqueda encontré un archivo (/home/humitos/.local/share/jupyter/kernels/python3/kernel.json) en una parte del caché de mi sistema con este contenido:

{
    "language": "python",
    "argv": [
    "/home/humitos/.virtualenvs/jupyter-py3/bin/python3",
    "-m",
    "ipykernel",
    "-f",
    "{connection_file}"
    ],
    "display_name": "Python 3"
}

¿Qué hice? Lo borré. Problema solucionado.