<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>El hilo del laberinto</title><link>https://blog.jcea.es/</link><description>(o quién tuviera una Ariadna a mano)</description><atom:link href="https://blog.jcea.es/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Fri, 26 Jun 2026 01:07:57 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Mi FFmpeg no reconoce correctamente los subtítulos WebVTT</title><link>https://blog.jcea.es/posts/220250323-ffmpeg_webvtt.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Estoy teniendo problemas a la hora de procesar ficheros &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Matroska"&gt;Matroska&lt;/a&gt;
con &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Subt%C3%ADtulo"&gt;subtítulos&lt;/a&gt; en formato &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Veamos un ejemplo:&lt;/p&gt;
&lt;p&gt;La utilidad &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Matroska"&gt;Matroska&lt;/a&gt; &lt;span class="kbd"&gt;mkvmerge -i&lt;/span&gt; reconoce las pistas
correctamente:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Track ID 0: video (AVC/H.264/MPEG-4p10)
Track ID 1: audio (E-AC-3)
Track ID 2: audio (AC-3)
Track ID 3: subtitles (SubRip/SRT)
Track ID 4: subtitles (WebVTT)
&lt;/pre&gt;
&lt;p&gt;En cambio la utilidad &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; &lt;span class="kbd"&gt;ffprobe&lt;/span&gt; tiene problemas para
identificar el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C%C3%B3dec"&gt;códec&lt;/a&gt; a utilizar con los &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Subt%C3%ADtulo"&gt;subtítulos&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
  Stream #0:4: Subtitle: none
    Metadata:
      title           : Completos
      BPS             : 53
      DURATION        : 01:43:10.562000000
      NUMBER_OF_FRAMES: 1471
      NUMBER_OF_BYTES : 41590
