Juanjo Conti: PyConAr 2015, la semana que viene, en Mendoza

La semana que viene, de jueves a sábado, es PyConAr 2015, la conferencia anual e itinerante de Python Argentina. Este año se hace en Mendoza.

No iba a ir: era lejos, tenía que planificar con anticipación y alguna otra excusa que me había puesto. Había mandado una charla y la habían rechazado.

Hoy recibí un mail en el que me decían que la mía había quedado como la primer charla suplente, que no había entrado por un pelito y que ahora había un slot disponible.

Así que: iiiiuuuuujjuuuu! Nos vemos allá!

PS: llevo libros de mi editorial Automágica (Xolopes, Santa Furia y La prueba...), que son ON TOPIC porque están maqueteados con Python, si alguno quiere uno, reserve por acá.

Juanjo Conti: Basado en hecho reales...

Un cuento basado en hechos reales...

¿Por qué no cojió esa nocho Guido Pividoni?

A Guido lo conozco de la primaria, pero hasta esa noche no lo había vuelto a ver.

Ya es más de media noche. Estoy llegando tarde al cumpleaños de mi prima y acelero por una avenida libre de autos con la esperanza de llegar a picar algo.

Increible, hice en menos de diez minutos el trayecto que de día me toma media hora.

Hay autos estacionados en toda la cuadra, excepto frente a las cocheras: las opciones son estacionar en la mano contraria o hacerlo tapando la entrada de la casa de mis tíos. Elijo la segunda y después de intentar entrar y volver a salir un par de veces, el auto queda estacionado más o menos donde debería. Camino por detrás del auto. La vereda en esa parte es extremadamente alta, tanto que para llegar desde la calle hay que subir una especie de escalón de un metro: doblo la rodilla y me impulso hacia arriba, con tan mala suerte que golpeo con la cabeza un canasto de basura que el Demonio colgó de uno de los árboles.

Siento el golpe, el repentino ardor. Al no saber qué me golpeó, instintivamente llevo mi cuerpo hacia abajo y termino apoyando las palmas de las manos en el suelo.

Me levanto y me toco la cabeza. Con la yema de dos dedos siento como una parte de cuero cabelludo se me levantó. Me miro la mano y está llena de sangre. Alcanzo a tocar el timbre y el que me abre es uno de los primos pequeños, uno de doce años. Me mira y después se da vuelta: “¡¡¡El tío Juanjo tiene sangre en la cara!!!”. Siento que me pongo pálido. Me acompañan hasta el baño y cuando me veo al espejo tengo media barba de pintura roja. Un par de manos acompaña la herida hasta abajo del chorro de la canilla y desde mi perspectiva veo como un litro de agua colorada se va al desagüe. “Tenemos que ir a una guardia”, dice alguien y cuando me doy cuenta estoy sentado en un auto camino al hospital más cercano. Presiono una toalla oscura contra la herida y siento como la patilla se me pone dura de sangre reseca.

En la guardia me preguntan mi obra social. Me siento a esperar. Cuando ambos brazos ya se me acalambraron de sostener la toalla me hacen pasar. La doctora escarba en mi cabeza para mirar y hace un gestito de dolor. “Te hiciste un siete, vamos a tener que ponerte unos puntos”. Me acuesto y me ponen anestesia local: “esto puede arder”, advierte. Luego, solo siento las sombras de los movimientos de la doctora. Siento la fuerza que hace para que la aguja atraviese mi cuero cabelludo pero no el dolor del pinchazo, siento como tira del hilo para ajustarlo pero es tan vaga la sensación que ni siquiera llego a contar cuántos son los puntos. “Acá podría hacerle un punto más”, dice la doctora. Y le pide un bisturí a la enfermera. Con ayuda del filo me corta un poco de pelo y completa el que dice es el quinto.

“Ahora la enfermera te va a poner la antitetánica”.

La doctora se va y nos deja solos. Ella mira la orden y dice para los dos con un poco de sorpresa: “ah… no es de las que se ponen en el brazo. Te debe haber dado esta para que haga efecto más rápido”.

Miro a la enfermera abrir el descartable y pienso: “¿Qué culpa tiene?”. “¿Qué culpa tiene la enfermera para tener que verme el culo peludo?”.

