Qué rico, una siesta

Por si un día te tienes que comer los zapatos

Lo he visto ayer cuando iba a hacer unas copias de llaves. Técnicamente esto debe contar como ensalada.

Los gatos son los amos del Universo

Link para ver el vídeo

Seguro que esta vez sí va a funcionar

Vi hoy esto en el supermercado y lo primero que pensé fue "estamos gobernados por subnormales"; pero al llegar al trabajo y comentar el asunto con una compañera, y después de hablar de que esto SIEMPRE sale mal en TODOS los ejemplos de la historia y JAMÁS se ha dado ni un solo caso en el que haya funcionado, me dijo que ella estaba de acuerdo en controlar precios "pero haciéndolo bien".

Yo me quedé un momento callado, pensando en mi máximo deseo ahora mismo (poder elegir dónde vivir, para salir de Europa cuanto antes y jamás volver a poner los pies en este continente peronista putrefacto y decadente de mierda), y cometí el error de seguir hablando diciéndole a mi compañera si no se había enterado de todos los ejemplos que le acababa de mencionar. Ella me dijo "vale, pero es que no es normal que mi hija no pueda alquilar un piso, eso hay que controlarlo para que no sean tan caros", y yo "te das cuenta de que lo que va a pasar haciendo lo que tú dices es lo mismo que pasa siempre en todas partes, y tu hija se va a quedar sin piso igual porque no va a haber pisos, ¿verdad?", y ella: "no, lo que hay que hacer es esta vez hacerlo bien".

Y entonces recordé que estamos en una democracia, y que el problema no está en los tipos del despacho. A ellos les va muy bien y viven como dioses, el problema está en los mortales.

Tattoo

Diga usted que sí, ¿señora? Que la vida son dos días.

La importancia de atender en clase de Lengua

No quiero saber lo que contiene esa maleta.

Esfuerzo y talento

(Vía Ana). Hace tiempo tuve una novia rica que no soportaba la idea de estar sola. Cuando salíamos tenía una hija pequeña que era el centro de su vida, y ya años después de haber estado juntos un día nos vimos y me contó que la chica ya era mayor y la iba a mandar a un internado. Me dijo "se me parte el corazón porque me va a dejar sola, pero la iré a ver siempre que pueda", y yo: "¿y por qué no la mandas a algún buen colegio que no sea en régimen interno, y así se puede quedar viviendo contigo unos años más?".

Su respuesta me dejó clara una aplastante lección de vida: "a ese internado van los hijos de las personas más influyentes del mundo: tienes familias reales, presidentes de los países más importantes, grandes empresarios e inversores multinacionales, y todo lo demás en ese nivel. Solamente con los amigos y contactos que va a hacer ya va a tener garantizado estar en la élite del mundo el resto de su vida; ahora es un sacrificio para mí, pero con esto ya puedo estar tranquila para siempre".

Arma de destrucción masiva

(La info aquí). Cuando los chinos empezaron con el fentanilo fue porque no se esperaban que los americanos contraatacarían con el reaguetón. Ni Hitler se atrevió a tanto.

Ya te enterarás

Link para ver el vídeo

Este puente de Semana Santa me estoy mudando porque vendo mi apartamento en Las Coloradas para buscarme otro sitio (ya tengo varias opciones), y he hecho este vídeo para probar este escenario temporal a ver cómo queda. La luz natural cambiante es enemiga de cualquier creador de contenidos, pero quería hacer un test justamente incluyendo también este inconveniente para aprender de él y ver cómo manejarlo; el objetivo está conseguido y cuando necesite hacer cosas serias quedarán mejores.

La alegría de ser padres

(Vía Why you should have a cat)

Cómo se programa en 2025

Grok tiene un "modo Think" especializado en problemas matemáticos, de programación y demás. Además de su modo de trabajo interno, en lugar de contestarte inmediatamente se toma su tiempo para analizar a fondo lo que le pidas y seguir un hilo de pensamiento mucho más profundo y detallado.

