Python en español #19: Tertulia 2021-02-09

20/05/2021 2h 6min

Escuchar "Python en español #19: Tertulia 2021-02-09"

Síntesis del Episodio


¿Se pueden usar diferentes versiones de una misma librería en un proyecto? (resumen: ¡No vayas por ahí!). MultiVersion Concurrent Control https://podcast.jcea.es/python/19
Participantes:


Jesús Cea, email: [email protected], twitter:
@jcea, https://blog.jcea.es/,
https://www.jcea.es/. Conectando desde Madrid.


Víctor Ramírez, twitter: @virako,
programador python y amante de
vim, conectando desde Huelva.


Javier, conectando desde Madrid.


Miguel Sánchez, email:
[email protected], conectando desde
Canarias.


Audio editado por Pablo Gómez, twitter:
@julebek.
La música de la entrada y la salida es "Lightning Bugs", de Jason
Shaw. Publicada en https://audionautix.com/ con licencia
- Creative Commons Attribution 4.0 International
License.


[00:52] Prólogo:


FOSDEM https://fosdem.org/.


Escuchar audios previos para ver errores y comentar
"erratas".


[03:07] ¡Tenemos un voluntario para editar el podcast!


Detalles de cómo grabamos las tertulias.


Todo se graba en una sola pista :-(.


RNNoise: https://people.xiph.org/~jm/demo/rnnoise/.


Ideas para automatizar el proceso.






[09:17] Aviso legal de que se está grabando el sonido y que se
va a publicar online.

El audio publicado tendrá un índice en texto, para poder
hacer búsquedas y poder moverse con facilidad entre temas.



[11:22] Errata de la tertulia anterior: No, pipenv
https://pypi.org/project/pipenv/ no puede instalar dos
versiones diferentes de la misma librería.


[13:07] Tormenta de ideas
https://es.wikipedia.org/wiki/Lluvia_de_ideas sobre cómo usar
diferentes versiones de la misma librería en el mismo proyecto.
Conclusión: ¡No vayas por ahí!


Las bibliotecas solo se cargan una vez en el programa,
aunque se hagan muchos import en el código.


sys.modules
https://docs.python.org/3/library/sys.html#sys.modules.


Dependencias transitivas.


Subintérpretes Python. PEP 554:
https://www.python.org/dev/peps/pep-0554/.


Módulos en C: PEP 489 -- Multi-phase extension module
initialization https://www.python.org/dev/peps/pep-0489/.




[22:17] Python 3.10a5. PEP 636 -- Structural Pattern Matching:
Tutorial https://www.python.org/dev/peps/pep-0636/.


¡Más sintaxis nueva!


PEP 617 -- New PEG parser for CPython
https://www.python.org/dev/peps/pep-0617/.




[23:57] Nuitka https://nuitka.net/.

Puede generar un binario que no depende de tener nada
instalado.



[26:02] Volvemos a "Structural Pattern Matching"
https://www.python.org/dev/peps/pep-0636/.

"Switch" con esteroides.



[27:32] Lo importante que fue la modernización de los tutoriales
y ejemplos para ayudar a la migración de Python 2 a Python 3.


PEP 414 -- Explicit Unicode Literal for Python 3.3
https://www.python.org/dev/peps/pep-0414/.


Jesús Cea opina que la migración de Python 2 a Python 3
se hizo mal y ha sido muy traumática.




[30:22] PEP 8 https://www.python.org/dev/peps/pep-0008/.


¿Ajustarse estrictamente a 80 columnas?


Flake8: https://pypi.org/project/flake8/.




[33:22] Mucho cuidado con "python-ideas"
https://mail.python.org/mailman3/lists/python-ideas.python.org/.


Tabulación de código.


La anotación de tipos puede gustar o no, pero de momento es
opcional.


Tema recurrente: ¿Qué es ser pythonico?




[35:12] Ventajas de anotar tipos.


Origen de MYPY: http://mypy-lang.org/.


Aportar información al IDE
https://en.wikipedia.org/wiki/Integrated_development_environment.


Valor a la hora de documentar los tipos en los API
https://en.wikipedia.org/wiki/API.




[39:52] Cryptography https://cryptography.io/en/latest/ y
polémica al integrar módulos en Rust
https://en.wikipedia.org/wiki/Rust_(programming_language)

Comunidad tóxica.



[41:27] Digresión sobre systemd
https://en.wikipedia.org/wiki/Systemd y otras cosas de
sistemas.

¿El cambio por el cambio?



[45:07] El peso de la web está moviéndose otra vez al backend.
¿Qué opciones tiene Python en este area?


El cliente web solo envía eventos al servidor y recibe
cambios al DOM
https://es.wikipedia.org/wiki/Document_Object_Model
enviadas por el servidor.


Abre la posibilidad olvidarnos de JavaScript:
https://es.wikipedia.org/wiki/JavaScript.


ItsNat: https://en.wikipedia.org/wiki/ItsNat.




[51:02] splash https://pypi.org/project/splash/.
Servicio de dibujado de javascript en Python.

AJAX: https://es.wikipedia.org/wiki/AJAX.



[56:07] Integrar Python en otros programas y demonios.

LUA: https://es.wikipedia.org/wiki/Lua.



[57:07] PyOxidizer
https://pyoxidizer.readthedocs.io/en/stable/ y PyO3
https://pyo3.rs/.


Interactuar con otros lenguajes.


Python en Java, interactuando sin dolor: Jython
https://www.jython.org/.




[59:52] ¿Cómo empezamos en Python?


Valor de Python como lenguaje fácil de entender y
pseudocódigo.

SpamBayes: http://spambayes.sourceforge.net/.



Tutorial de Python:
https://docs.python.org/es/3/tutorial/index.html.


bc -l https://linux.die.net/man/1/bc.




[01:05:07] Modificación atómica de ficheros.


En Unix se suele hacer: write + flush + rename.

rename:
https://www.man7.org/linux/man-pages/man2/rename.2.html.



MS Windows eso no funciona.


Python 3.3 añadió os.replace()
https://docs.python.org/3.8/library/os.html#os.replace.


En MS Windows es atómico... casi siempre: Issue8828: Atomic
function to rename a file
https://bugs.python.org/issue8828.




[01:10:02] Combinar fork e hilos en Python es una receta para el
desastre.


fork:
https://www.man7.org/linux/man-pages/man2/fork.2.html.


multiprocessing:
https://docs.python.org/3/library/multiprocessing.html.




[01:11:37] Decorador @overload
https://docs.python.org/3/library/typing.html#typing.overload.


@functools.singledispatch
https://docs.python.org/3/library/functools.html.


¿Qué se ve cuando salta una excepción?


Especializaciones.


Cython https://cython.org/.




[01:17:00] AnyIO
https://anyio.readthedocs.io/en/stable/basics.html.
Unificación de reactores asíncronos.


[01:18:12] "lxml soporta xpath".


Hilo en la lista de correo: "[Python-es] Biblioteca XPATH"
https://mail.python.org/pipermail/python-es/2021-February/037931.html.


lxml: https://lxml.de/.


beautifulsoup4: https://pypi.org/project/beautifulsoup4/.


XPath: https://es.wikipedia.org/wiki/XPath.


Scrapy: https://scrapy.org/.


El buscador de PyPI https://pypi.org/ funciona fatal a la
hora de ordenar por relevancia.




[01:20:02] El valor de estudiar el código fuente ajeno no solo
para aprender de él sino también para descubrir qué bibliotecas
útiles utilizan para añadirlas a tu cajón de herramientas.


Es la documentación última.


Los tests son muy útiles para saber cómo se usa el producto.




[01:22:02] ¿Cómo gestionáis la paginación cuando los datos del
backend cambian? ¿Cómo evitáis repetir resultados o saltaros
datos?


Brainstorming de diversas estrategias.


Berkeley DB: https://pypi.org/project/berkeleydb/.


lmdb: https://pypi.org/project/lmdb/.


Multiversion concurrency control:
https://es.wikipedia.org/wiki/Multiversion_concurrency_control.


Copy on Write:
https://es.wikipedia.org/wiki/Copy_on_write.


Snapshot:
https://es.wikipedia.org/wiki/Copia_instant%C3%A1nea_de_volumen.


BTree: https://es.wikipedia.org/wiki/%C3%81rbol-B.


PostgreSQL: https://www.postgresql.org/.


ZFS:
https://es.wikipedia.org/wiki/ZFS_(sistema_de_archivos).


Normalización y formas normales:
https://es.wikipedia.org/wiki/Forma_normal_(base_de_datos).




[01:48:42] FOSDEM https://fosdem.org/:
Virako recomienda las siguientes:


Some SQL Tricks of an Application DBA - Non-trivial tips for
database development
https://fosdem.org/2021/schedule/event/postgresql_some_sql_tricks_of_an_application_dba/.


Database Disasters and How to Find Them
https://fosdem.org/2021/schedule/event/postgresql_database_disasters_and_how_to_find_them/.


Practical advice for using Mypy - Hidden gems in the typing
system!
https://fosdem.org/2021/schedule/event/python_mypy/.


Escaping the Cargo Cult - How to structure your project
without losing your mind.
https://fosdem.org/2021/schedule/event/python_escaping_cargo_cult/.




[01:52:02] Charla Python Madrid https://www.python-madrid.es/.

TDD - ¿panacea del desarrollo o pérdida de tiempo?
https://www.python-madrid.es/meetings/reunion-febrero-2021-python-madrid/.



[01:54:27] Comentado en la tertulia de la semana pasada: Bugs
sobre "pickle" https://docs.python.org/3/library/pickle.html
en el módulo __main__.
Se trata de un problema conocido.


Ejemplo de código: https://pastebin.com/vGM1sh8r.


Issue24676: Error in pickle using cProfile
https://bugs.python.org/issue24676.


Issue9914: trace/profile conflict with the use of
sys.modules[__name__] https://bugs.python.org/issue9914.


Issue9325: Add an option to pdb/trace/profile to run library
module as a script https://bugs.python.org/issue9325.




[02:00:42] Que te cuenten lo que no funciona es mucho más
interesante.

Postmortem.



[02:02:52] Whoosh:
https://whoosh.readthedocs.io/en/latest/intro.html. ¿Cómo
normalizar las palabras para español?

La palabra "real" Whoosh:
https://www.wordreference.com/es/translation.asp?tranword=whoosh.
Dificultades para buscar el proyecto Python Whoosh
https://whoosh.readthedocs.io/en/latest/intro.html en
internet.



[02:05:48] Final.