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

Python en español - Un pódcast de Jesús Cea

Categorías:

¿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.