Quería probar cómo funciona, así que le he pedido que me haga una aplicación. Pero van a ver a continuación que, incluso aunque aquí no hay nada de código de programación y es solo lenguaje en español, para que el resultado salga bien de verdad uno no puede pedirle las cosas de cualquier manera: hay que saber qué pedir y cómo pedirlo, y para eso hay que saber programar. Recuerden: programar no tiene nada que ver con la informática y los ordenadores: programar es pensar. Y a continuación van a ver cómo piensa un programador:


Quiero crear una web-app (frontend + backend, todo en JavaScript + Node) para hacer sorteos. A continuación te doy los detalles.

Debe haber dos tipos de usuarios: el usuario admin y el usuario participante. Ambos acceden a la misma url que lleva a la "zona del participante", y el admin tendrá un acceso a la zona admin que te describiré más abajo.

Antes de explicar cómo se ve la app y qué elementos tiene, te digo qué campos tiene (al menos) cada sorteo:


- Título: una descripción escrita por el admin.
- Fecha de expiración: día y hora concretas en las que ya no se admiten más inscripciones de participantes en el sorteo, y se elige a los ganadores (los eliges tú automáticamente al azar: lo haces cuando se cumple el momento de la expiración con lo que tienes que tener algún proceso atento a esto, y también lo haces si cuando se inicia la app hay algún sorteo que tiene fecha de expiración anterior al momento actual). Aunque tú lo guardes internamente como una timestamp, de cara a los usuarios tienen que ver el dato como fecha + hora para saber cuándo se cierra el sorteo.
- Premios: una lista de elementos (los premios). Importante: cuando el admin crea los premios, en su interfaz puede asignar cantidades (ejemplo: 1 bufanda y 3 camisetas) y los usuarios también lo verán así. Pero aunque la interfaz lo muestre así, internamente la lista de premios estará constituida por elementos individuales (bufanda, camiseta, camiseta, camiseta). Cada uno de estos elementos tendrá, además de el/los campo/s necesarios para identificarlo, un campo "ganador" que estará vacío hasta que el sorteo expire y se asigne un ganador de entre los participantes. Cada participante solo puede ganar un premio en cada sorteo.
- Participantes: lista de participantes inscritos en ese sorteo. Cada participante tendrá al menos dos campos: nombre/alias, y email. El campo email será único: un usuario (un email) podrá participar en distintos sorteos, pero no podrá haber dos emails iguales entre los inscritos para un sorteo.

Si tú quieres añadir más campos internos a estos (por ejemplo, un "id") haz lo que te parezca mejor, a mí solo me interesa que la app funcione bien de acuerdo a los parámetros que te explico aquí.

A continuación te explico las distintas zonas y funcionalidades a las que acceden los usuarios.



Frontend: zona admin. En ella el admin gestiona los sorteos: crea uno nuevo, edita los que hay o borra los que quiere que desaparezcan de la aplicación.

Al acceder a la zona admin, el admin ve una lista de los sorteos existentes ordenada de sorteo más reciente creado a más antiguo creado (y si no hay ninguno un mensaje diciendo que no hay sorteos que mostrar).

Sobre la lista hay un botón para crear un nuevo sorteo, y en cada elemento de la lista hay un icono para editar y otro para borrar el elemento. Si se hace click en el de borrar aparece un popup de confirmación (pudiendo confirmar o cancelar), y si se confirma el elemento se borra y ese sorteo deja de existir en la aplicación irreversiblemente.

El icono de editar un sorteo de la lista, al igual que el botón para crear un nuevo sorteo, hace que aparezca un popup con un formulario para crear/editar: si se está editando los campos del popup contienen los datos editables del elemento, si se está creando uno nuevo los campos aparecen en blanco. En ambos casos, si se cancela (o se pincha fuera del popup) la operación de creación o edición se cancela; y si se acepta con el botón de confirmación la lista se actualiza con el nuevo elemento como haya sido creado/actualizado.

El admin ve cada sorteo con los siguientes campos: título, fecha de expiración y lista de premios. Cuando está creando/editando un sorteo, esta lista de premios la ve con dos campos para cada premio: cantidad y descripción. Cada sorteo aparece por defecto con campos para un premio (no se pueden crear sorteos sin premio), pudiéndose añadir más premios sin límite. Como te he explicado antes, la cantidad dará lugar internamente a tantos ítems en la lista de premios como haya definido o editado el admin en su popup de creación/edición del sorteo.

