Armando un grupo de trabajo para CDPedia

Estoy armando un grupo para trabajar en CDPedia. Algo por un período corto de tiempo, pero semi-intensivo, que traiga tanto beneficios para las personas que participan, como para el proyecto en sí.

Es una especie de experimento, mitad técnico, mitad social.

CDPedia: la wikipedia offline

Digo que tiene beneficios para les participantes, porque pueden...

  • aprender Python nivel básico / intermedio, o mejorar el nivel que tienen
  • ganar experiencia de trabajo en grupo, tanto remoto como presencial
  • aprender herramientas como control de versiones, manejo de issues
  • conocer prácticas modernas de desarrollo (tests, pep8, git, colaboración grupal)
  • tener una experiencia de trabajo como un "profesional de primer nivel"

Todo esto tutelado/guiado por mí y muy probablemente por alguien más, en un ambiente amigable y seguro.

Los beneficios para el proyecto son claros, ¡gente trabajando en el mismo! Pero para ser puntuales, estoy tratando de conseguir:

  • modernización del código (virtualenvs, flake8, inglés)
  • hacer el proceso y el código más robusto
  • normalizar los logs
  • migrarlo a Python 3 (legacy python debe morir!)
  • bug fixing simple y relevación de pendientes

Digo que es por un período corto de tiempo porque es con objetivos puntuales, con la idea de cumplir con esos objetivos en un plazo determinado. Por ejemplo, tres meses. O cuatro, a lo sumo. La idea es arrancar a mediados de Marzo 2020.

Al mismo tiempo es semi-intensivo: la idea es comprometerse a trabajar unas pocas horas por semana en el proyecto. Y juntarse virtualmente y presencialmente algunas veces. Acá la palabra en clave es "compromiso".

E.T. -- CDPedia -- Casaaa...

Entonces, ¿tenés ganas de participar? El costo monetario es cero, ¡pero no es gratis! O sea, no hay que pagar nada, pero (ya debería ser obvio a esta altura) hay que trabajar. Comprometerse.

Puntualmente, te estarías comprometiendo a:

  • meterle entre 4 y 10 horas de trabajo por semana
  • tener disponibilidad para algunas reuniones: una grupal de una hora (virtual, via hangout) una vez por semana, en día de semana, alrededor de las 18 o 20 horas, una 1 a 1 conmigo, de 15 minutos (virtual, via hangout) una vez por semana, en día de semana, horario a coordinar con cada une, y una presencial una vez por mes, siempre un sábado, en CABA, mañana y tarde
  • comportarte bajo el código de conducta de Python Argentina
  • tener una cuenta de Telegram ya que la coordinación/interacción del grupo será por ese medio
  • escribir un par de párrafos al final de todo el proceso contando la experiencia

Detalle con respecto a horas por semana y disponibilidades: la idea es coordinar lo máximo posible los días que nos vengan mejor a todes, y obvio que tiene prioridad si hay algún viaje, exámenes de la facultad, etc. Otro detalle con respecto a la reunión grupal en CABA: la idea es tener (al menos parte de) los viáticos cubiertos, no que les implique un gasto.

El proceso de selección está en marcha: si te interesa por favor llená este form, que voy a hacer una selección muy puntual. No hay requerimientos específicos, o niveles que cumplir. Sí tenés que tener ganas. El grupo de trabajo sería pequeño, pero no dejes de anotarte si te interesa esta aventura.

Hay tiempo hasta el miércoles 26 de Febrero (inclusive), voy a comunicar los resultados unos días después.

Comentarios Imprimir

Muchas series (y algunas pelis)

Estuve viendo banda de series, no tantas películas. No sé bien por qué, tampoco importa demasiado.

Una que había visto casi toda pero me faltaba la última temporada era Game of Thrones. Es que habíamos vuelto a arrancarla con Moni, desde la primera, y llevó tiempo. A mí la última temporada, y el cierre en general, me parecieron correctos. No es el final del siglo, pero tampoco es la serie del siglo. O sea, el final está acorde con la serie. Entiendo que mucha gente quedó decepcionada (¿esperaban demasiado?), no fue mi caso.

