Bitácora de fernand0 Cambiando de aires

Contando cantidades muy grandes con la ayuda de una moneda

Expo. Agua, flores, monedas

Si hablamos de contar pensaremos que se trata de una tarea fácil, porque es algo que hacemos habitualmente sin demasiados problemas. Incluso disponemos de herramientas que nos ayudan: cuántas fotos he hecho, cuántos pasos he dado, … Aunque a veces no es tan sencillo. En Computer Scientists Invent an Efficient New Way to Count nos preguntan cómo contaríamos el número de seres vivos en un bosque. Incluso con herramientas como ese contador de la cámara de fotos y disparando una foto cada vez que lo necesitemos sería complicado.

Imagine that you’re sent to a pristine rainforest to carry out a wildlife census. Every time you see an animal, you snap a photo. Your digital camera will track the total number of shots, but you’re only interested in the number of unique animals — all the ones that you haven’t counted already. What’s the best way to get that number?

¿Y el número de usuarios distintos que se conectan cada día a una red social como Facebook? Tendríamos que comparar cada nueva entrada de un usuario con una lista inmensa de entradas previas, para asegurarnos de que era un nuevo usuario.

It gets worse. What if you’re Facebook, and you want to count the number of distinct users who log in each day, even if some of them log in from multiple devices and at multiple times? Now we’re comparing each new login to a list that could run to the billions. </blockquote> El problema tiene nombre propio, el problema de los elementos diferentes (the distinct elements problem) y recientemente Sourav Chakraborty del Indian Statistical Institute, Vinodchandran Variyam de la University of Nebraska, Lincoln, y Kuldeep Meel de la University of Toronto han propuesto una solución novedosa, que se puede ver en Distinct Elements in Streams: An Algorithm for the (Text) Book. El algoritmo evita almacenar todo lo que se ha contado hasta el momento, basado en la aleatoriedad: podemos ir tomando elementos, hasta llegar a los 100, evitando las repeticiones. Cuando los tenemos, lanzamos una moneda al aire (¡aleatoriedad!) por cada elemento contado: si sale cara, se queda en la lista; si sale cruz, lo borramos. Al final deberíamos tener unos 50 elementos.
When the space is full, press pause and flip a coin for each word. Heads, and the word stays on the list; tails, and you delete it. After this preliminary round, you’ll have about 50 distinct words left.
Ahora seguimos contando y cada vez que encontramos un elemento que ya tenemos en la lista volvemos a lanzar la moneda: si sale cruz la borramos, y si sale cara la mantenemos en la lista. Continuamos hasta que volvamos a tener 100 elementos y volvemos a borrar de manera aleatoria aproximadamente la mitad. Con esto hemos terminado la primera ronda.
Proceed in this fashion until you have 100 words on the whiteboard. Then randomly delete about half again, based on the outcome of 100 coin tosses. That concludes Round 1.
Para la segunda, haremos algo parecido; pero en este caso será más difícil que un elemento permanezca en la lista. Si sale la cruz la borramos, igual que antes; pero si sale cara, lanzamos la moneda otra vez y mantenemos el elemento solo si vuelve a salir cara. Una vez que tenemos los 100 elementos ocupados de nuevo eliminamos alrededor de la mitad de las palabras otra vez, igual que en la vuelta anterior.
ontinue as in Round 1, only now we’ll make it harder to keep a word. When you come to a repeated word, flip the coin again. Tails, and you delete it, as before. But if it comes up heads, you’ll flip the coin a second time. Only keep the word if you get a second heads.
En la tercera ronda, hará falta que salga cara tres veces para mantener el elemento, en la cuarta, cuatro. Y así sucesivamente.
In the third round, you’ll need three heads in a row to keep a word. In the fourth round you’ll need four heads in a row. And so on.
En algún momento habremos terminado con los elementos que tenemos que contar y por la forma de proceder cada elemento tiene exactamente la misma probabilidad de estar allí que el resto: 1/2k. Por ejemplo, si hay 61 elementos en la lista y el proceso ha costado seis rondas, podemos dividir 61 por la probabilidad (1/26) lo que nos da un resultado de 3904 elementos.
The point of the exercise has been to ensure that every word, by virtue of the random selections you’ve made, has the same probability of being there: 1/2k. If, for instance, you have 61 words on your list at the conclusion of Hamlet, and the process took six rounds, you can divide 61 by the probability, 1/26, to estimate the number of distinct words — which comes out to 3,904 in this case.
Lo que han demostrado es que la precisión de este método aumenta con el tamaño del espacio que usamos para contar. Si la memoria es suficientemente grande podemos obtener una precisión del 100%.
Variyam and his colleagues mathematically proved that the accuracy of this technique scales with the size of the memory.
¿Por qué es interesante? Como dice William Kuszmaul, incluso para problemas sencillos de entender, básicos y que han sido muy estudiados se pueden encontrar soluciones simples pero no obvias.
“This is a great example of how, even for very basic and well-studied problems, there are sometimes very simple but non-obvious solutions still waiting to be discovered,” said William Kuszmaul (opens a new tab) of Harvard University.
Para personas menos acostumbradas a estas cosas también puede servir cómo, a veces, lanzar una moneda al aire nos ayuda a obtener resultados que no seríamos capaces de conseguir sin ella en un tiempo razonable.