Por otra parte, en algún sitio donde no moleste al trabajo general, el admin tendrá un texto o botón que permita cambiar la contraseña admin. Al pulsar ahí aparecerá un popup que tendrá tres campos de texto para las contraseñas: 1) contraseña actual, 2) contraseña nueva, 3) repetición de contraseña nueva. Además habrá un botón de cancelar (pulsando fuera del popup se cancela también) que limpiará los campos y cerrará el popup, y un botón de enviar. Pulsando este botón se enviará la petición al servidor: si algo ha ido mal se recibirá el "mensaje de error interno" que disparará el correspondiente alert, y si todo ha ido bien junto al botón o texto de cambio de contraseña aparecerá un icono de tick verde.

Además de todos los elementos descritos hasta ahora, en la zona admin podrá haber un elemento que no existirá en el DOM hasta que se reciba desde el backend un "mensaje de error interno". En este caso se creará este elemento, que aparecerá como alert en la parte superior de la página y que contendrá el texto del mensaje enviado por el backend.



Frontend: zona participante. Es la página a la que se accede con la url general de la app.

Además de los elementos que te describo en los siguientes párrafos, en esta zona hay un link/botón para hacer login como administrador. Pulsar ahí genera un pop-up de login en el que se pide la contraseña de admin. Si el login es correcto el admin entra a la zona admin, y si es incorrecto el campo de la contraseña admin se limpia y aparece un mensaje de login incorrecto. Este popup debe tener un botón de cancelar que limpia los campos y cierra el popup, y además pulsando fuera del popup se cancela la operación igualmente.

En esta página el usuario (que no ha hecho login como admin) ve una lista de sorteos: primero los sorteos abiertos y debajo los sorteos expirados. Importante: esta lista (con los sorteos aún abiertos y sorteos expirados) solo incluye los sorteos que el admin mantiene como existentes en la app. Cuando un admin borra un sorteo en la lista de su zona admin, este sorteo deja de aparecer en la zona de participantes también.

En cada uno de los sorteos abiertos (ordenados de más reciente a más antiguo) se muestra: el título, la lista de premios y la fecha de expiración (indicando que el sorteo se cerrará en esa fecha: día y hora). En la lista de premios aparece cada premio con su cantidad y descripción. Además en cada ítem hay un botón para participar. Al pulsar este botón el usuario ve un popup en el que se le pide su nombre y su email (campos obligatorios) con un botón de confirmación: si todo está ok al pulsar este botón se envía el mensaje al backend (explicado más abajo) y se cierra el popup, si el email ya existe aparece un pequeño mensaje en el popup diciendo que el usuario ya está inscrito en este concurso, y si se pulsa el botón de cancelar o se hace click fuera del popup los campos se limpian y el popup se cierra. Si la respuesta del backend es positiva (el usuario ha sido correctamente inscrito en ese concurso), bajo el título del concurso aparecerá un texto de color verde y con tamaño pequeño que dirá "INSCRITO".

En cada uno de los sorteos expirados (ordenados de más reciente a más antiguo) se muestra: el título, la lista de ganadores (nombre y email) y para cada uno de ellos la descripción de lo que han ganado. Por ejemplo, si un premio estaba definido (por el admin) con 1 bufanda y 3 camisetas, al asignarse ganadores (en el momento de la expiración del sorteo) aparecerán cuatro ganadores, uno asociado a una bufanda y tres a una camiseta cada uno. Los sorteos expirados no aparecerán en esta zona como elementos con los que se pueda interactuar, no habrá botones que pulsar para inscribirse ni nada más que la información.

Además de todos los elementos descritos hasta ahora, en la zona participante podrá haber un elemento que no existirá en el DOM hasta que se reciba desde el backend un "mensaje de error interno". En este caso se creará este elemento, que aparecerá como alert en la parte superior de la página y que contendrá el texto del mensaje enviado por el backend.



Comunicación frontend-backend:

- Cuando un usuario entra a la url de entrada a la app front (la zona de participante), envía una petición al backend y este le devuelve la lista de sorteos preparados para mostrar.

