aboutsummaryrefslogtreecommitdiff
path: root/blog/content
diff options
context:
space:
mode:
Diffstat (limited to 'blog/content')
-rw-r--r--blog/content/2006/12/ratas-del-aire.gmi49
-rw-r--r--blog/content/2007/07/everything-is-connected.gmi15
-rw-r--r--blog/content/2008/02/gentlemen-you-can-t-fight-in-here-this-is-the-war-room.gmi25
-rw-r--r--blog/content/2010/03/gatos-azucarados.gmi22
-rw-r--r--blog/content/2011/01/django-o-la-fabrica-de-churros.gmi4
-rw-r--r--blog/content/2011/10/apuntes-sobre-dart.gmi8
-rw-r--r--blog/content/2012/06/desarrollo-web-como-dios-manda.gmi4
-rw-r--r--blog/content/2012/11/que-es-el-rpc.gmi2
-rw-r--r--blog/content/2013/09/recopilatorios-de-grandes-exitos.gmi4
-rw-r--r--blog/content/2020/07/isos-y-usbs.gmi2
-rw-r--r--blog/content/2021/03/los-gemelos-golpean-dos-veces.gmi4
-rw-r--r--blog/content/2022/07/la-caja-de-herramientas.gmi2
-rw-r--r--blog/content/2022/11/origenes.gmi2
-rw-r--r--blog/content/2024/01/ahi-vamos-de-nuevo.gmi2
-rw-r--r--blog/content/2024/07/ovejas.gmi2
-rw-r--r--blog/content/2024/08/tu-transportas.gmi4
-rw-r--r--blog/content/2024/11/la-x-no-marca-el-lugar.gmi2
-rw-r--r--blog/content/2024/11/otros-relojes-apocalipticos.gmi2
-rw-r--r--blog/content/2025/05/jugando-al-monopoly.gmi2
-rw-r--r--blog/content/2025/05/la-web.gmi3
-rw-r--r--blog/content/2026/03/me-gusta-el-futbol.gmi25
-rw-r--r--blog/content/2026/03/notas.gmi32
-rw-r--r--blog/content/2026/03/peligros-de-bolsillo.gmi45
-rw-r--r--blog/content/2026/03/this-was-supposed-to-be-the-future.gmi27
-rw-r--r--blog/content/2026/04/breve-e-incompleta-historia-del-desarrollo-web.gmi93
-rw-r--r--blog/content/2026/04/el-enemigo-en-casa.gmi35
-rw-r--r--blog/content/gemini.gmi30
-rw-r--r--blog/content/laspelis/1041.gmi5
-rw-r--r--blog/content/laspelis/1061.gmi4
-rw-r--r--blog/content/notas/comprar-bajo-en-sodio.gmi176
-rw-r--r--blog/content/notas/index.gmi2
-rw-r--r--blog/content/notes/cliffs/the-tyranny-of-structurelessness.gmi98
-rw-r--r--blog/content/notes/index.gmi7
-rw-r--r--blog/content/notes/interesting-articles.gmi195
-rw-r--r--blog/content/notes/tech/about-relational-databases.gmi2
-rw-r--r--blog/content/notes/tech/about-web-development.gmi5
-rw-r--r--blog/content/notes/tech/gadgets/pocket-computers.gmi16
-rw-r--r--blog/content/notes/tech/misc-python-stuff.gmi2
-rw-r--r--blog/content/notes/tech/motivating-example-for-logical-replication-for-dynamic-ui.gmi61
39 files changed, 885 insertions, 135 deletions
diff --git a/blog/content/2006/12/ratas-del-aire.gmi b/blog/content/2006/12/ratas-del-aire.gmi
index 0caa035b..3a981247 100644
--- a/blog/content/2006/12/ratas-del-aire.gmi
+++ b/blog/content/2006/12/ratas-del-aire.gmi
@@ -1,50 +1,13 @@
# 2006-12-25 Ratas del aire
-Sólo hay una manera en la que un británico de pura cepa puede responder al titular de "se contrata francotirados para eliminar las palomas de Kingston". Llenar la página de la noticia [1] de comentarios surrealistas. Algunos extractos:
+=> https://www.surreycomet.co.uk/news/1039169.marksman_called_in_to_kill_kingstons_pigeons/ Sólo hay una manera en la que un británico de pura cepa puede responder al titular de "se contrata francotirados para eliminar las palomas de Kingston". Llenar la página de la noticia de comentarios surrealistas. Algunos extractos:
-=> http://www.surreycomet.co.uk/pigeoncomments/display.var.1039169.0.marksman_called_in_to_kill_kingstons_pigeons.php [1] la página de la noticia
+> What a lot of fuss over nothing. Everyone knows pigeons can't be killed, they are immortal and immune to bullets. Where I come from we worship the pigeon deity and never look them in the eye as this can turn a man to stone.
->
->
->
-> What a lot of fuss over nothing. Everyone knows pigeons can't be killed,
-> they are immortal and immune to bullets. Where I come from we worship the
-> pigeon deity and never look them in the eye as this can turn a man to
-> stone.
->
->
+> I'm horrified at the very idea anyone might want to harm these gentle creatures. I myself was raised by pigeons after being abandoned in Trafalgar Square as a young nipper. Therefore I know how noble and generous a species they really are. If anyone were to kill a pigeon in this way, it would be as though they are slaughtering one of my own family. It's murder, I say!
->
->
->
-> I'm horrified at the very idea anyone might want to harm these gentle
-> creatures. I myself was raised by pigeons after being abandoned in
-> Trafalgar Square as a young nipper. Therefore I know how noble and
-> generous a species they really are. If anyone were to kill a pigeon in
-> this way, it would be as though they are slaughtering one of my own
-> family. It's murder, I say!
->
->
->
> [...]
->
->
->
-> I know what you mean, reader. I was raised by yaks but I'm sure the
-> experience was similar. How about a council worker cull instead.
->
->
->
->
->
-> My elder sister was held captive for nine days by a flock of rock pigeons
-> on a small island near Malta in 1979 - it may have been Gozo but I'm not
-> too sure. (Sorry about that.) As you might gather she suffers from
-> nightmares and flashbacks but she has also developed a loathing of millet
-> seeds for some strange reason. She is in full support of the cull and, in
-> actual fact, she has already applied for the job and fully intends to
-> carry out her duties as soon as possible - whether she gets the job or
-> not. Be careful around town folks - she's not a good shot.
->
->
+> I know what you mean, reader. I was raised by yaks but I'm sure the experience was similar. How about a council worker cull instead.
+
+> My elder sister was held captive for nine days by a flock of rock pigeons on a small island near Malta in 1979 - it may have been Gozo but I'm not too sure. (Sorry about that.) As you might gather she suffers from nightmares and flashbacks but she has also developed a loathing of millet seeds for some strange reason. She is in full support of the cull and, in actual fact, she has already applied for the job and fully intends to carry out her duties as soon as possible - whether she gets the job or not. Be careful around town folks - she's not a good shot.
diff --git a/blog/content/2007/07/everything-is-connected.gmi b/blog/content/2007/07/everything-is-connected.gmi
index f4552c08..fe576d52 100644
--- a/blog/content/2007/07/everything-is-connected.gmi
+++ b/blog/content/2007/07/everything-is-connected.gmi
@@ -1,18 +1,9 @@
# 2007-07-09 Everything is connected
-De los The B-52's [1], a Blondie [2] a...
+=> https://www.youtube.com/watch?v=rSEMjZ6YqGI De los The B-52's...
-=> https://youtube.com/watch?v=Y4dUS7v2NIQ [1] The B-52's
-=> https://youtube.com/watch?v=qW6OrdLkCLU [2] Blondie
+=> https://www.youtube.com/watch?v=O_WLw_0DFQQ ... a Blondie a...
->
->
->
-> Hi, it's Deb. You know, when I woke up this morning I had a realization
-> about myself. I was always Blondie. People always called me Blondie, ever
-> since I was a little kid. What I realized ia that at some point I became
-> Dirty Harry. I couldn't be Blondie anymore, so I became Dirty Harry.
->
->
+> Hi, it's Deb. You know, when I woke up this morning I had a realization about myself. I was always Blondie. People always called me Blondie, ever since I was a little kid. What I realized ia that at some point I became Dirty Harry. I couldn't be Blondie anymore, so I became Dirty Harry.
...¡el tito Clint!
diff --git a/blog/content/2008/02/gentlemen-you-can-t-fight-in-here-this-is-the-war-room.gmi b/blog/content/2008/02/gentlemen-you-can-t-fight-in-here-this-is-the-war-room.gmi
index b838390d..fc8021c0 100644
--- a/blog/content/2008/02/gentlemen-you-can-t-fight-in-here-this-is-the-war-room.gmi
+++ b/blog/content/2008/02/gentlemen-you-can-t-fight-in-here-this-is-the-war-room.gmi
@@ -1,26 +1,11 @@
# 2008-02-29 Gentlemen, you can't fight in here! This is the War Room
->
->
->
-> According to our sources, the Home lobby for the Incognito dogfighter will
-> serve as a "war room" where up to eight players can meet to discuss their
-> strategy for an upcoming match. Sure, you could do that with text or voice
-> chat, but it sounds like the developers have gone the extra mile to make
-> planning your battles even cooler.
->
->
->
-> Using a three-dimensional "sand table" replication of the level, Warhawk
-> players are said to be able to lay out their strategies in a properly
-> scaled space. They'll even be able to place little army men avatars around
-> the map to envision their formations, something we hope they can also do
-> with teeny tiny Warhawk planes, tanks and Jeeps.
->
->
+> According to our sources, the Home lobby for the Incognito dogfighter will serve as a "war room" where up to eight players can meet to discuss their strategy for an upcoming match. Sure, you could do that with text or voice chat, but it sounds like the developers have gone the extra mile to make planning your battles even cooler.
-Es sólo un rumor [1], no pienso comprarme una PS3 y no creo que juegue al Warhawk.
+> Using a three-dimensional "sand table" replication of the level, Warhawk players are said to be able to lay out their strategies in a properly scaled space. They'll even be able to place little army men avatars around the map to envision their formations, something we hope they can also do with teeny tiny Warhawk planes, tanks and Jeeps.
-=> http://kotaku.com/361562/how-warhawk-makes-home-really-really-cool [1] un rumor
+Es sólo un rumor, no pienso comprarme una PS3 y no creo que juegue al Warhawk.
Pero mola. Mucho.
+
+=> https://web.archive.org/web/20090422074114/http://kotaku.com/361562/how-warhawk-makes-home-really-really-cool Kotaku - How Warhawk Makes Home Really, Really Cool
diff --git a/blog/content/2010/03/gatos-azucarados.gmi b/blog/content/2010/03/gatos-azucarados.gmi
index 46076866..e98e6f6e 100644
--- a/blog/content/2010/03/gatos-azucarados.gmi
+++ b/blog/content/2010/03/gatos-azucarados.gmi
@@ -1,23 +1,5 @@
# 2010-03-16 Gatos azucarados
->
->
->
-> 8 Professors are in the 9th year of a 12 year encyclopedia writing
-> project. The youngest is Bertram Potts who specializes in language and
-> grammar. When Professor Potts discovers that his section on slang is
-> outdated, he sets out to research the topic. Nightclub performer Sugarpuss
-> O'Shea is engaged to gangster Joe Lilac. When she discovers that the
-> police are after her, she must find a place to lay low. Then Potts meets
-> Sugarpuss. He is impressed with her slang and wants to study it further.
-> Sugarpuss uses his study as an excuse to invite herself to stay with the 8
-> Professors at their residence--a perfect hideout. She wins over the older
-> Professors teaching them how to do a Conga Line and earns a marriage
-> proposal from 'Pottsie' by showing him 'yum-yum'. However, Joe Lilac
-> resurfaces with other plans for Sugarpuss.
->
->
+> 8 Professors are in the 9th year of a 12 year encyclopedia writing project. The youngest is Bertram Potts who specializes in language and grammar. When Professor Potts discovers that his section on slang is outdated, he sets out to research the topic. Nightclub performer Sugarpuss O'Shea is engaged to gangster Joe Lilac. When she discovers that the police are after her, she must find a place to lay low. Then Potts meets Sugarpuss. He is impressed with her slang and wants to study it further. Sugarpuss uses his study as an excuse to invite herself to stay with the 8 Professors at their residence--a perfect hideout. She wins over the older Professors teaching them how to do a Conga Line and earns a marriage proposal from 'Pottsie' by showing him 'yum-yum'. However, Joe Lilac resurfaces with other plans for Sugarpuss.
-Otra peli [1] por ver...
-
-=> https://www.imdb.com/title/tt0033373/ [1] Otra peli
+=> https://www.imdb.com/title/tt0033373/ Otra peli por ver...
diff --git a/blog/content/2011/01/django-o-la-fabrica-de-churros.gmi b/blog/content/2011/01/django-o-la-fabrica-de-churros.gmi
index 904dd1a4..0935fbe9 100644
--- a/blog/content/2011/01/django-o-la-fabrica-de-churros.gmi
+++ b/blog/content/2011/01/django-o-la-fabrica-de-churros.gmi
@@ -7,7 +7,7 @@ Estos días me he encontrado frente a una web sencilla, pero que a mi juicio no
¿A parte de esto, qué otras virtudes tiene Django?
* Vistas genéricas. En particular, lista/detalle sobre los modelos de datos, resolviendo correctamente paginación, ordenación, filtrado, etc. Tiene también vistas y maquinaria para hacer CRUD, que supongo funcionan bien pero que no he usado
-* Usa HTML/HTTP "correcto" sin hacer cosas raras, añadir Javascripts innecesarios, serializaciones raras, etc. Todo muy limpio
+* Usa HTML/HTTP "correcto" sin hacer cosas raras, añadir JavaScripts innecesarios, serializaciones raras, etc. Todo muy limpio
* Está documentado. No llega al nivel de Java o Spring, pero desde luego, comparado con Rails y otras estrellas de código libre...
* No usa generación de código. Odiamos la generación de código.
@@ -18,7 +18,7 @@ Pero también le encuentro algún que otro defecto:
* El sistema de plantillas está muy bien, pero es "regular" y no "gramatical", con lo que no admite expresiones donde debería ni otras estructuras muy convenientes. JSP con fragmentos de tag es *muy* superior
* Tengo la sospecha que el funcionamiento sobre JVM no será para tirar cohetes. Además, si nos interesa funcionar sobre JVM, nos tenemos que limitar a Django 1.1 y evitar 1.2 de momento.
* En general el sistema de internacionalización está muy bien, pero no soporta internacionalización en el modelo de datos (i.e. campos multilingües en las entidades)
-* No viene con nada para hacer Javascript/AJAX, aunque seguramente no sería de mi agrado, claro
+* No viene con nada para hacer JavaScript/AJAX, aunque seguramente no sería de mi agrado, claro
A pesar de esto, creo que es el mejor "framework completo" que he visto. Como plataforma "básica", sigo prefiriendo Java + Spring + Servlets + JSP + JSTL, pero creo que Django puede tener un lugar bastante importante en el arsenal de un desarrollador web. La pregunta es, ¿cuál es ese lugar?
diff --git a/blog/content/2011/10/apuntes-sobre-dart.gmi b/blog/content/2011/10/apuntes-sobre-dart.gmi
index 2fb60e7e..432378e7 100644
--- a/blog/content/2011/10/apuntes-sobre-dart.gmi
+++ b/blog/content/2011/10/apuntes-sobre-dart.gmi
@@ -2,9 +2,9 @@
Google ha sacado hoy Dart[1].
-El apunte rápido (que seguro que otros mejoran) es que es un verdadero **Java**script. Es un lenguaje muy muy Java que compila a Javascript. Las diferencias con Java van por dos lados:
+El apunte rápido (que seguro que otros mejoran) es que es un verdadero **Java**Script. Es un lenguaje muy muy Java que compila a JavaScript. Las diferencias con Java van por dos lados:
-* Adecuaciones para funcionar bien cuando se compila a Javascript- i.e. no hay threads, hay "isolates", etc.
+* Adecuaciones para funcionar bien cuando se compila a JavaScript- i.e. no hay threads, hay "isolates", etc.
* Esas mejoras puntuales de Java que llevamos pidiendo a gritos desde hace siglos
Las mejoras de Java son de ovación cerrada:
@@ -18,11 +18,11 @@ Las mejoras de Java son de ovación cerrada:
Siendo realistas, cubre la mayoría de "defectos" "resolubles" de Java. No, no tiene inferencia de tipos, ni lambdas con excepciones chulas, ni "final" por defecto... y quizás no es todo como uno lo había soñado, pero es una solución práctica y disponible **hoy**.
-Eso es lo positivo. En lo negativo, el tipado opcional me escama- y me duele que signifique sacrificios (hay ahí una cosilla un poco rara con las funciones que no devuelven valor que me deja intranquilo). Me queda la curiosidad de estudiar los isolates para saber si aportan algo o si son sencillamente la manera correcta de montar concurrencia en código que será compilado a Javascript y ejecutado por los motores de Javascript existentes.
+Eso es lo positivo. En lo negativo, el tipado opcional me escama- y me duele que signifique sacrificios (hay ahí una cosilla un poco rara con las funciones que no devuelven valor que me deja intranquilo). Me queda la curiosidad de estudiar los isolates para saber si aportan algo o si son sencillamente la manera correcta de montar concurrencia en código que será compilado a JavaScript y ejecutado por los motores de JavaScript existentes.
He visto otras cosas que aún no me he mirado a fondo que no sé dónde colocar: soporte en el lenguaje para factorías, "const" el sistema de librerías y que null sea un objeto; es difícil saber si serán cosas buenas o malas.
-En fin, cosas interesantes. No parece, sin embargo, que Dart aspire de momento a ser algo más que un sustituto de Javascript (algo que no me interesa mucho- el principal problema de Javascript no es el lenguaje en sí, en mi opinión)... con lo que **para mi**, no es muy interesante de momento.  Si algún día se planta como una alternativa para desarrollo de aplicaciones y para programación, tiene  la oportunidad de ser Java++, pero sin añadir la complejidad y cerradez de C#... pero ni siquiera sé si Google pretende que lo sea (ese rol lo quieren para... ¿Go? ¿Dart? ¿Java? ¿Python?) .
+En fin, cosas interesantes. No parece, sin embargo, que Dart aspire de momento a ser algo más que un sustituto de JavaScript (algo que no me interesa mucho- el principal problema de JavaScript no es el lenguaje en sí, en mi opinión)... con lo que **para mi**, no es muy interesante de momento.  Si algún día se planta como una alternativa para desarrollo de aplicaciones y para programación, tiene  la oportunidad de ser Java++, pero sin añadir la complejidad y cerradez de C#... pero ni siquiera sé si Google pretende que lo sea (ese rol lo quieren para... ¿Go? ¿Dart? ¿Java? ¿Python?) .
=> http://www.dartlang.org/ 1: http://www.dartlang.org/
diff --git a/blog/content/2012/06/desarrollo-web-como-dios-manda.gmi b/blog/content/2012/06/desarrollo-web-como-dios-manda.gmi
index e100c7c6..3b1ea8a9 100644
--- a/blog/content/2012/06/desarrollo-web-como-dios-manda.gmi
+++ b/blog/content/2012/06/desarrollo-web-como-dios-manda.gmi
@@ -14,13 +14,13 @@ Una manera fácil de comenzar es por el lenguaje. Es conveniente que escojamos u
Comenzando por el principio, un buen punto de partida es mi querido TIOBE[1]. El TIOBE es un ránking de la popularidad de los lenguajes de programación calculado a partir de su presencia en la web. La metodología es inevitablemente discutible, pero el ránking está bastante alineado con mi percepción, así que para mi, es una opción cómoda.
-En el top 20 (a junio de 2012) encontramos tan solo 8 lenguajes utilizados comunmente para el desarrollo web: Java, C#, PHP, Python, Perl, Ruby, Javascript y Visual Basic .NET. Fuera del Top 20 encontramos muy poquitas opciones (Haskell, Scala y poco más), así que nos ceñiremos a estos.
+En el top 20 (a junio de 2012) encontramos tan solo 8 lenguajes utilizados comunmente para el desarrollo web: Java, C#, PHP, Python, Perl, Ruby, JavaScript y Visual Basic .NET. Fuera del Top 20 encontramos muy poquitas opciones (Haskell, Scala y poco más), así que nos ceñiremos a estos.
Vamos a descartar unos pocos:
* PHP[2]: pese a ser un lenguaje explícitamente diseñado para el desarrollo web, en mi opinión PHP nunca debe usarse para desarrollar un proyecto desde 0- a no ser que lo que queramos desarrollar sea extremadamente mínimo- ya sea porque se trate de un desarrollo extremadamente pequeño o bien que pretendamos reutilizar completamente un desarrollo existente como Wordpress o Magento. Desarrollar grandes bases de código en PHP es un ejercicio frustrante ya que, sencillamente, no está pensado para ello. Sus limitaciones en cuanto a modelo de ejecución, estructura y modularidad son motivo suficiente para descartarlo, pues el resto de lenguajes que consideramos lo superan ampliamente en estos aspectos, ofreciendo PHP muy poco para compensar (su velocidad para proyectos mínimos).Puede sernos útil conocer PHP, pues existe mucho trabajo manteniendo código PHP (sin embargo, no se trata de un trabajo especialmente gratificante) y en algún momento nos puede ser útil. Pero debe ser erradicado lo antes posible.
* Perl[3]: durante mucho tiempo fue una de las mejores opciones disponibles, en realidad, una de las pocas viables. Una vez más, el resto de lenguajes de la lista le superan en virtudes sin que Perl ofrezca muchas ventajas propias. El mercado de Perl decae lentamente y cada vez se inician menos proyectos que lo utilicen.
-* JavaScript[4]: si bien deberemos conocer JavaScript para desarrollar efectivamente sobre la web, aún no lo considero una opción viable en el lado servidor. Tendremos que aprender JavaScript, pero el grueso del proyecto deberá ser siempre en otro de los lenguajes. Soy anti-aplicaciones web 100% Javascript, creo que su campo de aplicación es extremadamente limitado y presentan desventajas considerables, pero hay quien les encuentra virtudes
+* JavaScript[4]: si bien deberemos conocer JavaScript para desarrollar efectivamente sobre la web, aún no lo considero una opción viable en el lado servidor. Tendremos que aprender JavaScript, pero el grueso del proyecto deberá ser siempre en otro de los lenguajes. Soy anti-aplicaciones web 100% JavaScript, creo que su campo de aplicación es extremadamente limitado y presentan desventajas considerables, pero hay quien les encuentra virtudes
C#[5] y Visual Basic .NET[6] son dos opciones que el lector mismo puede escoger descartar o considerar- desarrollar razonablemente en ambos supone unos costes que yo prefiero no asumir (se necesitan licencias de Windows para el desarrollo y despliegue y las versiones gratuitas de Visual Studio tienen bastantes limitaciones)- a parte de que soy un firme creyente en que las herramientas de desarrollo deben ser libres y gratuitas. Si eso no supone un impedimento para el lector, puede aplicar mi opinión sobre Java, ambas plataformas son extremadamente similares; quizás .NET goce de herramientas más sencillas de utilizar inicialmente, el sistema base es más completo que el de Java pero el ecosistema goza de menor vida.
diff --git a/blog/content/2012/11/que-es-el-rpc.gmi b/blog/content/2012/11/que-es-el-rpc.gmi
index 717bea63..501b3b55 100644
--- a/blog/content/2012/11/que-es-el-rpc.gmi
+++ b/blog/content/2012/11/que-es-el-rpc.gmi
@@ -11,7 +11,7 @@ y que la suma se realice en el sistema remoto. A esto le llamaron llamada de pro
Sun implementó uno de los primeros sistemas de RPC para implementar el sistema de archivos distribuido NFS, y a lo largo del tiempo han ido apareciendo diferentes mecanismos de RPC para diferentes plataformas y necesidades.
-Con la popularización de la WWW, el protocolo HTTP y Javascript en los 90, pronto la gente comenzó a implementar comunicaciones entre sistema utilizándolos. Por ejemplo, una web podía exponer algunos de sus contenidos y funcionalidades en HTML para consumo humano, pero también exponerlos para consumo de otros sistemas. Mecanismos simples como poner una URL en la que si hacemos un POST http con unos argumentos, nos devuelve el resultado de una operación en un formato fácilmente parseable.
+Con la popularización de la WWW, el protocolo HTTP y JavaScript en los 90, pronto la gente comenzó a implementar comunicaciones entre sistema utilizándolos. Por ejemplo, una web podía exponer algunos de sus contenidos y funcionalidades en HTML para consumo humano, pero también exponerlos para consumo de otros sistemas. Mecanismos simples como poner una URL en la que si hacemos un POST http con unos argumentos, nos devuelve el resultado de una operación en un formato fácilmente parseable.
Pronto, uno de los padres fundadores del HTTP, procesó los principios fundamentales del HTTP y la WWW, en concreto que todo era una cuestión de URLs y acciones como GET/POST/PUT/DELETE que soporta el protocolo HTTP; cada URL representa un recurso y podemos expresar acciones mediante los "verbos" HTTP. A esto le llamó REST y supuso una perspectiva limpia y poderosa de lo que es la WWW.
diff --git a/blog/content/2013/09/recopilatorios-de-grandes-exitos.gmi b/blog/content/2013/09/recopilatorios-de-grandes-exitos.gmi
index c08c9e6b..6e76e871 100644
--- a/blog/content/2013/09/recopilatorios-de-grandes-exitos.gmi
+++ b/blog/content/2013/09/recopilatorios-de-grandes-exitos.gmi
@@ -18,9 +18,9 @@ En general, los compiladores suelen ser de lenguajes de mayor nivel a menor nive
En estos casos, la cosa se suele complicar mucho más porque una implementación naíf de un compilador a ensamblador suele redundar en programas que al ejecutarse son espectacularmente ineficientes. Conseguir ejecutables eficientes es un problema completo en sí mismo sobre el que se han escrito toneladas de libros.
-Sin embargo, recientemente son más habituales los compiladores que compilan lenguajes a cosas que no son ensamblador- por diversos motivos entre los que destaca que un compilador a ensamblador sólo es útil para una familia de CPUs, y pese a que la familia x86 de Intel y los ARM copan la mayor parte del mercado, sigue habiendo muchos otros procesadores en uso hoy en día. Por otra parte, plataformas como la máquina virtual Java, LLVM o incluso Javascript también son populares como destinos de los compiladores- en el caso de Java o LLVM por ser más simples para la generación de código sin sacrificar eficiencia, y en el caso de Javascript, por ser un destino particularmente útil ya que nos permite ejecutar el código compilado en un navegador.
+Sin embargo, recientemente son más habituales los compiladores que compilan lenguajes a cosas que no son ensamblador- por diversos motivos entre los que destaca que un compilador a ensamblador sólo es útil para una familia de CPUs, y pese a que la familia x86 de Intel y los ARM copan la mayor parte del mercado, sigue habiendo muchos otros procesadores en uso hoy en día. Por otra parte, plataformas como la máquina virtual Java, LLVM o incluso JavaScript también son populares como destinos de los compiladores- en el caso de Java o LLVM por ser más simples para la generación de código sin sacrificar eficiencia, y en el caso de JavaScript, por ser un destino particularmente útil ya que nos permite ejecutar el código compilado en un navegador.
-Tanto la JVM como la LLVM han sido diseñadas especialmente para este propósito, con lo que tienden a simplificarnos el proceso de compilación. En el caso de Javascript, pese a estar pensado con otros propósitos, proyectos como GWT o Emscripten han hecho grandes esfuerzos para hacer funcionar compiladores sobre Javascript. Mozilla incluso ha lanzado la iniciativa asm.js para definir un subconjunto de Javascript que sea práctico como plataforma a la que compilar de una manera eficiente.
+Tanto la JVM como la LLVM han sido diseñadas especialmente para este propósito, con lo que tienden a simplificarnos el proceso de compilación. En el caso de JavaScript, pese a estar pensado con otros propósitos, proyectos como GWT o Emscripten han hecho grandes esfuerzos para hacer funcionar compiladores sobre JavaScript. Mozilla incluso ha lanzado la iniciativa asm.js para definir un subconjunto de JavaScript que sea práctico como plataforma a la que compilar de una manera eficiente.
El proceso no se queda aquí, ya que una vez tenemos un lenguaje funcional con intérprete o compilador, siempre hay un interés en acelerarlo- tanto el proceso de compilación como la ejecución de los programas. Una vez más, se trata de un área complicada y sutilezas- se han llegado a técnicas extremadamente sofisticadas que incluso "aprenden" de la ejecución del programa y modifican su funci0namiento para adaptarse y mejorar "en vivo".
diff --git a/blog/content/2020/07/isos-y-usbs.gmi b/blog/content/2020/07/isos-y-usbs.gmi
index 94776f30..3c367362 100644
--- a/blog/content/2020/07/isos-y-usbs.gmi
+++ b/blog/content/2020/07/isos-y-usbs.gmi
@@ -1,6 +1,6 @@
# 2020-07-01 ISOs y USBs
-=> https://github.com/alexpdp7/alexpdp7/blob/master/hardware/using-an-rpi-zero-as-an-usb-drive-to-install-operating-systems.md EDIT 2025-01-12: Aquí documento una manera de hacer estas cosas con una Raspberry Pi Zero.
+=> https://github.com/alexpdp7/rpi-zero-usb-iso EDIT 2027-04-14: Aquí documento una manera de hacer estas cosas con una Raspberry Pi Zero.
Actualización 2024-12-24: Tras un tiempo usándolo, estoy investigando otras vías porque Ventoy da algunos problemillas. IODD fabrica cacharros algo caros que hacen esto. También está el sistema "USB Gadget" de Linux que permite a algo tipo Raspberry actuar como CDROM USB.
diff --git a/blog/content/2021/03/los-gemelos-golpean-dos-veces.gmi b/blog/content/2021/03/los-gemelos-golpean-dos-veces.gmi
index f0551a76..98d5f1c9 100644
--- a/blog/content/2021/03/los-gemelos-golpean-dos-veces.gmi
+++ b/blog/content/2021/03/los-gemelos-golpean-dos-veces.gmi
@@ -1,12 +1,14 @@
# 2021-03-13 Los gemelos golpean dos veces
+=> ../../2026/02/la-antigua-nueva-escuela EDIT 2026-04-14: Post de este blog donde explico la última iteración de su implementación
+
Esta es la primera entrada que creo en mi blog en el Geminiespacio (¿Gemeloespacio? ¿Geminispacio? Dudo que la RAE o la Fundéu me ayuden con esto). El Geminiespacio es un fascinante proyecto del que ya os hablé[1] anteriormente que define un protocolo parecido a la web, pero simplificado al máximo- los que recuerden el protocolo Gopher les sonará- pero el Geminiespacio está modernizado (requiere TLS, por ejemplo) y aprende unas cuantas lecciones de la web.
Es un protocolo muy inflexible (si quisiesemos implementar un buscador, por ejemplo, no permite formularios aunque sí permite pedir al usuario una cadena de texto) que impide todo lo que odiamos de la web moderna. Una cápsula Gemini sólo es hipertexto y nada más, ni lo bueno ni lo maligno.
He publicado el código fuente del terrible invento rubegoldberesco que me ha permitido migrar este blog de WordPress a un extraño injerto estático y el proxy a través del cuál muy probablemente estéis leyendo esta entrada mediante un navegador convencional. Lo podéis encontrar aquí:
-=> https://github.com/alexpdp7/gemini_blog/ El repositorio con el código de sostiene este blog
+=> ../../2026/02/la-antigua-nueva-escuela EDIT 2026-04-14: Post de este blog donde explico la última iteración de su implementación
Espero no provocar demasiados problemas con esta migración. Me temo que los que uséis RSS seguramente veréis republicadas las últimas diez entradas del blog, eso sí.
diff --git a/blog/content/2022/07/la-caja-de-herramientas.gmi b/blog/content/2022/07/la-caja-de-herramientas.gmi
index 702f4a9d..c3db3b2b 100644
--- a/blog/content/2022/07/la-caja-de-herramientas.gmi
+++ b/blog/content/2022/07/la-caja-de-herramientas.gmi
@@ -1,6 +1,6 @@
# 2022-07-11 La caja de herramientas
-=> https://github.com/alexpdp7/alexpdp7/blob/master/hardware/using-an-rpi-zero-as-an-usb-drive-to-install-operating-systems.md EDIT 2025-01-21: Aquí documento como hacer esto con una Raspberry Pi Zero.
+=> https://github.com/alexpdp7/rpi-zero-usb-iso EDIT 2027-04-14: Aquí documento una manera de hacer estas cosas con una Raspberry Pi Zero.
Cuando uno se lía con lo que no debería, hace gastos inútiles, pero lo que aprende igual le sirve a alguien.
diff --git a/blog/content/2022/11/origenes.gmi b/blog/content/2022/11/origenes.gmi
index 906582f0..9f431f41 100644
--- a/blog/content/2022/11/origenes.gmi
+++ b/blog/content/2022/11/origenes.gmi
@@ -2,7 +2,7 @@
Para los que estéis perdidos sin esa web de la que usted me habla, mi insomnio ha decidido que os dedique un ratito.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/FUENTES.md He recopilado algunos de los sitios en Internet que sigo por RSS.
+EDIT 2026-04-14: Aquí tenía un enlace a mis fuentes de RSS, pero estaba obsoleto y lo he borrado.
Ahora mismo son treinta y pico sitios web que tienen feed RSS, ligeramente clasificados.
diff --git a/blog/content/2024/01/ahi-vamos-de-nuevo.gmi b/blog/content/2024/01/ahi-vamos-de-nuevo.gmi
index b402745d..8a2ce1ce 100644
--- a/blog/content/2024/01/ahi-vamos-de-nuevo.gmi
+++ b/blog/content/2024/01/ahi-vamos-de-nuevo.gmi
@@ -14,7 +14,7 @@ Demasiado escribo sobre esta nueva brujería, pero como sabéis, la evolución d
Y el resto, en batiburrillo:
=> https://blog.google/products/search/improvements-to-using-spanish-in-search-and-gboard/ Sería mucho más interesante si esta colaboración de la RAE con Google resultase en algún recurso que podamos usar todos.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/hardware/about_headphones.md Por cierto que también escribo demasiado en otros sitios. He comenzado a ir moviendo artículos a un repositorio en GitHub. El otro día añadí una referencia sobre auriculares.
+=> ../../2026/03/notas Por cierto que también escribo demasiado en otros sitios. He comenzado a ir moviendo artículos a un repositorio en GitHub. El otro día añadí una referencia sobre auriculares. EDIT 2026-04-14: Ahora lo he reemplazado por una web simple, esto enlaza a otra entrada del blog explicándolo.
=> https://blog.google/products/gmail/gmail-emoji-reactions/ Aunque os sorprenda, reaccionar con emojis a correos electrónicos me parece un paso en la dirección adecuada. Aunque lo suyo sería poder reaccionar con un simple +1.
=> https://plus.nasa.gov/ Muchas plataformas, pero esta es gratis y tiene plataformas de lanzamiento.
=> https://www.politico.eu/article/inside-giorgia-meloni-hobbit-fantasy-world-lord-of-the-rings-fratelli-italia-brothers-italy-politics/ Pobres hóbbits
diff --git a/blog/content/2024/07/ovejas.gmi b/blog/content/2024/07/ovejas.gmi
index b6c948bb..4b19aca7 100644
--- a/blog/content/2024/07/ovejas.gmi
+++ b/blog/content/2024/07/ovejas.gmi
@@ -30,7 +30,7 @@ Voy soltando reflexiones chorras en el Fediverso que me da un poco de vergüenza
=> https://sansec.io/research/polyfill-supply-chain-attack Y cómo las optimizaciones innecesarias... (y otras manías mías)... nos exponen a peligrosos agujeros de seguridad.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/misc/comprar-bajo-en-sodio.org Consejos para comprar sin sal, de alguien que NO es una autoridad (yo).
+=> ../../notas/comprar-bajo-en-sodio Consejos para comprar sin sal, de alguien que NO es una autoridad (yo).
=> https://en.m.wikipedia.org/wiki/The_Vanilla_Ice_Project The Vanilla Ice Project is an American reality television series on the DIY Network. It is hosted by construction contractor and rapper Rob Van Winkle, a.k.a. Vanilla Ice, who has significant experience with home improvement and real estate flipping.
diff --git a/blog/content/2024/08/tu-transportas.gmi b/blog/content/2024/08/tu-transportas.gmi
index 3883ee80..015b2a4e 100644
--- a/blog/content/2024/08/tu-transportas.gmi
+++ b/blog/content/2024/08/tu-transportas.gmi
@@ -15,6 +15,6 @@ Después de ese batiburrillo, otro batiburrillo:
=> https://www.netflix.com/es-en/title/81217220 Me temo que no tendrá a Sarah, pero bueno...
=> https://www.cnx-software.com/2024/07/19/radxa-x4-low-cost-credit-card-sized-intel-n100-sbc-raspberry-pi-5-alternative/ ¿Una Raspberry Pi sin los problemas de las Raspberry Pi?
=> https://www.rockfm.fm/al-dia/noticias/dia-que-rosendo-conocio-rory-gallagher-unos-majaras-que-estan-locos-por-20220302_1936126 Era obvio, pero Rosendo es fan de Rory Gallagher.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/misc/problemas.md Una pequeña lista de problemas que me tocan alguna fibra determinada
-=> https://github.com/alexpdp7/alexpdp7/blob/master/FUENTES.md Ajustes a mis sugerencias RSS
+=> ../../notas/tecnologia/problemas Una pequeña lista de problemas que me tocan alguna fibra determinada
+Ajustes a mis sugerencias RSS. EDIT 2026-04-14: Eliminé este documento por estar obsoleto
=> https://en.wikipedia.org/wiki/What3words Inesperadamente controvertidos sistemas de codificar coordenadas
diff --git a/blog/content/2024/11/la-x-no-marca-el-lugar.gmi b/blog/content/2024/11/la-x-no-marca-el-lugar.gmi
index b1b1c0d3..b777f753 100644
--- a/blog/content/2024/11/la-x-no-marca-el-lugar.gmi
+++ b/blog/content/2024/11/la-x-no-marca-el-lugar.gmi
@@ -10,7 +10,7 @@ Este mes también he decidido abandonar otra comunidad online más personal. Y l
Creo que es importante saber encontrar comunidades online a las que pertenecer. Yo creo que pertenezco a varias, pero estas dos que he abandonado cubrían cosas que he perdido. No tengo una buena comunidad extendida local profesional, y sigue habiendo gente valiosa escribiendo en Twitter.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/misc/take-the-less-traveled-road.md Pero creo que hoy más que nunca tenemos que tomar decisiones "ilógicas".
+EDIT 2026-04-14: Enlace eliminado a un documento obsoleto
(Tengo cuenta de BlueSky, pero sólo he puesto dos mensajes allí explicando que no hay que usar BlueSky.)
diff --git a/blog/content/2024/11/otros-relojes-apocalipticos.gmi b/blog/content/2024/11/otros-relojes-apocalipticos.gmi
index 1480ecb3..1004ace2 100644
--- a/blog/content/2024/11/otros-relojes-apocalipticos.gmi
+++ b/blog/content/2024/11/otros-relojes-apocalipticos.gmi
@@ -25,4 +25,4 @@ El resto, en batiburrillo:
=> https://github.com/mastodon/mastodon/issues/23153 Pero este es el mayor obstáculo para navegar el Fediverso desde una terminal, en mi opinión.
=> https://typst.app/blog/2024/typst-0.12 Typst pinta guay, aunque incide en mi sorpresa ante la insistencia en la paginación. Pero esto parece que podría cambiar.
=> https://hurmet.org/sample Esto también son cálculos en papel, pero más bien en pergamino.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/hardware/ES-teles.md Artículo propio sobre la caja tonta
+=> ../../notas/tele/teles Artículo propio sobre la caja tonta
diff --git a/blog/content/2025/05/jugando-al-monopoly.gmi b/blog/content/2025/05/jugando-al-monopoly.gmi
index bce97ba5..01a41db4 100644
--- a/blog/content/2025/05/jugando-al-monopoly.gmi
+++ b/blog/content/2025/05/jugando-al-monopoly.gmi
@@ -45,5 +45,5 @@ Mis recomendaciones iniciales pasan por:
=> https://mastodon.social/@chechar/114444705177197924 [1] opino que la mejor sanción contra las prácticas monopolísticas ilegales de Google...
=> https://en.wikipedia.org/wiki/Microsoft_litigation [2] Microsoft en los juzgados
=> ../../2025/01/epistolas-inmediatas [3] Sobre mensajería instantánea en español
-=> https://github.com/alexpdp7/alexpdp7/blob/master/misc/internet-communication-channels.md [4] Sobre mensajería instantánea en inglés
+=> ../../notes/tech/internet-communication-channels [4] Sobre mensajería instantánea en inglés
=> ../../2025/03/viajar-en-el-tiempo-a-2006-para-comerle-la-cabeza-a-jack [5] Sobre redes sociales
diff --git a/blog/content/2025/05/la-web.gmi b/blog/content/2025/05/la-web.gmi
index d372fe10..9bd976f0 100644
--- a/blog/content/2025/05/la-web.gmi
+++ b/blog/content/2025/05/la-web.gmi
@@ -4,8 +4,7 @@ Vuelvo a escribir porque me suena una alarma y que llevabais más de un mes sin
Pero bueno, haré trampa; simplemente quiero dar bombo a dos artículos a los que, por diversos motivos, he estado haciendo mejoras esta mañana.
-=> https://github.com/alexpdp7/alexpdp7/blob/master/programming/the-content-web-manifesto/README.md The content web manifesto
-=> https://github.com/alexpdp7/alexpdp7/blob/master/programming/a_plan_against_the_current_web.md A plan against the current web
+Editado 2026-04-12: me cargué estos artículos porque al final todo se puede reducir a "haz que tu web funcione en lynx", que ya pongo más abajo.
La web es una de las facetas más valiosas de Internet; ambas son juntas algo *importante* para todos nosotros. Pero están en peligro.
diff --git a/blog/content/2026/03/me-gusta-el-futbol.gmi b/blog/content/2026/03/me-gusta-el-futbol.gmi
new file mode 100644
index 00000000..ae74e497
--- /dev/null
+++ b/blog/content/2026/03/me-gusta-el-futbol.gmi
@@ -0,0 +1,25 @@
+# 2026-03-19 Me gusta el fútbol
+
+Pero ya nunca veo partidos y básicamente sólo me entero de cosas porque no escaparía de los gritos ni en el fondo de la fosa de las Marianas. ¿Por qué?
+
+En 2011 escribí por aquí sobre Cruyff y la liga española[1].
+
+=> ../../2011/04/holandeses-voladores-ciclos-y-tendencias [1] Holandeses voladores, ciclos y tendencias
+
+Tengo algún recuerdo de Lineker, así que igual me acuerdo de 1986, pero pongamos que me aficioné con la primera liga de Cruyff.
+
+Entre la temporada 90-91 y la temporada 2003-2004, que es la última liga que ganó el Valencia, de esas catorce ligas hubo cuatro ligas que ganadas por tres equipos que no son ni Madrid ni Barcelona. (Dos del Valencia, una del Atlético de Madrid y otra para el Depor.)
+
+A partir de la 2004-2005, el Atlético de Madrid ha ganado dos ligas y las otras veinte, todas para Madrid y Barcelona.
+
+Por mucho que mi equipo preferido haya ganado 12 ligas frente a 7 de su eterno rival, que la competición con más partidos sea una moneda al aire entre los mismos dos equipos siempre (con el canto para el mismo tercer equipo siempre) me parece un soberano aburrimiento. Desde que el Valencia quedó tercero en la liga 2011-2012, sólo el Girona en la 2023-2024 ha conseguido colarse entre los tres primeros (para quedar el decimosexto la siguiente temporada). En mi opinión, la imprevisibilidad es uno de los factores que más contribuye al entretenimiento.
+
+Además, el recuerdo quizá endulzado por el tiempo que tengo del periodismo deportivo (por ejemplo, El Día Después con Michael Robinson, que echó el cierre en 2005) ha sido sustituido por el ruido y la furia vacíos a la que yo atribuyo su comienzo a la temporada 2009-2010. (Más o menos por esa época se labran más polarizaciones, curiosamente. Casualmente, es 2007 cuando Facebook superó a MySpace en como la plataforma social más popular del mundo y Twitter tuvo su explosión durante la conferencia South by Southwest Interactive.)
+
+Pero lo que me llama más la atención es lo absurdamente caro que te puede salir ver fútbol. Mirad lo que os costaría ver los 90 minutos semanales de vuestro equipo favorito en liga y comparad con lo que os costaría tener streaming hasta aburriros de cualquier otra cosa.
+
+Sigo considerando que el fútbol no se lo come todo por casualidad. (Aunque me parece que la introducción del videoarbitraje allá por 2017 en mi opinión rompe una de sus virtudes: que los aficionados juegan prácticamente a lo mismo que los equipos de primer nivel.) Pero mi consejo es que hay deporte para aburrir con la misma o más emoción, gratis y sin la toxicidad del fútbol de primer nivel al que estaba tan aficionado de joven.
+
+(Personalmente, principalmente veo ping pong y baloncesto, que son los dos deportes que he practicado más, y casi con cualquier cosa libremente disponible sin piratear en Internet, aunque por diversos motivos, raramente estoy viendo nada de más de diez minutos.)
+
+Apéndice 2026-04-05: menuda turra que solté sin mencionar lo más reciente. Que ahora cada vez que hay fútbol, cortan la mitad de Internet. El bonus es que es un conflicto entre varias partes en el que todas las partes me caen mal. El fútbol se lo come todo, huid si podéis.
diff --git a/blog/content/2026/03/notas.gmi b/blog/content/2026/03/notas.gmi
new file mode 100644
index 00000000..0a1da7b0
--- /dev/null
+++ b/blog/content/2026/03/notas.gmi
@@ -0,0 +1,32 @@
+# 2026-03-01 Notas
+
+Hoy tocaba escribir en el blog, pero en vez de ello me he dedicado a migrar más contenido (principalmente "ensayos") a esta web.
+
+Durante mucho tiempo, metía ficheros de texto (mayoritariamente en Markdown) en mi "monorepo" Git personal. (El monorepo es un amalgama de un montón de cosas, incluido este blog y muchas más cosas.) Esta técnica no funciona mal y es muy cómoda, pero me ataba demasiado a GitHub.
+
+Ahora podéis leer ese contenido en:
+
+=> ../../notes/ Notes (en inglés)
+=> ../../notas/ Notas (en español)
+
+Con lo que ahora todo tiene URLs controladas por un servidor.
+
+Además, he convertido todo (a manopla) al formato gemtext de Gemini. gemtext es mucho más limitado que Markdown, con lo que he tenido que simplificar un poco el formato. Pero creo que esta "sencillez obligada" me ayuda a estructurar las cosas de una manera más simple y más adaptable a distintos formatos. (Como que por ejemplo, podéis leer todo usando un navegador de Gemini, lo que ofrece en mi opinión muchas ventajas.)
+
+Tras borrar también bastante contenido obsoleto o de baja calidad, creo que ya no queda casi nada susceptible de pasarse a gemtext. Todavía hay algo material, pero es mayormente:
+
+* Listados en formato Org con mucha jerarquía que no funcionarían muy bien en gemtext.
+* Un par de artículos que debería actualizar y modernizar bastante... cosa que seguramente no haré a corto plazo y esperaré a que necesiten un remodelado profundo.
+
+Con esto creo que cierro una primera fase de la iteración de este sitio web (ahora cápsula y no sólo blog). Curiosamente he "perdido" funcionalidad:
+
+* Falta navegabilidad; básicamente sólo podemos desandar nuestros pasos en la nueva web usando el botón de "atrás" de nuestro navegador.
+* He perdido la editabilidad que me daba GitHub; antes los textos en GitHub tenían un botón editar la mar de majo y las entradas del blog tenían un enlace para editarlas en GitHub.
+
+Lo primero creo que tengo maneras de resolverlas que intentaré aplicar igual a corto plazo.
+
+Lo segundo me fastidia mucho más y no se me ocurre una buena manera de subsanarlo. Podría seguir usando las funcionalidades de GitHub, pero claro, estoy intentando reducir mi dependencia. Podría usar software equivalente a GitHub, pero me estoy inclinando por alternativas mucho más sencillas para hospedar Git que no tienen funcionalidad equivalente (y que me resultan muy atractivas por otros motivos).
+
+Para cerrar comentaré que ahora mismo el contenido de esta web es más o menos de 700.000 palabras. A veces en mi cabeza le llamo a esto "mi universo cinemático", porque no es más que una película que me he montado en la cabeza durante más de un cuarto de siglo. Por suerte o por desgracia no soy Jack Kerouac[1], pero al menos os diré que tanta verborrea me entretiene y creo que me enriquece. Os animo a montar vuestros propios universos cinemáticos.
+
+=> https://sabr.org/journal/article/jack-kerouac-the-beat-of-fantasy-baseball/ [1] Jack Kerouac: The Beat of Fantasy Baseball
diff --git a/blog/content/2026/03/peligros-de-bolsillo.gmi b/blog/content/2026/03/peligros-de-bolsillo.gmi
new file mode 100644
index 00000000..2464ed43
--- /dev/null
+++ b/blog/content/2026/03/peligros-de-bolsillo.gmi
@@ -0,0 +1,45 @@
+# 2026-03-20 Peligros de bolsillo
+
+Google lleva un tiempo intentando controlar los programas que uno puede ejecutar en su móvil Android. La idea es que toda aplicación deba estar aprobada por Google, lo que incluye que Google pueda identificar a la persona física responsable de la aplicación.
+
+Esta es la enésima versión de cosas de las que ya he hablado varias veces por aquí:
+
+=> ../../2025/02/el-lento-adios-a-la-magia-de-los-ordenadores El lento adiós a la magia de los ordenadores (2025, sobre que nos limiten en el uso de nuestros dispositivos)
+
+=> ../../2015/12/por-que-no-uso-productos-apple Por qué no uso productos Apple (2015, sobre cómo Apple me parece de lo peor en este sentido)
+
+Pero la verdad, las medidas en concreto que Google propone ahora no me gustan, pero tampoco se me ocurre nada mejor.
+
+Básicamente, la opción que va a dar Google para que podamos ejecutar aplicaciones que no controlan parece draconiana: entre otras cosas, el botón para habilitar esta funcionalidad tardará un día entero en tomar efecto (y además estará bastante escondido).
+
+Para mí, esto es bastante más satisfactorio que lo que proponían antes y no se me ocurre una opción mejor.
+
+Los autores de F-Droid, un excelente sistema para distribuir aplicaciones de código libre en Android de donde instalo bastantes aplicaciones, firman la siguiente carta abierta en contra de estas medidas:
+
+=> https://keepandroidopen.org/es/ Keep Android Open
+
+Enlazo a la traducción en español que todavía no está actualizada con la respuesta a la última propuesta de Google, donde rechazan la propuesta. La verdad que su contraargumento principal es que todavía no se puede verificar que Google hará esto y que Google puede volver a cambiar las reglas cuando quiera. Ambas son ciertas y estoy de acuerdo, pero también dan énfasis a que las medidas son un poco draconianas.
+
+En mi opinión, Google está reaccionando a una amenaza concreta. Según Google, hay muchos entes malignos haciendo llamadas telefónicas a gente y engañándoles para que instalen aplicaciones maliciosas en su teléfono. Si esto es cierto, ¿qué hacemos?
+
+Antes de responder a esta pregunta, en este punto creo que debemos preguntarnos varias cosas.
+
+Lo primero es que cómo hemos llegado a esta situación. Instalar una aplicación maliciosa en tu móvil puede ser muy peligroso. Por muchas medidas de protección que se pongan, es inevitable que pongamos en peligro cualquier cosa a la que podamos acceder por ese móvil. Y eso, por muchos motivos distintos, incluye muchísimas cosas importantes.
+
+Y hoy en día, estamos casi obligados a usar en móvil y casi obligados a manejar cosas sensibles a través de él. Por ejemplo, hoy en día el canal de comunicación con muchos de nuestros allegados es por (mal que me pese) WhatsApp. Muchos bancos restringen el acceso a mucha funcionalidad útil a su aplicación del móvil. Incluso algunos organismos oficiales nos hacen pasar por el móvil.
+
+(Y ojo, esto no es para nada algo exclusivo del móvil. Esto ya no pasa tanto con los ordenadores de escritorio y portátiles porque simplemente están muriendo. Creo que todo el mundo tiene móvil y cada vez menos gente tiene ordenadores porque los móviles son más sencillos y requieren menos esfuerzo de uso que los ordenadores tradicionales.)
+
+Entonces viene la pregunta de si, siendo el móvil un dispositivo imprescindible para la vida moderna, todo el mundo debe aprender a manejarlo con responsabilidad para estar protegido.
+
+Yo creo que es mejor si podemos dar a la gente una opción para poder comunicarse por WhatsApp y gestionar su dinero de una manera segura sin tener que dedicar un esfuerzo importante en formación para no correr un peligro real y significativo.
+
+Y en ese punto, creo que las medidas de Google pueden ser útiles y no veo opciones mejores si quiero dar a la gente la opción que acabo de mencionar. Porque me creo que ese bloqueo de un día puede ser altamente efectivo.
+
+Pero que yo defienda estas medidas no quiere decir que esté contento con ellas. Que hayamos llegado hasta aquí es un problema, y que la gente que está dispuesta a aprender a protegerse tenga que aceptar todas las cosas malas que vienen en este paquete me parece terrible.
+
+Porque en efecto, todos estamos prácticamente obligados a usar un dispositivo totalmente controlado por Apple o Google, dos empresas privadas cuyo objetivo es ganar dinero. Y esto es una tragedia por innumerables motivos, tanto obvios como sutiles.
+
+En mi opinión, lo que necesitamos es que todo servicio "vital" se pueda usar sin pasar por el control de ninguna gran empresa privada. Si un sistema de mensajería es importante para vivir en sociedad, debe ser interoperable como es (o debería ser) el correo electrónico. Para usar WhatsApp tengo que usar un dispositivo controlado por Google o Apple y ejecutar en este dispositivo una aplicación controlada por Facebook. Con el correo electrónico (con ciertas notas al pie), puedo usar el dispositivo que me dé la gana, con el programa que me dé la gana y escogiendo el proveedor de servicio que me dé la gana. (E incluso, con más notas al pie, me lo puedo guisar todo yo mismo.)
+
+Si tenemos esto, las restricciones de Google me dan bastante igual, porque creo que bajo estas condiciones, no tendré un teléfono controlado por Google como lo tengo hoy en día, o al menos tendré la opción. Y si no tenemos esto, creo que tener que esperar un día para poder instalar aplicaciones de F-Droid quizá sea más bueno que malo.
diff --git a/blog/content/2026/03/this-was-supposed-to-be-the-future.gmi b/blog/content/2026/03/this-was-supposed-to-be-the-future.gmi
new file mode 100644
index 00000000..fae1036e
--- /dev/null
+++ b/blog/content/2026/03/this-was-supposed-to-be-the-future.gmi
@@ -0,0 +1,27 @@
+# 2026-03-04 This was supposed to be the future
+
+(No sé cuán antigua es una camiseta que creo que todavía conservo con este mensaje. Mucho texto ya es ilegible.)
+
+Estaba oyendo hoy otra cantinela sobre las nuevas maravillas de Apple. Nada nuevo bajo el sol; la gente sigue dándole dinero y elogios a dos manos a Apple, y a mí siguen sin gustarme. He pensado en escribir sobre el tema, pero me he puesto a repasar lo que escribí en 2015 sobre el tema:
+
+=> ../../2015/12/por-que-no-uso-productos-apple Por qué no uso productos Apple
+
+Y me ha perturbado que tendría que cambiar muy poco para ponerlo al día. Sí, ya estoy en una edad donde muy probablemente me queda menos por delante que lo que llevo a mis espaldas, y que por tanto, mi capacidad para corregir mis errores está todavía más mermada, pero si estoy equivocado, me parece cuanto menos curioso que esté equivocado de la misma manera durante más de una década.
+
+Esto me ha llevado a caer en que este mundo que en cada momento nos parece que cada vez va más rápido, quizá sólo esté revolucionando muy rápido sin moverse del sitio. Porque hace un año recordé la que quizá fue la gran revolución informática en mi era, hace un cuarto de siglo:
+
+=> ../../2025/01/los-sistemas-operativos-y-un-amanecer-de-internet Los sistemas operativos y un amanecer de Internet
+
+Alrededor del cambio de milenio fuimos acostumbrándonos a que nuestros ordenadores estuviesen siempre conectados a Internet. Unos años más tarde (muchos lo datarían en 2007; yo creo que fue un poco antes), la conexión a Internet constante comenzó a estar con nosotros incluso lejos de la mesa del ordenador.
+
+Tecleo esto en un ordenador comprado en 2017 que no distingo demasiado del pepino que la semana pasada me pusieron en el curro. Mi BlackBerry de 2011 me parece mejor en algunos aspectos a mi Pixel 9A del año pasado.
+
+Pero lo peor de todo es que la parte de las involuciones ya fue objeto de burla en 2010... ¡porque en 2003 llamaban locos a los que lo veían venir!
+
+=> https://www.explainxkcd.com/wiki/index.php/743 Infrastructures
+
+En los últimos años, claro, es difícil resistir al asedio de lo que muchos dicen que es la nueva revolución. Aunque creo que ya tocaría, veo poco positivo y mucho negativo en el tema del lustro, quizá década.
+
+(Quiero clarificar que me refiero estrictamente a lo mío; por supuesto observo grandísimas innovaciones muchísimo más relevantes que lo que podemos hacer todos en vez de coger un libro.)
+
+¿Soy un señor mayor que no entiende los tiempos modernos? ¿Me estoy perdiendo algo? ¿Cuándo podremos celebrar algo como lo que celebrábamos hace un par de décadas?
diff --git a/blog/content/2026/04/breve-e-incompleta-historia-del-desarrollo-web.gmi b/blog/content/2026/04/breve-e-incompleta-historia-del-desarrollo-web.gmi
new file mode 100644
index 00000000..ed19cb36
--- /dev/null
+++ b/blog/content/2026/04/breve-e-incompleta-historia-del-desarrollo-web.gmi
@@ -0,0 +1,93 @@
+# 2026-04-05 Breve e incompleta historia del desarrollo web
+
+El primer navegador y servidor web aparecieron en 1990, pero hasta 1993 la web era mayormente documentos estáticos; los servidores web tiraban de una carpeta con ficheros HTML con los que se construían las primeras páginas web. Cada vez que ibas a una dirección de la web, veías siempre el mismo documento, que podía contener enlaces a otros documentos.
+
+Es decir, nada de teclear un término de búsqueda en un formulario y obtener un listado de sitios web, ni por supuesto nada muchísimo más completo como poder escribir correo o publicar nada en la web usando sólo un navegador.
+
+(¡Esto no es del todo cierto! WorldWideWeb, el primer navegador, incorporaba un editor de páginas web. Pero sólo servía para editar el sitio web hospedado en el mismo ordenador donde ejecutábamos el navegador.)
+
+Últimamente pienso que nos debíamos haber quedado ahí, pero en 1993 apareció el "Common Gateway Interface", unas siglas bastante inescrutables excepto por el "Interface", con lo que lo dejaremos en CGI a secas.
+
+El CGI permite que un servidor web responda a la petición de un navegador no yendo a buscar un documento HTML dentro del ordenador, sino ejecutando un programa que genere la respuesta.
+
+Si os atrevéis con el terminal y tenéis Python instalado, podéis viajar al pasado siguiendo los siguientes pasos:
+
+1. Cread un directorio vacío.
+
+2. Cread un directorio con el nombre cgi-bin dentro del primer directorio.
+
+3. Cread un archivo con el nombre hola dentro del directorio cgi-bin con el siguiente contenido:
+
+```
+#!/bin/sh
+
+echo Content-type: text/html
+echo
+echo Hoy es $(date)
+```
+
+4. Haced que este archivo sea ejecutable con el siguiente comando:
+
+```
+chmod ugo+x cgi-bin/hola
+```
+
+5. Ejecutad un servidor web apropiado:
+
+```
+python3 -m http.server --cgi
+```
+
+6. Visitad http://0.0.0.0:8000/cgi-bin/hola y comprobad el resultado. Recargad la página varias veces y veréis que se actualiza la fecha, con lo que ya tenéis una página dinámica.
+
+Con este invento relativamente sencillo ya prácticamente podemos llegar a tener gran parte de la web hasta 2004 o así.
+
+El CGI es sencillo, pero algo tedioso. Cuando un programador escribe más de dos o tres programas CGI, se da cuenta de que se repiten los mismos patrones una y otra vez. El ejemplo anterior utiliza el lenguaje shell, pero la historia que conservamos parece indicar que el lenguaje de programación Perl fue de los más usados en los albores del CGI pues era de las maneras más convenientes de reutilizar código para implementar sitios web dinámicos mediante CGI.
+
+Seguramente uno de los primeros módulos para escribir CGI en Perl es CGI.pm, del que la versión más antigua que se conserva en el principal repositorio de código Perl es la 2.10 de 1995.
+
+Perl es un lenguaje de programación de propósito general que apareció en 1987, mucho antes que la web y el CGI.
+
+Allá por 1993, un programador comenzó a escribir un lenguaje de programación con el propósito de implementar su página personal. La primera versión oficial salió en 1997, con el nombre PHP.
+
+A diferencia del CGI, hoy en día es muy complejo reproducir la experiencia exacta de desarrollo de las primeras versiones de PHP, pero si tenéis PHP instalado, podéis hacer algo relativamente similar creando un archivo con el nombre index.php y el siguiente contenido:
+
+```
+<form>
+ <label>a: <input name="a" type="number">
+ <label>b: <input name="b" type="number">
+ <input type="submit">
+</form>
+
+<?php
+ if ($_GET['a'] && $_GET['b']) {
+ echo $_GET['a'] + $_GET['b'];
+ }
+?>
+```
+
+Luego, ejecutad el siguiente comando:
+
+```
+php -S 0.0.0.0:8000
+```
+
+Entonces visitad http://0.0.0.0:8000 con vuestro navegador, introducid dos números en los campos de entrada, pulsad el botón y veréis la suma.
+
+Implementar la misma funcionalidad con CGI, incluso reutilizando código como CGI.pm, es bastante más tedioso y requiere más conocimientos que usar PHP. Por eso el ejemplo que os he puesto de CGI es algo tan inútil.
+
+Yo mismo descubrí PHP por el año 2000 y, como muchísima otra gente, quedé hipnotizado por lo que en el momento era una de las mejores maneras de hacer cosas útiles con un ordenador para otra gente.
+
+A diferencia del CGI, mediante el cual nacieron las webs dinámicas, PHP no trae nada nuevo directamente al usuario de la web, sólo intenta simplificar la vida al programador. Pero facilitando la vida al programador, seguramente PHP aceleró el desarrollo web permitiendo a los programadores traer webs más útiles.
+
+Como muchos sabréis, ni PHP ni Perl han sido el final. Hoy en día, prácticamente todos los lenguajes de programación se usan para desarrollo web, con todo tipo de código reutilizable que cada vez nos aleja más del CGI.
+
+Paralelamente al desarrollo de CGI, PHP y las webs dinámicas, en 1995 apareció el primer navegador con JavaScript. A diferencia de los ejemplos anteriores, donde el código que os he puesto se ejecuta en el servidor web, JavaScript se ejecuta en vuestro navegador. Esto permite otro tipo de interacciones que ejemplificaremos con Google Maps lanzado en 2005, que ya nos permitía desplazarnos por el mapa de una manera mucho más interactiva que lo que nos permite ninguna web dinámica sin JavaScript.
+
+Casi tres décadas más tarde, curiosamente el CGI sigue existiendo pero la mayoría del desarrollo web no tiene casi nada que ver con el de 1995 con PHP y JavaScript. En mi opinión, los ejemplos que os he puesto anteriormente omiten algo de tedio, pero son mayormente representativos de esas maneras de desarrollo, mientras que me marea simplemente pensar en poner un ejemplo mínimo de desarrollo web moderno.
+
+El fenómeno que observamos en mi opinión se repite por todo el ámbito del desarrollo del software: cada vez el paso inicial de desarrollo nos lleva más lejos, pero también es más difícil de abarcar.
+
+Lo que me ha llevado a escribir este artículo es que esta mañana he decidido jugar con una idea que tenía desde hace tiempo en la cabeza, y mi prototipo han sido 100 líneas de Python con WSGI, un descendiente directo del CGI. Para otras ideas sin duda me habría ido a algo mucho más moderno y potente, pero para esta en concreto dudo que hubiese encontrado un camino más corto que las maneras más primitivas del desarrollo web. Pero, ¿habría tomado este camino si me hubiese iniciado en la programación web allá por 2013 con la primera versión de React?
+
+Yo creo que no. Y quizá ni lo hubiese intentado.
diff --git a/blog/content/2026/04/el-enemigo-en-casa.gmi b/blog/content/2026/04/el-enemigo-en-casa.gmi
new file mode 100644
index 00000000..36eb9fa3
--- /dev/null
+++ b/blog/content/2026/04/el-enemigo-en-casa.gmi
@@ -0,0 +1,35 @@
+# 2026-04-08 El enemigo en casa
+
+Allá por 2013 cogí una webcam (diría que una de Playstation) y monté un pequeño sistema de videovigilancia para poder echar un ojo a la gata desde fuera de casa. Un programilla que sabía detectar movimiento y unos cuantos scripts hacían que recibiese un email con un vídeo cuando la gata pasaba delante de la cámara. Fue algo bastante práctico aunque dejé de usarlo en algún momento.
+
+Desde luego no fui un pionero, pero creo que poco después el tema de la domótica se puso muy de moda. No sólo entre la gente más acostumbrada a trastear, sino que además se sumó el público más general, en parte gracias a que comenzaron a aparecer muchos aparatos para estos menesteres con costes más bien asequibles que suponían mucha menos complicación que mi chapuza sujeta a base de chicle.
+
+Pero este boom se vio acompañado de mucha gente obsesionándose con aprender a marchas forzadas temas de seguridad informática para proteger su red doméstica por si estos nuevos y convenientes aparatos resultaban ser malignos. Ni trabajando en una empresa con muchos técnicos en redes había oído mencionar tanto el término vLAN.
+
+La verdad que en su momento tanta paranoia me parecía un poco exagerada. Mi razonamiento era más bien que a pesar de unos cuantos incidentes preocupantes, simplemente bastaría con usar productos de marcas más o menos establecidas con cierta necesidad de mantener su reputación. Es decir, no meter en casa un aparato de quién sabe qué empresa que igual desaparece al mes que viene debería bastar para dormir tranquilo.
+
+(En 2024 me hice con un par de aparatos de este tipo que sigo teniendo conectados y con los que realmente no he tomado muchas precauciones. Pero seleccioné cuidadosamente la marca que elegí, entre otros motivos porque me daba bastante confianza.)
+
+Además, incluso aunque nos colasen un dispositivo malicioso, tampoco me parecía una amenaza tan seria.
+
+Creo que en ese momento mi razonamiento ya no era muy acertado, pero además últimamente hay acontecimientos que me hacen replantearme mucho más mi postura y mis recomendaciones.
+
+Los ataques de denegación de servicio no son algo nuevo; desde hace mucho tiempo hay actores malignos que bombardean servicios de Internet con una avalancha de peticiones que pueden incluso tumbar el servicio y causar muchos problemas a su operador. Sin embargo, hasta hace poco estos ataques tenían más bien pocos objetivos y en general se trataba de objetivos que ya tenían que preocuparse de defenderse ante todo tipo de hostilidades, y en la mayoría de casos, podían disponer de recursos para protegerse.
+
+Sin embargo, en tiempos recientes estos ataques se han expandido significativamente. Incluso servicios muy pequeños hospedados por particulares reciben ataques de este tipo constantemente. Incluso yo mismo he recibido cierta carga que por suerte no ha tenido mayores consecuencias que costarme un par de euros mensuales, pero nada en comparación con lo que veo sufrir a otros.
+
+Es especialmente difícil defenderse de estos ataques; es muy complicado identificar y bloquear el tráfico malicioso, pues proviene de muchísimas conexiones a Internet domésticas.
+
+Que es precisamente lo que se conseguiría controlando una buena cantidad de dispositivos de domótica maliciosos.
+
+(Sí es cierto que no es la única manera de conseguirlo. Hay empresas que ofrecen este tipo de "acceso a Internet", en general porque controlan aplicaciones para móviles "dudosas" y que por tanto pueden canalizar tráfico a través de los dispositivos en los que alguien ha instalado estas aplicaciones.)
+
+Lo curioso del caso es que las precauciones que se pusieron de moda para controlar los dispositivos de domótica en general no serán efectivas para prevenir esto, pues estas medidas se centraban en aislar estos dispositivos para que no pudiesen acceder al resto de nuestra red. Pero para usarlos para lanzar un ataque no hace falta que se conecten a otros dispositivos de nuestra red; basta con que puedan conectarse a Internet.
+
+Y la mayoría de estos dispositivos necesitan conectarse a Internet para ofrecer su modo de funcionamiento "fácil" en los que usan la infraestructura del fabricante en vez de requerirnos mantener nuestra propia infraestructura. (Es decir, en el caso de una cámara, por ejemplo, la cámara va enviando el vídeo al servicio del fabricante donde queda almacenado, y a posteriori nosotros nos conectamos al servicio del fabricante para ver las grabaciones.) Y por otras modernidades, a no ser que el fabricante del aparato lo facilite expresamente, no es tan fácil restringir la conexión a Internet de estos aparatos para que sólo se puedan conectar a lo imprescindible para su funcionamiento y no puedan usarse para lanzar ataques de denegación de servicio distribuidos.
+
+Con lo que yo antes hubiese recomendado despreocuparse un poco del tema, pero ahora me veo obligado a recomendar mucha cautela.
+
+Lamentablemente, la única alternativa segura (aparte de no usar estos dispositivos) sería usar sólo aparatos que no necesiten conexión a Internet para funcionar, pero esto necesariamente implica mucho más trabajo por nuestra parte, e incluso en ocasiones no será viable.
+
+Fuera de eso, sólo puedo insistir en mi consejo de limitarse a fabricantes que tengan más que perder que que ganar participando en actividades maliciosas. Pero dentro de esto seguimos teniendo un riesgo real de facilitar estos ataques y no es fácil mitigar este riesgo.
diff --git a/blog/content/gemini.gmi b/blog/content/gemini.gmi
new file mode 100644
index 00000000..b79340d9
--- /dev/null
+++ b/blog/content/gemini.gmi
@@ -0,0 +1,30 @@
+# Gemini
+
+This is my Gemini start page. I was unhappy with not having synchronized bookmarks in my Gemini clients, until I realized I could just publish a start page.
+
+The links below are Gemini links. You need a Gemini client to open them.
+
+## Aggregators
+
+=> gemini://cosmos.skyjake.fi/ Cosmos
+=> gemini://caracolito.mooo.com/deriva/ bot en deriva
+=> gemini://planet-gemini.fr Planet Gemini Francophonie - Agrégateur de capsules francophone
+
+## Search engines
+
+=> gemini://kennedy.gemi.dev/ Kennedy: Search Gemini Space
+=> gemini://tlgs.one/ TLGS - "Totally Legit" Gemini Search
+=> gemini://cdg.thegonz.net/ Collaborative Directory of Geminispace
+
+## Other stuff of interest
+
+The links below are web links, for those who do not have a Gemini client yet.
+
+### Clients
+
+=> https://gmi.skyjake.fi/lagrange/ Lagrange
+=> https://github.com/makew0rld/amfora Amfora
+
+### Other software
+
+=> https://ñix.es/cgit/alex/coppewebite.git/about/ Coppewebite is what I use to generate and serve this capsule
diff --git a/blog/content/laspelis/1041.gmi b/blog/content/laspelis/1041.gmi
index 5370608c..18744875 100644
--- a/blog/content/laspelis/1041.gmi
+++ b/blog/content/laspelis/1041.gmi
@@ -3,10 +3,11 @@ Date: Sun, 31 Dec 2006 13:49:25 -0000
From: "koalillo" <koalillo@...>
Subject: resumen del 2006
-```
Lo podéis leer en mi blog:
-https://alex.corcoles.net/2006/12/365-1/
+=> ../2006/12/365-1
+
+```
o aquí
Uno no es dado a la retrospectiva, pero visto el aburrimiento y sopor
diff --git a/blog/content/laspelis/1061.gmi b/blog/content/laspelis/1061.gmi
index 72825f65..0d88aab5 100644
--- a/blog/content/laspelis/1061.gmi
+++ b/blog/content/laspelis/1061.gmi
@@ -3,9 +3,9 @@ Date: Tue, 25 Dec 2007 17:45:54 -0000
From: "koalillo" <koalillo@...>
Subject: el 2007 va a dejar de existir
-```
-https://alex.corcoles.net/2007/12/los-ultimos-coletazos/
+=> ../2007/12/los-ultimos-coletazos
+```
Por mucho que diga la biblia, 7 películas no son muchas para el 2007,
pero puestos a hacer un resumen de las pelis de estreno del año, sólo
mencionaremos estas- cabe destacar que 4 de ellas las vi en Sitges.
diff --git a/blog/content/notas/comprar-bajo-en-sodio.gmi b/blog/content/notas/comprar-bajo-en-sodio.gmi
new file mode 100644
index 00000000..9af1e1ea
--- /dev/null
+++ b/blog/content/notas/comprar-bajo-en-sodio.gmi
@@ -0,0 +1,176 @@
+# Comprar bajo en sodio
+
+Es complicado comer una dieta baja en sal. Este documento contiene productos que:
+
+* Podríamos pensar que tienen más cantidad de sal, pero en realidad no tienen tanta. (Intento comer cosas con menos de 1g sal/100g, preferiblemente menos de 0,5g.)
+* Cosas que pese a no tener sal, son más sabrosas de lo que uno esperaría.
+
+DISCLAIMER: No soy médico ni nutricionista. Contrastad todo lo que recomiendo aquí, que no son más que consejos y sugerencias sobre mis experiencias, sin ningún rigor médico. El propósito de esta página es compartir ideas, no dar consejo médico/nutricional.
+
+ATENCIÓN: Listo específicamente el producto preciso y la cantidad de sal aplica solamente a ese producto. Dentro de productos simiares, el contenido en sal puede variar muchísimo. Prestad siempre atención al comprar para revisar la cantidad de sal, que puede no coincidir con la descrita aquí. La sal no es la única fuente de sodio, revisad si lo que coméis lleva otras sustancias con sodio como el glutamato monosódico (o MSG).
+
+## Recursos interesantes
+
+=> https://world.openfoodfacts.org Open Food Facts
+Sorprendentemente, contiene la mayoría de productos que he intentado buscar
+
+## Productos
+
+### Quesos
+
+=> https://www.compraonline.alcampo.es/products/auchan-queso-arz%C3%BAa-ulloa-d-o-p-500-g-producto-alcampo/91158 AUCHAN Queso Arzúa Ulloa D.O.P. 500 g.
+Sal: 0,39/100g
+
+Este queso es el motivo principal para crear este documento. Este tipo de quesos parecen en general bajos en sal, y el de Alcampo tiene especialmente poca. Sin embargo, me gusta mucho (y me hace dudar que la información nutricional sea correcta).
+
+Los quesos tipo tetilla también tienen poca sal, pero más que este.
+
+Burratas
+Sal: Mercadona 0,61/100g
+
+Las burratas también tienen poca sal, y pueden ayudar a dar algo de vida a algún plato.
+
+Mascarpone
+Sal: Mercadona 0,11/100g
+
+El mascarpone puede servir para hacer más cremoso algún plato, sin añadir demasiada sal.
+
+Mercadona - Queso untar light de vaca Hacendado
+Sal: 0,75/100g
+
+El queso de untar light de Mercadona tiene bastante más sal que otros quesos apuntados aquí, pero menos que la mayoría de quesos de untar. Puede ser un capricho ocasional.
+
+### Pan
+
+Mercadona - Piquitos bajos en sal Hacendado
+Sal: 0,22/100g
+
+Para su bajo contenido en sal, los picos bajos en sal de Mercadona son muy sabrosos y pueden servir para picar.
+
+Alcampo - Pan Milagros de molde integral sin corteza
+Sal: 0,76/100g
+
+En general el pan de molde suele llevar bastante sal, aunque hay excepciones.
+
+Tortillas de trigo integrales Auchan
+Sal: 0,88/100g
+
+Las tortillas de trigo suelen llevar más sal, no he encontrado con menos que estas.
+
+### Conservas
+
+Hígado de bacalao ahumado
+Sal: Auchan 0,54/100g
+
+El hígado de bacalao es graso, pero sabroso pese a no tener mucha sal. Puede servir para aderezar un plato.
+
+Atún en aceite bajo en sal
+Sal: Calvo 0,16/100g, Mercadona 0,3/100g
+
+Aunque abuso un poco del atún bajo en sal, sirve para dar un poco de vida a muchos platos. Ojo, que la cantidad de sal puede variar mucho.
+
+Lomos de bonito en aceite
+Sal: Miau 0,59/100g
+
+Los lomos de bonito en aceite, generalmente en tarros de cristal, llevan más sal que el atún en aceite bajo en sal, pero algunos no llevan mucho más y me parecen más sabrosos. Ojo, que la cantidad de sal puede variar mucho (por ejemplo el de Mercadona se va a 0,84/100g).
+
+### Platos preparados
+
+Litoral Fabada asturiana -30% sal y grasa
+Sal: 0,6/100g
+
+Tortilla de patata sin cebolla Auchan
+Sal: 0,91/100g
+
+Carrilera en salsa Carretilla
+Sal: 0.68/100g
+
+Pizza cuatro quesos Auchan
+Sal: 0.9/100g
+
+Pizza mozzarella Auchan
+Sal: 0.83/100g
+
+Aunque los platos preparados suelen tener bastante sal, a veces alguno lleva menos de lo que parece.
+
+### Pasta
+
+Pasta rellena
+Sal: Giovanni Rana ravioli costillas a la barbacoa 0,6/100g
+
+Muchas pastas rellenas tienen bastante sal, pero al haber bastante variedad, a veces nos encontramos sorpresas. No es ideal comer pasta rellena sólo hervida, pero de esta manera podemos reducir nuestro consumo de sal.
+
+### Cereales
+
+Weetabix Crispy Minis Choco
+Sal: 0,16/100g
+
+De los mejores cereales con nutri-score A, y con menos sal que otros (e.g. los Choco Krispies de Kellogg's tienen 0,67/100g de sal). (Nota: recientemente pasaron a tener nutri-score B, aunque la información nutricional no cambió.) Si queremos desayunar cereales, estos nos permiten ahorrar un poco de sodio.
+
+### Patatas
+
+Patatas microondas
+Sal: Mercadona 0,015/100g
+
+Las patatas de microondas se preparan rápido y combinadas con otros productos, pueden arreglar una comida rápida. En general, suelen llevar muy poca sal y están buenas sin añadir más, aunque es recomendable aderezarlas con otro producto sin sal.
+
+### Patatas fritas y snacks
+
+Patatas prefritas congeladas
+Sal: Mercadona Patatas prefritas Waffle fries Lambweston ultracongeladas 0,5/100g
+
+Muchas patatas prefritas congeladas no llevan mucha sal y se pueden comer perfectamente solas.
+
+Patatas fritas
+Sal: Mercadona bajas en sal 0,011/100g, Patatas Fritas en Aceite de Oliva "Arte Fritas" 0.5/100g, Patatas sabor picante Alcampo 0,8/100g
+
+Las patatas fritas sin sal están más buenas de lo que a priori cabría esperar, y pueden ser un aperitivo más que adecuado. Y no son frecuentes, pero algunas patatas fritas llevan menos sal que la mayoría.
+
+Preparados de patata
+Sal: Mercadona patatas bravas con allioli y salsa picante 0,37/100g, Mercadona patatas con allioli 0,6/100g
+
+Aunque llevan más sal que otros productos de esta categoría, siguen teniendo no mucha sal y pueden ser otro aperitivo.
+
+Tortitas
+Sal: Ecocesta 0,5/100g
+
+En general, las tortitas (de arroz, maíz, etc.) *no* son bajas en sal. Sin embargo, se pueden encontrar algunas con menos sal. En el Alcampo que uso, hay una sección con tortitas que todas tienen bastante sal, pero en la sección de alimentos dietéticos tienen las tortitas Ecocesta con menos sal.
+
+Tortolines chifles con sal
+Sal: 0,5/100g
+
+Estos chips de plátano tienen algo menos de sal que la mayoría de snacks salados que encontramos en el supermercado.
+
+### Arroces
+
+Arroz cocido basmati Sabroz Brillante
+Sal: 0,35/100g
+
+Los vasitos de arroz pueden variar bastante en sal, pero los Sabroz no llevan muchísima. Se pueden combinar con otros productos para arreglar una comida rápida.
+
+### Salsas
+
+Mayonesa Calvé sabor casero
+Sal: 0,73/100g
+
+La mayoría de mayonesas tienen bastante sal, pero hay alguna excepción.
+
+Patak's Tikka Masala
+Sal: 0,72/100g
+
+Una salsa india con una cantidad de sal moderada que puede aderezar arroz o carne.
+
+Alioli Prima
+Sal: 0,72/100g
+
+El alioli Prima no es particularmente bueno, pero no he encontrado otro allioli que no tenga mucha más sal.
+
+Nacho Cheese Doritos
+Sal: 0,9/100g
+
+Salsa guacamole Old El Paso
+Sal: 0,8/100g
+
+### Especias
+
+Aunque en general no he encontrado especias que compensen comer sin sal, el curry es de lo que se acerca más.
diff --git a/blog/content/notas/index.gmi b/blog/content/notas/index.gmi
index 5c0cc7dc..c3345f38 100644
--- a/blog/content/notas/index.gmi
+++ b/blog/content/notas/index.gmi
@@ -1,5 +1,7 @@
# Notas
+=> comprar-bajo-en-sodio Comprar bajo en sodio
+
## Lenguaje
=> lenguaje/bugs Bugs en el español
diff --git a/blog/content/notes/cliffs/the-tyranny-of-structurelessness.gmi b/blog/content/notes/cliffs/the-tyranny-of-structurelessness.gmi
new file mode 100644
index 00000000..3dfc17ea
--- /dev/null
+++ b/blog/content/notes/cliffs/the-tyranny-of-structurelessness.gmi
@@ -0,0 +1,98 @@
+# The tyranny of structurelessness
+
+=> https://www.jofreeman.com/joreen/tyranny.htm A copy of the original article. These Cliff's notes focus on the generic points of the article, not on its original context (the feminist movement).
+
+Leaderless, structureless groups as an organizational form is a reaction to over-structured society in which most of us live that give others control over us.
+
+Structurelessness encourages participation in discussion and personal insight, but it does not achieve more than that.
+
+Structureless groups struggle when they want to achieve something more specific than raising consciousness, because the groups do not want to change structure when they change their tasks, because they think other organizational forms can be anything but oppressive.
+
+## Formal and informal structures
+
+Structureless groups evolve into having tacit structure due to the diversity of the people that form them.
+
+Structurelessness only prevents the formation of formal structures, not informal ones. Decision-making rules are known only by those who make the decisions.
+
+To give everyone the opportunity to participate, structure must be explicit and the rules of decision-making must be open and available to everyone, so they must be formalized.
+
+## The nature of elitism
+
+Elites can only be groups, not individuals.
+
+Elites have power over a larger group without direct responsibility.
+
+A person is an elitist by being a part or advocating the elite, not by being notorious.
+
+Elites are not conspiracies, generally they are groups of friends that happen to participate in some activity together.
+
+Elites are communication networks because they are groups of friends that talk.
+
+Groups might have one or more communication networks and they might overlap. The communication networks do not necessarily have to be an elite. Multiple communication groups might compete and only one might become an elite.
+
+In a structured group, the group competition is public and other members of the group can arbitrate and make demands on the groups.
+
+Elites can be spotted in groups, they listen and don't interrupt other members more than they do with non-members. Approval of the elite is necessary for things to happen.
+
+Membership of the elite tends to have some required characteristic. Common themes are related to the friendship nature of the elite, but not to the effectiveness for the larger group's purpose.
+
+It is easier to form an elite at the beginning of the group, by bringing existing friends in. Otherwise, the elite must be formed through new effort. Elites need to maintain themselves by adding new members. Outsides might find a member of the elite to sponsor them.
+
+Elite forming and maintenance require time, so people with major commitments normally find it impossible to join. A formal structure of decision making helps the overworked (and others) participate in the group.
+
+Elites are not inevitably bad, they are only inevitable. Elites can do useful things. But elites have uncontrolled power within their group.
+
+Two negative consequences: liked people have power independently of their skills, which is bad for doing significant things; elites have no obligation to be responsible. The elite usually tries to be responsible to maintain their influence, but the group cannot compel them to be responsible, this is up to the interests of the elite.
+
+## The "star" system
+
+Society expects groups to make decisions and to select spokespeople. Society does not want to listen to all individuals in a group, they want to know what the group feels. There are only three ways to know group opinion:
+
+* Voting
+* Surveys
+* Spokespeople
+
+The public is conditioned to look for spokespeople.
+
+If there are no official spokespeople, the public might choose notable members of the group, but their opinions might not be representative of the group: "stars".
+
+The stars might not desire to be, and the members of the group might resent the stars.
+
+Stars cannot be removed by the group, because the group did not make them stars, only the press can. The press will listen to stars as long as there are no official spokespeople. Members of the group can attack the stars, who might then leave the group, remaining a star but maybe not aligned with the group.
+
+## Political impotence
+
+Sometimes the informal structure of a group might align with what the group wants to do, this gives the appearance of an effective group. However, this is hard to replicate. Normally these groups have four conditions:
+
+* They are task oriented, they were formed with a narrow and specific function.
+* They are small and homogeneous, so they have good communication reducing conflicts.
+* They have a high degree of communication. This normally limits the group to five people, although 10 to 15 is possible if they have subgroups.
+* They have a low degree of skill specialization, so everything can be done by more than one person, so no one is indispensable. (Not everything needs to be doable by everyone.)
+
+Groups composed of smaller effective groups do not tend to become more effective than their parts. These groups generates much motion and few results. These groups tend to be limited to the initial founders and exclude others, esp. the nongregarious, and elitism becomes institutionalized.
+
+Groups without projects spend their time maintaining the elite.
+
+When people cannot join the group and do things, they might do things on their own, which might lead to individual creativity, but many people cannot do this and does not foster cooperative group effort. Such people might drop out of the interests of the group, or join groups with other interests, maybe with new elites.
+
+The old elites can perceive these new elites as misaligned threats. The old elites can accuse the new elite of attracting specific groups of people from their group.
+
+The old elites can become public and formalize their original power structure as a formal structure. If the informal elite was well structured they might be able to do this, but groups that required structure the most might not be able to do it, because they adhere more to the ideology of structurelessness and they are more vulnerable to a takeover.
+
+Unstructured groups might choose to participate in larger groups with more influence and capabilities, but they can only have little influence in the larger group and their ideas might be diffused, but rarely implemented.
+
+## Principles of democratic structuring
+
+Groups should not blindly accept or ignore traditional forms of organization. These forms might be effective or not. Structure is not inherently bad, only excess of it.
+
+Essential principles:
+
+* Democratic delegation of specific authority to specific individuals. People who show interest or willingness who are selected are committed.
+* Delegates should be responsible to who selected them. This way the group controls the authorities.
+* Distribution of authority over as many people as possible, preventing monopoly of power and requiring consultations. It gives more people the opportunity for responsibility and learning.
+* Rotation of tasks among individuals to prevent responsibilities from being someone's property. But not too much rotation so that it prevents learning and satisfaction.
+* Rational allocation of tasks; by ability, interest and responsibility instead of by standing in the group. Learn through apprenticeship rather than sink or swim. Do not demoralize people by having responsibilities you cannot do well. Do not blacklist people from doing what they can do well.
+* Diffusion of information to everyone as frequently as possible, giving individuals more power.
+* Equal access to resources needed by the group. Resources owned by a member can be controlled by a member. This includes skills and information.
+
+These principles prevent informal elites.
diff --git a/blog/content/notes/index.gmi b/blog/content/notes/index.gmi
index 15dc5db1..807835d6 100644
--- a/blog/content/notes/index.gmi
+++ b/blog/content/notes/index.gmi
@@ -1,15 +1,16 @@
# Notes
+=> interesting-articles Interesting articles
=> greek-task-list Greek task list
## Cliff's notes
-Notes about some books I like:
+Notes about some books and long articles I like:
=> cliffs/mythical-man-month The Mythical Man-Month
=> cliffs/governable-spaces Governable Spaces
=> cliffs/peopleware Peopleware
-
+=> cliffs/the-tyranny-of-structurelessness The tyranny of structurelessness
## Tech
=> tech/misc-linux-stuff Misc Linux stuff
@@ -33,6 +34,8 @@ Notes about some books I like:
=> tech/misc-python-stuff Misc Python stuff
=> tech/python-modules-primer Python modules primer
=> tech/so-you-want-to-play-with-functional-programming So you want to play with functional programming
+=> tech/motivating-example-for-logical-replication-for-dynamic-ui Motivating example for logical replication for dynamic UI
+=> tech/about-web-development About web development
### Gadgets
diff --git a/blog/content/notes/interesting-articles.gmi b/blog/content/notes/interesting-articles.gmi
new file mode 100644
index 00000000..73e8f881
--- /dev/null
+++ b/blog/content/notes/interesting-articles.gmi
@@ -0,0 +1,195 @@
+# Interesting articles
+
+## General
+
+=> https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/ No one actually wants simplicity
+Simplicity is sacrifice. See also:
+=> https://www.youtube.com/watch?v=SxdOUGdseq4 simple made easy (video)
+=> https://www.seangoedecke.com/wicked-features/ wicked features
+
+=> https://www.geoffreylitt.com/2025/03/03/the-nightmare-bicycle.html Avoid the nightmare bicycle
+Good designs expose systematic structure; they lean on their users’ ability to understand this structure and apply it to new situations.
+
+## Programming
+
+=> https://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html The Configuration Complexity Clock
+Programming languages, configuration files, DSLs for configuration
+
+=> https://olano.dev/2023-11-30-code-is-run-more-than-read/ Code is run more than read
+A unified theory of broken software
+
+=> https://www.teamten.com/lawrence/writings/java-for-everything.html Java for Everything
+The advantages of focusing on a single language and how performance and static typing are helpful.
+
+=> https://en.wikipedia.org/wiki/Ostrich_algorithm Ostrich algorithm
+
+=> https://blog.brownplt.org/2024/04/12/behavior-misconceptions.html Finding and Fixing Standard Misconceptions About Program Behavior
+About the Standard Model of Languages (SMoL)
+
+=> https://dannorth.net/best-simple-system-for-now/ Best Simple System for Now
+A view I disagree on about IAGNI and the opposite concepts, but interesting
+
+=> https://mmapped.blog/posts/38-static-types-perfectionism Static types are for perfectionists
+Our programming style is influenced by our personality and life
+
+=> https://www.joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong/ Making wrong code look wrong
+The history about Hungarian notations
+
+=> https://www.hillelwayne.com/talks/ese/ddd/ What We Know We Don't Know: Empirical Software Engineering
+40-minute video about the power of proper sleep, working schedules and stress levels vs. engineering practices
+
+=> https://www.hillelwayne.com/post/we-are-not-special/ We are not special
+Second of a series of three articles comparing software engineering with traditional engineering. Mostly dispels some myth and lack of knowledge about traditional engineering.
+
+### Testing
+
+=> https://testing.googleblog.com/2014/05/testing-on-toilet-risk-driven-testing.html Testing on the Toilet: Risk-Driven Testing
+"Your tests are a means. The bang is what counts. It’s your job to maximize it."
+
+=> https://testing.googleblog.com/2024/10/smurf-beyond-test-pyramid.html SMURF: Beyond the Test Pyramid
+Test categories and the pyramid are excessively limited models.
+
+### Python
+
+=> https://lukeplant.me.uk/blog/posts/pythons-disappointing-superpowers/ Python’s "Disappointing" Superpowers
+A convincing defense of dynamic typing
+
+### Rust
+
+=> https://www.hezmatt.org/~mpalmer/blog/2024/05/01/the-mediocre-programmers-guide-to-rust.html The Mediocre Programmer's Guide to Rust
+=> https://qouteall.fun/qouteall-blog/2025/How%20to%20Avoid%20Fighting%20Rust%20Borrow%20Checker How to Avoid Fighting Rust Borrow Checker
+
+### Optimization
+
+=> https://docs.oracle.com/cd/E11882_01/server.112/e41573/technique.htm The Oracle Performance Improvement Method
+My favorite text about performance tuning- the good advice is not Oracle-specific. Includes a bit more real-world advice than:
+=> https://users.ece.utexas.edu/~adnan/pike.html Rob Pike's 5 Rules of Programming
+
+=> https://infrequently.org/series/performance-inequality/ The Performance Inequality Gap, 2024
+=> https://danluu.com/slow-device/ How web bloat impacts users with slow devices
+About janky browser applications and websites.
+
+### Git
+
+=> https://blog.gitbutler.com/git-tips-3-really-large-repositories/ Git Tips 3: Really Large Repositories
+
+### Accessibility
+
+=> https://xogium.me/the-text-mode-lie-why-modern-tuis-are-a-nightmare-for-accessibility The text mode lie: why modern TUIs are a nightmare for accessibility
+
+## Systems
+
+=> https://chrisdown.name/2018/01/02/in-defence-of-swap.html In defence of swap: common misconceptions
+
+## Organizations
+
+=> [[https://charity.wtf/2024/07/24/pragmatism-neutrality-and-leadership/ Pragmatism, Neutrality and Leadership
+(The parts about "As a leader, your job is to succeed", "Companies with shitty cultures win all the time".) This article connects with:
+=> https://hbr.org/2007/03/why-i-wrote-the-no-asshole-rule The no asshole rule book
+
+=> https://charity.wtf/2017/05/11/the-engineer-manager-pendulum/ The Engineer/Manager Pendulum
+Why people should multiclass engineering and management
+
+=> https://varoa.net/2024/01/09/how-organisations-cripple-engineering-teams-with-good-intentions.html How organisations cripple engineering teams with good intentions
+Arguments for having coders code
+
+=> https://stackoverflow.blog/2024/06/10/generative-ai-is-not-going-to-build-your-engineering-team-for-you/ Generative AI Is Not Going To Build Your Engineering Team For You
+Bad title; it's about the need for junior coders
+
+=> https://luminousmen.com/post/senior-engineer-fatigue Senior Engineer Fatigue
+
+=> https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ Things You Should Never Do, Part I
+About rewriting software from scratch
+
+=> https://dl.acm.org/doi/10.1145/1464122.1464146 Some observations concerning large programming efforts
+Someone figured most of it out in 1964.
+
+=> https://www.jofreeman.com/joreen/tyranny.htm The tyranny of structurelessness
+=> cliffs/the-tyranny-of-structurelessness (My Cliff's Notes)
+
+=> https://www.lesswrong.com/posts/tscc3e5eujrsEeFN4/well-kept-gardens-die-by-pacifism Well-Kept Gardens Die By Pacifism
+About moderation in small communities
+
+### Project management
+
+=> https://apenwarr.ca/log/20171213 An epic treatise on scheduling, bug tracking, and triage
+No non-sense opinions on project management I mostly agree with
+
+## News
+
+=> https://www.currentaffairs.org/2020/08/the-truth-is-paywalled-but-the-lies-are-free/ The Truth Is Paywalled But The Lies Are Free
+Excellent title, but the article is so-so
+
+## Society
+
+=> https://locadeldesvan.com/2025/01/09/contra-la-tecnocratizacion-de-la-vida/ Contra la tecnocratización de la vida
+About the pressure of the modern age and the privilege of being mediocre
+
+=> https://www.experimental-history.com/p/face-it-youre-a-crazy-person Face it: you're a crazy person
+Choosing a job because you like the worst parts of it
+
+## Epistemology?
+
+=> https://hermiene.net/essays-trans/relativity_of_wrong.html The Relativity of Wrong by Isaac Asimov
+All physics theories are strictly "false", but they are very true.
+
+## Meta
+
+=> https://www.benkuhn.net/progessays/ Essays on programming I think about a lot
+=> https://www.piglei.com/articles/en-programmer-reading-list-part-one/ A Programmer's Reading List: 100 Articles I Enjoyed (1-50)
+
+## Infrequent but useful terms
+
+=> https://en.wikipedia.org/wiki/Abilene_paradox The Abilene paradox
+A collective fallacy, in which a group of people collectively decide on a course of action that is counter to the preferences of most or all individuals in the group, while each individual believes it to be aligned with the preferences of most of the others.
+
+=> https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect The Dunning–Kruger effect
+A cognitive bias in which people with limited competence in a particular domain overestimate their abilities. Some researchers also include the opposite effect for high performers: their tendency to underestimate their skills. In popular culture, the Dunning–Kruger effect is often misunderstood as a claim about general overconfidence of people with low intelligence instead of specific overconfidence of people unskilled at a particular task.
+=> https://www.frontiersin.org/journals/psychology/articles/10.3389/fpsyg.2022.840180/full A Statistical Explanation of the Dunning–Kruger Effect
+This effect might only be caused by subjects in the bottom quartile can only make optimistic errors placing themselves into a higher quartile, while subjects in the top quartile can only make pessimistic errors placing themselves in a lower quartile.
+
+=> https://en.wikipedia.org/wiki/Gell-Mann_amnesia_effect The Gell-Mann amnesia effect
+A cognitive bias describing the tendency of individuals to critically assess media reports in a domain they are knowledgeable about, yet continue to trust reporting in other areas despite recognizing similar potential inaccuracies.
+
+=> https://en.wikipedia.org/wiki/Goodhart%27s_law Goodhart's law
+An adage that has been stated as, "When a measure becomes a target, it ceases to be a good measure".
+
+=> https://en.wikipedia.org/wiki/McNamara_fallacy The McNamara fallacy
+(Also known as the quantitative fallacy) involves making a decision based solely on quantitative observations (or metrics) and ignoring all others.
+
+=> https://en.wikipedia.org/wiki/Hanlon%27s_razor Hanlon's razor
+An adage, or rule of thumb, that states: Never attribute to malice that which is adequately explained by stupidity.
+
+=> https://en.wikipedia.org/wiki/Hawthorne_effect The Hawthorne effect
+A type of human behavior reactivity in which individuals modify an aspect of their behavior in response to their awareness of being observed.
+
+=> https://en.wikipedia.org/wiki/Novelty_effect Novelty effect
+An effect of introducing new elements on some activity or behavior.
+
+=> https://softwareengineering.stackexchange.com/questions/123627/what-are-the-london-and-chicago-schools-of-tdd What are the London and Chicago schools of TDD?
+
+=> https://en.wikipedia.org/wiki/Sturgeon%27s_law Sturgeon's law
+An adage stating "ninety percent of everything is crap".
+
+=> https://en.wikipedia.org/wiki/Schedule_chicken Schedule chicken
+When two or more parties working towards a common goal all claim to be holding to their original schedules for delivering their part of the work, even after they know those schedules are impossible to meet. Each party hopes the other will be the first to have their failure exposed.
+
+=> https://everything2.com/title/Your+radical+ideas+about+society%252C+individualism%252C+and+religion+have+already+occurred+to+others Your radical ideas about society, individualism, and religion have already occurred to others
+
+=> https://en.wikipedia.org/wiki/Slate_Star_Codex#Lizardman's_Constant Lizardman's constant
+The approximate percentage of responses to a poll, survey, or quiz that are not sincere
+
+See also:
+
+=> greek-task-list Greek task list
+
+Sources:
+
+=> https://en.wikipedia.org/wiki/List_of_paradoxes List of paradoxes
+=> https://en.wikipedia.org/wiki/Unintended_consequences Unintended consequences
+
+## Lost and not found
+
+Some articles I'd like to find here, but haven't been able to find again:
+
+* Enqueuing function calls vs. extending your domain model: This article discussed using traditional queues for handling some actions in your application vs. doing this "declaratively". For example, enqueue "send notification about x to user y" vs. "add column 'needs_x_notification to users table". If I remember correctly, the article contained some insightful arguments for the latter approach I had not thought of.
diff --git a/blog/content/notes/tech/about-relational-databases.gmi b/blog/content/notes/tech/about-relational-databases.gmi
index c66a530f..d08071ac 100644
--- a/blog/content/notes/tech/about-relational-databases.gmi
+++ b/blog/content/notes/tech/about-relational-databases.gmi
@@ -21,7 +21,7 @@ Many computer languages have similar concepts:
* C++ std::map
* Java java.util.Map
* C# System.Collections.Generic.Dictionary
-* Javascript Object
+* JavaScript Object
* PHP arrays
Relations are a natural concept, so although non-relational data systems exist, most data can be stored as relations.
diff --git a/blog/content/notes/tech/about-web-development.gmi b/blog/content/notes/tech/about-web-development.gmi
new file mode 100644
index 00000000..bcc54cb8
--- /dev/null
+++ b/blog/content/notes/tech/about-web-development.gmi
@@ -0,0 +1,5 @@
+# About web development
+
+* Ensure that the website is as functional as possible using limited browsers such as Lynx, ELinks, w3m, or Dillo. (If you use a browser that can display images, ensure that the website is as functional as possible with images disabled too.)
+* Make sure all content in the website has a URL that can be shared conveniently.
+* If website users would benefit from learning about updates to your website, then provide well-visible open ways to follow updates, such as RSS/Atom feeds, email subscriptions, or ActivityPub feeds.
diff --git a/blog/content/notes/tech/gadgets/pocket-computers.gmi b/blog/content/notes/tech/gadgets/pocket-computers.gmi
index a31970ef..e2cd7a2f 100644
--- a/blog/content/notes/tech/gadgets/pocket-computers.gmi
+++ b/blog/content/notes/tech/gadgets/pocket-computers.gmi
@@ -8,16 +8,8 @@ The Blackberry KeyONE I used 2017-2021 was the last device I used that had this
Since then, I believe the loss of physical keyboard phones means that some uses of the smartphone have disappeared.
-=> https://www.bringbackblackberry.com/
-
## Current devices
-=> https://www.unihertz.com/products/titan-pocket Titan Pocket (owned)
-
-* The keyboard feels worse than a Blackberry
-* The keyboard has deteriorated with age (some keys require extra pressure to activate, meaning typing is painful)
-* The keyboard software is insufficient for writing in Spanish and Catalan
-
=> https://www.clicksphone.com/communicator Clicks Communicator
=> https://www.clicksphone.com/powerkeyboard Clicks Power Keyboard
=> https://keyphone.tech Keyphone
@@ -29,6 +21,14 @@ Since then, I believe the loss of physical keyboard phones means that some uses
=> https://www.tindie.com/stores/zitaotech ZitaoTech refurbs keyboards, but they seem to be permanently out of stock.
=> https://linkapus.com/ The Q25 project is a project to put an Android phone inside a Blackberry Classic shell.
+## Recent devices
+
+=> https://www.unihertz.com/products/titan-pocket Titan Pocket (owned)
+
+* The keyboard feels worse than a Blackberry and deteriorates with age (some keys require extra pressure to activate, meaning typing is painful)
+* The keyboard software is insufficient for writing in Spanish and Catalan
+* My battery swelled and I retired it
+
## Obstacles
### Communication platforms without an open API
diff --git a/blog/content/notes/tech/misc-python-stuff.gmi b/blog/content/notes/tech/misc-python-stuff.gmi
index 6672e021..f7cc33e7 100644
--- a/blog/content/notes/tech/misc-python-stuff.gmi
+++ b/blog/content/notes/tech/misc-python-stuff.gmi
@@ -39,7 +39,7 @@ The standard library still includes a lot of batteries:
* textwrap.dedent and str.[lr]strip for embedding multiline strings in code.
* urllib.request is clunkier than third-party libraries, but it's usable.
-(Also for very simple stuff, tkinter can implement simple graphical tools.)
+For very simple stuff, tkinter can implement simple graphical tools and wsgiref can implement simple web apps (that you can even deploy with CGI).
### Subprocess
diff --git a/blog/content/notes/tech/motivating-example-for-logical-replication-for-dynamic-ui.gmi b/blog/content/notes/tech/motivating-example-for-logical-replication-for-dynamic-ui.gmi
new file mode 100644
index 00000000..01fc5fae
--- /dev/null
+++ b/blog/content/notes/tech/motivating-example-for-logical-replication-for-dynamic-ui.gmi
@@ -0,0 +1,61 @@
+# Motivating example for logical replication with dynamic UI
+
+(I'm almost sure what I write below is a horrible idea that will melt a PostgreSQL server with very few "real-time queries" at the same time. I'm very curious about how much load could PostgreSQL handle efficiently using this schema.)
+
+Suppose the following database schema (pseudo-SQL):
+
+```sql
+create table chat_messages (
+ id serial primary key,
+ posted timestamp not null,
+ channel text not null references chats(id),
+ author text not null references users(id),
+ message text not null
+);
+```
+
+Imagine you could write an UI element that subscribed to the following publication:
+
+```
+create publication foo for table chat_messages where (channel in :list_of_channels_user_is_in and posted > :some_time_ago);
+```
+
+Without writing any additional code, the UI element would get instantly notified not only of all new messages, but also of editions, deletions, or messages moved in or out of the subscribed channels. I believe you could write a real-time UI element with much shorter and safer code than any alternative I can think of that only uses OSS code. (As far as I know, ksqlDB does a similar thing, but has non-OSS bits and seems much harder to deploy than PostgreSQL, besides you would also need to deploy PostgreSQL.)
+
+This has some caveats:
+
+* Publications cannot do "joins", and implementing any live UI element that requires joins would be much more complex. (And I'm not sure it would still be the best way to implement things.)
+* This likely cannot be implemented efficiently without having all working set data in RAM (e.g. all the data involved in all subscriptions).
+
+My idea is writing:
+
+* A daemon that provides an API that can be used as in the following example:
+
+```
+subscription = subscribe("chat_messages", column("channel").in(list_of_channels) and column("posted").gt(some_time_ago))
+while update = subscription.next():
+ for chat_message in sorted(update.all_current_results(), key=lambda chat_message: chat_message.posted):
+ print(chat_message.current_values, chat_messages.previous_values)
+ print(update.deleted_since_last_update_results())
+```
+
+* Libraries for stacks such as "Django + HTMX", "GTK", etc. that allow to build UI elements that use the daemon API underneath, so you could write things like:
+
+```
+<ul class="channels">
+ {% foreach channel in joined_channels %}
+ <li>
+ {{ channel.name }}
+ last message: {{ for chat_message in update_all_current_results() if chat_message.current_values.channel == channel | max(lambda chat_message: chat_message.current_values.posted) }}
+ </li>
+ {% end foreach %}
+</ul>
+
+<ul class="current_chat_messages">
+ {% foreach chat_message in update.all_current_results() if chat_message.current_values.channel == current_channel %}
+ <li>{{ chat_message.current_values.author }} {{ chat_message.current_values.message }}</li>
+ {% end foreach %}
+</ul>
+```
+
+For stacks such as Django/HTMX, in simpler websites you could have websites that degrade gracefully out of the box without JS, just losing real-time updates.