Unsupported codec with id 0 for input stream 4
&lt;/pre&gt;
&lt;p&gt;El &lt;span class="kbd"&gt;none&lt;/span&gt; indica que no sabe qué hacer con esa pista.&lt;/p&gt;
&lt;p&gt;Curiosamente mi instalación &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; sí soporta el formato
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="code console"&gt;&lt;a name="rest_code_38eb24ee585747bc9f3b570d68255022-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;jcea@jcea:~$&lt;/span&gt; ffmpeg -codecs &lt;span class="p"&gt;|&lt;/span&gt; grep -i webvtt
&lt;a name="rest_code_38eb24ee585747bc9f3b570d68255022-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;ffmpeg version 6.1.2 Copyright (c) 2000-2024 the FFmpeg developers&lt;/span&gt;
&lt;a name="rest_code_38eb24ee585747bc9f3b570d68255022-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;[...]&lt;/span&gt;
&lt;a name="rest_code_38eb24ee585747bc9f3b570d68255022-4"&gt;&lt;/a&gt;&lt;span class="go"&gt; DES... webvtt               WebVTT subtitle&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;Vemos que mi &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; sí tiene soporte de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Subt%C3%ADtulo"&gt;subtítulos&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt;,
tanto para codificar como para decodificar.&lt;/p&gt;
&lt;p&gt;Investigando por qué &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; 6.1 no reconoce las pistas &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt; de
mis ficheros &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Matroska"&gt;Matroska&lt;/a&gt;, veo que se trata de un problema conocido:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://ffmpeg.org/pipermail/ffmpeg-devel/2021-February/275810.html"&gt;[FFmpeg-devel] [PATCH] Add matroska codec id S_TEXT/WEBVTT for
WebVTT streams&lt;/a&gt;
(I).&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://ffmpeg.org/pipermail/ffmpeg-devel/2021-February/275814.html"&gt;[FFmpeg-devel] [PATCH] Add matroska codec id S_TEXT/WEBVTT for
WebVTT streams&lt;/a&gt;
(II).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La explicación sencilla es que hay dos formas de codificar
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Subt%C3%ADtulo"&gt;subtítulos&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/WebVTT"&gt;WebVTT&lt;/a&gt; y mi versión de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; solo soporta el
formato antiguo, no el nuevo utilizado en los ficheros &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Matroska"&gt;Matroska&lt;/a&gt;
modernos.&lt;/p&gt;
&lt;p&gt;Parece que lo más sencillo sería actualizar a &lt;a class="reference external" href="https://es.wikipedia.org/wiki/FFmpeg"&gt;FFmpeg&lt;/a&gt; 7, pero por
diversos motivos no es algo que pueda hacer a corto plazo.&lt;/p&gt;
&lt;p&gt;¿Qué opciones tengo?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/220250323-ffmpeg_webvtt.html"&gt;Leer más…&lt;/a&gt; (quedan 1 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>FFmpeg</category><category>Matroska</category><category>Multimedia</category><guid>https://blog.jcea.es/posts/220250323-ffmpeg_webvtt.html</guid><pubDate>Sun, 23 Mar 2025 00:54:00 GMT</pubDate></item><item><title>Eliminar la publicidad en Slashdot</title><link>https://blog.jcea.es/posts/20250223-slashdot_publicidad.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Como es evidente para cualquiera que siga este blog, &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Slashdot"&gt;Slashdot&lt;/a&gt; es
una de mis fuentes de información diaria. Lo sigo desde hace
décadas y forma parte de mis rutinas de vida.&lt;/p&gt;
&lt;p&gt;Hace unos días estaba hablando con un amigo sobre esto y me
comentaba que &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Slashdot"&gt;Slashdot&lt;/a&gt; es muy interesante, pero le resultaba
molesta su publicidad. &lt;em&gt;"¿De qué publicidad me hablas?"&lt;/em&gt;, le dije.
Así que me mandó una captura de pantalla.&lt;/p&gt;
&lt;p&gt;Madre mía. No entiendo cómo la gente "normal" puede tolerar cosas
así.&lt;/p&gt;
&lt;p&gt;Yo tengo instaladas un puñado de herramientas que me filtran
prácticamente toda la publicidad, vídeos y sonidos de internet.
Navego tranquilo. Curiosamente este amigo también, pero le sale
publicidad en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Slashdot"&gt;Slashdot&lt;/a&gt;. ¿Qué está pasando?&lt;/p&gt;
&lt;p&gt;Entonces me di cuenta de un detalle: Una de las extensiones que
utilizo en mi navegador para ahorrarme ver toda esa basurilla es
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/UBlock_Origin"&gt;uBlock Origin&lt;/a&gt;, que permite añadir reglas personales.
Comprobando mi configuración, ahí estaba:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
! 2023-05-09
slashdot.org###announcement
&lt;/pre&gt;
&lt;p&gt;¡Ahá!, ahí está. En 2023 añadí esa regla a mi configuración y por
eso no veo publicidad en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Slashdot"&gt;Slashdot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mi amigo añadió esa regla en su &lt;a class="reference external" href="https://en.wikipedia.org/wiki/UBlock_Origin"&gt;uBlock Origin&lt;/a&gt;, en la sección
&lt;span class="kbd"&gt;My Filters&lt;/span&gt;, y ahora es un hombre más feliz.&lt;/p&gt;&lt;/div&gt;</description><category>Configuración</category><category>Publicidad</category><category>Slashdot</category><category>Spam</category><category>uBlock Origin</category><guid>https://blog.jcea.es/posts/20250223-slashdot_publicidad.html</guid><pubDate>Sun, 23 Feb 2025 22:11:00 GMT</pubDate></item><item><title>How to install SmartOS on a datacenter machine</title><link>https://blog.jcea.es/posts/20250209-install_SmartOS.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;This blogpost documents how to install &lt;a class="reference external" href="https://en.wikipedia.org/wiki/SmartOS"&gt;SmartOS&lt;/a&gt; in a datacenter
machine, with no remote &lt;a class="reference external" href="https://en.wikipedia.org/wiki/KVM_switch"&gt;KVM&lt;/a&gt; neither physical access.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/SmartOS"&gt;SmartOS&lt;/a&gt; used to need a &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Compact_disc"&gt;CD&lt;/a&gt;, &lt;a class="reference external" href="https://en.wikipedia.org/wiki/DVD"&gt;DVD&lt;/a&gt; or &lt;a class="reference external" href="https://en.wikipedia.org/wiki/USB"&gt;USB&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/USB_flash_drive"&gt;pendrive&lt;/a&gt; to boot the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Hypervisor"&gt;Hypervisor&lt;/a&gt;
(saving hacks like &lt;a class="reference external" href="https://blog.jcea.es/posts/20161021-smartos_image.html"&gt;Installing/booting SmartOS in/from a harddisk without physical access&lt;/a&gt;), but since late 2020 you can
install it in the &lt;a class="reference external" href="https://en.wikipedia.org/wiki/ZFS"&gt;ZFS&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/ZFS"&gt;ZPOOL&lt;/a&gt; and directly boot from there, using the new utility
&lt;span class="kbd"&gt;piadm&lt;/span&gt;.&lt;/p&gt;
&lt;div class="contents topic" id="contenido"&gt;
&lt;p class="topic-title"&gt;Contenido&lt;/p&gt;
&lt;ul class="auto-toc simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://blog.jcea.es/posts/20250209-install_SmartOS.html#create-a-template-zpool-image" id="id1"&gt;1   Create a template ZPOOL image&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://blog.jcea.es/posts/20250209-install_SmartOS.html#overwrite-and-configure-the-remote-machine-in-a-datacenter" id="id2"&gt;2   Overwrite and configure the remote machine in a datacenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://blog.jcea.es/posts/20250209-install_SmartOS.html#first-smartos-boot" id="id3"&gt;3   First SmartOS boot!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="https://blog.jcea.es/posts/20250209-install_SmartOS.html#things-to-consider" id="id4"&gt;4   Things to consider&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20250209-install_SmartOS.html"&gt;Leer más…&lt;/a&gt; (quedan 7 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>English</category><category>Illumos</category><category>Sistemas Operativos</category><category>SmartOS</category><category>Solaris</category><guid>https://blog.jcea.es/posts/20250209-install_SmartOS.html</guid><pubDate>Sun, 09 Feb 2025 21:01:00 GMT</pubDate></item><item><title>Encender el HDMI de la Raspberry PI aunque no esté conectada a una pantalla</title><link>https://blog.jcea.es/posts/20250119-raspberry_pi_hdmi.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Todo empezó de manera inocente con &lt;a class="reference external" href="https://discourse.osmc.tv/t/audio-related-messages-flooding-the-logs-when-no-hdmi-display-present/108426"&gt;este mensaje&lt;/a&gt;
que escribí en el &lt;a class="reference external" href="https://discourse.osmc.tv/"&gt;foro OSMC&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Title: Audio related messages flooding the logs when no HDMI
display present&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For “reasons”, during the christmas holidays, I am using my
regular OSMC Raspberry PI device abroad with no HDMI cable
connected to a screen. No display at all. This is useful to me
because this device does other functions beside OSMC.&lt;/p&gt;
&lt;p&gt;I noticed these messages flooding
/home/osmc/.kodi/temp/kodi.log:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
2024-12-27 02:00:52.928 T:688      info &amp;lt;general&amp;gt;: CActiveAESink::OpenSink - initialize sink
2024-12-27 02:00:52.929 T:688      info &amp;lt;general&amp;gt;: CAESinkALSA::Initialize - Attempting to open device "default"
2024-12-27 02:00:52.931 T:688      info &amp;lt;general&amp;gt;: CAESinkALSA - Unable to open device "default" for playback
2024-12-27 02:00:52.931 T:688     error &amp;lt;general&amp;gt;: CAESinkALSA::Initialize - failed to initialize device "default"
2024-12-27 02:00:52.931 T:688     error &amp;lt;general&amp;gt;: CActiveAESink::OpenSink - no sink was returned
2024-12-27 02:00:52.931 T:687     error &amp;lt;general&amp;gt;: ActiveAE::InitSink - returned error
2024-12-27 02:00:52.935 T:674     error &amp;lt;general&amp;gt;: failed to duplicate EGL fence fd (EGL_SUCCESS)
&lt;/pre&gt;
&lt;p&gt;The logfile grows fast, possibly filling soon the microSD and
decreasing its lifetime.&lt;/p&gt;
&lt;p&gt;Beside that, maybe unrelated, KODI is using all the file
descriptors (1024 in my case) trying to do “something”. Maybe
related to those logs or not:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
root@osmcpi:/home/osmc/.kodi/temp# ls -la /proc/674/fd|tail
lr-x------ 1 root root 64 Dec 27 02:03 990 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 991 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 992 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 993 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 994 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 995 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 996 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 997 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 998 -&amp;gt; anon_inode:sync_file
lr-x------ 1 root root 64 Dec 27 02:03 999 -&amp;gt; anon_inode:sync_file
&lt;/pre&gt;
&lt;p&gt;Checking /proc/674/fdinfo/ I see this (the same data for any
file descriptor):&lt;/p&gt;
&lt;pre class="literal-block"&gt;
root@osmcpi:/home/osmc/.kodi/temp# cat /proc/674/fdinfo/999
pos:    0
flags:  02000000
mnt_id: 14
ino:    7559
&lt;/pre&gt;
&lt;p&gt;I can not determine what mount id 14 filesystem is, even using
findmnt.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20250119-raspberry_pi_hdmi.html"&gt;Leer más…&lt;/a&gt; (quedan 2 minutos de lectura)&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description><category>HDMI</category><category>Kodi</category><category>OSMC</category><category>Raspberry PI</category><category>Sistemas Operativos</category><guid>https://blog.jcea.es/posts/20250119-raspberry_pi_hdmi.html</guid><pubDate>Sat, 18 Jan 2025 23:49:00 GMT</pubDate></item><item><title>Python 3.13: zlib.error: Error -2 while flushing: inconsistent stream state</title><link>https://blog.jcea.es/posts/20241229-python3_13-gzip.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Tras actualizar a &lt;a class="reference external" href="https://www.python.org/downloads/release/python-3130/"&gt;Python 3.13&lt;/a&gt; y
&lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt;, tal y como se describe en
&lt;a class="reference external" href="https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html"&gt;Problema actualizando mis servicios WSGI a Python 3.13&lt;/a&gt;, empecé a ver estos errores en
el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;log&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Exception ignored in: &amp;lt;gzip on 0x7fd58e3c6fb0&amp;gt;
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/gzip.py", line 373, in close
    fileobj.write(self.compress.flush())