Otra que vi entera fue True Detective. La primer temporada es genial, el laburo de Matthew McConaughey es deslumbrante. Las otras dos temporadas están muy bien, aunque no al nivel de la primera (y son historias independientes, pueden verlas por separado).

Continúo con una que tuvo mucha repercusión: Chernobyl. Me pareció super bien hecha. Escuché muchos comentarios sobre como "dejaba mal parado a los rusos" por el control de la información y eso. Para mí tiene sentido, y al respecto no creo que la URSS haya sido o sea peor que USA...

Las últimas dos que vi completas son más de ciencia ficción. Humans muestra como sería la convivencia con androides muy parecidos a nosotros, qué los hace o deja de hacer humanos, y cómo reaccionaría la sociedad toda. Counterpart nos cuenta sobre la situación de estar en contacto con un universo paralelo no del todo igual, pudiendo ir, venir, cambiar información. La primera es más personal, la segunda es más de espías, pero ambas muestras situaciones sociales hipotéticas. Recomiendo la primera, especialmente si la pregunta sobre qué es ser humano les es interesante. La segunda zafa, véanla si el factor de que sea de espías les suma.

Después sigo con Vikings. Ya vi todas las que salieron menos la última última temporada. Está bien. Es larga. Me molesta la estúpida dicotomía de "violencia sí sexo no". O sea, está bien mostrar como a uno le cortan la cabeza y la sangre salpica todo, pero está mal mostrar una teta incluso al amamantar, ni hablemos de desnudos eróticos, ¡o sexo!

También estoy viendo Dirk Gently's Holistic Detective Agency. Muy bizarra, muy divertida. La primera temporada es genial, acabo de arrancar la segunda y última.

Y para terminar, estoy con un clásico: The Sopranos. Ya terminé la tercer temporada. ¡Es muy buena! Un espectáculo como pinta cada personaje, y hay muchos que valen la pena. No sé bien por qué no la había visto antes, me la debía.

Series, muchas series

En fin, ¡películas!

  • 27: The Cursed Club: -0. Sabía que iba a ser bizarra, no decepciona en ese sentido; es divertida por partes, pero después por querer hacerla exagerada, es berreta. Notable lo MAL equalizada que está a nivel de sonido, todo lo que es efectos especiales, altísimo, todo lo que es diálogo, bajísimo, ¿cómo puede ser?
  • Ahora o nunca: +0. Simpática comedia de enredos.
  • Alita: Battle Angel: +0. No deja de ser una de "peleas entre robots", pero tiene todo un trasfondo interesante y está bien hecha.
  • Annihilation: +0. Esta buena la historia, el concepto base (nunca lo había leido), y la implementación de la peli en sí; un poco volada pero lo amerita.
  • Apprentice: -0. Debo dejar de darle oportunidades a pelis clase B argentinas :p
  • Future World: -1. Mad Max berreta.
  • Gun Shy: -1. No la terminé de ver, me aburrió bastante y me molestó el trato hacia Chile.
  • Hotel Artemis: +0. Violenta, futurista, intrigante. Está bueno como maneja la multiplicidad de historias. Algunos toques divertidos.
  • Impulse: +?. Es una serie! La anoté donde corresponde...
  • Incredibles 2: +1. Divertida, y con planteos interesantes. Muy buena continuación de la primera. Sin embargo no tiene mucho más para dar, creo, espero que no la quemen con mil continuaciones (como Toy Story).
  • The House with a Clock in Its Walls: +0. Super bizarra pero muy divertida, recomendada para chiques no tan chiques.
  • The Shape of Water: +1. Una hermosa canción de amor.
  • Tomb Raider: +0. Es lo que promete, una peli de acción. Pensé que la historia sería más o menos la misma que la del 2001, pero no, es como su precuela...
The Shape of Water

