« first day (1827 days earlier)      last day (1274 days later) » 
00:00 - 13:0013:00 - 22:00

1:24 PM
@JuanEnriqueGarcĂ­aSancho C#
 
@JuanEnriqueGarcĂ­aSancho Antes que nada Bienvenido. Lenguajes con futuro a largo plazo? C, C++, R, tienen al menos 40 años cada uno y aún se siguen usando. Pero imagino que apuntas a los lenguajes más novedosos, en ese caso es muy difícil saber hacia dónde va ir el mercado.
La IA que mencionas es GPT-3, que apareció creo que el año pasado y realmente hasta ahora parece que es un hito en lo que concierne a IA, pero habrá que ver. La aplicación que mencionas es NLP o procesamiento de lenguaje natural, es una de las disciplinas más complicadas del mundo de la IA.
Lo que entiendo, es que si a lo que apuntas es al área de la ciencia de datos/IA, los lenguajes por excelencia son Python y R. Pero más que aprender un lenguaje en sí, con tu experiencia, no debiera ser difícil aprender uno u otro, el tema es la teoría, yo apuntaría mas que nada a eso.
 
1:43 PM
@Pikoh No sé entonces a qué se refiere en la respuesta con esos dos ejemplos. ¿A que hay gente que lo hace?
 
 
2 hours later…
3:59 PM
@gbian
@gbianchi, ¿Estás?
 
@SantiagoCorreaAguirreSanmar aja.. aca
 
4:29 PM
Quería preguntarte acerca de la seguridad de usar vue y estos frameworks. Tengo un amigo que está empeñado en decir que por el hecho de usar axios (ya que los datos se pueden ver), estos frameworks son inseguros. ¿Es verdad?
Es una pregunta más técnica.
 
@SantiagoCorreaAguirreSanmar mmm... no entiendo porque dice eso.. axios se usa para que no tengas que hacer los request totalmente a mano...
en web.. todo se ve...
@SantiagoCorreaAguirreSanmar ningun framework te obliga a usar axios... podrias usar lo que quieras...
por lo tanto, abria que preguntarle a quien dijo eso, que metodo de envio no te permite ver lo que estas enviando?
 
@SantiagoCorreaAguirreSanmar Visible por quién? Quieres decir con un sniffer de red? Si el protocolo es https, aunque sea visible va cifrado por lo que sería totalmente seguro
 
incluso sin usar axios, y usando funciones nativas, es visible!!! (mas alla de que vaya cifrado o no)
@abulafia y sin snifer tambien.. se ve en la consola del navegador...
 
@gbianchi Ya bueno, pero que el cliente pueda ver sus propios datos nunca se ha considerado un riesgo de seguridad
A menos que estemos hablando de que el servidor está guardando "datos sensibles" (secretos del servidor) en el lado cliente, cosa que nunca debería hacer sin cifrar con una clave que sólo el servidor tenga
tanto con https como sin él
 
igual axios no tiene nada que ver en esa ecuacion...
 
4:39 PM
Lo dice porque maneja el envío de datos a la antigua.
Un form, un action y un method.
 
y cómo es "a la moderna"?
 
no se como seria a la antigua.. esa es la unica forma...
 
Bueno, a lo clásico, más bien.
O sea, no usa JavaScipt.
Sólo HTML.
 
que axios no usa javascript?
 
y como seria no clasico? porque axios, lo unico que hace, es abstraer justamente eso...
la web es js.. no hay otra cosa...
vue es js
react es js
 
4:40 PM
pero si es una biblioteca JS para simplificar el uso de XHTMLHttpRequest
 
angular es js...
no hay otra cosa...
que venga a contarnos aca que lo reeducamos rapidamente...
 
pero @SantiagoCorreaAguirreSanmar, aclara en qué sentido hablamos aquí de seguridad. Te refieres a la propia conexion TCP entre cliente y servidor? Que pueda ser espiada por un tecero mediante un sniffer?
 
No, no. Que el que dice que es inseguro, es porque piensa que por el hecho de ser JavaScript, es abierto a todo el que quiera sacar información.
 
@SantiagoCorreaAguirreSanmar pero toda la web es js... que cosa no es js?
traelo para aca.. en 10 minutos le tiramos el castillito de arena...
jajajjajaj
 
