Shared posts
Por qué hay cada vez más NARCISISTAS? | Análisis de la sociedad narcisista
Aumento del precio de la vivienda en la UE (2015-2023)

Hungría…

Tened en cuenta que en los últimos dos años el precio en España ha subido alrededor de un 20%…
Ver post completo: Aumento del precio de la vivienda en la UE (2015-2023)
En algunas comunidades alquilar una habitación ya cuesta lo mismo que alquilar un piso completo hace 10 años.
I started using this Free Git tool for 10x productivity
https://gitkraken.cello.so/HMtb6Uh4fkQ
Get 50 Percent Off on Gitkraken Pro Membership
https://gitkraken.cello.so/HMtb6Uh4fkQ
Are you tired of messy Git workflows and endless CLI commands?
In this video, I’ll show you how GitKraken makes working with Git visual, fast, and effortless — whether you’re cloning repos, managing branches, or reviewing pull requests.
🔥 What you’ll learn:
- How GitKraken simplifies Git operations
- GitKraken Launchpad to track PRs and Issues.
- Visual branching and merge management
- How to integrate GitHub/GitLab seamlessly
- Why developers and DevOps engineers love using GitKraken.
#developerproductivity #devex #Git #GitKraken
Escalar sin perder la cultura con José Dorado, de Orbitant - A Manfred Videopodcast #7
Una conversación sobre cómo escalar sin perder la cultura, contratar sin perder el norte y liderar desde el ejemplo.
👀 Hablamos de temas como:
- Por qué la mala fama de la consultoría no siempre está justificada
- Cómo mantener la cultura mientras el equipo crece (y cambia)
- Qué significa liderar con valores reales y no solo tenerlos en una pared
- Cómo contratar y formar talento junior sin bajar el listón
- La importancia del feedback y la comunicación interna
- El equilibrio entre entregar valor al cliente y seguir formándote
- Lo que la comunidad técnica aporta al talento y al negocio
- Aprendizajes de trabajar en entornos internacionales
- Y el orgullo de ver que la gente quiere volver a trabajar contigo
📌 Si te interesa la gestión técnica, el liderazgo o cómo construir equipos que combinan exigencia y humanidad, este episodio te va a gustar.
Puedes encontrar a José en:
LinkedIn: https://www.linkedin.com/in/joseantoniodorado/
Web de Orbitant: https://orbitant.com/
💬 ¿Tienes preguntas o experiencias similares? Cuéntanos en comentarios 👇
La decisión de Trump que puede comenzar una guerra [CAT]
Entre las órdenes ejecutivas de mayor impacto global firmadas por el presidente de Estados Unidos, Donald Trump, hay una que ha pasado casi desapercibida. A principios de este año, Trump otorgó unilateralmente a las empresas que cotizan en el mercado de valores de los Estados Unidos el derecho a violar los tratados internacionales en el extranjero, socavando así un sistema que Estados Unidos ayudó a crear y aumentando la probabilidad de un conflicto militar en los próximos años.Específicamente, comenzar la minería offshore.
etiquetas: trump, guerra, alta mar, ártico, minerales
» noticia original (www.ara.cat)
It’s the inequality, stupid (Es la desigualdad, imbécil)
(Artículo del Patriotic Millonaires Research Center, 2023
"Patriotic Millionaires es una agrupación de estadounidenses acaudalados que luchan contra la concentración desestabilizadora de riqueza y poder en los Estados Unidos. Nuestros miembros utilizan su influencia y sus voces únicas para promover una economía dinámica y equitativa, basada en un sistema tributario justo, un salario digno para todos los trabajadores estadounidenses y el acceso igualitario al poder político.")
En el período previo a las elecciones presidenciales de 1992, James Carville acuñó la famosa frase «Es la economía, estúpido». Pronto se convirtió en el lema de la exitosa campaña de Bill Clinton.
Eso fue hace treinta años. Con lo mucho que ha cambiado nuestro país desde entonces, nos gustaría sugerir que se actualice el famoso estribillo a «Es la desigualdad, estúpido».
La desigualdad económica se ha disparado en Estados Unidos desde que Bill Clinton asumió el cargo. (Comenzó a aumentar después de que el predecesor de Clinton, Ronald Reagan, entrara en escena, pero el mandato de Clinton fue testigo de la continuación de esta tendencia). Hoy en día, hay 735 multimillonarios en Estados Unidos, tres de los cuales —Elon Musk, Larry Ellison y Jeff Bezos— poseen una riqueza de más de un millón de veces superior (!!) a la riqueza media de los hogares estadounidenses. Mientras tanto, casi el 60% de los estadounidenses viven al día, un tercio de los trabajadores ganan menos de 15 dólares la hora y aproximadamente 38 millones de estadounidenses viven por debajo del umbral de la pobreza.
No es casualidad que, a medida que los ricos se han hecho más ricos, cada vez más estadounidenses hayan tenido dificultades para llegar a fin de mes. Todas las pruebas disponibles demuestran que la pobreza y la desigualdad están íntimamente relacionadas. Un informe reciente reveló que Estados Unidos, uno de los países con mayor nivel de desigualdad entre los países desarrollados, tiene más pobreza intergeneracional que varios países similares. Además, la alta desigualdad perjudica la movilidad social y el crecimiento del PIB, dos mecanismos clave que permiten a las personas salir de la pobreza. Existe una relación clara e innegable entre el número de personas que viven en la pobreza y la magnitud de la brecha entre ricos y pobres, y los responsables políticos serían insensatos si no lo vieran.
Sin embargo, hay otras razones, además de la pobreza, por las que debemos preocuparnos por la desigualdad extrema. Una de las más importantes tiene que ver con la forma en que la concentración extrema de la riqueza en un pequeño grupo de personas desestabiliza nuestra democracia. A medida que los ricos se han enriquecido en las últimas cuatro décadas, han contribuido más a las campañas políticas. (Esto es especialmente cierto desde la sentencia del Tribunal Supremo de 2010 en el caso Citizens United, que abrió las compuertas al gasto ilimitado de los Super PAC). Han utilizado su riqueza para impulsar políticas en la dirección que les conviene, lo que ha creado un círculo vicioso en el que la desigualdad económica produce desigualdad política, lo que a su vez genera más desigualdad económica.
En ningún lugar esto es más evidente que en el código tributario. Nuestro código tributario fue en su día impresionantemente progresista. Durante la Segunda Guerra Mundial, el tipo impositivo marginal máximo del impuesto federal sobre la renta alcanzó el 94 % y se mantuvo por encima del 90 % hasta 1964, abarcando la totalidad de la década de 1950, considerada por muchos como la «edad de oro» económica de los Estados Unidos. Nuestro impuesto sobre el patrimonio también fue en su día muy sólido —tenía un tipo máximo del 77 % entre 1941 y 1976— y era eficaz para reducir las grandes fortunas.
Con el paso del tiempo, nuestro código tributario se ha vuelto mucho menos progresivo. Los multimillonarios pagan tipos impositivos mucho más bajos que los estadounidenses medios y, en ocasiones, se libran de pagar cualquier impuesto federal sobre la renta. El impuesto sobre el patrimonio se ha llenado de lagunas y exenciones tan complicadas que, en esencia, se ha convertido en un impuesto «opcional» para los ricos. Las ligas deportivas multimillonarias, como el PGA Tour (que recientemente se ha fusionado con LIV Golf, una liga de golf respaldada por Arabia Saudí, un país conocido por sus abusos contra los derechos humanos), no tienen ninguna obligación fiscal.
Hace más de una década lanzamos nuestra campaña para poner orden en este caos. Queremos que los gobiernos graven adecuadamente a las personas ricas como nosotros, tal y como hacían en el pasado, para contener la desigualdad, NO solo para recaudar ingresos. Con el paso del tiempo, la idea generalizada de que el código fiscal desempeña un papel importante en la distribución de la riqueza en Estados Unidos se ha desvanecido, sustituida por una visión miope y limitada de los impuestos como meros generadores de ingresos.
No creemos que sea necesario aumentar los impuestos a los ricos para recaudar ingresos con los que financiar las medidas que el gobierno quiere llevar a cabo. Creemos que es necesario aumentar los impuestos a los ricos para reducir la desigualdad. La desigualdad, como ya hemos expuesto, es perjudicial para nuestra economía, para los pobres y para nuestra democracia. Eliminar la desigualdad a través del código tributario no debería ser una preocupación secundaria a la hora de buscar ingresos, sino nuestra prioridad absoluta.
Reconocemos que algunos políticos que promueven aumentos de impuestos a los ricos podrían considerar políticamente conveniente vincularlos directamente con programas gubernamentales nuevos o ampliados. La mayoría de los legisladores, incluso aquellos que quieren gravar a los ricos, no están del todo seguros de que el público comprenda cómo sus vidas mejorarán directamente al gravar a los ricos, y creen que deben convencerlos de que apoyen los aumentos de impuestos ofreciéndoles otros programas.
No creemos que eso sea necesario. El problema al que nos enfrentamos NO es la falta de apoyo a nuestra visión: la mayoría de los estadounidenses están de acuerdo en que la desigualdad es un problema y en que los ricos y las empresas no pagan lo que deben en impuestos. El pueblo estadounidense apoya de forma abrumadora el aumento de los impuestos a los ricos; de hecho, cuando se propuso la agenda original de Biden como la Ley Build Back Better, una de las partes más populares del proyecto de ley era, como habrán adivinado, gravar a los ricos.
En cambio, nuestro problema para avanzar en nuestra agenda es la captura política por parte de los ricos. Tal y como están las cosas ahora mismo en Estados Unidos, los funcionarios electos responden a los intereses y preferencias de los ricos, no a los de sus electores ni a los de los trabajadores de todo el país. Algo tiene que cambiar, y creemos que para acabar con esta captura política y luchar contra la desigualdad, necesitamos que los trabajadores más afectados por la desigualdad se unan y exijan un cambio. Con ese fin, recientemente hemos puesto en marcha una nueva iniciativa, el Great Economy Project, en Whiteville, Carolina del Norte. Estamos llevando nuestro mensaje sobre la necesidad de luchar contra la desigualdad y gravar a los ricos a las pequeñas ciudades de Estados Unidos y proporcionando a la gente las herramientas que necesitan para romper el círculo vicioso de la desigualdad económica y política en Estados Unidos.
Todas las personas que hemos conocido en Whiteville —madres solteras, jubilados, trabajadores con salario mínimo— han vivido la desigualdad en Estados Unidos. Por su propia experiencia, comprenden perfectamente que la economía no funciona para la mayoría, sino que solo sirve para desviar la riqueza y los ingresos hacia unos pocos. Y ahora, gracias a nuestro programa, muchos de ellos se sienten impulsados a hacer algo al respecto. Para cerrar la brecha entre los ricos y el resto y alejar nuestra democracia del abismo del autoritarismo, todos debemos unirnos para exigir un cambio. Creemos que nuestro trabajo en Whiteville es un comienzo.
Este es el lema de Patriotic Millionaires: si te preocupa la lucha contra la pobreza y te preocupa salvar la democracia, entonces soluciona la desigualdad, imbécil.
etiquetas: artículo
» noticia original ()
Dos años de cárcel al médico del 112 que le dijo a Aitor "no escucho que te ahogues", y el chico se ahogó dos minutos después
El chaval apenas puede exhalar algo parecido a un angustioso "me ahogooo". "Yo no escucho que te ahogues", le devuelve el sanitario con un deje de pasotismo. Carmen, con su hijo asfixiándose a su lado en la casa familiar de Navalcarnero (Madrid), escucha al médico: "Señora, su hijo no tiene nada, respira perfectamente... ¿No habrá tomado algo, alguna cosa? Yo creo que igual está un poco tocao", dice el sanitario, sugiriendo consumo de alcohol o... Se puede leer en Modo lectura y el audio se escucha sin ello.
etiquetas: summa 112, ahogo, pasotismo, negligencia, sanitario, aitor, navalcarnero
» noticia original (www.elmundo.es)
Últimas encuestas electorales sobre la tendencia electoral para las elecciones al Bundestag (GER)
Según los últimos sondeos electorales en Alemania, AFD conseguiría la victoria en unas próximas elecciones con el 25,6% de los votos.
etiquetas: alemania, encuesta, afd
» noticia original (dawum.de)
Un hombre de Almería recibe una carta del SAS citando a una mamografía a su mujer fallecida hace seis años
Las denuncias siguen llegando. Una mujer de Almería, que murió hace seis años de cáncer de mama, ha recibido hace unos días en su casa la citación del SAS para una mamografía.
etiquetas: sas, andalucía, sanidad, cáncer, mama
» noticia original (cadenaser.com)
Asesinado en Durango el periodista Miguel Ángel Beltrán, que señaló al narcotráfico en sus últimas publicaciones
La ola de violencia que acecha a los periodistas mexicanos se ha cobrado otra víctima. El periodista Miguel Ángel Beltrán ha sido asesinado en Durango, según han confirmado el portal Contexto, en el que trabajaba como colaborador. Su cuerpo, hallado en la carretera Durango–Mazatlán el sábado e identificado por su familia este domingo, estaba envuelto en una manta con un narcomensaje. Beltrán tenía publicaciones en su canal de TikTok y Facebook sobre las actividades de los carteles en Durango. En su último video, hace apenas cinco días...
etiquetas: miguel ángel beltrán, narcotráfico, méxico, cartel sinaloa, periodismo
» noticia original (elpais.com)
Marcos de Quinto rescata la clásica milonga de que los nazis eran socialistas y un historiador se lo desmonta en seis puntos
"La verdad que leer esto a alguien que presume de culto, es sorprendente y decepcionante. A partes iguales", resume Barbón. Y explica: "El nazismo prohibió y declaró ilegal al partido que representaba y representa al socialismo democrático en Alemania (el SPD es el partido hermano del PSOE)". Después añade: "Lo que dice Marcos de Quinto admite dos posibilidades: ignorancia, que en su caso sería muy grave o maldad e intento de engañar, lo que sería más grave aún".
etiquetas: marcos de quinto, ciudadanos, nazis, socialistas, bulo
» noticia original (www.publico.es)
Entrevista Motivacional: guía para lograr un cambio auténtico
La entrada Entrevista Motivacional: guía para lograr un cambio auténtico se publicó primero en Rincón de la Psicología por Jennifer Delgado.

