« first day (2531 days earlier)      last day (568 days later) » 

6:12 AM
A las güenas :-)
Asco de Martes :-(
 
6:27 AM
Buenos dias
 
6:42 AM
Kaixo
 
6:54 AM
Oye @MauricioContreras
Güenas :-)
¿ Se puede depurar con el VSCode una página que se está mostrando en Google Chrome ?
 
@Trauma no se con VS Code, pero si que puedes depurar desde el devops el js
 
ya ya, pero se ve muy pequeñito XDD
Da igual, ya lo arreglé
Me faltaba un --variable
 
@Trauma no suelo usar el depurador de VSCode, es muerte lenta.
 
Es que tengo el navegador en la pantalla del portatil, y esa es solo FullHD
 
Me refiero a que consume más recursos que un gobierno corrupto de un país tercer mundista
 
7:08 AM
en un 15"
@MauricioContreras XDDDD
No problem, ya lo corregí. Fué rapidito
 
@Trauma cambia la resolución de pantalla a 150% y fliparas
 
Na, ya no me merece la pena
Es hora de empezar con el curro de verdad ya y parar mis jueguecitos
Me mola hacer las cosas en JS a-pelo, se ve que tengo una vena masoca o algo xD
Tenía puesta la carga de las cosas antes de nada ... y lo estoy modificando para no empezar a cargar hasta tener la configuración del usuario, en caso de haberla en el localStorage
 
@MauricioContreras yo estoy desarrollando para una tablet y cuando lo puse en producción la tenian capada a 200% se veia como el ort*
 
A cambiarlo todo :-)
 
@NicolasOñate jo nunca he visto el ort* a 200%, pero te creo
 
7:18 AM
@MauricioContreras No es agradable XD
 
Se me ha atravesado el català. XD
 
@MauricioContreras ¿ Como saco el puerto local asociado a una conexión en Express ?
jejeje ... si no fueras el experto local en node, no te daría tanto la murga jejeje
 
7:36 AM
@Trauma Te refieres al puerto que tu mismo seteas en app.listen()?
 
no no, al puerto en el que se conecta el cliente
osea, al hacer accept( ), se abre un puerto nuevo en local distinto al de bind( )
quiero saber ese puerto
 
no se que pasa a mi pc hoy, pulso supr y se embolia de tal manera que se me desconectan todos los perifericos
 
@MauricioContreras Bueno, supongo que también me valdría el puerto del remoto
 
@Trauma vale, eso es cosa del módulo http y no de express XD
 
joé, que tiquismiquis estas últimamente
Te empiezas a parecer al Paper jejeje
 
7:42 AM
Vale, creo que tienes cosas en el evento connect. Podrías inspeccionar req.on('connect', callback)
 
Vale, ya está
req.socket.remotePort
o res.socket.remotePort
................ Start Fake Server ................
Original items count: 472 , expanded to 1000 items.
Starting fake server, port 8000
000001 50764 Is a Auth request
000001 50764 Authorization request Ok. Sent it
000002 50765 Verify authorization ...
000002 50765 Verification success !
000002 50765 pageSize 100 page 1
000002 50765 offset  0 limit 100
000002 50765 Will send 100 items, from  0 to 99
000002 50765 Response sent
000003 50768 Verify authorization ...
000003 50768 Verification failled !
 
en todo caso req.socket.remotePort, no?
 
sip
Así también deberíamos poder comprobar si respeta el keep-alive ¿ no ?
 
Verification failled !
 
Si reutiliza el puerto, podemos suponer que está respetándolo
 
7:45 AM
Mucho andalú
 
jejeje
 
Que se note el poderio jejeje
con mucho acento xDD
 
@Trauma bueno, si. Si lo reutiliza es que siempre usa el mismo, es decir, lo respeta. No es promiscuo.
 
pues vamos a hacer una prueba completa
estoy paralelizando en 4 hilos ... debería haber un máximo de 5 puertos en uso
 
7:48 AM
@Trauma oh, qué eficiente
 
Hombre, es la idea
 
Ya te digo yo que no podrías gobernar en el tercer mundo
 
¡ HAHAHAHA !
No me dedico a eso :-)
no, no va bien
se usan mas puertos de la cuenta
¡ Cagóntó !
Uno de los 2 no está respetando el keep-alive
O los 2 :-/
Y ya estamos en el mismo punto en el que lo dejamos ayer
Enga, café + cafeina, a ver si me llega la iluminación
 