parece que piensa más bien entonces en que es inseguro porque JS es interpretado y porque el código JS está en el lado cliente, y por tanto cualquera puede verlo
es eso? inseguro porque el código fuente es publico?
 
4:43 PM
@abulafia no sabria en que web el codigo no esta del lado del cliente...
 
@gbianchi Pues por eso lo digo
igual no es que no se fíe de axios, sino de la web, así en global
seguridad por secretismo, llaman a eso. Y está demostrado que no funciona
 
@gbianchi Jajajajjaja. Me llama la atención que se una.
 
hay mucho desconocimiento de como funcionan las cosas.. porque si..
 
la web de por si, es insegura...
 
4:44 PM
@SantiagoCorreaAguirreSanmar Entonces qué pasa con todo el Open Source?
 
no te podes fiar en nada de lo que pasa en una pagina, ni en nada de lo que viene en un request...
 
Sólo se fía del código propietario cuyo fuente no puede ver? ¡AL revés, hay que desconfiar de ese!
Posiblemente su miedo es que un usuario, usando la consola para ejecutar paso a paso e inspeccionar variables, pueda alterar el valor de alguna de esas y liarla
efectivamente eso es posible, pero el lio sólo afectaría a su propio cliente
si el lío llega a salpicar al servidor, es que el propio servidor estaba programado de forma insegura
repito "seguridad por secretismo", no funciona
El servidor tiene que estar hecho en modo paranoico, pensando que todos los clientes estarán alterando datos para tratar de liársela
por eso debe incorporar verificación de datos, protección frente a inyección, o a falsificación de formularios, etc.
y eso tanto si el cliente tiene acceso al código como si no. Un hacker te puede enviar datos manipulados aún sin acceso al código, por ingeniería inversa
 
En conclusión, aunque los datos en el cliente se pueda ver, si el servidor es seguro, no hay problema, ¿Verdad?
Porque los datos enviados por HTTP(S) son ecnriptados.
 
Un usuario puede crear un problema similar sin necesidad de JS, sino a la antigua. Puede examinar el FORM HTML y descubrir la URL a la que hará el POST. Puede crear un cliente python en un par de líneas que haga un POST a esa URL y envíe todas las Cookies necesarias, y los campos del FORM "manipulados"
si el servidor no verifica lo que recibe, porque confía en que el cliente es "tonto" y no sabrá manipular los datos, ya se la habrás liado
y sin necesidad de JS
 
Entiendo... Gracias por las aclaraciones.
 
4:50 PM
De hecho puede ser mucho más sencillo crear un cliente malicioso de esa forma
 
Por eso los formularios deben llevar tokens (como CSRF) que son piezas de datos cifradas en el servidor, y que sólo el servidor podrá descifrar, y le permiten verificar que el formulario lo ha creado él, y está asociado con una sesión de usuario particular
un ataque CSRF se puede hacer sin necesidad de JS
 
no tiene por qué ser cifrado... es un token que está asociado a la sesión, pero nada más :)
 
@g3rv4 Tiene que estar cifrado para que no puedas crear tú uno sin tener la clave de cifrado
 
con que sea dificil de adivinar alcanza
 
4:57 PM
y así el server pueda verificar que lo creó él
 
o igual me estoy liando con los JWT :-)
 
> A CSRF token is a unique, secret, unpredictable value that is generated by the server-side application and transmitted to the client in such a way that it is included in a subsequent HTTP request made by the client. When the later request is made, the server-side application validates that the request includes the expected token and rejects the request if the token is missing or invalid.
si, el JWT es un token firmado
para poder verificar que quien lo presenta no lo alteró
 
@g3rv4 Dice "secret"
 
con que el token CSRF sea único, secreto e impredecible alcanza
claro, secreto != cifrado
 
4:59 PM
pero ya que el cliente lo tiene, la única forma de garantizar el secreto es cifrarlo, no?
 
no, se puede hacer un Guid.New()
y pasárselo sólo al cliente
lo que no se puede hacer es usar el username como CSRF token
porque un atacante lo puede deducir
 
pero se lo envías al cliente junto con el formulario, por lo que deja de ser secreto?
 
claro, a vos no te importa que el usuario lo sepa
lo que no querés es que un third party lo sepa
 
