diff options
Diffstat (limited to 'blog')
27 files changed, 173 insertions, 32 deletions
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/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 index 29ad63a1..ae74e497 100644 --- a/blog/content/2026/03/me-gusta-el-futbol.gmi +++ b/blog/content/2026/03/me-gusta-el-futbol.gmi @@ -21,3 +21,5 @@ Pero lo que me llama más la atención es lo absurdamente caro que te puede sali 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/this-was-supposed-to-be-the-future.gmi b/blog/content/2026/03/this-was-supposed-to-be-the-future.gmi index 3c97e5b4..fae1036e 100644 --- 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 @@ -4,13 +4,13 @@ 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: -=> https://alex.corcoles.net/2015/12/por-que-no-uso-productos-apple Por qué no uso productos Apple +=> ../../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: -=> https://alex.corcoles.net/2025/01/los-sistemas-operativos-y-un-amanecer-de-internet Los sistemas operativos y un amanecer de Internet +=> ../../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. 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/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/notes/index.gmi b/blog/content/notes/index.gmi index 7f8f12ba..807835d6 100644 --- a/blog/content/notes/index.gmi +++ b/blog/content/notes/index.gmi @@ -35,6 +35,7 @@ Notes about some books and long articles I like: => 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 index fbf0af04..73e8f881 100644 --- a/blog/content/notes/interesting-articles.gmi +++ b/blog/content/notes/interesting-articles.gmi @@ -107,6 +107,9 @@ 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 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/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 index daf5329e..01fc5fae 100644 --- 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 @@ -20,7 +20,7 @@ Imagine you could write an UI element that subscribed to the following publicati 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](https://github.com/confluentinc/ksql) 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.) +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: |