Y las nuevas anotadas para ver. Pocas, de nuevo pocas. ¿Aparecen pocas que me interesen, o me entero poco yo? Me sigue faltando una buena fuente de trailers...

  • The Platform: (2019; Horror, Sci-Fi, Thriller) A vertical prison with one cell per level. Two people per cell. One only food platform and two minutes per day to feed from up to down. An endless nightmare trapped in The Pit.::Chockys [D: Galder Gaztelu-Urrutia; A: Ivan Massagué, Zorion Eguileor, Antonia San Juan]
  • The Heist of the Century: (2020; Comedy, Crime) In 2006, a group of thieves performed what is considered one of the most famous and smart bank heists in the history of Argentina when they rob the Banco Río branch in Acassuso.::Binquin_Black [D: Ariel Winograd; A: Guillermo Francella, Diego Peretti, Luis Luque]
  • Joker: (2019; Crime, Drama, Thriller) In Gotham City, mentally troubled comedian Arthur Fleck is disregarded and mistreated by society. He then embarks on a downward spiral of revolution and bloody crime. This path brings him face-to-face with his alter-ego: the Joker.::Don Draper 101 [D: Todd Phillips; A: Joaquin Phoenix, Robert De Niro, Zazie Beetz]
  • Marriage Story: (2019; Comedy, Drama, Romance) Noah Baumbach's incisive and compassionate look at a marriage breaking up and a family staying together.::Netflix [D: Noah Baumbach; A: Adam Driver, Scarlett Johansson, Julia Greer]
  • Parasite: (2019; Comedy, Crime, Drama, Thriller) All unemployed, Ki-taek and his family take peculiar interest in the wealthy and glamorous Parks, as they ingratiate themselves into their lives and get entangled in an unexpected incident.::CJ Entertainment [D: Bong Joon Ho; A: Kang-ho Song, Sun-kyun Lee, Yeo-jeong Jo]
  • Black Widow: (2020; Action, Adventure, Sci-Fi) A film about Natasha Romanoff in her quests between the films Civil War and Infinity War. [D: Cate Shortland; A: Florence Pugh, Scarlett Johansson, Robert Downey Jr.]
  • Free Guy: (2020; Action, Adventure, Comedy, Sci-Fi) A bank teller discovers that he's actually an NPC inside a brutal, open world video game. [D: Shawn Levy; A: Taika Waititi, Ryan Reynolds, Jodie Comer]
  • Frequently Asked Questions About Time Travel: (2009; Comedy, Sci-Fi) While drinking at their local pub, three social outcasts attempt to navigate a time-travel conundrum.::Anonymous [D: Gareth Carrivick; A: Chris O'Dowd, Marc Wootton, Dean Lennox Kelly]

Finalmente, el conteo de pendientes por fecha:

(Jul-2014)    5   1
(Nov-2014)   22   7
(Feb-2015)   13  10
(Jun-2015)   15  13  11   1
(Dic-2015)   19  19  18   6   1
(May-2016)   26  25  23  21   9
(Sep-2016)       19  19  18  14   1
(Feb-2017)           26  25  23  21   9   1
(Jun-2017)               23  23  21  18   5
(Dic-2017)                   19  19  18  16   5   2
(May-2018)                       22  22  22  17   9
(Sep-2018)                           12  12  12  10
(Mar-2019)                               13  13  13
(Ago-2019)                                   10  10
(Feb-2020)                                        8
Total:      100  94  97  94  89  84  79  69  57  52
Comentarios Imprimir

Numeración de los contactos del teléfono

Hace rato me pasaba que cuando recibía llamadas en el celular, en la mayoría (no todos) de los casos me mostraba el número que me llamaba, pero no el contacto correspondiente (teniendo cargado ese número en mi lista de contactos, claro).

El otro día me pasó nuevamente, y me quejé públicamente, y me sugirieron que podía ser por la forma en que estaba anotado el número.

Yo había pensado en eso, pero como a los números los tenía cargado "bien" (entendiéndose por "bien" a lo que indica el PFNN), pensé que era otra cosa. Pero en ese hilo de Twitter me sugirieron una forma de anotar el número, que a priori no tiene sentido porque tenía números "de marcado" (como el 15, o el +, que no forman realmente parte del número), pero decían que funcionaba.

Hice varios experimentos y en efecto, para que el teléfono me reconociera el número entrante, tenía que escribirlo de formas particulares. Probé casi todo, y al final declaré ganador a los formatos +54 9 PFNN (para celulares) y +54 PFNN (para el resto), siendo PFNN el número "real sin detalles de marcado", y esos obviamente para numeración de Argentina.

Con ese formato tengo las ventajas de que el teléfono me reconoce el contacto del número entrante, y que al mismo tiempo yo puedo usar ese número para llamar al contacto, estando dentro o afuera del país.

Números, formas de marcado, formatos...

¿El problema? Obvio que no iba a corregir todos mis contactos a mano. Como los contactos del teléfono los tengo en una cuenta de Google, decidí hacer un pequeño script que lo haga automáticamente, no sin cierto pesar porque las APIs de Google dejan mucho que desear.

Bah, no es que las APIs en sí sean malas. A veces son complicadas o rebuscadas, pero no más. El inconveniente es que son muchas, van cambiando con el tiempo, y la mayoría de la documentación es pobre, está desactualizada, tienen ejemplos que no funcionan, etc.

Pero me puse, y luego de revisar mil páginas, pelearme un poco, leer código fuente, probar distintas alternativas, y eso, terminé haciendo este programín que efectivamente baja toda la info de mis contactos, procesa los números de teléfono, y cuando corresponde los vuelve a grabar en la nube.

Regla número 1: evitar en lo posible laburar a mano

Péguenle una mirada al código ese, y pruébenlo con el cuidado correspondiente, pero debería funcionar. Les dejo algunos consejos con respecto a esta API de contactos en particular, por si quieren hacer algo parecido...

Antes que nada, vayan a esta versión, que ya autentica con OAuth, porque la forma vieja (con usuario y clave) ya está apagada. Van a tener que crear un proyecto, y poner los client_id y client_secret correspondientes en el script, luego la primera vez que lo ejecuten van a tener que darle permisos a través del navegador (es bastante automático, no tienen que hacer nada raro), y las próximas veces va a reusar esos permisos.

Tengan en cuenta que ese permiso es en función del scope que elijan (sólo lectura, que es una buena forma de empezar teniendo la seguridad que no van a romper nada, o lectura/escritura). Si autentican con un scope y luego lo cambian, borren el auth_info.dat así el script autentica nuevamente con el scope cambiado.

Entonces, les decía que la API está descripta acá, pero está contada de forma más genérica acá. Ojo que faltan ejemplos de Python, y lo que muestra de "Protocolo" y de "Java" no se corresponden entre sí.

En ese sentido me sirvió mucho esta referencia de la API a nivel Python. Y ojo con los ejemplos que hay por ahí, incluso los más oficiales y actualizados que encontré tenían errores en los imports o en las funciones que llamaban.

En fin. Si van a hacer algo parecido, arranquen del programa que ya dejé andando, y modifiquen desde ahí. Que les aproveche.

Comentarios Imprimir

Finalmente me fui de gVim

Finalmente, luego de mucho tiempo, me fui de gVim, el Vim integrado a interfaz gráfica con base en Gnome.

Me funcionaba, y lo usaba a diario, todo el tiempo, pero me pasó varias veces que quería mejorar algo, modernizarlo, agregarle un plugin tal, toquetearlo en algo puntual, y me trababa. Es que el proyecto no estaba del todo activo y había quedado un poco antiguo. Además ahora estoy basado en KDE, y era medio a contramano seguir instalando mucho de Gnome solo para gVim.

Y ahora me liberé, dejé el pasado, me renové, soy un hombre nuevo.

Bueno, tampoco para tanto, Carlos

Ahora soy un feliz usuario de Neovim. Basicamente un Vim modernizado, con muchos defaults pensados correctamente para este siglo, con un desarrollo activo, y la mar en coche. Si quieren profundizar en qué (y qué no) es neovim, pueden leer sobre su visión acá. Gracias Fisa por insistirme varias veces en hacer el cambio.

Traté un par de veces usar Neovim en el pasado, pero enseguida me chocaba con una limitación de uso bastante específica. Es que Neovim (como el Vim "pelado") cuando los ejecutás desde la terminal te usan esa terminal para su interfaz. A mi NO me gusta eso, yo estoy en la terminal manejando un proyecto o yendo de acá para allá, y en el momento en que abro un archivo, NO quiero que me ocupe esa terminal, sino que se abra en una nueva ventana. Y tiene que ser una nueva ventana, no una nueva pestaña, porque yo quiero poder ver varios archivos al mismo tiempo (y me es importante la ubicación espacial de las distintas ventanas).

Entonces busqué y probé varias "interfaces gráficas para nvim" pero con todas tenía algún problema (fue una exploración poco prolija, no tengo buen feedback para darles en este punto). Así y todo, com Neovim se corre en una terminal, pensé en que cada vez que abra un archivo disparar una terminal nueva con Neovim ahí adentro. Y medio lo solucioné haciendo que vi sea un alias de "abrir una ventana nueva con una consola ahí adentro que me ejecutara nvim editando el archivo que especifiqué", aunque esto me llevó un tiempo porque intenté hacerlo con konsole (de nuevo, KDE) pero crasheaba casi siempre luego de cerrar el editor (!): lo terminé haciendo con gnome-console, que andaba mejor... no me gustó del todo, pero andaba lo suficientemente bien.

Pero en su momento nunca terminé de pasar a Neovim porque me trabé con tratar de hacerle andar flake8, el analizador estático de código Python que yo tengo integrado en gVim, funcionalidad que considero indispensable en el día a día. Por una cosa u otra, no tuve tiempo de seguir probando, y lo abandoné.

Siempre hay otra manera

Luego vino la PyCon 2019, y Fisa dio una lightning talk sobre su famosa configuración para Vim, mencionó que instalar todo era sencillo, y yo me decidí a probarlo. Además volví a pegarle una mirada a ver qué GUI encontraba y me choqué con neovim-qt que funcionó super piola.

Hoy puedo decir que me convertí. Pero el camino no fue sencillo.

Por lo pronto, la instalación de Neovim y neovim-qt es bastante a mano, porque son proyectos muy nuevos y prefiero usar las últimas versiones disponibles. Para Neovim lo que hice fue bajar la appimage de neovim, hacerla ejecutable y moverla/renombrarla a /usr/local/bin/nvim. Y para neovim-qt cloné el proyecto, lo buildeé (instrucciones en el README), y copié el ejecutable a /usr/local/bin/.

Después arranqué con la config de Fisa y empecé a entenderla y agregarle los detalles que yo necesitaba. Luego la cantidad de cambios creció. En un momento me dí cuenta que en algunos casos me resultaba lento y al debuguear era por plugins que no me interesaban, entonces decidí realizar una limpieza de todo lo que no quería. Al final terminé forkeando el proyecto y ahora tengo esta config.

Entonces, luego de instalar Neovim y neovim-qt, todo lo que hago es llevar (o symlinkear) los archivos init.vim y ginit.vim de ese proyecto-config mío a ~/.config/nvim/, abrir un editor y esperar que la magia que armó Fisa instale todos los plugines y deje todo pipícucú.

Y vualá.

Como frutilla del postre, les cuento que con Fisa armamos un grupo de Telegram para ayuda de Vim en español. Que lo disfruten.

Comentarios Imprimir

Lenguaje inclusivo

¡Disclaimer! Esta es mi explicación fundamentada de por qué me parece bien el lenguaje inclusivo, por qué lo uso, y por qué uso la forma que uso.

Es la razón por la que YO lo uso, no intento convencerles a ustedes, cada une habla como quiere :) No intenta ser una justificación de si el lenguaje inclusivo es bueno o no, sólo lo que me convenció a usarlo.

