Arreglé mi horario de sueño con código
Hace poco tuve que cambiar mi horario de sueño para despertarme más temprano. En el pasado, había hecho el cambio de forma repentina (y sufrí las consecuencias).
La ciencia del sueño recomienda ajustar el horario de forma gradual. Como tenía una fecha límite para adoptar el nuevo horario, creé nemui, una app para planear una transición progresiva.
La interfaz y la experiencia de usuario
Programo mi sueño a través de la app Salud de iOS. Me permite establecer una meta de sueño (las horas que necesito dormir), la hora de acostarme y la hora de despertar.
Quise replicar la interfaz de Apple: tiene un buen diseño y experiencia de usuario, estoy acostumbrado a ella, y me gustaba el desafío. Esto me llevó el 60% del tiempo dedicado al proyecto.
Aquí está el resultado. Prueba a jugar:
No es pixel perfect, pero es casi idéntica a la de Apple. De hecho, ¡es mejor! Puedes hacer click en la hora de dormir y despertar para introducir el número directamente, algo que no puedes hacer en iOS.
Una vez que hayas configurado los horarios actuales y deseados, necesitas elegir la fecha objetivo. La app sugiere un día basado en datos de investigación sobre el sueño (15 minutos de cambio por día), pero puedes modificarlo. Verás una advertencia si el cambio es muy agresivo:


Finalmente, obtienes el plan diario:


Al hacer clic en «Add to calendar» se descarga un archivo de Calendario (.ics) con un evento por día. Estos eventos muestran la hora de dormir y despertar de cada día e incluyen un recordatorio 30 minutos antes de acostarte.
Si vuelves a visitar la web, te mostrará el plan para las próximas noches (todos los datos se guardan localmente).
Le puse el nombre «nemui»: 眠 (dormir) y 移 (transición), que se lee como 眠い (somnoliento) en japonés.
Estaba a punto de dar por terminado el proyecto cuando me acordé del horario de verano (DST).
Horario de verano
Más de un tercio de los países del mundo usa el horario de verano. Tenía que darle soporte, dijo mi perfeccionismo.
Y escuché.
nemui tiene soporte para el horario de verano de dos formas. Primero, si estás ajustando tu horario durante un cambio de hora, te avisa y ajusta las horas:


Segundo —y este es mi favorito—, unos días antes de que empiece el horario de verano, puedes configurar horarios actuales e ideales idénticos para ajustar gradualmente el tiempo (te irás a dormir y despertarás un poco más temprano cada día) y evitar perder una hora de sueño de golpe.
Dar soporte al horario de verano no fue fácil.
Primero, JavaScript vanilla no es muy bueno con las fechas. No soporta zonas horarias y «los cálculos con el horario de verano son notoriamente difíciles de manejar» (Temporal ayudará con esto).
Segundo, el horario de verano es raro.
Los países empiezan/terminan el horario de verano el primer, segundo o último domingo de un mes dado, o el último jueves/viernes. O el viernes antes del último domingo.
Naturalmente, la hora de transición también varía: puede ser a las 00:00, 01, 02, 03… ¡Incluso a las 24:00! (¡gracias, Chile!)
¡Y hay más! Quizás creías que todas las regiones adelantan/retrasan una (1) hora, ¿verdad? Pues no.
Hay un grupo de islas entre Australia y Nueva Zelanda, llamadas Isla Lord Howe, con transiciones de 30 minutos. Así es. El primer domingo de abril a las 02:00, los relojes se atrasan a la 01:30. El cambio se revierte el 5 de octubre.
Aunque menos de 400 personas viven allí, me aseguré de que mi app fuera compatible con este cambio. Tenía que hacerlo.
El veredicto
Me alegra informar que he logrado ajustar mi horario de forma indolora. Mi cuerpo se adaptó al nuevo horario, a diferencia de las veces que lo hice de golpe. Planeo usar nemui de nuevo cuando se acerque el cambio al horario de verano.
Extra: mini-proyecto
Antes de crear nemui, hice una pequeña aplicación web para ver cuándo es el próximo cambio de hora (inspirada por un artefacto de Claude creado por Simon Willison), basada en la zona horaria de tu dispositivo. Aquí tienes una captura de pantalla:


Visita dst.osc.garden para ver cuándo es el próximo cambio de hora en tu zona horaria.