« first day (2530 days earlier)      last day (580 days later) » 

1:18 AM
@ArcanisGK507 borre un comentario de esos automaticos tuyos porque no tenia nada que ver con la pregunta.. Op tenia problemas al subir un proyecto a git.. tu mensaje le pedia codigo, un mvc y le decia que las imagenes debian ser texto... nada que ver con la pregunta :(
 
 
1 hour later…
2:43 AM
ok
 
 
4 hours later…
6:46 AM
0
Q: Usuarios nuevos con frecuencia copian enunciados completos de trabajos de clase

Mauricio OrtegaCon frecuencia he visto "preguntas" de usuarios nuevos que se limitan a publicar el que evidentemente es un enunciado combpleto de un ejercicio de aprendizaje en clase. Personalmente me parece una práctica grosera por parte de usuarios que, evidentemente, no tienen el más absoluto interes de apre...

 
A las güenas :-)
Asco de Lunes :-(
 
7:16 AM
Egun on a todes
XD
El lenguaje de los ordenadores me ofende, me encasilla en un tipo binario. Eres 0 o eres 1. No me deja ser algo diferente.
 
@MauricioContreras prueba el lenguaje cuántico, asi puedes ser los dos a la vez
buenas
 
Gallines violades
@NicolasOñate mejor ponerle lenguaje S por Schrödinger, y el logotipo: una letra S en una caja (o no)
@NicolasOñate además, si es tan inclusive, mejor llamarle lenguaje cuantique
 
7:31 AM
@MauricioContreras XDD
@MauricioContreras no me mezcles las estupideces con la fisica :P
 
@NicolasOñate no es física, es ciencias veterinarias. Schrödinger es el padre la veterinaria moderna y de paso el inventor del Kettle
 
 
3 hours later…
10:33 AM
@MauricioContreras ¿ Estás y tienes un segundo ? No me verifica el JWT que yo mismo creo :-/
Así genero el Token:
    const token = JWT.sign( { data: 'dummy' }, App.get( 'jwtKey' ), {
        expiresIn: JWT_EXPIRES_SECS
    } );

    setTimeout( function( ) {
        console.log( req.reqId, 'Authorization request Ok. Sent it' );
        res.status( 200 ).json( token );
    }, randomBetween( AUTH_MIN_WAIT_SECS, AUTH_MAX_WAIT_SECS ) * 1000 );
El timeout en la respuesta es para simular un server de verdad, que puede estar mas o menos cargado
Y así lo verifico:
    const authHeader = req.get( 'Authorization' );
    var authPayload = false;

    if( !authHeader ) {
        console.error( req.reqId, 'Absent <Authorization> header' );
        res.status( 401 ).end( 'Absent <Authorization> header' );
        next( );

        return;
    } else if( !authHeader.startsWith( 'Bearer ' ) ) {
        console.error( req.reqId, 'Incorrect <Authorization> header value' );
        res.status( 401 ).end( 'Incorrect <Authorization> header value' );
        next( );
Siempre se queda en el Verification failled !, no hay cajones de pasar de ahí :'-(
 
@Trauma hey
 
Asco de Lunes :-(
 
Porqué haces estas cosas tan raras? XD
 
¿ Cosas raras ?
Es un server de-pega, para simular el de verdad
para ver como se comporta el cliente en C++
Es una simple api REST, y un generador de JWT
Antes usamos uno en python, pero no podemos descargar cosas con PIP y de serie no soporta peticiones HTTP concurrentes
Por eso lo he cambiado a node
Bueno, voy a por nicotina y a la vuelta formulo una pregunta en el sitio
Asco de Lunes ... :-(
 
Y cuál es el error? Al verificar?
 
10:44 AM
sip, entra en el catch
mensaje: invalid token xDD
eso dice la excepción. Muy descriptivo
Lo que me mosquea es lo que me llega en el header
 
Esto, es muy rebuscado: authHeader.slice( 7 ), pero bueno, debe funcionar. Has depurado que eso te devuelve el Token completo?
 
Y ese es el problema
XD
Solucionado
 
@MauricioContreras ¿ Que te parece ese header ? ¿ No se ve rara ?
 
Claro
Eso está mal
 
10:46 AM
¿ Esas comillas de mas, verdad ?
 
Sobran las comillas
 
jejeje
pues ahora vas a flipar
El server real, el que está en producción, se lo traga sin problemas XDDDD
 
Porque no hace un SLICE
 
P'a mear y no echar gota jejeje
 
10:47 AM
¿¿ ??
¿ Y que hace entonces ? Está hecho en node también
 
Debe tener otro método para parsear la cabecera
 
¿ Pruebo a pasarle todo el header a JWT.verify( ) ?
Igual se lo traga
 
const token = authHeader.split(' ')[1];
 
ok, pruebo
 
El split de toa la vida
 
10:49 AM
llevo meses sin tocar node, no esperes demasiado
 
@Trauma excusas, excusas
 
XDDD
Sigue fallando ... voy a probar sin las comillas ...
const token = authHeader.split( '"' )[1];
a ver si con eso ...
¡¡ Se lo tragó !!
Son las joias comillas :-(
Eso es culpa del cliente C++
 
Pero si tiene comillas al final el token estaría mal
No
Me retracto
Las quita
 
Las tiene al principio y al final
 
Pues eso, en realidad no hay un estándard pero yo nunca le he metido comillas al token
 
10:53 AM
voy a quitarlas en el cliente C++ y vuelvo a probar
¿ Pero tiene que tenerlas ?
al JWT no le gustan
Bueno, primero nicotina. No todo va a ser currar
¡ Gracias @MauricioContreras !
Te debo otra :-)
 
No hay nada claro en la spec, pero el token en principio no lleva comillas, no son parte de los caracteres permitidos
 
El que programó el cliente en C++, que se columpió con ello ...
¡ Anda, si fui yo !
 
:-O
Queda claro pues: sin las comillas
 
Si no pone comillas, significa que no las lleva. Es la documentación oficial de JWT.io
 
10:55 AM
Ok
 
Pues nada, a buscar donde carajo se ponen
Creo que era en la capa de network
... creo ...
 
@Trauma pero si el servidor hace un split('"'), al quitrarlas en el cliente vas a romper el servidor. No? Es decir, si el servidor espera las comillas, entonces habrá que dejarlas. Pero bueno, ya eso lo sabrán manejar ustedes, mientras, voy abriendo cuenta en otro banco. XD
 
@MauricioContreras Si la doc oficial de JWT.io dice sin comillas ... pues entonces irá sin comillas
Si se rompe el server ... eso es problema de otro jejeje
... cagóntó ... ¿¿ Donde carajo establecía yo el JWT ??
Que no doy con ello
Ah copón, ya lo vi O-O
¡ Otia !
El error no está en la parte C++
Está en el fake-server este de pega
res.status( 200 ).json( token );
Estoy enviando el token generado como un JSON
y como es una cadena, lo mete entre comillas
XDDDD
jejeje ... ya está
¡ Mandagüebos !
 
 
1 hour later…
12:32 PM
jelou
@MauricioContreras Mi avión de ida a Barna, que salía en teoría a las 7.30 de la tarde, acabó despegando a las 12.30am :(
 
@PabloLozano Buff, Vueling? RyanAir?
 
llegué reventado y al siguiente día tras el trabajo me fui al hotel directo a descansar
Vueling
problema tecnico, no dijeron cuál
pero la idea de llegar la noche antes para llegar descansado a la oficina, evitando el madrugón... falló espectacularmente
 
@PabloLozano típico de esas aerolineas
@PabloLozano ya, te entiendo. Ahora andas adormilado todo el día.
 
 
2 hours later…
2:34 PM
Oye @MauricioContreras ¿ Como puedo detectar cuando un cliente cierra la conexión con Express ?
 
2:57 PM
@Trauma hey
@Trauma de la misma forma que se detecta cuando un cliente cierra una conexión http
Creo que ese evento está disponible en NodeJS v12 y superior.
Pues no, es de Node v0.5.4 en adelante
Supongo que eso es lo que quieres
En express tendrías que añadir un handler a ese evento, por ejemplo:
req.on("close", function() {
  // cliente ha cerrado conexión
});
 
@MauricioContreras Ok, he acertado entonces :-)
Pero me hace cosas raras ... saca la traza de conexción cerrada en cada petición
000194 Connection closed
000195 Is a Data request
000195 Verify authorization ...
000195 Verification success !
000195 pageSize 100 page 12
000195 offset  1100 limit 100
000195 Will send 100 items, from  1100 to 1199
000195 Response sent
000195 Connection closed
000196 Is a Data request
 
app.post('/trauma', (req, res) => {
  req.on("close", function() {
    console.log('Trauma ha dejado el edificio');
    return;
  });
  // .. no se ha ido y sigue siendo un día asqueroso.
})
 
El cliente tiene un método para establecer el keep-alive, y lo estoy llamando.
@MauricioContreras jejeje
@MauricioContreras Va, no seas cafre y échame una mano con el joio keep-alive este de las narices
Así me conecto al evento:
App.keepAliveTimeout = 30 * 1000;
App.use( function( req, res, next ) {
    req.reqId = Seq.next( );
    req.on( 'close', function( ) {
        console.log( req.reqId, 'Connection closed' );
    } );

    next( );
} );
En un midleware que va al principio de todo
Y me saca la traza en cada petición, aunque no las estoy terminando con el end( ):
 
Y al cerrarse la conexión qué debe pasar? porque igual se está ejecutando next
 
No quiero que se cierre, quiero que la mantenga abierta
Ahora mismo estoy probando con secuencias de 200 peticiones
y me sale la traza en cada una de las 200
 
3:10 PM
@Trauma pero es que eso no depende de ti, depende de cualquier cosa. Tu pregunta fue: cómo detecto que el cliente ha cerrado conexión. Pues esa es la forma. Eso no tiene nada que ver con: mi proceso es muy largo y necesito un keep-alive alto
 
Voy a poner una traza para ver si el cliente manda el keep-alive, porsiaca
@MauricioContreras ya ya ... la pregunta ya la auto-resolví, y hemos pasado a la siguiente
ya puedo ver cuando cierra ... y no me gusta lo que veo
 
Voy a revisar cómo lo solucioné en un servidor que tengo. Dame un segundo
 
Y dos :-)
Pues la cabecera Connection: keep-alive está puesta:
000196 Connection closed
000197 Is a Data request (keep-alive)
000197 Verify authorization ...
000197 Verification success !
000197 pageSize 100 page 10
000197 offset  900 limit 100
000197 Will send 100 items, from  900 to 999
000197 Response sent
000197 Connection closed
000198 Is a Data request (keep-alive)
 
A ver, deseas usar la misma conexión?
Eso es algo diferente a keep-alive
 
Sip
Quiero encadenar las request sin que me cierre el socket
¿ no es eso keep-alive a nivel HTTP ?
O-O
 
3:19 PM
Cómo está creando el cliente la conexión keep-alive?
 
pongo a mano la cabecera Connection: keep-alive
y uso la API del cliente, setKeepAlive( true )
las 2 cosas
soy desconfiado :-/
Voy a poner una traza en el cliente, donde cierra el socket
es una librería de GitHub que habla HTTP ... a ver si lo está cerrando él por su cuenta ...
 
necesitas dos headers, creo
 
Me pillas. Según la Wikipedia, es 1 solo
Ahora mismo estamos sin SSL, pero cuando se le añada ... si hay que hacer el handsake en cada petición ... pues no veas
 
Necesitas decirle el timeout y la cantidad máxima de solicitudes aceptadas, aunque este último parámetro dependerá de si el protocolo permite el pipeline en la conexión (supongo que si, estarás hablando HTTP/1.1 al menos).
 
Sipe, HTTP/1.1
 
3:28 PM
Yo no tengo nada especial en mi servidor, sólo esto: headers.add('Connection', 'keep-alive')
 
¿ Lo pones tu a mano ? O-O
Voy a probar
 
var server = app.listen(5001);
server.keepAliveTimeout = 30 * 1000;
server.headersTimeout = 35 * 1000;
 
El cliente hace peticiones para saber el estado de la tarea cada n segundos
 
Voy a probar. lo de keepAliveTimeout ya lo tenía puesto
 
@Trauma pues si. Es un backend en Pyhton, pero en Express es igualito, excepto por el nombre del método.
 
3:30 PM
Pues vaya churro, ¿ no ?
enga, a probar
 
y un websocket?
 
res.set('Connection', 'keep-alive');
 
res.set( { Connection: 'keep-alive' } ).status( 200 ).json( {
    metaData: {
        jsonSchema: DataFile.metaData.jsonSchema,
        totalPages: Math.ceil( JSONDataList.length / req.body.pageSize ),
        invalidCount: 0,
        pageSize: responseList.length,
        errorCode: null,
        page: req.body.page,
        totalCount: JSONDataList.length,
        validationStatus: 'VALID'
    },
    jsonDataList: responseList
} );
@PabloLozano No puedo, tiene que ser HTTP corriente y moliente
 
@Trauma y maloliente
 
Pues sigue igual :-(
Ah, que he quitado la cabecera del cliente, copón :-(
 
3:34 PM
Prueba esto:
Connection: Keep-Alive
Keep-Alive: timeout=60, max=1000
 
¿ En el server o en el cliente ?
 
Ok
probando ...
Nada, que no quiere:
000195 Connection closed
000196 Is a Data request (keep-alive)
000196 Verify authorization ...
000196 Verification success !
000196 pageSize 100 page 11
000196 offset  1000 limit 100
000196 Will send 100 items, from  1000 to 1099
000196 Response sent
000196 Connection closed
000197 Is a Data request (keep-alive)
000197 Verify authorization ...
000197 Verification success !
000197 pageSize 100 page 9
000197 offset  800 limit 100
000197 Will send 100 items, from  800 to 899
000197 Response sent
000197 Connection closed
Pues ya le van a dar por hoy, ya si eso mañana
joer, si tuviera un WireShark, podría saber quién de los 2 me está cerrando la conexión
No se si es el cliente o el server el que la está cerrando :-(
 
@Trauma cliente 100%
 
He ojeado un poco su código, y parece que hace caso de su propio flag keep_alive_
  auto close_connection = !keep_alive_;
  auto ret = process_socket(socket_, [&](Stream &strm) {
    return handle_request(strm, req, res, close_connection, error);
  });

  // Briefly lock mutex in order to mark that a request is no longer ongoing
  {
    std::lock_guard<std::mutex> guard(socket_mutex_);
    socket_requests_in_flight_ -= 1;
    if (socket_requests_in_flight_ <= 0) {
      assert(socket_requests_in_flight_ == 0);
      socket_requests_are_from_thread_ = std::thread::id();
    }
 
3:40 PM
Pero si no estoy errado, el evento es ambiguo
 
¿ Evento ambiguo ?
el close de node ?
 
Si
'close': Indicates that the request is completed, or its underlying connection was terminated prematurely (before the response completion).
the request is completed. No te jode?
 
pufffff
osea, lo envia si hay algún error, o si no ha pasado nada
chachi
 
close no es ambiguo: la conexión se ha cerrado
 
Qué versión de Node usas?
 
3:41 PM
otra cosa es el motivo :P
 
la última estable, 16.17.1
Señores, muchas gracias, pero por hoy se va a quedar ahí
 
@Trauma jejeje
 
toy taloscajones ya hoy
Ya si eso mañana. Total, dudo que el cliente entre en estos detalles
Y si entra ... pues ya veremos :-)
 
 
1 hour later…
4:58 PM
Hola
 
Saben si hay algo como esto pero para matemáticas?
 
@BALBINOSOBREVIELAJIMÉNEZ si claro, pero en inglés
 
5:22 PM
ha alguien no le gustan mis prespuestas:
-2
A: Como Unir 2 campo contenidos en un solo JSON con PHP

ArcanisGK507lo primero que se me ocurre es iterar el nodo de CategorieName sobre asignacion del valor de Categories en un nuevo array: <?php $array = [ "Categories"=> [ "902378", "902379", "7081", "7082", "7083", "7084", "7085", "7086", "7087", "7088", "902373",...

 
 
1 hour later…
6:42 PM
@ArcanisGK507 igual la pregunta fue cerrada. Tu respuesta es buena, pero la pregunta mala. Ni modo
 
 
1 hour later…
8:09 PM
@MauricioContreras suele pasar
 
 
1 hour later…
9:34 PM
personalmente creo y pienso que debe ser decicion de la comunidad que hacer: Cerar la pregunta, darle comentarios, un buen samaritano que resuelva la tarea sin mas y orientarlo sobre el uso de este sitio... todo esto es correcto transmitirlo al usuario ... recordemos que del otro lado hay un ser humano que puede estar neceistando ayuda ... con el tiempo nos percataremos si es un abusador, sinverguenza o alguien interesado en aprender y contribuir a este sitio. — ArcanisGK507 9 mins ago
 
9:55 PM
@abulafia Muchas gracias Abulafia! Finalamente preferi me deshacer de eso con pd.to_numeric(df_bdc['siren'], errors='coerce').notnull(). No es increible pero prefieria la rapidez a la precisión
Sin embargo, sigo intentando convertir esta columna en un int con df_bdc['siren'].astype('int64') pero parece que tengo números demasiado grandes: ValueError: invalid literal for int() with base 10: '6.8622E+0'
 

« first day (2530 days earlier)      last day (580 days later) »