Facundo Batista: Intenso fin de año (como siempre)


¿Cómo? ¿Qué el año no está terminando todavía? Bueno... el año termina durante octubre y noviembre, diciembre siempre está perdido (?).

Las últimas semanas fueron intensas, lo cual se traduce en tener mil cosas atrasadas, incluyendo este blog.

Pasaron varias cosas que ameritan un par de lineas.

A principios de octubre fue el cumple de Felu, y siendo el primero con él en la primaria, cambió un poco la dinámica de siempre. Hicimos un salón compartido con otro compañero suyo que cumplía esos días, y obviamente fueron todos los compañeros de grado (y algunos de otros grados!). Luego, hicimos un asado en casa para toda la familia y amigos con niños más grandes.

Siete

A mitad de octubre tuve un viaje de laburo, pero este fue más largo que la típica semana de siempre. Fue de una semana y media, no es tanto, pero se nota al extrañar a la familia. Por suerte los chicos ya están más grandes y se bancan mejor mi ausencia, pero igual sufren un poquito :/. La vez anterior que tuve un viaje de más de una semana fue hace mucho, mucho tiempo. Fue en Holanda, que yo ya conocía... pero fue en La Haya, a donde nunca había ido :). Fotos.

Típica callecita de La Haya

Casita en un canal de Amsterdam

Otro tema que me tuvo bastante ocupado hace unas semanas, pero que voy a dedicar otro post, es que armé "una nube en casa". O sea, compré un hardware, le instalé Magicicada, y tengo mi propio server de sincronización de archivos :)

Noviembre viene movidito, también. En un par de semanas está la PyCon Argentina, esta vez en Bahía Blanca. Ya reportaré sobre eso.

Tengo que terminar de armar el reemplazo de mi muy usufructuado WDTV. Me compré una Raspi 3 y le voy a poner Kodi.

También estos días le regalé a mi viejo el regalo de los 70 (que cumplió hace un par de años ya), un vuelo "de bautismo" en una avioneta, que era algo que él siempre quiso hacer. Lo disfrutó un montón, y yo también. Felipe, el tercer pasajero, disfrutó bastante el despegue, el paseo inicial, y el aterrizaje... en el medio se clavó una siesta, el atorrante.

Antes de salir a volar

En fin, pequeñas cosas, grandes cosas, muchas. El día tendría que tener 36 horas (e igual no alcanzaría :/ ).

Mariano Guerra: Papers of the LargeSpanOfTime I

Welp, some day the experiment had to end, I stopped reading 5 papers a week because some books arrived and I read those instead and also because I was busy at work.

But that doesn't mean I didn't read papers at all, so here's a list of the ones I did read.

Note

Since some of them I read them a while ago the reviews may not be really detailed

Cuneiform: A Functional Language for Large Scale Scientific Data Analysis

Seems useful in practice, was expecting something else from the title.

The Stratosphere platform for big data analytics

I remember reading a paper from what later became Apache Flink that I liked a lot, I was looking for that one and I found this one instead (stratosphere became flink), it was an interesting overview, would like to know how much of that is still in flink.

Orleans: Distributed Virtual Actors for Programmability and Scalability

Really good paper, I like how it's written and the idea and implementation.

HyParView: a membership protocol for reliable gossip-based broadcast

Epidemic Broadcast Trees

This too reviewed together because they are like bread and butter, I love both of them, highly recommended.

Large-Scale Peer-to-Peer Autonomic Monitoring

I won't lie to you, I don't remember much about this one, but given the authors it must be good :)

Stream Processing with a Spreadsheet

Object Spreadsheets: A New Computational Model for End-User Development of Data-Centric Web Applications

I was looking for ideas and inspiration when I read these two, I liked both, Object Spreadsheets being the most interesting aproach.

A Layered Grammar of Graphics

Great paper, on my top list, maybe because I love the topic :)

Virtual Time and Global States of Distributed Systems

A must read if interested in vector clocks, the non math parts are good, I don't enjoy reading theormes a lot (not their fault).

Papers this looong week: 10

Papers so far: 43

Papers in queue: don't want to count anymore

Gabriel Patiño: Proceso de lijado

Quería compartir algo que creo que me sale bastante bien y puede ayudar a algún principiante.

El proceso de lijado lo divido mentalmente en tres etapas:

Formateado (60-80-100-120): Empiezo con algo agresivo para dar rápido la forma que quiero, borrar marcas de herramientas, etc. Todo el trabajo lo hago con grano 60, y voy borrando las marcas con las otras lijas.

Terminado (150-180-220-320): Acá ya estas dejando una superficie apta para pintar con cetol, laca o aceite. Generalmente dejo de lijar en 180 o 220, ahí ya queda más que lindo. Si le pongo cetol lijo con 320 entre manos.

Pulido (400-600-1000-1500-2000): Hace poco empecé un taller de lutheria y descubrí lo que es lijar super fino, o lo que para mí es un pulido. En 600 ya queda espectacular para laquear. A partir de 1000 es como que la madera cambia de golpe y empieza a tener brillo propio. En 2000 es ideal para pasar aceite y listo. La textura de la madera lijada a 2000 es un placer.

Puede parecer mucho trabajo, pero no es tanto. Casi todo el laburo se hace con 60, el resto es unas pasaditas con cada lija. Agrego unas fotos de un puente que estuve lijando recién. Entre 180 y 2000 tarde unos 20 minutos. Antes de cada foto no agregué ningún producto, solo limpie la pieza con un trapo seco.

Espero les sirva y acepto todo tipo de comentarios.










Manuel Kaufmann (Humitos): No cumplas tu sueño, es una trampa

Para la charla Keynote que di en PyCon España me preparé con Nando, un profesor de historia del arte/teatro en la UDA (Universidad de Azuay), músico, actor, Ingeniero en Sistemas, director de teatro y por sobre todo, muy buena persona.