Ah, es secreto sólo entre cliente y servidor
 
así no puede hacer un <form> con el hidden
 
5:00 PM
se requiere https entonces
 
y hacer submit con js
si, sin https alguien en el medio lo puede ver...
si en SO usáramos el user id como CSRF token, sería malísimo
y en el request, va una cookie (que le permite ver al servidor la sesión) y el CSRF token
el servidor verifica que el CSRF token es válido para la cookie
 
Aha, ya lo pillo. El server genera un token aleatorio, lo asocia con la sesión del usuario (o sea, lo almacena en la sesión, en el lado server) y se lo manda con el formulario
 
claro
 
cuando recibe un POST con un formulario comprueba que el token CSRF coincida con el que tiene asociado a esa sesión (y la sesión la saca de la cookie)
 
correcto :)
si un third party hace un <form> a tu sitio, el navegador va a incluir la cookie
porque es para tu dominio
 
5:02 PM
vale, pero eso implica entonces un servidor stateful, que recuerde los tokens de cada user
 
pero... ese third party no va a saber el token
 
si lo quisiera hacer stateless, podría guardar en token en otra cookie, cifrándolo
como si fuera un JWT
 
claro :)
o podés deducir el token de la sesión ponele
 
por eso me lié y supuse que debía ir cifrado
 
:thumbsup:
 
5:04 PM
ya, pero si puedes deducir el token de la sesión, por ejemplo con un SHA256, eso no sería seguro. El mismo algoritmo puede usar el atacante para deducir también el token a incluir
Hm... no, porque el atacante no tiene el token de sesión
 
claro... y la cookie de sesión debería ser HTTPOnly, para que código JS no pueda verlo
así si tenés un js de un third party (ehem, google analytics?) no puede verlo
y sólo lo usa el browser al hacer requests
 
¿Cómo se llama ese ataque? (que js thirdparty te robe una cookie de sesión)
 
internet
3
 
XD
 
no me alcanzan las estrellitas
 
5:07 PM
... si bien con HTTPOnly un js third party no puede ver la cookie... sí puede inyectar cosas que exfiltren la información del sitio
 
no, quiero decir, igual que el otro era CSRF (Cross Site Request Forgery) seguro que este otro tiene nombre
 
no que yo sepa :)
 
XSS quizás?
 
no creo... con XSS un atacante logra inyectar código que se ejecuta como JS
pero no es que vos confíes en un third party que haga cosas... malas
 
ya, pero yo no sé ni en quién está confiando el servidor que yo visito
si yo accedo a un server A, que incluye en su página código de un thirdserver B en quien A confía, pero yo no confío... eso sería XSS?
Es decir, yo confío en A, pero no en B
B se aprovecha de A, para hacerme a mi XSS, no?
 
5:11 PM
no, XSS es si vos ponele ponés una pregunta en SO con título hola <script>alert(42)</script> y ves un alert
si el dueño del servidor confía en Google y mete el JS que le dan
y después goolge usa eso para robarte info, no es XSS
 
@g3rv4 sí, esa es una forma de XSS
 
> Cross-Site Scripting (XSS) attacks are a type of injection, in which malicious scripts are injected into otherwise benign and trusted websites
en este caso, la inyección pasa voluntariamente (quien desarrolla el sitio agrega el script de google)
 
Hm... pero dejemos de lado el ejemplo google analytics, y considera este otro. Un desarrollador hace una página web y en ella usa alguna biblioteca JS porque hace efectos "chulos". Confía en esa biblioteca, pero es "maligna" en realidad y está intentando robar cookies del cliente
El cliente confía en la página que visita, pero no tiene por qué confiar en la miriada de bibliotecas JS que esta usa
si una de esas bibliotecas es maligna ¿no es eso XSS? Al menos de algún tipo (no igual al clásico de inyectar JS en el servidor desde el lado cliente)
 
no creo... sólo por la definición de XSS de OWASP :) no digo que no sea un problema
o que no sea algo importante
es como... si un dev escribe una consulta SQL que borra todo o expone info confidencial
no es inyección SQL, pero sí es un problema grave
 
entiendo
 
5:20 PM
Ya que están hablando de sql necesito una ayuda :p
 
