« first day (2433 days earlier)      last day (50 days later) » 

5:57 AM
A las güenas :-)
Asco de Martes :-(
 
 
3 hours later…
9:03 AM
Egun on
@Trauma, sabes como hacer algo parecido a un setInterval en Python?
 
@MauricioContreras En ningún lenguaje lineal existe eso; puedes usar asyncio en python, o hilos. O posiblemente algún wrapper sobre las señales
Solo tiene sentido en lenguajes, digamos, asíncronos
 
La cosa es que quiero re lanzar un procedicmiento cada n minutos. Es decir, el programa quedará iddle durante ese tiempo y al cumplirse, pues se vuelve a ejecutar. Tal vez es más difícil de lo que pensé.
 
@MauricioContreras ¿ Que significa idle ? Si no vas a hacer absolutamente nada en ese tiempo, pues algún tipo de timer o sleep
pero si tienes que hacer cosas ... se complica mas
@MauricioContreras te diría que usaras asyncio de python ... aunque, si te sientes valiente, puedes intentarlo con siglarm ... tiene que ser divertido mezclar alarmas asíncronas y el famoso GIL de python XDDD
 
A ver, cada n minutos debo volver a ejecutar el script para renovar un token que uso para AWS, la cosa es que siempre me expira en la mejor parte, y debo relanzar el bisho este de python para volver a autenticarme. Quiero hacer eso de forma automática, es decir que una vez lanzado la primera vez, se quede allí sin hacer nada hasta que se vuelva a lanzar autoimáticamente y asi sucesivamente.
Lo del sleep parece que me vale. Meter el bisho en un bucle bien definido, y en cada iteración hacer un sleep.
Puede que esto sirva:
if __name__== "__main__":
    for i in range(0, 5):
      main()
      time.sleep(7200)
Se ejecuta un máximo de 5 veces cada 2 horas. O eso es lo que creo. XD
A probarlo
Parece que funciona. Ya veremos en 2 horas
 
9:22 AM
@MauricioContreras Tiene buena pinta. O que se ejecute cada X tiempo y compruebe una condición, que sea determinada hora o cualquier historia. Un cron hecho a medida, vamos :-)
 
Es que justo cuando estoy en lo mejor trabajando con Lens y kubectl, Boom, hay que autenticarse. Mejor que lo haga él solito por debajo y yo sigo concentrado en lo mío.
 
Totalmente de acuerdo: para eso están las máquinas, para hacer cosas repetitivas y aburridas :-)
Bufff ... mirando esto que estoy haciendo, solo pido que no haya que modificarlo dentro de X tiempo
La complejidad se ha salido de madre :-/
Enga, vamos a tirarlo contra un .xml de los gordos, de esos de 200M
La explosión se va a oir desde media España xDD
 
 
1 hour later…
10:38 AM
¡¡ Ooooooleeeeeeeeee !!
...
...
The <payment_curve> field has not been loaded
The <nettings> field has been loaded
Entering <compareRepeatedEmbedded>
Starting comparison, proto <NettingSet>(bbva.protointerfaces.xva.v1.NettingSet)
ERROR: The existing <_ID> in the ClassType is unknown
ERROR: The existing <_groupKind> in the ClassType is unknown
ERROR: The existing <_groupName> in the ClassType is unknown
ERROR: The existing <_paymentCurveName> in the ClassType is unknown
ERROR: The existing <_Map> in the ClassType is unknown
 
11:25 AM
@Trauma Yo solo veo errores, pero si eso te hace feliz, me alegro por ti
 
¡ HAHAHAHA !
Va casi casi de lujo :-)
Puliendo los últimos fallillos
Ok, un bug menos. Falta uno :-)
@abulafia Estas cosas en python son mucho mas fáciles: con el tema de que las variables no tienen tipo
Aquí está todo el código lleno de if( ) y switch( ) para discriminar por el tipo
 
@Trauma El duck typing es una maravilla, y no está reñido con un tipado estricto
 