Si quieren leer más sobre el tema les dejo este artículo de El Gato y La Caja, mejor escrito y con el tema mejor analizado que en este mi texto.

Alternativas

Entonces.

A mí siempre me hizo ruido el tema de generalizar al masculino. Aprendimos que era lo correcto, un montón de señores a sueldo de la corona española dicen que está bien, pero siempre me molestó en algún rincón de mi cerebro.

En verdad no tiene sentido generalizar a masculino. Desde un punto de visto puramente técnico, si uno diseñara el lenguaje desde cero, no tiene sentido generalizar al masculino.

Como ejercicio, imaginemos un grupo de personas esperando el colectivo, pasa un auto que pisa un charco y salpica todo.

Si ese grupo fuesen diez mujeres, diríamos "las mojó un auto que salpicó", denotando que son todas mujeres. Si ese grupo fuesen diez hombres diríamos "los mojó un auto que salpicó", implicando que son hombres. Hasta acá todo bien (o no, pero luego llegaremos al no binarismo, sigan conmigo por favor).

Pero si ese grupo son nueve mujeres y un hombre, teóricamente deberíamos decir "los mojó un auto que salpicó". La simple aparición de un hombre en el grupo modifica la expresión y la deja igual que si fuesen todos hombres. Invisibiliza que en el grupo hay mujeres (¡que incluso son la mayoría!).