zlib.error: Error -2 while flushing: inconsistent stream state
&lt;/pre&gt;
&lt;p&gt;La &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; no parece tener ningún efecto práctico en el
programa, pero muestra que hay un problema a resolver.&lt;/p&gt;
&lt;p&gt;Lo primero que llama la atención es que el &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Stack_trace"&gt;traceback&lt;/a&gt; no parece
completo, no indica qué código está llamando a la función
&lt;span class="kbd"&gt;close()&lt;/span&gt;. Ese detalle junto al mensaje &lt;span class="kbd"&gt;Exception
ignored in:&lt;/span&gt; indica que se trata de una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; asíncrona que
ocurre en un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Destructor_(inform%C3%A1tica)"&gt;destructor&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para saber qué parte del código está generando esa &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; (de
forma asíncrona), podemos modificar el código añadiendo esto al
principio:&lt;/p&gt;
&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-1"&gt; 1&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-2"&gt; 2&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-3"&gt; 3&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-4"&gt; 4&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-5"&gt; 5&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-6"&gt; 6&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-7"&gt; 7&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-8"&gt; 8&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-9"&gt; 9&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-10"&gt;10&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-11"&gt;11&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-12"&gt;12&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-13"&gt;13&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-14"&gt;14&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-15"&gt;15&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-16"&gt;16&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_aede87f36c9043609f1ddb62975485aa-17"&gt;17&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code python"&gt;&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-1"&gt;&lt;/a&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;inspect&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-2"&gt;&lt;/a&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GzipFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GzipFile&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-3"&gt;&lt;/a&gt;     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-4"&gt;&lt;/a&gt;         &lt;span class="n"&gt;creador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-5"&gt;&lt;/a&gt;         &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_creador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lineno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-6"&gt;&lt;/a&gt;         &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-7"&gt;&lt;/a&gt;         &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-8"&gt;&lt;/a&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-9"&gt;&lt;/a&gt;     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-10"&gt;&lt;/a&gt;         &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-11"&gt;&lt;/a&gt;             &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"CLOSE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-12"&gt;&lt;/a&gt;             &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-13"&gt;&lt;/a&gt;         &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;exc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-14"&gt;&lt;/a&gt;             &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_creador&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-15"&gt;&lt;/a&gt;             &lt;span class="k"&gt;raise&lt;/span&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-16"&gt;&lt;/a&gt;
&lt;a name="rest_code_aede87f36c9043609f1ddb62975485aa-17"&gt;&lt;/a&gt; &lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GzipFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GzipFile&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html"&gt;Leer más…&lt;/a&gt; (quedan 6 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Actualización</category><category>Bugs</category><category>Depuración</category><category>mod_wsgi</category><category>Python</category><guid>https://blog.jcea.es/posts/20241229-python3_13-gzip.html</guid><pubDate>Sun, 29 Dec 2024 09:32:00 GMT</pubDate></item><item><title>Compilamos un "Bind" personalizado en SmartOS a partir de PkgSrc</title><link>https://blog.jcea.es/posts/20241206-pkgsrc_bind.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Este artículo fusiona los anteriores:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blog.jcea.es/posts/20221111-pkgsrc_bind.html"&gt;Compilar "Bind" en PkgSrc para SmartOS con la opción de "dnstap"&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blog.jcea.es/posts/20230204-pkgsrc_bind.html"&gt;Compilar "Bind" en PkgSrc para SmartOS con la opción de "dnstap" (II)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blog.jcea.es/posts/20230317-pkgsrc_bind.html"&gt;Compilar una versión más moderna de "Bind" que la disponible en PkgSrc para SmartOS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Adicionalmente queremos tener en cuenta:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://blog.jcea.es/posts/20240616-pkgsrc_pin.html"&gt;How to pin a "pkgin" package, what is the right way to deploy my own packages?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Queremos incorporar parches propios.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition warning"&gt;
&lt;p class="first admonition-title"&gt;Advertencia&lt;/p&gt;
&lt;p class="last"&gt;No voy a repetir detalles de fondo y repasos de la
configuración. Para ello debería leer los artículos
anteriores.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Con todo lo anterior, queda algo así:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20241206-pkgsrc_bind.html"&gt;Leer más…&lt;/a&gt; (quedan 1 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>BIND</category><category>dnstap</category><category>pkgsrc</category><category>SmartOS</category><guid>https://blog.jcea.es/posts/20241206-pkgsrc_bind.html</guid><pubDate>Fri, 06 Dec 2024 22:57:00 GMT</pubDate></item><item><title>Thunderbird "habla demasiado" (respecto a tu configuración)</title><link>https://blog.jcea.es/posts/20241113-version_thunderbird.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;El otro día estaba mirando las &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Protocolo_para_transferencia_simple_de_correo#Formato_del_mensaje"&gt;cabeceras SMTP&lt;/a&gt; de mis correos
electrónicos y me he llevado una sorpresa:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
            Thunderbird/102.15.1