Llegué a él gracias a Belén Abad, una chica que conocimos en las Meetups de Python que organizamos aquí en Cuenca, Ecuador cuando vi una charla que dio en TEDx Cuenca que me gustó mucho. Debido a eso, le pregunté con quién se había preparado y me pasó el contacto de Nando.

El primero de los días de nuestras juntadas tomó lugar en la misma cantina de la UDA, donde luego de presentarnos y hablar un poco de nosotros, nos pusimos a trabajar juntos en el motivo que nos unía: la Keynote de PyCon España.

¿Porqué busqué una persona que me ayude a preparar mi charla? La respuesta corta es porque tenía mucho miedo.

La verdad es que no tenía muy claro porqué me habían ofrecido a mí dar una plenaria en una conferencia fuera de mi país, donde nadie me conoce. ¿Qué podría ofrecerle yo a esa gente? En España, que el movimiento de Python es muy grande. En el primer mundo, donde el acceso a la tecnología y la educación es muy fuerte. Yo. Miraba para atrás, y lo único que veía eran "un par de eventos que habíamos organizado por ahí" y que, realmente, cualquiera lo hubiese podido haber hecho.

Además, tenía la experiencia de haber participado como disertante en PyCaribbean unos meses antes. Mi primera participación como disertante en una conferencia fuera de mi país y habiendo sido invitado justamente para compartir la experiencia de Argentina en Python. Sin embargo, habiendo preparado con mucha fuerza esa charla, no me fue tan bien. Incluso, antes de emprender viaje desde Perú a República Dominicana, Johanna ya me había dicho que la charla estaba "Ni". No le había llegado a transmitir mucho (casi nada) y que me había olvidado de decir muchas cosas importantes las veces que la practiqué.

¡Eso! Puntualmente el problema de olvidarme cosas importantes era lo que más quería trabajar con Nando, y que me ayude a poder manejarlo para esta nueva charla que yo consideraba muy importante y que no quería defraudar a la gente de allá. Con Johanna decíamos, "Si vamos a España es para romperla y dejar a la gente con la boca abierta. Sino, nada de esto tiene sentido".

Luego de la primera reunión, casi llegando al final y habiendo hablado mucho de "la vida" y bastante del proyecto, Nando me dijo algo así como: "Tu historia es maravillosa. Lo tiene todo. Y además, no tenés los miedos típicos de hablar en público. No entiendo qué necesitás de mí." Expliqué mis razones, mis miedos y mis experiencias: "No quiero que me vuelva a pasar eso".

Luego de la primera reunión yo hice un viaje a México por 3 semanas. En ese tiempo tenía que resolver una pequeña tarea: "escribir una frase que quiero que la gente se lleve grabada en la frente al salir de mi charla".

Luego de mi viaje, nos juntamos una vez por semana aproximadamente durante un mes y medio. Tuvimos al rededor de 5 o 6 encuentros, no recuerdo bien. En esas juntadas hablé con él desde el día -30 del proyecto (antes que inicie y más allá) hasta el día de hoy que estaba sentado ahí con él. Fue una experiencia muy enriquecedora y me hizo ver un poco quién era, qué había hecho y le dio mucho sentido al encuentro con él y estar sentado ahí hablando de esto. Fue un repaso completísimo de todos los éxitos y fracasos durante los últimos 3 años, pero con lujo de detalles. Nando quería saberlo todo, y eso fue muy nutritivo para mí.

Uno de los días que nos juntamos, ya casi llegando al final de nuestros encuentros, llegué preocupado, angustiado, triste... no sabía muy bien lo que me pasaba, pero había algo en mí que no estaba bien. Hablamos un poco de eso y...

Cumpliste tu sueño. Lo superaste. Llegaste más lejos de lo que alguna vez habías imaginado y ahora estás un poco perdido. Necesitás un nuevo desafío.

—Nando

Luego de escuchar eso, me quedé helado. Tenía razón. Cuando entré a Python Argentina soñé dar una charla en un PyDay (de la misma forma que conocí Python) y lo cumplí. Luego estaba dando tres charlas en la primera PyCon Argentina en 2009. Soñé con llevar Python a cada rincón del país, y lo cumplí con Argentina en Python. Y no solo eso, sino que lo llevé adelante en otros países... Ni siquiera había soñado dar una charla en una PyCon de otro país, y lo cumplí en Santo Domingo.

Estaba en un momento de mucha adrenalina, pero de tristeza también. Pensaba que en pocos días iba a estar en España cumpliendo un sueño que ni siquiera había soñado pero que ya se estaba haciendo realidad.

"¿Y luego qué?" -me preguntaba a mí mismo.

Viajé a España, conocí gente maravillosa, di mi charla en PyCon España y me encantó ese momento. Aún me cuesta creer que todo salió demasiado bien, y no sólo eso, sino que me sentí bien arriba del escenario.

Hoy estoy nuevamente en Cuenca, Ecuador pensando en todo lo que me ha pasado y me doy cuenta que Nando tenía mucha razón. Perdí el norte. Cumplí muchos sueños personales y todo ha pasado muy rápido, a tal punto que a veces siento que ni siquiera tuve tiempo de disfrutarlos.

Hoy estoy más avocado a descansar en Cuenca. A tomarme un tiempo para pensar. Enfocado en el trabajo (quiero ser un mejor profesional). Sin embargo, tengo muchas ganas de seguir trabajando en formar un comunidad aquí en Ecuador -aunque me estoy tropezando más de lo que me gustaría.

Aunque por otro lado, el no tener en mente nada increíblemente loco por cumplir en el futuro me hace sentirme estancado y no dejo de preguntarme:

¿Cuál será ese nuevo desafío que está por venir?