En un mundo que gira a velocidad de vértigo, las recetas preconfeccionadas parecen ser la solución a todo. Mucha gente quiere una solución rápida y muchos profesionales de la salud no tienen tiempo para escuchar, entender y acompañar.
Sin embargo, lo cierto es que decirle a alguien lo que tiene que hacer rara vez funciona. Ya quiera dejar de fumar, necesite abrazar un estilo de vida más saludable o deba cambiar sus patrones de pensamientos dañinos, dar soluciones no suele ser la solución.
¿Por qué?
Porque el mayor obstáculo para el cambio no suele ser la falta de soluciones, sino la ambivalencia profundamente arraigada en la propia persona, ese tira y afloja interno entre el deseo de cambiar y el miedo a hacerlo. El mayor obstáculo es la resistencia al cambio personal.
Ahí entra en juego la Entrevista Motivacional, que más que una técnica psicológica puede entenderse como un método de orientación basado en la colaboración y el respeto. De cierta forma, la Entrevista Motivacional implica contener nuestro “instinto de corregir”, ese poderoso impulso de intervenir y querer arreglarlo todo para crear un espacio seguro donde la persona pueda reflexionar y buscar su propio camino.
¿Qué es exactamente la Entrevista Motivacional?
La entrevista motivacional tiene sus raíces en el enfoque centrado en la persona de Carl Rogers. Introducida por el psicólogo William R. Miller en 1983 y desarrollada con la ayuda del también psicólogo Stephen Rollnick, es un método para ayudar a las personas a comprometerse con su proceso de cambio.
De hecho, Rollnick explicó que se había dado cuenta en la terapia de que cuanta más información y consejos intentaba transmitir, más tendía la persona a resistirse y retroceder. Por tanto, la Entrevista Motivacional es un proceso que intenta acompañar a la persona, para que encuentre sus propias explicaciones y el camino para realizar el cambio que necesita.
Diversos estudios han demostrado que este método es útil para reforzar la motivación para cambiar las conductas que afectan la salud y mejora la adherencia terapéutica. De hecho, su uso no se limita a las consultas psicológicas, también se recomienda en la práctica clínica diaria en atención primaria y secundaria.
¿En qué etapa del cambio se encuentra la persona?
En la Entrevista Motivacional, el primer objetivo es motivar a la persona para el cambio. El segundo, lograr que se comprometa con esa transformación.
Sin embargo, un cambio importante no ocurre de la noche a la mañana. El modelo transteórico de las etapas de cambio personal ofrece un mapa para comprender mejor ese viaje.
- Etapa de precontemplación
En esta fase, es posible que la persona ni siquiera sea consciente del problema. Por tanto, el rol del psicólogo, médico o trabajador social no es discutir, sino hacer preguntas que la ayuden a notar la discrepancia entre su situación actual y sus valores más profundos.
En este punto, no se trata de confrontar o persuadir, sino simplemente de cultivar la curiosidad. El objetivo es despertar una chispa de autoconciencia, ese cambio sutil que se produce cuando la persona empieza a comprender que el cambio, aunque incómodo, podría ser posible.
- Etapa de contemplación
En esta fase, la persona todavía está atascada en el “sí, pero…” o en el “quiero, pero no sé si podré”. Sabe que existe un problema, pero sigue dividida internamente entre el cambio necesario y la familiaridad de los viejos hábitos, que le aportan cierto grado de seguridad y confort.
En esta etapa es donde la Entrevista Motivacional cobra mayor relevancia porque ayuda a la persona a explorar su ambivalencia sin sentirse presionada. El profesional puede ayudar al paciente dando voz a ambos lados de esa ambivalencia, explorando no sólo lo que podría costar el cambio, sino también lo que ya le está costando permanecer en esa situación. En vez de presionar para que tome una decisión, deja espacio para la incertidumbre, confiando en que la claridad se abrirá paso a través de la conversación.
- Etapa de preparación y acción
En esta fase, la persona finalmente está lista para dar el paso. El papel del psicólogo, médico o trabajador social pasa a ser el de un orientador o guía. El profesional ayuda a la persona a elaborar un plan realista, identificar los recursos que necesita y la anima a celebrar las pequeñas victorias para reforzar la autoconfianza.
En este punto, apoyar significa equilibrar la responsabilidad con la compasión. Hay que mantener a la persona enfocada en el progreso sin perder de vista su unicidad. El mensaje de base es: “puedes lograrlo y estoy aquí para acompañarte”.
Lo interesante de la Entrevista Motivacional es que aborda la ambivalencia, no como una resistencia, sino como una parte natural del ser humano. El objetivo es resolver el problema de adentro hacia afuera, no brindando soluciones externas preconfeccionadas.
Kit de herramientas para el cambio: dominar las habilidades OARS
La Entrevista Motivacional se rige por una serie de habilidades y técnicas que en inglés responden al acrónimo de OARS (Open Questions, Affirmations, Reflective Listening y Summaries):
Preguntas abiertas
Son preguntas que no pueden responderse con un simple “sí” o “no”, sino que motivan reflexiones más profundas. Preguntar “¿qué te preocupa de tu situación actual?” invita a la exploración y le transmite a la persona la idea de que su visión e historia realmente importan. Por tanto, hay que plantear preguntas que faciliten la introspección.
Afirmaciones
Consiste en identificar y nombrar las fortalezas de la persona, esos puntos que pueden ayudarla a cambiar. Decirle: “fuiste muy valiente viniendo a la consulta hoy” no es un elogio vano, sino una manera de fomentar la autoeficacia (la creencia de que realmente pueden tener éxito, una convicción que a menudo se erosiona en las personas que se enfrentan crisis crónicas).
Escucha reflexiva
Esta habilidad permite generar confianza y fomentar la motivación por el cambio. No se trata simplemente de oír, sino de escuchar más allá de las palabras prestando atención al significado y las emociones.
Por ejemplo, cuando una persona reconoce: “sé que debería dejar de beber, pero me relaja”, una respuesta reflexiva podría ser: “entonces, por un lado, eres consciente de los riesgos que implica el alcohol y, por el otro, sientes que es tu única forma de afrontar la realidad”. Ese simple acto hace que la persona se sienta escuchada y comprendida, ayudándole a desenredar sus sentimientos encontrados.
Resumir
Esta técnica garantiza que exista una comunicación clara y construye una especie de trampolín hacia el cambio. Cuando el profesional resume los argumentos de la persona, sobre todo a favor del cambio, le brinda un espejo que le permite ver su propia motivación con mayor claridad. Destaca la brecha que existe entre el punto en el que se encuentra la persona y dónde querría estar, alimentando una poderosa motivación interna.
Por tanto, el cambio personal no es algo que podamos forzar o prescribir, emana de la necesidad y necesita una motivación fuerte que lo sustente. La Entrevista Motivacional se centra precisamente en ayudar a las personas a explorar sus motivaciones, identificar sus fortalezas y tomar decisiones que se alineen con sus valores para llevarlas a la práctica y mejorar su bienestar.
Referencias:
Raihan, N. & Cogburn, M. (2023) Stages of Change Theory. In: StatPearls. Treasure Island (FL): StatPearls Publishing.
Bischof, G. et. Al. (2021) Motivational Interviewing: An Evidence-Based Approach for Use in Medical Practice. Dtsch Arztebl Int; 118(7): 109-115.
Miller, W.R. & T.B. Moyers (2017) Motivational Interviewing and the clinical science of Carl Rogers. Journal of Consulting and Clinical Psychology; 85(8): 757-766.
Rubak, S. et. Al. (2005) Motivational interviewing: a systematic review and meta-analysis. Br J Gen Pract; 55(513): 305-312.
La entrada Entrevista Motivacional: guía para lograr un cambio auténtico se publicó primero en Rincón de la Psicología por Jennifer Delgado.
Por qué deberías usar un gestor de contraseñas (y por qué el del navegador no es muy fiable)
Esta es una de las preguntas que más me hacen mis estudiantes cuando explico cómo funcionan los gestores de contraseñas y por qué deberían usar uno: «¿Podemos confiar en los que vienen integrados en los navegadores?»
La respuesta, como casi todo en tecnología, no es blanca o negra. Hace unos días encontré un artículo en Wired
titulado «Your browser’s password manager is better than ever. You still shouldn’t use it«, y me pareció una buena excusa para volver sobre un tema que, aunque parezca trivial, sigue siendo uno de los mayores agujeros de seguridad para la mayoría de los usuarios.
Cada vez que un sitio te pide que crees una contraseña, muchos repiten el mismo ritual: combinan palabras, números y símbolos hasta que el sistema les deja pasar… e intentan recordarla. Pero con el tiempo, ese sistema mental termina rompiéndose: demasiadas contraseñas, demasiadas variaciones, demasiadas filtraciones. Lo que muchos hacen después, reutilizar la misma clave con algún cambio menor, es el equivalente digital a dejar la puerta entreabierta.
Para eso precisamente existen los gestores de contraseñas, herramientas diseñadas para almacenar y cifrar credenciales de forma segura. Aun así, una buena parte de los usuarios sigue prefiriendo el sistema de guardado automático del navegador. Y, aunque los gestores integrados en Chrome, Safari o Edge han mejorado sensiblemente su cifrado y sincronización, siguen generando una falsa sensación de seguridad.
El problema en este caso no es el cifrado, que en el caso de Google utiliza el estándar AES y permite incluso cifrado local, sino la arquitectura: todas tus contraseñas pasan a depender de una sola cuenta, de un punto único de fallo. Si un atacante consigue acceder a tu sesión del navegador, obtiene no solo tu correo, sino el acceso completo a tu identidad digital. De acuerdo, el administrador de contraseñas del navegador no tiene fugas… pero sigue siendo más prudente usar uno independiente.
Los gestores dedicados, como 1Password, Bitwarden o el recientemente lanzado Proton Pass ofrecen una capa adicional de separación. Tus contraseñas están cifradas bajo un modelo de «conocimiento cero», lo que significa que ni siquiera la empresa que custodia el servicio puede acceder a ellas. Además, incluyen funciones de seguridad avanzadas como alias de correo, autenticación biométrica o «modo viaje», que reducen el riesgo de exposición.
Frente a eso, los gestores integrados en los navegadores están diseñados con otro objetivo muy diferente: la comodidad, no la seguridad. Lo que más odia un usuario no es un ataque, sino una interrupción, de ahí que muchas funciones más seguras, como exigir autenticación biométrica cada vez que se autocompleta una clave, estén desactivadas por defecto.
Y luego está la memoria humana, sin duda la alternativa más precaria. TechCrunch lo explicaba hace años y sigue siendo válido a día de hoy: confiar en recordar contraseñas complejas no es un acto de disciplina, sino de irresponsabilidad. En un entorno donde los ataques de phishing, las filtraciones masivas y el tráfico de credenciales son constantes, la memoria es siempre el eslabón más débil.
Incluso los gestores más reputados pueden tener incidentes, como demostró el caso de LastPass
en 2023, cuando un robo de información obligó a millones de usuarios a cambiar sus claves. Pero incluso ese episodio no invalida el modelo: era el gestor de contraseñas que usaba yo, pero los datos estaban cifrados, el acceso fue limitado, y no generó prácticamente ningún problema. La alternativa, guardar contraseñas en el navegador, o peor, en la cabezs, sigue siendo muchísimo más arriesgada.
En cualquier caso, usar cualquier gestor sigue siendo mejor que no usar ninguno. Y si por costumbre, por comodidad o por economía prefieres el que viene incluido con el navegador, úsalo, pero sabiendo que es un compromiso. Los gestores integrados son convenientes y gratuitos, pero vulnerables a la sincronización, a los ataques de sesión o a la dependencia de una sola cuenta.
La comodidad, en materia de seguridad, siempre tiene un precio. Los gestores de contraseñas del navegador son útiles para quien no usa nada, pero no sustituyen una buena solución dedicada. La clave no es memorizar contraseñas imposibles, sino usar un gestor que las genere y recuerde por ti, y dejar de guardarlas en el navegador, que no es suficiente. Porque la seguridad no está en la herramienta, sino en el desarrollo del hábito.
Tu vida digital no debería depender de un sistema pensado simplemente para tu comodidad, únicamente para ahorrar clics. Los gestores integrados en los navegadores son como un paraguas de papel en medio de una tormenta: te puede permitir salir del paso y mojarte algo menos, pero si puedes planificar y ser ordenado, no confíes tu futuro o tu seguridad a algo así, porque en el mundo actual, la pregunta no es si te van a hackear, sino cuándo lo harán y si perderás algo más que comodidad cuando lo hagan. Y eso es, básicamente, lo que vengo a contar a mis alumnos cuando hablamos de estas cosas en clase.
This article is also available in English on Medium, «Behind the padlock: the hidden risks of built-in password managers«
Robert Barnes: America First, Populism, Trump & Perpetual War
Follow Prof. Glenn Diesen:
Substack: https://glenndiesen.substack.com/
X/Twitter: https://x.com/Glenn_Diesen
Patreon: https://www.patreon.com/glenndiesen
Support the research of Prof. Glenn Diesen:
PayPal: https://www.paypal.com/paypalme/glenndiesen
Buy me a Coffee: buymeacoffee.com/gdieseng
Go Fund Me: https://gofund.me/09ea012f
Books by Prof. Glenn Diesen:
https://www.amazon.com/stores/Glenn-Diesen/author/B09FPQ4MDL?ref=sr_ntt_srch_lnk_1&qid=1761554002&sr=1-1&isDramIntegrated=true&shoppingPortalEnabled=true
Fin del orden mundial: La verdad que nadie cuenta
Muchas gracias a Ron Aledo @ronaledoexciacontracor por permitirnos compartir el programa en el canal.
La vida es lo que pasa mientras planeas otras cosas
¿Qué va a ser de nuestra vida en unos años? ¿Podremos pagar las facturas, podremos comprarnos un piso a las afueras? ¿Podremos tener hijos, una pensión, alguien que nos cuide cuando envejezcamos? ¿Hay algún futuro posible? ¿Habrá, acaso, un futuro para nosotros?
Estas cuestiones no nos son nuevas: la preocupación por el futuro y la incertidumbre son, durante los últimos años, el centro de las inquietudes de las personas a nivel global. Un informe publicado por el Consejo General de la Psicología en España en abril de 2025 sostiene que un 59% de españoles dice sufrir estrés, un 48% depresión y un 23% ansiedad. Estos datos, que proceden de un estudio de 17.000 personas de 16 países, también muestran que todos los participantes se sienten afectados por la incertidumbre sobre el futuro, la inestabilidad financiera, la inseguridad laboral, la agitación social política y el aislamiento social y la soledad.
El filósofo y neurocientífico Sam Harris dilucidó el problema del futuro en el ahora: «Por mucho que sientas que necesitas planificar el futuro, anticiparte a él, mitigar los riesgos, la realidad de tu vida es el ahora. Incluso cuando pensamos que estamos en el momento presente, siempre estamos, de forma muy sutil, mirando por encima del hombro, anticipando lo que vendrá después.
Siempre estamos resolviendo un problema. Y es posible simplemente abandonar el problema, aunque solo sea por un momento».
Aunque es importante planear experiencias futuras, la naturaleza es tan impredecible que es posible que no se cumplan
Aunque es importante planear experiencias futuras, la naturaleza es tan impredecible que es posible que no se cumplan. No tienen que ser solo problemas, sino también ambiciones y proyectos futuros. Sam Harris no sugiere que debamos dejar para siempre los problemas que podrán ocurrirnos en el futuro ni negarlos, sino que estamos desperdiciando el ahora, una de las pocas certezas que tenemos. Décadas atrás lo manifestó también John Lennon, en la canción dedicada a su hijo Sean «Beautiful Boy», a modo de consejo vital: Life is what happens to you / While you’re busy making other plans [«La vida es lo que pasa / Cuando estás ocupado haciendo otros planes»].
A pesar de que la preocupación también se extiende a problemas actuales, y es lícito que así sea, a menudo nuestra mente viaja a cuitas o ambiciones futuras sobre las que no se puede hacer nada porque no las podemos controlar en el presente. Sin embargo, sí que hay maneras de centrarse en el ahora, tanto para vivirlo como para intentar mejorar nuestros problemas actuales; o para, según Harris, abandonar los problemas, aunque sea solo un momento.
Hay terapias, como la cognitivo-conductual, que utilizan técnicas para ayudar a que las personas se enfoquen en los pensamientos, las emociones y las conductas del presente, como la atención plena. Esta técnica, que se puede utilizar sin seguir un proceso terapéutico, se centra en la capacidad de «sentir» el presente, de obligarnos a parar para tomar conciencia de nuestra respiración, del movimiento de nuestros cuerpos, de lo que vemos y lo que nos rodea. De hecho, Sam Harris da importancia a la meditación sin misticismo para ayudarnos a vivir el presente y parte de su trabajo se centra en difundirla.
La atención plena es una técnica terapéutica para obligarnos a parar y tomar conciencia de nuestro presente
Sin embargo, la cuestión vivir el presente nos acompaña desde tiempos antiguos. Por ejemplo, Horacio ya nos advirtió con su carpe diem (que más tarde se convirtió en un tópico literario) y son decenas los fragmentos de las Meditaciones de Marco Aurelio los que abordan la importancia del presente, como esta del Libro III: «Recuerda que solo se vive el presente, este instante fugaz. Lo demás o se ha vivido o es incierto. La vida es breve. Pequeño es el rincón donde se vive».
Si queremos que las preocupaciones por el futuro no nos devoren, debemos aceptar y abrazar el presente, sentirlo, ralentizarlo, reconocer las posibilidades que nos brinda del aquí y el ahora. Incluso si queremos abordar el futuro, ¿qué podemos hacer desde el presente que sí tengan repercusión ahora? La vida es breve e inestable, y casi nada sabemos a ciencia cierta del futuro: podemos presagiarlo, pero no tenemos la certeza total de que podamos vivir el futuro que estemos planeando desde el presente. Por ello, debemos defender lo que podemos vivir ahora y darnos a las posibilidades que se nos presenta este preciso momento.
La entrada La vida es lo que pasa mientras planeas otras cosas se publicó primero en Ethic.
Python Smtplib Tutorial – howto send HTML EMAIL with Python
The Python Smtplib Tutorial - howto send HTML EMAIL with Python is explains how to send HTML emails using SMTP, including auth, SMTP with TLS and SMTPS.
After introducing Python smtplib, the post provides an hands-on example showing how to add HTML email notification to an existing scirpt. The provided code supports every kind of SMTP connection - SMTP, SMTP with startTLS and SMTPS.
This post completes the trilogy we started with the JINJA2 With Python Tutorial JINJA Ansible HowTo and Python Argparse Tutorial - Argparse HowTo posts.
The Python SMTPLib Library
The Python smtplib library is a built-in module that provides a straightforward way to send emails using the Simple Mail Transfer Protocol (SMTP), the standard protocol for transmitting email over the internet.
Its primary purpose is to enable developers to automate email sending from Python scripts, such as dispatching notifications, alerts, reports, or bulk messages without needing external tools or services.
Knowing smtplib is important for programmers working on automation tasks, web applications, or system monitoring, as it integrates seamlessly with Python's ecosystem, supports secure connections like TLS/SSL, and allows customization of email content, attachments, and recipients, making it a versatile tool for efficient communication in software projects.
This definitively makes Python smtplib library a must have for DevOps and DevSecOps professionals: in DevOps workflows, it powers automated notifications in CI/CD pipelines, alerting teams to build statuses, deployments, or infrastructure changes directly from scripts. For DevSecOps, it facilitates secure, compliant communication by sending vulnerability scans, audit logs, or incident reports, often integrated with tools like Ansible, Jenkins, or monitoring systems, all while leveraging Python's robust security features to ensure encrypted transmissions and reliable delivery.
Example Lab - Add Email Notification To An Existing Script
In this lab we illustrate the use of the smtplib module by adding the email notification feature to an existing script.
This feature is a nice enhancement we can add to the script we initially developed in the JINJA2 With Python Tutorial JINJA Ansible HowTo post, where we saw how to exploit JINJA2 to generate a human-readable HTML report by blending a JSON alert report with a JINJA2 template. After improving it in the Python Argparse Tutorial - Argparse HowTo, where we added support to command line aruments, we can finally focus on adding email notification. This by the way also enables us to provide an additional use case to argparse and, since STMP requires authentication, to see how to manage an INI file where to store credentials used during authentication.
Credentials File
Security best practies strictly forbid to embed sensitive information such as credential inside the code as well to pass them as arguments, since they will be available to everyone in the process list, or under the /proc filesystem for all the time the application process is running.
For this reason, we externalize them into a credentials file, which of course must be secured restricting read access to only the user the process runs as.
First a first, we must define the configuration file format: to promote the script's extensibility, instead of using simply key-value pairs, we are using the INI format, so to be able to group credentials by consumer using stanzas.
The advantage of this approach is that it enables users to easily add credentials for other notification means - such as Slack - keeping everything clean and tidy and without reworks: being far-sighted is the first non-written requirement for developing easy to maintain applications.
Create the "conf/credentials.ini" credentials file with the following contents:
[smtp]
host = smtp.carcano.corp
port = 465
start_tls = false
#ca_file=ca.crt
username = healthcheck@carcano.corp
password = A-G0od.PwD
of course, replace the values with your actual ones.
The purpose of each field is straightforward, ... just a few details:
- username and password must be set only if the SMTP server requires authentication
-
start_tls must be set to true only when using server supporting STARTTLS (servers with clear-text connection that anyway support starting a TLS tunnel on demand). For the sake of completenss, typical scenarios are:
- port 587, start_tls false
- port 587, start_tls true
- port 465, start_tls false
- when dealing with SSL SMTP servers (port 465), ca_file must be configured only if the SMTP server's certificate is issued by a private CA: in this case it must be the path to the file with the private CA's ROOT certificate.
Since the credentials file contains sensitive data, access to it must be restricted to only the user used to run the script.
For example, if the username is "scheduler", type:
chmod 0600 conf/credentials.ini
chown scheduler: conf/credentials.ini
Of course this is a clear-text file, so users with administrative privileges can still read its contents - to overcome this problem, it is necessary to create an encrypted credentials file, but this is outside the scope of this post.
Process INI FIleS With Configparser
In Python, INI files can be processed using the configparser package. To use it inside our code, we must import it as follows:
import configparser
we can now add the logic to parse the credentials file.
First, add the credentials_file global variable with the default name for the credentials file:
credentials_file = "credentials.ini"
As by best practices, input must always be checked, handling exceptions as necessary.
For this reason, add the following lines to the bottom of the the "validate_config" function:
try:
if not os.path.isfile(os.path.join(directory, credentials_file)):
raise FileNotFoundError
except FileNotFoundError:
print("File {} not found".format(os.path.join(directory, credentials_file)), file=sys.stderr)
exit(1)
this block of code handles the file not found exception.
Add The SMTP Notification Logic
To work with smtblib, we must import it along with the other related packages we are using in our code:
import smtplib
import ssl
from email.message import EmailMessage
more specifically:
- smtplib and email.message from EmailMessage are used for the email formatting and SMTP delivery
- ssl is used to enable using TLS to encrypt the SMTP session's traffic
We can now add the necessary code to handle the emai notification process.
Just create the send_email function with the following contents:
def send_email(smtp_params, subj, html_message):
"""
Composes the email using the supplied html_message and sends it from the specified sender to the supplied
list of recipients by SMTP using the supplied smtp_params
:param smtp_params: a dictionary with the smtp parameters
:param subj: the message's subject
:param html_message: the html message
"""
try:
msg = EmailMessage()
msg["Subject"] = subj
msg["From"] = sender
msg["To"] = ", ".join(recipients)
msg.set_content("This email is in HTML format - please switch to the HTML view to display it.")
msg.add_alternative("".join(html_message), subtype="html")
logger.info("Sending email to '{}'".format(msg["To"]))
if smtp_params["port"] == "465":
logger.debug("Using SSL")
if smtp_params.get("ca_file"):
logger.debug("Using CA-file '{}'".format(os.path.join(config_dir, smtp_params["ca_file"])))
ctx = ssl.create_default_context(cafile=os.path.join(config_dir, smtp_params["ca_file"]))
else:
ctx = ssl.create_default_context()
smtp = smtplib.SMTP_SSL(host=smtp_params["host"], port=smtp_params["port"], context=ctx)
else:
smtp = smtplib.SMTP(host=smtp_params["host"], port=smtp_params["port"])
if os.getenv("LOGLEVEL") == "DEBUG":
smtp.set_debuglevel(1)
if smtp_params["start_tls"] == "true":
logger.debug("Using Start-TLS")
smtp.starttls()
if smtp_params.get("username") and smtp_params.get("password"):
logger.debug("Using SMTP Auth - authenticating as '{}'".format(smtp_params['username']))
smtp.login(smtp_params['username'], smtp_params['password'])
smtp.sendmail(msg['From'], recipients, msg.as_string())
# dont't use smtp.send_message(msg) because causes error:
# resent = msg.get_all('Resent-Date')
# AttributeError: '_UniqueAddressHeader' object has no attribute 'get_all'
smtp.quit()
logger.info("Mail sent")
except (ConnectionRefusedError, smtplib.SMTPServerDisconnected, smtplib.SMTPAuthenticationError,
smtplib.SMTPNotSupportedError, smtplib.SMTPDataError) as e:
logger.error("unable to send mail report: SMTP error was \'{}\'".format(e))
print("unable to send mail report: SMTP error was \'{}\'".format(e), file=sys.stderr)
exit(1)
let's explain it:
- lines from 11 to 16 are self-explanatory, and are related to composing the mail message object contents. This involves setting sender, recipient, subject and message body - in this case the message body just contains a warning informing that the real contents are in HTML format and this requires to switch the mail client to HTML parsing to process it. This message is usefull when dealign with users having the mail client procesing mail messages in plain text by defautl.
- line 17 add the HTML version of the email message.
we then start processing the SMTP parameters:
- lines from 21 to 28 configure the TLS settings when dealing with SMTPS (port 465)
- line 30 configures the SMTP setting for working with SMTP, using it as baseline for setting up SMTP with STARTTLS.
- lines 33-35 configures the use of the STARTTLS method if the smtp_params['starttls'] is set to true
- lines 36-38 handles SMTP authentication, setting username and password, if the username and password parameters are set in the smtp_parameters dictionary.
We then start the section with the code performing the actual SMTP connection
- line 39 performs the actual connection to the SMTP server, quitting the process at line 43.
- lines 45-49 handles the possible exceptions
Assembling Together
We can now add the necessary logic to the main function to support the new email notification feature.
Let's add the following command line arguments:
- --email-notify to enable the email notification
- --sender to set the sender email address
- --recipient to add a recipient - please note how we are using the append action to enable specifying tis argument multiple times so to add more recipients:
parser.add_argument('-e', "--email-notify", dest="email_notify", action="store_true")
parser.add_argument("-s", "--sender", dest="sender", type=str, default=None,
help="email sender")
parser.add_argument("-r", "--recipient", action="append", dest="recipients", type=str,
help="email recipient - this option can be used multiple times to list multiple recipients as necessary")
we must then add the necessary logic to use these new arguments:
if args.email_notify:
sender = args.sender
if not args.sender:
print("You must specify the sender's email address using the '-s' option.", file=sys.stderr)
exit(1)
if not args.recipients:
print("You must specify one or more recipient email addresses using the '-r' option.", file=sys.stderr)
exit(1)
recipients = args.recipients
credentials = configparser.ConfigParser()
credentials.read(os.path.join(config_dir, credentials_file))
send_email(credentials['smtp'], subject, message)
else:
with open("{}/{}".format(spool_dir, "message.htm"), "w") as message_file_handler:
message_file_handler.writelines(message)
the above block of code introduces a split in the logic: if the email_notify argument is specified, instead of generating the message.html HTML report, it it delivers the report as an HTML email. Please note how it loads the necessry SMTP parameters and credentials from the credentials file.
Please note also that, if the email argument was specified, it performs also a few basic validation checks, such ase making sure the user specified a sender and one or more recipients. This can of course be improved, for example adding a regex check for checking the format of the specified values to ensure that they are valid emails.
Automating HTML notifications with smtplib and processiong INI files with configparser are excellent engineering practices, but they are of course not enough to be able to write good DevSecOps pipelines.
If you want to systematically fill your DevOps and DevSecOps knowledge gaps by reading a crash-course like book full of hands-on enterprise exercises, jump directly to the Apress Blueprint Box below to discover how to boost and evolve your career using a self-paced learning path.
Testing The Script
We have finally reached the time for having a go with the new email notification feature.
Just run:
./notify.py -c conf -p spool -f report.json \
-e -r marco.carcano@carcano.corp -r devops@carcano.corp \
-s helpdesk@carcano.corp