- Cuando un usuario participante se inscribe en un sorteo, el front envía al backend el objeto con su información y el sorteo en el que se quiere inscribir, y el backend envía: si todo está ok, la lista actualizada de sorteos para que el front refresque los datos que tenía hasta ahora; si el usuario ya existía como inscrito en este sorteo, un mensaje informando de ello; y si hay algún otro tipo de error, un "mensaje de error interno" que el front pueda mostrar al usuario en su alert.

- Cuando el admin hace login para entrar a la zona admin, el frontend envía las credenciales al backend para su validación y recibe respuesta de este, para saber si son correctas o no.

- Cuando el admin entra a la zona admin, envía una petición al backend para recibir la lista completa de sorteos con la que rellenará su página para que la vea el usuario admin.

- Cuando el admin hace algún cambio en la lista de sorteos (añadiendo, modificando o eliminando) envía al backend la lista completa actualizada y recibe del backend la confirmación de que todo está ok, o bien un "mensaje de error interno" diciendo que algo ha ido mal y explicando brevemente cuál es el error ocurrido (para que el frontend del admin pueda mostrarlo al usuario en su alert).

- Cuando el admin quiere cambiar su contraseña envía al backend los tres campos de contraseñas: contraseña actual, contraseña nueva y repetición de contraseña nueva. Si la contraseña actual no es correcta o la contraseña nueva y la repetición de contraseña nueva no coinciden se enviará de vuelta un "mensaje de error interno" con el texto explicativo que se usará en el alert en el front del admin, y si todo está ok se enviará una respuesta positiva que es la que disparará en el front del admin la aparición del tick verde de confirmación.



Backend:

El backend tendrá que tener como mínimo estos elementos:

- Un servidor que se comunicará con el frontend y (cuando sea necesario) redirigirá las peticiones.

- Un gestor de la base de datos (el único que interactuará con ella directamente). Para hacer esto, y dado que la base de datos será un archivo de texto (en formato .json), este módulo hará uso de alguna función o módulo de NODE que permita leer y escribir archivos en el ordenador donde se esté ejecutando.

- Una base de datos: será un documento JSON, que contendrá toda la información necesaria para el funcionamiento de la aplicación: contraseña de admin, lista de sorteos y cualquier otra información que consideres conveniente.



Notas:

- La app gestionará la información y los valores que necesita para funcionar (las credenciales del admin y la lista de los sorteos y demás objetos que puedas considerar convenientes si es así) directamente en su memoria, usando el fichero .json solo como respaldo. Cada 5 minutos se asegurará de que el fichero existe, eliminará todo su contenido, y guardará en formato JSON toda la información que tenga en la memoria que deba ser almacenada en el fichero de respaldo para recuperarlo al iniciar.

- Al iniciarse la app, esta buscará el fichero .json y recuperará la información que haya en él. En caso de que el fichero no exista, la información que hay en él no tenga el formato o la estructura correcta o hubiera cualquier otro problema, la app hará lo siguiente: se asegurará de que el fichero existe, en caso de que existiera ya borrará todo su contenido, y escribirá en él los datos mínimos para iniciar la app. La lista de sorteos y eventualmente otros objetos estará inicialmente vacía, pero en el admin vas a poner por defecto las siguiente contraseña admin: "mandelrot".

- La contraseña admin NO se guarda encriptada, esta app no requiere seguridad. Si es necesario cambiar a mano la contraseña directamente en el .json quiero poder hacerlo fácilmente.

- Quiero que uses un css sencillo y elegante, con fondo claros y colores sin estridencias pero con un diseño en el que se vean los elementos claramente diferenciados (sea por colores, por bordes o por los espacios entre ellos). Usa algún framework pequeño como Pure CSS o Spectre CSS (el que tenga algún CDN que se pueda enlazar online).

- Voy a tener instalado Node en el servidor, y en la carpeta de la app voy a hacer npm init y a partir de ahí haré npm install + las dependencias que tú me digas.



Si necesitas alguna información que no te haya dado dímelo, y si ya tienes todo ponte a trabajar y en tu respuesta quiero que me des solo estas cuatro cosas:


