Manuel Kaufmann (Humitos): FaMAF en Lima

Unos días antes del evento de Django Girls Lima llegamos a la ciudad y nos hospedamos en el hostel más barato que encontramos cerca del lugar del evento (Oficinas de Laboratoria LA) y, casualmente, quedaba en el corazón de Miraflores -un lugar muy caté.

Durante nuestra estadía en este hostel, ofrecimos nuestro servicio de mapeo y la señora encantada lo contrató. Más allá de la venta del servicio, siempre que tenemos la posibilidad le comentamos a otros viajeros las ventajas de OSM y de las apps que funcionan OnLine.

Ahí estaba yo, en el primer/segundo piso -dependiendo en qué idioma hablemos, leyendo algunas cosas sobre OSM y terminando la charla de apertura/cierre que iba a presentar en el taller. En eso, paso un flaco y me dice: "¿Sos programador?". "Mierda! ¿Tanto se me nota!?" -pensé yo, "¿Será la cara de bala?".

Hablamos cerca de 2 horas con el flaco este que, obviamente, ya no recuerdo su nombre. Pero lo interesante, es que el loco era de FaMAF, lo conocía a el Darni (había sido su profesor) y además también conocía toda la historia de Machinalis y se expresaba de una forma como diciendo: "Estos tipos lo lograron". Había enviado una solicitud de beca para ir a trabajar a Francia y estaba terminando su tesis. Un tipo de esos que los ves, y sin haber leído una línea de su código, te das cuenta que se va comer el mundo.

Una charla muy amena, que lamentablemente fue cortada por nuestro compromiso, que motiva, que te ves reflejado por un momento y que también te gustaría saber algo de lo que sabe el otro. Una especie de admiración, por decirlo de alguna manera.

Fue como transportarme a Córdoba por unos minutos y encontrarme con mis amigos programadores...

Manuel Kaufmann (Humitos): "No hay sistema"

Son las 6:55 AM y estamos varados en la frontera entre Perú y Ecuador -del lado de Perú en un lugar que se llama La Tina.

Luego de despertarnos a las 3 AM y conducir por 2 horas súper encandilados por todos los autos que llevan luces altas y ni se molestan cuando le hacés seña para que no te maten y que nos pare un policía de tránsito borracho en el medio de la ruta, llegamos a la frontera. Viajamos de noche porque no tenemos aire acondicionado (bah, sí tenemos pero se rompió el módulo del ventilador) y está haciendo temperaturas de 40° durante la mañana. Sí, ya sé, rompimos el Zen, pero creíamos que sería "más seguro" de alguna manera.

IMG_20160127_070337.thumbnail.jpg

Aduana y Migraciones de la frontera Piura, Perú - Macará, Ecuador

¿Porqué estamos varados en la frontera? Sinceramente creo que es porque el tipo de la aduana está terminando su turno en una hora y no tiene ganas de trabajar. Luego de hacer migraciones y que la señorita que nos atendió (probablemente menor de edad) en pijamas -sin uniforme, y claramente recién levantada, pasamos a aduana para hacer los papeles de Errante y nos indican que "No hay sistema". Inmediatamente sale un oficial de la oficina y dijo algo así como: "Haceme la gamba y esperá al señor de las 8 AM porque yo ya cerré todos mis papeles y... Además, no hay sistema" -pero en Peruano.

En pocas palabras, ahora legalmente no estamos en ningún lugar. No tenemos documentos en Perú, ni tampoco en Ecuador. Nuestro querido Errante está en Perú y nosotros en un agujero negro.

Espero que se resuelva esto en pocos minutos y lleguemos a Ecuador tranquilos.

Actualización

Finalmente, todo se resolvió en 45 minutos aproximadamente. El señor que nos había cortado el rostro nos llamó todo apurado e hizo todo apurado (no sé si de mala gana, o porque se estaba yendo o porque quería aprovechar, realmente, el momento que había vuelvo el sistema)

Estamos en Macará, Ecuador ya en un hospedaje y buscando cosas más baratas. Sí, así es la vida del "busca" :D