Salgo rengueando y vuelvo al auto. Ahora vamos a la farmacia a comprar los antibióticos, el material para higienizar la herida y la antitetánica para reponer la que usaron conmigo. Vamos a una de esas 24 horas. Hay dos personas haciendo cola, un viejo y una chica joven. Veo que alguien más quiere sumarse, así que acelero el paso y ocupo el tercer lugar. El que queda cuarto parece tener mi edad.

Llega mi turno y entrego la orden. El farmacéutico la mira: “Mmm, no che, una letra del nombre de la obra social está tachada, fijate, era una F y arriba le hicieron una D. Vas a tener que volver a que te corrijan la orden”. “¿De verdad?”, le digo con la mejor cara de poco amigo que puedo lograr e inclinando levemente la cabeza hacia delante para que me vea los vendajes.

“Dale loco... ¡es un centímetro de tinta!, ¿no podés darmelos igual?”.

Que sí, que no, retórica va, contra retórica viene. Le digo que los dos somos piezas muy chiquitas en un sistema que solo busca exprimirnos el jugo, que si no nos ayudamos entre tuerquitas, no nos ayuda nadie. Lo convenzo. O al menos yo creo haberlo convencido; es eso o decide atenderme solo por la cola de cinco personas que se formó luego de que estuviéramos discutiendo media hora. No importa, la cuestión es que mientras va recolectando los distintos items de mi lista se frena en uno. Trato de no mirar para atrás pero el murmullo de puteadas de los que están en la cola me empuja contra el blindex. “La antitetánica no dice la concentración”. No tengo idea de lo que me habla. “Si no dice la concentración te tengo que vender la de concentración mínima, pero para un adulto se suele usar la de 500. Tendrías que volver a la guardia y que te lo anoten…”. No termina de hablar. Sabe que después de lo de la obra social mal escrita esto es un detalle. Se acerca con la orden y un teléfono: “Acá está el número, llamá y preguntá”. Yo me atrinchero cerca del cuadradito del blindex para evitar que alguien ocupe mi lugar y llamo rápido, pido con la doctora y obtengo la confirmación. “Si, dice que 500”. Podría haber llamado al 110 y habría sido lo mismo.

El farmacéutico me entrega una bolsita con todo y le pago, pero antes de dejar mi lugar la reviso. “Che, una consulta, esto no es iodopovidona, ¿no?”. “A ver… uh, tenés razón, te estaba vendiendo otra cosa”. Le presto atención a la cara de dormido del farmacéutico y ante la duda vuelvo a revisar lo que me vendió, sobre todo los antibióticos. “Hay una diferencia de cuatro pesos”, me grita. “Bueno, dame unos caramelos de miel”, le contesto. Se queda mirándome. “No, vos me tenés que pagar cuatro pesos más”. “Ah… bueno, dale, sí, sí, no hay problema”. A esa altura ya somos casi compinches con el farmacéutico. Miro el reloj, ya pasó una hora desde que le entregue la orden. Me da el frasquito: iodopovidona. Povidona, povidona...

¡AHHHHHHH!, ya se de dónde me sonaba esa cara. Me doy vuelta. El que siguen en la cola es Guido Pividoni, de la primaria. Esa noche por fin había convencido a una compañera del trabajo y habían terminado en su departamento. Cuando ya estaban acostados ella lo frenó en seco: “No, sin forro yo no cojo”. Pividoni buscó en el cajón y no encontró nada. “Para, aguantame”, le dijo. “Bajo a la farmacia y en cinco minutos vuelvo, vos no te muevas de acá”.

puntos.jpg

Anoche tuve un pequeño accidente que disparó esta historia.

Manuel Kaufmann (Humitos): Lo que nos deja el fracaso

Aunque crean que mi vida es un éxito por la cantidad de proyectos, empresas, fundaciones y organizaciones que he fundado y las diferentes cuentas de banco que no dejan de aumentar diariamente sus activos (?); tengo que decirles algo:

Soy un fracasado