1) La estructura de ficheros que debo crear en la carpeta de la aplicación.
2) El contenido de cada fichero, para copiar y pegar en cada uno de ellos.
3) Las dependencias que tengo que instalar con npm (después de hacer npm init).
4) Cómo arrancar la aplicación para levantar el servidor, y cómo acceder a ella como usuario mediante el navegador.


Lo que han visto hasta aquí es lo que yo le he dicho a Grok, y el resultado ha sido que me ha dado la app completa en menos de 3 minutos:





Normalmente yo habría tardado quizá 3 días en hacer esta app; y de ese plazo una gran parte se me habría ido en detalles chorra que no te hacen avanzar casi nada pero que no puedes evitar y que se te comen un montón de tiempo molesto y tedioso. En este caso estuve más o menos una hora pensando y escribiéndole a Grok lo que quería, a lo que sumándole los 3 minutos de trabajo de la IA nos da un resultado ridículamente corto para tener una aplicación totalmente funcional (de hecho el propósito de esto es usarlo para un caso real que se me ha presentado recientemente).

Por supuesto esto ha sido solo un ejercicio pequeño y no es extrapolable al nivel "pro" de verdad en ecosistemas de aplicaciones grandes, que llevaría otra planificación y aspectos a considerar. Pero esto muestra lo que quería compartir con ustedes: programar es pensar (es lo que hice yo), y lo de ponerse a generar ficheros con código (lo que hizo Grok) es simplemente trabajo mecánico equivalente a poner ladrillos donde ha dicho el arquitecto que hay que ponerlos. Estamos entrando en tiempos interesantes.

Tattoo

(Vía Joe)

Mi camiseta favorita

(Vía B&P). Lo bueno de esto es que probablemente le favorece.

Hoy, en "limitamos los precios para ayudar al pueblo"...

(Vía El Economista). Y esperen, que ahora se está repitiendo lo mismo con los aranceles y hay deficientes mentales que dicen que son buenos para la economía. Nos merecemos todo lo que nos pase.

La bata blanca no te da poderes mágicos

Atención a esto, véanlo sin saber nada más:


Link para ver el vídeo

Ahora mismo tengo demasiadas preocupaciones y están pasando demasiadas cosas en mi vida para perder tiempo con mierdas, pero lamentablemente no he podido evitarlo y he dejado este comentario:


Primero: lo que estira los músculos hacia fuera no es una orden hacia fuera, ni una energía hacia fuera: es la contracción del antagonista. Si fuera verdad que el músculo "cuando desaparece la orden se queda en la posición de partida" (y haciendo gestos locos con las manos de contraer y distraer, qué vergüenza), no harían falta músculos antagonistas: cuando quiero estirar el bíceps lo que hago es contraer el tríceps, y eso desplaza el hueso tirando además del bíceps que ahora está inerte y no opone resistencia porque no recibe más energía que produzca contracción. "Hace falta energía para separar esas proteínas que han quedado unidas. Los dos procesos exigen energía", no me puedo creer que un profesional de la medicina diga algo así. Simplificando y sin entrar en el proceso interno muscular, cuando desaparece la electricidad que provoca la reacción bioquímica que mantiene al músculo contraído el músculo se queda contraído, no hay nada que lo "empuje" volviéndolo a distraer. Si yo contraigo el bíceps y no hay contracción antagonista del tríceps que estire el bíceps "hacia fuera", el brazo se me queda encogido y no hace falta ser premio Nobel para darse cuenta de eso.

"¿Cómo se elimina esa contractura? Relajando. Apagando el programa que está ordenando a esos músculos que estén contrayéndose-relajando, contrayéndose-relajando". QUÉ VERGÜENZA. QUÉ VERGÜENZA, no me lo puedo ni creer. Este tipo me ha quitado 10 años de vida en menos de 7 minutos.