Tiempos complicados, malos comportamientos y vigilancia

Expo. Máscara

Vivimos tiempos verdaderamente complicados. Aunque no entraremos en los detalles más técnicos, este verano fue noticia el casi conseguido ataque a un conjunto de programas desconocidos por la gente menos técnica, pero muy importantes en muchas distribuciones de Linux (xz utils). La cosa tiene casi las características de una película de intriga, porque el análisis posterior de la cosa nos muestra como alguien se infiltra en un proyecto de software libre, con tácticas de ingeniería social (esencialmente dar la lata, presionar, …) consigue hacerse con el control del proyecto e insertar código malicioso; pero no de cualquier manera, porque lo esconcía en alguna parte de la batería de pruebas, despistando a cualquier examinador que intentara encontrar algo raro. Pero algo raro había, porque un desarrollador de Microsoft se da cuenta que una determinada operación tarda más tiempo de lo que debería y, tirando del lío, descubre el problema. Justo cuando esos programitas ya habían empezado a entrar en las actualizaciones de las distribuciones, pudiendo ser un peligro muy importante.

En Jia Tan and SocialCyber ilustran el caso desde una perspectiva interesante, que es la actividad de las personas que contribuyen a este tipo de proyectos. No sólo desde el punto de vista puramente ténico, sino a través de otras señales que se pueden observar.

Jia Tan era el nombre de este contribuidor (seguramente un equipo) que estuvo a punto de liarla gordísima.

Pero aquí nos queremos centrar hoy en el punto de vista de los indicios cuando algo va mal, porque en el desarrollo de los programas hay una parte técnica y tecnológica, claro, y otra parte que podemos llamar ‘social’. Esto es, están las instrucciones y las líneas de código, la interacción con los repositorios donde se pone el trabajo en común…. pero también están los mensajes que se intercambian, la red social de personas que se relacionan directamente con el trabajo de desarrollar …

..., and that software includes both the technical artifacts (aka, the commits) and the social artifacts (messages around software, and the network of people that build the software), holds true to this day, and has not, in my opinion, received the attention it deserves.

En el caso del tal Jia Tan, si prestamos atención a los detalles podíamos ver:

  • Problemas en la línea de tiempo (fechas/horarios que no son compatibles/razonables).
  • Medidas de la actividad del usuario en cuestión.
  • Modificaciones en ‘zonas’ del código que normalmente no tocan.
  • Amistades ‘peligrosas’.
  • Verificación de las direcciones de correo electrónico utilizadas, a través del análisis en los sitios de divulgación de incidentes relacionados con ellas (ahora resulta que si tu dirección de correo no aparece en ningún indicente hay bastantes probabilidades de que sea peligrosa).
  • Comparación de similaridades con otros programas maliciosos