¡ HAHAHAHAHA !
Has dado TOTALMENTE en el clavo XDDDD
Esa imagen me la guardo :-)
 
7:53 AM
@Trauma sigo opinando que confundes keep-alive con reutilización de puertos. El keep-alive es para mantener una conexión abierta durnate un tiempo predeterminado, usualmente mayor al default (30 secs, si mal no recuerdo). Por ejemplo, si tienes un proceso muy pesado en back y el cliente debe mantener abierta la conexión esperando una respuesta.
 
Segun tengo entendido, en HTTP 1 por cada request se abria un socket y luego se cerraba. En HTTP 1.1, es opcional usar el keep-alive, con lo que el server no cierra la conexión, sino que espera nuevas peticiones por la misma
 
También se usa para cuando se hacen muchas solicitudes dentro de un mismo documento por causa de enlaces externos. Es decir, si un documento enlaza a 10 recursos diferentes, se reutliza la misma conexión (se mantiene viva) hasta que todos los recursos asociados al documento han sido descargados, esto evita que la carga de un documento termine abriendo 10 conexiones diferentes al servidor.
 
La cabecera Connection, que puede ser closed o keep-alive. En las respuesta del server.
@MauricioContreras Ese es el efecto que yo busco
 
Y todos los recursos son parte de la misma solicitud inicial?
 
@MauricioContreras Mas o menos. El server trabaja por páginas
pero la URL es la misma en todos los casos, solo cambia el body que le envío
pero no quiero abrir-socket->solicitar-pagina->cerrar-socket por cada petición de página
Si son 100 clientes, cada 1 de ellos con 4 hilos ... al pobre server le puede dar algo
con 400 intentos de conexión cada 100 milisegundos
Como programador C++ que soy ... se me pone la carne de gallina solo de pensarlo ...
joé. Café + nicotina, copón
 
7:59 AM
Pues no creo que lo de keep-alive sea lo que necesitas en tu caso de uso. Me parece que lo estás llevando a un nivel para el cual no fue pensado
 
Que me dispersais
 
Buenas ^^. ¿Veis bien este tipo de comentarios? https://es.stackoverflow.com/questions/560301/presentar-una-pantalla-si-un-usuario-est%c3%a1-registrado-y-otra-si-no-est%c3%a1

Ey, ¿Qué tal? Tienes varias preguntas que has realizado y te han respondido, pero no has marcado la respuesta correcta. ¿Qué te parecería hacerlo? De esa forma, fomentas que el buen uso del foro y cumples sus reglas. Y en caso de que las preguntas no satisfagan tu respuesta, quizás podrías aportar algo más de información. Saludos.
 
@MauricioContreras ¿ Alternativas ? No quiero ni que el server ni el cliente me cierren el socket/conexión
 
@Trauma voy pensando, ve a por tu café
 
@MauricioContreras jejeje ... Ok :-D
 
8:01 AM
@Manuel se ve bien, pero mi único comentario sobre tu comentario: Stack Overflow no es un FORO.
 
Um... Eso quiere decir, que es mejor no decirle al usuario ese tipo de cosas?
 
@Manuel no
le puedes comentar como usarlo
y aparte te recomiendo que uses los magic links
 
@Manuel al contrario, tu comentario es 99% acertado. Lamentablemente, para mi gusto (y el de muchos otros), no deberías referirte a Stack Overflow como un FORO
 
Ahhhhhh
Que he puesto foro jajajajaja
¿Y cuál sería la forma correcta de referirme a la web?
@NicolasOñate Gracias. Le daré buen uso!
 
el sitio, Stack Overflow
 
8:04 AM
Perfe. Gracias!!
 
Cuando alguien llama FORO a Stack Overflow:
 
@MauricioContreras justo eso iba a decir XDD el sitio
 
Jajajajajajajajajajaja
 
8:05 AM
Pues entendido entonces. Intentaré evitar esa palabra ;).
A ver si el usuario hace caso. No sé por qué, pero en la categoría de Flutter a la gente le cuesta un huevo marcas preguntas correctas
 
@Manuel la gente no entiende el funcionamiento de el sitio normalmente
ni como funciona la rep ni nada al respecto
 