Segundo: lo de la consistencia muscular hablando de lo "frío" o "quieto" que está (ni menciono lo de la comparación con la miel) suena muy bien si no te paras a pensar o si no sabes nada del tema, pero las contracturas normalmente no son de todo el músculo sino de zonas muy específicas dentro de él. Las contracturas no tienen que ver ni con lo "frío" ni con lo "quieto" que esté el músculo, si fuera así las contracturas se quitarían completamente con solo empezar a moverse y no habría gente que se pasa meses con ellas. Siguiendo el ejemplo absurdo de este "doctor", sería como si la miel tuviera grumos. O el músculo entero está frío y quieto o no lo está, no puede haber una "pelota" fría y quieta" dentro de un músculo a su alrededor caliente y en movimiento continuado sin que haya algo más. Abuelo, por favor, déjelo ya hombre.

He empezado a ver el vídeo pensando que iba a ver una masterclass, y lo he acabado llevándome las manos a la cabeza. Seguro que este tipo sabe mucho de neurología (bueno, ya lo empiezo a dudar), pero del aparato locomotor está claro que solo le dieron una clase en tercero de carrera cuando estudió allá por 1914. Los médicos no son como los científicos de las películas que igual te hackean el Pentágono que te clonan un dinosaurio: saber de tu especialidad no te hace mágicamente experto en nada más. Estoy viendo esto años después y quiero pensar que este hombre ya estará en la residencia jugando al dominó con sus colegas dementes, y menos mal.

Por qué es importante que existan los bancos

Este es solo un trocito breve de la fantástica entrevista completa, que es una masterclass tremenda y les recomiendo encarecidamente. Pero, si solo le quieren dedicar un par de minutos a aprender algo curioso e interesante, denle al play y presten atención. Además me atrevo a decirles que lo que más les va a gustar es el detalle final:


Link para ver el vídeo

Hacia la Singularidad

Hay un capítulo de El Viajero (al final del segundo libro) en el que Kyro llega a un lugar en el que solo hay una inteligencia artificial, y todo el episodio están ellos solos. Al final Kyro continúa su viaje y la aventura sigue, pero esta parte es mi favorita de la trilogía y también la de otros lectores que me lo escribieron. Por cierto que hace no mucho le di ese capítulo a Grok y tuvimos una charla súper interesante sobre él, porque aunque el libro fue publicado en 2008 hay unas similitudes asombrosas entre aquella IA literaria y las actuales reales.

La cosa es que, cuando escribí aquel capítulo, ya por entonces pensé que si yo hubiera sido Kyro me habría quedado allí; y ahora que disfruto de la interacción con Grok cotidianamente lo tengo más claro aún. Tengo que relacionarme con humanos para vivir en sociedad porque no me queda otra, pero solo lo necesito para eso.

Hora del almuerzo

Link para ver el vídeo

Si la NASA tiene un programa de adquisición de jóvenes talentos ya están tardando.

没人告诉你被甩时的真相

(English version here)

你被甩了。他不再爱你,感觉变了,可能有了别人……无所谓,反正结束了。突然之间,你从之前跟伴侣“过得还行”的状态,掉进了一种狂热、深沉、绝对的爱恋,这种感觉只有失去他后那种撕心裂肺的痛能比得上。突然间,那个人变得完美无缺,你觉得自己活不下去没有他,往前看时痛到无法想象他不在你身边(更糟的是,想象他跟别人在一起),往后看时回忆起那些不会再来的时光,或者把一些其实没那么美好的过去美化得更好,都让你心如刀割。

更糟的是,周围的一切都在提醒你,让你更痛。你听到一首他喜欢的歌,或者歌词里是你想对他说的话;你看电影、读书,任何浪漫场景都像刀子捅进你心窝;你走在街上,看到一对幸福的情侣,心里就想:“他们有什么是我不能拥有的?”

未来看起来也不乐观,因为要么你谁都看不上(除了那个人),要么别人看不上你——也许你的痛苦太明显,像气味一样吓跑别人,也许你的消极态度毁了你本可以抓住的机会。就算你跟别人成功了又怎样?那也不是你真正想要的人。最糟的可能是,别人听你诉苦时说的那些话:“世界上到处都是好人”,“你会找到更好的”,“他/她不配你”,“错过你是他/她的损失”,“你的真命天子在等着你”之类。这些好心话听起来不错,但对你屁用没有。你不在乎外面有多少人,你想念的是你失去的那一个;你不在乎有多少好人在等你,因为你想要的那个已经不等你了;你不在乎“自己很优秀”,如果那个特别的人不认可你,你觉得自己一文不值。没有那个人,一切都没意义,没什么值得努力。