Manuel Kaufmann (Humitos): Creatividad: uno de los beneficios del tercer mundo

De niño quería ser "inventor", pero cuando me preguntaron "¿qué querés estudiar después de la secundaria?" contesté con una contrapregunta: "¿existe la carrera de inventor?". Luego de una respuesta muy corta, "No", mi sueño se derrumbó.

Al final de cuenta, pasaron más de 30 años y por una cosa o la otra, "no soy nada". Ah, ¡y me encanta!

Hace unos 7 u 8 meses que estamos viviendo en Cuenca, Ecuador y hemos estado teniendo algunos problemas de salud. Si bien no son nada grave, son molestos y claro, no es bueno. Luego hacer algunas pruebas y experimentos, tenemos nuestros primeros indicios de que el agua de esta ciudad no nos cae bien y finalmente llegamos a hacer el experimento que mejor ha funcionado (aunque pasaron varias cosas en el medio): empezamos a comprar bidones de 20 litros de agua.

Esta técnica ancestral ya la veníamos practicando en Bolivia y en Perú ya que ni siquiera la misma gente de las diferentes ciudades donde parábamos bebían el agua de la canilla. ¿Qué pasa aquí en Cuenca con estos bidones? ¡No traen piquito dispenser como en Bolivia y Perú! Por lo tanto, se necesita un soporte sí o sí (o bien, levantar cerca de 20kg cada vez que te querés servir un vaso).

¿El problema? ¡El precio! Incluso antes de comprar el bidón ya habíamos visto en el supermercado que el precio de estos dispenser ronda entre los USD ~15 (los que son solo un soporte con pico) y los USD ~150 (los que se dispensan agua fría y caliente). Vamos, cualquiera de los dos extremos me parecían caros. Los más baratos tiene un recipiente de porcelana (como un balde) y un pico: ¡nada más!

IMG_20161105_183845.thumbnail.jpg

Soporte con base de porcelana y pico: USD 17.50

Para nuestra suerte, luego de un tiempo encontramos otro modelo. Uno revolucionario. Uno que usa años de estudios en el campo de la física para generar presión dentro del bidón y así hacer subir el agua que se encuentra dentro y dispensarla por un pico:

IMG_20161105_195701.thumbnail.jpg

Bomba dispenser para bidón: USD 3.47

El precio lo dice todo: tenés que matarte bombeando para obtener medio vaso de agua. Y lo peor, a medida que el bidón está cada vez más vacío, más tenés que bombear porque necesita más presión.

La verdad es que con este de 3 dólares y pico, me clavé. Cuando me lo compré estaba re entusiasmado porque me parecía una buena idea, simple y que ajustable a la mayoría de picos que andan dando vueltas en el mercado. Una pena que me haya defraudado.

Por otro lado, una de las cosas que me gusta de Ecuador es que se encuentran repuestos para casi cualquier cosa. ¿Te acordás como era la Argentina hace mucho tiempo que vos le pedías el "cuchufluco del goyete que va en el goyetómetro" al tipo de la ferretería y lo tenía? ¡Así! Bueno, en el supermercado vimos que venden por separado los picos de esos soporte de porcelana de USD 17 (que por cierto, son los mismos repuestos para las licuadoras con dispenser) y... ¿sabés cuánto sale?: USD 0.53

A ver, tenemos la pieza más complicada de conseguir (para mí): el pico dispenser. Ahora, ¿qué nos falta?. "¿Y si probamos comprar esto y ponemos el bidón dentro del balde?" -le pregunto a Johanna, que me mira con una cara de "sos un mugriento". Lo cazo al vuelo, y le digo: "Bueh, pero compramos uno nuevo <guiño> <guiño>".

Damos unas vueltas más en el supermercado y vamos a la sección de plásticos y voilá. Vemos un hermoso recipiente similar a un cilindro a unos hermosos USD 2.51. Unos resistentes 30cm de altura, en forma de cónica, naranja, delicioso... Un tacho de basura de oficina: un papelero.

"Estos son los mejores momentos de la vida para mí" -le digo a Johanna. "Prefiero comprar ambas piezas, probarlo y equivocarme; pero al menos lo intenté. ¡Vamos a comprarlo y lo hacemos!"

Volvimos al sector de los dispensers de porcelana, analizamos la situación, miramos atentamente cómo era la estructura y cómo funcionaban. Tiramos unas ideas sobre si "nuestro invento" iba a funcionar, hablamos de la presión, de los límites de la gravedad, del fú y el fá -la gente nos miraba raro- y dijimos: "sí, no hay forma de que falle".

IMG_20161105_191514.thumbnail.jpg

Basurero y pico dispenser: USD 2.51 + USD 0.53

Exitados por el hecho, volvemos a casa y nos ponemos manos a la obra.

Y con ustedes, señoritas y señoritos, el primer dispenser que lleva nuestro nombre:

IMG_20161105_195823.thumbnail.jpg

El resultado final, funcionado en perfectas condiciones.

Estamos pensando en montar un negocio, si existe "El Rey de la Goma", ¿porqué no "Dispenser el Rey del Humo"? ...

Manuel Kaufmann (Humitos): ¡No más Ads en Spotify!

En Febrero probé Spotify en mi máquina por primera vez. No entré en Premium ni nada, simplemente me creé un usuario como buen hijo de vecino y empecé a ver qué era eso de lo que la gente tanto hablaba. Busqué mis discos favoritos y empecé a utilizarlo de la misma forma que lo hacía con mi música offline.