please remind that if you need to troubleshoot you can export the "LOGLEVEL" variable increasing the verbosity. For example:
export LOGLEVEL=DEBUG
and then re-run the sript.
If everything is properly working, you must receive a report same as the below image
The Whole Script
For your convenience, here is a copy of the whole script.
Mind that an offering using the below cup is always welcome, since it helps me running this blog.
#!/usr/bin/python3
import os
import sys
import json
import logging
import argparse
from jinja2 import Environment, FileSystemLoader
import configparser
import smtplib
import ssl
from email.message import EmailMessage
# https://docs.python.org/3/library/logging.html#levels
logging_loglevels = {"NOTSET": 0, "DEBUG": 10, "INFO": 20, "WARNING": 30, "ERROR": 40, "CRITICAL": 50}
report_file = "report.json"
template_file = "message.jn2"
credentials_file = "credentials.ini"
def setup_logging():
"""
Setups and return a logger object with a default formatter
:return: the logger object
"""
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())
log_handler = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter("%(asctime)s %(name)-12s %(levelname)-8s %(message)s")
handler.setFormatter(formatter)
log_handler.addHandler(handler)
log_handler.setLevel(logging.INFO)
return log_handler
def render_message():
"""
Renders the report_file by merging it using the template_file
:return: the rendered report
"""
with open(os.path.join(spool_dir, report_file), "r") as report_file_handler:
report = json.load(report_file_handler)
logger.debug("Loaded report {}".format(os.path.join(spool_dir, report_file)))
jinja_env = Environment(loader=FileSystemLoader(config_dir),
extensions=["jinja2.ext.loopcontrols"]
)
logger.debug("Merging JINJA2 template {} with the loaded report".format(
os.path.join(config_dir, template_file)))
msg = jinja_env.get_template(template_file).render(report)
subj = "{} {}".format(report["testsuite"]["name"], report["testsuite"]["target"])
return subj, msg
def validate_spool(directory):
"""
After overriding spool_dir with the related argparse argument (if specified on the command line),
it validates spool_dir's contents, ensuring it exists and that it contains the report_file file.
:param directory: the default spool directory
:return: the actual spool directory (overridden as necessary)
"""
global report_file
if args.spool_dir is not None:
directory = args.spool_dir
try:
if not os.path.isdir(directory):
raise FileNotFoundError
except FileNotFoundError:
print("Directory {} not found".format(directory), file=sys.stderr)
exit(1)
if args.report_file is not None:
report_file = args.report_file
try:
if not os.path.isfile(os.path.join(directory, report_file)):
raise FileNotFoundError
except FileNotFoundError:
print("File {} not found".format(os.path.join(directory, report_file)), file=sys.stderr)
exit(1)
return directory, report_file
def validate_config(directory):
"""
After overriding config_dir with the related argparse argument (if specified on the command line),
it validates config_dir's contents, ensuring it exists and that it contains the template file.
:param directory: the default configuration directory
:return: the actual configuration directory (overridden as necessary)
"""
if args.config_dir is not None:
directory = args.config_dir
try:
if not os.path.isdir(directory):
raise FileNotFoundError
except FileNotFoundError:
print("Directory {} not found".format(directory), file=sys.stderr)
exit(1)
try:
if not os.path.isfile(os.path.join(directory, template_file)):
raise FileNotFoundError
except FileNotFoundError:
print("File {} not found".format(os.path.join(directory, template_file)), file=sys.stderr)
exit(1)
try:
if not os.path.isfile(os.path.join(directory, credentials_file)):
raise FileNotFoundError
except FileNotFoundError:
print("File {} not found".format(os.path.join(directory, credentials_file)), file=sys.stderr)
exit(1)
return directory
def send_email(smtp_params, subj, html_message):
"""
Composes the email using the supplied html_message and sends it from the specified sender to the supplied
list of recipients by SMTP using the supplied smtp_params
:param smtp_params: a dictionary with the smtp parameters
:param subj: the message's subject
:param html_message: the html message
"""
try:
msg = EmailMessage()
msg["Subject"] = subj
msg["From"] = sender
msg["To"] = ", ".join(recipients)
msg.set_content("This email is in HTML format - please switch to the HTML view to display it.")
msg.add_alternative("".join(html_message), subtype="html")
logger.info("Sending email to '{}'".format(msg["To"]))
if smtp_params["port"] == "465":
logger.debug("Using SSL")
if smtp_params.get("ca_file"):
logger.debug("Using CA-file '{}'".format(os.path.join(config_dir, smtp_params["ca_file"])))
ctx = ssl.create_default_context(cafile=os.path.join(config_dir, smtp_params["ca_file"]))
else:
ctx = ssl.create_default_context()
smtp = smtplib.SMTP_SSL(host=smtp_params["host"], port=smtp_params["port"], context=ctx)
else:
smtp = smtplib.SMTP(host=smtp_params["host"], port=smtp_params["port"])
if os.getenv("LOGLEVEL") == "DEBUG":
smtp.set_debuglevel(1)
if smtp_params["start_tls"] == "true":
logger.debug("Using Start-TLS")
smtp.starttls()
if smtp_params.get("username") and smtp_params.get("password"):
logger.debug("Using SMTP Auth - authenticating as '{}'".format(smtp_params['username']))
smtp.login(smtp_params['username'], smtp_params['password'])
smtp.sendmail(msg['From'], recipients, msg.as_string())
# dont't use smtp.send_message(msg) because causes error:
# resent = msg.get_all('Resent-Date')
# AttributeError: '_UniqueAddressHeader' object has no attribute 'get_all'
smtp.quit()
logger.info("Mail sent")
except (ConnectionRefusedError, smtplib.SMTPServerDisconnected, smtplib.SMTPAuthenticationError,
smtplib.SMTPNotSupportedError, smtplib.SMTPDataError) as e:
logger.error("unable to send mail report: SMTP error was \'{}\'".format(e))
print("unable to send mail report: SMTP error was \'{}\'".format(e), file=sys.stderr)
exit(1)
if __name__ == '__main__':
config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "conf")
spool_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "spool")
logger = setup_logging()
logger.setLevel(logging_loglevels[os.getenv("LOGLEVEL", "INFO")])
parser = argparse.ArgumentParser(
description="Send an email notification")
parser.add_argument("-c", "--config-dir", dest="config_dir", type=str, default=None,
help="path to the directory containing the configuration files - if omitted, it assumes it's the same"
"containing the script itself")
parser.add_argument("-p", "--spool-dir", dest="spool_dir", type=str, default=None,
help="path to the directory containing the report files - if omitted, it assumes it's the same containing"
" the script itself")
parser.add_argument("-f", "--report-file", dest="report_file", type=str, default=None,
help="the file name of the JSON report - if omitted, it assumes '{}'".format(report_file))
parser.add_argument('-e', "--email-notify", dest="email_notify", action="store_true")
parser.add_argument("-s", "--sender", dest="sender", type=str, default=None,
help="email sender")
parser.add_argument("-r", "--recipient", action="append", dest="recipients", type=str,
help="email recipient - this option can be used multiple times to list multiple recipients as necessary")
args = parser.parse_args()
spool_dir, report_file = validate_spool(spool_dir)
config_dir = validate_config(config_dir)
logger.debug("Script started")
subject, message = render_message()
if args.email_notify:
sender = args.sender
if not args.sender:
print("You must specify the sender's email address using the '-s' option.", file=sys.stderr)
exit(1)
if not args.recipients:
print("You must specify one or more recipient email addresses using the '-r' option.", file=sys.stderr)
exit(1)
recipients = args.recipients
credentials = configparser.ConfigParser()
credentials.read(os.path.join(config_dir, credentials_file))
send_email(credentials['smtp'], subject, message)
else:
with open("{}/{}".format(spool_dir, "message.htm"), "w") as message_file_handler:
message_file_handler.writelines(message)
logger.debug("Script ended")
From Python Automation to Infrastructure-as-Code Compliance
Securing SMTPtraffic via TLS and managing clean configuration files are foundational skills for any DevOps engineer. The next logical step is integrating these workflows into a holistic, secure software lifecycle.
My book, "DevSecOps and DevOps for Linux: The Foundations", published by Apress, was specifically designed for professionals who want to eliminate tech stack gaps through intensive, hands-on enterprise exercises — built entirely on open-source, cloud-agnostic architectures to ensure zero vendor lock-in.
Key insights covered in this volume:
-
The Holistic Skills Set Brick: Bridge technical engineering with team management frameworks. Master
Scrum,Kanban, andLeanmethodologies to design system architectures aligned with real corporate workflows. -
The Shell Scripting & Unix Tools Brick: Build rigorous operational foundations. Master advanced
Bashshell scripting architecture while learning how to combine core Unix tools into robust, repeatable, and enterprise-ready host automations. -
The Version Control Engineering Brick: Move past basic commits. Dive deep into
Gitversion control, mastering feature-branch workflows, repository lifecycle management, and complex conflict resolution. -
The Data & Core Automation Brick: Build bulletproof data processing setups. Learn advanced
RegEx, how to operate using evergreen tools such asGrep,Sed, andAWK, and how to master structured data parsing (XML,JSON,YAML) usingPythonand tools likexmlstarlet,jq, andyq. -
The Modern Python & Automation Brick: Develop a modern Python project using
pyproject.tomlwithpytest-based unit tests, governing the project withGNU Makefor testing, building, and digitally signingRPMpackages. The project is presented in an evolving fashion, showing how features are added step by step, highlighting how a properly structured Python project can be improved and evolved with minimal or no rework at all. -
The Linux OS Hardening & PKI Brick: Learn the real mechanics of security. Implement
X.509/PKIarchitectures,TLSconfigurations, andGPGencryption and signing, while mastering low-level kernel defenses likeSELinuxandLinux Capabilities. -
The Compliance Check and Shift-Left Security Brick: Learn how to leverage the
pre-commitframework to automate compliance checks withPylintandFlake8, and perform security scans withBanditandSafety, extending the security audit to the full software supply chain. -
The Application Integration Brick: Master the foundational protocols used to securely interconnect enterprise microservices, including
HTTP,REST,OpenAPI,SOAP, andLDAP/LDAPS. -
The Infrastructure Delivery Brick: Put theory into practice with vertical, real-world labs. Move from basic scripts to engineering
Ansiblearchitectures, rootlessPodmansetups, image creation viaBuildah, and completePulp3deployments usingDocker Compose. -
The Enterprise GitOps Pipeline Brick: Tie everything together by automating your software supply chain. Build complete continuous deployment workflows using
Gitea CIpipelines hosted natively onKubernetes(RKE2).
Footnotes
This post completed the trilogy we started with the JINJA2 With Python Tutorial JINJA Ansible HowTo and Python Argparse Tutorial - Argparse HowTo posts. In this trilogy you learned how to create a professional grade script supporting command line arguments processed with argparse, exploiting the JINJA2 template engine to generate contents from templates (in our example we turned a JSON report into an HTML report), and delivering the report as an HTML email using the Python smtplib module.
As expected by any good DevSecOps professional, you are now equipped with the necessary skills to write secure and powerfull notification scripts that are typically used in SIEM.
If you appreciate this post and any other in this blog, just share this and the others on Linkedin - sharing and comments are an inexpensive way to push me into going on writing - this blog makes sense only if it gets visited.
Also concrete contributions to the maintenance of this blog are also very welcome, ... just put your tip in the below cup.