Estuve 4 días (de reloj -diría mi abuela) trabajando en configurar correctamente PAC, WPAD, Polipo/Squid dentro de la Red Libre y Portal Cautivo de PyFi Spot y, no lo logré.

Probé varias configuraciones diferentes y aquí dejo algunos comentarios para en un futuro no caer de nuevo en las mismas ideas:

  1. Polipo no soporta funcionar como proxy transparente

  2. Las únicas funciones soportadas dentro del archivo wpad.dat son las que figuran en su documentación. No se puede utilizar otras funciones que sí están implementadas en los Browsers cuando uno abre la consola de desarrollo. Por ejemplo, yo traté de utilizar XMLHttpRequest y no está disponible.

  3. Una buena forma de debuggear nuestro archivo PAC es utilizar estas herramientas:

    • pacparser
    • En Google Chrome, ingresando a chrome://net-internals/ y luego a la sección de Proxy y Events. Dentro de Events uno puede ver qué archivo wpad.dat está bajando y si da algún error al ejecutarlo.
  4. Para que WPAD funcione a la perfección por DNS debemos configurar las siguientes cosas; teniendo en cuenta que nuestro dominio es "redlibre":

    • Nuestro DNS debe resolver wpad.redlibre a la PC que tiene ese archivo.
    • Nuestro Web Server debe entregar ese archivo.
    • Mediante http://wpad.redlibre/wpad.dat debo poder descargar el archivo wpad.dat. Esto es lo que busca Firefox (lo dice la práctica).
    • Mediante http://wpad/wpad.dat también debo poder descargar el archivo. Esto es lo que hace Google Chrome (lo dice la práctica)
  5. Tinyproxy no tiene función de caché.

  6. La única forma que encontré de hacer un proxy transparente es con Squid y esta regla de iptables. Además, me sigue redirigiendo al Portal para loguearme:

    $IPTABLES -i $IFACE_HOSTAPD -t nat -A PREROUTING -m mark ! \
        --mark 99 -p tcp --dport 3128 -j REDIRECT --to-ports 80
    

    Esto quiere decir, básicamente, que todo lo que entra por $IFACE_HOSTAPD y no está marcado como 99 y es TCP y va al puerto 3128 -> lo redirigimos al puerto 80 de la misma máquina.

  7. Nadie sabe en qué momento los navegadores hacen un GET del archivo wpad.dat. Sin embargo, por lo general lo hacen al abrirse o al forzar su recarga desde algún lugar oscuro de la interfaz. Aunque, por otro lado, Google Chrome lo pide periódicamente cada un cierto tiempo desconocido.

  8. Cualquier cabecera HTTP que tenga que ver con Caché no es respetada por Firefox ni Chrome. Implementé una versión de wpad.dat que era generada con Flask + Jinja2 dependiendo del IP que la solicitaba y no logré hacer que no cachee su contenido utilizando Pragma y Cache-Control de varias formas y combinaciones.

  9. Google Chrome en Linux no "auto descubre" el proxy. Viene con esa configuración deshabilitada (al menos en Xubuntu 14.04). Entonces, para que auto descubra el proxy hay que llamarlo así:

    google-chrome --proxy-auto-detect
    

    Por lo que, tener una "auto configuración" de proxy en una red que muchos van a tener Linux y usar Google Chrome, es una estupidez. Firefox, por default, viene bien configurado.

  10. La función myIpAddress() dentro del archivo PAC devuelve algo muy diferente en Firefox (mi verdadero IP dentro de la red en la que estoy) y Google Chrome (127.0.1.1). Por lo tanto, no es confiable y no debería usarse.

  11. Parece que si instalás un paquete en Linux, Google Chrome comienza a obtener correctamente el IP utilizando la función anterior:

    sudo apt-get install libnss-myhostname
    
  12. Hay una función myIpAddressEx() (notar el Ex en el nombre) que no alcancé a probar porque ya estaba muy hinchado los huevos; pero que supuestamente funciona.

  13. Ah! agregale otro tema al myIPAddress(): los MS Windows 8 te devuelve la dirección de IPV6!!!

    —César Ballardini

  14. El Content-Type del archivo PAC debe ser application/x-ns-proxy-autoconfig porque sino puede ser que algunos browsers no lo utilicen.

  15. alert() y console.log() dentro del archivo PAC no tienen ningún efecto. "No insista".