@NicolasOñate Po' mira que es fácil XD. Preguntas, te responden y seleccionas la correcta. Si es que no tiene más
 
@Manuel hay muchisimos casos de que aparece alguien nuevo, hace una pregunta, le respondes, nunca mas se supo de el
 
@NicolasOñate La próxima vez que necesite preguntar algo, se crea una cuenta nueva XD
 
o que ponen en otra respuesta o comentario, gracias! era justo eso!! y ya lo mismo, no se vuelve a saber
luego estan los estudiantes, que hay cada uno que ...
 
8:10 AM
Recuerdo mi etapa estudiantil, también hacía preguntas que era pa' molerme a palos, todo sea dicho
 
copian y pegan el enunciado y hola rincondelvago
 
Pero bueno, con el tiempo, intento mejorar mi conocimiento sobre el sitio
@NicolasOñate Totalmente
 
@Manuel el sitio
hora de echar humo
 
Va a costar que deje de llamarle foro XD. Gracias por resolver mi duda
Tengo que volver al trabajo ^^
 
@Trauma EStoy leyendo sobre el tema de http, long polling y cosas similares y lo que me queda claro es que una petición solo puede tener una respuesta
 
8:19 AM
@PabloLozano De acuerdo ... pero no quiero que el server me cierre el socket. Ni el cliente, de hecho :-)
Respuesta != cerrar conexión
Voy a depurar el cliente, para asegurarme de que no es él quien cierra el socket
Y ya solo nos quedaría Express como el culpable
 
@Trauma Yo lo que no logro comprender es cómo pretendes mantener la conexión abierta para diferentes solicitudes. No es lo mismo una solicitud de un documento que tiene ditintos enlaces o peticiones, a distintas solicitudes, aunque sean del mismo cliente. Es como pretender navegar entre diferentes páginas usando la misma conexión. No lo veo. Pero no digo que no sea posible, simplemente nunca me había planteado hacerlo.
 
No entiendo porqué no lo ves. El server responde con lo que tenga que responder ... y deja el socket abierto por si llegan mas solicitudes
Es solo eso
copón, que me caduca el token en mitad de las pruebas
 
Vale, el tema es que express está cerrando la conexión cuando haces el res.send() o lo que sea que envías
 
¡ cagóntoloquesemenea !
Es el jodio cliente
 
8:35 AM
17 hours ago, by Mauricio Contreras
@Trauma cliente 100%
@Trauma pásalo 2 veces para que te dure el doble. XD
 
8:58 AM
@Trauma Si sólo se admite una respuesta, una vez que la respuesta ha llegado a su destinto, lo normal es cerrar la conexión
puedes usar long polling para mantenerla abierta, si por ejemplo quieres mandar una misma respuesta a varios clientes, pero http no está planeado para una comunicación constante
Tiene que haber algún truco, ya que streaming hay desde antes de los websockets
algo he leído sobre hacer un flush y que el cliente sea capaz de procesar una respuesta parcial... pero no he encontrado como implementarlo
 
@PabloLozano Ya está, ya lo arreglé. Era el joio cliente
 
por lo que leo lo del keep alive es a nivel de tcp
 
Mejor dicho, era mi código que establecía keep-alive en el cliente a false mas de lo necesario.
 