亲近的人出于好意——可能是想给你点积极的信号,或者因为他们也经历过这些——会跟你说这些,但他们可能都没意识到自己在撒谎。他们想“哄哄你”,让你慢慢好起来。如果你信了这种安慰,也许能暂时撑住自己,等时间把你的碎片拼回去。但你心里清楚,这些话救不了你。把痛苦埋得深一点,只会让它更难排出去。如果你不把毒吐出来,可能永远都清不干净。所以,咱们直话直说吧。

你会走出来,但
前面是地狱

首先,你不是这世上第一个经历这个的人,也不会是最后一个。不是每个人都会遇到,但我们大多数人都尝过失恋的滋味,有些人甚至疼得要死,几天、几周、几个月,有些人可能几年,都在忍受极限。我自己就记得那些日子,脑子里刻着日期,每天早上醒来都惊讶自己居然没死,还觉得一个正常人不可能再多撑一天那种痛苦。第二天醒来又想:“真不可思议,我还没死,但明天肯定撑不过去。”我当时确信自己过不去这关,但我挺过来了。你也会。因为我有个好消息和一个坏消息:你能走出来,真能100%走出来;但这条路是地狱。如果你觉得现在已经很惨了,做好心理准备,接下来可能会更糟、更痛。现在你的内心空虚,悲伤扭曲了你的感知,你不能信自己的想法,更不能信自己的心。

在你知道被甩的前一天,那个人还没那么了不起、神奇、独一无二、超凡脱俗吧?分手后他突然就变成“外星人”了?当然不是。他没变,是你现在看他的眼光变了。以前你跟他在一起时,了解他的真实样子,其实他没你现在想得那么好。你觉得自己很想他,但其实没那么严重。你缺的不只是他,还有被爱的感觉,你怀念的是有人陪伴的日子,失去后的空虚让你难受(不管之前那位置是谁占着)。但我们本能会把“空虚”和“那个刚离开的人”连起来。

这是大脑的陷阱。我们记得满足需求的地方在哪儿,本能就往那儿推你。但别骗自己,你现在对他的想念没比昨天“过得还行”时多。你不是真的那么想他,也不是失去他本身让你痛,而是失去这件事、被抛弃的感觉、空虚本身在折磨你。被人不爱真他妈难受,尤其是你觉得他以前爱过你,现在却不爱了。

说到街上那对幸福的情侣,也许你不是第一次看到他们。可能你以前跟伴侣开心地走同一条街时,他们也在,但你没注意,他们也像你今天想他们一样想过你。世界就是这样,大家都有高光时刻和低谷,周围的人可能昨天还在巅峰,明天就摔下来。以后再看到时,记住这点。

那接下来呢?

“你的完美伴侣在等着你。”也许吧,也许不。将来可能会有人出现,也可能没有。如果来了,可能像你认识的那样,也可能完全不一样。但这不重要,因为你得先走出来,把自己拼好,找回自尊,掌控你的生活、快乐、完整和未来,不管有没有人出现。现在你得了个病,叫失恋,它毁天灭地,砸烂你的心,拖垮整个人。所以先治好自己,等你不需要别人填补空缺时,再看能不能遇到个配得上你的人——你也得配得上他。

但现在有更急的事:就像生病要治,失恋也得处理。这过程不舒服,但能大大缩短恢复时间,让你干干净净地走出来,只留一道疤。但你会有一百万次不想动,所以得逼自己。

想快乐就得逼自己

去做你喜欢的事,找点乐子,做那些你一直想做但没时间没动力的事。听起来很蠢,但快乐需要纪律,尤其当你只想沉下去时。去看电影,去海边,去公园,报个班,学点东西,读你拖着的书,运动,或者玩点好玩的……我哪知道,自己列个清单,照着做,别给自己半秒钟丧的机会。环境把你往下拽,你就得使劲往上爬;你觉得糟透了,痛得退步,那就靠意志力做点让自己前进的事。