César me estuvo ayudando muchísimo, sobre todo con las ideas de cómo implementarlo y qué probar para poder llegar a buen puerto. Sin embargo, creo que ambos nos cansamos de dedicarle tiempo y esfuerzo a algo que está demasiado mal implementado y se rompe por todos lados. Sinceramente, creo que no hay un standard bien creado.

PAC y WPAD anda si lo ponés en una maceta y no dejás más que una plantita a la cual cuidas con mucho esmero, y cuando crece la arrancás para que no sea diferente.

—César Ballardini

Y yo me despedí de él así:

Te lo digo así: PAC, WPAD, Google Chrome, Firefox e Internet Explorer se pueden ir bien a la mierda. No puedo creer que esta gente haya inventado una tecnología tan pero tan mala para auto-configurar un proxy de mierda. Que no respete estándares y que sea tan difícil de debuggear.

Acordate bien de esto: ¡estos tipos son unos hijos de puta!

—Manuel Kaufmann

Entonces, borré todo lo que hice, desinstalé Polipo, Tinyproxy y Squid. Además, borré el archivo wpad.dat y mandé todo al carajo. No tiene sentido implementar algo que es tan inestable. Para lo único que simple todo esto es para tener algo demasiado-muy sencillo, esa plantita a la que hace referencia César.

Espero que la siguiente persona que quiera configurar PAC y WPAD llegue a este artículo antes de aventurarse en esto y terminar siendo un fracasado más.

Facundo Batista: El rumbo tan temido


Me gustó mucho la editorial de Eduardo Aliverti, en Marca de Radio del sábado pasado.

Me gustó porque se explaya un poco en conceptos que comparto, pero bien contado, mostrando lo que me parece que sería el rumbo si gana la derecha (a.k.a. Macri) en Argentina.

Acá pongo unos parrafitos centrales, pero pueden acceder al texto completo o incluso al audio.

Lean, por favor, que al final del post hago un par de preguntas...

Van a devaluar a lo pavote para recomponer la maximización de la renta agropecuaria exportadora. Van a satisfacer a una burguesía que es local, no nacional. Van a bajar la demanda por vía fiscal y monetaria, van a desregular el mercado cambiario, van a producir la caída del salario real, van a destruir a las pequeñas y medianas empresas, aumentará el desempleo y el trabajo informal y al final de la película que ya vimos y sufrimos chiquicientas veces van a reprimir y se fugarán de nuevo en helicóptero pero con su plata bien pipona.

Los científicos volverán a lavar los platos, a los pobres les mantendrán la AUH pero la cobrarán el día del arquero porque desfinanciarán al Estado como motor del consumo, los sectores medios se encantarán con ese comienzo de dólar para todos para más tarde o más temprano ir a reventar las puertas de los bancos, las empleadas domésticas tendrán que cantarle a Gardel en el reclamo de sus derechos adquiridos, los que tienen una pyme de producción quedarán en la lona por invasión de importados y los que la tienen de servicios sufrirán que no les pueden pagar la cuota o la tasa de lo que sea porque la gente se quedó sin laburo.

La inflación descenderá, eso sí, pero entonces habrá de preguntarse, otra vez, créase o no, para qué sirve que baje si no hay ni salario real ni empleo. Habrá ese período inicial de espejitos de colores porque, seguro, aparecerán los dólares que tienen guardados en las silobolsas (unos 10 mil millones, según cálculos aceptados por interesados y especialistas) y, grandemente probable, los que provengan de un nuevo endeudamiento internacional para engordar reservas.

No es tan sencillo como se lo expresa porque hay también reservas que no son monetarias sino sociales, y aun cuando ganaran en las urnas tendrán enfrente a una potencia movilizadora, combativa, nada despreciable.

Pero el rumbo es ése.

Si llegaron hasta acá, gracias por acompañarme :)

Entonces, creo que todos caemos en tres alternativas, luego de haber leido estos párrafos...

  • Aliverti está equivocado, las cosas no van a ser así si gana Macri
  • Está en lo cierto, y es un bajón
  • Está en lo cierto, y es el modelo ideal de país ideal