Manuel Kaufmann (Humitos): Obfuscar emails en tu sitio

Hace un tiempo ví en el sitio de Renzo Carbonara una forma súper facil para obfuscar los emails de su página: una simple función de javascript que reemplaza un caracter raro por la "@" (arroba) y otro por el "." (punto)

window.onload = function() {
  var e = document.getElementById("xyz2");
  e.textContent = e.textContent.replace(/ð/, "@").replace(/ø/, ".");
};

Quería buscar una forma de llevar eso automáticamente a Nikola. Y hoy llegó el día.

Lo primero que hice fue crear un filtro en Nikola que me reemplaza el BLOG_EMAIL con los caracteres raros:

FILTERS = {
    ".html": ["rpl {old_email} {new_email} %s".format(
        old_email=BLOG_EMAIL,
        new_email=BLOG_EMAIL.replace('@', 'ð').replace('.', 'ø')
    )],
}

Luego agregué la función Javascript de Renzo (con algunas modificaciones para reemplazar todos los links con mailto:) en el BODY_END de la configuración de mi Nikola:

// de-obfuscate emails
window.onload = function() {
  var e = document.getElementsByClassName('reference external');
  for (i=0; i < e.length; i++) {
    if (e[i].href.indexOf("mailto:") == 0) {
      e[i].href = e[i].href.replace("%C3%B0", "@").replace("%C3%B8", ".");
      e[i].text = e[i].text.replace(/ð/, "@").replace(/ø/, ".");
    }
  }
};

Ahora, en teoría, en ninguna página del sitio debería aparecer el email del autor de forma plana, sino más bien obfuscada.

Como tarea para el lector le dejo la versión que obfusca cualquier email que uno escriba, sin importar de quién sea.

Marcos Dione: trip-planner

For a long time I've been searching for a program that would allow me to plan (car) trips with my friends. Yes, I know of the existence of Google Maps, but the service has several characteristics that doesn't make it appealing to me, and lacks a couple of features I expect. This is more or less the list of things I want:

  1. Define the list of points I want to go to. No-brainer.
  2. Define the specific route I want to take. This is normally implemented by adding more control points, but normally they're of the same category as the waypoins of the places you want to visit. I think they shouldn't.
  3. Define stages; for instance, one stage per day.
  4. Get the distance and time of each stage; this is important when visiting several cities, for having an idea of how much time during the day you'll spend going to the next one.
  5. Define alternative routes, just in case you don't really have/make the time to visit some points.
  6. Store the trips in cookies, share them via a URL or central site, but that anybody can easily install in their own server.
  7. Manage several trips at the same time.