usar la misma conexión tcp para hacer varias peticiones http
y así ahorrar algunos "ACK" si sabes que vas a hacer varias peticiones seguidas
me estaba yo liando entre conexión http y tcp
:(
 
9:13 AM
Ahora ya va fino. Aquí solo se usan 4 puertos, tal y como está configurado:
000022 51581 Is a Auth request
000022 51581 Authorization request Ok. Sent it
000023 51581 Verify authorization ...
000023 51581 Verification success !
000023 51581 pageSize 1000 page 1
000023 51581 offset  0 limit 1000
000023 51581 Will send 1000 items, from  0 to 999
000023 51581 Response sent
000024 51581 Verify authorization ...
000024 51581 Verification success !
000024 51581 pageSize 1000 page 2
000024 51581 offset  1000 limit 1000
000024 51581 Will send 1000 items, from  1000 to 1999
000024 51581 Response sent
El formato es NumDeLaPeticion PuertoRemoto
Solo se aprecian 4 puertos remotos, aunque se hacen un montón de peticiones
 
mola
 
Sip :-)
Ahora el que mete la pata es el parseado de JSON + convertir a ProtoBuf
Tarda un güebo en hacer su trabajo
Bueno, voy a por nicotina. Que hay código que refactorizar :-(
 
@Trauma bueno, pues ya eso no es culpa de keep alive. XD
 
@MauricioContreras No, es culpa de la librería de parseo de JSON
Bueno, en cierta medida
Que trabaja devolviendo copias de las cosas
 
La otra medida es el programador
 
9:17 AM
Es lo que hay :-(
@MauricioContreras XDDDD
También puede influir, si
pero ese no he sido yo, ha sido el compy jejeje
 
@Trauma el del espejo
 
jejeje ... el de Tenerife ;-p
 
9:32 AM
El compy ha encontrado una forma de que el parser JSON no haga copias de las cadenas cuando el tipo es un STRING
Por ahí podremos rascar algunos milisegundos jejeje
Jo, que bien ha quedado la gestión de las autorizaciones:
000006 51859 Verify authorization ...
000006 51859 Verification success !
000006 51859 pageSize 1000 page 5
000006 51859 offset  4000 limit 1000
000006 51859 Will send 1000 items, from  4000 to 4999
000003 51856 Response sent
000007 51856 Verify authorization ...
000007 51856 Verification failed !
000008 51856 Is a Auth request
000004 51857 Response sent
000005 51858 Response sent
000006 51859 Response sent
000008 51856 Authorization request Ok. Sent it
000009 51856 Verify authorization ...
000009 51856 Verification success !
Si alguna petición devuelve 401, se para todo hasta que tengamos una nueva autorización válida.
No ha sido fácil sincronizar los hilos en ese punto
:-D
Y reaprovechando el mismo socket
 
 
3 hours later…
12:26 PM
Hola! ¿Alguien conoce algun servidor DNS confiable? Creo que me hackearon mi compu y me cambiaron los DNS. ¿Hay alguna manera de configurar el router para que utilize cierto servidor DNS y que no utilize otro? Se que las app de la compu y los celulares pueden utilizar el servidor DNS que se les de la gana, ¿Es posible forzar a que no hagan eso?
 
12:46 PM
Te cambiaron que dns??? ese servicio no te lo brinda tu compu.. o te agregaron hosts por nombre para no ir a buscarlos a dns?
 
12:57 PM
Se puede forzar en la configuración de red qué DNS usar
algunos routers también permiten definir los DNS
puedes usar los de cloudflare o los de Google, por ejemplo
 
@PabloLozano ah en ese sentido si...
pero si se los cambiaron, puede volver a los originales sin problema...
 
en España es típico que los IPS tengan sus propios DNS, para poder bloquear ciertos dominios más fácilmente (muchas páginas de pirateo son bloqueadas por orden judicial tanto por DNS como directamente por IP)
 
te obligan a usar proxys entonces? o vas directamente por sus dns?
 
y si usas algo como pi-hole para quitarte la publicidad, también necesitas configurarlos
@gbianchi Simplemente sus DNS son los que vienen por defecto en sus routers y, al conectar con DHPC, tu PC acaba usándolos
antiguamente te decían que así se resolvía todo más rápido porque esos DNS tenían un ping más bajo al estar en tu red
pero creo que desde que dejamos de usar modems 56K da un poco lo mismo :P
 
@PabloLozano ah ah.. bien...
 
1:32 PM
Yo tengo los dns configurados en el router. El del pihole y el 8.8.8.8
 
Holas
 
@ArcanisGK507 Jellou
 
8.8.8.8 no me gusta sale mejor el 8.8.4.4
que hay de nuevo para hoy???
 
208.67.222.222 · 208.67.220.220
Esos me gustan
@ArcanisGK507 Pues vamos a quitarle las letras P a PHP, para que se llame Lenguaje H. Pero como la H es muda y no suena, nunca será nombrado y por lo tanto no existirá.
 
1:58 PM
@MauricioContreras entonces le diran: el lenguaje que no debe ser nombrado, Quién tú ya sabes, El señor tenebroso, El príncipe de las tinieblas... solo pocos se atreven a pactar textos aplicativos con el .....
 
@ArcanisGK507 exactamente
 
2:20 PM
1
Q: Simulación de ejecución en paralelo con php

ArcanisGK507Agradezco no me sugieran implementar frameworks o librerias de terceros, eso no es lo que busco, no es el objetivo Explicación / Contexto: En lugar de ir llenando el cronjobs de nuevas líneas de comando de ejecución; he diseñado un formulario que me permite guardar en una base de datos, las tare...

 
De que me perdi? Que tiene de malo el PHP?
Digo- el que no debe ser nombrado? XD
 
2:41 PM
le tienen hate por haver pasado 15 años sin innovaciones ...
 
2:55 PM
Aaaaah, claro, sies xD
Siempre se mantuvo estándar
 
 
1 hour later…
4:06 PM
Hola, pero PHP ahora con LiveWire es otra cosa.
Bueno, con el framework Laravel
 
Java con SpringBoot también es otra cosa. XD
 
xD
Entonces no se puede decir que no hubo innovación. Si con el lenguaje se crearon herramientas potentes. :P
 
4:27 PM
La verdad es que si, me eh hecho unas maromas en laravel, que ni les cuento xD
 
@alentin pcibits.com
Hecho en Laravel por este servidor
 
Uchalas pero crack, idolo, maquina, bro
@MauricioContreras Te quedo genial
 
4:59 PM
Yo nunca hablaria mal de Laravel, porque es con lo que hago todos los proyectos y me anda rebien.
Asi que es el que pone el pan en la mesa.
xD
 
5:22 PM
@Fabrizzio por suerte yo hago mi propio pan ... y mi propia mesa y no depende de laravel ...
@Fabrizzio oye si tienes tanta experiencia en laravel: estoy buscando como hacer un sistema de Permisos por botones ... no quiero implementar permisos por roles... alguna sugerencia?
como lo harias en laravel?
 
5:46 PM
Como que permiso por botones?
 
Eso me intriga. Permiso basado en botones.
@ArcanisGK507 puedes explicar un poco más?
 
6:12 PM
buena pregunta aqui para los que le gusta la python ...
0
Q: Problemas para detener la ejecución de un script en python

Luis Gabriel Fabrestengo un script en python, el cual lee primero un archivo dse configuracion json, con una estructura de procesos, grupos, satelites Luego, con esa estructura inicia un ciclo anidado, y levanta en threads independientes observers que miran en carpetas definidas (en el json) por cambios. Hasta ahi ...

por ejemplo un usuario X tiene permiso para:
1 entrar al formulario 155 y usar el boton de guardar ... exclusivamente ese boton y no otros de todo el sistema/formularios...
voy a hacer una extencion para agregar emojis al chat XD
 
6:54 PM
chicos esta pregunta:
0
Q: Asignar una ruta dinámica a la creación de un .txt de PHP con fopen()

Luis Jair Juarez SanchezEstoy generando un archivo txt desde PHP con la sentencia $file = fopen("C:/Users/luisj/Desktop/MAESTRO.txt", "w"); Cuando ejecuto el código se crea sin problema el archivo, porque es la ruta de mi computadora, sin embargo, cuando el código es ejecutado en otra PC, la ruta resulta inaccesible, t...

es una duplicado de esta otra:
0
A: Elegir el directorio de destino del exportar base de datos php

ArcanisGK507Desde php no se puede; pero si puedes forzar a el navegador a mostrar el dialogo de SaveAs cuando intente descargar un archivo: https://stackoverflow.com/a/67806663/17161735 async function handleSaveImg(event){ const image = await new Promise( (res) => canvas.toBlob( res ) ); if( window.showS...

no me deja darle cierre por duplicada a la primera
 
7:49 PM
@ArcanisGK507 pues vota a cierre como duplicada
Ok
Listo @ArcanisGK507 ya puedes votarla
Ojo, estoy confiando en ti
XD
Todo aclarado, es un duplicado
 
8:14 PM
@MauricioContreras yo trate de indagar al usuario sobre el tema ... antes de tomar esa descicion ...
 
 
1 hour later…
9:15 PM
Buenas!
Estudio y desarrollo como self-taught hace 10-11 meses, me considero bastante nuevo y un poco ignorante.
Actualmente me encuentro desarrollando una app de mensajeria, simplemente para agregar a mi portfolio y adquirir experiencia. Esta ideada solo por mi y de la manera en que se me ocurre aplicar lo que aprendo a diario, por lo tanto puedo estar realizando cosas un poco negligentes y no de la manera correcta. En el desarrollo es donde me encuentro con una gran pregunta:
¿Como deberia realizar mi algoritmo la peticion para recibir los mensajes IDEALMENTE?
 
9:29 PM
¿Como deberia realizar mi algoritmo la peticion para recibir los mensajes IDEALMENTE?
donde esta tu diagrama de flujo?
recuerda siempre implementar pruebas unitarias
Un timer cada 5 segundos, que envia http req. esto es lento usa web-socket o algo que sea en tiempo real...
 
@ArcanisGK507 GRACIAS justo eso buscaba, opciones alternativas a eso, muchas gracias!
 
¿Funcionan las aplicaciones reales con timers para realizar esta funcionalidad? no me agradan en lo personal ... si la app esta en back ground o cerrada como haces pa que no deje de funcionar?
 
Claro, tiene mucho sentido
 
¿Funcionan de otra manera mas eficiente, pudiendo identificar cuando se recibe un mensaje y cuando no? ¿De que manera? hay muchas maneras... la mejor opcion hacer una lista y evaluar pro y contras de todas las formas posibles y ver cual es mejor para tu escenario...
noSQL prefiero firebase o mysql in realizar peticiones al servidor en todo caso asi debe de ser e backend es solo para autenticar y enlazar usuarios ... y posiblemente encriptar uno que otro backup si el usuario quiere hace back up en la nuve
entonces por eso desia yo que la marihuana es buena... es mejor que la legalicen si se sabe que el componente psicotropico no hara daño ya que el transgenico de la marihuana lo ha eliminado completamente ...
en cuanto a las pallasitas nifu nifa... eran mis preferidas... tenia sueños humedos con ellas ..
cualquier otra consulta aqui estamos ...
 
@ArcanisGK507 JAJAJAJAJJA como?
Gracias en serio me ayudaste mucho, cuidate! no fumes yerba!
 
9:56 PM
Muy buen contenido
 
la gente sigue odiando mis respuestas:
-1
A: subrayar el texto solo cuando el mouse pase por el texto

ArcanisGK507Dependiendo de tus necesidades puedes tirar de una u otra forma de hacerlo. 1. Con javascript embebido: <p onmouseover="this.style.color='red';" onmouseout="this.style.color='black';">Word1</p> <p onmouseover="this.style.color='green';" onmouseout="this.style.color='black';">Word2</p> <p onmo...

tengo retractores en la comunidad ...
@gbianchi @g3rv4 si tengo una extension que monitore la reputacion de usuarios... y me diga cuando ese usuario pierde un punto de reputacion, es ilegal con respecto a las politicas de SE, SOes?
 
10:13 PM
@ArcanisGK507 La verdad no entiendo por que el voto negativo, no me parece una mala respuesta como para llevarse un negativo xd
 
@alentin gente que come mierda a diario... vota negativo ... pero ya se quienes son ... y son los mismos que tratan mal a los nuevos usuarios o no le dan una bienvenida acorde ...
@alentin votan con resentimiento ... y no con objetividad ...
 
@ArcanisGK507 Uff, suena como un problema serio que tratarse sobre esta comunidad
Lo peor es que si son malas personas, tienen suficientes puntos como para votar quien sabe como x.x
 
@alentin por suerte solo pueden votar una vez
 
Uff, si
 
a mi me da igual los votos... que se los metan por donde les esta doliendo ...
 
10:42 PM
@ArcanisGK507 si la info es publica, lo dudo...
 
11:16 PM
@gbianchi puse un reporte a ver si un CM me contesta...
@gbianchi ya que los Moderadores han indicaro antes que no pueden hacer nada con respecto a votos negativos ...
 
11:32 PM
@ArcanisGK507 como gustes
 
ok gracias
 
11:46 PM
@gbianchi podes re-abrir la publicacion que cerraste erroneamente .
@gbianchi ya no el OP se arto y la borro XD
 
@ArcanisGK507 cual?
 
la borro XD yo pensaba ayudarle
ya se la habia editado y le habia comentado y el habia respondido ...
 
@ArcanisGK507 no se la borre erronamente.. como mucho, le deje un comentario equivocado.. pero la pregunta no decia nada de nada.. y era solo un link...
 

« first day (2531 days earlier)      last day (568 days later) »