A mí me parece (como anticipé al comienzo), que está en lo cierto, y que es un bajón.

Aunque Scioli no me representa, y creo que habría que marcarle la cancha muy bien, me parece que más o menos va a seguir llevando el país por el modelo de los últimos años. A Macri, sin embargo, le tengo pavor.

Vos, ¿de qué lado estás?

GiLgAmEzH: HowTo (stress)test a website with Apache Benchmark

Hoy por la mañana @reydelhumo queria probar un sitio que tiene en una raspy, yo le recomendé que use ab para hacer algunas pruebas básicas de load.

Usar ab es muy simple, pero es mucho más lindo poder hacer gráficos de los resultados, así que aproveché el momento para armar este post.

El objetivo es poder hacer varios tests contra una URL usando diferentes valores de concurrencia/cantidad de requests y gráficar la salida.

Primero hay que ejecutar las pruebas con ab:

ab -c 3 -n 100 -v 2 -g out1.tsv -H "Accept-Encoding: gzip,deflate"  http://python.org.ar/

Esa configuración significa:

  • -c 3: concurrencia 3
  • -n 15: 15 request
  • -v 2: verbose (muestra los headers)
  • -g out1.tsv: salida para gnuplot
  • -H -H "Accept-Encoding: gzip,deflate" Hacer requests con gzip (igual que cualquier browser)

La idea es repetir N veces la prueba con los mismos parametros renombrando outN.tsv.

Yo ejecuté tres pruebas:

/tmp  ll out*.tsv
-rw-r--r-- 1 gilgamezh users 4934 Oct 31 11:26 out1.tsv
-rw-r--r-- 1 gilgamezh users 4930 Oct 31 11:26 out2.tsv
-rw-r--r-- 1 gilgamezh users 4936 Oct 31 11:27 out3.tsv

Cada una nos da una resumen con una salida, pero mucho mejor ver un gráfico. Con gnuplot es muy simple.

Yo uso un template que edito cada vez:

# output as png image
set terminal png

# save file to "benchmark.png"
set output "benchmark_python.org.ar.png"

# graph title
set title "Benchmark en python.org.ar"

# aspect ratio for image size
set size 1,1

# enable grid on y-axis
set grid y

# x-axis label
set xlabel "Request"

# y-axis label
set ylabel "Response Time (ms)"

# plot data from bench1.tsv,bench2.tsv and bench3.tsv using column 10 with smooth sbezier lines
plot "out1.tsv" using 10 smooth sbezier with lines title "Benchmark 1:", \
     "out2.tsv" using 10 smooth sbezier with lines title "Benchmark 2:", \
     "out3.tsv" using 10 smooth sbezier with lines title "Benchmark 3:"

Es un poco precario porque hay que editarlo a mano con el nombre de los .tsv. Algún día me voy a tomar el tiempo de automatizar todo. ;)

lo guardo como gnuplot.template y ejecuto:

gnuplot gnuplot.template

Y listo! tenemos nuestro gráfico. (sí hay que tener gnuplot instalado. en Arch el paquete se llama python-gnuplot)

/images/benchmark_python.org.ar.png

Por ejemplo la conclusión de esta prueba es que python.org.ar necesita un caché de frontend :)

Juanjo Conti: Goodreads review: Mas cuentos de los viudos negros (Isaac Asimov)

Muy entretenido. Muy Asimov.
En la edición pirata/epub que leí en el celular, el cuarto cuento estaba mal editado y lo pasé. El último me pareció muy denso y salté las últimas páginas :D Cada cuento tiene un epílogo con comentarios del autor. Esto es, tal vez, lo más interesante del libro.
Debería haber empezado por el primero de los libros de la saga, pero el autor dice que no es necesario.

Rating: 3/5

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

Facundo Batista: Relación costo beneficio


Acabo de llegar a una conclusión, de esas apuradas, donde la certeza se ve reforzada por el no tan completo análisis científico que implica una corazonada.

La comida que más beneficio me da en función del costo (precio de los componentes, complejidad del laburo y tiempo de cocinero) es el pollo al horno con cebolla.