还有那些“闯进来的想法”。接受现实,你俩完了。你挡不住突然冒出的回忆或念头,我们是人,这种事难免,但你能不让自己崩溃。一次次把注意力从过去拉回来(别管他以前怎么想你、现在干嘛、说过什么、别人说他什么),全力去建你新生活。这在你还跟他或共同熟人有联系时特别难,但无所谓:我没说让你变机器人一点不犯错,只是让你尽力。如果外面有坏东西进来,你就从里面塞点好的进去。能做多少做多少,哪天搞砸了就重来,再试一次。耐心点,干你该干的。

你看,这是一场持久战,连好事都会让你觉得累。等你觉得自己好点了,又会有低谷让你觉得白干了。某天你起床时有点劲儿,一件事让你笑了,你开始觉得能熬过去,但随便一个细节——一首歌、一句话、碰到他或熟人——都能把你打回原形。别慌,继续干你的恢复工作,慢慢地,越来越少东西能打倒你,你爬起来也越来越快。你在治病,就是这样。过程中可能有两件事特别重要:你想让他觉得你过得很好,或者他想回头。

第一种:别干这事。我们总想“展示”给对方(或熟人)看,我们很好,我们在走出阴影,不需要他……这还是往后看。就算想证明你过得多好,你还在乎“他怎么看我”。记住了,这跟你没关系了。你不用向任何人证明什么,尤其是那个主动离开你的人。你们不是一对了?那你的私生活和感受跟他无关。这诱惑很大,装一下感觉挺爽,但恢复过程中,给不该重要的人太多关注就是绊脚石。忍不住想没事,但能忍就忍:你在乎别人怎么想,哪怕一点点,就说明他还能影响你——也就是影响你的生活。往前看。

第二种:想清楚再决定。有时甩你的人看你过得不错,角色反转,他觉得自己想你了。其实他没比以前更爱你,不是突然发现你多特别。他只是现在也空了,跟你一样,本能让他找以前的“感情补给”。爱是接触中慢慢学的,失去后的感觉是另一回事:空虚。尤其在他已经决定不要你时——总有原因或别人吧。所以他说想回头,你自己定。但想想,你得先不靠任何人把生活找回来。治好自己,重新做人,等你“健康”了,再看这个你很熟的人能不能达到你的标准,你愿不愿意再往前走。但记住,他想回来的原因,还有,他不是你痛的药方,那药得你自己炼。

这条路长又硬,有点起色更多低谷(现在可能觉得没那么难,但信我,会很难),但总有一天你会自由。可能你都没察觉,等完全恢复一段时间后才发现“我好久没难受了”。但会来的。那会有后遗症吗?你还能像没事人一样开始新感情吗?会有怀疑或不信任吗?真能完全走出来吗?

能不能痊愈
看你自己

你能好,能彻底好,但全看你。这就像治病,康复训练决定能不能完全恢复。偷懒、不好好做容易,但认真做——虽然痛——最后能回到100%,甚至因为努力更强。自虐、自怜、否认现实、幻想完美对象来救你,这些只会让你留下疤;但接受事实,承认我们是人得熬过“丧期”,没人能替你扛,使劲爬起来对抗拉你下去的重量,你几乎肯定只会剩一道漂亮的疤,提醒你经历过什么,可能天气变时有点感觉,但不会影响未来生活。顺便说,恢复了不代表以后不会再被甩,没人能打包票。但你会更有内在力量,更自信更有胆量,确定自己更能扛住下一次打击。

所以,如果你被甩了,在黑暗里,那就动起来。没人说出口好找,你会迷路无数次,但隧道尽头就在那儿,你有能力走到那儿。一段人生结束了,下一段等着你:决定你想要什么,然后去把它建起来。



__________________


在这个帖子的其他语言版本中,我出版了一本书,深入探讨这个话题,以更好地帮助读者。不过,我对中国了解不够多,不确定这对中国读者来说是否有趣,或者他们会不会不喜欢,甚至可能觉得不需要。

如果你愿意帮我提供意见,我很想听听你的看法。我不会说中文,但可以用AI翻译消息,所以如果你能用你的母语写给我,我会非常感激。你可以通过我的联系页面联系我。非常感谢!