So I sat down to try and create such a thing. Currently is just a mashup of several things GIS: my own OSM data rendering, my own waypoints-in-cookies idea (in fact, this is the expansion of what fired that post) and OSRM for the routing. As for the backend, I decided to try flask and flask-restful for creating a small REST API for storing all this. So far some basics work (points #1 and #6, partially), and I had some fun during the last week learning RESTful, some more Javascript (including LeafLet and some jQuery) and putting all this together. Here are some interesting things I found out:

  • RESTful is properly defined, but not for all URL/method pairs. In particular, given that I decide that trip ids are their name, I defined a POST to trips/ as the UPSERT for that name. I hope SQLAlchemy implements it soon.
  • Most of the magic of RESTful APIs happen in the model of your service.
  • Creating APIs with flask-restful could not be more obvious.
  • I still have to get my head around Javascript's prototypes.
  • Mouse/finger events are a nightmare in browsers. In particular, with current leafLet, you get clicked events on double clicks, unless you use the appropriate singleclick plugin from here.
  • Given XSS attacks, same-origin policy is enforced for AJAX requests. If you control the web service, the easiest way to go around it is CORS.
  • The only way to do such calls with jQuery is using the low level function $.ajax().
  • jQuery provides a function to parse JSON but not to serialize to it; use window.JSON.stringify().
  • Javascript's default parameters were not recognized by my browser :(.
  • OSRM's viaroute returns the coordinates multiplied by 10 for precision reasons, so you have to scale it down.
  • Nominatim and OSRM rock!

I still have lots of things to learn and finish, so stay tunned for updates. Currently the code resides in Elevation's code, but I'll split it in the future.

Update:

I have it running here. You can add waypoints by clicking in the map, delete them by doublecliking them, save to cookies or the server (for the moment it overwrites what's there, as you can't name the trips or manage several yet) and ask for the routing.

trip-planner elevation openstreetmap osrm python flask leaflet javascript jquery

Juanjo Conti: Correcciones de Lis (1)

Estos días nos estamos intercambiando muchos correos con Lis mientras me corrige y recorrige los cuentos de Carne de los dioses.

Lis Gariglio es una correctora super profesional y capacitada. Aquí un ejemplo:

Luego de que me agregue tildes en algunos cómo en los que me las había olvidado, vi una oración que decía:

...veo como un litro de agua colorada se va al desagüe.

Pensé que se le había escapado y también le puse tilde, pero por las dudas se lo consulté.

Esta fue su respuesta:

21 de enero de 2016

Correcciones de la página 24

Primer párrafo

Línea 11: acerca de tu duda sobre si como lleva tilde en "...veo como un litro de agua colorada se va al desagüe", investigué y encontré algo MUY INTERESANTE (bueno, sí, al menos para mí). Con los verbos de percepción, tales como ver y oír, aunque la noción de modo sea secundaria, está implícita en los enunciados. Tomado nuestro caso, diríamos que el hecho de ver ese litro de agua colorada que corre al desagüe no se puede separar del modo en que se produce la acción: "Veo que un litro de agua colorada se va al desagüe"; "Veo de qué modo un litro de agua colorada se va al desagüe". No obstante, a pesar de que como se pronuncia tónico, sigue siendo una conjunción (como y, por ejemplo) y NO debe llevar la tilde para diferenciarlo del adverbio interrogativo cómo. Esta pequeña diferencia puede ser grande e importante al interpretar correctamente un enunciado. En "Ya verás como canta Juan", se asegura que Juan cantará, pero en "Ya verás cómo canta Juan" se anticipa cuán bien o cuán mal lo hará.

En síntesis, NO, no lleva tilde (y perdón por la explicación, pero todo esto me apasiona, aunque creo que ya lo sabés de memoria...).

Manuel Kaufmann (Humitos): Enviar muchos emails

Como en algunos de los eventos que organizamos tenemos una confirmación por email de parte de los organizadores, siempre tenemos que enviar unos 40~50 emails a los asistenes (uno para cada uno de ellos) y luego algunos 30 más para los que, por falta de cupo, se quedaron afuera.

Para esta tarea probé varias cosas y ninguna, hasta hoy, había sido de utilidad/simpleza. Básicamente lo que buscaba era que:

  • sea simple de utilizar
  • los links incluídos en los emails no estén ofuscado
  • los emails no tengan textos en inglés
  • emails en texto plano
  • posibilidad de enviar el mismo email a una sola persona

... y probablemente algunas cositas más que ahora no tengo en mente.

Probé mailgun, mailchimp, enviarlos a mano y finalmente terminé yendo por un plugin de Thunderbird llamado MailMerge que me recomendó Facundo.

¿Qué tiene de bueno MailMerge? Básicamente te permite enviar emails personalizados (mediante algunas variables) a todos los contactos que provengan de un .csv o libreta de direcciones. Eso del .csv ya está bueno porque me ahorra el paso de tener que importarlos (de alguna manera en particular) a la libreta del servicio que utilice.

Para crear/filtrar ese .csv que necesito darle de comer a MailMerge me creé un script en Python que lee el .csv que obtengo del formulario de registración de Google Form, lo filtro de acuerdo a una columna en particular y finalmente crea el .csv de la forma correcta para MailMerge: que no es ni más ni menos que en la primera fila los nombres de las variables que querés utilizar y el resto son los datos.

Para generar ese .csv utilizo el script de esta forma:

python mailmerge.py \
  -i /tmp/inscriptos.csv \
  -o /tmp/mailmerge-confirmados.csv \
  --title --strip \
  --email 3 --first-name 1 --last-name 2 \
  --url "http://argentinaenpython.com.ar/django-girls-piura/" \
  --date "Sábado 23 de Enero de 2016" --city Piura \
  --place "UDEP - Universidad de Piura, Av. Ramón Mugica 131, Piura, Piura, Perú" \
  --hour "8:30 (puntual) a 18:30 hs." --days 5 \
  --filter-column 21 --filter-column-text "Confirmado"

Finalmente, mi template/plantilla que utilizo con MailMerge se vé más o menos así:

To: {{first_name}} {{last_name}} <{{email}}>
From: Argentina en Python <argentinaenpython@...>
Subject: Confirmación: Taller Django Girls en {{city}}
Body: Hola {{first_name}}! ...

Eso me permite en pocos minutos, confirmar a todos los inscriptos, avisarles a los que están en "Lista de espera" y seguir con lo que estaba haciendo.

Manuel Kaufmann (Humitos): Python en el Machupicchu

¿Qué tendrá que ver batata con luz eléctrica? -me decía mi mamá. Y bueno, tan errado no estábamos ya que unos años más tarde descubrí que con la papa uno puede encender un LED de un par de Volts.

Así mismo te podés estar preguntando vos: ¿Python y el Machupicchu? ¿Qué carajo tiene que ver?. Si estás siguiendo nuestro viaje con Argentina en Python sabrás que hace unos meses estuvimos en la cresta del Machupicchu y el Huaynapicchu, y, si has subido hasta allá, sabrás que no es una tarea fácil para hacer si lo hacés de la forma económica.

Allá arriba nos sacamos unas fotitos con la remera de Django y también de Argentina en Python, pero no por eso te voy a decir que Python estuvo ahí. Sino que, además, cuando bajamos nuevamente hacia Machupicchu Pueblo, veo que pasa un tipo con una remera de un Tux y le digo: "Hey, ¿usás Linux?". El tipo me mira como diciento "Este flaco está del tomate" y me pregunta: "Eh?". "Tu Tux, en la remera". "Ah, Linux, sí, sí. N~ao hablo españole. I'm from Brasil". "Oh, amazing and are you a software developer or so? I love Python".

"Python, ah? I've worked on yowsup. A Python client for Whatsapp. I recommend it to you."

Hoy, unos meses más tarde, necesitaba algo para enviar mensajes a muchos teléfonos de Whatsapp y me fui a buscar esa herramienta y "Oh, my god! It just works!". ¡Qué buena onda! Me resolvió mucho la forma de ponerme en contacto con las personas que se inscriben a nuestros talleres cuando no responden vía email.

Así lo estoy utilizando. Primero, nos registramos:

yowsup-cli registration --mcc 716 --mnc 06 --phone <YOUR-PHONE-NUMBER> --cc 51 --requestcode sms

Validamos nuestro número con el código que nos llega:

yowsup-cli registration --mcc 716 --mnc 06 --phone <YOUR-PHONE-NUMBER> --cc 51 --register <REGISTRATION-CODE>

Y luego, enviamos el mensaje:

yowsup-cli demos -l <YOUR-PHONE-NUMBER>:<PASSWORD-FROM-LAST-STEP> --send <DESTINATION-PHONE-NUMBER> "Hola"

FUCKING AWESOME!

Juanjo Conti: Goodreads review: Los Enigmas de los Viudos Negros (The Black Widowers #5) (Isaac Asimov)

Luego de leer dos libros de los Viudos Negros de Asimov, en el tercero la estructura que se repite en todos y cada uno de los libros es insoportable:

a) Los Viudos Negros hablan de una trivialidad
b) Cenan
c) El invitado plantea un enigma
d) Todos tiran ideas que son descartadas una a una
e) Se rinden
f) Le preguntan a Henry y este tiene la solución

Así mismo... como fan de Asimov no puedo resistir leerlos y tenerlos en el celular es muy práctico. Creo que hay unos cinco o seis libros de los Viudos Negros. Yo solo leí tres. Si consigo los otros, también los voy a leer.

Rating: 3/5

Original: https://www.goodreads.com/review/show/1462923229