&lt;/pre&gt;
&lt;p&gt;Mi cliente de correo, &lt;a class="reference external" href="https://www.mozilla.org/thunderbird/"&gt;Thunderbird&lt;/a&gt;, filtra la versión que estoy
utilizando y que estoy usando &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; sobre &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X86-64"&gt;x86-64&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Y esto no lo hace solo en los correos electrónicos salientes sino
también en las conexiones &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Protocolo_de_transferencia_de_hipertexto"&gt;HTTP&lt;/a&gt; que se generen al visualizar
mensajes en formato &lt;a class="reference external" href="https://es.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Esto me parece algo innecesario y un peligro de privacidad y de
seguridad.&lt;/p&gt;
&lt;p&gt;Afortunadamente podemos irnos al editor de configuración de
&lt;a class="reference external" href="https://www.mozilla.org/thunderbird/"&gt;Thunderbird&lt;/a&gt; y editar (o crear, si no existe) la preferencia
&lt;span class="kbd"&gt;general.useragent.override&lt;/span&gt;. Ahí ponemos el texto que nos de
la gana.&lt;/p&gt;
&lt;p&gt;En versiones modernas de &lt;a class="reference external" href="https://www.mozilla.org/thunderbird/"&gt;Thunderbird&lt;/a&gt; podemos indicarle
directamente al programa que sólo envie &lt;span class="kbd"&gt;Thunderbird&lt;/span&gt; como
identificación, sin referencias de plataforma o versiones. Para
ello hay que entrar en el editor de configuración y poner (o
crear) la preferencia &lt;span class="kbd"&gt;mailnews.headers.useMinimalUserAgent&lt;/span&gt;
a &lt;strong&gt;True&lt;/strong&gt;. Si no queremos enviar una identificación de usuario en
absoluto, podemos poner a &lt;strong&gt;False&lt;/strong&gt; la preferencia
&lt;span class="kbd"&gt;mailnews.headers.sendUserAgent&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Podeis ver los detalles por vosotros mismos en el &lt;a class="reference external" href="https://hg-edge.mozilla.org/comm-central/rev/627eda4cbefc"&gt;código fuente&lt;/a&gt; de
&lt;a class="reference external" href="https://www.mozilla.org/thunderbird/"&gt;Thunderbird&lt;/a&gt;, en su servidor &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Mercurial"&gt;Mercurial&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><category>Configuración</category><category>Privacidad</category><category>Thunderbird</category><guid>https://blog.jcea.es/posts/20241113-version_thunderbird.html</guid><pubDate>Wed, 13 Nov 2024 22:07:00 GMT</pubDate></item><item><title>Cómo ver los detalles de la CPU en Illumos (por ejemplo, SmartOS)</title><link>https://blog.jcea.es/posts/20241105-CPU_illumos.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;En una máquina con &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Sistema_operativo"&gt;sistema operativo&lt;/a&gt; basado en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Illumos"&gt;Illumos&lt;/a&gt;, como
un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/SmartOS"&gt;SmartOS&lt;/a&gt;, podemos ver los detalles de su &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Unidad_central_de_procesamiento"&gt;CPU&lt;/a&gt; con el siguiente
comando:&lt;/p&gt;
&lt;pre class="code console"&gt;&lt;a name="rest_code_04cc38a95cbb4e45b7b2787ff5e5bf9f-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;[root@X ~]#&lt;/span&gt; kstat -p cpu_info:0:cpu_info0:brand
&lt;a name="rest_code_04cc38a95cbb4e45b7b2787ff5e5bf9f-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;cpu_info:0:cpu_info0:brand      Intel(r) Core(tm) i7-6700 CPU @ 3.40GHz&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;Una vez que conocemos el modelo, podemos investigar sus
características en infinidad de páginas online. Si lo que queremos
es saber cuántos &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Procesador_multin%C3%BAcleo"&gt;núcleos&lt;/a&gt; tiene esa &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Unidad_central_de_procesamiento"&gt;CPU&lt;/a&gt;, sin andar buscando
online, podemos ir probando valores de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Procesador_multin%C3%BAcleo"&gt;núcleo&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="code console"&gt;&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;[root@X ~]#&lt;/span&gt; kstat -p cpu_info:0:cpu_info0:brand
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;cpu_info:0:cpu_info0:brand      Intel(r) Core(tm) i7-6700 CPU @ 3.40GHz&lt;/span&gt;
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;[...]&lt;/span&gt;
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;[root@X ~]#&lt;/span&gt; kstat -p cpu_info:7:cpu_info7:brand
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;cpu_info:7:cpu_info7:brand      Intel(r) Core(tm) i7-6700 CPU @ 3.40GHz&lt;/span&gt;
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-6"&gt;&lt;/a&gt;&lt;span class="gp"&gt;[root@X ~]#&lt;/span&gt; kstat -p cpu_info:8:cpu_info8:brand
&lt;a name="rest_code_e4dc05b001274c488980fea7efad03f8-7"&gt;&lt;/a&gt;&lt;span class="gp"&gt;[root@X ~]#&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;La CPU de esta máquina tiene ocho &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Procesador_multin%C3%BAcleo"&gt;núcleos&lt;/a&gt;. Recuerda que se
empieza a contar desde cero.&lt;/p&gt;
&lt;p&gt;Este comando es útil, por ejemplo, en máquinas en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Alojamiento_web"&gt;hospedaje&lt;/a&gt; en
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Centro_de_procesamiento_de_datos"&gt;centros de datos&lt;/a&gt; ajenos, a las que no tenemos acceso físico.&lt;/p&gt;&lt;/div&gt;</description><category>Hardware</category><category>Illumos</category><category>Sistemas Operativos</category><category>SmartOS</category><guid>https://blog.jcea.es/posts/20241105-CPU_illumos.html</guid><pubDate>Tue, 05 Nov 2024 02:37:00 GMT</pubDate></item><item><title>Problema actualizando mis servicios WSGI a Python 3.13</title><link>https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Acaba de salir &lt;a class="reference external" href="https://www.python.org/downloads/release/python-3130/"&gt;Python 3.13&lt;/a&gt; y, como
siempre, actualizo mi código y servicios a esta nueva versión.
Actualizo rápido para aprovechar las mejoras de la nueva versión
de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; y porque acumular actualizaciones pendientes supone que
el coste de migrar va creciendo cada año.&lt;/p&gt;
&lt;p&gt;Normalmente los cambios necesarios son mínimos, pero en esta
ocasión tengo problemas con mis servicios &lt;a class="reference external" href="https://es.wikipedia.org/wiki/WSGI"&gt;WSGI&lt;/a&gt; a través del
módulo &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Los servicios en sí parecen funcionar correctamente, pero los
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;logs&lt;/a&gt; se saturan de cientos de líneas por segundo con el siguiente
error:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Exception ignored in: &amp;lt;_io.TextIOWrapper name='&amp;lt;wsgi.errors&amp;gt;' encoding='utf-8'&amp;gt;
RuntimeError: log object has expired
&lt;/pre&gt;
&lt;p&gt;Viendo el código fuente de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; y del propio &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica)"&gt;intérprete&lt;/a&gt; de
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt;, esto ocurre cuando se escribe en el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;log&lt;/a&gt; (o se hace
&lt;em&gt;flush&lt;/em&gt;) una vez que ya se ha llamado a &lt;strong&gt;close&lt;/strong&gt;. La parte de
&lt;strong&gt;Exception ignored&lt;/strong&gt; está dentro del &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica)"&gt;intérprete&lt;/a&gt; de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt;,
cuando se intenta escribir en un fichero que no puede dar una
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt;. Por ejemplo, cuando un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Destructor_(inform%C3%A1tica)"&gt;destructor&lt;/a&gt; levanta una
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; o durante la &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)"&gt;recogida de basuras&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aunque todo parece ir bien, de momento seguiré con &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; 3.12,
mientras investigo el problema en detalle. Ahora mismo estoy
bastante ocupado...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20241015:&lt;/strong&gt; Alguien se me ha adelantado informando del problema:
&lt;a class="reference external" href="https://github.com/GrahamDumpleton/mod_wsgi/issues/912"&gt;RuntimeError: log object has expired in mod_wsgi 5.0.1 with
Django 5.0.9 python 3.13.0 #912&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20241122:&lt;/strong&gt; Se publica la versión 5.0.2 de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; que,
aparentemente, soluciona este problema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20250125:&lt;/strong&gt; Encuentro un rato para actualizar mis servicios
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/WSGI"&gt;WSGI&lt;/a&gt; a la nueva versión de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; y confirmo que el problema
se ha solucionado.&lt;/p&gt;&lt;/div&gt;</description><category>Actualización</category><category>Bugs</category><category>Depuración</category><category>mod_wsgi</category><category>Python</category><guid>https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html</guid><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate></item><item><title>IPv6 en OSMC</title><link>https://blog.jcea.es/posts/20240914-osmc_ipv6.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Se puede activar &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; en una instalación &lt;a class="reference external" href="https://osmc.tv/"&gt;OSMC&lt;/a&gt; moderna de forma
simple, aunque hay que hacerlo &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Tarjeta_de_red"&gt;interfaz de red&lt;/a&gt; a &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Tarjeta_de_red"&gt;interfaz de
red&lt;/a&gt; (tanto por cable &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Ethernet"&gt;ethernet&lt;/a&gt; como por &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Wifi"&gt;wifi&lt;/a&gt;):&lt;/p&gt;
&lt;pre class="code console"&gt;&lt;a name="rest_code_2a12e9069d284875b53e6a9367e7c0e7-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$&lt;/span&gt; connmanctl
&lt;a name="rest_code_2a12e9069d284875b53e6a9367e7c0e7-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt; services
&lt;a name="rest_code_2a12e9069d284875b53e6a9367e7c0e7-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;[...]&lt;/span&gt;
&lt;a name="rest_code_2a12e9069d284875b53e6a9367e7c0e7-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt; config ethernet_XXXXXXXXXX_cable --ipv6 auto
&lt;a name="rest_code_2a12e9069d284875b53e6a9367e7c0e7-5"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&lt;/span&gt; quit
&lt;/pre&gt;&lt;p&gt;Esto es un problema porque, al aparecer la &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Direcci%C3%B3n_MAC"&gt;dirección MAC&lt;/a&gt; en la
configuración, si metemos esta tarjeta en otra &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Raspberry_Pi"&gt;Raspberry PI&lt;/a&gt;
el servicio &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; dejará de estar disponible hasta que lo volvamos
a configurar.&lt;/p&gt;
&lt;p&gt;También se pueden activar las &lt;strong&gt;privacy extensions&lt;/strong&gt; de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; en
&lt;span class="kbd"&gt;/var/lib/connman/*/settings&lt;/span&gt;, editando la línea
&lt;span class="kbd"&gt;IPv6.privacy&lt;/span&gt;. Los valores son: &lt;span class="kbd"&gt;disabled&lt;/span&gt;,
&lt;span class="kbd"&gt;enabled&lt;/span&gt; (activado pero prefiere la IP pública) o
&lt;span class="kbd"&gt;preferred&lt;/span&gt;/&lt;span class="kbd"&gt;prefered&lt;/span&gt; (activado y prefiere las
privadas).&lt;/p&gt;
&lt;p&gt;Para configurar la duración de las IPs &lt;em&gt;privadas&lt;/em&gt; en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt;, se
configura en el directorio
&lt;span class="kbd"&gt;/proc/sys/net/ipv6/conf/INTERFAZ/&lt;/span&gt;, los ficheros
&lt;span class="kbd"&gt;temp_prefered_lft&lt;/span&gt; y &lt;span class="kbd"&gt;temp_valid_lft&lt;/span&gt;. En las
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Raspberry_Pi"&gt;Raspberry PI&lt;/a&gt; que estoy modificando los valores son 24 horas y 7
días.&lt;/p&gt;
&lt;p&gt;Espero que &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt; esté mejor integrado en futuras versiones de
&lt;a class="reference external" href="https://osmc.tv/"&gt;OSMC&lt;/a&gt;, pero de momento podemos ir tirando.&lt;/p&gt;&lt;/div&gt;</description><category>IPv6</category><category>Kodi</category><category>OSMC</category><category>Sistemas Operativos</category><guid>https://blog.jcea.es/posts/20240914-osmc_ipv6.html</guid><pubDate>Sat, 14 Sep 2024 01:11:00 GMT</pubDate></item></channel></rss>