Un mes después: nada del otro mundo. Simplemente abría el cliente de Linux, seleccionaba algún disco de los que tenía guardado y lo reproducía de forma completa. Sin embargo, tenía una desventaja con respecto a la música offline que yo tenía en mi computadora: ¡las publicidades!. Cada 3 o 4 canciones del disco que estaba escuchando, me aparecía una publicidad que nada que ver con lo que a mi me puede gustar. Probapagandas de telefonías, recitales de reggaetón y demás cosas que teniendo mis gustos musicales en su base de datos, no tenían ningún sentido hacerme escuchar eso a mí.

Durante unos días pensé que podría pagar para quitar esos anuncios. Investigué un poco y vi que pagando, además de quitar los anuncios te dejaban tener música offline y también más opciones para la aplicación del celular. Ninguna de las cosas extras me llamaron la atención.

A la semana siguiente, me cansé de escuchar esa basura y sin pensarlo me fui a comprar el servicio Premium. Intenté usar PayPal y tuve un problema. Itenté de nuevo unas horas más tarde y lo mismo. Pensé un rato... pero nada vino a mi mente.

Pasaron algunos días, y cada vez que salía una publicidad pensaba en algo. Me tomaba esos 30 segundos de cada publicidad para encontrar una solución...

El 5 de Abril tuve una idea: quería realmente quitar los anuncios, pero ahora sin pagar ya que por ese camino no había tenido suerte y no iba a parar hasta lograrlo. Estaba decidido.

Hice un brainstorming solo y llegué a audiodiff, una librería en Python para comparar archivos de audio. La idea parecía ser simple al principio: escuchar lo que viene de Spotify y cada vez que se detecte un silencio (el que hay entre tema y tema -o tema y anuncio) comparar a máxima velocidad lo que empieza a reproducirse con todos los anuncios que previamente había guardado en disco. Ese día le escribí un tuit a fisa porque pensé que le podría interesar.

Mucho tiempo después, a fines de Agosto, hice mis primeras pruebas con esta librería. Si bien es extremadamente fácil de usar, es increíblemente lenta. Además, solo trabaja sobre archivos y no encontré la forma de pasarle un streaming directamente. Entonces, pensé que podría crear un buffer de unos 45 segundos e ir trabajando sobre eso, cortar los audios, analizarlos, ver qué tienen y decidir si reproducirlo o no dependiendo de si es una publicidad. Tiré un par de horas ahí y no llegué a nada útil.

Daba vueltas y pensaba opciones. Pensé en ver si yo podría ser capaz de escribir algo más rápido que audiodiff utilizando numpy quizás, y de paso era una buena excusa para aprenderlo...

En esos días me dí cuenta que cada vez que el cliente de Spotify de Linux cambiaba de tema, utilizaba el nombre de esa canción/artista como título de la ventana del programa, y que además también lo hacía para los anuncios. ¡Voilá!, acá está la papa -me dije.

Voy a comprobar el título de la ventana cada segundo, analizarlo y compararlo contra los artistas que escucho normalmente y si no está dentro mi lista: ¡silencio!

La idea era excelentemente simple. Simple de verdad, no como la primera. Me puse manos a la obra, y en menos de 30 minutos tenía el primer prototipo y funcionaba para la mayoría de los casos. Durante las primeras horas de prueba encontré algunos patrones en los nombres de las publicidades y también de las canciones que escuchaba.

  • muchas publicidades están TODAS EN MAYÚSCULAS
  • otras tantas tienen una sola palabra
  • la mayoría de las canciones se muestran como "Artista - Canción"

Implementé estas pequeñas reglas y retoqué un poco lo que había hecho anteriormente y llegué a una versión muy estable y que funciona en el 95% de los casos. ¿Porqué en un 95%? Esto es debido a que hay discos en vivo o de múltiples artistas donde la última regla de las anteriores no se cumple. Por ejemplo, "Soda Stereo - Persiana Americana - Gira Me Verás Volver".

A raíz de esto creé:

  • una lista blanca con los artistas que siempre quiero escuchar
  • una lista negra con algunos nombres de publicidades que no cumplen las reglas básicas

El resultado de esto es este pequeño programa escrito en Python (spotify-noads.py) que no hace ni más ni menos que eso que mencioné antes: si detecta una publicidad, pone mute en tu sistema de audio, cuando termina la publicidad y empieza una canción, lo quita.

Luego de las primeras horas de probarlo, lo quise dar a conocer y escuchar algunas opiniones. Para eso, publiqué este tuit y recibí diferentes opiniones. Algunos a favor, otros en contra, otros que primero estaban a favor y luego se dieron cuenta que "le estamos cagando el modelo de negocio a Spotify" y demás.

Personalmente, tengo opiniones encontradas. No estoy cien por ciento seguro de estar de un lado o del otro. Algunos pensamientos:

  • hemos descargado música utilizando torrent y p2p anteriormente
  • hemos rippeado cd's de nuestros amigos
  • si las publicidades tuvieran algo que ver conmigo...
  • utilizamos bloqueadores de ads en las webs
  • escuchar heavy metal y que salte un reggaeton, nah
  • pagar por múltiples características cuando necesitás/querés solo una
  • frente a un TV ponemos mute cuando viene la publicidad
  • la publicidad para Spotify se sigue mostrando/escuchando
  • de esta forma Spotify me sigue poniendo publicidades visuales en mi cliente [1]

Además de dar a conocer este pequeño script, me gustaría que utilicen los comentarios de este post para mostrar su postura (en contra o a favor) sobre esta metodología y expliquen sus razones.

[1] el helado en palito que venden acá en Ecuador es buenísimo ;)

Manuel Kaufmann (Humitos): ¡pysenteishon está que arde!

¡Hoy se liberó una nueva versión de pysenteishon que agrega dos características muy buenas!

  1. Opción para indicar que no queremos que el celular apague la pantalla mientras estamos dando la conferencia. De esta forma, la pantalla quedará siempre encendida y el teléfono no se bloqueará.
  2. Posibilidad de mostrar un pequeño Touchpad en el navegador que nos permite mover el mouse en la computadora y poder hacer click.