- Time zones (easily forged, but often forgotten), sometimes you see "impossible travel" or time-of-life anomalies as well - Pagerank (measures "importance" of any user in the global or local scope of the repo). "Low" is relative but I just pick a random cutoff and then analyze from there. - Users committing to areas of the code they don't normally touch (requires using Community detection algorithms to determine areas of code) - Users in the community of other "bad" users - Have I Been Pwned or other methods of determining the "real"-ness of an email address - especially email addresses that come from non-corpo realms, although often you'll see people author a patch from their corpo address, and commit it from their personal address (esp. in China) - Semantic similarity to other "bad" code (using an embeddings from CodeBERT and Neo4j's vector database for fast lookup)

Podemos estar de acuerdo en que no siempre es muy sencillo hacer estas comprobaciones y menos todavía si no somos personas de perfil técnico; pero también lo estaremos en que podemos detectar situaciones ‘raras’ prestando un poco de atención y haciendo las preguntas o las indagaciones correctas. Y eso está en la mano de casi todo el mundo.

Apasionante.

Sobre el ataque se puede leer en The Mystery of ‘Jia Tan,’ the XZ Backdoor Mastermind.

Los modelos de lenguaje, los datos y las instrucciones

Velas

Uno de los problemas fundamentales en la seguridad informática aparece cuando por el mismo canal de comunicación aparecen información y datos de control (instrucciones): aunque los marques para diferenciarlos, alguien lo hará mal alguna vez o alguien encontrará una forma de saltarse las medidas que pongamos.

Cuando hablamos de inteligencias artificiales estos días casi siempre nos referimos a los modelos gigantes de lenguaje (large language models, LLMs) y Bruce Schneier nos hablaba del problema en LLMs’ Data-Control Path Insecurity.

Comienza recordando que las primeras centralitas telefónicas eran vulnerables al problema y cómo alguna gente enviaba tonos especiales que les permitían llamar gratis.

Back in the 1960s, if you played a 2,600Hz tone into an AT&T pay phone, you could make calls without paying.

El problema era el que comentábamos: por la misma línea iban los datos (el sonido de la llamada) y la información de control (esos tonos y otros que se usaban).

This general problem of mixing data with commands is at the root of many of our computer security vulnerabilities.

Es el mismo problema que la inyección de SQL, los desbordamientos de memoria… que son un poco técnicos para ponerlos aquí.

Cuando han llegado los modelos de lenguaje, se ha empezado a hablar de la inyección de preguntas (prompt injection) y la idea vuelve a ser la misma: el mismo canal que nos sirve para interrogar al modelo, permite controlar determiandas formas en que responderá. Por lo tanto, alguien podrá engañar al modelo para que proporcione información que no debería.

Prompt injection is a similar technique for attacking large language models (LLMs). There are endless variations, but the basic idea is that an attacker creates a prompt that tricks the model into doing something it shouldn’t.

Es relativamente sencillo tratar de evitar estos ataques cuando se conocen, pero el problema es que hay muchas formas en las que esto puede suceder y esto es, en sí mismo, un problema.

Individual attacks are easy to prevent once discovered and publicized, but there are an infinite number of them and no way to block them as a class.

Además, y a diferencia de los sistemas previamente mencionados, no es posible separar en estos sistemas los datos de las instrucciones, porque justo esa es una de sus características: queremos que los datos cambien el comportamiento de la cosa.

But unlike the phone system, we can’t separate an LLM’s data from its commands. One of the enormously powerful features of an LLM is that the data affects the code. We want the system to modify its operation when it gets new training data. We want it to change the way it works based on the commands we give it. The fact that LLMs self-modify based on their input data is a feature, not a bug. And it’s the very thing that enables prompt injection.

Muy interesante.

La inteligencia artificial y algunos argumentos alrededor de ella

Decoración galería comercial

Me gustó escuchar la intervención de Simon Willison en la PyCon US sobre inteligencia artificial. Ha puesto a disposición del que quiera verlo una transcripción con imágenes que creo que puede ser muy interesante: Imitation Intelligence, my keynote for PyCon US 2024. Se puede escuchar/ver en Keynote Speaker - Simon Willison.

Empieza desde los oríenes de la IA (eso me gusta) allá por el año 1956 (desde que tenemos computadoras hay gente pensando en que podrían pensar) y reformula el término de inteligencia articial de los modelos grandes de lenguaje (LLMs) como inteligencia emulada. Y no para despreciarla, sino para poder trabajar a partir de ese concepto.

When discussing Large Language Models, I think a better term than “Artificial Intelligence” is “Imitation Intelligence”. It turns out if you imitate what intelligence looks like closely enough, you can do really useful and interesting things.

Pero sin olvidar que no son inteligentes, sino que simplemente imitan lo que se les ha mostrado previamente.

It’s crucial to remember that these things, no matter how convincing they are when you interact with them, they are not planning and solving puzzles... and they are not intelligent entities. They’re just doing an imitation of what they’ve seen before.

Habla un poco de los diversos aspectos que pueden preocuparnos de la IA (licencias, sesgos, las preguntas -prompts- y sus riesgos de seguridad, da algún ejemplo …

Finalmente, hace otra reformulación cambiando lo de inteligencia artificial generativa en inteligencia artificial transformativa, porque considera que la aplicación más interesante es justamente esa: proporcionar grandes cantidades de texto y utilizarlo para evluar y hacer cosas con ello.

I think the most interesting applications of this stuff when you feed large amounts of text into it, and then use it to evaluate and do things based on that input.

Termina hablando de ética, desde la procedencia de los datos de entrenamiento (que no le preocupa demasiado) pero también cómo se utiliza para generar contenidos y, si estamos en ese lado, la pregunta sería si estamos generando algo valioso con la IA o simplemente aumentando el contenido automáticamente sin proporcionar nada de valor. Esto es, ¿la usamos de manera responsable?

I love this term. As a practitioner, this gives me a mental model where I can think, OK, is the thing I’m doing-is it just slop? Am I just adding unwanted AI-generated junk to the world? Or am I using these tools in a responsible way?

También habla del fraude (cheating), en particular entre los estudiantes. Nos dice: es malo porque les hace daño (si eres un estudiante y estás usando estas herramientas para que parezca que sabes algo que realmente no sabes, eso es un problema) y, además, es malo porque les puede estar dando una ventaja frente a otros.

I think there are two reasons. Firstly, it hurts them. If you’re a student who cheats and you don’t learn anything, that’s set you back. Secondly, it gives them an unfair advantage over other students. So when I’m using this stuff, I try and bear that in mind.

También habla de compartir las preguntas (al estilo de compartir código) y lo interesante que son estas herramientas a la hora de programar (es un foro de programadores, al fin y al cabo) por la sencilla razón de que la sintáxis y la gramática de los programas es muchísimo más simple que la de los lenguajes naturales y eso hace que funcionen bastante bien.

It turns out language models are better at generating computer code than they are at generating prose in human languages, which kind of makes sense if you think about it. The grammar rules of English and Chinese are monumentally more complicated than the grammar rules of Python or JavaScript.

Y se pregunta si habremos llegado al punto donde no es necesario ser un ingeniero para automatizar tareas aburridas.

This offends me. You shouldn’t need a computer science degree to automate tedious tasks in your life with a computer.

Pero esto también es una responsabilidad: que nadie se quede atrás, que tenemos que ayudar a otros a aprender, comprender y manejarse razonablemente en este nuevo mundo.

I think that means we have a responsibility not to leave anyone behind, to help pull other people up, to understand the stuff and be able to explain it and help people navigate through these weird (and slightly dystopian at times) waters.

Muy interesante.

Willison es un viejo conocido por aquí, aunque veo que no lo he enlazado apenas. Por ejemplo, en 2008, Sitios para visitar en Londres (para geeks).

Abundancia de información, difusión, y granularidad

Me llevan los demonios cada vez que veo a una organización compartiendo información de alguna actividad (en formato visualmente muy atractivo, o no, pero bastante inútil de imagen; muchas veces) en redes sociales, pero buscas información en la web (su web, en muchos casos, abandonada y triste porque la última actualización es de hace meses o años) y no la tienen. Así que me pareció casi de ciencia ficción leer The Fediverse of Things que habla de instituciones que no sólo tienen buena información, sino que además la difunden en medios abiertos y con una granularidad máxima porque además resuena con algunas ideas de cosas que se podrían hacer por aquí.

Nos cuenta, por ejemplo, el caso del Museo de San Francisco (Holding Hands with the “Fediverse” – ActivityPub at SFO Museum) que han lanzado unos cuantos bots informativos en el ‘fediverso’ (mastodon y otras plataformas) que van publicando de manera automatizada diversas informaciones sobre objetos del museo. Información como: cosas que han ocurrido recientemente relacionadas con objetos de la colección de aviación del museo, hechos ocurridos con relación a las terminales, y finalmente, hechos relacionados con vuelos que llegan y se van de San Francisco.

As mentioned these are automated, low-frequency, accounts and, currently, only a limited set of interactions are supported: Accounts can be followed or unfollowed, individual posts can be “liked”, “boosted” or replied to but those replies will not be answered (yet) or published on the SFO Museum websites. To get started we’ve created three “groups” of accounts. They are: Things which have happened recently involving the SFO Museum Aviation Collection; Things which have happened in the terminals (new and old) and; Things from the collection which are related to flights in and out of SFO.

También nos recuerda el caso del ‘correo arbóreo’ (The Melbourne treemail phenomenon) donde nos contaban cómo se asignó un identificador a cada árbol gestionado por el ayuntamiento y una cuenta de correo asociada, donde se podían mandar mensajes sobre su estado (está perdiendo hojas, se ha estropeado, …). Incluyendo fenómenos emergentes como cuando la gente empezó a usar esos correos para ‘hablarle’ a los árboles. Algo como ‘cuando me iba del colegio, me quedé parado, no por una rama, sino por tu belleza radiante…’

"As I was leaving St Mary's College today I was struck , not by a branch, but by your radiant beauty. You must get these messages all the time. You're such an attractive tree,"

Por cierto, que sin ser exactamente eso, me gustó mucho saber hace algún tiempo que existía Huesca ciudad entre jardines, que es un catálogo de los árboles de la ciudad.

También nos cuenta sobre Twitter y @uktrains (I invented tweeting trains (probably) que también es inspirador. Se comparten (se compartían) diversas incidencias en los ferrocarriles británicos.

In 2009 I built @uktrains, the first (to my knowledge) service to share rail travel disruption alerts on Twitter. It covered the whole of the UK, using official data sourced from the BBC that rail operators weren’t (yet) sharing.

Al final, si tienes información disponible puedes divulgarla utilizando diversos mecanismos. El autor nos recuerda el concepto de la Internet de las cosas (Inernet of Things, IoT) y la versión ‘cercana’, la intranet de las cosas (porque podría ser útil para nosotros, pero poco adecuado para el resto conocer, por ejemplo, el estado de nuestras bombillas).

Y, claro, se pregunta (y nos podemos preguntar) si no podrían los responsables de los servicios dotarles de cuentas informativas, algo como @parada23@ayuntamiento_de_ciudad.es y similares.

On the one hand, it would be nice to be able to follow @Yellow_Line@Transit_Authority.gov - or even @Bus_Stop_1234@bus_company.biz - that would allow for hyperfocused data getting to the right people.

Es cierto que existen aplicaciones (ay, aplicaciones, que tenemos que instalar, configurar, …) y otros sistemas más o menos afortunados.

Es un tema que me provoca mucho interés y algunas ideas he tenido, que ya he llevado a cabo, y otras que no termino de ver la forma de enfocar (es importante la información, pero también es importante la forma en que se presenta, los momentos, …). Me permito aquí recordar la existencia de algunos proyectos en esta línea que voy manteniedo, como:

  • medalleroESP (está en otras redes también, pero sigamos con el fediverso), que va publicando las medallas que ganan en las olimpiadas los deportistas españoles.
  • botelectrico, que va publicando cada hora la tarifa PVPC de electricidad en España.

¿Se os ocurren otras ideas de proyectos que podríamos realizar? A mi me parece interesante el tema del transporte (trenes, tranvía, autobuses, aviones,… ) pero a lo mejor hay otros temas que podrían considerar.

Por cierto, que empieza hablando de las dificultades que tuvo uno de los autores al intentar hacer los bots en Twitter (un número verdaderamente, grande, claro) y me recuerda las sucesivas dificultaes que ha ido poniendo Facebook para hacer este tipo de cosas (sin evitar en absoluto que los ‘malos’ hagan sus cosas malas).

I was out with a friend who worked for Twitter and I asked them whether it would be possible for the museum to “create 200,000 Twitter accounts, one for each object in the Cooper Hewitt’s collection”. My friend looked at me for a moment, laughed, and then simply said: No.
2024-09-01T21:03:02.360810 image/svg+xml Matplotlib v3.9.1.post1, https://matplotlib.org/