No tiene sentido. El tema es: ¿qué hacemos para hablar y escribir "mejor"?

Hace muchos años arrancó una movida de escribir con @. "[email protected] mojó un auto que salpicó". Aunque simpática, esa forma de escribir realmente es ilegible. El cerebro no lee "L-arroba-s", automáticamente convierte a esas tres letras en el artículo que el cerebro espera que tenga sentido con el resto de la frase, y en realidad leemos "Los". Además, es impronunciable si leemos el texto en voz alta. Sucede exactamente lo mismo con la x. "Lxs mojó un auto que salpicó". También ilegible e impronunciable, realmente.

Por eso me encantó cuando apareció la forma de deformar las palabras usando la e. "Les mojó un auto que salpicó". El cerebro ahora lee eso como "Les" y no se puede hacer el boludo, al punto que al principio y si no estamos acostumbrados molesta un poco (¡y está bien que moleste!). Y se puede hablar con la e, cartón lleno :)

Otro tipo de lenguaje inclusivo: cartelitos en los baños; izquierda: tipo de cartel que se está popularizando; derecha: foto que saqué yo mismo en Medallia

La otra gran ventaja de esta forma de escribir es que dejamos de lado el binarismo hombre/mujer que implica escribir "Los/as mojó un auto que salpicó", indicando que son hombres o mujeres solamente, y no la multiplicidad de géneros que hay en realidad.

