Juanjo Conti: Correcciones de Lis (2)

Rescato más correcciones del documento que confeccionó Lis mientras corregía Carne de los dioses..

Sobre el punto final

Luego del signo de exclamación:

Correcciones de la página 36

Primer párrafo

Línea 7: no se escribe punto final después del signo de exclamación. “¡¡¡El tío Juanjo tiene sangre en la cara!!! Vengan rápido”.

Luego del signo de interrogación:

Correcciones de la página 37

Primer párrafo

Línea 7: no se escribe punto final después del signo de interrogación ni se cierran las comillas porque aún el narrador sigue pensando. “¿Qué culpa tiene…? ¿Qué culpa tiene la enfermera…?” (Los primeros puntos suspensivos son los que agregaría, ya que el discurso se interrumpe. Los otros, por supuesto, corresponden a la abreviación de lo que se cita).

Luego de las comillas:

Correcciones de la página 25

Tercer párrafo

Línea 9: después de las comillas, sí se escribe punto final, aunque haya un signo de interrogación. “… ¿no podés dármelos igual?”.

No debe escribirse punto tras los signos de cierre de interrogación o de exclamación, aunque con ellos termine el enunciado; está, pues, incorrectamente puntuada la secuencia siguiente:

¿Quieres darte prisa?. ¡Vamos a llegar tarde por tu culpa!. Pero ¿se puede saber qué estás haciendo?.

Solo debe escribirse punto si tras los signos de interrogación o de exclamación hay paréntesis o comillas de cierre:

Se puso a gritar como un loco (¡vaya genio que tiene el amigo!).

(Diccionario panhispánico de dudas, en línea).

Planeo un último post con correcciones.

Juanjo Conti: Goodreads review: El año del desierto (Pedro Mairal)

Me gustó mucho. Es genial el tono con el que te hace viajar al pasado y por ahí te tira un dato que te agarra de los pelos. Por ejemplo, empieza a contar que hay un montón de carpas, de indios (y vos te las imaginas todas blanquitas, de cuero) y de repente te suelta que son carpas de camping.

Una cita que resume el libro: "Yo, que unos meses atrás atendía teléfonos en una oficina con piso de *mosquette*, que traducía cartas al ingles vestida con mi *tallier* azul y mis sandalias, ahora hundía las manos en la sangre caliente, separaba vísceras, abría al medio los animales, despellejaba, buscaba coyunturas con el filo."

La respuesta a la pregunta que muchos se van a hacer: https://twitter.com/jjconti/status/69...

Solo se me hizo un poco pesado el capítulo La Peregrina.

Consejo: luego de terminarlo, volver a leer el primer capítulo.

Rating: 4/5

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

Manuel Kaufmann (Humitos): Me voy a República Dominicana

Todavía no lo creo. El 20 y 21 de Febrero se llevará a cabo la primera conferencia de Python en el Caribe: la PyCaribbean, ¡y yo voy a estar ahí! No sólo que voy a estar ahí, sino que voy a estar hablándole a un montón de gente sobre el trabajo que hemos venido realizando durante estos años con Argentina en Python.

No lo puedo creer por varias razones. Para empezar, nunca dí una charla de Python en una conferencia fuera de Argentina. Además, la charla va a ser sobre nuestro proyecto, algo que creé yo, que no es software y que logró captar la atención de los selectores de charlas. Y no solo eso, sino que también me otorgaron Financial Aid para que pueda asistir. Lo cual hubiese sido imposible de otra forma. Más allá del dinero, tuve que hacer muchos trámites y planear meticulosamente nuestra permanencia en los países que hemos visitado para poder obtener los diferentes permisos (tiempos de permanencia como turista) -de hecho, ayer fuimos a Ecuador únicamente por este motivo.

Entonces, voy a ir a Santo Domingo a tratar de contagiar la locura que tenemos en Python Argentina por Python, la comunidad, el compartir y que todo eso hace que haya dos tarados viajando en auto por diferentes países por más de 2 años. ¿Cómo te lo explico en 30 / 45 minutos?

La charla ya está lista. Terminada y practicada. La hice con la ayuda de todo el material que tenemos (fotos, videos, historias, experiencia) y las sugerencias de @EllaQuimica. Además de varios comentarios que he recibido a través de nuestra encuesta. De a ratos creo que está muy buena y por momentos que es una basura. Es así, los nervios y la ansiedad no me dejan pensar claramente. De todas formas, no quiero adelantarles nada para no quemar las espectativas y luego, si graban la charla, la puedan ver completa.

Viajo el 16 de Febrero de Lima, Perú hacia Santo Domingo, República Dominicana y a los pocos días voy a estar participando de una Meetup de PyLadies allí. ¡Buenísimo! Luego viene la PyCon y finalmente me quedaré unos días más para conocer un poco la ciudad, su movimiento y lo más que pueda sobre la comunidad de Python de allí. Llevo una esponja bien grande para absober la mayor cantidad de ideas que pueda. Finalmente, estaría regresando el 26 de Febrero a Lima y el mismo día viajando para encontrarme con Johanna que se queda en Perú cuidando la casa: el Errante.

Es así amigos. Siempre lo dije, "Python te puede llevar a lugares inesperados" y lo ha hecho durante mucho tiempo. Pero lo mejor de todo es que sigue sorprendiéndome, no me deja a pié y además su hermosa comunidad se comunica con nosotros para ofrecernos su ayuda cada vez que lo requerimos.

¡Gracias a ustedes!

Manuel Kaufmann (Humitos): "No hay sistema", otra vez

Luego de 2 días de relax en Ecuador que aprovechamos para conversar entre nosotros, planear las rutas y organizar un poco las cosas para comienzos de Marzo, volvimos a Perú ya que en 2 semanas tengo que viajar a @PyCaribbean para dar una charla.

En migraciones de Perú tuvimos un problema con el pasaporte de Johanna porque data del año 2008 y es una versión vieja, de alguna manera. Ahora, parece que a nivel internacional todos los pasaportes traen la primera hoja plastificada y con su foto impresa, en vez de pegada. Bueno, el de Johanna no es así.

Discutimos un poco con la chica (casi menor de edad como la que nos había atendido al salir) y finalmente hicimos su trámite con su cédula de identidad: ¡menos mal que estamos en Latinoamérica! Sino, nos hubiésemos quedado varados por ahí...

Luego de sortear este inconveniente, pasamos a Aduana para hacer el trámite del auto y, oh sorpresa: "No hay sistema". Y esta vez, reloaded, ya que había una pareja esperando desde las 8:30 de la mañana (llevan 3 horas sentaditos ahí sin poder hacer nada).

Así que, aquí estamos esperando nosotros también para ingresar a Perú y comenzar la búsqueda de nuestra hogar por este mes que falta hasta que yo vuelva de República Dominicana.

Actualización

Ya estamos nuevamente en Perú y sin problemas. Luego de, nuevamente sentarme a escribir este post y el siguiente, volvió el sistema y pudimos seguir adelante. Habremos esperado unos 45 minutos ahí varados.

Una cosa interesante es que había un Colombiano y una Bolivia esperando antes que nosotros (esos que estaban esperando hace 3 horas) y yo les dije: "Espero que traigamos la suerte y la buena onda y vuelva". Cuando fui a la oficina, el policia me dijo: "Y era así nomás, trajeron la suerte" :D

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.