« first day (2222 days earlier)      last day (60 days later) » 
00:00 - 11:0011:00 - 23:00

12:17 AM
@DanielBriceño Estaría bueno que pongas un snippet con el completo, así se puede probar en el navegador.
 
12:48 AM
Un nomento que creo que dí con la solucion. @ArtEze
Vaaaaa, esta pc se cuelga de nada.
@Christian Ya lo resolví.
 
1:25 AM
@DanielBriceño Bien, entonces podrías poner la respuesta.
Mi computadora igual, no es muy potente.
 
1:39 AM
@gbianchi La edición que hicieron a esa pregunta invalida mi respuesta... cual es la gracia ???
 
 
1 hour later…
2:40 AM
@ArtEze No creo que sea
mas lenta que la mia, mira la hora que me respondiste y mira la hora de este mensage.
Con la PC solo pude hacer en ese tiempo: actualizar mi codigo en github, abrir stack overflow es y actualizar la pregunta(Pero al actualizarla se colgó de tal manera que ya no quiere reaccionar la PC y no pienso volver a actualizar la pregunta).
@gbianchi @Pikoh Antes de publicar esto en meta ¿Que opinan?
¿Que tal si dejamos un sitio aparte para guardar el codigo completo si es demasiado largo?
Actualizando la pregunta para que el codigo se quede en stack overflow( Asi como me aconsejaron) me escedí los 3000 caracteres.
Pero ¿Porque no simplemente poner el enlace de github? Es simple: Puede que el enlace se rompa, puede que se caiga el servidor(Siendo github lo veo muy improvable), puede que el codigo en github se actualize(lo mas probable) eliminando la reproduccion del problema volviendolo inservible para la pregunta.
Al estar en stack overflow y no en un repositioreo personal veo muy improvable que el codigo se actualize, al estar en los servidores de Stack Overflow si hay una falla se perdera la pregunta ocacionando que el codigo tambien se pierda(Por lo que no importa si el servidor se cae).
8 mins ago, by Daniel Briceño
¿Que tal si dejamos un sitio aparte para guardar el codigo completo si es demasiado largo?
Asi como en las imagenes.
 
3:08 AM
@DanielBriceño Si el codigo es largo, entonces no es un mcve y entonces no es correcto...
@Arcanis-TheOmnipotent no entiendo como invalida tu respuesta...
 