Nota

La opción de Touchpad no ha sido probada en MacOSX debido a que no tenemos esa posibilidad. Por favor, si tienes un Mac y quieres ayudarnos a investigar cómo se hace esto, estaremos encantados! :D

La nueva versión es la 1.1.0 y, como siempre, lo podés ejecutar con fades en una línea:

fades -d pysenteishon -x pysenteishon

¿Todavía no sabés qué vas a utilizar para pasar tus slides en la próxima PyCon?

Mariano Guerra: Improving Official Erlang Documentation

Many times I've heard people complaining about different aspects of the Official Erlang documentation, one thing that I find interesting is the fact that the Erlang documentation is really complete and detailed, so I decided to dedicate some time to other parts, to get familiar with it I decided to start with an "easy" one, it's presentation.

So I downloaded erlang/otp:

git clone https://github.com/erlang/otp.git

And did a build:

# to avoid having dates formated in your local format
export LC_ALL="en_US.utf-8"
cd otp
./otp_build setup
make docs

Then I installed the result in another folder to see the result:

mkdir ../erl-docs
make release_docs RELEASE_ROOT=../erl-docs

And served them to be able to navidate them:

cd ../erl-docs
python3 -m http.server

If you want to give it a try you need to install the following deps on debian based systems:

sudo apt install build-essential fop xsltproc autoconf libncurses5-dev

With the docs available I started looking around, the main files to modify are:

lib/erl_docgen/priv/css/otp_doc.css
The stylesheet for the docs
lib/erl_docgen/priv/xsl/db_html.xsl
An XSLT file to transform xml docs into html

The problem I found at first was that to see the results of my changes to db_html.xsl I had to do a clean and build from scratch, which involved recompiling erlang itself, taking a lot of time.

Later I found a way to only build the docs again by forcing a rebuild:

make -B docs

But this still involves building the pdf files which is the part that takes the most time, I haven't found a target that will only build the html files, if you know how or want to try to add it in the make file it would be great.

With this knowledge I started improving the docs, I will cover the main things I changed.

You can see all my chages in the improve-docs-style branch.

Small styling changes

  • Don't use full black and white
  • Set font to sans-serif
  • Use mono as code font
  • Improve link colors
  • Improve title and description markup on landing page
  • Update menu icons (the folder and document icons)
  • Improve panel and horizontal separator styles
  • Align left panel's links to the left

Improve code box color, border and spacing

../galleries/misc/otp-old-2.png

Old Code Examples

../galleries/misc/otp-new-2.png

New Code Examples

Improve warning and info boxes' color, border and spacing

../galleries/misc/otp-old-3.png

Old Warning Dialog

../galleries/misc/otp-new-3.png

New Warning Dialog

../galleries/misc/otp-old-4.png

Old Info Dialog

../galleries/misc/otp-new-4.png

New Info Dialog

Logo Improvements

  • Remove drop shadows from logo
  • Center Erlang logo on left panel
  • Erlang logo is a link to the docs' main page
  • Put section description after logo and before links in left panel
../galleries/misc/otp-old-1.png

Old Landing Page

../galleries/misc/otp-new-1.png

New Landing Page

Semantic Improvements

  • Use title tags for titles
  • Remove usage of <br/> and empty <p></p> to add vertical spacing
  • Use lists for link lists
  • Title case section titles instead of uppercase
  • Add semantic markup and classes to section titles and bodies
  • Add classes to all generated markup
    • The ones I couldn't figure out a semantic class I added a generic one to help people spot them in the xsl document by inspecting the generated files
  • Clicable titles for standard sections with anchors for better linking

Improve table styling

../galleries/misc/otp-old-5.png

Old Tables

../galleries/misc/otp-new-5.png

New Tables

Improve applications page

../galleries/misc/otp-old-7.png

Old Applications List

../galleries/misc/otp-new-7.png

New Applications List

Improve modules page

../galleries/misc/otp-old-8.png

Old Modules List

../galleries/misc/otp-new-8.png

New Modules List

Add "progressive enhanced" syntax highlighting

At the bottom of the page there's a javascript file loaded, if successful it will load the syntax highlighter module and css and then style all the code blocks in the page, if it fails to load, is blocked or no js is enabled then the code blocks will have a default styling provided by CSS.

The markup was not modified in any way to add this feature.

Make code tokens easier to differentiate from standard text

The previous style for inline code was a really light italic font, I changed it to monospace but it was hard to distinguish, so I got some inspiration from slack and surrounded the inline code words in a light box to make them stand out.

Indent Exports and Data Types' section bodies

../galleries/misc/otp-old-6.png

Old Data Types and Exports Sections

../galleries/misc/otp-new-6.png

New Data Types and Exports Sections

This is all for now, I have some other ideas for future improvements but they involve changes to the documentation so I will submit them separatedly.

If you have any feedback please let me know!

Patricio Molina: Pet Valu Celebrates Their Grand Opening at Bristol Plaza

Pet Valu Celebrates Their Grand Opening at Bristol Plaza, Saturday, October 22, 2016
Press Release – October 23, 2016

(October 23, 2016; Bristol, CT)—BLACKLINE Retail Group and Federal Realty proudly announce the opening of Pet Valu in Bristol Plaza.  The Pet Valu family of stores includes Pet Valu, Paulmac’s Pet Food and Bosley’s, Tisol, Total Pet, and Jack’s Pets. Together they are the largest retail operation in North America dedicated to providing families with food and supplies for dogs, cats, companion birds, wild birds, fish, reptiles and small animals. The grand opening was on Saturday, October 22, 2016. To celebrate their grand opening Pet Valu celebrated by giving the first 50 customers who made purchases a special goody bag full of fun animal supplies.