@abulafia Reconozco que tiene sus cosas buenas, a veces :-)
Para volcar un valor a cadena ... son 20 líneas. Comprobación de errores aparte
static std::string getProtoValue(const google::protobuf::Message& proto, const google::protobuf::FieldDescriptor& fieldDescriptor)
{
    static std::function<void(std::stringstream&, const google::protobuf::Reflection&, const google::protobuf::Message&, const google::protobuf::FieldDescriptor&)> ProtoGetters[] = {
        /* 0 -> not exists */ { ThrowInternalError },
        /* TYPE_DOUBLE 1 */ { [](std::stringstream& ss, const google::protobuf::Reflection& reflection, const google::protobuf::Message& proto, const google::protobuf::FieldDescriptor& fieldDescriptor) { ss << reflection.GetDou
@abulafia Tambien te digo que las lambdas de python son un churro en un palo ;-p
 
@Trauma Si, concuerdo. El problema de que eso sea así, es la ausencia de delimitadores de bloque en python. No puedes escribir una función "inline" si la indentación es significativa sintácticamente
asi que las lambda son un apaño reservado únicamente a funciones minimalistas que se componen de un simple return expresion
 
@abulafia Nunca se me ocurrió mirarlo desde ese punto de vista. Tienes razón en eso
Podrían haber usado un end o algo así para ese caso concreto, pero supong que guarrearía mucho la síntaxis
 
11:35 AM
@Trauma Para ese uso concreto, se escribe una función "con nombre" aparte y se pasa el nombre. Es lo que hay
 
Pues tambien :-)
 
salvo por las lambda, la programación funcional en python está bastante bien soportada. Lo de los decoradores por ejemplo es muy ingenioso para conseguir una potencia ilimitada sin enguarrar la sintaxis
 
¿ Decoradores ? ¿ Devolver una función definida internamente en otra ?
Jopeta. Este bug es mas gordo. Estoy haciendo algo mal al traducir los nombres. Copón :-(
Ah no. Que he puesto mal el nombre en el diccionario. Menos mal :-)
 
@Trauma No. Un decorador es una función que toma otra función como parámetro y devuelve como resultado una tercera función, que pasa a reemplazar a la función original
 
@abulafia vale, tu te explicas mejor que yo :-)
Pero eso se puede hacer en muchos lenguajes, no le veo nada especial
 
11:41 AM
No, lo que tiene de especial python es la sintaxis @ para aplicar el deocorador
definirlo es igual que otros, cierto
 
@abulafia Ah, vale. Ahí me pillas ya, ni idea
echo un vistazo ...
 
es decir, imagina que tienes una función llamada cronometra que recibe como parámetro otra función f, y te devuelve como resultado otra función g que lo que hace es llamar a f, imprimir lo que tardó en ejecutarse, y devolver el resultado
ahora defino una función fibonacci() y quiero "aplicarle" el decorador cronometra
sin la sintaxis @sería así:
g = cronometra(fibonacci)
g()
 
Vale, hasta ahí es igual que en JavaScript, por ejemplo
 
ahora quiero que en vez de g , sea la propia función fibonacci, para que la pueda llamar bajo el mismo nombre
fibonacci = cronometra(fibonacci)
fibonacci()
bueno, pues python introduce el operador @ que hace que la función que vas a usar como decorador se aplique a la que definas a continuación
asi que escribiría
@cronometra
def fibonacci():
   ...
y ya puedes llamar a fibonacci() y estarás llamando a la versión "g" decorada
 
Vale, entiendo que eso equivale a llamar al @decorador pasándole como primer argumento la función que se define a continuación
Si te digo la verdad, lo veo ... enrevesado
 
11:46 AM
si, y a la vez a que el resultado devuelto por el decorador reemplace a la función definida a continuación
pero la gracia es que puedes usarlos sin saber bien cómo se implementan
 
jejeje ... y ya llegamos a lo que a mi no me gusta
 
un usuario "novato" puede aprender que poniendo @cronometra delante de una función, auntomáticamente saldrá por pantalla lo que tarda
otro decorador que python ya te da hecho es @lru_cache
 
Si, entiendo que para un novato eso puede el sumun de la comodidad, no te lo niego. Automágico total
 
reemplaza a la función decorada por otra que guarda los resultados de invocaciones previas
 
¿ meonización ?
 
11:47 AM
exactamente
bueno, aproximadamente :-)
memoización
 
jejeje ... eso :-)
No es un término que use habitualmente, sorry
Si es muy cómodo, no te lo niego
 
y no digamos nada si además quieres encadenar decoradores
@cronometra
@lru_cache
def fibonacci():
   ...
 
Y, si sabes lo que estás haciendo, no veo mal el usarlo. Solo que para los recien llegados de otros lenguaje, es demasiado automágico
Vamos, yo lo veo y se me levantan las cejas xD
 
Gracias a eso puedes hacer frameworks web como flask, que usan ese tipo de automagia para asociar rutas con funciones
@app.route("/doc")
def get_docs():
   ...
porque como ves puedes crear decoradores que reciban parámetros
 
método abreviado para app.route( "/doc", function() ... ), ¿ no ?
si fuera en JavaScript
 
11:51 AM
@Trauma Bueno, algo más complejo que eso. sería app.route("/doc")(function () {...})
app.route() devuelve a su vez un decorador, que admite function como parámetro
 
vale, 2 llamadas encadenadas entonces
Que no. Que me vuelvo a mi C++
Mucho menos automágico, mas manual
 
12:06 PM
buenos dias...
 
 
2 hours later…
2:09 PM
buenas buenas
@abulafia sin el ´cache´ es muy ineficiente el fibonacci con un numero alto, está bueno
 
2:34 PM
@LucasDamian corrección, el fibonacci no es ineficiente, lo que es ineficiente es tu algoritmo para calcularlo. XD
 
@MauricioContreras eso eso eso eso.
como está don @MauricioContreras ?
 