El proceso de armado del plato es, obviamente, sencillo.

Cómprese un par de "patamuslos" en la pollería amiga. Si es de pollo de campo, mejor. Yo en Italia lo hacía con pavo, y estaba igual de bueno. Cómprese cebolla. Se asume que en casa hay aceite neutro (girasol, ponele), sal y pimienta.

(se escuchan ruidos de frenada) Perá, ¿qué? ¿Nada más? No, nada más.

Agárrese una fuente, póngase un poco de aceite en la base (como para que no se pegue, apenas), acomódense las presas de pollo así nomás. Pélese y córtese las cebollas en partes grandes (si son cebollas chiquitas, en mitades; si son medianas, en cuartos; si son grandes, en octavos; y así). Revoléese las cebollas así nomás en la fuente, entre los huecos dejado por el pollo.

Métase en el horno, ya caliente. Una hora. Dese vuelta un poco todo. Salpiméntese. Dejar un rato más hasta que quede doradito doradito. Ante la duda, dejar un rato más.

Disfrútese.

Lleva menos laburo hacer esta comida para cuatro que lo que me costó hacer este post en el tiempo verbal pelotudo de ese pseudo presente-imperativo-en-tercera-persona que no sé como se llama.

Marcos Dione: ayrton-0.6

Almost two months since the last release, and with reason: I've been working hard to define remote()'s semantics. So far this is what there is:

  • Global and current scope's local variables can be used in the remote code. This includes envvars.
  • Changes to the local variables return to the local code.
  • Execution is done synchronously.

What this means is that if we had the following code:

[block 1]
with remote (...):
    [block 2]
[block 3]

we have the following:

  • Variables in block 1's scope are visible in block 2.
  • Modification to the local scope in block 2 are visible in block 3.
  • block 3 does not start executing until block 2 has finished.

This imposes some limitations on how we can communicate with the remote code. As it is synchronous, we can't expect to be able to send and receive data from block 3, so the previous way of communicating with paramiko's streams is no longer possible. On the other hand, stdin, stdout and stderr are not transmitted yet between the local and the remote, which means that actually no communication is posible right now except via variables.

Also, because of the way remote() is implemented, currently functions, classes and modules that are going to be used in the remote code must be declared/imported there.

Finally, exceptions raised in the remote code will be reraised in the local code. This two things together mean that any custom exception in the script must be declared twice if they're raised in the remote :(.

But all in all I'm happy with the new, defined semantics. I worked a lot to make sure the first two points worked properly. It took me a while to figure out how to do the changes to the scope's locals after the new values were returned from the remote. I know this is a very specific use case, but if you're interested, here's the thread were Armin Rigo tells me how it's done. You might also be interested in Yaniv Ankin's Python innards.

Finally, check the full ChangeLog:

  • Great improvements in remote()'s API and sematics
    • Made sure local variables go to and come back from the remote.
    • Code block is executed synchronously.
    • For the moment the streams are no longer returned.
    • _python_only option is gone.
    • Most tests actually connect to a listening netcat, only one test uses ssh.
  • Fixed bugs in the new parser.
  • Fixed globals/locals mix up.
  • Scripts are no longer wrapped in a function. This means that you can't return values and that module semantics are restored.
  • ayrton exits with status 1 when the script fails to run (SyntaxError, etc).

More fun times are coming!

Get it on github or pypi!


python ayrton

Roberto Alsina: Brute Force Works

Last ni­gh­t, Juan­jo Conti twee­ted this:

Or, in en­glis­h: "U­sing exac­tly on­ce the di­gi­ts 1,3,4 and 6, and any of the four ba­sic ope­ra­tion­s, ob­tain 24."

I first spent a cou­ple of mi­nu­tes thi­nking about it and then it hit me: the­re is no po­int in thi­nking this sort of pro­ble­m, be­cau­se:

  1. Bru­te for­cing it wi­ll take le­ss ti­me
  2. What you do whi­le "thi­nkin­g" it is sort of la­me, is­n't it?

So, he­re is a mo­re-o­r-­le­ss ge­ne­ral so­lu­tion for any of the­se pro­ble­ms.

from __future__ import print_function, division
import itertools