Cuando todo se paga: la distopía ultraliberal que convierte la vida en una deuda
El ultraliberalismo triunfó porque convenció a la gente de que la solidaridad era debilidad. Les enseñaron a desconfiar de los demás, a pensar que quien pedía ayuda era un parásito. En ese futuro sin Estado, cada uno vive encerrado en su propio pequeño reino de deudas, con miedo a perderlo todo. Porque en la sociedad del “mérito”, el fracaso no tiene consuelo: si caes, es culpa tuya. Si enfermas, es tu responsabilidad. Si envejeces, tu error fue no haber sido joven para siempre.
etiquetas: liberalismo, deuda
» noticia original (diariosabemos.com)
Creer y destruir de Christian Ingrao
Título original: Croire et détruire.
© 2010 by Librairie Arthème Fayard
© de la traducción, 2017 by José Ramón Monreal Salvador
Editorial: Acantilado.
Tenían apenas treinta años cuando Adolf Hitler llegó al poder: eran juristas, economistas, filólogos, filósofos e historiadores.
¿Por qué decidieron formar parte de los órganos de represión del Tercer Reich? Tras acceder a los archivos del SD y de las SS, el autor investigó la trayectoria de un buen número de estos académicos.
Creer y destruir es un estudio pionero que muestra que el exterminio en los campos de concentración, lejos de obedecer únicamente a la demencial mentalidad del Führer, se anclaba en un sistema de creencias compartidas por muchos de los miembros de la generación que creció en la Alemania derrotada y sometida al Tratado de Versalles.
Y en buena medida, la historia del nazismo se erige sobre las experiencias personales (de fervor y de resentimiento) de estos hombres, tan ávidos de creer en su nación como de destruir lo que pareciera amenazarla: ellos teorizaron y planificaron la eliminación de veinte millones de individuos de raza «inferior» y organizaron e intervinieron en el exterminio de un millón de personas.
Christian Ingrao (Clermont-Ferrand, 1970) es historiador especializado en el nazismo y en la violencia en tiempos de guerra. De 2008 a 2013 fue director del l’Institut de l’histoire du temps présent.
Tiempo estimado de lectura: 18 minutos.
Algunas de las cosillas que aprendí leyendo este libro que no tienen por qué ser ni ciertas ni falsas ni todo lo contrario:
- Era apuesto, brillantes, inteligentes y cultivados. Fueron responsables de la muerte de varios cientos de miles de personas. Este libro cuenta su historia.
- Este libro nació de una tesis de doctorado redactada entre 1997 y 2001 y titulada «Los intelectuales del servicio de información de las SS, 1900-1945». Se trataba de estudiar a un grupo de ochenta licenciados, economistas, juristas, lingüistas, filósofos, historiadores, geógrafos, algunos de los cuales hicieron carreras universitarias en paralelo con una actividad de construcción dogmática, de vigilancia política y de información interna o externa en los órganos de represión del Tercer Reich, y en especial del Servicio de Segurodad (SD) de las SS, y que en su mayoría, estuvieron implicados a partir de junio de 1941 en el intento nazi de exterminio de los judíos de la Europa del Este.
- El interés esencial de los hombres aquí estudiados reside en haber producido todos a la vez un discurso dogmático que permitía un verdadero análisis de sus sistema de creencias y en haber impuesto sobre el terreno las consecuencias últimas de este sistema mandando a los grupos de acción (Einsatzgruppen) que exterminaron a los judíos de Rusia en los territorios invadidos de Crimea, Ucrania, Bielorrusia, Rusia y de los antiguos estados bálticos.
- He tratado de comprender cómo se lo hicieron esos hombres para creer y para destruir.
- La primera experiencia común a los miembros del grupo que nos ocupa es la Primera Guerra Mundial, la cual forma la trama de fondo de su infancia.
- Toda guerra abre una brecha en el lento desarrollo de los trabajos y los días. Ciertamente deja subsistir tiempos y espacios preservados, pero afecta, de forma directa o indirecta, a todos sus protagonistas.
- Sus familias vivieron probablemente la entrada en la guerra con efervescencia y determinación.
- La mitad de la población alemana habría conocido así la experiencia del duelo familiar.
- Desde el verano de 1914 el Reich, atrapado por el bloqueo, se vio prácticamente obligado a la autarquía.
- Sobre todo a partir de 1916, los productos alimentarios estaban destinados de forma prioritaria al ejército. Así, las ciudades tuvieron que hacer frente a importantes problemas de aprovisionamiento. E Berlín la disminución de las raciones diarias tomó un cariz muy serio, al subir constantemente los precios durante la guerra.
- El hambre, el duelo, la sensación de estar luchando por la supervivencia cotidiana constituyeron así los tres elementos principales de la experiencia de la guerra por parte de los niños, tanto más cuanto que se inscribían en una lectura específica de lo cotidiano.
- Los belgas y los rusos, muy en especial, se veían asociados a innumerables actos de crueldad cometidos con los soldados alemanes heridos y con los civiles de las regiones conquistadas.
- Eran numerosas las imágenes que insistían en la suciedad de los rusos y en su atraso, debido a la inferioridad cultura de la población: un imaginario casi colonial, hecho de un sentimiento de superioridad y de prejuicios raciales, presidía dentro de este espíritu los proyectos del Oberost, la administración militar alemana en el frente del Este.
- La Gran Guerra era vista así como una lucha defensiva en la que estaba en juego la suerte de una Alemania enfrentada con un enemigo que poseía el don de la ubicuidad, un enemigo que se distinguía por la inhumanidad de sus métodos de lucha, inhumanidad que era resultado, al menos parcialmente, de una hostilidad de esencia étnica, biológica.
- Durante las hostilidades, los soldados elaboraron el mito del campo de batalla como lugar de iniciación.
- En numerosos hogares acomodados y cultivados que constituían sociológicamente el corazón el consentimiento alemán al conflicto, la guerra se convirtió así en el lugar de una forma derivada de utopía milenarista. Esos desafíos eran demasiado importantes para que fuera posible mantener a los niños al margen.
- La Gran Guerra fue de hecho el primer conflicto en el que los niños fueron «movilizados», en el sentido de que fueron objeto de un discurso específico que les explicaba la guerra, su sentido y quienes eran sus enemigos.
- Desde el otoño de 1914, la industria alemana del juguete, la primera del mundo en cuanto a producción y (en parte) de la exportación mundial, se puso en sintonía con la cultura de la guerra. La violencia era así «trivializada». Los juguetes, al tiempo que desrealizaban la guerra, la introducían en la cotidianidad de los niños.
- Libros de texto, cuadernos de ejercicios y clases magistrales empezaron a hablar de la guerra, de su evolución y de su sentido, adoptando un discurso preparado de antemano, al servicio de unos objetivos concretos. El ideal perseguido por los pedagogos era el de una juventud seria y preocupada, una juventud llena de gratitud hacia los héroes que entregaban su vida en el frente para defender a la nación.
- De acuerdo con una práctica extendida en los primeros meses de la guerra, el Gobierno alemán recopiló sistemáticamente los testimonios concernientes a los actos de brutalidad de las tropas rusas. Los relatos de violaciones, de mutilaciones, de ejecuciones sumarias tanto de civiles como de prisioneros eran así difundidos por los canales institucionales clásicos de los libros blancos, pero también bajo forma de rumores, a medida que llegaban refugiados a territorio alemán.
- El rechazo de la derrota encuentra una expresión particularmente clara en el joven estudiante de instituto: la derrota, innominada, innombrable, es también inimaginable, y hace evidente la continuación de las hostilidades. Y en realidad, lo que Best considera más doloroso es el hecho de que el enemigo ocupe su propia ciudad.
- La mayor parte de los miembros del grupo conocieron durante su infancia o su adolescencia una de las dimensiones de las crisis políticas que vivió Alemania.
- Los enemigos (comunistas y separatistas) calificados de «basura» y de «chusma», la dimensión defensiva de la lucha y la extrema juventud de Höhn cuando comienza a «luchar» denotan que se mantenía intacta la cultura de guerra nacía del primero conflicto mundial.
- La cristalización de una creencia en la desaparición de Alemania a más o menos corto plazo, como entidad inamovible, parece en última instancia haber constituido el corazón de las representaciones de la Gran Guerra y del «tiempo de los disturbios». En ello radicó sin duda la esencia misma de la experiencia traumática inicial de los miembros del grupo, experiencia tan dolorosa que hacía prácticamente imposible toda evocación de la infancia.
- Los grupos nacionalistas constituidos rápidamente tras la guerra hicieron elegir sus representantes en los consejos estudiantiles. Los völkisch radicales, alemanes, pero también austríacos y sudetes, plantean la cuestión de la «ascendencia alemana» como criterio de selección, así como la del devenir de los miembros judíos de la asociación.
- En 1921, a pesar de las presiones hechas por el Ministerio de Cultos y de Enseñanza prusiano, unas votaciones estudiantiles sucesivas aprobaron por amplias mayorías (entre un sesenta y seis y un noventa por cierto de los sufragios) esta línea völkisch y antisemita. La mayoría silenciosa se expresó aquí sin la menor ambigüedad.
- A comienzos de la década de 1930, la adhesión de los medios estudiantiles a las tesis nacionalistas y racistas es un hecho consumado. Los futuros intelectuales de las SS han sido testigos y, a veces, protagonistas de esa mutación determinante.
- La mayor parte de los miembros del grupo estudiado llega a la universidad después de que la comunidad de estudiantes se inclinara por el radicalismo völkisch, tras la subida al poder las NSStB, e incluso, para algunos, tras la Machtergreifung (toma del poder).
- Estos jóvenes no responden en absoluto al cliché del militante nazi inculto; accedieron a la universidad, re formaron en ella y, en general, pasaron con éxito sus exámenes. Tampoco son los individuos malos de una ciencia que los habrían «pervertido». Conocimientos, militancia y nivel cultural: en la interacción entre estas tres dimensiones es donde se expresa la especificidad de estos intelectuales militantes, aun cuando la disposición de estos dos términos podría bien pensando, invertirse.
- En Alemania, la norma es elegir dos disciplinas al comienzo de los estudios universitarios. Los juristas compaginan en general derecho y economía política, incluso ciencias políticas. En el caso del derecho, los estudios se orientan principalmente hacia el mundo de los negocios y el servicio al Estado.
- El derecho representaría el arquetipo de la materia «técnica» que habría resistido, antes de 1933, a la «ideologización» del saber. La actitud de los juristas del grupo a este respecto se antojó como el modelo de esa compartimentación debida al carácter técnico de los temas abordados.
- No se trata tanto de nazificación de los avances científicos como de una clara politización de las problemáticas, combinada con un mantenimiento de la ambición de objetividad científica.
- La enorme influencia del SD, que se impone a través de unos intelectuales de las SS más jóvenes, hace que por último la enseñanza, la investigación, la militancia y la práctica represiva sean rápidamente indisociables. En esta fase, el saber universitario participa pues de la formulación ideológica propia de las SS.
- Los años 1934-1939 están marcados por la irresistible ascensión de una joven generación de investigadores que modifican poco a poco los temas, se aseguran la secretaría de la organización y establecen estrechos contactos con nuevos seguidores de la historiografía völkisch.
- Entraron en unas redes asociativas precozmente radicalizadas, que desplegaron una intensa actividad política presentada bajo la forma de una lucha defensiva contra un enemigo universal y proteiforme, un enemigo que, en el «frente interior», adopta el rostro del espartaquismo, de la socialdemocracia, del separatismo y de un judaísmo al que son ya profundamente hostiles.
- Todas estas corrientes tienen como característica común el que basan su argumentación en unas categorías con fundamento biológico. Todas formulan para el futuro un proyecto de refundación sociobiológica de una Alemania a la que se veía entonces como disminuida.
- La lectura nazi del mundo encuentra su sistema referencial en la raciología nordicista de Hans F. K. Günther.
- Con Günther, cuyas posiciones triunfan entre los años 1929 y 1930 en las SS, los tres componentes del imaginario biológico de las SS se han fusionado: determinismo racial, nordicismo y antisemitismo de formulación erudita.
- El sistema de creencias interiorizado por los intelectuales de las SS reformula la historia, transformándola en una sucesión de luchas, de enfrentamientos y de combates identitarios marcados todos ellos por el sello de lo étnico. El determinismo racial aporta al intelectual de las SS una representación de la historia atravesada por la inmanencia, transfigurada por la providencia, orienta por el finalismo.
- Alemania, lugar de concentración máxima de sangre nórdica no mestiza, está llamada a un destino providencial y ello sea cual sea el período investigado bajo la óptica del sistema de creencias nazi. Para las intelectuales de las SS, la creencia en la inmanencia de la nordicidad da sentido a la historia, orienta su curso y conduce inexorablemente a su reinado sin división de la raza, regenerada en la germanidad.
- El nazismo daba a quienes se adherían a él la sensación de que el curso de las cosas era el de la salvación colectiva gracias al advenimiento del imperio. La fe nazi como «promesa del reino»: un sentimiento que parte de lo inefable y la certeza, que moviliza almas y cuerpos a la espera de una utopía racial fusional.
- Según el dogma nazi, existe una indisociable solidaridad entre el individuo, el grupo familiar y la nación, todo ello a través del patrimonio genético.
- Algunos, como Reinhard Höhn, el jefe del SDHA II, aceptan esta dimensión de la creencia nazi consistente en hacer de un individuo el eslabón presente, vivo, de una cadena inmanente de plasma genético que vincula al muero «con lo que viene», lo que ya no es, lo que aún no ha nacido.
- Las SS encarnan el porvenir de Alemania. Olvidar que, para los nazis, lo que es válido hoy para las SS lo será mañana para Alemania en su totalidad es ciertamente no comprender lo que la Orden Negra pudo representar, incluso para los miembros del partido más hostiles a Himmler.
- Un número nada desdeñable de adhesiones se produce tras la toma del poder.
- La cuestión de la militancia nazi, de sus formas, de su amplitud, de la fuerza de su arraigo en la conciencia de los intelectuales de las SS no ofrece una respuesta simple: no cabe esperar zanjarla reduciéndola al binomio «fanatismo/oportunismo».
- Reinsertar las diferentes adhesiones nazis dentro de las trayectorias de estos jóvenes intelectuales permite distinguir tres grandes tipos de evolución. El primero, el más frecuente, les lleva de la militancia en el partido con el rango de oficial en la Orden Negra; el segundo, más atípico, es el camino inverso; el tercero, que afecta a muchos funcionarios de la Gestapo, pero a poco mandos del SD, consiste en pasar del funcionariado a las SS y al NSDAP.
- Los masones forman parte de los grupos que se considera con mayor capacidad de causar daño.
- Los judíos son unos enemigos biológicos, cuya acción amenazaría, según los expertos del SD, el fundamento de la germanidad: su esencia racial.
- Las tres funciones principales asumidas por el nazismo en las representaciones de sus partidarios: leer el mundo, leer la historia y reinscribir al individuo en la cadena de los antepasados.
- La lucha contra la URSS es una guerra total contra el enemigo «judeo-bolchevique». La URSS es para los nazis el país de la dominación judía y de la barbarie bolchevique, el lugar de la unión de los dos enemigos jurados e inmanentes de la germanidad.
- El internamiento de los individuos sospechosos es el primer paso hacia el registro y el encierro de los judíos en guetos, y hacia su utilización como rehenes cuando se producen fusilamientos por represalias.
- Al volverse sedentarios, pasando de un contexto de lucha a un clima de ocupación, las unidades de las SS ponen así en marcha un procedimiento que transforma la violencia en rutina en un sentido amplio.
- Parece que la violencia infligada causó en algunos de los miembros de los grupos, con independencia de su aceptación del genocidio, un sufrimiento psíquico. Así ocurre con esos tiradores que, a medida que se acostumbraban a ejecutar sus crímenes, experimentaban sin embargo cada vez el sentimiento de «cruzar una línea roja».
- A veces el caparazón se resquebraja. Los verdugos confiesan estar traumatizados por lo que han hecho, por lo que han visto, por lo que han oído y por lo que han sentido.
- Pese a los mecanismos de habituación, la violencia sigue siendo vista y vivida al menos en parte como traumática; «marca» el psiquismo de los asesinos.
- Este sufrimiento psíquico era lo bastante importante y masivamente compartido como para que los mandos de los grupos se preocuparan por él, y ello desde muy temprano. Los oficiales no se contentaron con hablarles a sus hombres de ello; algunos trataron incluso de maquillas las prácticas de violencia, intentando, según parece, limitar los efectos destructivos de la acción genocida. Estos apaños revelan tres estrategias distintas. La primera, prácticamente común a todos los mandos, es la de repartir de la violencia entre sus miembros. La segunda forma de reparto, más reglamentaria, obliga a que todos los miembros participen al menos en una ejecución.
- Una de las soluciones a la que se recurre en muchos comandos es el relevo de los equipos. Los hombres disparan hasta vaciar su cargador, o disparan una vez con salvas, y son relevados por un pelotón que permanece detrás de ellos.
- Es también esta preocupación por el reparto de la carga de los fusilamientos la que incita a determinados mandos a modificar los procedimientos de ejecución redoblando los pelotones de tiradores. Esta medida, contraria al objetivo de «productividad» que asumen los grupos, permite diluir entre los hombres la responsabilidad de la muerte infligida.
- Los intelectuales de las SS asumieron un papel capital en la práctica discursiva de la legitimación del genocidio, justificando hasta en el interior mismo de los comandos cada nuevo paso en la acción genocida, y acompañando a los hombres encargados de ponerla en práctica con una construcción dogmática. Como oficiales de mando, desempeñaron por otra parte un papel decisivo en la organización y la codificación de las prácticas de violencia, concibiendo y desarrollando las técnicas de exterminio, de gestión del carácter transgresor de la violencia y de legitimación de la acción genocida.
- ¿Cómo actuaron y reaccionaron ante la derrota, y sobre todo ante su inmediatez, los intelectuales de las SS? Cada reacción, cada respuesta fue de tipo individual. Pero estas reacciones hacen las veces de hecho social. Distinguiríamos dos actitudes. La primera, muy minoritaria, fue seguir la lucha hasta el final.
- No todos los intelectuales de las SS consiguieron ocultar su identidad durante un período de tiempo largo.
- La mayor parte de los individuos aquí estudiados trataron de preservar cierta esperanza de futuro, individual o colectivo. La mayoría escaparon a un proceso que siguió inmediatamente a la derrota y la ocupación. Pero, a partir de mediados de la década de 1950, una nueva generación de jóvenes fiscales alemanes decidió sistematiza la persecución de los crímenes cometidos por los nazis. Fue a causa de estas dos oleadas de procesos por lo que los intelectuales de las SS acabaron ante la justicia.
- La única característica común a todos los acusados: la necesidad de gestión de la memoria de guerra, memoria personal hecha de violencia, de militancia, de utopía y de angustia.
- Pocos intelectuales de las SS tuvieron la posibilidad de negar en bloque los hechos que se les imputaban.
- Las estrategias para evitar responsabilidades orquestadas por los intelectuales de las SS so sin duda las que delatan de la forma más clara posible el grado de conciencia que tenían de los crímenes cometidos por el Tercer Reich. Despliegan una enorme energía para ocultar, encubrir y enmascarar las actividades de sus oficinas, para disminuir su responsabilidad, para exculpar a sus colegas. Con ello no hacen sino delatar su conocimiento profundo del sistema nazi, su íntima familiaridad con las políticas genocidas, así como su habilidad retórica.
¿Has leído este libro? ¿Algún libro parecido? ¿Tienes alguna cosa que decir sobre lo que expone este libro? ¿Recomiendas algún libro relacionado a este? Estaré encantado de leer lo que piensas sobre este libro en los comentarios.
Algunos enlaces relacionados:
- El País.
- El Cultural.
- El Periódico.
- Ara.
- La Voz de Galicia.
- La Vanguardia.
- Revista de Letras.
- Goodreads.
Algunos libros relacionados:
- Eichmann en Jerusalén de Hannah Arendt.
- Yo no de Joachim Fest.
- La industria del Holocausto de Norman G. Finkelstein.
- Yo fui guardaespaldas de Hitler de Rochus Misch.
- Si esto es un hombre de Primo Levi.
- Los verdugos y las víctimas de Laurence Rees.
- Los orígenes del totalitarismo de Hannah Arendt.
- Ceguera moral de Zygmunt Bauman & Leonidas Donskis.
- Cómo perder un país de Ece Temelkuran.
- El lobby israelí y la política exterior de Estados Unidos de John J. Mearsheimer y Stephen M. Walt.
raul
El estado emocional de la infancia, la mayor preocupación de las familias un año después de la dana
La red de vecinos que nació del barro y ahora pide ser escuchada en la reconstrucción de la dana
Melissa se fortalece a huracán categoría 5: el Caribe en alerta
El huracán Melissa, formado como tormenta tropical el martes pasado en el mar Caribe, alcanzó la categoría 5, según el Centro Nacional de Huracanes de EE. UU. (NHC, por sus siglas en inglés) que prevé vientos destructivos, marejada ciclónica e inundaciones catastróficas que empeorarán en Jamaica durante el día y hasta esta noche. El huracán, que actualmente avanza a unos 6 kilómetros por hora y experimenta vientos máximos sostenidos de hasta 270 kilómetros por hora, alcanzaría a Cuba el martes, y el sur de Bahamas, RD y Haití el miércoles.
etiquetas: melissa, huracán, categoría 5, caribe, nhc
» noticia original (emisorasunidas.com)
Hay una industria perdiendo 42.000 puestos de trabajo y desangrándose ante nosotros: Hollywood
La industria del entretenimiento en Los Ángeles atraviesa su peor crisis en décadas, con una caída vertiginosa en el número de producciones y empleos
etiquetas: cine, industria
» noticia original (www.xataka.com)
Amazon se harta de Correos Express: "Pulsan un botón y dicen que han intentado entregar el paquete, pero ni lo han intentado"
Negocios.com ha podido saber, tras hablar con varias fuentes internas de Amazon, que la compañía está seriamente disgustada con la forma de trabajar de Correos Express, la filial de paquetería urgente de Correos. Según estas fuentes, los retrasos, las incidencias y la falta de profesionalidad en las entregas están generando un malestar creciente dentro del gigante del comercio electrónico.
etiquetas: amazon, correos express, mensajería
» noticia original (www.negocios.com)
Cervezas, copas y chupitos en el PP de Noia: 30.000 euros fundidos por un alcalde pese al reparo de la interventora
Entre los tickets entregados entre 2018 y 2024 hay casi 30.000 euros entre bares, restaurantes y caterings, algunos presentados como reuniones de trabajo y otros como comidas con afiliados y simpatizantes. Se incluyen vinos, cañas, copas y chupitos y, por las horas de emisión, varios de los encuentros son cenas.
etiquetas: pp, noia, facturas, 30000 euros, alcalde
» noticia original (www.eldiario.es)
Diez millones de personas vieron a un YouTuber abrir una cerradura con una lamina; la empresa de cerraduras lo demandó. Mala idea. [ENG]
"Abrir cerraduras" puede no parecer un contenido brillante en redes sociales, pero Trevor McNally ha convertido la práctica de abrir cerraduras en una auténtica joya en línea. Ex sargento de la Infantería de Marina de los EE. UU., McNally cuenta hoy con más de 7 millones de seguidores y ha acumulado más de 2 mil millones de visualizaciones simplemente mostrando lo fácil que es abrir muchas cerraduras comunes con un golpe, una ganzúa o una cuña. Esto no siempre le hace ganarse la simpatía de las empresas que fabrican las cerraduras.
etiquetas: youtuber, cerradura, demanda, apertura, empresa
» noticia original (arstechnica.com)
Anuncios imposibles creados con IA
Un forero ha usado inteligencia artificial y técnicas de deepfake (Sora) para generar falsos anuncios de productos que no existen, con humor absurdo. El resultado es un collage publicitario delirante que parodia los clichés de la era del consumo y de la propia IA.
etiquetas: humor, inteligencia_artificial, deepfake, publicidad, sora
» noticia original (www.youtube.com)
40 años del mítico Intel 80386; uno de los procesadores más importantes de la historia
Intel se propuso ir más allá en uno de sus momentos más difíciles. Los ordenadores estaban en pleno auge y había competidores grandes que eran todo un reto, sobre todo por la mencionada serie de chips de Motorola que estaban siendo un éxito en la industria. Había una presión gigante, pero eso no fue un impedimento para lograr el objetivo en 1985, año en el que oficialmente la compañía decidió lanzar el innovador procesador diseñado por Pat Gelsinger (CEO de Intel entre 2021 y 2024) y John Crawford.
etiquetas: intel, 80386, procesador, ordenador, pc, i386, chip, arquitectura, historia
» noticia original (computerhoy.20minutos.es)



