[Py-MAD] Idea: Python puro

Jesus Cea jcea at jcea.es
Fri Nov 29 04:15:07 CET 2019


On 29/11/19 2:02, Jesus Cea wrote:
> ¿Dónde lo podríamos hacer? ¿Alguien tiene algún contacto en una empresa
> que nos preste una sala? ¿un workcenter?. ¿Ideas?.

Temas a los que me interesaría asistir:

- Cualquier cosa que me ayude a ser mejor programador y que no pueda
leer tranquilamente en casa por mí mismo en vez de sentarme una hora
oyendo a alguien hablar de las cosas triviales que puedo leer en 20
segundos en la página de "introducción" del proyecto.

- Experiencia práctica con código python que no sea trivial.

- Casi cualquier charla de brainstorming de "he intentado hacer esto y
no consigo que vaya". Las cosas que fallan son mucho más interesantes
que las cosas que funcionan.

Ejemplos:

- Cualquier cosa de micropython que no sea copia de un tutorial online
de leer un sensor y mandarlo por MQTT. Que tenga algo de chicha, por
dios, o que sea un uso interesante y no el típico de mandar la
temperatura de la habitación o la humedad de la maceta.

- Usar micropython para escribir una rutina que se ejecuta en una
interrupción de ese microcontrolador con 32 kbytes de RAM tiene que ser
muy interesante, ¿no? Eso de no poder crear objetos en tiempo de
interrupción y que en Python todo sean objetos, seguro que garantiza
algunas anécdotas para compartir delante de una cerveza y un valium.

- ¿Que dices que? ¿Que poniendo el decorador "@viper" a esta rutina
micropython genera directamente código ensamblador nativo? Aja... Verás,
dame tres horas y bájate en el móvil el manual de ensamblador de la CPU
del ESP8266 y te cuento. Sí, dame un abrazo, anda. Lo necesito.

- Cosas LoRa que no sean triviales. Comunicación por radio, por
infrarrojos, por sonido, por señales de humo, por el puñetero
fluorescente del techo. No, por Wifi no me interesa, a menos que tengas
cosas interesantes que contarme sobre los modos de ahorro de energía o
te hayas empollado Wifi direct. Ya se nos ocurrirá cómo justificarlo en
una reunión de "Python Puro", confía en mí.

- Técnicas de depuración, profiling de CPU, profiling de memoria.
¿Tienes trucos sobre cómo seguir la pista a una petición que involucra
700 microservicios?. Por favor, que no sea "esta librería mola". Si lo
solucionas con algo que no has hecho tú, dime cómo se llama y ya me la
miro yo por Internet.

- Cualquier cosa sobre casos fallidos: "esta librería mola mucho,
pero..." Me interesan esos peros. Me interesa saber cuándo no usarlo. Me
interesa saber dónde te has dado un hostión, cómo lo analizaste y qué
has aprendido de ello.

- Aceleración de Python. Todo lo que no sea trivial. Me interesa Numba,
cython, CFFI... Me interesan los casos que dan problemas. Dime que
esperabas poder usar las anotaciones de tipos de python moderno, pero el
código C generado era una mierda. Me interesa saberlo. Me interesa saber
cómo lo has solucionado, o lo que has intentado y el resultado era aún
peor. Me interesa verte la cara cuando me expliques cómo conseguiste
paralelizar esas ecuaciones con numpy, aunque demasiado tarde para
evitar que tu marido te abandonase por falta de atención.

- Usos interesantes de las novedades idiomáticas de las versiones
recientes de Python. Yo todavía soy ambivalente con el operador "morsa"
de python 3.8. Los F-strings, en cambio, los he adoptado con pasión. Las
dataclasses me han sido indiferentes hasta ahora, pero si me puedes
contar casos de éxito que no sean los que ya vienen en el manual o en el
PEP...

- "Argparse" mola mucho, pero no consigo especificar esta sintaxis
concreta que tanto me interesa. Bueno, lo conseguí tras invocar a satán.
Ven aquí, hermano, y me lo cuentas. Comparto tu dolor.

- Trucos que no le has contado a nadie pero que te salvan el culo cada
día. Yo, por ejemplo, siempre meto un hilo "manhole" a cualquier demonio
que se queda funcionando de fondo, para poder conectarme a él e
interactuar de forma interactiva.

- Pyro. ¿Por qué ni dios usa Pyro?.