numbers = ['1','3','4','6']
target = 24

# Having '' as an operation allows for solution (14-6)*3, which
# may or may not be valid depending on rule interpretation.
operations =  ['*','/','+','-','']

t1='(({0}{4}{1}){5}{2}){6}{3}'
t2='{0}{4}({1}{5}({2}{6}{3}))'

for nums in itertools.permutations(numbers):
    for ops1 in itertools.combinations_with_replacement(operations, 3):
        for ops2 in itertools.permutations(ops1):
            for t in (t1, t2):
                s = t.format(*(nums+ops2))
                #print(repr(s))
                try:
                    if eval(s) == target:
                        print(s)
                except (ZeroDivisionError, SyntaxError, TypeError):
                    continue

Of cour­se you can make it sol­ve any pro­blem of this cla­ss by adjus­ting num­bers and tar­ge­t. ­The­re is al­so a po­s­si­ble ex­tra so­lu­tion if eva­l(s) == -ta­r­­get whe­re you just need to add a una­ry - to the ex­pres­sio­n, but who ca­res.

Did I miss so­me­thin­g? Is this rea­lly a ge­ne­ral so­lu­tio­n?

Juanjo Conti: Hoy en La opinión de Rafaela

Hoy a la mañana me llegó un mail de esos que te alegran el día. Un periodista y escritor de Rafaela había encontrado Xolopes en el departamento de su hijo y lo leyó:

Me entusiasmé y publiqué un artículo comentándolo en La Opinión, de aquí. Apareció en la edición de hoy, 26 de octubre, en la sección Información General, con foto.

Aquí la parte principal del texto y el link para leerlo online:

XOLOPES: VIAJE AL ENTRETENIMIENTO CON PROFUNDIDAD

“Xolopes”, de Juanjo Conti (edición 2014, de Automágica (Santa Fe), de 100 páginas) es una muy entretenida novela que, además de ser interesante, atrapa en todas las líneas de su contenido, cuenta historias y leyendas de mayas y aztecas, y muestra lugares mediante fotografías y gráficos de recorridos.

La parte central de su argumento son los acontecimientos de un viaje a México por parte de una pareja, contados por diferentes personajes, apareciendo sus voces alternativamente en pequeños sectores de pocas líneas separados por una numeración continuada, al modo de los libros de Eduardo Galeano (El libro de los abrazos, por ejemplo), pero la originalidad de Juanjo Conti va mucho más allá: las páginas no están numeradas; alude con frecuencia a la palabra “revolución” y la escribe tachada y a continuación dice “rebelión”, como si hiciera una corrección a un borrador; define su concepto de novela; incluye recetas, al modo de “Como agua para chocolate” y, finalmente, adopta como base narrativa la libertad que instaló Cortázar en “Rayuela”.

Juanjo Conti entiende y muestra cómo la escritura es juego, vida y pasión (y, sobre todo, libertad).

Lleva la línea argumental con precisión y apertura de enfoques y la cierra con seguridad, dejando un mensaje claro donde justifica el título de la obra. Se percibe llegando al final que se ha leído una novela sutil y elegantemente elaborada, con control de vocabulario, la sorpresa y la acción. Queda claro que sólo el autor sabe dónde están la verdad y la realidad de lo que cuenta. Para entretener cabalmente, Conti apela a la inteligencia del lector.

“Paseando con su camiseta de la selección Argentina de fútbol, se jacta de gran regateador por haber pagado dos dólares por un imán que le ofrecían a cinco. Y pagó sesenta por un estuche impermeable para la cámara de fotos que se llenó de agua del mar Caribe en la primera inmersión” (título 58).

En el título 79 hace una definición de lo que implica su obra. Dice que “lo mejor que le puede pasar a una novela como ésta (…) (que) intenta ser un fresco de un espacio y un tiempo (…) es tener un final que tome toda la paja de relleno y la prenda fuego”.

Hugo Borgna

Especial para “La Opinión”, de Rafaela

http://diariolaopinion.com.ar/noticia/77049/viaje-al-entretenimiento-con-profundidad

PS: ya pedí a un amigo que vive en rafaela que me guarde una copia en papel de recuerdo.