3:06 PM
Que asco de gato tengo. Mira que es repelente el animal:
De verdad que da asco lo bien que vive el bischo
 
jajjajajajaa
hermosooooo
 
3:24 PM
que rico y hermoso me parece el asco
que buena vida
 
3:42 PM
alguien usa el hosting de godaddy?
@Trauma todo el dia durmiendo y comiendo, cagando, marcando territorio, buscando GATASSSSSSSSSS
eso es un vidon compae
 
 
5 hours later…
8:22 PM
@Trauma que hacemos con nuestro amigo ultra experto en c++??? :(
 
@gbianchi Puffff. Ni idea. Va a-su-puta-bola
 
@Trauma ya es el quinto o sexto mensaje que le dejo
entiendo que "pareceria" hablar con conocimiento y que lo que dice parece correcto.. pero en todo caso, en toda respuesta, cuando responde, esta matando moscas con misiles nucleares...
 
Es que no responde a las preguntas
Osea, preguntan por un puntero nulo, y responde con cosas que no tienen nada que ver
jejeje ... ¿ pues no lo explicó al Paper lo que era un constructor ? XDD
En una pregunta con un simple error tipográfico sobre el using en C++98
 
@Trauma ah esa me la perdi
 
1 seg ...
 
8:31 PM
o sea se atrevio a explicarle a paper como hacer algo? yo apenas me animo a saludarlo... :p
 
1
Q: Traer al objeto derivado el operador de asignación de la base (antes de C++11)

PaperBirdMasterTengo un código que puede resumirse así: template <typename T> struct B { B &operator =(const T &) { return *this; } }; struct D : B<int> {}; int main() { D d; d = 0; return 0; } Y falla: error: no viable overloaded '=' d = 0; ~ ^ ~ note: candidate function (the implici...

@gbianchi Y como tu dices, la respuesta es una burrualidad que no viene a cuento de nada
Como si pregunto como abrir la puerta del coche con mando a distancia, y me respondes como funciona el motor de combustión
Cápitulo 1 de la temporada 3 de WestWorld :-O
 
@Trauma si yo noto eso... pero ya le explique varias veces...
@Trauma jajajaja mira tranqui!
 
@gbianchi Yo le he intentado explicar también, y, como era de esperar, se defiende que el es muy bueno y los demás le tenemos envidia
Cosas de crios :-)
 
@Trauma una pena... en fin...
ya se organizara.. o nos dejara...
o el sitio lo va a bloquear...
 
@gbianchi Se lo he intentdo explicar también ... y dice que sin problema, que se crea otra cuenta y listo O-O
Así que se lo dejo a los profesionales ejem ejem ...
 
8:35 PM
@Trauma ya le deje un pequeño largo comentario
tipo ultimatum
 
Pues se ve que no le ha hecho mucho efecto. Estás perdiendo poderío, @gbianchi. Te estás volviendo blando ;-p
 
JAJAJAJAJAJ
solito se va a perder.. su ultima respuesta ya esta ofuscada en el -3
 
Normal
8 mins ago, by gbianchi
entiendo que "pareceria" hablar con conocimiento y que lo que dice parece correcto.. pero en todo caso, en toda respuesta, cuando responde, esta matando moscas con misiles nucleares...
y encima va y te dice en los comentarios que no esta respondiendo la pregunta jejeje
 
para estos casos, es cuando se justifican los negativos...
 
A mi las respuestas del Paper ya me parecen excesivas ... imagínate las del chaval este
 
8:38 PM
jajajajaaj
pero paper te manda el rollo.. pero te contesta...
la respuesta esta ahi
 
Eso si, por lo menos te contesta
En fin. Esperemos que se calme en breve
en muy breve, porque el sistema tiene que estar a punto de bloquearlo ya
Bueno, que paso de tí @gbianchi. Que me estoy perdiendo el capítulo.
 
@Trauma vaya vaya
que se divierta!
 
Esto son cosas de los mods jejeje ... así que a sufrir os toca ;-p
 
jajaja naaaa
 
:-)
 
8:40 PM
pero me mata la cantidad de banderas que se lleva :/
 
XDDD
Síndrome de Yo Contra el Mundo creo que se llama
7.000.000.000 humanos en el planeta, y están todos equivocados
Le pasa igual que ha mi crio jejeje
 
@Trauma jajajaja
 
9:20 PM
@abulafia Cuando pases por aquí ... ¿ Hay alguna manera, desde un módulo, de saber la ruta del archivo .py que inició la ejecución del script ? Es que el módulo necesita acceder a una configuración, y me gustaría que, si no se le indica en argv, busque el archivo en el directorio donde está el main.py. Que puede ser un directorio distinto al directorio de trabajo.
Creo que a veces me complico mucho la vida O_º
He probado con sys.orig_argv, pero mi python 3.8.10 dice que no existe :-/
Ah copón, está a partir de python 3.10
 
10:18 PM
@Trauma sys.path[0] ?
 

« first day (2433 days earlier)      last day (50 days later) »