- ¿Persistencia de objetos? Si no es un maldito ORM al uso, me interesa.
Sí, yo también me reí aquella vez que modifiqué un atributo mutable en
un objeto ZODB y se me olvido hacer "_p_changed = 1". No veas que
divertido. Tío, puedes copiarme la idea de objetos "mutable aware" para
automatizar eso si te curras la librería, me la das y me explicas cómo
funciona. Yo gestionaba los tipos mutables creando un objeto proxy
automáticamente en las asignaciones de atributos de las clases
persistentes. Inteligente, ¿eh?. Sí, es un poco pesado cuando conectas
un grafo complejo a un objeto persistente, pero funciona bien. ¿Por qué
sonríes? ¿Que tú has hecho qué?. Pero... Puff... eres el puto amo, tío.
Ahora explícamelo otra vez, por favor. Me has cambiado la vida. Soy un
gusano a tu lado. Respect.

- Mierda, mi programa necesitas 3 Gigas de RAM y el servidor solo tiene
2 GB de RAM... Uhmmm... pensemos...

- Usos interesantes de async/await que no sean asyncio tal cual. Por
ejemplo, ¿cómo os apañais para mezclar funciones síncronas y
asíncronas?. ¿Cómo se testea?.

- Detalles de cómo funciona Python que no se hayan repetido ya mil veces
en mil sitios, como que python no usa todos los cores... a menos que te
lo curres. No me importaría que alguien me explicase cómo funcionan las
diferentes "arenas" en el gestor de memoria o cómo se comunica una señal
que salta en un hilo secundario para que la reciba el hilo principal.
Son cosas misteriosas que nunca he investigado. Y sí, ya sé que eso es
C, pero afectan a mis programas Python.

- Memory leaks. Nunca habrá suficientes charlas sobre cómo evitarlas en
lo posible y cómo sobrevivir cuando ocurre lo inevitable. Ahora mismo
llevo meses pensando a ratos sobre <https://bugs.python.org/issue35930>
y no veo una forma "buena" de solucionarlo.

- Sí, no me importa que me expliques con calma esa idea local que ha
surgido en la lista "python-ideas", que yo he descartado tras evaluarla
cinco segundos o menos y que tú crees que es lo mejor del mundo tras
pasarte cuatro días sin dormir dándole vueltas. Igual me convences y,
después de todo, soy Core Developer de Python (aunque no sé muy bien por
qué no me han echado aún).

- ¿Recuerdas cuando tu rutina decorada con "@functools.lru_cache"
fallaba de maneras misteriosas y esporádicas en entornos multihilo?. Yo
sí, y también me acuerdo de las horas invertidas depurándolo. Espera que
te cuento todos los bugs que se han ido solucionando en ese decorador y
los que aún quedan. ¿Cuántas horas dices que tenemos? Haz pis primero y
trae un bocata y una botella de agua. O un par. Una vacía.

- Me dejo convencer de que debería usar los tipos abstractos ABS más a
menudo. Que sí, que te dejo que me des la lata con eso.

- ¿Te has enterado de que ya puedes usar un "continue" en el "finally"?.
Pues sí, novedad de Python 3.8. Lloro de alegría. ¿Por qué no se podía
usar antes? ¿Cómo lo han solucionado?. Si me lo cuentas me ahorro
investigarlo yo.

- ¿Modificas el bytecode interno de python para inyectar corutinas
transparentes en código síncrono?. Eres un puto enfermo, pero tienes
ideas muy interesantes. Cuéntame más.

- ¿Por qué está todo dios que no mea con JSON cuando CBOR mola mucho
más, es más compacto y más rápido?. Sí, tiene tipos autodeclarados,
anotaciones, binario nativo sin coste. ¿Ya estás convencido? Bien. Ahora
mira que la librería Python CBOR no permite tipos etiquetados dentro de
tipos etiquetados. Jode, ¿verdad?. Mira el parche que les he enviado.
Tres líneas de código. Observa la elegancia de serializar un grafo de
objetos arbitrarios de forma simple, compacta y autodeclarada. Pickle es
de juguete comparado con esto. Está bien, ¿eh?. ¿Qué opinas ahora de
JSON?. Ya, lo que yo te decía. Ahora pregúntame por qué los autores de
la librería no han incluído aún mi parche tras varios años. Sí, ya, al
menos mi madre me quiere. Algo es algo.