This is the chains 27th Connecticut location. The new store is located at 594 Farmington Ave and will be open 7 days a week.

BLACKLINE Retail Group based in Newton, MA represented the Landlord in this transaction.

About Bristol Plaza

Bristol Plaza is located in Hartford County at the intersection of Farmington Avenue, Route 6 and Hefbern Road in Bristol, CT. The property has a total of 266,000 square feet of retail space and 1,244 parking spaces. The population in a 5-mile radius is 107,000 + with an average household income of $83,000 and up.
About BLACKLINE Retail Group
Based in Newton, Massachusetts, BLACKLINE Retail Group provides first class shopping center leasing and brokerage services to Landlords from Connecticut to Maine.  BLACKLINE leases over 3 Million Square Feet of premium retail in Lifestyle Centers, Power Centers & Neighborhood Centers and have completed hundreds of retail transactions with Anchor Stores, Restaurants, Junior Anchors, Fashion Tenants and Service Users of all types.

BLACKLINE’S expertise includes property marketing, strong local prospecting, lease negotiating, site planning and tenant mix advisory services. With our team’s local and regional market knowledge and range of skills including shopping center marketing, lease negotiating, site planning, engineering and real estate finance, we offer landlords and tenants alike a full picture of the opportunities associated with any particular site.  Visit www.blacklinere.com, call 617.553.1820 for more information.

CONTACTS:
BLACKLINE Retail Group, LLC
Marketing Department
617-553-1820
info@blacklinere.com

The post Pet Valu Celebrates Their Grand Opening at Bristol Plaza appeared first on Blackline Retail Group, LLC.

Manuel Kaufmann (Humitos): #PyConES16: El abrazo de Siro

Pasaron los nervios. Quedó la alegría.

A fines de Septiembre fuimos con Johanna a Madrid, España para participar de la PyConES16 como habíamos adelantado anteriormente y volvimos más contentos que nunca en nuestras vidas. ¡Nos pasó de todo!

Sabíamos que no iba a ser un viaje fácil de realizar debido a que íbamos a tener que hacer muchos trámites para que a Johanna le permitan la entrada sin complicaciones en la Unión Europea, todo iba a ser muy costoso (por eso realizamos una campaña de donaciones), yo nunca había utilizado mi pasaporte Italiano y además estábamos muy nerviosos por la charla plenaria de cierre que estaba a cargo mío.

Siempre nos gusta tomar algunos recaudos en estas situaciones, por eso salimos un día antes de Cuenca hacia Guayaquil y ese mismo día fuimos a retirar la carta de invitación que Juanlu nos había enviado. Luego nos fuimos para el hotel y esperamos la hora de salida del primero de los vuelos (el de Johanna). Vamos juntos a la madrugada y ya notamos algo sospechoso al despachar su equipaje: su maleta la dejaron a un costado sin darnos ninguna explicación. Vuelvo al hotel y ella se queda esperando la salida de su vuelo.

Una vez que llego al hotel y pasados algunos minutos recibo una llamada de Johanna diciendo que la había llamado desde la oficina de antinarcóticos, que la habían tratado re mal, le habían revisado completamente todo su equipaje y que encima no le habían dejado volver a ponerle el plástico. Estábamos un poco asustados en ese momento. Por suerte, finalmente no pasó nada "más grave".

Por la tarde, ese mismo día, voy nuevamente al aeropuerto para tomar mi vuelo y otra vez al momento de despachar la maleta me la dejan a un costado. Esta vez, pregunto porqué habían tomado esa decisión y me dicen: "Porque es un bulto no convencional. Es decir, está envuelto en film y no puedo ver qué es. No se entiende si es una maleta, un bolso o qué. Son nuestras medidas de seguridad". Así que, me quedé esperando que me llamen por el altoparlante para pasar a antinarcóticos, al igual que Johanna, aunque eso finalmente nunca sucedió por suerte.

Sin embargo, un detalle. Al llegar a España noté que una caja de preservativos que llevaba dentro de mi equipaje estaba perforada como si fuese con un punzón o algo así. No me gustó eso, me hizo dar qué pensar sobre qué hacen con las maletas de uno.

Finalmente, todo lo que siguió fue viento en popa. Llegué a Madrid y al momento de hacer migraciones presento mi pasaporte Italiano y el señor me dice: "Bienvenido Manuel. Adelante". "¿Cómo? ¿No me va poner el sellito ni nada?". Me sorprendió que no me hayan hecho ningún control. De hecho, puedo decir que al ingresar a la Unión Europea tengo menos controles que para ingresar al país en el que nací. De no creer.

Voy caminando hacia la salida del aeropuerto y ahí ya los veo a Johanna y a Juanlu que me estaban esperando. Me sentí casi como una estrella de rock :)

Inmediatamente fuimos a la casa de Juanlu en taxi y al momento de llegar confirmamos que la mala onda de los taxistas es algo internacional. Parece que hay una única academia a nivel mundial. Igual, escuchar a dos españoles discutir zeziando fue muy gracioso; así que a mi modo de ver la situación, no me pareció tan mal.

Tiramos todas los bultos en la casa y nos fuimos a pasear por diferentes lugares de Madrid, sacamos algunas fotos y hablamos a más no poder con Jualu (era algo que nos debíamos luego de aquella SciPyLA 2015). Escuchamos muchos acentos en la calle, muchos idiomas, muchas formas de vestirse, mucha gente diferente, mucho de todo pero sin que eso nos estorbe. Nos sentimos muy bien y ya nos empezábamos a dar cuenta que Madrid podría ser una ciudad en la que nos guste vivir en algún momento.

Los días pasaron, empezamos a conocer a los amigos del círculo cercano de Juanlu los que pasaron a ser nuestros amigos inmediatamente. Paseamos por diferentes lugares con Johanna y aprovechamos que los precios de muchas cosas son extremadamente más bajos que en Ecuador para realizar algunas compras y chequeos médicos.