Por otro lado, tenemos que tener en cuenta que el lenguaje inclusivo lo podemos usar cuando hacemos referencia a un grupo de "géneros mezclados" (como los ejemplos anteriores) pero también cuando hacemos referencia a una persona pero queremos ser neutrales con respecto al género (ejemplo: "Le mojó un auto que salpicó", no "La" ni "Lo"), pero NO debemos usarlo para entidades que tengan un sólo género. Está mal decir "Conecté les parlantes al equipo de audio", porque el parlante como entidad tiene sólo género masculino, entonces ahí va "Conecté los parlantes al equipo de audio".

Ejemplo del mal uso que acabo de mencionar

Habiendo dicho eso, demos una vuelta de rosca más: sí está bien usar el género neutro cuando pluralizamos entidades que, aunque individualmente tienen género definido, el grupo no. Ejemplo: "Saqué las puertas y los estantes al patio y les lavé con ganas"... acá el "las puertas" y "los estantes" están bien, porque esas entidades tienen su género bien definido, pero cuando hacemos referencia al grupo completo al final de la frase lo hacemos siendo neutros.

Para terminar, les dejo con algo que no tengo del todo resuelto: la neutralización de aquello que en alguna de sus formas (masculino o femenino) YA usa la e. Ejemplo: "Los atorrantes" es en masculino, "Las atorrantas" es en femenino, ¿cómo neutralizamos el género? Si vamos ciegamente a la e nos queda como el masculino, no estamos neutralizando nada. ¿"Estudiantos"? No sé.

Comentarios Imprimir