- ¿A tí también te parece que la librería asyncio es un engendro del
averno apenas un paso por encima de twisted?. Ven aquí, hermano, y
déjame que te hable de "curio" y "trio". ¿Qué no sabes qué tengo en
contra de "asyncio"?. Verás, todo empezó cuando yo mandaba datos a un
cliente de red y el cliente se había caído. Tras eso tres recuerdos
vienen a mi mente: primero, ver como un proceso de 64Kbytes se
transforma en un proceso de 16 gigabytes, lo segundo que recuerdo es ver
como el OOM de Linux aplica mano dura y se carga el proceso que no es
(justo el único proceso imprescindible y a prueba de fallos del sistema)
y mi tercer recuerdo fue la luz y el calorcito de mandar "asyncio" a la
mierda y currarme lo pequeñita funcionalidad asíncrona que necesitaba
completamente a mano. Mas o menos 15 líneas de código. Sí, ahora uso
"trio" cuando me dejan, pero entender cómo funciona un bucle de eventos
async/await "a mano" es la mar de interesante y más fácil y útil que
leerse la documentación de "asyncio" y dispararse en el pie intentando
hacer cosas triviales. Veo que dudas. "asyncio" nunca te ha dado guerra.
Ya... Si entiendes cómo funcionan las corutinas igual luego te preguntas
por qué la gente hace cosas complicadas cuando se pueden hacer fáciles.
Ya, yo tampoco entiendo al género humano.

- Si me hablas de "machine learning", "deep learning", "big data" o
"blockchain" más te vale haber escrito tú el libro que creo ese campo,
que la prueba de concepto esté en 100% Python y que me la estés
comentando línea a línea. Sino no creo que me puedas contar nada que no
pueda leer yo en 5 minutos online. ¿Que eres una universidad española
que ha hecho una librería de reconocimiento de voz cuyo código no me
puedes enseñar y que sólo reconoce palabras en inglés?... Ya... me
suena. No me interesa, gracias.

- Perdona, pero usar NLP para analizar si los twits sobre Movistar
tienen sentimientos positivos o negativos es el "print('hola mundo')" de
este campo. No has inventado nada. Es mas, esa librería y el "corpus" de
entrenamiento no los has creado tú. Veamos... vaya, veo que tú también
lees "towardsmachinelearning" y tu código es idéntico al tutorial que
publicaron la semana pasada. ¿Hay algo en tu presentación que me aporte
algo que no me haya proporcionado leer el artículo original que has
fusilado?. Yo también leo los blogs, tío.

- Esa librería nueva que permite ejecutar código python en un navegador
sin tener que bajar un intérprete en javascript de 30 megabytes tiene
muy buena pinta, pero no me cuentes lo que puedo yo leer tranquilamente
en su página web. Explícame cómo hace lo que hace (que mis estudios de
compiladores e intérpretes sirvan para algo), qué cosas hay que evitar.
Avísame de que no funciona en iOS antes de la versión 13.

- Sí, ese compilador estático de código Commodore 64 que genera ARM para
la Raspberry PI que te has currado en Python tiene muy buena pinta, pero
no me leas el manual en voz alta. Eso ya lo hice yo cuando se anunció tu
charla. Me interesa mucho más que me expliques cómo usas estructuras de
datos python avanzadas para no tener que meter la traducción de los 256
opcodes uno a uno y cómo propagas la vida del registro de estado para
evitar hacer trabajo que vas a sobreescribir en la instrucción
siguiente. Bien hecho. ¿Cómo gestionas las interrupciones?. ¿Qué haces
con las direcciones de memoria que se corresponden a chips mapeados?.
Espera, que esta tiene trampa... ¿cómo manejas los programas
automodificables? Ah, que es un compilador estático. Es verdad, lo
dijiste al principio. Veo que sabes de lo que hablas. Oye, ¿sabes que
donde pones una cadena de "ifs" puedes usar un diccionario de funciones
y llamarlas directamente?. Sí, ahí, en rutina "dispatch()". Gracias por
enseñarme código. Es bastante elegante y me ha dado algunas ideas que
puedo aprovechar en mi trabajo que consiste en masticar PDFs y añadirles
una marca de agua. ¡No he perdido el tiempo viniendo hoy!.

-- 
Jesús Cea Avión                         _/_/      _/_/_/        _/_/_/
jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
Twitter: @jcea                        _/_/    _/_/          _/_/_/_/_/
jabber / xmpp:jcea at jabber.org  _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.es.python.org/pipermail/madrid/attachments/20191129/f3cc831c/attachment.bin>


More information about the Madrid mailing list