El día de la PyConES16 se acercaba y los nervios aumentaban, pero sin embargo no encontraba el lugar adecuado para sentarme en la máquina a terminar las 5 slides que me quedaban pendientes: algunas fotos puntuales y tipografías. Le pedí ayuda a Johanna con eso ya llegando al día anterior de la partida hacia Almería. Terminé eso, pero claro, todavía me faltaba hacer una pequeña práctica ya que tenías más de 120 diapositivas y estaba muy preocupado por el tiempo -aunque por otro lado pensaba: "Pero... muchas de estas duran menos de 5 segundos. Debería estar bien".

Llegó el día del viaje para Almería. Nosotros habíamos coordinado para ir con Carla en su auto (a quien habíamos conocido una o dos noches antes y ya nos parecía una genia) y también con Ángeles (a quién pasamos a buscar por Jaén a mitad de camino). Para encontrarnos con Carla nos tomamos un tren, y para llegar a la estación de trenes utilizamos MyTaxi. Al subirnos al tren, a esto de las 5 de la mañana, ya empecé a pensar que MyTaxi no existe en Ecuador, y que además el servicio de transporte público (bus) a las 18hs deja de pasar por mi barrio. Con Johanna íbamos anotando porotos para Madrid.

Nos encontramos con Carla en las afueras de Madrid y nos subimos todos al auto. 5 horas por delante nos esperaban en la ruta. Nosotros súper contentos porque íbamos a poder ir viendo el paisaje y conocer un poco más la geografía de España. Además, ¡manejaba otro! En el viaje hablamos de un montón de cosas, me encantó ser parte de esas charlas y también poder dormir un rato en las que no entendía :D

Durante el viaje, y pensando en la semana que habíamos vivido en Madrid, ya empezamos a notar algunos de los problemas del primer mundo que nos parecían muy graciosos: el tacho de basura de la calle está lleno de basura, hay un bache/pozo en una ruta de 400Km de longitud, algunos no ponen guiño/direccionales para cambiarse de carril, etc. Y sí, a nosotros nos daba risa, pero cuando eso es lo único que conocés o incluso peor, conocés otros lugares donde las cosas funcionan mejor, tiene mucho sentido quejarse. Hablamos bastante de esto con los chicos. Estuvo bueno.

Llegamos a Almería y nos fuimos derecho para el departamento que habíamos alquilado. La PyConES se acercaba y en mi cabeza lo único que había era la preocupación de no haber podido practicar la charla. Además, seguía pensando "¿Qué le voy a ir a decir yo a esta gente? ¿Para qué me invitaron? ¿Para qué dije que sí?". Las horas pasaban y los nervios aumentaban.

Al día siguiente de llegar a Almería nos vamos bien temprano para la Universidad ya que Carla iba a participar del taller de Django Girls y Johanna y yo íbamos a ser mentores. Teníamos muchas expectativas para ver cómo era un workshop organizado por otras personas (nunca habíamos ido a un taller que no sea organizado por nosotros). En términos generales, me parece que estuvo muy bien organizado y gestionado el taller. Creo que fue muy humano. Yo participé como meta-guía y me estuve paseando por todas las mesas ayudando a los diferentes guías a resolver los problemas a los cuales no le encontraban solución. También estuve charlando con los organizadores y las participantes en los tiempos muertos. Personalmente, lo disfruté mucho y estuve muy relajado al no formar parte de la organización :)

¡Empezó la PyConES16! Había un track entero con una orientación más científica (¡genial esa idea!) y otros dos tracks más de Python en general. Yo estuve paseando por los tres tracks y viendo un poco de todo. Algunas charlas me dejaron mucho, otras nada, otras no me gustaron directamente. Había de todo y para todos los gustos. Como para que te des una idea, hasta hubo un tipo regaló "plátanos/bananas" en su charla.

Llegando al final del primer día, yo seguía sin haber encontrado un tiempo para practicar mi charla, pero ya me había anotado para dar una Ligtning Talk sobre "fades + pysenteishon". Llegó el momento del éxito. Ahí estábamos sentados con Johanna en el escenario principal junto a otros disertantes más (un punto llamativo: Johanna fue la única mujer en dar una LT). Empieza la primera y quedamos impactados de lo bien preparada que estaba. La segunda, ¡también!. La tercera, ¡increíble!. Todos los slides perfectos, los tiempos justos, las palabras adecuadas. Incluso puedo decir que esas LT tenían mucha más preparación que algunas charlas que habíamos visto durante el día. Nosotros, con Johanna, nos mirábamos y ya teníamos vergüenza de estar sentados ahí -incluso sin haber hecho nada todavía.

Llega mi turno. Yo simplemente tenía que hacer 3 o 4 preguntas sobre virtualenv, explicar un poco para qué servía, como había evolucionado con virtualenvwrapper y finalmente mostrar fades utilizando pysenteishon como ejemplo y "de paso" cambiar los slides con el celular. Era súper simple. Pero claro, siempre y cuando mi máquina se digne a clonar la pantalla hacia el proyecto. Lamentablemente, como eso no sucedió y tuve que "extender a derecha", luego de hacer las preguntas e intentar tipear algo en la máquina salió todo mal, el tiempo corría y yo no daba a las teclas adecuadas mientras quebraba el cuello para mirar la proyección. La gente empezó a aplaudir y yo seguía intentando descifrar como escribir "-d" en la terminal. Fue un fiasco mi LT.

