<div><br></div><div><div dir="auto">Oleeeee me están entrando unas ganas de ayudar para que podáis contar todas estas cosas !!! </div><div dir="auto"><br></div><div dir="auto">Súper interesante!! Tb podemos hablar de paralelizar código Python en entornos bigdata.</div><div dir="auto"><br></div><div dir="auto">Me parece miel todo lo que estáis escribiendo! Cuando quedamos para organizar algo molón ?</div><div dir="auto"><br></div><div dir="auto">Estela </div><div dir="auto"><br></div><div dir="auto"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El El vie, 29 nov 2019 a las 4:15, Jesus Cea <<a href="mailto:jcea@jcea.es">jcea@jcea.es</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 29/11/19 2:02, Jesus Cea wrote:<br>
> ¿Dónde lo podríamos hacer? ¿Alguien tiene algún contacto en una empresa<br>
> que nos preste una sala? ¿un workcenter?. ¿Ideas?.<br>
<br>
Temas a los que me interesaría asistir:<br>
<br>
- Cualquier cosa que me ayude a ser mejor programador y que no pueda<br>
leer tranquilamente en casa por mí mismo en vez de sentarme una hora<br>
oyendo a alguien hablar de las cosas triviales que puedo leer en 20<br>
segundos en la página de "introducción" del proyecto.<br>
<br>
- Experiencia práctica con código python que no sea trivial.<br>
<br>
- Casi cualquier charla de brainstorming de "he intentado hacer esto y<br>
no consigo que vaya". Las cosas que fallan son mucho más interesantes<br>
que las cosas que funcionan.<br>
<br>
Ejemplos:<br>
<br>
- Cualquier cosa de micropython que no sea copia de un tutorial online<br>
de leer un sensor y mandarlo por MQTT. Que tenga algo de chicha, por<br>
dios, o que sea un uso interesante y no el típico de mandar la<br>
temperatura de la habitación o la humedad de la maceta.<br>
<br>
- Usar micropython para escribir una rutina que se ejecuta en una<br>
interrupción de ese microcontrolador con 32 kbytes de RAM tiene que ser<br>
muy interesante, ¿no? Eso de no poder crear objetos en tiempo de<br>
interrupción y que en Python todo sean objetos, seguro que garantiza<br>
algunas anécdotas para compartir delante de una cerveza y un valium.<br>
<br>
- ¿Que dices que? ¿Que poniendo el decorador "@viper" a esta rutina<br>
micropython genera directamente código ensamblador nativo? Aja... Verás,<br>
dame tres horas y bájate en el móvil el manual de ensamblador de la CPU<br>
del ESP8266 y te cuento. Sí, dame un abrazo, anda. Lo necesito.<br>
<br>
- Cosas LoRa que no sean triviales. Comunicación por radio, por<br>
infrarrojos, por sonido, por señales de humo, por el puñetero<br>
fluorescente del techo. No, por Wifi no me interesa, a menos que tengas<br>
cosas interesantes que contarme sobre los modos de ahorro de energía o<br>
te hayas empollado Wifi direct. Ya se nos ocurrirá cómo justificarlo en<br>
una reunión de "Python Puro", confía en mí.<br>
<br>
- Técnicas de depuración, profiling de CPU, profiling de memoria.<br>
¿Tienes trucos sobre cómo seguir la pista a una petición que involucra<br>
700 microservicios?. Por favor, que no sea "esta librería mola". Si lo<br>
solucionas con algo que no has hecho tú, dime cómo se llama y ya me la<br>
miro yo por Internet.<br>
<br>
- Cualquier cosa sobre casos fallidos: "esta librería mola mucho,<br>
pero..." Me interesan esos peros. Me interesa saber cuándo no usarlo. Me<br>
interesa saber dónde te has dado un hostión, cómo lo analizaste y qué<br>
has aprendido de ello.<br>
<br>
- Aceleración de Python. Todo lo que no sea trivial. Me interesa Numba,<br>
cython, CFFI... Me interesan los casos que dan problemas. Dime que<br>
esperabas poder usar las anotaciones de tipos de python moderno, pero el<br>
código C generado era una mierda. Me interesa saberlo. Me interesa saber<br>
cómo lo has solucionado, o lo que has intentado y el resultado era aún<br>
peor. Me interesa verte la cara cuando me expliques cómo conseguiste<br>
paralelizar esas ecuaciones con numpy, aunque demasiado tarde para<br>
evitar que tu marido te abandonase por falta de atención.<br>
<br>
- Usos interesantes de las novedades idiomáticas de las versiones<br>
recientes de Python. Yo todavía soy ambivalente con el operador "morsa"<br>
de python 3.8. Los F-strings, en cambio, los he adoptado con pasión. Las<br>
dataclasses me han sido indiferentes hasta ahora, pero si me puedes<br>
contar casos de éxito que no sean los que ya vienen en el manual o en el<br>
PEP...<br>
<br>
- "Argparse" mola mucho, pero no consigo especificar esta sintaxis<br>
concreta que tanto me interesa. Bueno, lo conseguí tras invocar a satán.<br>
Ven aquí, hermano, y me lo cuentas. Comparto tu dolor.<br>
<br>
- Trucos que no le has contado a nadie pero que te salvan el culo cada<br>
día. Yo, por ejemplo, siempre meto un hilo "manhole" a cualquier demonio<br>
que se queda funcionando de fondo, para poder conectarme a él e<br>
interactuar de forma interactiva.<br>
<br>
- Pyro. ¿Por qué ni dios usa Pyro?.<br>
<br>
- ¿Persistencia de objetos? Si no es un maldito ORM al uso, me interesa.<br>
Sí, yo también me reí aquella vez que modifiqué un atributo mutable en<br>
un objeto ZODB y se me olvido hacer "_p_changed = 1". No veas que<br>
divertido. Tío, puedes copiarme la idea de objetos "mutable aware" para<br>
automatizar eso si te curras la librería, me la das y me explicas cómo<br>
funciona. Yo gestionaba los tipos mutables creando un objeto proxy<br>
automáticamente en las asignaciones de atributos de las clases<br>
persistentes. Inteligente, ¿eh?. Sí, es un poco pesado cuando conectas<br>
un grafo complejo a un objeto persistente, pero funciona bien. ¿Por qué<br>
sonríes? ¿Que tú has hecho qué?. Pero... Puff... eres el puto amo, tío.<br>
Ahora explícamelo otra vez, por favor. Me has cambiado la vida. Soy un<br>
gusano a tu lado. Respect.<br>
<br>
- Mierda, mi programa necesitas 3 Gigas de RAM y el servidor solo tiene<br>
2 GB de RAM... Uhmmm... pensemos...<br>
<br>
- Usos interesantes de async/await que no sean asyncio tal cual. Por<br>
ejemplo, ¿cómo os apañais para mezclar funciones síncronas y<br>
asíncronas?. ¿Cómo se testea?.<br>
<br>
- Detalles de cómo funciona Python que no se hayan repetido ya mil veces<br>
en mil sitios, como que python no usa todos los cores... a menos que te<br>
lo curres. No me importaría que alguien me explicase cómo funcionan las<br>
diferentes "arenas" en el gestor de memoria o cómo se comunica una señal<br>
que salta en un hilo secundario para que la reciba el hilo principal.<br>
Son cosas misteriosas que nunca he investigado. Y sí, ya sé que eso es<br>
C, pero afectan a mis programas Python.<br>
<br>
- Memory leaks. Nunca habrá suficientes charlas sobre cómo evitarlas en<br>
lo posible y cómo sobrevivir cuando ocurre lo inevitable. Ahora mismo<br>
llevo meses pensando a ratos sobre <<a href="https://bugs.python.org/issue35930" rel="noreferrer" target="_blank">https://bugs.python.org/issue35930</a>><br>
y no veo una forma "buena" de solucionarlo.<br>
<br>
- Sí, no me importa que me expliques con calma esa idea local que ha<br>
surgido en la lista "python-ideas", que yo he descartado tras evaluarla<br>
cinco segundos o menos y que tú crees que es lo mejor del mundo tras<br>
pasarte cuatro días sin dormir dándole vueltas. Igual me convences y,<br>
después de todo, soy Core Developer de Python (aunque no sé muy bien por<br>
qué no me han echado aún).<br>
<br>
- ¿Recuerdas cuando tu rutina decorada con "@functools.lru_cache"<br>
fallaba de maneras misteriosas y esporádicas en entornos multihilo?. Yo<br>
sí, y también me acuerdo de las horas invertidas depurándolo. Espera que<br>
te cuento todos los bugs que se han ido solucionando en ese decorador y<br>
los que aún quedan. ¿Cuántas horas dices que tenemos? Haz pis primero y<br>
trae un bocata y una botella de agua. O un par. Una vacía.<br>
<br>
- Me dejo convencer de que debería usar los tipos abstractos ABS más a<br>
menudo. Que sí, que te dejo que me des la lata con eso.<br>
<br>
- ¿Te has enterado de que ya puedes usar un "continue" en el "finally"?.<br>
Pues sí, novedad de Python 3.8. Lloro de alegría. ¿Por qué no se podía<br>
usar antes? ¿Cómo lo han solucionado?. Si me lo cuentas me ahorro<br>
investigarlo yo.<br>
<br>
- ¿Modificas el bytecode interno de python para inyectar corutinas<br>
transparentes en código síncrono?. Eres un puto enfermo, pero tienes<br>
ideas muy interesantes. Cuéntame más.<br>
<br>
- ¿Por qué está todo dios que no mea con JSON cuando CBOR mola mucho<br>
más, es más compacto y más rápido?. Sí, tiene tipos autodeclarados,<br>
anotaciones, binario nativo sin coste. ¿Ya estás convencido? Bien. Ahora<br>
mira que la librería Python CBOR no permite tipos etiquetados dentro de<br>
tipos etiquetados. Jode, ¿verdad?. Mira el parche que les he enviado.<br>
Tres líneas de código. Observa la elegancia de serializar un grafo de<br>
objetos arbitrarios de forma simple, compacta y autodeclarada. Pickle es<br>
de juguete comparado con esto. Está bien, ¿eh?. ¿Qué opinas ahora de<br>
JSON?. Ya, lo que yo te decía. Ahora pregúntame por qué los autores de<br>
la librería no han incluído aún mi parche tras varios años. Sí, ya, al<br>
menos mi madre me quiere. Algo es algo.<br>
<br>
- ¿A tí también te parece que la librería asyncio es un engendro del<br>
averno apenas un paso por encima de twisted?. Ven aquí, hermano, y<br>
déjame que te hable de "curio" y "trio". ¿Qué no sabes qué tengo en<br>
contra de "asyncio"?. Verás, todo empezó cuando yo mandaba datos a un<br>
cliente de red y el cliente se había caído. Tras eso tres recuerdos<br>
vienen a mi mente: primero, ver como un proceso de 64Kbytes se<br>
transforma en un proceso de 16 gigabytes, lo segundo que recuerdo es ver<br>
como el OOM de Linux aplica mano dura y se carga el proceso que no es<br>
(justo el único proceso imprescindible y a prueba de fallos del sistema)<br>
y mi tercer recuerdo fue la luz y el calorcito de mandar "asyncio" a la<br>
mierda y currarme lo pequeñita funcionalidad asíncrona que necesitaba<br>
completamente a mano. Mas o menos 15 líneas de código. Sí, ahora uso<br>
"trio" cuando me dejan, pero entender cómo funciona un bucle de eventos<br>
async/await "a mano" es la mar de interesante y más fácil y útil que<br>
leerse la documentación de "asyncio" y dispararse en el pie intentando<br>
hacer cosas triviales. Veo que dudas. "asyncio" nunca te ha dado guerra.<br>
Ya... Si entiendes cómo funcionan las corutinas igual luego te preguntas<br>
por qué la gente hace cosas complicadas cuando se pueden hacer fáciles.<br>
Ya, yo tampoco entiendo al género humano.<br>
<br>
- Si me hablas de "machine learning", "deep learning", "big data" o<br>
"blockchain" más te vale haber escrito tú el libro que creo ese campo,<br>
que la prueba de concepto esté en 100% Python y que me la estés<br>
comentando línea a línea. Sino no creo que me puedas contar nada que no<br>
pueda leer yo en 5 minutos online. ¿Que eres una universidad española<br>
que ha hecho una librería de reconocimiento de voz cuyo código no me<br>
puedes enseñar y que sólo reconoce palabras en inglés?... Ya... me<br>
suena. No me interesa, gracias.<br>
<br>
- Perdona, pero usar NLP para analizar si los twits sobre Movistar<br>
tienen sentimientos positivos o negativos es el "print('hola mundo')" de<br>
este campo. No has inventado nada. Es mas, esa librería y el "corpus" de<br>
entrenamiento no los has creado tú. Veamos... vaya, veo que tú también<br>
lees "towardsmachinelearning" y tu código es idéntico al tutorial que<br>
publicaron la semana pasada. ¿Hay algo en tu presentación que me aporte<br>
algo que no me haya proporcionado leer el artículo original que has<br>
fusilado?. Yo también leo los blogs, tío.<br>
<br>
- Esa librería nueva que permite ejecutar código python en un navegador<br>
sin tener que bajar un intérprete en javascript de 30 megabytes tiene<br>
muy buena pinta, pero no me cuentes lo que puedo yo leer tranquilamente<br>
en su página web. Explícame cómo hace lo que hace (que mis estudios de<br>
compiladores e intérpretes sirvan para algo), qué cosas hay que evitar.<br>
Avísame de que no funciona en iOS antes de la versión 13.<br>
<br>
- Sí, ese compilador estático de código Commodore 64 que genera ARM para<br>
la Raspberry PI que te has currado en Python tiene muy buena pinta, pero<br>
no me leas el manual en voz alta. Eso ya lo hice yo cuando se anunció tu<br>
charla. Me interesa mucho más que me expliques cómo usas estructuras de<br>
datos python avanzadas para no tener que meter la traducción de los 256<br>
opcodes uno a uno y cómo propagas la vida del registro de estado para<br>
evitar hacer trabajo que vas a sobreescribir en la instrucción<br>
siguiente. Bien hecho. ¿Cómo gestionas las interrupciones?. ¿Qué haces<br>
con las direcciones de memoria que se corresponden a chips mapeados?.<br>
Espera, que esta tiene trampa... ¿cómo manejas los programas<br>
automodificables? Ah, que es un compilador estático. Es verdad, lo<br>
dijiste al principio. Veo que sabes de lo que hablas. Oye, ¿sabes que<br>
donde pones una cadena de "ifs" puedes usar un diccionario de funciones<br>
y llamarlas directamente?. Sí, ahí, en rutina "dispatch()". Gracias por<br>
enseñarme código. Es bastante elegante y me ha dado algunas ideas que<br>
puedo aprovechar en mi trabajo que consiste en masticar PDFs y añadirles<br>
una marca de agua. ¡No he perdido el tiempo viniendo hoy!.<br>
<br>
-- <br>
Jesús Cea Avión                         _/_/      _/_/_/        _/_/_/<br>
<a href="mailto:jcea@jcea.es" target="_blank">jcea@jcea.es</a> - <a href="http://www.jcea.es/" rel="noreferrer" target="_blank">http://www.jcea.es/</a>     _/_/    _/_/  _/_/    _/_/  _/_/<br>
Twitter: @jcea                        _/_/    _/_/          _/_/_/_/_/<br>
jabber / <a href="mailto:xmpp%3Ajcea@jabber.org" target="_blank">xmpp:jcea@jabber.org</a>  _/_/  _/_/    _/_/          _/_/  _/_/<br>
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/<br>
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/<br>
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz<br>
<br>
_______________________________________________<br>
Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
Python Madrid: <a href="http://www.python-madrid.es/" rel="noreferrer" target="_blank">http://www.python-madrid.es/</a><br>
Madrid mailing list<br>
<a href="mailto:Madrid@lists.es.python.org" target="_blank">Madrid@lists.es.python.org</a><br>
<a href="https://lists.es.python.org/listinfo/madrid" rel="noreferrer" target="_blank">https://lists.es.python.org/listinfo/madrid</a><br>
</blockquote></div></div>