@JuanPerez lo mejor que podés hacer es poner la pregunta directo :) yo si veo que alguien pide "una ayuda" nunca voy a decir "si, dale... te ayudo" porque no sé de qué se trata ni cuanto tiempo va a llevar. Si veo la pregunta y es algo rápido (o que puedo apuntar en alguna dirección) respondo :)
por suerte, hay gente mucho más generosa que yo en la comunidad igual :P
 
Tengo estos registros almacenados y quisiera poder hacer mediante un case o algo donde se rellenen las horas faltantes por cada dia rellenando el total como 0
 
5:36 PM
Hola a todos. Tengo una duda de optimización de código en python
 
@JuanPerez uff, es feo... tendrías que usar un cursor (muy feo) o tener una tabla con todas las horas y hacer un left join ponele. Lo más elegante para mi es que la app reciba esto y muestre las horas faltantes como 0
 
Tengo la siguiente línea de código: edges.append(v_edges[dist_edges.index(min(dist_edges))])
Y me gustaría expresarla de una forma un poco más eficiente o por lo menos no tanto liosa. Estoy tratando de implementar el algoritmo prim en python
La cosa es que esa linea añade la arista de valor mínimo, donde edges representa una lista que contiene TODAS las aristas, v_edges las aristas seleccionadas (las de menor valor) y dist_edges lista con las distancias
Así puede parecerse muy lioso, pero si se ve el código completo, creo que es más fácil ver el propósito (implementar prim con solo una namedtuple de parametro que contiene los nodos)
 
5:52 PM
@JuanPerez sql no puede inventar filas.. tenes que hacer algo mas para que aparezcan las filas que faltan... porque querrias guardar filas sin sentido en la db?
 
6:14 PM
@LearningDeveloper ¿No es lo mismo que edges.append(min(dist_edges)) ?
Ah, no, espera...
ya veo
qué tal esto? (dudo si es más legible o eficiente, pero es ligeramente más pythónico):
`edges.append(min(zip(dist_edges, v_edges))[1]))`
>>> a = ["a", "b", "c", "d", "e", "f"]
>>> b = [ 4,   5,   2,   0,   6,   3 ]
>>> min(zip(b,a))[1]
'd'
Pero he hecho unas medidas y tu enfoque es más rápido
 
6:44 PM
@abulafia No termino de entender la función del todo
 
zip(b,a) te empareja elementos de b con los de a. Puedes iterar sobre él y en cada iteración te dará una tupla con un elemento sacado de cada lista
En este caso iría generando (4, "a") (5, "b"), etc...
 
Okey, si implemento la función tal cál me sale un ValueError min() arg is an empty sequence
 
min calcula el mínimo de esa lista, para lo cual irá comparando las tuplas. La comparación comienza por el primer elemento, de modo que en este caso el resultado sería la tupla (0, "d")
finalmente al hacer [1] me quedo con el segundo elemento, o sea "d"
@LearningDeveloper Pues eso es que lo que le pasas a min() por alguna razón está vacío
de todas formas ya te digo que mi enfoque con zip() es más lento que el tuyo. Aunque es verdad que tu enfoque se ve confuso, es más rápido
 
6:59 PM
Nada, ya está solucionado. Muchas gracias @abulafia
 
 
2 hours later…
9:24 PM
Tengo una duda con el siguiente código. Y es que no termino de obtener el resultado deseado. El siguiente código creo las aristas que estan sueltas no las añade al arbol y me salta un error de asserto error por eso
El código implementado es el siguiente:
while len(recorrido) != len(points):  # Si ambas longitudes fuesen iguales, quiere decir que los nodos de points ya han sido visitados
        for arista in arbol_MST.edges:    # Empezamos a recorrer el grafo
            if arista[0] not in recorrido:
                aristas_visitadas.append(arista)
                distancia_aristas.append(distance(points[arista[0]], points[arista[1]]))
            elif arista[1] not in recorrido:
                aristas_visitadas.append(arista)
                distancia_aristas.append(distance(points[arista[0]], points[arista[1]]))
El resultado que obtengo es el siguiente: error: your implementation is wrong
  Your MST distance = 10.06449510224598
  Networkx distance = 3.0
 
00:00 - 13:0013:00 - 22:00

« first day (1827 days earlier)      last day (1274 days later) »