Inmediatamente después de mí, siguió Johanna. Empezó a hablar de la comunidad de Python Argentina, dar a conocer la PyConAR 2016 y otras cosas más. No sé muy bien cómo fue la situación, pero a los 2 minutos aproximadamente dijo algo que hizo emocionar a la gente que la empezó a aplaudir, ella también se emocionó, se puso nerviosa y se fue del escenario sin más. Le quedaron varias cosas por decir y 3 minutos de sobre :P

Luego del cierre del primer día nos fuimos a cenar todos en grupo. Estuvo buenísimo, hablé con mucha gente y me hice amigo de algunos casi tan locos como nosotros. Había mucha gente interesante en la conferencia. A mí me gustó particularmente que se organice un track científico ya que hizo que asista mucha gente que "nada que ver con la programación" por decirlo de alguna forma. Entonces, había una buena diversidad de opiniones, puntos de vista y mucho para discutir.

Llegó el Día. Domingo. Tenía que dar la charla plenaria de cierre. Sí, yo. Aún no lo podía creer. Además, seguía sin haber practicado ni siquiera 3 minutos mi charla. Misteriosamente, no estaba nervioso. Aunque tampoco estaba tranquilo, digamos.

Vamos a la conferencia, me paseo entre todos los tracks. Otra vez, algunas charlas muy interesantes y otras no tanto. Sin embargo, cada vez que hablaba con Johanna me decía que había visto cosas muy interesantes en el track científico. Eso me ponía contento porque muchas de esas charlas yo no estaba a la altura para poder evaluarlas.

En uno de esos encuentros con Johanna pactamos un horario para hacer una pequeña prueba de lo que iba a ser mi charla dentro de unas horas. Sí, para este momento ya tenía el PDF listo y estaba seguro del contenido, pero nunca lo había practicado y cada vez que miraba los más de 120 slides temblaba...

Luego del almuerzo, la practicamos y tuvimos decenas de interrupciones en el lugar que elegimos para hacerlo. A tal punto que decidimos alejarnos lo más que pudimos y volver a empezar. Así y todo seguíamos con interrupciones de gente que estaba por el lugar y demás. Entre miedo, bronca y nervios yo ya estaba de mal humor a esa altura. No estaba pudiendo meterme de lleno en la charla, aunque por otro lado tenía en la cabeza todo lo que quería decir.

¡Llegó el momento! Me subo al escenario y configuro todo. Miro el proyector y dice: "Argentina en Python", una foto de una vía y yo con un perro. Me miro. Estoy en el escenario, estoy en el proyector... "¡Mierda. Es mi charla. Vamos a ponerle todas las pilas!" Me presentan y... ¡vamos al ataque!

Como ultimamente he estado viajando mucho, siempre estoy preparado para emprender un nuevo viaje. Es por eso que hoy vine con mi maleta y la voy a ubicar por aquí

—dije mientras salía de atrás del telón

Como siempre en mis charlas, utilicé pysenteishon, pero esta vez lo había configurado para que la pantalla dure encendida 5 minutos, así no tenía el problema de que se me bloqueaba mientras quería pasar los slides.

Durante la charla estuve relajado. Empecé bien y siguió bien. Estaba tranquilo. Estaba seguro. Los pocos chistes que iba haciendo funcionaban. Eso me daba más seguridad. No lloré; y eso me ayudó mucho a seguir con el ritmo adecuado y estar atento y concentrado. "Me desnudé" en el escenario. Saqué todo desde lo más profundo de mí...

... mientras tanto, el celular que estaba usando con pysenteishon no dejaba de vibrar y no entendía muy bien lo que pasaba...

Mientras contaba mi historia y me preguntaba, y les preguntaba, "¿Qué catso hacía yo como Keynote Speaker en PyConES16?"; desde la mitad del salón gritaron: "¡Te lo merecés!". Me quedé helado. La gente empezó a aplaudir y mi heladéz pasó desapercibida.

Llegué al final de la charla y mi celular no había parado de vibrar ni un segundo. Llegué muy emocionado pero pudiendo controlar las ganas de llorar. No había terminado aún y yo ya estaba muy eufórico y contento con lo que había estado viviendo durante este tiempo (que ya no sabía hace cuánto que estaba ahí). Muestro la diapositiva que dice "Gracias" y la mayoría de la gente explotó en un aplauso de pié. Otros explotaron en el llanto (¡literal!). La emoción y la energía que había en ese momento fue tan grande que yo estaba completamente desorientado y no sabía que hacer. Recordé lo que Nando siempre me dijo: "Vos siempre mantené la calma. Si la gente aplaude, no hables, no hagas nada. Esperá que terminen". Y así fue, me quedé callado con lágrimas en los ojos, mirando a la gente a la cara y escuchando esos aplausos maravillosos. Nunca en la vida me había sentido igual.

Saludo a Juanlu en el escenario y me voy a sentar en el primer lugar que encuentro. No podía creer lo que acababa de suceder. No creía que la persona que había estado en el escenario había sido yo. Todavía no lo creo. Necesito ver el video de la charla para terminar de convencerme. Miro el celular y tenía más de 100 notificaciones en Twitter. Estaba atónito.

Luego vino el cierre de la PyConES16, los sorteos y demás.

Al momento de abandonar el auditorio se me acerca mucha gente, me felicita, me pide por favor que siga adelante, me dice que fue muy motivadora la charla, me dicen que quieren trabajar conmigo en un proyecto similar en España, me ofrecen su ayuda para lo que necesite, etc. Fue un momento hermoso, aunque yo no sabía que decir más que "Gracias. Muchas gracias". Estaba como abombado, digamos.

Mientras íbamos saliendo del auditorio camino al auto para emprender nuestra vuelta a Madrid, empiezo a saludar a los amigos más cercanos de Juanlu y despedirme: "hasta la próxima visita". Hay un momento de esa despedida que tuvo mucha fuerza, mucha energía y que me va a costar mucho olvidar: el abrazo de Siro.