@DanielBriceño Hay un truco que es quitar los cuatro espacios al código y poner triple tilde invertida. ```cs
 
@gbianchi veo que ya se discutio.
@ArtEze Siempre lo uso.
 
si tu codigo para que reproduzca tu problema son mas de 30000 caracteres, me da que pensar....
 
Hay veces que necesito poner logs, que tienen muchas líneas, y por eso me salgo de los 30 mil.
 
@gbianchi no es tanto de la reproduccion del problema, es mas provar la solucion.
 
3:19 AM
@ArtEze si estas poniendo 30000 lineas de log, y no te tomaste el trabajo de leer y extraer solo la parte que importa al problema, entonces menos el resto del mundo
@DanielBriceño la solucion tampoco pueden ser mas de 30000 caracteres, porque entonces es un programa completo...
entienden el concepto de mcve?
 
Acabo de leerlo.
Minimo codigo verificable.
 
exacto.. un codigo minimo que reproduzca tu problema...
 
@gbianchi Entiendo... ¿Pero en ese caso habría que quitarle líneas al log?
 
@ArtEze Depende, la mayoria de los log pueden ser causados por print y la ultima puede ser causado por el compilador, interprete, gdb, etc...
 
@ArtEze y si.. tu log debe tener miles de lineas que no tienen nada que ver con el problema...
 
3:25 AM
@gbianchi Lo tendré en cuenta.
 
Por ejemplo, a veces tienen problemas con una funcion en php, y agregan el html completo, el css y miles de cosas mas, que no hacen el problema....
para que agregar el css por ejemplo con un problema en php?
 
@DanielBriceño Yo usaba bastante el GDB, en general superaba las 100 mil líneas.
 
tienen que aprender primero a identificar la fuente del problema (o intentar hacerlo, no quiere decir que no pueda faltar algo mas)
 
@ArtEze XD
Ya me retiro, hasta la proxima.
 
@DanielBriceño Adiós.
@gbianchi Cierto, no tiene sentido en PHP.
 
3:31 AM
@gbianchi Si estuviera fuera prohibido al menos habría un cartel diciendo: "Esta pregunta la realizó tu antigua cuenta, no puedes votarla"
@gbianchi solicitud de un feature para prevenir votar a una cuenta que fue borrada ...
 
@Arcanis-TheOmnipotent Fue una idea que tuve, que no la veo mal.
En realidad los desarrolladores, tendrían que haber pensado antes en eso, no sé si no lo hicieron porque no se les ocurrió, o falta de tiempo, no tengo idea.
 
la pregunta estuvo bien todo el tiempo.. la respuesta estuvo bien todo el tiempo...
si quieren jugar a tachar cosas y reportar pavadas ok...
pero traten de no vandalizar sus publicaciones...
 
@gbianchi Coincido en eso.
 
Meta es para discutir.. pero cambiar las publicaciones a cada rato, no esta bien.. ni en preguntas ni en respuestas...
 
@Arcanis-TheOmnipotent No lo estaba pidiendo, solo era una idea, no estoy exigiendo que se ponga el cartelito.
 
3:38 AM
asi que todos tomen aire.. piensen seriamente que aca hay gente que se toma las cosas en serio, y no es un juguete... de nadie....
 
@gbianchi Bueno, eso se intenta.
 
bueno, vandalizando cosas no lo parece
 
@Arcanis-TheOmnipotent Si se te ocurre mejorar tu respuesta, me parecería bien.
Me parece bien el bloqueo, hay que tomarse un tiempo.
 
4:43 AM
@gbianchi la pregunta original fue bien recibida .. y se le dio respuesta y la respuesta fue marcada como resuelta ... luego se hicieron 3 ediciones agregando nuevos contexto y solicitando un banner ... para mi eso es vandalizar una pregunta debe tener un solo objetivo no multiples, fue lo primero que comente...
@gbianchi yo no hubiere respondido nada en ese caso ... y es una perdida de tiempo para los que responden y atienden las preguntas ... y @gbianchi estas patrocinándolo ... no se con que objetivo ...
 
0
Q: ¿Cómo reportar una edición?

Eduardo JiménezEn esta pregunta La función cin no me la ejecuta correctamente (C++) se corrigió el código, básicamente se corrigió el error que era un espacio de más y ahora la pregunta no tiene sentido. ¿Cómo reportar esa edición?

 
4:55 AM
@Arcanis-TheOmnipotent Lo del banner no es muy importante, lo puedo quitar.
Al menos me alegra saber que la pregunta se entendió.
 
5:19 AM
@ArtEze como te decía yo entendí bien la pregunta inicial y lo primero que te dije fue un POST por pregunta si quieres pedir un banner basado en el post crea otro post ...
 
@Arcanis-TheOmnipotent No lo estoy pidiendo en realidad, fue algo que se me ocurrió. Aunque, sí, estaría bien en otra pregunta.
@Arcanis-TheOmnipotent Es verdad, puse más de una temática, pero venían relacionadas. Quizás debí separarlas para que no se hiciera complicada la respuesta.
Si pusiera todo lo que pienso en la pregunta se haría larguísimo.
Ese tipo de solicitudes van en el sitio en inglés, y tendría que traducir todo.
 
5:42 AM
feh Es un visor de imágenes ligero dirigido principalmente a usuarios de interfaces de línea de comandos.[3]​[4]​[5]​ A diferencia de la mayoría de visores de imágenes, feh no tiene cualquier elemento de control gráfico, además del nombre de archivo opcional, también es usado para mostrar imágenes de fondo en sistemas que ejecutan el sistema de ventana X . feh ofrece cuatro modos diferentes de operación, que pueden ser controlados mediante parámetros en línea de comandos: diapositivas, miniaturas de imágenes, listas, y ventanas múltiples. == Referencias ==
 
6:18 AM
@Trauma ¿Enfermito que aún no aparece=
 
A las güenas :-)
Asco de Lunes :-(
Para quien no lo sepa, empiezo a currar a las 08:00. No queráis que empiece antes :-/
@CandidMoe Creo que la versión 1.0 ya está lista.
Nótese el creo
Me ha costado un pelín mas de lo previsto desacoplar las colas internas :-/
 
7:10 AM
@Trauma Eso se siente bien.
 
@CandidMoe Pues ha sido un dolor :-(
Acoplar el código asíncrono del hilo principal con la asíncronia de la I/O y la cola de hilos :-(
 
Pero la satisfacción de terminar con el desorden y producir un código más limpio, algo que se pueda exhibir con orgullo.
 
@CandidMoe Eso siempre :-)
Estoy pensando en la versión 2.0
Ahora mismo, el proceso de imagen, obtener un ID de la base de datos, y guardar la imagen resultante, es todo una misma tarea, que se ejecuta como un todo
 
@Trauma ¿Y vas a dividirlo en partes?
 
Habría que desacoplar eso, obteniendo un conjunto de ID disponibles de la BBDD, ir consumiendo de ahí, y realizando el guardado del archivo en un hilo aparte :-)
PERO... eso implica cambios gordos en el cliente :-)
Dejaría de ser secuencial/lineal para tener que enviar y recibir a la vez
 
7:15 AM
No pierdas de vista el objetivo. Tienes que tener algo ultraprobado y depurado para ¿cuando?
 
Ya he visto como hacer bulk inserts en SQLite, así que como posible, es :-)
@CandidMoe En principio no hay fecha, pero hoy les mandaré un correo con el estado actual y si les parece que haga los cambios que digo
 
¿No sería mejor demostrar lo que hay?
 
Considero esos cambios ... un reto interesante :-)
@CandidMoe Si si. Ya te digo que hoy les mandaré un correo
 
Todo lo que deseas sería pan comido con asyncio. Si quieres retos interesantes, ahi tienes.
 
@CandidMoe jejeje ... te reto a hacerlo con callbacks, a la antigua :-)
Y aun hay muchas mejoras posibles ... por ejemplo, la cola de UPLOADS completados va por tamaño, cuando podría ser calculando el coste pendiente de realizar
Calculando el coste de procesar una imagen segun su tamaño/tiempo de procesado al iniciar el server
 
7:22 AM
@Trauma Primero tienes que demostrar que tamaño y tiempo no están correlacionados.
Salvo casos patológicos, tamaño implica tiempo.
 
@CandidMoe Si lo están, pero esa relación depende de la CPU
pero al iniciar, se puede obtener lo que tarda en procesar una imagen de prueba
y obtener la relación de ahí
con lo cual, la cola de imagenes ya UPLOAD puede ajustarse al coste estimado de cada imagen
con la idea de que SIEMPRE haya imagenes listas para ser procesadas y la CPU no quede ociosa
 
@Trauma Yo iria calculando esos parámetros en base a lo procesado, ajustandolo en tiempo real.
 
Ahora mismo tengo precargadas el doble de hilos de la CPU. Una CPU de 4 núcleos, tiene una cola de imágenes lista para procesar == 8
 
Hay que ver que quiere el cliente.
 
@CandidMoe También sería posible :-)
@CandidMoe ... jejeje ... veo que nos entendemos :-)
 
7:25 AM
Si son imagenes de cámaras de seguridad, no esperaría variaciones de tamaño.
 
@CandidMoe Bueno, eso ya sería un uso ajustado a un caso concreto. Pero la idea general seguiría siendo válida, se puede ajustar en tiempo real
 
Y ver los casos de uso, la frecuencia de uso, la cantidad y tamaño de archivos, local/remoto, control de ancho de banda, etc.
 
@CandidMoe También se puede ... pero eso ya complica el código una burrada xDD
Aunque lo pensé también :-)
 
Digo que son preguntas que hacer; ver el ambiente donde hay que ejecutar, etc.
 
@CandidMoe Ah, Ok. Si, claro :-)
 
7:28 AM
No tiene sentido preocuparse por la CPU cuando la límitante es la velocidad del enlace.
 
Ahora mismo tengo 2 + 1 colas: cola de archivos pendientes de subir, cola de archivos subidos. + la cola interna de libuv para su pool de hilos
los archivos subidos y el pool, los mantengo (o intento mantener) al doble de núcleos de la CPU
Según se van realizando trabajos, voy autorizando nuevas subidas desde los clientes
y todo eso CON CALLBACKS XDDD
 
Buenos dias gentes
por si te interesa
 
@Pikoh Pues vale ;-p
 
@Trauma No suena como un producto fácil de entender o mantener. Me parece sobreingenieria.
 
@CandidMoe En realidad es relativamente sencillo :-)
Un NetManager y un Crupier, conectados por Signal/Slot
Lo mas jodio es el cálculo de las autorizaciones de subidas y tal
void Crupier::onSync( ) noexcept {
    LOG_DEBUG( ) << "Procesando tareas pendientes";

    auto limit = m_readyToUploadQueue.size( );
    for( Unsigned idx = 0; idx < limit; ++idx ) {
        auto work = m_readyToUploadQueue.front( );
        m_readyToUploadQueue.pop( );

        assert( work );
        assert( work->crupier( ) );
        auto baseClient = work->baseClient( );
        assert( baseClient );

        if( !baseClient->userData( ) ) {
            // El cliente fue cancelado.
            --idx;
Ese es EL MEOLLO del asunto
Todo lo demás, no hay que tocarlo para hacer todo eso que estamos hablando.
 
7:38 AM
@Pikoh Se ve interesante; lo voy a mirar.
@Trauma En el cliente Python tenemos un productor (lista archivos) y varios consumidores(suben archivos). El productor pone nombre de archivo en una cola, los consumidores van sacando de ahi y subiendo los archivos. No hay ningún tipo de control o coordinación, y por el informe ves que la carga se reparte bien entre consumidores.
 
@CandidMoe Y aquí los clientes se van encolando por orden de llega y autorizando según ese mismo orden
 
Mi política es implementar lo mínimo necesario, ver como funciona en la práctica, y luego mejorar donde haga falta.
 
Claro, asyncio hace ese meollo por tí
Y yo lo he implementado a mano
 
@Trauma ¿Por qué "autorizar"?
 
@CandidMoe RAM. No los dejo subir mientras tenga suficientes imágenes ya cargadas para que el procesado de imágenes no pare
 
7:44 AM
@Trauma Ese es el punto. Estás reinventando la rueda.
 
@CandidMoe Es lo que me han pedido, hacer esto :-)
Y hecho está :-)
 
@Trauma Si, está bien. Hay un producto que funciona, bien escrito, eficiente.
 
@CandidMoe jejeje ... eso espero, que funcione :-)
Hoy le haré las pruebas finales, por si me he dejado algo sin tener en cuenta
Se me van a ir 2 horas solo en documentar como funciona esto xDD
 
@Trauma Y, ¿todo esto es un puro ejercicio académico, cierto? ¿No es parte de un producto real?
 
@CandidMoe Es una prueba técnica para acceder a un curro
Pero ya te digo yo que con poco mas tienes un producto :-(
Vamos, se han pasado 3 pueblos :-/
 
8:11 AM
Oh, µm
 
8:24 AM
jelou
@Trauma Yo ya descarto cualquier curro en el que me pidan una prueba técnica :|
sencillamente no tengo tiempo
si me la hacen durante la entrevista bien
algo acotado y corto
pero fuera de eso, me niego
 
@PabloLozano La verdad es que ha estado bien, he aprendido a usar correctamente la libuv
@PabloLozano Pero tienes razón en eso
 
@Trauma Claro, pero si hay alguien técnicamente mejor que tú pero que no tiene tiempo (tiene hijos pequeños, usa una hora en llegar a casa desde el trabajo...), tendrá mucho en contra para hacer un buen código
precisamente porque ya está trabajando
pienso que así se pierden buenos candidatos
 
@PabloLozano Pues ahora que lo dices, creo que tienes razón.
La verdad es que nunca lo había pensado.
 
yo ya viví eso (perder horas de sueño para hacer una "práctica")
 
Me gusta demasiado programar :-(
 
8:30 AM
y encima al final no me dio tiempo a hacerla decentemente y no la entregué
ahora seguramente podría, los nenes no demandan tanto y curro desde casa
 
@PabloLozano Yo NO la tengo terminada, pero así se va a quedar. Me falta la parte de las imágenes.
Pero entiendo que es la parte trivial, lo duro es el manejo de red y múltiples trabajos sincronizados
 
pero sigue sin parecerme una buena forma de probar a candidatos
sobre todo si tienes varias entrevistas en marcha
 
@PabloLozano Posiblemente tengas razón.
 
Hace poco contacto conmigo una recruiter, me pidió que hiciese una prueba técnica mi respuesta fue: Salgo del trabajo que no se ni quien soy, mi tiempo libre es sagrado, no voy a malgastar mi tiempo en realizar una tarea por la cual no voy a cobrar, si deseas saber mi nivel puedes verlo en mi SOes, observando mis preguntas y respuestas puedes saber mi nivel
 
@Trauma Lo cual no quita que la empresa a la que aplicas pueda estar muy chula
me salen ya los americanismos solos xD
 
8:39 AM
XDDD
Hombre, hacen cosas de red, AWS, multiparalelismo, ...
algo de IA también ...
Demasiado goloso para mí :-)
 
yo me he pegado este finde completando un curso de kubernetes
ya por vergüenza torera
 
@PabloLozano XDDDD
 
es que tuvimos un marrón en un servicio por culpa de una desconfiguración en el cluster de k8
y me tocó lidiar con ella
hablé con los devops y me dijeron que entrara en el nodo y debugara el problema
y tardé dos días sólo en saber qué hacer para entrar al nodo y averiguar qué tenía que arreglar
al final es que se había borrado una "network policy"
 
@PabloLozano XDDDD
 
y mi servicio no podía acceder al servicio de configuración
así que tuve que agregar esa regla al cluster
al final copié y pegué la regla de otro servicio
pero como un mono, sin saber exactamente lo que estaba haciendo
y me dio mucha rabia
y casualmente el viernes fue declarado por mi empresa "improvement day"
así que podíamos hacer lo que nos diera la gana... que fuera relacionado con el trabajo
 
8:52 AM
@PabloLozano ¡ Que guay ! ¿ no ?
 
mejorar documentación en la wiki de la empresa, hacer cursos para aprender cosas, refactorizar algo...
esas tareas que están siempre pendientes pero les tienes ganas
 
konnichiwa
 
así que empecé el curso de k8
pero en un día no lo haces
 
@PabloLozano me parece una gran idea
 
viendo el "log" del día (teníamos que apuntar a qué íbamos a dedicarnos), creo que la mitad de los desarrolladores se pudieron con los cursos de k8
@Pikoh creo que todos estamos de acuerdo en eso :D
 
8:55 AM
A nosotros nos dan cursos si queremos...pero normalmente fuera de horas de trabajo
de hecho, tenemos un acuerdo con udemy y podemos hacer cualquier curso
 
@Pikoh Nosotros tenemos 500€ anuales por persona para comprar cursos, libros...
yo compré dos de k8 estando de oferta, de 110€ cada uno a 10€ cada uno
 
@PabloLozano lo nuestro no es un fijo. Si necesitamos o queremos algun curso, se solicita y si lo aprueban pues bien
 
así que ni he hecho el papeleo para que me lo devuelvan
 
de hecho, los ultimos cursos que he hecho costaban unos 3500 leuros (para 5 personas)
 
joder, hablando de cursos, tengo que terminar los ejercicios de ingles, que si no, no me dan el plus
 
9:00 AM
Por cierto, ahora mi empresa nos ofrece seguro de salud como parte de retribución flexible. Está muy bien la verdad
 
a ver si permiten a mi empresa aumentar el cheque gourmet que la inflación ha elevado el precio de los menus
 
Esto sí que nunca me había pasado. Acabo de perder 15 puntos porque el op ha "desaceptado" una respuesta mia de hace ya casi cuatro años. Y ha sido para aceptar otra con la misma antigüedad!
 
@Pikoh seguro dental! lisa necesita un aparato! seguro dental!!
 
@abulafia hay gente que medita mucho sus decisiones ;)
@JoseRodriguez XD
 
9:18 AM
@Pikoh Nosotros tenemos seguro como parte de los perks, con dental completo
y me cubre a mi, a mi mujer y a mis hijos
 
@PabloLozano a nosotros lo que nos ofrecen es pagarnos la mitad y la otra mitad nosotros, como parte de retribución flexible. Merece bastante la pena
 
@PabloLozano qué cursos son esos? dónde? (perdona si ya lo dijiste)
 
9:35 AM
@abulafia en udemy
@Pikoh menos para hacienda :)
 
jejeje ... está quedando tooo guaaapooooooo
[I] Crupier.cpp:28 Iniciando Crupier, 12 workers, cola de uploads listos: 24
[I] NetManager.cpp:25 Iniciando NetManager, puerto 8080
[I] NetManager.cpp:35 Iniciando bucle de eventos
[I] Client.cpp:53 0x56056f18bbf0 Establecida conexi?n
[I] Crupier.cpp:130 [127.0.0.1:59488] Autorizado UPLOAD
[I] Crupier.cpp:108 [127.0.0.1:59488] Iniciando trabajo
[I] Crupier.cpp:86 [127.0.0.1:59488] Enviando respuesta OK 1000
[I] NetManager.cpp:70 Cliente [ 127.0.0.1:59488 ] ha cerrado la conexi?n
Enga, hay que amplicar el cliente para que soporte multiconexión :-)
Ah, y mejorar esa traza, que sale el puntero en lugar de la IP:Puerto :-)
 
@PabloLozano Gracias. Yo ya he tenido que pegarme con Kubernetes, desplegar cosas, editar yamls. Creo que tengo los conceptos básicos (deployments, replicasets, services, load-balancers...) Parece que esos son los contenidos cubiertos por el curso que me acabas de enlazar. ¿Crees que merece la pena hacerlo de todas formas? Lo que menos entiendo yo de Kubernetes es todo el tema de la red, y luego si lo llevamos al mundo aws (eks), el tema de como se relaciona con los roles, permisos, etc...
Tampoco tengo claro cómo el autoscaling de kubernetes recoge métricas y cómo interactúa con el autoscaling de las VMs del cluster (de nuevo en el mundo aws)
 
@PabloLozano sastamente
 
udemy.com/course/learn-devops-the-complete-kubernetes-course Este parece más cercano a lo que busco. También está de oferta
 
10:30 AM
@CandidMoe o @abulafia ¿ Podéis echarle un ojo al bischo este ? Me dice RuntimeError: await wasn't used with future
SERVER = ( '127.0.0.1', 8080 )

def generanteRandomData( ):
    Mega = 1024 * 1024
    size = random.randint( Mega, Mega * 10 )
    data = bytes( size )

    return ( size, '/UNA/RUTA/ABSOLUTA/CUALQUIERA', data )


async def readData( reader: asyncio.StreamReader, seps = 1 ) -> bytes:
    buffer = bytearray( )

    while True:
        readed = await reader.read( 1 )
        buffer += readed
        if buffer[-1:] == b'\00': break

    return buffer[:-1]

async def uploadData( reader, writer, data ):
No se como carajo esperar las tareas hijas :-(
 
Alguna pista de cuál de los await te da el error?
 
Espera que lo lanzo otra vez ...
@abulafia tasks += asyncio.create_task( sendFile( ) )
 
tasks.append(asyncio.create_task(sendFile()))
 
Ese += me huele mal
 
Con ese cambio funciona.
 
10:35 AM
eso iba a decir yo, que lo cambiaras por un append
 
Si tienes listas, usas append o extend.
 
es curioso que haya funcionado con += sin error de sintaxis
 
que raro es el python este ...
 
+= es de hecho azucar sintáctico para .extend() en este caso
solo funciona si lo que le pasas es un iterable. Asi que por lo que se ve la task es un iterable
quizás debido a que internamente se implementa con un generador
un curioso detalle de implementación que afloró a la superficie de forma insospechada
 
... ummmmm ... algo falla aquí ...
Enviando <1996935/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Recibido OK, subiendo datos
Enviando datos
Datos enviados
Es como si el segundo task no iniciara ...
 
10:37 AM
extend espera una lista. Esto funciona:
` tasks.extend([asyncio.create_task(sendFile())])`
Si lo usas sin los "[]", vuelve a dar error. Es lógico, extend espera un iterable.
 
@CandidMoe sí, claro. Lo que era raro era que esto también funcionaba: tasks.extend(asyncio.create_task(sendFile())), que era lo que hacía básicamente el codigo de Trauma
 
tasks.extend( asyncio.create_task( sendFile( ) ) )
RuntimeError: await wasn't used with future
 
@Trauma Te faltan los corchetes
@CandidMoe No, no es lógico lo que estaba sucediendo
 
Ah copón, no vi los corchetes
a ver ...
 
extend aceptaba ese argumento (por tanto la tarea resultaba ser de forma insospechada un iterable)
pero luego fallaba por otro sitio
 
10:39 AM
pero sigue lanzando solo 1 tarea
 
(porque los elementos que añadias a la lista no eran tareas, sino vete a saber qué, lo que resultara de iterar por la tarea)
 
Enviando <1323958/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Recibido OK, subiendo datos
Enviando datos
Datos enviados
 
@Trauma y cuanto vale childs?
 
@abulafia 2
 
claro
 
10:40 AM
¿ ?
 
range(1,2) itera una sola vez
porque el extremo derecho no forma parte del rango
 
jejeje
ok
 
tienes que poner range(0, childs)
 
candid@gear:~/PycharmProjects/upload$ python test.py 5
Enviando <8274681/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Enviando <10399072/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Enviando <9649473/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Enviando <9602436/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
[OK]
Cerrando conexion
[OK]
Cerrando conexion
[OK]
Cerrando conexion
[OK]
Cerrando conexion
 
o más simple range(childs)
@CandidMoe Sí, pero ha iterado 4 veces
el range estaba mal
 
10:41 AM
Pues en mi máquina no funciona XDD
./upload 3
Enviando <9504391/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Enviando <8313712/UNA/RUTA/ABSOLUTA/CUALQUIERA>
Mensaje enviado
Recibido OK, subiendo datos
Enviando datos
Recibido OK, subiendo datos
Enviando datos
Datos enviados
Datos enviados
 
Por cierto, python idiom, cambia for child in range( 1, childs ): por for _ in range(childs):
lo de _ es un convenio para "variable que no voy a usar"
 
@Trauma ¿Y este código lo escribistes tú?
 
nada, que no va. No se cierran los clientes :-(
[I] Crupier.cpp:86 [127.0.0.1:60078] Enviando respuesta OK 1000
[I] Crupier.cpp:86 [127.0.0.1:60076] Enviando respuesta OK 1000
[I] Crupier.cpp:86 [127.0.0.1:60080] Enviando respuesta OK 1000
pero no sale la traza de que el cliente ha cerrado
y, de hecho, sigue activo
 
@Trauma Yo prueba con mi server y funciona
 
@CandidMoe Sip. Todo todo 100% mio :-)
A ver con 1 solo hilo ...
 
10:43 AM
@Trauma Parece que ya le pillastes el truyco.
 
@CandidMoe Si, claro. Con la doc de python abierta :-D
que raro, es como si no recibiera la respuesta del server ...
pero SI la estoy enviando ...
 
igual es por esto if buffer[-1:] == b'\00'
no debería ser ` == b'\0'` ?
por qué el segundo cero?
 
@abulafia Porque un código que @CandidMoe me pasó tenía 2 ceros \00
 
Pues mal. El primero, debido al \ delante es el ascii nulo. El segundo es un cero normal
asi que estás buscando como terminador un NULO seguido de un cero
y no creo que sea eso lo que querías
 
@abulafia No, no es :-)
 
10:46 AM
Aunque bueno... no sé
veo por ahi también cosas como outData = str( size ) + '\00' + path + '\00'
asi que en efecto sí que estás usando la cadena NULO+0 como delimitador
 
@abulafia pero eso lo parsea bien el server
 
@Trauma ¿Seguro? ¿No te estará metiendo ceros como parte del path?
 
bool HeaderInteractor::execute( std::string_view data ) noexcept {
    if( ( m_buffer.size( ) + data.size( ) ) > HEADER_BUFFER_SIZE ) {
        LOG_ERROR( ) << "Datos de Hello demasiado grandes";

        m_error = Error::BAD_HEADER;
        return false;
    }

    m_buffer.insert( m_buffer.end( ), data.cbegin( ), data.cend( ) );

    if( !m_first.has_value( ) ) {
        auto iter = std::find( m_buffer.cbegin( ), m_buffer.cend( ), ZERO );

        if( iter == m_buffer.cend( ) ) {
            return true;
Ale, código C++ del güeno XDD
 
Vale, pues mira a ver qué te saca en m_path.string()
predigo un 0 al inicio de esa cadena
 
@abulafia Tenemos que dejarlo un momento. Gracias por echarme una mano :-)
 
10:48 AM
(por no mencionar otro 0 al inicio del contenido del fichero recibido)
 
Pero me reclaman en el curro :-(
 
@Trauma b'\x00'
 
Sí, yo también tengo una reunión ahora
 
@Trauma La diferencia está en el '\x', que interpreta lo que viene como un valor hex (un byte).
 
@CandidMoe Eso sí. Aunque para el ascii nulo puedes poner simplemente "\0". Por cierto @Trauma, que eso es también C estándar :-)
 
00:00 - 11:0011:00 - 23:00

« first day (2222 days earlier)      last day (60 days later) »