<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pablo Reyes</title>
    <description>Desarrollo de software, tecnología, producto y análisis de datos</description>
    <link>https://pabloreyes.es/</link>
    <atom:link href="https://pabloreyes.es/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Sun, 13 Sep 2026 22:39:11 +0200</pubDate>
    <lastBuildDate>Sun, 13 Sep 2026 22:39:11 +0200</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
      <item>
        <title>Observatorio Atalaya</title>
        <description>&lt;p&gt;Hace casi un año me hice con un telescopio y sus respectivos accesorios para astrofotografía: trípode, montura, colimador, cámara planetaria, lentes, etc. Cada vez que tenía que hacer el setup para hacer alguna foto tardaba al menos 40 minutos entre subir el equipo, montar y alinear, y otros tantos para desarmar y guardar. Puesto que las observaciones las hago siempre desde casa, me propuse construir un observatorio en la azotea donde pudiera dejar todo listo y hacer observaciones y fotografías en cuestión de minutos.&lt;/p&gt;

&lt;p&gt;El emplazamiento sería este, aprovechando un hueco de la terraza que apuntaba convenientemente al sur:
&lt;img src=&quot;/images/uploads/posts/observatorio/plano-comb.png&quot; alt=&quot;Plano combinado del observatorio&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;el-tipo-de-observatorio&quot;&gt;El tipo de observatorio&lt;/h2&gt;
&lt;p&gt;Existen distintos tipos de observatorio que uno puede hacer en casa: los de tipo cúpula, los de techo abatible o deslizable, los que se desplazan sobre rieles, etc. De cada uno de ellos existen múltiples combinaciones de materiales, formatos, tamaños, etc.&lt;/p&gt;

&lt;p&gt;En mi caso me decidí por un observatorio rectangular de techo deslizable, el diseño conocido como “roll-off observatory”. Este diseño es muy común en observatorios caseros, pues permite un tamaño bastante razonable y una construcción no demasiado compleja. 
&lt;img src=&quot;/images/uploads/posts/observatorio/huntington.png&quot; alt=&quot;Sistema de apertura del techo del observatorio Huntington&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Cuando uno busca en internet guías de gente que haya hecho este tipo de observatorios, se encuentra sobretodo con webs de los 90 donde americanos manitas hacen sus construcciones de madera sobre profundos cimientos de hormigón en medio de sus extensos ranchos. Un ejemplo es el caso de &lt;a href=&quot;http://www.stargazing.net/mas/observatory.htm&quot;&gt;Muskegon Atronomical Sociecy Observatory&lt;/a&gt;, &lt;a href=&quot;https://www.astrosteve.com/observatory/&quot;&gt;Buena Vista Observatory&lt;/a&gt;, &lt;a href=&quot;http://www.missouriskies.org/observatory/observatory.html&quot;&gt;Bush Observatory&lt;/a&gt; o la mayoría de los que podemos encontrar en &lt;a href=&quot;https://nineplanets.org/amateur-astronomical-observatories/&quot;&gt;este índice de observatorios amateurs&lt;/a&gt;. Por suerte, buscando bien uno también encuentra observatorios como el &lt;a href=&quot;https://sites.google.com/site/astronomiaenlacornisa/&quot;&gt;NGC-1701&lt;/a&gt; en la Cornisa de Aljarafe, donde Juan Carlos Romera tiene prácticamente la misma situación que yo.&lt;/p&gt;

&lt;p&gt;Tras darle muchas vueltas a las distintas opciones, opté por una caseta de acero galvanizado de 0.4mm de grosor y 4.5m^2, en concreto la &lt;a href=&quot;https://www.leroymerlin.es/fp/82578526/caseta-de-metal-huntington-m-de-237x201x186-cm-y-4-5-m2&quot;&gt;Huntington M de Leroy Merlin&lt;/a&gt;. La caseta es robusta y tiene tamaño suficiente para un telescopio grande y un pequeño escritorio donde colocar un ordenador y algunos cacharros.&lt;/p&gt;

&lt;h2 id=&quot;el--suelo-febrero-2022&quot;&gt;El  suelo (Febrero 2022)&lt;/h2&gt;
&lt;p&gt;Un factor importante a la hora de montar un observatorio es el suelo donde se asienta, básicamente por dos motivos:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;aislamiento&lt;/strong&gt;: Los tubos, lentes, cámaras, equipo electrónico, etc. necesitan unas condiciones de humedad y temperatura. Es importante que la caseta no asiente directamente sobre el suelo de la terraza, donde está mas expuesto a humedades, insectos, polvo o basura.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;estabilidad&lt;/strong&gt;: Especialmente para astrofotografía es imprescindible que el terreno sobre el que se soporta la montura y el tubo sean estables. Cualquier vibración del terreno tiene un impacto importante en la estabilidad de la imagen y puede arruinar una fotografía que lleva horas de preparación.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/plots-suelo.png&quot; alt=&quot;Plano de anclaje de los pilares al suelo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;
Lo ideal es montar una solera de hormigón en el terreno y montar todo el set encima, pero en mi caso no era posible al estar en la azotea de casa. En alguna ocasión de fuertes lluvias se ha acumulado agua en la terraza porque el desagüe no ha dado para más, por lo que decidí que era necesario que el observatorio se asentara sobre una base a 10cm del suelo. Para salvar desniveles, opté por un sistema de &lt;a href=&quot;https://www.amazon.es/Trevendo-Rodamientos-tablas-unidades-120-220/dp/B07PK826JN&quot;&gt;plots regulables&lt;/a&gt; y un suelo de &lt;a href=&quot;https://www.leroymerlin.es/fp/19845112/baldosa-de-exterior-de-composite-marron-90x90-cm-y-50-mm&quot;&gt;balsosas de composite&lt;/a&gt; con el que tenía buena experiencia en el pasado.&lt;/p&gt;

&lt;p&gt;La instalacíon es sencilla pero no cómoda. Las baldosas pesan más de lo que esperaba y una vez montadas sobre los plots es dificil hacer cambios. Tuve que desmontar todo el suelo dos veces para hacer ajustes. ¡El orden de colocación es importante si se quiere que el peso esté bien distribuido entre los plots!&lt;/p&gt;

&lt;h2 id=&quot;la-caseta-abril-2022&quot;&gt;La caseta (Abril 2022)&lt;/h2&gt;
&lt;p&gt;Antes de levantar la caseta en el suelo, decidí poner unos listones de madera en la escuadra de la pared para atornillar la caseta y hacerla un poco más resistente al viento. También va anclada al suelo, pero la pared de ladrillo da más seguridad que el suelo de composite.
&lt;img src=&quot;/images/uploads/posts/observatorio/fijaciones.png&quot; alt=&quot;Fijaciones metálicas de la estructura&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;También aproveché para tirar unos cables desde una caja de enchufes que había en la azotea hasta la caseta. En un principio solo colocaré una caja de dos enchufes, pero algo me dice que acabaré necesitando algo más en el futuro. De entrada, debería haber aprovechado para meter un cable ethernet también que me permitiera tener el ordenador conectado por cable en vez de por red, lo que facilitaría el control remoto con algún sistema VNC. Mientras tanto, espero que el WiFi sea suficiente.
&lt;img src=&quot;/images/uploads/posts/observatorio/cables.png&quot; alt=&quot;Cables de acero de refuerzo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El montaje de esta caseta no es dificil, pero sí laborioso. El libro de instrucciones dice que se tiene montado en 5h con dos personas, pero yo eché al menos 10h. Los paneles son grandes y se necesitan un par de personas para levantarlos y alinearnos, aunque la mayor parte del trabajo puede hacer con una sola persona y mucha paciencia. 
&lt;img src=&quot;/images/uploads/posts/observatorio/caseta-1.png&quot; alt=&quot;Primera fase de construcción de la caseta&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aquí me dediqué únicamente a levantar las paredes y reforzar las esquinas con escuadras, pues al tener que adaptar el techo no podría aprovechar su propio marco para reforzar la estructura.&lt;/p&gt;

&lt;h2 id=&quot;el-techo-abril-2022&quot;&gt;El techo (Abril 2022)&lt;/h2&gt;
&lt;p&gt;El techo es, obviamente, una de las partes más delicadas, pues requiere de un sistema que rieles que hay que adaptar a una caseta que no está diseñada para él. ¡Esto implica que a partir de aquí no hay libro de instrucciones y todo es aventura!&lt;/p&gt;

&lt;p&gt;Exiten varias formas de hacer el techo deslizable. Yo me decidí por la mas sencillas: montar el techo sobre unas ruedas y hacer que estás apoyen sobre unos perfiles en U colocados sobre los paneles laterales.
&lt;img src=&quot;/images/uploads/posts/observatorio/techo-1.png&quot; alt=&quot;Estructura inicial del techo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En cuanto a las ruedas, necesitaba unas no demasiado grandes (para evitar que el techo se levantara mucho) y monodireccionales (pues se movierían sobre un carril recto). Idealmente deberían ser de goma para soportar mejor los pequeños “baches” del riel (cabezas de tornillo que lo unen a los paneles laterales), pero no los encontré y acabé &lt;a href=&quot;https://www.leroymerlin.es/fp/82629499/1-rueda-fija-pp-blanco-con-pletina-35-mm&quot;&gt;comprándolos de plástico&lt;/a&gt;. El perfil que usé fue un &lt;a href=&quot;https://www.leroymerlin.es/fp/82274396/perfil-canal-u48-placa-de-yesos&quot;&gt;U48 para montaje de paneles de pladur&lt;/a&gt;. Monté las ruedas y los rieles directamente sobre las piezas metálicas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/caseta-2.png&quot; alt=&quot;Estructura de madera de la caseta&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;
Una vez el marco del techo en su sitio, toca hacer el cerramiento. Aquí tuve que adaptar unos perfiles que venían con la caseta y colocarlos de forma un poco distinta.&lt;/p&gt;

&lt;h2 id=&quot;revisión-techo-1-mayo-2022&quot;&gt;Revisión techo 1 (Mayo 2022)&lt;/h2&gt;
&lt;p&gt;Tras un rato de pruebas, era evidente que el techo no era suficientemente estable y menos aún los rieles sobre los que asentaba. Los perfiles que daban inclinación al techo eran endebles y se doblaban, y a medida que movía el techo sobre los rieles éstos se torcían sobre sí mismos. Había que añadir una estructura que sorportara el peso y diera rigidez al sistema.&lt;/p&gt;

&lt;p&gt;Decidí reforzar el techo con listones de madera, creando un marco que uniera los cuatro lados para evitar torsiones del techo y atornillar las ruedas ahí en vez de a la chapa.&lt;/p&gt;

&lt;p&gt;También monté unas vigas de madera más robustas que sorportarían el peso del techo y evitaría la torsión de los rieles. 
&lt;img src=&quot;/images/uploads/posts/observatorio/caseta-3.png&quot; alt=&quot;Ampliación de la estructura del observatorio&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con esto el sistema ganaba en rigidez y ya no temía que el techo fuera a salir volando, aunque perdía gran parte de la pendiente que permite el desagüe del techo. Siendo Mayo, sería problema para el futuro.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/caseta-4.png&quot; alt=&quot;Estructura completa del observatorio&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;Posteriormente, añadí unos pilares más y una extensión de las vigas para poder abrir el techo completamente y distribuir mejor el peso. Para evitar taladrar el suelo de la terraza, compré unas jardineras fuertes de madera a la que poder anclar los pilares que irían además rellenas de piedras blancas decorativas.&lt;/p&gt;

&lt;h2 id=&quot;aislamiento-humedad-y-polvo-mayo-2022&quot;&gt;Aislamiento humedad y polvo (Mayo 2022)&lt;/h2&gt;
&lt;p&gt;Con el suelo lleno de rendijas, el techo levantado varios centímetros y varios huecos abiertos por allí y por allá, el observatorio no era precisamente estanco.&lt;/p&gt;

&lt;p&gt;Me decidí por cubrir todo el suelo con &lt;a href=&quot;https://www.leroymerlin.es/fp/82220594/lamina-asfaltica-sbs-4-kg-fv-fp-8x1-m-axton&quot;&gt;tela asfáltica&lt;/a&gt;, que además de prevenir que subiera el agua, polvo o insectos desde el suelo también ayudaría a amortiguar pequeñas vibraciones en el suelo del observatorio. La usé también para cubrir todos los alrededores del techo, cerrando todos los huecos que veía. 
&lt;img src=&quot;/images/uploads/posts/observatorio/aislamiento-1.png&quot; alt=&quot;Instalación del aislamiento&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;suelo-laminado-y-electricidad-junio-2022&quot;&gt;Suelo laminado y electricidad (Junio 2022)&lt;/h2&gt;
&lt;p&gt;Ya con la caseta prácticamente lista, tocaba hacer algunos detalles estéticos y prácticos. Aquellos cables que andaban colgando por ahí desde hace meses acabaron en un &lt;a href=&quot;https://www.leroymerlin.es/fp/19464732/cuadro-electrico-premontado-chint-estanco&quot;&gt;cuadro eléctrico&lt;/a&gt; con sus enchufes y diferencial, y el suelo pasó a ser un &lt;a href=&quot;https://www.leroymerlin.es/fp/82659791/suelo-laminado-artens-intenso8-brits-mod005&quot;&gt;suelo laminado&lt;/a&gt; que a parte de ser mas estético daba solidez al suelo. 
&lt;img src=&quot;/images/uploads/posts/observatorio/esteticos-comb.png&quot; alt=&quot;Acabados exteriores del observatorio&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;aislamiento-térmico-agosto-2022&quot;&gt;Aislamiento térmico (Agosto 2022)&lt;/h2&gt;
&lt;p&gt;Desde el principio sabía que un observatorio metálico, negro, en la costa del sol y apuntando al sur iba a estar bien calentito. El aislamiento térmico era un tema pendiente y esperé hasta Agosto a hacerlo… En retrospectiva, debería haberlo hecho un poco antes. 
&lt;img src=&quot;/images/uploads/posts/observatorio/temp_obs_aug.jpeg&quot; alt=&quot;Temperatura interior del observatorio en agosto&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para el aislamiento de los laterales, opté por crear una cámara de aire con &lt;a href=&quot;https://www.leroymerlin.es/fp/19095790/tablero-de-osb-machiembrado-de-62-5x205x1-5-cm-anchoxaltoxgrosor&quot;&gt;planchas OSB&lt;/a&gt; y &lt;a href=&quot;https://www.leroymerlin.es/fp/81909076/panel-de-poliestireno-aislante-danopren-tejado-40-mm-1-25x0-6-m&quot;&gt;paneles de poliestireno&lt;/a&gt; de 40mm.&lt;/p&gt;

&lt;p&gt;Las planchas de OSB eran demasiado pesadas para el techo, por lo que las sustituí por finos &lt;a href=&quot;https://www.leroymerlin.es/fp/13677755/tablero-de-mdf-crudo-61x122x0-3-cm-anchoxaltoxgrosor&quot;&gt;tableros de MDF&lt;/a&gt; que, aunque no serán tan aislantes, cumplen su función y no agregan tanto peso. &lt;img src=&quot;/images/uploads/posts/observatorio/aislamiento-termico-comb.png&quot; alt=&quot;Paneles de aislamiento térmico&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;revisión-techo-3-agosto-2022&quot;&gt;Revisión techo #3 (Agosto 2022)&lt;/h2&gt;
&lt;p&gt;Aprovechando que saqué el techo, me decidí por aplicar un cambio que llevaba tiempo queriendo hacer. El sistema de rieles en U con las ruedas de plástico empezaba a darme problemas. Aunque corrían, cada vez ponían mas resistencia y hacía más ruido. Las finas láminas de los rieles se estaba doblando y a veces las ruedas se montaban sobre ellas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/ruedas_rodamientos.jpeg&quot; alt=&quot;Ruedas con rodamientos para el techo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;Decidí sustituirlas por unos &lt;a href=&quot;https://ferretea.com/es/pr/guias-puerta-corredera-inferior/guia-para-atornillar-corredera-inferior-galvanizada-barra-3-metros-aumon-PORBA..GUIA-484&quot;&gt;rieles de acero galvanizado&lt;/a&gt; de los que se usan para las puertas correderas de los garajes. Sobre estos, irían unas &lt;a href=&quot;https://www.amazon.es/dp/B08DD28SN5?psc=1&amp;amp;ref=ppx_pop_dt_b_product_details&quot;&gt;nuevas ruedas con rodamientos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;La diferencia en el movimiento es enorme. Se abre/cierra entero con un simple toque, tanto que me me planteo ponerle algun freno para que el aire no lo mueva.
&lt;img src=&quot;/images/uploads/posts/observatorio/techo_abriendo.gif&quot; alt=&quot;Apertura del techo corredizo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;retoques-finales&quot;&gt;Retoques finales&lt;/h2&gt;
&lt;p&gt;Desde los últimos cambios “grandes”, solo ha habido pequeñas mejoras que me hacen el uso más cómodo. Una pequeña repisa donde tener centralizado todo el cableado y hub, así como un pc y una cámara que ya han quedado ahí fijos. 
&lt;img src=&quot;/images/uploads/posts/observatorio/obs_final_1.png&quot; alt=&quot;Observatorio Atalaya terminado&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Y he aquí algunas de las tomas más recientes:
&lt;img src=&quot;/images/uploads/posts/observatorio/rosetta.png&quot; alt=&quot;Rosetta&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/andromeda.png&quot; alt=&quot;Andrómeda&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/pleiades.png&quot; alt=&quot;Pleiades&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/m33.png&quot; alt=&quot;M33&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/observatorio/luna.png&quot; alt=&quot;Luna&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 01 Mar 2022 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/observatorio-atalaya/</link>
        <guid isPermaLink="true">https://pabloreyes.es/observatorio-atalaya/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Experpidemia: La epidemia de los expertos</title>
        <description>&lt;p&gt;Con esto del COVID-19 no paro de ver expertos sanitarios (y peor, no sanitarios) que hacen todo tipo de predicciones sobre la evolución del virus. En Kaggle ya hay más de &lt;a href=&quot;https://www.kaggle.com/search?q=covid+in%3Anotebooks&quot;&gt;1.000&lt;/a&gt; notebooks analizando datos de todo tipo de fuentes, que no son pocas: hay más de 44.000 artículos y papers científicos los cuales &lt;a href=&quot;https://www.kaggle.com/maksimeren/covid-19-literature-clustering&quot;&gt;obviamente han sido analizados en Kaggle&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;En este gráfico, cada puntito es un artículo/paper científico sobre coronavirus:
&lt;img src=&quot;/images/uploads/posts/expertos/scatter_articulos.png&quot; alt=&quot;Artículos publicados por fecha y especialidad&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Justo ayer terminaba en Kaggle &lt;a href=&quot;https://www.kaggle.com/c/covid19-global-forecasting-week-1/notebooks&quot;&gt;una competición&lt;/a&gt; para desarrollar un modelo predictivo de la evolución del bicho que ha contado con 544 equipos. Todo un evento express que ha contado con centenares de mentes creando modelos de Machine Learning, Inteligencia Artificial, Blockchain, Condensadores de flujo y Computanción Cuántica. No, &lt;a href=&quot;https://www.kaggle.com/general/137559#781443&quot;&gt;en serio&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;modelos-complejos&quot;&gt;Modelos complejos&lt;/h2&gt;
&lt;p&gt;Quizás con menos condensadores y qubits, pero Neil Ferguson, una referencia en la transmisión de enfermedades entre humanos y animales y que está aconsejando a Boris Johnson en este asunto, publicaba esta semana que había desarrollado, hace 13 años, un modelo predictivo sobre la expansión de pandemias &lt;em&gt;de miles de lineas de código sin documentar&lt;/em&gt; y que Microsoft, Github, y otras tantas instituciones estaban intentando darle forma para que fuera usable.&lt;/p&gt;

&lt;p&gt;Nassim Taleb, otro experto en temas de incertitumbre y &lt;em&gt;fragilidad&lt;/em&gt; le comentaba lo siguiente:&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Lesson from a long experience with model blowups:&lt;a href=&quot;https://twitter.com/neil_ferguson?ref_src=twsrc%5Etfw&quot;&gt;@neil_ferguson&lt;/a&gt;, if you need a model w/&amp;quot;thousands of lines&amp;quot;, this is not a model useable for real world risk &amp;amp; decisions--rather something with the FRAGILITY of a house built with matches to impress some tenure committee. &lt;a href=&quot;https://t.co/7HZNbPycTV&quot;&gt;https://t.co/7HZNbPycTV&lt;/a&gt;&lt;/p&gt;&amp;mdash; Nassim Nicholas Taleb (@nntaleb) &lt;a href=&quot;https://twitter.com/nntaleb/status/1242235586578190338?ref_src=twsrc%5Etfw&quot;&gt;March 23, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;No tengo ni idea de pandemias –ni siquiera se qué tomarme para un resfriado–, pero sí se algo de sofware y puedo asegurar que un modelo de miles de líneas aparentemente escrito por una sola persona hace más de 13 años y sin documentar es algo para coger con pinzas y que probablemente no debería usarse para tomar ninguna decisión de envergadura.&lt;/p&gt;

&lt;p&gt;Y como este, hay miles.&lt;/p&gt;

&lt;h2 id=&quot;yo-también-soy-experto-en-epidemias&quot;&gt;Yo también soy experto en epidemias&lt;/h2&gt;

&lt;p&gt;Decía antes que acaba de terminar esta competición mundial para encontrar el mejor modelo predictivo para la evolución del COVID-19. Hasta ahora, el modelo más valorado ha sido el &lt;a href=&quot;https://www.kaggle.com/saga21/covid-global-forecast-sir-model-ml-regressions&quot;&gt;COVID Global Forecast: SIR model + ML regressions&lt;/a&gt;, de &lt;a href=&quot;https://www.kaggle.com/saga21&quot;&gt;Patrick Sánchez&lt;/a&gt;, que por cierto es de Barcelona. Patrick ha hecho un excelente trabajo analizando los datos disponibles y aplicando tanto el &lt;a href=&quot;https://www.kaggle.com/saga21/covid-global-forecast-sir-model-ml-regressions&quot;&gt;modelo teórico SIR&lt;/a&gt; como un modelo de Regresión Lineal. Recomiendo leer todo el notebook porque merece la pena.&lt;/p&gt;

&lt;p&gt;Con su modelo predictivo final, el resultado de la predicción para España durante el mes de Marzo ha sido el siguiente:
&lt;img src=&quot;/images/uploads/posts/expertos/regresion-2-spain.png&quot; alt=&quot;Regresión sobre la evolución de casos en España&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Desde luego, ¡un resultado bastante aceptable! El modelo ha sabido predecir con bastante acierto la evolución del virus durante el mes de Marzo.&lt;/p&gt;

&lt;p&gt;Pero… ¿No sabíamos ya, mas o menos, la velocidad de propagación del virus? ¿No nos dicen todos los días a todas horas en televisión cada cuantos días se está duplicando el número de contagiados? ¿Es necesario un trabajo como el de Patrick para, con los datos que disponemos, “predecir” los contagios en Marzo?&lt;/p&gt;

&lt;p&gt;He abierto un Excel, he volcado los datos de contagios reales y he hecho mi propio “modelo” usando matemáticas de primaria (sumar y multiplicar). Quizás hasta he hecho más trabajo de la cuenta, puesto que podía haber usado una servilleta y un boli. Mi resultado es este:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/expertos/regresion-personal-diy.png&quot; alt=&quot;Comparación con una regresión elaborada manualmente&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Exacto. El virus crece de forma exponencial, más o menos. Sorpresa.&lt;/p&gt;

&lt;h2 id=&quot;la-teoría-y-la-práctica&quot;&gt;La teoría y la práctica&lt;/h2&gt;

&lt;p&gt;No digo este “&lt;em&gt;más o menos&lt;/em&gt;” dando a entender que con un poco de trabajo podría hacerlo más exacto, no. Digo &lt;em&gt;más o menos&lt;/em&gt; consciente de que nadie puede preveer la evolución de este virus de forma acertada por muy científico que sea porque no conocemos las medidas que se tomarán mañana: y esas medidas cambiarán drásticamente la evolución del virus. Estamos en medio del meollo, y los datos disponibles son de un par de meses donde distintos gobiernos han tomado distintas medidas en distintos momentos, y cuyos efectos están empezando &lt;strong&gt;ahora&lt;/strong&gt; a ser visibles.&lt;/p&gt;

&lt;p&gt;Si alguien piensa que “&lt;em&gt;bueno, pero estos modelos son para reprensentar qué pasaría si no se tomaran medidas&lt;/em&gt;”, simplementa está reconociendo que no valen de nada. Obviamente que el virus se propagaría rápidamente sino se hiciera nada. Y muy probablemente una curva exponencial refleje más o menos bien su evolución: ¿y de qué vale eso?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/expertos/robot-basura.jpg&quot; alt=&quot;Robot limpiando residuos&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;
Todas las horas de trabajo en el desarrollo de este modelo van a la basura en cuanto que la gente se queda en casa. O cuando cierren unas aerolineas. O cuando se cierre una frontera. O cuando el virus mute. O cuando venga un temporal que cambie el clima durante días. Por supuesto a alguno se le ocurirrá contemplar el impacto de cada una de esas alteraciones para así hacer el modelo &lt;em&gt;mejor&lt;/em&gt;, y muy seguramente acabe con un modelo de miles de líneas sin documentar y que fallaría igualmente por un bug en la librería que usó y que no se actualiza desde hace 13 años.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://cadenaser.com/ser/2020/03/25/ciencia/1585160937_053388.html&quot;&gt;Un estudio de esta misma semana (con científicos del MIT, ojo)&lt;/a&gt; dice que muy probablemente vaya a venir una segunda oleada de infecciones por COVID-19, potencialmente cambiando el curso de la famosa curva y hundiendo en la basura los modelos anteriores. Pero ahora otro estudio de la Universidad de Oxford dice que el &lt;a href=&quot;https://nymag.com/intelligencer/2020/03/oxford-study-coronavirus-may-have-infected-half-of-u-k.html&quot;&gt;50% de los británicos (casi 40 millones) ya está infectado&lt;/a&gt;, haciendo inválidos los datos de todos los modelos desarrollados hasta ahora.&lt;/p&gt;

&lt;p&gt;Todos estos estudios, predicciones y modelos son buenos. Deben seguir estudiándose y mejorando, pero estar cubiertos por el paraguas de la ciencia no los hacen ser correctos.&lt;/p&gt;

&lt;p&gt;Y ellos, que son gente inteligente, por lo general lo saben.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Los expertos Isabel Sola, científica del CSIC que investiga la vacuna del coronavirus, y Adolfo García Sastre, virólogo del Hospital Monte Sinaí de nueva York, aseguran que se pueden dar tres escenarios: que el virus se &lt;strong&gt;erradique&lt;/strong&gt;, que se convierta en &lt;strong&gt;pandemia&lt;/strong&gt; o que acabe siendo una &lt;strong&gt;enfermedad estacional&lt;/strong&gt;.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.publico.es/videos/844627/asi-sera-el-futuro-del-coronavirus-covid-19-segun-los-expertos-cientificos&quot;&gt;Público&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ahora me quedo más tranquilo.&lt;/p&gt;

&lt;p&gt;El propio director de emergencias sanitarias de la Organización Mundial de la Salud también lo reconoce así:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;All predictions are important. &lt;strong&gt;Most predictions are wrong&lt;/strong&gt;. And I think we must be careful with that.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;Dr. Michael Ryan, Executive Director, WHO Health Emergencies Programme&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;es-más-simple&quot;&gt;Es más simple&lt;/h2&gt;
&lt;p&gt;Más que opinar sobre cada noticia que sale en los medios o intentar predecir qué va a pasar los próximos meses (&lt;em&gt;no, es que yo creo que el estado de alerta va a durar 23 días&lt;/em&gt;), lo mejor que podemos hacer es aceptar que estamos ante un evento que no conocemos y estamos probando cosas.&lt;/p&gt;

&lt;p&gt;Lo mejor realmente que podemos hacer, y para lo que no necesitamos decenas de miles de papers científicos ni competiciones mundiales para hacer predicciones exactas, es recomendarle a la gente que sigan unas normas básicas hasta que encontremos una solución mejor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lávate mucho las manos con jabón, no te toques la cara, y no te acerques a mucha gente.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/expertos/Covid-19-Transmission-graphic-01.gif&quot; alt=&quot;Diagrama de transmisión de la COVID-19&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El efecto que este gráfico puede tener en la erradicación o control de virus siendo tan visual y fácil de entender es posiblemente mayor que el efecto que tenga el trabajo de Patrick y de los otros cientos de data scientists de Kaggle, por mucho que hacer modelos predictivos sea un trabajo tremendamente más complejo.&lt;/p&gt;

&lt;h2 id=&quot;y-para-el-próximo-virus&quot;&gt;¿Y para el próximo virus?&lt;/h2&gt;
&lt;p&gt;En unos años, o décadas, volverá a aparecer otro virus que se expandirá por el mundo y acabaremos sufriendo lo mismo que ahora, muy seguramente, o quizás más. Tras el Covid-19, los estados se prepararán para disponer de más material sanitario, se reforzará la sanidad pública y se adaptará alguna ley que permita actuar de formas más rápida u organizada. Pero la siguiente pandemia quizás será de otro tipo y no valdrán las millones de mascarillas que tengamos en reserva, o tendrá un R0 nunca visto antes y para el cual no había forma de estar preparado, o sus sintomas se manifestarán tras 30 días de incubación y cuando nos demos cuenta estaremos todos infectados, o una semana antes se habrán puesto unos nuevos aranceles a China y nos dirán: &lt;em&gt;tus mascarillas te las haces tú, guapo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;No hay forma de estar 100% preparados para eventos así. Desde que empezó a salir en televisión Fernando Simón explicando cómo estaba evolucionando el virus sabía que le iba a caer una gorda. Dijera lo que dijera, se tomaran las medidas que se tomaran, íbamos a criticarlo. Porque este hombre, aunque fuera la mejor persona de todo el país para gestionar esta situación, no tiene forma de hacerlo. Ni él, ni el gobierno, ni su equipo de expertos. Desde que le nombraron portavoz ya estaba vendido.&lt;/p&gt;

&lt;p&gt;Cuando salgamos de esta será gracias a la capacidad de adaptarnos a sucesos imprevisibles como este, no gracias a las predicciones exactas de algún experto ni a un algoritmo extremadamente complejo. Las teorías son frágiles, y siempre se van adaptando para cubrir mejor el último caso en el que fallaron: así hay un nuevo paper mejor que el anterior, a la espera del próximo fracaso para perder el trono.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;La fe inquebrantable en la predicción científica con independencia del ámbito, la meta a reducir el futuro a expresiones numéricas sean fiables o no. Y es que nos las hemos arreglado para transformar la creencia religiosa en credulidad para todo lo que se disfrace de ciencia. &lt;/p&gt;

  &lt;p&gt;&lt;cite&gt; Nassim Taleb&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
        <pubDate>Thu, 26 Mar 2020 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/experpidemia-epidemia-expertos/</link>
        <guid isPermaLink="true">https://pabloreyes.es/experpidemia-epidemia-expertos/</guid>
        
        
        <category>Datos</category>
        
      </item>
    
      <item>
        <title>Vivienda en Barcelona: un análisis desde el Catastro</title>
        <description>&lt;p&gt;Cuando llegué a vivir a Barcelona hace ya 5 años me enamoré de sus barrios, sus calles y su arquitectura. Todavía hoy, camino al trabajo cada día, sigo mirando edificios de Muntaner o Diagonal y me imagino viviendo en uno de ellos. Me imagino que son enormes y de techos altos, construidos en una época donde el metro cuadrado no se exprimía tanto.&lt;/p&gt;

&lt;p&gt;Un día, buscando año de consutrucción y detalles del &lt;a href=&quot;https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCListaBienes.aspx?del=8&amp;amp;muni=900&amp;amp;rc1=7844319&amp;amp;rc2=DF2874D&amp;amp;from=OVCBusqueda&amp;amp;final=&amp;amp;pest=coordenadas&amp;amp;latitud=41.406695&amp;amp;longitud=2.134154&amp;amp;gradoslat=41&amp;amp;minlat=23&amp;amp;seglat=51&amp;amp;gradoslon=2&amp;amp;minlon=11&amp;amp;seglon=24&amp;amp;x=&amp;amp;y=&amp;amp;huso=0&amp;amp;tipoCoordenadas=2&amp;amp;TipUR=Coor&quot;&gt;número 4 de Plaça Bonanova&lt;/a&gt; (1936, 20 viviendas de unos 300m², 1.3M€/venta y 4.200€/alquiler. Si os lanzais invitadme un día) pensé que quizás podía encontrar información masiva sobre la vivienda en Barcelona en el propio catastro y descubrir alguna curiosidad. Y así fue.&lt;/p&gt;

&lt;h2 id=&quot;los-datos&quot;&gt;Los datos&lt;/h2&gt;

&lt;p&gt;La información del Catastro que he usado se ofrece un &lt;a href=&quot;http://www.catastro.minhap.es/documentos/formatos_intercambio/catastro_fin_cat_2006.pdf&quot;&gt;formato propio .CAT&lt;/a&gt;, que no es más que una formato tabular de ancho fijo que divide su información en distintos tipos o secciones: fincas, construcciones, inmuebles, etc. Por suerte para mi, alguien ya se me adelantó y creó un &lt;a href=&quot;https://github.com/GuillemHerrera/cat2csv&quot;&gt;script para transformar ficheros .CAT a csv&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;El primer paso es identificar qué hay en cada fichero del catastro. Tras lidiar un rato con las distintas columnas y la especificación del propio fichero entiendo que de los distintos tipos de ficheros que hay me interesan 4:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;registro de finca (11) → registro de unidad constructiva (13) → registro de construcción (14) → registro de inmueble (15)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Juntando información de distintas secciones y ficheros, limpiando datos y haciendo algunas transformaciones tenemos un set digno para trabajar.&lt;/p&gt;

&lt;h2 id=&quot;tipos-de-inmuebles&quot;&gt;Tipos de inmuebles&lt;/h2&gt;

&lt;p&gt;El registro de inmuebles nos da información sobre el destino de cada uno en la columna &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clave_uso&lt;/code&gt;. Observando este dato podemos obtener algunas conclusiones:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/tipos_inmuebles.png&quot; alt=&quot;Tipos de inmuebles&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Viviendas y almacenes/estacionamientos cubren el 90% de los inmuebles. Los edificios religiosos son claramente los mas grandes de la ciudad con casi 900m² de media frente a los 83m²  de la vivienda media barcelonesa. Entre 1960 y 1975 se construyó mucho… de todo en Barcelona.&lt;/p&gt;

&lt;p&gt;Para este caso, me centraré sólo en las viviendas.&lt;/p&gt;

&lt;h2 id=&quot;fechas-de-construcción&quot;&gt;Fechas de construcción&lt;/h2&gt;

&lt;p&gt;El Catastro contiene información de fincas de Barcelona desde hace más de mil años (literalmente), pero revisando un poco la calidad de los datos más antiguos encontramos cosas un tanto sospechosas.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/vivienda_rosello_1000.png&quot; alt=&quot;Edificio de viviendas en la calle Rosselló&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Existen más de 6.000 viviendas activas con registros previos al año 100 (de hecho, son todos del año 0), mientras que entre el 100 y el 1800 no hay más de 600. Raro raro ese año 0.&lt;/p&gt;

&lt;p&gt;Además, revisando algunas viviendas aleatorias anteriores a 1800 he encontrado algunas incoherencias que me hacen sospechar de los funcionarios del catastro de la época, como esta casa &lt;a href=&quot;https://www1.sedecatastro.gob.es/CYCBienInmueble/OVCListaBienes.aspx?RC1=0337114&amp;amp;RC2=DF3803E&amp;amp;RC3=&amp;amp;RC4=&amp;amp;esBice=&amp;amp;RCBice1=&amp;amp;RCBice2=&amp;amp;DenoBice=&amp;amp;pest=rc&amp;amp;final=&amp;amp;RCCompleta=0337114DF3803E&amp;amp;from=OVCBusqueda&amp;amp;tipoCarto=nuevo&amp;amp;ZV=NO&amp;amp;ZR=NO&quot;&gt;Carrer Rosello&lt;/a&gt; que data del año 1000. No se Rick… parece falso.&lt;/p&gt;

&lt;p&gt;Me quedaré sólo con las viviendas construidas a partir de 1900.&lt;/p&gt;

&lt;h2 id=&quot;evolución-de-la-vivienda-en-barcelona&quot;&gt;Evolución de la vivienda en Barcelona&lt;/h2&gt;

&lt;p&gt;¿Eran las casas de antes mas grandes que las de ahora? ¿De qué época son la mayoría de las viviendas de la ciudad condal? ¿Cómo afectó el boom inmboliario reciente a la oferta de vivienda en Barcelona? Los datos del catastro pueden ayudarnos a responder algunas de estas preguntas.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/cantidad-tamano.png&quot; alt=&quot;Evolución de la cantidad y el tamaño de las viviendas en Barcelona&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;De estas gráfica podemos sacar algunas conclusiones interesantes. En los años 20s y 30s se da la primera época de crecimiento importante del siglo XX. Es en estos años, aprovechando la &lt;a href=&quot;https://es.wikipedia.org/wiki/Exposici%C3%B3n_Internacional_de_Barcelona_(1929)&quot;&gt;Exposición Internacional de Barcelona&lt;/a&gt; en 1929 se urbaniza parte de la montaña de Montjuïc dejándo perlas como el Palacio Nacional, la Fuente Mágica o el Pueblo Español.&lt;/p&gt;

&lt;p&gt;En los años 60 vemos el resultado del desarrollismo impulsado por el alcalde &lt;a href=&quot;https://es.wikipedia.org/wiki/Jos%C3%A9_Mar%C3%ADa_de_Porcioles&quot;&gt;José María de Porcioles&lt;/a&gt;. Se construyen grandes avenidas, bloques de pisos, se renuevan alumbrados, alcantarillados, se hace nuevas líneas de metro, etc. La ciudad se consolida como un referente en ferias y congresos.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A partir de la década de 1960, el crecimiento económico y el boom turístico incrementará el número de urbanizaciones más o menos próximas a la ciudad jardín en áreas litorales o de montaña ocupando el territorio, a menudo de forma indiscri-minada, cuando no ilegal.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;&lt;a href=&quot;http://www.ceut.udl.cat/wp-content/uploads/02c-tatjer.pdf&quot;&gt;La vivienda en cataluña desde una perspectiva histórica, Mercè Tatjer&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si alguno esperaba encontrar una barra que llegara hasta el espacio entre el año 2000 y 2008, siento decepcionar. El boom inmobiliario tuvo un efecto limitado en Barcelona en lo que a número de nuevas viviendas se refiere.&lt;/p&gt;

&lt;p&gt;En cuanto al tamaño medio de las viviendas en el tiempo (línea azul) me llevé una sorpresa. Siempre había pensado eso de que las viviendas antiguas eran más grandes, pero los datos dicen lo contrario. No soy capaz de explicar el subidón de los años 40: ¿se construyeron pocas casas, pero muy grandes? No lo se, pero la tendencia parece ser que cada vez las casas son más grandes, &lt;a href=&quot;https://www.elmundo.es/economia/2017/02/10/589cc14bca4741f1318b4671.html&quot;&gt;¿quién lo iba a decir?&lt;/a&gt;.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/viviendas_por_tamano.png&quot; alt=&quot;Distribución de viviendas por tamaño&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aún así, el tamaño medio se situa en 83², siendo 75m² el tamaño mas frecuente de las viviendas en Barcelona.&lt;/p&gt;

&lt;h2 id=&quot;distritos&quot;&gt;Distritos&lt;/h2&gt;

&lt;p&gt;Pero bueno, no todos los barrios de Barcelona son iguales. Uno de los atributos que tenemos por cada finca es el distrito al que pertenecen. Desgraciadamente, este distrito viene representado por un número del 1 al 10. Poco útil por sí sólo, pero acompañado de las coordenadas de los inmuebles de cada distrito podemos inventar algo.&lt;/p&gt;

&lt;h3 id=&quot;sistemas-de-coordenadas&quot;&gt;Sistemas de Coordenadas&lt;/h3&gt;

&lt;p&gt;Cada finca incluye unas coordenadas que a simple vista ya resultan raras, al no ser las típicas coordenadas de longitud/latitud a las que estamos acostumbrados. Estas coordenadas tienen esta forma (42766481, 458170071) y están en el sistema geoespacial UTM de la zona 31N (&lt;a href=&quot;https://epsg.io/25831&quot;&gt;EPSG:25831&lt;/a&gt;), por lo que tenemos que transformarlas a WGS 84 (&lt;a href=&quot;https://epsg.io/4326&quot;&gt;EPSG:4326&lt;/a&gt;) que es el que usamos normalmente.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/coordenadas.png&quot; alt=&quot;Coordenadas de viviendas de Barcelona&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;identificando-distritos&quot;&gt;Identificando distritos&lt;/h3&gt;

&lt;p&gt;Si seleccionamos un conjunto de 1000 viviendas al azar y les aplicamos un color a cada distrito, podemos plasmarlas en un mapa para conseguir una primera idea del área que cubren estos distritos.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/viviendas_scatter.png&quot; alt=&quot;Dispersión geográfica de viviendas&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aunque a simple vista ya se identifican más o menos qué zona incluye cada uno, sería mucho mejor si pudiéramos cercarlos con una muralla virtual que nos mostraran mucho más fielmente los límites de cada uno. Esto lo conseguiremos identificando los puntos más limítrofes de cada color, es decir, los que están más a las afueras de cada grupo y uniendo dichos puntos hasta formar un polígono. Para ello, hacemos uso de un &lt;a href=&quot;https://en.wikipedia.org/wiki/Convex_hull&quot;&gt;Convex Hull&lt;/a&gt;.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/convex_hull.png&quot; alt=&quot;Envolvente convexa de las viviendas&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¡Ahora mucho mejor! Cada distrito está perfectamente limitado y separado de los demás. Ahí ya vemos Ciutat Vella, Eixample, Montjuïc, etc.&lt;/p&gt;

&lt;h3 id=&quot;evolución-por-distrito&quot;&gt;Evolución por distrito&lt;/h3&gt;

&lt;p&gt;¿De qué forma ha evolucionado la construcción de nueva vivienda en cada distrito? Los datos anteriores nos dan una idea general, pero analizando uno por uno encontramos cosas interesantes.
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/distritos_evolucion.png&quot; alt=&quot;Evolución de la vivienda por distritos&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En los años 20-40 se aprecia un crecimiento importante sobre los distritos de Ciutat Vella, Sants-Montjuic, Gràcia y Eixample que parece acabar a final de los años 30s debido, imagino, a la guerra civil. La zona de Sarrià-Sant Gervasi es la única que en plena posguerra mantiene un crecimiento estable y sin baches.&lt;/p&gt;

&lt;p&gt;Aunque en los años 60-80 que hablábamos antes hubo crecimiento la ciudad en general, el distrito de Ciutat Vella no se vió prácticamente afectado, lo cual tiene sentido siendo el casco antiguo de la ciuad, donde poco se ha edificado en los últimos 100 años.&lt;/p&gt;

&lt;h2 id=&quot;las-calles&quot;&gt;Las calles&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/calles.png&quot; alt=&quot;Antigüedad media de las viviendas por calle&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Cualquiera que conozca Barcelona puede intuir cuales son las calles/avenidas más pobladas básicamente por la longitud de algunas de ellas. Lo que no esperaba es que Gran Via de las Corts Catalanas tuviera casi el doble de viviendas que la segunda de la lista, Meridiana.&lt;/p&gt;

&lt;p&gt;De las grandes, &lt;em&gt;Muntaner&lt;/em&gt; se lleva la palma en cuanto a tamaño medio con 127m² seguida de Diagonal con 118m². Pero por muy largas y pobladas que sean estas calles, no son las que tienen los mayores pisos. Para eso tenemos que un poco más arriba
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/calles_m2.png&quot; alt=&quot;Superficie media de las viviendas por calle&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ferran Agullo, Pau Casals, Bori i Fontestà, Calatrava… las calles con las casas más grandes de Barcelona llevan nombre de los mejores artistas y profesionales de nuestra tierra, aunque la primera posición la obstenta la Reina Victoria de Reino Unido, con un tamaño medio de 247m² y, según idealista, un precio de compra-venta de sobre 1.6M€.&lt;/p&gt;

&lt;h2 id=&quot;bonus-mapa-de-calor-por-tamaño-medio-de-vivienda&quot;&gt;Bonus: Mapa de calor por tamaño medio de vivienda&lt;/h2&gt;

&lt;p&gt;¿Entonces, donde están las casas más grande? Pues agrupando las viviendas por fincas y con un el tamaño medio normalizado podemos montar el siguiente mapa de calor donde los tonos más rojizos representan el tamaño medio más grande (azul&amp;lt;cyan&amp;lt;lima&amp;lt;naranja&amp;lt;rojo).
&lt;img src=&quot;/images/uploads/posts/catastro_barcelona/heatmap.png&quot; alt=&quot;Mapa de calor de la vivienda en Barcelona&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como era de esperar la Ciutat Vella tiene los pisos más pequeños de Barcelona (y más antiguos) y se observan viviendas por lo general más grandes una vez se pasa &lt;a href=&quot;https://www.youtube.com/watch?v=Q8CJXvKc4aA&quot;&gt;barrera invisible de la Diagonal&lt;/a&gt; (marcada en rojo), con excepción del barrio de Gràcia por arriba y La Nova Esquerra de l’Eixample por debajo. El distrito de Sant Gervasi se lleva la palma.&lt;/p&gt;

&lt;p&gt;Hasta aquí llego hoy. Con los datos del catastro pueden sacarse muchos más detalles intersantes como la evolución de las zonas comerciales, la cantidad de construcciones subterráneas o la altura de los bloques en el tiempo. Eso se queda pendiente para otro día.&lt;/p&gt;

&lt;p&gt;¡Gracias!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Como de costumbre, la información aquí descrita está sujeta a errores y no debería usarse para otra cosa que no sea disfrutar de un rato de lectura y aprender algunas cosas de Barcelona.&lt;/p&gt;

&lt;p&gt;Para este post usé &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python&lt;/code&gt;+&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pandas&lt;/code&gt;+&lt;a href=&quot;https://github.com/nalepae/pandarallel&quot;&gt;pandaral·lel&lt;/a&gt; para el análisis y manejo de los datos, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matplotlib&lt;/code&gt; para la generación de gráficos, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pyproj&lt;/code&gt; para las transformaciones entre sistema de coordenadas y &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ipyleaflet&lt;/code&gt; para los mapas. El código puede encontrarse en &lt;a href=&quot;https://github.com/PabloReyes/catastro-barcelona-stats/blob/master/analisis_catastro.ipynb&quot;&gt;mi github&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 03 Feb 2020 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/vivienda-catastro-barcelona-machine-learning/</link>
        <guid isPermaLink="true">https://pabloreyes.es/vivienda-catastro-barcelona-machine-learning/</guid>
        
        
        <category>Data</category>
        
      </item>
    
      <item>
        <title>Estrategias de trading y análisis sentimental</title>
        <description>&lt;p&gt;Quien me conoce sabe que hay dos temas que me entusiasman especialmente: la tecnología y los mercados financieros. Cuando puedo juntar ambas y hacer algo útil es tremendamente emocionante. Hace unos meses tuve la suerte de poder trabajar con una gestora de patrimonios y una empresa del sector petrolero en un proyecto de consultoría donde desarrollamos un modelo predictivo sobre precios del crudo basado en unos indicadores técnicos y un análisis sentimental de redes sociales y noticias. Explicaré por encima de qué iba el asunto, pero vamos a aclarar un par de conceptos.&lt;/p&gt;

&lt;h2 id=&quot;procesamiento-del-lenguage-y-análisis-sentimental&quot;&gt;Procesamiento del lenguage y análisis sentimental&lt;/h2&gt;

&lt;p&gt;El procesamiento del lenguaje natural (&lt;strong&gt;NLP&lt;/strong&gt;) es una rama derivada de distintas ciencias que trata la interacción y el entendimiento entre el lenguaje humano y las máquinas. Éste área es tremendamente extensa y permite desde que Alexa nos entienda cuando le hablamos hasta que Google sea capaz de traducir de un idioma a otro. Una de las diversas aplicaciones que derivan de NLP es en &lt;strong&gt;análisis sentimental&lt;/strong&gt;, que, a grandes rasgos, busca detectar si un mensaje es positivo o negativo. Vamos a ver un ejemplo con dos frases que podríamos encontrar un día cualquiera en twitter: 
&lt;img src=&quot;/images/uploads/posts/trading-sentimental/vader_example.gif&quot; alt=&quot;Ejemplo de análisis de sentimiento con VADER&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En el primer mensaje digo que que Microsoft ha ido muy bien últimamente y que creo que sus acciones subirán un 10% antes de final del trimestre. Claramente soy optimista, y el algoritmo así lo detecta con un sentimiento de 0.86 en la escala [-1, +1] (positivo).&lt;/p&gt;

&lt;p&gt;En el segundo, donde me muestro preocupado por una posible guerra y hablo de aviones que se estrellan, el algoritmo arroja un sentimiento de -0.89 en la escala [-1, +1] (negativo).&lt;/p&gt;

&lt;p&gt;Las posibilidades de estos algoritmos son infinitas. Desde detectar si un usuario está mosqueado mientras habla con un chatbot hasta saber qué piensan las redes sociales de una película.&lt;/p&gt;

&lt;h2 id=&quot;estrategia-de-trading-y-backtesting&quot;&gt;Estrategia de trading y backtesting&lt;/h2&gt;

&lt;p&gt;Una &lt;strong&gt;estrategia de trading&lt;/strong&gt; se compone de una serie de reglas que fijan cuándo y cuanto se debe comprar o vender un activo financiero. En estas estrategias suelen usarse indicadores técnicos como podría ser el precio, el volumen de compra/venta del día, la media de precio de las últimas semanas, etc. Para saber si nuestra estrategia es buena debemos ponerla a prueba, y no siempre (por no decir nunca) tenemos el tiempo ni el capital para probarla en un entorno real. El mecanismo para probar la estrategia de una manera lo más real posible consiste en viajar al pasado y hacer como si cada vez que nuestra estrategia recomendaba comprar o vender le hubiéramos hecho caso. A esto se le llama &lt;a href=&quot;https://www.investopedia.com/articles/trading/05/030205.asp&quot;&gt;backtesting&lt;/a&gt;.
&lt;img src=&quot;/images/uploads/posts/trading-sentimental/buying_selling.gif&quot; alt=&quot;Señales de compra y venta de la estrategia&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Esto tiene la siguiente pinta: &lt;em&gt;Viajamos&lt;/em&gt; al pasado y ponemos a correr nuestra estrategia. Ésta se va ejecutando a toda velocidad pasando los días en milisegundos pasado y comprobando si las condiciones de compra/venta que hemos definido se cumplen. Cuando lo hacen, simula una orden en un broker y va actualizando nuestro balance a medida que éstas se ejecutan. Al final del test, sabremos si la estrategia fue rentable o no. Que durante un periodo anterior la estrategia hubiera acertado con un buen margen no garantiza que lo vaya a hacer el año siguiente, pero es lo mejor que tenemos hasta ahora.&lt;/p&gt;

&lt;p&gt;Veamos el test anterior de forma gráfica. Los triángulos verdes señalan órdenes de compra y los rojos de venta. En la parte superior, los puntos azules son trades completos de compra/venta donde hemos salido ganando y los rojos donde hemos salido perdiendo. 
&lt;img src=&quot;/images/uploads/posts/trading-sentimental/grafica_backtrader.png&quot; alt=&quot;Resultado del backtest de la estrategia&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al final de la prueba de 5 meses, habríamos convertido $10.000 en $11.355: una rentabilidad del 13.55%. Aparentemente somos unos genios, pero la realidad es que hubieramos hecho mejor comprando 1 sola vez en Enero y vendiendo en Mayo (o no vendiendo nunca), pues en el mismo periodo la acción se movió al alza un 40%. Incluo es posible que eligiendo días al azar para realizar compras y ventas hubieramos obtenido una rentabilidad positiva también. Que una estrategia obtenga rentabilidad positiva en un periodo no significa que sea buena, pero eso ya lo discutiremos otro día.&lt;/p&gt;

&lt;h2 id=&quot;el-proyecto-un-dashboard-para-ayudar-al-departamento-de-compras&quot;&gt;El proyecto: un dashboard para ayudar al departamento de compras&lt;/h2&gt;

&lt;p&gt;La idea del proyecto consistía en ofrecer un dashboard con información útil para el departamento de compras de una empresa del sector petrolero. Esta compañía compraba y vendía ~2M € diariamente de crudo, por lo que dependía enormemente del precio de WTI en un momento concreto. Relizar la compra/venta a las 10AM o a las 3PM podía tener un resultado tremendamente distinto según se moviera el petróleo ese día. 
&lt;img src=&quot;/images/uploads/posts/trading-sentimental/volatilidad_petroleo.png&quot; alt=&quot;Volatilidad del precio del petróleo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Vemos aquí la volatilidad del petróleo en estos inicios de 2020, donde una noticia de madrugada hizo subir su precio un 13% en minutos y un tweet de Donal Trump puede volvió a hacerlo caer en instantes.&lt;/p&gt;

&lt;p&gt;Hay ciertos activos que son especialmente sutiles a cambios de sentimiento. Uno muy habitual en el que usar análisis sentimental son las criptomonedas: recomiendo echarle un vistazo a &lt;a href=&quot;https://www.linkedin.com/pulse/twitterwatcher-why-twitter-trx-lukasz-wedel/&quot;&gt;Twitter Watcher&lt;/a&gt;, un proyecto de &lt;a href=&quot;https://www.linkedin.com/in/lukaszwedel/&quot;&gt;Lukasz Wedel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por un lado, la gestora diseñó una estrategía técnica inicial que se fue perfilando y adaptando a medida que incluíamos nuevas fuentes de datos y probábamos más escenarios y configuraciones. Su desarrollo partió de una estrategia conocida basada en indicadores de la &lt;a href=&quot;https://www.investopedia.com/terms/i/ichimoku-cloud.asp&quot;&gt;Nube de Ichimoku&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/trading-sentimental/ichimoku.png&quot; alt=&quot;Indicador Ichimoku aplicado al petróleo&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Por otro lado, la compañía nos ayudó con una lista de fuentes de información que nos serían útiles: desde cuentas de Twitter a periódicos y fuentes de información privadas. Analizando todas esas fuentes de forma periódica, deberíamos ser capaces de identificar un sentimiento medio y fuertes cambios de éste que nos permitiera complementar la estrategia de la gestora con un nuevo indicador sentimental: es decir, a todos los indicadores técnicos como el precio medio, el volumen o RSI, añadimos un indicador que nos decía en un instante en concreto qué sentimiento había sobre el petróleo: podeis observarlo en la parte inferior del gráfico anterior.&lt;/p&gt;

&lt;p&gt;Con estos datos, cualquiera podría desarrollar una estrategia del tipo:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Cuando el precio medio de la última semana sea mayor que el precio medio del último mes, y además se haya producido un cambio positivo en el sentimiento de más de un 40% en la última hora, recomienda comprar. Cuando haya una caída fuerte en el sentimiento, recomienda vender.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(es sólo un ejemplo basado en &lt;a href=&quot;https://www.theforexchronicles.com/the-ema-5-and-ema-20-crossover-trading-strategy/&quot;&gt;cruces de EMAs&lt;/a&gt;, que nadie piense en usar esta estrategia tal cual en el mundo real)&lt;/p&gt;

&lt;p&gt;Finalmente, en un dashboard se mostraban los eventos más importantes actualizados cada minuto (indicadores técnicos, tweets, noticias, cambios repentinos en el volumen de compra/venta, etc) y un indicador propio resultado de la combinación de todo el resto que ayudaba a tomar decisiones al responsable de compras.&lt;/p&gt;

&lt;p&gt;La próxima vez es posible que intente usar otras fuentes de información alternativa como &lt;a href=&quot;https://www.linkedin.com/company/ravenpack/&quot;&gt;RavenPack&lt;/a&gt; o &lt;a href=&quot;https://www.linkedin.com/company/quandl/&quot;&gt;Quandl&lt;/a&gt;, pero los resultados fueron positivos y sirvieron para acercar a un par de empresas tradicionales a este mundo del fintech y a mi para darme cuenta de cuán lejos están aún muchas compañías de aprovechar todo lo que la tecnología podría ofrecerles.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Para este trabajo usé python + backtrader como plataforma de backtesting, NLKT con el léxico VADER para el análisis sentimental, Google Cloud Platform para el deployment de las aplicaciones y Firebase como base de datos no relacional.&lt;/p&gt;

&lt;p&gt;Lo explicado aquí tiene únicamente interés divulgativo para quien no conoce mucho este sector y se han dejado muchos detalles fuera: el análisis sentimental es más complejo de lo explicado (“es muy chulo” es un mensaje positivo si hablamos de un reloj, pero negativo si hablamos de una persona), un algoritmo que compra y venta con alta frecuencia tendrá un alto gasto en comisiones, etc. Los ejemplos no son los realmente usados en el proyecto.&lt;/p&gt;
</description>
        <pubDate>Wed, 15 Jan 2020 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/trading-sentimental/</link>
        <guid isPermaLink="true">https://pabloreyes.es/trading-sentimental/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Analizando jugadores de La Liga con Machine Learning</title>
        <description>&lt;p&gt;Hace unos días me topé con una base de datos con información estadística de todos los equipos, ligas y jugadores de fútbol europeos. No soy amante del futbol, pero sí de los datos y de su análisis, y como este fin de semana he tenido tiempo y tenía ganas de meterle mano a algunas herramientas que tenía medio oxidadas, he decidido hacer algo con ellos.&lt;/p&gt;

&lt;p&gt;Mi propósito como total desconocedor de jugadores de fútbol es encontrar similitudes entre jugadores de La Liga sin haber visto ni un sólo partido y sin conocer más que a dos o tres jugadores de oídas. A ver si lo consigo.&lt;/p&gt;

&lt;h2 id=&quot;los-datos&quot;&gt;Los datos&lt;/h2&gt;

&lt;p&gt;La base de datos contiene información estadística de jugadores de fútbol en ligas europeas. Estas estadísticas se dividen en cuatro grupos:&lt;/p&gt;

&lt;h3 id=&quot;1-generales&quot;&gt;1. Generales&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Edad, posición, altura, peso&lt;/li&gt;
  &lt;li&gt;Partidos jugados (enteros o una parte), minutos jugados&lt;/li&gt;
  &lt;li&gt;Goles, asistencias, disparos a puerta totales&lt;/li&gt;
  &lt;li&gt;Tarjetas rojas y amarillas&lt;/li&gt;
  &lt;li&gt;Balones ganados en el aire, % de pases buenos&lt;/li&gt;
  &lt;li&gt;Número de veces considerado mejor jugador del partido&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-defensivas&quot;&gt;2. Defensivas&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Entradas, intercepciones, faltas cometidas por partido&lt;/li&gt;
  &lt;li&gt;Fueras de juego ganados, despejes, regateos recibidos por partido&lt;/li&gt;
  &lt;li&gt;Disparos bloqueados por partido&lt;/li&gt;
  &lt;li&gt;Goles en propia puerta&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-ofensivas&quot;&gt;3. Ofensivas&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Disparos a puerta por partido, pases clave por partido&lt;/li&gt;
  &lt;li&gt;Regateos por partido, controles malos&lt;/li&gt;
  &lt;li&gt;Faltas a favor por partido, fueras de juego por partido&lt;/li&gt;
  &lt;li&gt;Controles malos por partido, desposesiones por partido&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;4-pases&quot;&gt;4. Pases&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Pases y pases clave por partido&lt;/li&gt;
  &lt;li&gt;Porcentaje pases buenos&lt;/li&gt;
  &lt;li&gt;Centros, pases largo y pases al hueco por partido&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En total, contamos con unos 30 atributos cuantificables por cada jugador. ¿Algo podremos hacer, no?&lt;/p&gt;

&lt;h2 id=&quot;un-primer-vistazo&quot;&gt;Un primer vistazo&lt;/h2&gt;

&lt;p&gt;Antes de entrar en detalle, lo primero que vamos a hacer es generar una matríz de correlación: esta matriz nos permite ver de una forma muy visual qué valores tienen impacto en otros. De aquí esperamos ver cosas como que los jugadores altos ganan más balones en el aire que los bajos o que los jugadores que hacen más faltas reciben más tarjetas. Estas suposiciones no tienen porqué ser ciertas, pero nos pueden ayudar a detectar si hemos hecho algo mal.
&lt;img src=&quot;/images/uploads/posts/laliga-ml/matriz_correlacion.png&quot; alt=&quot;Matriz de correlación de estadísticas de jugadores&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En esta matriz, el tamaño de cada cuadrado representa una correlación entre 0% y 100%. Los colores azules implican una correlación positiva:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Goles + JdP&lt;/strong&gt;: Los jugadores que marcan más goles suelen ser los que consiguen el Mejor Jugador Del Partido&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PP_Regateado + PP_Entradas&lt;/strong&gt;: Los jugadores a los que regatean hacen más entradas. Seguramente porque juegan en la defensiva.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y a la inversa, los colores más rojos implican correlaciones negativas:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Altura + PP_PaseCentro&lt;/strong&gt;: Claramente los jugadores altos no hacen muchos centros, porque deben ser ellos los que están recibiendo.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PP_PasesClave + PP_Despejes&lt;/strong&gt;: Despejar es cosa de defensas, poner pases de gol no.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sin hacer ningún análisis exhaustivo, parece que las correlaciones tienen sentido, por lo que parece que los datos son fiables. Es un buen comienzo.&lt;/p&gt;

&lt;h2 id=&quot;limpieza-de-datos&quot;&gt;Limpieza de Datos&lt;/h2&gt;

&lt;p&gt;Cuando trabajamos con grandes volúmenes de datos es importante entender que no todos los datos nos valen, y los que valen muchas veces no están preparados para ser usados. En casos como este en el que tenemos datos muy dispares en su naturaleza (alturas en cm, porcentajes de pases buenos, número de goles, etc.) es importante normalizar y escalar estos datos para que no acabemos comparando peras con manzanas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/laliga-ml/escalado.png&quot; alt=&quot;Datos de jugadores después del escalado&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como vemos, antes del escalado teníamos tres atributos totalmente dispares que nos complicaban su comparación: los jugadores marcan entre 0 y 20 goles, pero su porcentaje de acierto en pases es de entre 0% y 100%, mientras que sus alturas van desde 160cm hasta 200cm. Al escalarlos, todos los valores se mueven ahora entre -5 y 5. Han perdido su “naturaleza”, pero no la necesitamos para nuestro análisis.&lt;/p&gt;

&lt;p&gt;Por otro lado, tenemos información de más de 500 jugadores. Realmente no necesitamos usarlos todos. Además, cualquier representación gráfica que hiciéramos con todos ellos sería inteligible. Por ello, vamos a usar en nuestro estudio sólo los jugadores que han jugado más minutos. Ponemos el límite en el percentil 80, que en nuestro set de datos son 1.192 minutos. Lionel Messi no entraba por haber jugado sólo 900 minutos, pero como sé que alguno lo echaría de menos lo he añadido también.&lt;/p&gt;

&lt;p&gt;Existen datos que realmente no nos aportan mucha información del “comportamiento” del jugador, sino más bien de su físico o situación. No nos interesa usar atributos como la altura, el peso, la edad o los minutos jugados. Todos los atributos que no son un resultado del propio juego del jugador, los eliminamos.&lt;/p&gt;

&lt;p&gt;Por último, para hacer la representación más visual, he asignado a cada jugador una única posición principal aunque jueguen en distintas posiciones. Para simplificarlo, he usado solo 4 posiciones: portero, defensa, centro y delantero. Si un jugador ha jugado en varias posiciones, usaré solo la primera de la lista. El atributo de posición no se usará en ningún momento más allá de para aplicar colores a los jugadores.&lt;/p&gt;

&lt;h2 id=&quot;simplificación-de-atributos&quot;&gt;Simplificación de atributos&lt;/h2&gt;

&lt;p&gt;Trabajar con 27 atributos por jugador nos limita mucho la capacidad de generar reportes visuales que nos digan algo. Además, como vimos arriba hay muchos valores muy relacionados entre ellos y que aportan poco valor. Para simplificar todo esto, usaremos lo que se conoce como ACP o &lt;a href=&quot;https://es.wikipedia.org/wiki/An%C3%A1lisis_de_componentes_principales&quot;&gt;Análisis de Componentes Principales&lt;/a&gt;. El ACP nos ayudará a crear dos nuevos atributos que recojan de la mejor forma posible la información contenida en los 27 originales.&lt;/p&gt;

&lt;p&gt;Sin entrar en detalles técnicos y con la intención de hipersimplificar, imaginemos que todas estos atributos pudieran agruparse en “Capacidad de marcar goles” y “Capacidad de que no me marquen goles”, dos grupos de capacidades totalmente distintas no correlacionadas. Seguramente los tiros a puerta, los fuera de juego o los regates tengan mucho que ver con la primera; las faltas, las tarjetas o los despejes tienen que ver con la segunda. Pero lo más importante es que la capacidad de tirar a puerta guarda muy poca relación con la capacidad de hacer despejes. El objetivo del ACP es darnos estos dos grupos para poder trabajar en dos dimensiones en vez de 27. Los llamaremos Componente Principal 1 y 2 (CP1 y CP2)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Técnicamente, el ACP busca la proyección según la cual los datos queden mejor representados en términos de mínimos cuadrados. Esta convierte un conjunto de observaciones de variables posiblemente correlacionadas en un conjunto de valores de variables sin correlación lineal llamadas &lt;strong&gt;componentes principales&lt;/strong&gt;.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;Wikipedia&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/laliga-ml/cp1_cp2.png&quot; alt=&quot;Primer y segundo componente principal&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras el cálculo de ACP, ya podemos mostrarlos en un gráfico donde cada punto representa un jugador, y su posición en el gráfico viene dada por sus Componentes Principales. Observamos en la esquina inferior izquierda un grupito de jugadores parecidos: ¿serán los delanteros? ¿los porteros? ¿los altos? ¿los que regatean más? No lo sabemos, lo que sabemos es que ese grupo de jugadores se parecen mucho. ¿Y qué pasa con ese que está sólo en la esquina inferior derecha?&lt;/p&gt;

&lt;p&gt;Vamos a aplicar un color distinto a cada posición (porteros negro, defensas rojo, centros amarillo, delanteros verde) y vamos a añadir los nombres al lado de cada punto. 
&lt;img src=&quot;/images/uploads/posts/laliga-ml/cp1_cp2_players.png&quot; alt=&quot;Jugadores proyectados sobre los dos primeros componentes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¡Pam! Los jugadores con capacidades parecidas juegan más o menos en las mismas posiciones. Los porteros por un lado, los defensas por otro empezando a mezclarse con los centrocampistas que a su vez se acercan a los delanteros. Y en la esquina, solo, Lionel.&lt;/p&gt;

&lt;p&gt;Me llama la atención José Luis Morales, un jugador del Levante que se escapa demasiado de los defensas y se mezcla con los delanteros. Mirando su perfil, veo que ha jugado en todas las posiciones. En mi análisis, usé la primera que aparecía (defensa), pero parece que suele jugar más en la delantera.&lt;/p&gt;

&lt;h2 id=&quot;agrupaciones&quot;&gt;Agrupaciones&lt;/h2&gt;

&lt;p&gt;Visualmente e incluso obviando los colores ya es posible encontrar “grupos” de jugadores. Los de abajo a la izquierda, los solitarios que destacan por la derecha y dos o tres grandes grupos que se mueven por el centro. Pero vamos a ir un paso más allá y encontrar qué piensa un algoritmo de agrupación sobre nuestros jugadores.&lt;/p&gt;

&lt;p&gt;Para ello usaremos un algoritmo muy conocido para los que se dedican a jugar con datos llamado “&lt;a href=&quot;https://es.wikipedia.org/wiki/K-medias&quot;&gt;K-Means&lt;/a&gt;”. Este algoritmo nos permite agrupar en un número predefinido de “clusters” (grupos) un conjunto de elementos. En nuestro caso, lo que buscamos es que nos agrupe a los jugadores por los Componentes Principales que hemos encontrado antes. Recordemos que la posición en la que juega cada jugador no se usa aquí para nada, y que sólo la hemos usado para colorear los puntos. 
&lt;img src=&quot;/images/uploads/posts/laliga-ml/metodo_codo.png&quot; alt=&quot;Método del codo para seleccionar el número de clústeres&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lo primero que debemos decidir es cuantos grupos queremos crear. Podríamos mirar a ojo el gráfico de las Componentes Principales, pero puestos a tirar de ojímetro mejor lo hacemos con un método semi-científico. Vamos a usar el “&lt;a href=&quot;https://en.wikipedia.org/wiki/Elbow_method_%28clustering%29&quot;&gt;Método del Codo&lt;/a&gt;” para definir de una forma un poco más formal el número de grupos más óptimo para nuestros jugadores: hay un punto en el que añadir más grupos no añade mucha información de interés. Este método dice que más o menos en la punta del codo, cada nuevo cluster que añadimos es poco diferente del anterior. Hacemos los cálculos con nuestros datos, plantamos en un gráfico… ¡y mi ojímetro me dice que la punta está en el 5!&lt;/p&gt;

&lt;p&gt;Aplicando el algoritmo de K-Means con 5 clusters obtenemos la distribución siguiente:
&lt;img src=&quot;/images/uploads/posts/laliga-ml/clusters.png&quot; alt=&quot;Clústeres de jugadores de La Liga&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Y así queda la cosa. 5 grupos de jugadores que a partir de ahora me vendrán genial en las comidas con amigos, donde podré hablar de cómo Casemiro es un máquina, de cómo Messi y Benzema son unos fueras de serie o de cómo Jose Luis Morales es capaz de jugar donde quiera.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Para nada esto pretende ser un estudio exhaustivo (¡es finde!). Hay mejores algoritmos y configuraciones que habrían dado resultados más exactos. Espero que mis compañeros de Data Science de &lt;a href=&quot;https://www.linkedin.com/company/strandslabs/&quot;&gt;Strands&lt;/a&gt; no se me echen encima.&lt;/p&gt;

&lt;p&gt;Todo ha sido desarrollado con Python como lenguaje, Jupyter Lab como IDE y notebook, Pandas para manejo de los datos, sklearn como librería de Machine Learning, scipy como librería científica y matplotlib como librería gráfica. Además, he usado Selenium para recogida de datos y una base de datos MSSQL en Azure para algunas pruebas “en relacional”.&lt;/p&gt;

&lt;p&gt;He subido el código y los datos &lt;a href=&quot;https://github.com/PabloReyes/football-stats&quot;&gt;a github&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;En el desarrollo de este estudio he usado información de diversas fuentes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60&quot;&gt;PCA using Python (scikit-learn)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/which-nba-players-are-most-similar-machine-learning-provides-the-answers-r-project-b903f9b2fe1f&quot;&gt;Assesing NBA Player Similarity with ML (R)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/better-heatmaps-and-correlation-matrix-plots-in-python-41445d0f2bec&quot;&gt;Better Heatmaps and Correlation Matrix Plots in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 15 Dec 2019 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/laliga-jugadores-machine-learning/</link>
        <guid isPermaLink="true">https://pabloreyes.es/laliga-jugadores-machine-learning/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Canción de Código y Furia: Programadores y Negatividad</title>
        <description>&lt;p&gt;Estoy mirando un trozo de código. Es, sin duda, uno de los peores códigos que he visto en mi vida. Para actualizar un único registro en una base de datos, recupera todos los registros de la tabla y envía un UPDATE para cada uno de ellos, no sólo para el registro que necesita ser actualizado.&lt;/p&gt;

&lt;p&gt;Hay una función map que no hace nada más que devolver el mismo valor que recibe. Hay comprobaciones sobre valores aparentemente iguales pero con distinta convención de nombres (firstName y first_name).&lt;/p&gt;

&lt;p&gt;Por cada actualización (en cada registro, incluso en los que no han cambiado) se envía un mensaje a una cola que llama a otra función que hace todo el trabajo de nuevo para otra tabla en la misma base de datos.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Este artículo es una traducción personal al castellano del original “Rage Against the Codebase: Programmers and Negativity”, publicado por &lt;a href=&quot;https://medium.com/@way/rage-against-the-codebase-programmers-and-negativity-d7d6b968e5f3&quot;&gt;Way Spurr-Chen&lt;/a&gt; y bajo su aprobación.&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;¿Quién osaría hacer algo así? Me tapo los ojos y me río a carcajadas para que me escuchen todos. Mis compañeros de trabajo me preguntan qué pasa y les cuento las Mayores Cagadas de BulkDataImporter.js 2018, cortesía de Francisco Gutiérrez*. Todo el mundo asiente con la cabeza y estamos de acuerdo: ¿Por qué nos hacen esto?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/friend-app.jpg&quot; alt=&quot;via ProgrammerHumor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;negatividad-la-herramienta-emocional-de-la-cultura-de-programación&quot;&gt;Negatividad: la herramienta emocional de la cultura de programación&lt;/h2&gt;
&lt;p&gt;La negatividad es tan importante para los programadores porque es una forma muy efectiva de comunicar valor. Cuando daba clases en un bootcamp de programación, era una práctica estándar inculcar a los estudiantes en la cultura de la industria con una saludable dosis de memes, historias y videos, de los cuales muchos giran en torno a la &lt;a href=&quot;https://www.youtube.com/watch?v=BKorP55Aqvg&quot;&gt;frustración de los programadores con personas que simplemente no entienden&lt;/a&gt;. Es bueno poder usar herramientas emotivas para señalar las prácticas y hábitos que son Buenos, los que son Malos y los que son Oh Dios, Ni Se Te Ocurra. También es bueno preparar a los nuevos programadores para el hecho de que probablemente serán malinterpretados de una manera u otra por colegas no técnicos, que deberían prepararse para que todos sus amigos les cuenten sus ideas de aplicaciones del que serán super exitosas, que deberían prepararse para los interminables laberintos de código legacy llenos de sorpresas.&lt;/p&gt;

&lt;p&gt;Cuando estamos aprendiendo a programar, nuestro visión de lo que es “entender la programación” se basa en la observación de las reacciones emocionales de otras personas cuando ocurre algo. Esto se ve muy claro en &lt;a href=&quot;https://www.reddit.com/r/programmerhumor&quot;&gt;ProgrammerHumor&lt;/a&gt;, un subreddit lleno de programadores junior donde muchos expresan humor con varios matices de negatividad: frustración, pesimismo, indignación, desilusión, condescendencia, y más.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/ide-colour-makeup.jpg&quot; alt=&quot;via ProgrammerHumor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Noto que los programadores a menudo siguen una curva ascendente de negatividad a medida que adquieren experiencia. Frescos y nuevos, sin saber las dificultades que les esperan, empiezan con entusiasmo y con la voluntad de creer que la razón por la que las cosas son difíciles es porque no tienen experiencia y no saben nada, y finalmente lo entenderán todo.&lt;/p&gt;

&lt;p&gt;A medida que pasa el tiempo y aprenden más, adquieren la habilidad de diferenciar entre el código que es Bueno y el código que es Malo. Una vez que esto sucede, experimentan directamente la frustración de trabajar con código malo que saben que es malo, y si trabajan en una comunidad (ya sea en línea o en equipo), frecuentemente adoptan los hábitos emocionales de los programadores más antiguos. Con frecuencia, esto resulta en un aumento de la negatividad, ya que ahora son capaces de hablar inteligentemente sobre el código y separar lo bueno de lo malo de una manera que demuestra que “lo entienden”. Para la mayoría, ser más negativo funciona: es fácil vincularse con los compañeros de trabajo por encima de las frustraciones y formar parte del grupo, aumenta tu estatus a costa de machacar el código Malo, y puede ayudarte a ser percibido como un mejor programador: &lt;a href=&quot;https://www.wired.com/2014/11/be-mean-online/&quot;&gt;las personas que expresan opiniones negativamente a menudo son vistas como más inteligentes y más competentes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Este aumento en la negatividad no es necesariamente algo malo. El discurso sobre la programación está, sobre todo, extremadamente centrado en la calidad del código. El código realmente representa todo sobre la función para la que se ha escrito (a parte del hardware, redes, etc.), por lo que es importante poder expresar una opinión sobre este. Casi toda discusión sobre código se reduce a opinar sobre si es suficientemente bueno o no, y el juicio de un código malo se manifiesta en una declaración cuya carga emotiva implica la calidad (o falta de ella) del código:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“Ese módulo tiene muchas inconsistencias lógicas y es un buen candidato para que trabajemos en mejorar su performance”.&lt;/li&gt;
  &lt;li&gt;“Ese módulo es bastante malo, deberíamos refactorizarlo”&lt;/li&gt;
  &lt;li&gt;“Ese módulo no tiene sentido, tenemos que reescribirlo de 0”&lt;/li&gt;
  &lt;li&gt;“Ese módulo es una basura, hay que arreglarlo”&lt;/li&gt;
  &lt;li&gt;“Ese módulo es una mierda y nunca debería haber sido escrito, ¿qué coño estaba pensando Fran?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Por cierto, esta “carga emotiva” es lo que lleva a los desarrolladores a llamar al código “sexy”, aunque no trabajen en PornHub.)&lt;/p&gt;

&lt;p&gt;El problema, por supuesto, es que los seres humanos son sacos de emociones, pequeños y ondulados, llenos de agua, y tanto el recibir como el expresar cualquier emoción nos cambia como persona: microscópicamente al principio, y a largo plazo, fundamentalmente.&lt;/p&gt;

&lt;h2 id=&quot;la-pendiente-resbaladiza-y-ondulante-de-la-negatividad&quot;&gt;La pendiente resbaladiza y ondulante de la negatividad&lt;/h2&gt;
&lt;p&gt;Hace unos años yo era, de manera informal, el tech-lead de mi equipo, y me encontraba entrevistando a un candidato para un puesto de desarrollador. Nos gustaba mucho; era espabilado, hacía buenas preguntas, tenía las habilidades técnicas, y encajaba en nuestra cultura empresarial. Me gustó particularmente porque era positivo y parecía de esas personas que “le meten mano a todo”. Así que lo contratamos.&lt;/p&gt;

&lt;p&gt;En ese momento llevaba en mi compañía durante un par de años y había percibido una falta de compromiso con la cultura de la compañía. Antes de que yo llegara, habían intentado lanzar un producto dos, tres y un par de veces más sin éxito, lo que llevó a costosos refactorings sin nada que mostrar, pero con noches muy largas, plazos cambiantes y productos que “casi funcionaban”. Aunque yo seguía trabajando duro cada día, opinaba abiertamente con escepticismo sobre la última fecha límite transmitida por el equipo de management. En ocasiones, se me iba la boca hablando de las cosas que encontraba en el código.&lt;/p&gt;

&lt;p&gt;No debería haberme sorprendido que unas semanas después, el nuevo desarrollador que habíamos contratado hablaba igual de negativamente y de la misma forma que yo lo hacía (incluyendo los insultos). Tenía la sensación esta persona no actuaría así por su cuenta, o si estuviera en una empresa con una cultura distinta. Más bien, estaba adoptando la cultura que yo había establecido para encajar. Sentí una punzada de culpa. Debido a mi propia experiencia subjetiva, me las apañé para establecer un tono pesimista con un nuevo compañero que era extremadamente positivo. Él, sin ser así, se expresaba de esa manera en un intento de demostrar que podía encajar con sus compañeros: yo le había impuesto mi actitud de mierda. Y cuando las cosas se repiten mucho, aunque sean mentira, tienen el mal hábito de convencer.
&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/i-hate-this-too.png&quot; alt=&quot;We all hate this&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;los-caminos-de-la-negatividad&quot;&gt;Los caminos de la negatividad&lt;/h2&gt;
&lt;p&gt;Una historia feliz para nuestro desarrollador (ahora no tan junior) de antes, que ha adquirido un poco de sabiduría y un poco de experiencia, dice así: al final, acaban entendiendo que el código Malo está en todos sitios, hasta en las mejores familias, y que es ineludible. El código Malo existe incluso en las empresas más vanguardistas y centradas en la calidad. Y si piensas que las tecnologías más modernas te ayudarán a escribir mejor código… quizás te equivocas.&lt;/p&gt;

&lt;p&gt;Con la experiencia, los desarrolladores empiezan a aceptar que el código Malo es simplemente una realidad del software, y es su trabajo hacerlo mejor. &lt;strong&gt;Puesto que no se puede huir del código Malo, no tiene mucho sentido volverse loco por ello. Siguen el camino del Zen, se centran en cómo resolver el problema o la tarea que se les presenta, aprenden a medir con precisión y transmitir la calidad del software a las partes interesadas de la empresa, crean buenas estimaciones descritas a partir de sus muchos años de experiencia y acaban siendo recompensados generosamente por su increíble y constante valor para la empresa.&lt;/strong&gt; Hacen un trabajo tan bueno que se les concede un bono de 10 millones de dólares y se retiran para hacer lo que quieran por el resto de su vida. (Más o menos)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/caminos-negatividad.png&quot; alt=&quot;Caminos de la negatividad&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El otro lado es el camino de la oscuridad. En vez de aceptar que el código Malo es inevitable, se toman la libertad de proclamar todo lo que está mal en el mundo del código  y se creen héroes. Se niegan a aceptar que el código Malo es una realidad por muchas razones: la gente debería ser mejor y menos estúpida; es ofensivo; es malo para el negocio; esto es una prueba de lo inteligente que soy; si no digo bien alto la mierda que es este código, toda esta compañía se va a pique; etc.&lt;/p&gt;

&lt;p&gt;Probablemente en una posición en la que no pueden hacer los cambios que desean porque el negocio desafortunadamente debe continuar y no tiene tiempo para preocuparse por la calidad del código, se les conoce como quejicas. Debido a que son altamente competentes siguen entre nosotros, pero relegados a un rincón de la empresa donde no molestan a demasiada gente, sino que mantienen los sistemas críticos en funcionamiento. Aislados del acceso a nuevas oportunidades de desarrollo, sus habilidades se atrofian y pierden relevancia en la industria. Su negatividad sigue creciendo y se convierte en una amargura hasta que eventualmente se encuentran a sí mismos discutiendo con estudiantes de programación de 20 años sobre la forma en que se hacían las cosas antes de que ellos nacieran era mejor que la de ahora. Al final, se jubilan y pasan su vejez gritándole a los pájaros.&lt;/p&gt;

&lt;p&gt;La realidad probablemente se encuentra en algún lugar entre estos dos extremos.&lt;/p&gt;

&lt;p&gt;Hay compañías que consiguen ser exitosas incluso con culturas extremadamente negativas, territoriales y contundentes, como Microsoft antes de su &lt;a href=&quot;https://www.vanityfair.com/news/business/2012/08/microsoft-lost-mojo-steve-ballmer&quot;&gt;década perdida&lt;/a&gt; —  normalmente son aquellas que ya cuentan con un producto existente y con gran penetración en el mercado y que necesitan escalar lo más rápido posible, o aquellas con estructuras de mando y control (Apple durante el apogeo de Steve Jobs) en las que todo el mundo hace lo que una persona dice, por lo que no importa mucho cómo lo diga. Sin embargo, los últimos  estudios sobre negocio (y el sentido común también) muestran una y otra vez que la creatividad máxima que lleva a la innovación a gran escala y el alto rendimiento a pequeña escala requieren niveles bajos de estrés que permitan el pensamiento creativo y el pensamiento metódico. Es extremadamente difícil realizar un trabajo creativo cuando te preocupa lo que tu colega pueda decir sobre cada línea de código que escribas.&lt;/p&gt;

&lt;h2 id=&quot;negatividad-en-la-cultura-pop-del-software&quot;&gt;Negatividad en la cultura “pop” del software&lt;/h2&gt;
&lt;p&gt;Hoy en día, las actitudes de los desarrolladores de software están recibiendo más atención que nunca. La idea de una “&lt;a href=&quot;https://www.amazon.com/Asshole-Rule-Civilized-Workplace-Surviving/dp/1600245854&quot;&gt;No Asshole Rule&lt;/a&gt;” es cada vez más común en las compañías de software. Más y más anécdotas aparecen en Twitter con relatos de personas que abandonan el software por completo porque simplemente no pueden (no quieren) soportar la hostilidad y las actitudes territoriales. Incluso Linus Torvalds recientemente se disculpó por sus años de hostilidad e insultos a otros desarrolladores de Linux.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Our world of code will become increasingly exposed to the interpersonal styles of people who did not grow up in the isolated nerd culture of the early tech boom, and eventually they will become the new world of code.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Algunos todavía defienden el derecho de Linus a ser excesivamente crítico. Es cierto que la corrección es increíblemente importante (fundamental, incluso), pero cuando indagas en las razones de muchas personas para permitir que la expresión de una opinión negativa caiga en la toxicidad, empiezan a sonar paternalistas: se lo merecen por ser estúpidos; necesita asegurarse de que no lo vuelvan a hacer; si no lo hicieran, no tendría que gritarles, etc. (Para otro ejemplo de cuánto impacto puede tener la parte emocional de un lider en una comunidad de programadores, podemos ver el MINASWAN de la comunidad Ruby - “Matz [the creator of Ruby] is nice so we are nice”).&lt;/p&gt;

&lt;p&gt;He descubierto que los promotores más ardientes de una mentalidad de “matar al tonto” son a menudo aquellos que se preocupan profundamente por la calidad y la corrección del código. Desafortunadamente, a menudo confunden firmeza con dureza. El lado más oscuro de esta actitud proviene del deseo completamente humano pero improductivo de sentirse superior a los demás. Las personas que se decantan por este deseo son las que tienden a permanecer atrapadas en el camino de la oscuridad.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/all-amateurs.png&quot; alt=&quot;All amateurs&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El mundo del software se está expandiendo rápidamente para encontrarse con los bordes de su contenedor, el mundo del no-software.&lt;/p&gt;

&lt;p&gt;A medida que nuestra industria crece a un ritmo cada vez más rápido y la programación se hace cada vez más accesible, la distancia entre “techie” y “normie” se reduce rápidamente. Nuestro mundo del software estará cada vez más expuesto a los estilos interpersonales de las personas que no crecieron en la aislada cultura de los nerds de los primeros tiempos del boom tecnológico, y eventualmente se convertirán en el nuevo mundo del software. Y al margen de cualquier argumento social o generacional, la eficiencia en nombre del capitalismo se manifestará en la cultura de la empresa y en las prácticas de contratación: los mejores negocios simplemente no contratarán a aquellos que no pueden jugar neutralmente con otros, y mucho menos jugar limpio.&lt;/p&gt;

&lt;h2 id=&quot;lo-que-he-aprendido-sobre-la-negatividad&quot;&gt;Lo que he aprendido sobre la negatividad&lt;/h2&gt;
&lt;p&gt;Dejar que la negatividad excesiva domine la forma de pensar y comunicación y que se extienda a la toxicidad es peligroso para los equipos productivos y costoso para las empresas. He vivido muchos proyectos de software (y oído hablar) que han sido tirados a la basura y completamente reconstruidos a un gran costo porque un desarrollador de software de confianza estaba empeñado en trabajar con una nueva tecnología, o un solo archivo que se ha usado como representativo de la calidad de toda la base de código. Es algo que desmoraliza y tensa las relaciones. Nunca olvidaré un incidente en el que un compañero de trabajo me regañó por poner CSS en el archivo equivocado, lo que me molestó y distrajo mis pensamientos durante días. Además, es poco probable que deje que esa persona se acerque a uno de mis equipos en el futuro.&lt;/p&gt;

&lt;p&gt;Hasta es &lt;a href=&quot;https://medium.com/the-mission/how-complaining-rewires-your-brain-for-negativity-96c67406a2a&quot;&gt;malo para la salud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/programadores-negatividad/workshop-sonrisas.jpg&quot; alt=&quot;Workshop sonrisas&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con esto no pretendo decir que debamos vivir en un mundo de arco iris, con pull-requests llenas de emojis, o workshops para sonreir. La negatividad juega un papel extremadamente importante en la programación (y en la vida humana) como una forma de señalar la calidad, de expresar nuestros sentimientos y de compadecerse de nuestros semejantes. Es una señal de discernimiento y sensatez o de la gravedad de un problema. Normalmente puedo decir que un desarrollador ha alcanzado un nuevo nivel cuando comienza a expresar incredulidad donde antes habían sido tímidos e inseguros. Están demostrando su confianza en sus propias opiniones. No podemos prohibir la opiniones negativas - eso sería Orwelliano.&lt;/p&gt;

&lt;p&gt;Sin embargo, estos comentarios muchas veces tóxicos deben ser dosificado con otras cualidades humanas esenciales: compasión, paciencia y humor. Y cuando sea necesario, siempre puedes decirle a alguien cuando la ha cagado sin los gritos y maldiciones.&lt;/p&gt;

&lt;p&gt;En esa compañía de hace unos años, un día el CEO me agarró para charlar. Charlamos un rato y discutimos el estado actual del proyecto, luego me preguntó cómo pensaba que me iba. Le dije que creía que lo estaba haciendo bastante bien, que estábamos progresando en el proyecto, que nos estábamos conectando, que probablemente había algunas cosas que me faltaban y que necesitaba renovar mi enfoque. Me dijo que me había oído compartir algunos de mis pensamientos más pesimistas en la oficina, y que otras personas también lo habían notado. Explicó que si tengo preocupaciones, puedo llevarlas a la gerencia tanto como quiera, pero que tenga cuidado de no transmitirlas hacia abajo. Como ingeniero líder y responsable de la compañía, tenía que ser consciente del impacto que mis palabras tienen en los demás, porque ejerzo mucha influencia, me dé cuenta o no. Dijo todo esto muy amablemente, y terminó diciendo que si me siento así, probablemente debería pensar en lo que quiero para mí y mi carrera. Fue una forma extremadamente educada de decirme “o encajas, o puedes buscar otra cosa “. Le agradecí que me lo hiciera saber y reconocí que mi actitud había decaído en los últimos seis meses sin que me diera cuenta de cómo podría estar afectando a otros.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;En última instancia, estoy aquí para realizar una tarea, y no tengo que quejarme del código para entenderlo, estimarlo o arreglarlo.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fue un ejemplo de gestión excelente y eficaz y del poder de un toque con delicadeza. Me di cuenta de que si bien había pensado que creía plenamente en la empresa y en su capacidad para lograr sus objetivos, en realidad estaba diciendo y comunicando a los demás algo muy diferente. También me di cuenta de que sólo porque me sentía escéptico sobre el proyecto en el que estaba trabajando, no significaba que tenía que expresar ese sentimiento a mis compañeros de trabajo y propagar mi pesimismo como un virus, lo que hacía que fuera aún menos probable que tuviéramos éxito. En cambio, podía comunicar agresivamente la realidad a mis gerentes. Y si al final sentía que no estaban escuchando, podía expresar mi desacuerdo cogiendo la puerta&lt;/p&gt;

&lt;p&gt;Al final, me encontré con una nueva oportunidad, en la que me trabajaba con Recursos Humanos para evaluar la performance de los ingenieros. Como responsable formal del departamento, soy cada vez más cuidadoso en controlar cómo expreso mis opiniones sobre nuestro código heredado y que siempre estamos mejorando. Para promulgar el cambio, hay que reconocer la realidad de la situación actual, pero no se llega a ninguna parte si nos quedamos atascados en el lamento, el desdén o cualquier otra situación. En última instancia, estoy aquí para realizar una tarea, y no tengo que quejarme del código para entenderlo, estimarlo o arreglarlo.&lt;/p&gt;

&lt;p&gt;De hecho, cuanto más evitaba mi reacción emocional al código, más clara era mi visión de lo que podía llegar a ser, y menos confusión interior experimentaba. Cuando practicaba la subestimación (“quizás hay algo que podemos mejorar aquí”), me divertía a mí mismo y a los demás y tomaba la situación de manera menos personal. También me di cuenta de que podía eliminar la negatividad de los demás siendo perfectamente sensible en las opiniones (“tienes razón, ese código es bastante malo, pero lo mejoraremos”). Es chulísimo ver lo lejos que puedo llegar en el camino del zen.&lt;/p&gt;

&lt;p&gt;En definitiva, estoy continuamente aprendiendo y volviendo a aprender una lección más profunda: &lt;strong&gt;la vida es demasiado corta para pasarla cabreado&lt;/strong&gt;.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;* Francisco Gutiérrez no es una persona real. Si resulta que eres tú, estoy seguro de que eres un magnífico programador, o al menos lo intentas. Y sino, no pasa nada. Vive tu vida.&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Apr 2019 00:00:00 +0200</pubDate>
        <link>https://pabloreyes.es/programadores-negatividad/</link>
        <guid isPermaLink="true">https://pabloreyes.es/programadores-negatividad/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>¿Qué diablos es Blockchain?</title>
        <description>&lt;p&gt;A no ser que estés escondiéndote en una cueva, estoy seguro de que has escuchado hablar de Bitcoins y Blockchains. Al fin y al cabo, son los temas de moda para los medios últimamente - las palabrejas estrellas del año -. Incluso la gente que nunca ha minado una criptomoneda ni sabe cómo funcionan habla de ellas.&lt;/p&gt;

&lt;p&gt;Tengo más amigos no técnicos que técnicos. Muchos llevan semanas pidiéndome que les explique estas nuevas palabrejas. Imagino que hay miles de personas pensando lo mismo. Y cuando eso ocurre, es el momento de escribir algo que cualquiera pueda enseñar a esas almas perdidas, explicado de forma sencilla que cualquiera pueda entender -este es el motivo de este artículo-.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Este artículo es una traducción personal al castellano del original “WTF is The Blockchain?”, publicado por &lt;a href=&quot;https://hackernoon.com/@mohitmamoria&quot;&gt;Mohit Mamoria&lt;/a&gt; en &lt;a href=&quot;https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348&quot;&gt;Hackernoon&lt;/a&gt;. El autor ha sido contactado previamente a la publicación de esta traduccion y ha accedido a ella.&lt;/em&gt;
—&lt;/p&gt;

&lt;h3 id=&quot;blockchain-hacía-falta-algo-tan-complicado&quot;&gt;Blockchain: ¿hacía falta algo tan complicado?&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;“Por cada problema complejo hay una respuesta clara, sencilla, y errónea”&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;H. L. Mencken&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A diferencia de cualquier otro artículo en internet&lt;/strong&gt;, en vez de empezar explicando qué es Blockchain, vamos a ver qué problema resuelve.&lt;/p&gt;

&lt;p&gt;Imagina que Juan es tu mejor amigo. Juan está de viaje por el extranjero, y al cabo de unos días te llama y te dice: &lt;em&gt;“Hey tio, necesito algo de dinero. Estoy pelado”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Tú le respondes: &lt;em&gt;“Claro tío, ahí te mando algo”&lt;/em&gt;. Y cuelgas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_1.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Entonces vas al banco y le dices al señor que te atiende: &lt;em&gt;“Por favor, transfiera 1000€ de mi cuenta a la cuenta de Juan”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;El señor responde: &lt;em&gt;“Por supuesto caballero”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Abre su librito, mira el saldo de tu cuenta para asegurarse de que tienes suficiente dinero para mandarle 1000€ a Juan. Como eres rico, tienes un montón; por lo tanto, el hombre hace una anotación en su librito:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_2.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Evito hablar de ordenadores para mantener el artículo lo más sencillo posible.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;Llamas a Juan y le dices: &lt;em&gt;“Hey Juan, ahí te he mandado el dinero. La próxima vez que vayas al banco podrás sacar los 1000€ que te he pasado”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_3.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¿Qué acaba de ocurrir? Que Juan y tú habéis confiado en el banco para que gestione vuestro dinero. No ha habido ningun movimiendo de dinero real. Todo lo que hizo falta fue una anotación en un librito. Es más, una anotación en un libro que no es ni de Juan ni tuyo.&lt;/p&gt;

&lt;p&gt;Y ese es el problema de los sistemas actuales: &lt;strong&gt;Para establecer confianza entre nosotros mismos, necesitamos de una tercera persona.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Durante años, hemos dependido de intermediarios para confiar los unos en los otros. Te preguntarás: &lt;em&gt;“¿y qué problema hay?”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;El problema es que es un único intermediario. Sólo hace falta que una persona u organización sea corrupto -intencionada o no- para llevar a una sociedad al caos.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;¿Qué pasa si el librito donde se apuntó la transacción se quema?&lt;/li&gt;
  &lt;li&gt;Y si por error el señor del banco ha escrito 1500€ en vez de 1000€?&lt;/li&gt;
  &lt;li&gt;¿Y si lo hizo a propósito?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
  &lt;p&gt;Durante años, hemos puesto todos los huevos en la misma cesta, y ésta misma en la de otro.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;¿Podría existir un sistema donde pudiéramos enviar dinero a otras personas sin necesidad de un banco?&lt;/p&gt;

&lt;p&gt;Para responder a esta pregunta debemos profundizar un pelín más y hacernos una pregunta mejor (al fin y al cabo, sólo las mejores preguntas llevan a las mejores respuestas).&lt;/p&gt;

&lt;p&gt;Piénsalo un segundo, ¿qué significa transferir dinero? Es sólo una entrada en un librito. Una mejor pregunta sería:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Hay forma de gestionar este librito entre todos en vez de que lo haga un banco?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esa sí es una buena pregunta. Y la respuesta es la que ya te estás imaginando: Blockchain.&lt;/p&gt;

&lt;p&gt;Blockchain es un método para mantener un registro de transacciones entre todos en vez de depender de un tercero.&lt;/p&gt;

&lt;p&gt;¿Me sigues? Bien. Porque ahora que te han surgido tantas preguntas, vamos a ver cómo funciona un librito de cuentas compartido.&lt;/p&gt;

&lt;h3 id=&quot;sí-sí-pero-cuéntame-cómo-funciona&quot;&gt;Sí sí, pero cuéntame, ¿cómo funciona?&lt;/h3&gt;
&lt;p&gt;El requerimiento de este método es que debe haber suficiente gente que no quiera depender de un tercero para gestionar su libro de cuentas. Sólo entonces, este grupo será capaz de gestionarlo por ellos mismos.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Puede tener sentido hacerse con unos Bitcoins ahora, por si coge fuerza. Si suficiente gente piensa lo mismo, se convierte en una profecía autocumplida.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;Satoshi Nakamoto, 2009&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;¿Pero cuantos? Al menos tres. En nuestro ejemplo, imaginemos que diez personas quieren dejar de usar bancos u otros intermediarios para transferirse dinero. Por mutuo acuerdo, todos tienen información de las cuentas de los demás, pero sin saber a quién pertenecen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_4.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;1-una-carpeta-vacía&quot;&gt;1. Una carpeta vacía&lt;/h4&gt;
&lt;p&gt;Cada uno empieza con una carpeta vacía. A medida que progresemos, todos irán llenando de papeles sus carpetas. Y esta colección de papeles crearán el libro de cuentas.&lt;/p&gt;

&lt;h4 id=&quot;2-cuando-ocurre-una-transacción&quot;&gt;2. Cuando ocurre una transacción&lt;/h4&gt;
&lt;p&gt;Cada uno de los diez coge con un papel en blanco, y lo van rellenando a medida que ocurre alguna transacción.&lt;/p&gt;

&lt;p&gt;Si &lt;strong&gt;#2&lt;/strong&gt; quiere hacer una transferencia a &lt;strong&gt;#9&lt;/strong&gt;, &lt;strong&gt;#2&lt;/strong&gt; grita a todos los demas: &lt;em&gt;“Hey, quiero mandarle 10€ a &lt;strong&gt;#9&lt;/strong&gt;!, así que hacedme el favor de apuntadlo en vuestros papeles.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_5.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Todos los demás comprueban que &lt;strong&gt;#2&lt;/strong&gt; tiene fondos suficientes para mandar 10€ a &lt;strong&gt;#9&lt;/strong&gt;. Si hay suficiente, todos escribirán una nueva anotación en su hoja de transacciones.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_6.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La transferencia ha terminado.&lt;/p&gt;

&lt;h4 id=&quot;3-sigue-habiendo-transacciones&quot;&gt;3. Sigue habiendo transacciones&lt;/h4&gt;
&lt;p&gt;A medida que pasa el tiempo, más gente necesita transferir dinero a otros. Cada vez que quieren mandar dinero a alguien, se lo dicen a todo el mundo. En el momento en que alguien lo escucha, lo escribe en su hoja de transacciones.&lt;/p&gt;

&lt;p&gt;Este proceso continúa hasta que cada uno ha llenado su hoja. Suponiendo que en cada hoja caben diez transacciones, cuando se hace la décima transferencia nadie más tendrá espacio en su hoja.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_7.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Es hora de guardar la hoja en la carpeta y sacar una nueva hoja en blanco y empezar el segundo paso de nuevo.&lt;/p&gt;

&lt;h4 id=&quot;4-guardando-la-hoja&quot;&gt;4. Guardando la hoja&lt;/h4&gt;

&lt;p&gt;Antes de guardar la hoja en nuestra carpeta, necesitamos sellarla con una clave única que todos en la red hemos decidido. Al sellarla, nos aseguramos de que nadie puede hacer cambios en estas hojas que todos hemos guardados en nuestras carpetas -ni hoy, ni mañana ni nunca jamás-. Si todos confían en el sello, todos confían en el contenido de la hoja. Y este sello en la hoja es donde está la gracia de este método.&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Jerga:&lt;/strong&gt; Se llama “minado” al hecho de sellar la hoja, pero seguiremos llamándolo “sellado” por simplicidad.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;Antes confiábamos en el banco/intermediario, que nos prometía que lo que quedaba escrito en su librito jamás se alteraría. Ahora esa confianza la depositamos en el sello.&lt;/p&gt;

&lt;h3 id=&quot;interesante-y-cómo-sellamos-la-hoja&quot;&gt;¡Interesante! ¿Y cómo sellamos la hoja?&lt;/h3&gt;

&lt;p&gt;Antes de aprender cómo sellar la hoja, vamos a ver cómo funcionan los sellos en general. Y como prerequisito para aprenderlo vamos a ver cómo funciona la…&lt;/p&gt;

&lt;h4 id=&quot;máquina-mágica&quot;&gt;Máquina mágica&lt;/h4&gt;

&lt;p&gt;Imagina una máquina cubierta por bloques de hormigón. Tú metes una cajita con algo dentro en la máquina por la izquierda, y por la derecha sale algo que contiene otra cosa.&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Jerga:&lt;/strong&gt; Esta máquina se llama “función hash”, pero no vamos a ser demasiado técnicos. Así que hoy se llamará “La Máquina Mágica”.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_8.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Imagina que metes un número 4 por la izquierda. Por la derecha saldría algo así como “dcbea”.&lt;/p&gt;

&lt;p&gt;¿Cómo convirtió un 4 en esta “palabra”? Nadie lo sabe. Es más, es un proceso irreversible. Con la palabra “dcbea”, es imposible saber qué se le introdujo a la máquina. Pero cada vez que metas un 4 en ella, siempre te devolverá un “dcbea”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_9.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Vamos a probar pasando otro número. Por ejemplo 26.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_10.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora nos ha dado un “94c8e”. ¡Interesante! Se ve que el resultado también puede contener números. 
¿Y si te hago la siguiente pregunta?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Puedes decirme que debo meter en la máquina por la izquierda para que la salida sea una palabra que empiece por 3 ceros? Por ejemplo: 000ab, 00098 o 000fa o algo así?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_11.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Piensa la pregunta un momento.&lt;/p&gt;

&lt;p&gt;Te he dicho que la máquina tiene una propiedad por la cual no podemos calcular qué se introdujo por la izquierda sabiendo lo que salió por la derecha. Siendo la máquina así… ¿cómo podemos responder a la pregunta anterior?&lt;/p&gt;

&lt;p&gt;Se me ocurre un método. ¿Por qué no vamos probando todos lo números del universo hasta que encontremos uno que empiece por 3 ceros?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_12.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Siendo optimistas, tras algunos miles de intentos, encontraremos alguno cuyo resultado de la máquina empiece por 3 ceros.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_13.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ha sido extremádamente dificil encontrar la entrada sabiendo la salida. Pero al mismo tiempo, es muy sencillo comprobar que esa entrada produce esa salida. Recuerda que la máquina siempre devuelve lo mismo si le metemos la misma entrada.&lt;/p&gt;

&lt;p&gt;¿Cómo de dificil crees que es responder a la siguiente pregunta?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;¿Si meto el número 72533 en la máquina, producirá una salida que empiece por 3 ceros?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lo único que necesitas hacer es meter ese número en la máquina y mirar el resultado. Ya está. 
Esta es la propiedad más importante de esta máquina: Dado un resultado, es extremadamente difícil calcular la entrada, pero dada la entrada es extremadamente sencillo comprobar si produce el resultado deseado.&lt;/p&gt;

&lt;p&gt;Recordemos esta propiedad de la Máquina Mágica (o función hash) durante el resto del artículo:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Dado un resultado, es extremadamente difícil calcular la entrada, pero dada la entrada es extremadamente sencillo comprobar si produce el resultado deseado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;cómo-se-usa-la-máquina-para-sellar-una-hoja&quot;&gt;¿Cómo se usa la máquina para sellar una hoja?&lt;/h3&gt;
&lt;p&gt;Usaremos la máquina para crear un sello para nuestra hoja. Como siempre, empezaremos con una situación de ejemplo:&lt;/p&gt;

&lt;p&gt;Imagina que te doy dos cajas. Una caja contiene el número 20893. Y te pregunto: ¿Puedes adivinar qué numero tengo que sumar a éste de la primera caja para que, tras sumarlos, de como resultado algo que empiece por 3 ceros?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_14.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Es una situación similar a la de antes, y ya hemos visto que la única forma de calcular dicho número es probando cada número en el universo.&lt;/p&gt;

&lt;p&gt;Tras varios miles de intentos, nos encontramos con un número, digamos el 21191, que cuando lo sumamos a 20893 (21191 + 20893 = 42084) y lo metemos en la máquina, nos da como resultado algo que entra en nuestro requerimiento: empezar con 3 ceros.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_15.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En este caso, el número 21191 se convierte en el sello para el número 20893. Imagina que hay una hoja de transacciones con el título “20893” escrito en la cabecera. Para sellar esta hoja (para que nadie pueda cambiar su contenido sin que nos demos cuenta), pondremos un sello en la hoja con el número “21191”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_16.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Jerga&lt;/strong&gt; Este número en el sello se llama “Proof of work”, que hace ver que ha habido un trabajo y esfuerzo detrás para calcularlo. Lo seguiremos llamando “sello” por simplicidad.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;Si alguien quiere saber si se ha modificado el contenido de esta hoja, todo lo que tiene que hacer es sumar el contenido de la hoja al número del sello y meterlo en la máquina mágica. Si la máquina devuelve algo que empieza por 3 ceros, el contenido de la hoja está intacto. Si el resultado no cumple nuestro requisito, podemos tirar la hoja porque significa que alguien los ha modificado, por lo que no nos vale de nada.&lt;/p&gt;

&lt;p&gt;Usaremos un método de sellado similar para sellar todas nuestras hojas y en cierto momento para ordenarlas en nuestras carpetas.&lt;/p&gt;

&lt;h3 id=&quot;finalmente-sellando-nuestra-hoja&quot;&gt;Finalmente, sellando nuestra hoja&lt;/h3&gt;
&lt;p&gt;Para sellar una hoja de transacciones en la red, debemos calcular un número que al sumarlo al contendo de la hoja nos de como resultado algo que empiece por tres ceros.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_17.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Estamos diciendo “algo que empiece con 3 ceros” como ejemplo para mostrar cómo funcina la función hash. En la realidad, la comprobación es bastante más compleja.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;Una vez hemos calculado el número gastando nuestro tiempo y electricidad en la máquina, sellamos la hoja con ese número. Si alguna vez alguien trata de cambiar el contenido de la hoja, el número del sello nos servirá para comprobar si ha sido alterada o no.&lt;/p&gt;

&lt;p&gt;Ahora que sabemos cómo se sella la hoja, volvamos al momento cuando hablabábamos de escribir la décima transacción y quedarnos sin más espacio en la hoja. En cuanto esto ocurre, todos los componentes del grupo se ponen a calcular el número del sello para dicha hoja, de forma que pueda archivarse en la carpeta. Todos hacen cálculos para encontrar el número de sello. En cuanto alguien lo encuentra, se lo comunica a todos los demás.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_18.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En cuanto el resto escucha este número, todos lo meten en la máquina mágica para comprobar que da el resultado esperado. En caso afirmativo, todos ponen el sello en su hoja y lo guardan en sus carpetas.&lt;/p&gt;

&lt;p&gt;¿Y si para alguno de los integrantes, por ejemplo el &lt;strong&gt;#7&lt;/strong&gt;, resulta que el sello anunciado, al añadirlo a su hoja, no produce el resultado esperado? Estas cosas pasan. Algunos motivos para esta discrepancia pueden ser:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ha podido oír mal alguna transacción de las que se anunció&lt;/li&gt;
  &lt;li&gt;Ha podido escribir mal alguna transacción de las que se anunció&lt;/li&gt;
  &lt;li&gt;Ha podido querer introducir una transacción falsa o modificar alguna, para beneficio propio o de otro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No importa el motivo, pero para &lt;strong&gt;#7&lt;/strong&gt; sólo hay una opción: tirar la hoja a la basura y copiar una nueva de alguien de la red, de forma que pueda meterla en su carpeta con su sello. Hasta que no guarde su hoja en la carpeta, no se le deja una hoja nueva para escribir transacciones, de forma que queda fuera de la red.&lt;/p&gt;

&lt;p&gt;Sea cual sea el número de sello que la mayoría ha decidido, éste se considera el sello verdadero.&lt;/p&gt;

&lt;p&gt;Entonces… ¿porqué iban todos a gastar tiempo y energía en estos complejos cálculos si saben que alguien más lo va a calcular y se lo va a decir? ¿Porqué no quedarse quietecito esperando a que alguien anuncie el número?&lt;/p&gt;

&lt;p&gt;Buena pregunta. Aquí es donde entran los incentivos. Cada persona parte de Blockchain es apto para conseguir “premios”. El que antes calcule el número del sello para una hoja, recibe dinero por su esfuerzo (en uso de CPU y electricidad).&lt;/p&gt;

&lt;p&gt;Imagina que &lt;strong&gt;#5&lt;/strong&gt; ha calculado el número de sello de una hoja y se le entrega algo de dinero, digamos que 1€, que sale de la nada. Dicho de otra forma, el saldo en la cuenta de &lt;strong&gt;#5&lt;/strong&gt; aumenta 1€ sin que el de ninguna otra persona baje.&lt;/p&gt;

&lt;p&gt;Así nace Bitcoin. Bitcoin fue la primera monenda en ser usada en un Blockchain. Para mantener la red en crecimiento, se usaron estas monedas como premios.&lt;/p&gt;

&lt;p&gt;Cuando suficiente gente tiene Bitcoins, éstos aumentan su valor, haciendo que otra gente tambien los quiera; esto hace que el valor de Bitcoin suba aún más; lo que hace que más gente quiera bitcoins. Y así sucesivamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Son los premios los que hace a la gente seguir en la red&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y cuando cada uno ha guardado su hoja en su carpeta, sacan una nueva hoja y repiten todo el proceso otra vez. Indefinidamente.&lt;/p&gt;

&lt;p class=&quot;note&quot;&gt;
&lt;em&gt;&lt;strong&gt;Jerga&lt;/strong&gt; Imagina cada hoja como un bloque de transacciones, y la carpeta que contiene las hojas como una cadena (&lt;/em&gt;chain&lt;em&gt;) de hojas (bloques, blocks). Esta carpeta es, por tanto, un Blockchain.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;Y así, amigos mios, es como funciona un Blockchain.&lt;/p&gt;

&lt;p&gt;Excepto por un pequeño detalle que aún no he contado, todavía.&lt;/p&gt;

&lt;p&gt;Imagina que ya tenemos cinco hojas nuestra carpeta: todas selladas con su número correspondiente. ¿Qué pasa si vamos a la segunda hoja y modificamos una transacción para beneficio propio? El sello permitirá a todo el mundo saber que la hoja ha sido alterada, ¿cierto? ¿Y si además de eso calculo un nuevo número de sello para mi hoja modificada y la sello con el nuevo número?&lt;/p&gt;

&lt;p&gt;Para prevenir este problema, existe un truco en cómo se calcula el número de sello.&lt;/p&gt;

&lt;h3 id=&quot;protegiendo-los-números-de-sello&quot;&gt;Protegiendo los números de sello&lt;/h3&gt;
&lt;p&gt;¿Recuerdas cómo hablábamos de tener dos cajas: una con el número 20893 y otra vacía para rellenar con nuestro número de sello? En realidad, para calcular este número de sello en Blockchain no hacen falta dos cajas, sino tres: dos llenas y una vacía.&lt;/p&gt;

&lt;p&gt;Y es cuando el contenido de esas tres cajas se suma y se mete en la máquina, que el resultado debe satisfacer nuestra condición (antes decíamos empezar con 3 ceros).&lt;/p&gt;

&lt;p&gt;Ya sabemos que una caja contiene todas las transacciones y que otra caja deberá contener el número de sello. La tercera caja, lo que contiene, es el resultado de la máquina mágica para la hoja anterior de la cadena.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_19.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con este pequeño truco nos aseguramos de que cada hoja depende de la hoja anterior. Por tanto, si alguien modifica una página histórica, también tendría que modificar el contenido y sello de todas las hojas que van despues de ella para mantener la cadena consistente.&lt;/p&gt;

&lt;p&gt;Si alguno de los diez integrantes de nuestro ejemplo intenta modificar la cadena (la carpeta con las hojas de transacciones), tendría que alterar varias hojas y además calcular un nuevo sello para cada una. Ya sabemos lo dificil que es calcular un número de sello válido, por lo que este miembro desonhesto no puede (ni le merece la pena) intentar estafar a los otros nueve.&lt;/p&gt;

&lt;p&gt;Lo que ocurriría es que, desde la hoja que este corrupto modificó, se crearía una nueva cadena en la red, pero esta cadena jamás podría alcanzar la cadena real - la honesta-, básicamente porque el esfuerzo y velocidad de esta persona no puede competir con el de las otras nueve. De esta forma, se garantiza que la cadena más larga de la red es la cadena real.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;La cadena más larga de la red es la cadena real.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/blockchain/blockchain_20.png&quot; alt=&quot;Joe and me&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¿Eso de que una sóla persona no pueda batir a los otros nueve… no canta por algún lado?&lt;/p&gt;

&lt;h3 id=&quot;y-si-en-vez-de-ser-sólo-uno-son-seis-los-corruptos&quot;&gt;¿Y si en vez de ser sólo uno, son seis los corruptos?&lt;/h3&gt;

&lt;p&gt;En ese caso, el protocolo habría fracasado. A este caso se le conoce como el &lt;em&gt;“Ataque del 51%”&lt;/em&gt;. Si la mayoría de la gente en la red decide hacerse corrupta y estafar al resto de la red, el protocolo dejaría de tener sentido y consideraríamos que no vale nada.&lt;/p&gt;

&lt;p&gt;Y esa es la única vulnerabilidad porque las Blockchains pueden colapsar, si alguna vez lo hacen. Incluso si es muy improbable que esto ocurra, es bueno conocer cuales son los puntos débiles del sistema. Este sistema está construido bajo la suposición de que la mayoría de la gente es honesta.&lt;/p&gt;

&lt;p&gt;Y esto, amigos, es todo lo que hay que saber sobre Blockchains. Si alguna vez te encuentras a alguien perdido preguntándose &lt;em&gt;“¿Qué diablos es Blockchain?”&lt;/em&gt;, ya sabes dónde lo puedes mandar. Guárdate el enlace.&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Sep 2017 00:00:00 +0200</pubDate>
        <link>https://pabloreyes.es/que-diablos-es-blockchain/</link>
        <guid isPermaLink="true">https://pabloreyes.es/que-diablos-es-blockchain/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Turn on red</title>
        <description>&lt;p&gt;Hace sólo un par de semanas que un empleado de TESLA me enseñó el término &lt;em&gt;“Turn on red”&lt;/em&gt;. Fue durante una prueba de un Model S donde no pude evitar preguntarle porqué tantos coches se saltaban los semáforos en rojo.&lt;/p&gt;

&lt;p&gt;Ya había confianza entre Brett y yo: había descubierto que no tenía la mínima intención de comprar el coche a pesar de ser mi segunda prueba, y había retirado su oferta de dejarme el coche 1 semana para probarlo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/semaforos.jpg&quot; alt=&quot;Semáforos&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
Hace sólo un par de semanas que un empleado de TESLA me enseñó el término &lt;em&gt;“Turn on red”&lt;/em&gt;. Fue durante una prueba de un Model S donde no pude evitar preguntarle porqué tantos coches se saltaban los semáforos en rojo. Ya había confianza entre Brett y yo: había descubierto que no tenía la mínima intención de comprar el coche a pesar de ser mi segunda prueba, y había retirado su oferta de dejarme el coche 1 semana para probarlo.&lt;/p&gt;

&lt;p&gt;Llevo dos meses viviendo y conduciendo en los Estados Unidos y cada día pienso que me voy a dar un porrazo, o más bien, que me lo van a dar. Nadie me había dicho que en este país puedes girar en las intersecciones cuando tienes tu semáforo en rojo. En un principio, todo lo que pensaba era &lt;em&gt;“mira oye, en España somos más civilizados”&lt;/em&gt;. Incluso en más de una ocasión he sentido la presión del coche de atrás cuando me pitaba estando el semáforo en rojo. Y yo ahí, quietecito.&lt;/p&gt;

&lt;p&gt;Resulta que esta práctica de girar a la derecha cuando el semáforo está en rojo es más común de lo que pensaba y está implementada en varios países, pero mi nuevo amigo de Tesla me lo explicó de una forma muy concreta:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Verás, mi mejor amigo Pablo. En los años 70, nuestro país sufrió la primera crisis del petróleo, que afectó a toda la economía del país y de gran parte del mundo. Nuestro gobierno decidió tomar medidas para fomentar la producción energética así como optimizar su consumo. Entre otras cosas, decidieron decirle a los estados lo siguiente:&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hey, estado. Si quieres recibir ayuda federal para la ristra de cosas que te voy a obligar a cumplir, más te vale permitir que los coches puedan girar a la derecha en los cruces cuando el semáforo está en rojo. Así pasan menos tiempo parados y gastan menos gasofa. Te dejaré poner algunas excepciones.&lt;/p&gt;

  &lt;p&gt;&lt;cite&gt;&lt;a href=&quot;https://www.gpo.gov/fdsys/pkg/STATUTE-89/pdf/STATUTE-89-Pg871.pdf&quot;&gt;Energy Policy and Conservation Act of 1975&lt;/a&gt; , Página 63.&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;La mayoría de los estados, deseosos de recibir esas ayudas, aceptaron la oferta. Y así, hasta día de hoy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Esto me hizo pensar en la cantidad de cosas que damos por sentadas de las que desconocemos su origen o motivo. A mi me llamó la atención porque no estoy acostumbrado a ello, pero los millones de conductores que circulan por estas carreteras a diario ni siquiera lo piensan. No es una norma. No es un derecho. Es que es así.&lt;/p&gt;

&lt;h2 id=&quot;perspectiva&quot;&gt;Perspectiva&lt;/h2&gt;

&lt;p&gt;En nuestro día a día nos encontramos con cientos de reglas, leyes, políticas y demás ordenanzas tanto en la calle como en nuestro trabajo. &lt;em&gt;¿Porqué tengo que rellenar este documento si ya lo tienen? ¿Porqué puedo beber aquello y no fumar esto otro? ¿He cambiado el coche de acera, hoy día 15?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;En la mayoría de los casos, las normas se aplican porque existe una necesidad. Una necesidad que se tuvo y estudió en cierto momento y llevó a la aplicación de la norma, muchas veces preventiva, por si acaso. Ahora, pasado el tiempo, puede estar más o menos justificada, pero conocer el origen y el porqué es fundamental para poder discutirla, defenderla o revocarla si es necesario.&lt;/p&gt;

&lt;p&gt;El caso del semáforo muestra una cosa curiosa. Si ahora Estados Unidos prohibiera el giro a la derecha en rojo, la gente lo vería como una nueva imposición, una nueva ley en contra de la libertad de los ciudadanos. Estarían perdiendo algo. Si en España nos dijeran que podremos girar a la derecha, pensaríamos &lt;em&gt;“ay Jose, que nos matamos”&lt;/em&gt;. Es todo cuestión de perspectiva.&lt;/p&gt;

&lt;p&gt;Hace un par de semanas estuve en Hamilton, Ontario (Canadá), donde el padre de una amiga me comentaba que el sistema métrico confundía a los americanos que entraban en el país vecino desde Buffalo, que iban como locos a 75mph (120km/h) pensando que aún tenían margen hasta los 100mph. Porque allí, en Ontario, la velocidad maxima son 100km/h. Y mira tú por donde, es un límite impuesto por &lt;a href=&quot;http://www.mto.gov.on.ca/english/about/mto-100/#1970s&quot;&gt;la misma crisis energética que comentaba antes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/canada-change-road-sign.jpg&quot; alt=&quot;Road rigns change&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;
&lt;em&gt;La fotografía de arriba, propiedad del &lt;a href=&quot;http://www.mto.gov.on.ca/english/index.shtml&quot;&gt;Ministerio de Transporte de Ontario&lt;/a&gt;, muestra a trabajadores en 1976 cambiando las señales de velocidad en la autopista 401.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/velocidad-espana-abc.png&quot; alt=&quot;Limite 110 en España&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-left&quot; /&gt;
Cuando en España limitamos el límite a 110km/h durante un verano para ahorrar energía, la gente protestó, se echó a la calle, y los periódicos decían que el gobierno nos “frenaba”.&lt;/p&gt;

&lt;p&gt;Montamos un follón por una norma que duró un un verano, y todavía íbamos más rápidos que los canadienses. Estos norteños llevan pisando huevos 40 años.&lt;/p&gt;

&lt;p&gt;40 años después de aquella crisis energética, los americanos siguen girando a la derecha en rojo y los canadienses siguen con límites de velocidad que no corresponden a sus carreteras. Porque es así. Porque ya hace mucho tiempo de aquello y ya nadie sabe el porqué o nadie tiene tiempo de ponerse a cambiarlo.&lt;/p&gt;

&lt;p&gt;Cada uno vemos las cosas con las gafas de moda en nuestro entorno, ya sea este nuestra cultura, país, familia, sector o amigos. Que encontremos caos a diario no es casualidad: tenemos historias tan distintas y quedan tantos flecos no cortados desde hace tanto tiempo que ya ni se recuerda porqué están ahí. Todos pensamos que conocemos la verdad y que otros no la ven; que nuestros superiores hacen las cosas mal y que nosotros las haríamos mejor; que las normas que nos convienen en este momento son derechos universales y las que no son represión.&lt;/p&gt;

&lt;h2 id=&quot;conocer-y-comparar&quot;&gt;Conocer y comparar&lt;/h2&gt;

&lt;p&gt;Viajar mola. Hay cosas muy bonitas y lo mejor es que con fotos de viajes siempre se consiguen nuevos followers (#instatravel #vamoooosjajaja). Pero lo segundo mejor de viajar es conocer la cultura, la gente, las normas sociales, lo que allí piensas que está bien o está mal. Conocer y comparar. Esa es mi parte favorita. No hay forma de saber cómo de especiales somos, qué nos define, porqué algo es bueno o malo si no conocemos cómo funciona el resto del mundo, y en ocasiones ni el mismo nuestro.&lt;/p&gt;

&lt;p&gt;La sociedad sigue cambiando y seguirán apareciendo nuevas normas, derechos y costumbres. Hace sólo unos 30 años casi la mitad del Congreso de los Diputados (y puede que casi la mitad de los ciudadanos) &lt;a href=&quot;http://www.europapress.es/otr-press/cronicas/noticia-cumplen-35-anos-ley-divorcio-espana-20160622085944.html&quot;&gt;votaba en contra de la ley del divorcio&lt;/a&gt;. Pero ojo, que esa ley requería que la pareja estuviera años viviendo separada antes de poder ejercer el divorcio. El divorcio que hoy conocemos tú y yo &lt;a href=&quot;http://www.elmundo.es/elmundo/2005/07/09/espana/1120903826.html&quot;&gt;no llegó hasta 2005&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por cada cosa que disfrutamos ahora, miles se han quejado antes. Y en unos años estaremos disfrutando las cosas de las que ahora nos quejamos. Muy crazy todo.&lt;/p&gt;

&lt;p&gt;Seamos prudentes con lo que criticamos y con las ideas radicales. El mundo seguirá girando cada vez más deprisa, y no queremos que nos pille mientras estamos ahí, quietecitos.&lt;/p&gt;
</description>
        <pubDate>Thu, 08 Jun 2017 00:00:00 +0200</pubDate>
        <link>https://pabloreyes.es/turn-on-red/</link>
        <guid isPermaLink="true">https://pabloreyes.es/turn-on-red/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Yo no construí la bomba, sólo demostré que existía</title>
        <description>&lt;p&gt;El 9 de Noviembre sobre las 8:30am, Michal Kosinski se despertaba en el Hotel Sunnehus en Zurich. El investigador, de 34 años, había venido a dar una charla al Instituto Federal de Tecnología Suizo (ETH) sobre los peligros del Big Data y la revolución digital. Kosinski da estas charlas con frecuencia en todo el mundo. Es experto en psicometría, una rama de la psicología donde se miden y cuantifican variables psicológicas.&lt;/p&gt;

&lt;p&gt;Cuando encendió la televisión esa mañana, descubrió que la bomba había explotado: En contra de lo previsto por los mejores estadistas, Donald J. Trump había sido elegido Presidente de los Estados Unidos.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Este artículo es una traducción personal al castellano del original “Ich habe nur gezeigt, dass es die Bombe gibt”, publicado por &lt;a href=&quot;https://www.dasmagazin.ch/2016/12/03/ich-habe-nur-gezeigt-dass-es-die-bombe-gibt/&quot;&gt;Das Magazin&lt;/a&gt;. La traducción no se hizo en base al original alemán, sino a una versión inglesa ahora desaparecida encontrada en &lt;a href=&quot;https://antidotezine.com/2017/01/22/trump-knows-you/&quot;&gt;aNtiDiTe Zine&lt;/a&gt;, y que ahora está disponible en &lt;a href=&quot;https://motherboard.vice.com/en_us/article/big-data-cambridge-analytica-brexit-trump&quot;&gt;VICE&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;La infografía siguiente es elaboración propia.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/cambridge-analytica-chart.png&quot; alt=&quot;Infograph Camabridge Analytica&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El 9 de Noviembre sobre las 8:30am, Michal Kosinski se despertaba en el Hotel Sunnehus en Zurich. El investigador, de 34 años, había venido a dar una charla al Instituto Federal de Tecnología Suizo (ETH) sobre los peligros del Big Data y la revolución digital. Kosinski da estas charlas con frecuencia en todo el mundo. Kosinski es experto en psicometría, una rama de la psicología donde se miden y cuantifican variables psicológicas.  Cuando encendió la televisión esa mañana, descubrió que la bomba había explotado: En contra de lo previsto por los mejores estadistas, Donald J. Trump había sido elegido Presidente de los Estados Unidos.&lt;/p&gt;

&lt;p&gt;Durante un rato, Kosinski observó las celebraciones de la victoria de Trump y los resultados de cada estado. Tenía el presentimiento de que el resultado de las elecciones tenían algo que ver con sus investigaciones. Respiró profundamente y apagó la televisión.&lt;/p&gt;

&lt;p&gt;Ese mismo día, una pequeña y poco conocida empresa británica ubicada en Londres enviaba una nota de prensa: “Estamos encantados de que nuestro revolucionario método de comunicación basado en datos haya jugado un papel tan importante en la extraordinaria victoria del presidente electo Donald Trump.”, firmaba un tal Alexander James Ashburner Nix. Nix es británico, de 41 años, y CEO de Cambridge Analytica. Siempre luce inmaculado en trajes a medida y gafas de diseño, con su ondulado pelo rubio peinado hacia atrás.&lt;/p&gt;

&lt;p&gt;De estos tres individuos - el reflexivo Kosinski, el inmaculado Nix y el sonriente Trump -, uno de ellos permitió la revolución digital, otro la hizo realidad y otro se benefició de ella.&lt;/p&gt;

&lt;h2 id=&quot;cómo-de-peligroso-es-el-big-data&quot;&gt;¿Cómo de peligroso es el Big Data?&lt;/h2&gt;
&lt;p&gt;Todo aquel que no haya pasado los últimos cinco años viviendo en otro planeta estará ya familiarizado con el término Big Data. Big Data significa que todo lo que hacemos, ya sea online u offline, deja una huella digital. Cada compra que hacemos con nuestras tarjetas, cada búsqueda que hacemos en Google, cada sitio al que vamos con nuestro teléfono en el bolsillo, cada “me gusta” es recolectado. Especialmente cada “me gusta”. Durante mucho tiempo, no estaba del todo claro qué uso podríamos darle a esta información - más allá de recibir anuncios de medicamentos para la presión sanguínea tras haber buscado en Google “reducir presión sanguínea”. Tampoco estaba claro si el Big Data pondría en peligro o beneficiaría a la raza humana. El 9 de Noviembre supimos la respuesta. La compañía detrás de la campaña online de Trump, así como la del Brexit, era una compañía de Big Data: Cambridge Analytica, cuyo CEO es Alexander Nix.&lt;/p&gt;

&lt;p&gt;Para entender el resultado de las elecciones - y lo que puede llegar a Europa en los próximos meses - tenemos que empezar con un extraño incidente en la Universidad de Cambridge en 2014, en el Centro de Psicometría de Kosinski.&lt;/p&gt;

&lt;p&gt;La psicometría, a veces denominada psicografía, se centra en medir rasgos psicológicos como la personalidad. En los años 80, dos equipos de psicólogos demostraron que cada rasgo del ser humano se puede evaluar basándose en cinco dimensiones de la personalidad, conocidos como los Big Five. Estos son: Disposición (¿como de dispuesto estás a nuevas experiencias?), conciencia (¿cómo de perfeccionista eres?), extraversión (¿cómo de sociable eres?), amabilidad (¿cómo de considerado y cooperativo eres?) y neuroticismo (¿eres fácil de enfadar?). En base a estas dimensiones - conocidas como OCEAN por el acrónimo del inglés: openness, conscientiousness, extroversion, agreeableness, neuroticism - podemos hacernos una idea bastante acertada de la persona que tenemos delante. Esto incluye sus necesidades, sus miedos y su comportamiento. El “Big Five” se ha convertido en la técnica estándar de la psicometría. Pero durante mucho tiempo, el problema de esta técnica era la recolección de estos datos, ya que implicaban el relleno de un largo formulario muy personal. Pero llegó Internet. Y Facebook. Y Kosinski.&lt;/p&gt;

&lt;p&gt;Michal Kosinski era estudiante en Varsovia cuando su vida tomó una nueva dirección en 2008. Fue aceptado en la Universidad de Cambridge para realizar su Doctorado en el Centro de Psicometría, uno de las instituciones más antiguas en esta materia. Kosinski se unió a David Stillwell (ahora profesor en la de Universidad de Cambridge) un año después de que Stillwell hubiera lanzado una pequeña aplicación de Facebook cuando Facebook no era el gigante que es hoy en día. Su aplicación MyPersonality hacía a los usuarios responder a unas preguntas, muchas de ellas del cuestionario del Big Five (“Me pongo nervioso fácilmente” - “Contradigo a los demás”). Una vez evaluadas esas respuestas, los usuarios recibían un “Perfil de Personalidad” - de los valores del Big Five - y podían compartir su perfil con los investigadores. Kosinski esperaba que algunas docenas de compañeros de universidad rellenaran el cuestionario, pero antes de lo que esperaba, cientos, miles y hasta millones de personas le habían revelado sus más íntimas convicciones. De repente, los dos estudiantes de doctorado tenían la mayor base de datos que combinaba evaluaciones psicométricas con perfiles de Facebook.&lt;/p&gt;

&lt;p&gt;El método que Kosinski y sus compañeros desarrollaron durante los siguientes años era bastante simple. Primero, presentaban a los participantes un formulario online. De sus respuestas, los psicólogos calculaban los valores de sus Big Five. El equipo de Kosinksi comparaba entonces los resultados con toda la demás información que pudieran obtener del sujeto: a qué hacían “me gusta”, qué compartían y que escribían en Facebook, qué edad tenían, género o lugar de residencia. Esto permitía a los investigadores unir puntos y crear correlaciones. Por ejemplo, los hombres que hacían “me gusta” en cosméticos MAC eran, por lo general, gays; uno de los mayores indicadores de heterosexualidad es que hubiera hecho like al Wu-Tang Clan. Los seguidores de Lady Gaga tendían a ser más extrovertidos, mientras más “filosóficos” tendían a ser más introvertidos. Aunque una sóla pieza de esta información es irrelevante para hacer una predicción, cuando se combinan decenas, centenas o miles de estos datos, los resultados de las predicciones llegan a ser muy acertados.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Los seguidores de Lady Gaga tendían a ser más extrovertidos, mientras más “filosóficos” tendían a ser más introvertidos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kosinski y su equipo siguieron redefiniendo sus modelos. En 2012, Kosinski demostró que con una media de 68 “me gusta” de un usuario, era posible predecir su color de piel (en un 95%), su orientación sexual (88%) y su afiliación al partido Demócrata o Republicano (85%). Pero no acababa ahí. Inteligencia, religión, consumo de alcohol y tabaco, podían predecirse. De estos datos, podía incluso saberse si los padres de una persona estaban divorciados. La robustez del modelo podía ilustrarse sobre cómo de bueno era éste prediciendo las respuestas del sujeto. Kosinski continuó trabajando en su modelo de forma incesante: en poco tiempo, el modelo era capaz de evaluar a una persona mejor que un compañero de trabajo, basándose sólo en 10 “me gusta”. 70 “me gusta” eran suficiente para para hacerlo mejor que un amigo, 150 mejor que sus padres, y 300 mejor que su pareja. Más “me gusta” podían incluso predecir más de lo que la misma persona sabía sobre ella misma. El día en que Kosinski publicó estos descubrimientos, recibió dos llamadas de teléfono: Una amenaza de denuncia y una oferta de trabajo. Las dos eran de Facebook.&lt;/p&gt;

&lt;p&gt;Unas semanas después, los “me gusta” en Facebook pasaron a ser privados por defecto. Antes, la configuración por defecto era que cualquier persona podía ver tus “me gusta”. Esto no fue inconveniente para los recolectores de datos: mientras que Kosinski siempre pedía el consentimiento de los usuarios, muchas aplicaciones y cuestionarios online requerían acceso a la información privada como precondición para poder rellenar el test. (Quien quiera evaluarse a sí mismo basándose en sus likes de Facebook puede hacerlo en la web de Kosinski: applymagicsauce.com, y luego comparar los resultados con los del clásico cuestionario de los Big Five: discovermyprofile.com/personality.html)&lt;/p&gt;

&lt;p&gt;Pero no sólo se trata de “me gustas”, ni siquiera sólo de Facebook. Kosinski y su equipo pueden predecir valores de los Big Five basándose en el número de fotos de perfil o cuántos contactos tiene una persona (buen indicador de la extraversión). Pero también revelamos información cuando estamos offline. Por ejemplo, el sensor de moviiento de nuestros teléfonos indica cómo de rápido nos movemos y cómo de lejos viajamos (lo cual tiene correlación con inestabilidad emocional). Nuestro teléfono, concluye Kosinski, es un gran cuestionario psicológico que siempre estamos rellenando, ya sea consciente o inconscientemente. Lo mejor es que, sin embargo - y esto es clave -, también funciona al revés: tus datos no sólo pueden generar un perfil psicológico, sino que pueden usarse al revés para encontrar ciertos perfiles de personas: padres con ansiedad, introvertidos furiosos, por ejemplo - ¿o quizás incluso todos los demócratas indecisos? Básicamente, lo que Kosinski había inventado era un buscador de personas.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Nuestro teléfono, concluye Kosinski, es un gran cuestionario psicológico que siempre estamos rellenando, ya sea consciente o inconscientemente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kosinski empezó a reconocer el potencial - aunque también el peligro inherente - de su obra. Para él, Internet había sido una especie de regalo del cielo. Lo que él pretendía era devolver el favor, compartirlo. Los datos se pueden copiar, así que ¿porqué no íbamos todos a aprovecharnos de ello? Era el espíritu de una nueva generación, el comienzo de una nueva era que traspasaba las limitaciones del mundo físico. ¿Pero qué pasaría, se preguntaba Kosinski, si alguien abusara de su buscador de personas para manipular a la gente? Comenzó a añadir advertencias a casi todo su trabajo científico. Su método, advertía, “podía suponer una amenaza para el bienestar, libertad e incluso vida del individuo”. Pero parece que nadie entendió lo que quería decir.&lt;/p&gt;

&lt;p&gt;Sobre esta fecha, a principios de 2014, un joven profesor asistente llamado Aleksandr Kogan se acercó a Kosinski. Le comentó que, hablando en nombre de una empresa, estaba interesado en su método. Dicha compañía quería tener acceso a la base de datos de myPersonality, recuerda Kosinski. Kogan no podía decir con qué objetivo quería esta empresa esta información; debía guardar el secreto. Al principio, Kosinski y su equipo consideraron la oferta, puesto que supondría un buen ingreso de dinero en el centro - pero entonces dudó. Al final, recuerda Kosinski, Kogan desveló el nombre de la compañía: SCL - Strategic Communication Laboratories. Kosinski buscó en Google la compañía: “[Somos] la principal agencia de gestión electoral”, explicaba la web de la compañía. SCL ofrecía marketing basado en modelos psicológicos. Unos de sus principales objetivos: Influenciar en elecciones. ¿Influenciar en elecciones? Perturbado, Kosinski indagó en la web. ¿Qué tipo de compañía era esta? ¿Y qué tenía entre manos?&lt;/p&gt;

&lt;p&gt;Había algo que Kosinski no conocía en aquel momento: SCL es la matriz de un grupo de compañías. A quién pertenece SCL y sus diversas ramas no está claro, gracias a una difusa estructura corporativa - como puede comprobarse en el registro de compañías británico, los papeles de Panamá y su registro como compañía en Delaware. Algunas de las ramas de SCL han estado involucradas en el derrocamiento de gobiernos en países en desarrollo, mientras que otras han desarrollado métodos de manipulación psicológica al pueblo afgano  a petición de la OTAN. Además, SCL es la empresa madre de Cambridge Analytica, la siniestra compañía de Big Data que luego trabajó para la campaña online de Trump y el Brexit.&lt;/p&gt;

&lt;p&gt;Kosinski no sabía nada en absoluto de todo esto, pero tenía un presentimiento. “Todo empezaba a oler mal”, recuerda. Tras más investigaciones, descubrió que Aleksandr Kogan había registrado, de forma secreta, una compañía que hacía negocios con SCL. Como demostró posteriormente The Guardian en Diciembre de 2015, y por documentos revisados por Das Magazin, SCL había descubierto el método de Kosinski a través de Kogan. De repente Kosinski pensó que habían conseguido reproducir (¿o copiar?) su método de medida del Big Five usando los “me gusta” de Facebook para venderlo a esta compañía de “gestión de elecciones”. Kosinski cortó directamente el contacto con Kogan e informó al director del instituto, generando así un difícil conflicto en la universidad. El instituto temía por su reputación. Aleksander Kogan se mudó a Singapur,  se casó, y se cambió el nombre a “Dr. Spectre”. Michal Kosinski terminó su doctorado, obtuvo un trabajo en Stanford y se mudó a Estados Unidos.&lt;/p&gt;

&lt;p&gt;Todo se mantuvo en calma durante un año. Hasta que, en Noviembre de 2015, la más radical de las campañas de Brexit, “Leave.EU”, liderado por Nigel Farage, anunciaba que había encargado a una compañía de Big Data llevar su campaña online: Cambridge Analytica. El mayor potencial de la compañía: novedoso marketing político -microtargeting- midiendo la personalidad de la gente por sus huellas en la nube, basado en el modelo OCEAN.&lt;/p&gt;

&lt;p&gt;Kosinski empezó a recibir emails preguntando qué tenía él que ver con eso -las palabras Cambridge, personalidad y análisis llevaban a mucha gente a pensar directamente en Kosinski. Era la primera vez que Kosinski escuchaba sobre esta compañía. Preocupado, buscó en la web. ¿Estaban usando su método a gran escala con intereses políticos?&lt;/p&gt;

&lt;p&gt;Tras el resultado del Brexit, amigos y conocidos le escribían: Mira lo que has conseguido. A cada sitio que iba, Kosinski tenía que explicar que no tenía nada que ver con esta compañía.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Tras el resultado del Brexit, amigos y conocidos le escribían: Mira lo que has conseguido.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pasaron meses. El 19 de Septiembre de 2016 llegó; las elecciones americanas se acercaban rápidamente. Riffs de guitarra llenaban la recepción azul oscura del New York Grand Hyatt Hotel; “Bad Moon Risin” de Creedence Clearwater Revival. El Concordia Summit es una especie de Foro Económico Mundial en miniatura. Dirigentes de todo el mundo habían sido invitados, entre ellos el presidente suizo Schenider-Ammann. “Por favor, den la bienvenida a Alexander Nix, CEO de Cambridge Analytica”, anunciaba una suave voz femenina. Un hombre delgado en traje oscuro subía al escenario. De repente, silencio. (&lt;a href=&quot;https://www.youtube.com/watch?v=n8Dd5aVXLCc&quot;&gt;El vídeo está en Youtube&lt;/a&gt;). Muchos de los presentes sabían que el presente era el nuevo hombre de Trump para su estrategia digital. “Pronto me llamareis Mr. Brexit”, Trump twiteaba recientemente, de forma un poco críptica, unas semanas antes. Algunos analistas políticos ya habían percibido algunas similaridades inquietantes entre la agenda de Trump y la de la del movimiento de Leave del Brexit. Pero pocos habían caído en la reciente contratación de una compañía de marketing llamada Cambridge Analytica.&lt;/p&gt;

&lt;p&gt;Hasta este momento, la campaña digital de Trump había consistido en básicamente una persona: Brad Parscale, un emprendedor publicitario y fallido fundador de una startup que creó una web para Trump por 1500 dólares. Trump, con 70 años, no es demasiado amante de la tecnología - ni siquiera tiene ordenador en su escritorio. Trump no usa emails, según revelaba su asistenta personal. Ella misma le insistía en tener un smartphone - desde donde ahora twittea sin parar.&lt;/p&gt;

&lt;p&gt;Hillary Clinton, por otro lado, confiaba plenamente en el legado del primer “presidente de redes sociales”, Barack Obama. Tenía la lista de direcciones de todo el Partido Demócrata, conseguido gracias a análisis de alta tecnología de “BlueLabs” y recibía soporte de Google y DramWorks. Cuando se anunció en Junio de 2016 que Trump había contratado a Cambridge Analytica, el “establishment” de Washington renegó y lo criticó. ¿Extranjeros en trajes a medida que no entienden ni nuestro país ni nuestra gente? ¿En serio?&lt;/p&gt;

&lt;p&gt;“Es un privilegio para mí el hablar antes ustedes hoy sobre el poder del Big Data y la psicografía en el proceso electoral”. El logo de Cambridge Analytica - un cerebro compuesto de nodos de una red, como un mapa, aparecía tras Alexander Nix. “Hace sólo dieciocho meses, el Senador Cruz era uno de los candidatos menos populares”, explicaba el hombre rubio con su distinguido acento británico, que deja a los americanos igual de incómodos que un acento puro alemán deja a un suizo. “Menos del 40% de la población había escuchado hablar de él”, decía otra diapositiva. Al final de 2014, Cambridge Analytica se había involucrado en las campañas electorales de Estados Unidos, en un principio como consultora para el republicano Ted Cruz, subvencionado por el reservado billonario del software Robert Mercer. Todos en la sala conocían el meteórico ascenso del Senador conservador Cruz. Era uno de los sucesos más extraños de la campaña electoral: ¿Cómo había conseguido el Senador Cruz llegar a ser la última competencia directa de Trump para las primarias Republicanas, subiendo del 5 al 35%? “¿Cómo lo hizo?”. Hasta ahora, explica Nix, las campañas electorales se han basado en conceptos demográficos. “Una idea ridícula. La idea de que todas las mujeres debían recibir el mismo mensaje sólo por su género - o que todos los afroamericanos debían hacerlo por su raza.” Lo que Nix quiere decir es que los demás han confiado en la demografía, mientras que Cambridge Analytica está usando psicometría.&lt;/p&gt;

&lt;p&gt;Aunque esto sea cierto, el papel de Cambridge Analytica en la campaña de Cruz no está libre de disputas. En Diciembre de 2015, el equipo de Cruz reconocía su exitoso ascenso gracias al uso psicológico de datos y análisis. En la “Era de la Publicidad”, un cliente político calificó al personal de Cambridge como “una rueda de respuesto”, pero consideró que su producto principal, el modelo de datos de votantes de Cambridge, continuaba siendo “excelente”. Aún así, no está claro hasta qué punto estaba Cambridge Analytica involucrada en la campaña de “Leave”. Cambridge Analytica no discutirá estas preguntas.&lt;/p&gt;

&lt;p&gt;Nix pasa a la siguiente diapositiva: cinco caras diferentes, cada una correspondiente a un perfil de personalidad. Es el Big Five, o el modelo OCEAN. “En Cambridge”, comenta Nix, “somos capaces de crear un modelo para predecir la personalidad de cada uno de los adultos en los Estados Unidos de América.”. La audiencia presta atención. Según Nix, el éxito del marketing de Cambridge Analytica se basa en una combinación de tres elementos: ciencia del comportamiento usando el modelo OCEAN, análisis de Big Data, y publicidad especializada. La publicidad especializada, en otras palabras, es una publicidad dirigida y formulada de forma muy concreta para la personalidad de cada individuo.&lt;/p&gt;

&lt;p&gt;Nix explica cómo su compañía consigue estos resultados. Primero, Cambridge Analytica compra datos personales de distintas fuentes como registros de propiedades, datos de transporte, de compras, tarjetas de bonus, pertenencia a clubs, que revistas lees, a qué iglesias vas, etc. Nix enseña los logos de varias compañías especializadas en este tipo de información como Acxiom y Experian - en los Estados Unidos, casi toda la información personal está a la venta. Por ejemplo, si quieres saber dónde vienen las mujeres judías, puedes comprar la información, con números de teléfono incluido. Luego, Cambridge Analytica agrega todos esos datos con la lista miembros del Partido Republicano y datos online como los “me gusta” de facebook - hoy en día la compañía dice no usar datos de facebook - y calcula un perfil de personalidad de Big Five.  Las huellas digitales de repente se convierten en una persona real, con miedos, necesidades, intereses - y dirección física.&lt;/p&gt;

&lt;p&gt;La metodología es bastante similar a la que desarrolló en aquel momento Michal Kosinski. Cambridge Analytica usaba además, según Nix, “encuestas en redes sociales” y datos de Facebook. Y Cambridge Analytica hacía precisamente lo mismo que Kosinski advertía: “Hemos creado perfiles de todos los adultos de Estados Unidos - 220 millones de personas”, se enorgullecía Nix. Abre una captura de pantalla. “Este es el panel resumen que  preparamos para la campaña de Cruz.”. Un panel de control aparece. A la izquierda están los diagramas, a la derecha un mapa de Iowa, donde Cruz ganó un importante número de votos en las primarias. Y en el mapa, aparecen cientos de miles de puntos rojos y azules. Nix ajusta el filtro aún más: “Republicanos”, - los puntos azules desaparecen; “Incesisos” - más puntos desaparecen; “hombres”, etc. Finalmente, sólo una persona queda en el mapa, incluyendo edad, dirección, intereses, personalidad e inclinación política. ¿Cómo hace Cambridge Analytica para actuar específicamente sobre esta persona con el mensaje político correcto?&lt;/p&gt;

&lt;p&gt;Nix enseña cómo pueden dirigirse de forma distinta a votantes que han sido categorizados psicológicamente, usando como ejemplo el derecho al uso de armas, la Segunda Enmienda: “Para un público neurótico y diligente, la amenaza de un robo - y la póliza de seguro de un arma”. Una imagen a la izquierda muestra la mano de un ladrón rompiendo una ventana. A la derecha, una foto de un hombre con su hijo contemplando el atardecer, ambos con armas en la mano, disparando a patos. “Por otro lado, para un público más cercano y afable. Gente que se preocupa de las tradiciones, los hábitos, la familia”.&lt;/p&gt;

&lt;h2 id=&quot;cómo-mantener-a-los-votantes-de-clinton-lejos-de-las-urnas&quot;&gt;Cómo mantener a los votantes de Clinton lejos de las urnas&lt;/h2&gt;
&lt;p&gt;Las continuas inconsistencias de Trump, su muy criticada inconsistencia, y sus consecuentes mensajes contradictorios, de repente se convirtieron en su principal arma: un mensaje distinto para cada votante. El que Trump actuara como un perfecto algoritmo oportunista siguiendo únicamente la reacción del público es algo que el matemático Cathy O’Neil ya había mencionado en Agosto de 2016. “Prácticamente cada mensaje de Trump fue diseñado por el análisis de los datos”, recuerda Alexander Nix. El día del tercer debate entre Trump y Clinton, el equipo de Trump probó 175000 variaciones de sus argumentos para encontrar la mejor, todo basado en Facebook. Los mensajes se distinguían en su mayoría por detalles microscópicos, con el objetivo de llegar al espectador de la mejor forma posible: diferentes cabeceras, colores, ilustraciones con fotos o vídeos. El perfeccionismo llegaba hasta los grupos más minoritarios, explica Nix en una entrevista a Das Magazin. “Podemos llegar a pueblos o bloques de apartamentos de una forma concreta. Incluso a particulares”.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Prácticamente cada mensaje de Trump fue diseñado por el análisis de los datos”, recuerda Alexander Nix.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En el distrito de Miami de Little Haiti, la campaña de Trump mostraba a sus habitantes noticias acerca del fracaso de la fundación de Clinton en la ayuda tras el terremoto de Haití - con el objetivo de que no votaran a Hillary Clinton. Este era uno de los objetivos: mantener a potenciales votantes de Clinton (incluyendo gente de izquierda insegura, afroamericanos y mujeres jóvenes) lejos de las urnas, “borrar” su voto, cómo decía uno de los empleados de Trump. Estos “puntos oscuros” - publicidad encubierta en la lista de noticias de facebook de forma que sólo ciertos perfiles específicos pueden verlo - incluían videos únicamente para afroamericanos donde Hillary Clinton se refería a los hombres negros como “depredadores”, por ejemplo.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Estos “puntos oscuros” - publicidad encubierta en la lista de noticias de facebook de forma que sólo ciertos perfiles específicos pueden verlo - incluían videos únicamente para afroamericanos donde Hillary Clinton se refería a los hombres negros como “depredadores”, por ejemplo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nix acaba su presentación en el Concordia Summit dejando claro que la publicidad tradicional está muerta. “Mis hijos seguramente nunca, jamás, entenderán este concepto de comunicación masiva.”. Antes de dejar el escenario, anunciaba que uno de los dos candidatos que aún quedaban estaba usando esta nueva tecnología.&lt;/p&gt;

&lt;p&gt;La precisión con la que la población americana se estaba abordando por las tropas digitales de Trump en ese momento no estaba claro - porque atacaban menos en la televisión tradicional, y más con mensajes personalizados en redes sociales o televisión digital. Y mientras que el equipo de Clinton pensaba que estaba en cabeza basado en proyecciones demográficas, la periodista de Bloomberg Sasha Issenberg se sorprendía en una visita a San Antonio - donde se basa la campaña digital de Trump - cuando vio que se estaban creando unas segundas sedes. El equipo integrado de Cambridge Analytica, aparentemente sólo 12 personas, recibió 100.000 dólares de Trump en Julio, 250.000 en Agosto, y 5 millones en Septiembre. Según nuestras últimas conversaciones con Mr. Nix, ganaron más de 15 millones de dólares en total.&lt;/p&gt;

&lt;p&gt;Y los efectos fueron radicales: Desde Julio de 2016, los “corredores” de Trump que iban puerta por puerta tenían una aplicación móvil donde podían identificar las ideas políticas de los habitantes de una vivienda. Fue la misma app que se usó durante el Brexit. La gente de Trump sólo pegaba en las puertas de gente que la app consideraba receptivas a sus mensajes. Iban preparados con guiones para conversaciones personalizadas según el tipo de persona. Además, éstos rellenaban las reacciones de la gente en la propia aplicación - y a aplicación llegaba directamente al panel de control de la campaña de Trump.&lt;/p&gt;

&lt;p&gt;Esto no es nada nuevo. El equipo de Clinton hizo cosas similares - pero hasta donde sabemos, no crearon perfiles psicométricos. Cambridge Analytica, sin embargo, dividió la población americana en 32 tipos de personalidades, y se enfocó en sólo 17 estados. Y tal y como Kosinski estableció que un hombre interesado en productos MAC tiene alta probabilidad de ser gay, Cambridge Analytica descubrió que tener preferencia por coches hechos en Estados Unidos era un buen indicador de cercanía a las ideas de Trump. Entre otras cosas, estos descubrimientos mostraron qué mensajes de Trump funcionaban mejor y dónde. La decisión de centrarse en Wisconsin y Michigan en las últimas semanas de la campaña se tomó basada en los datos analizados. El candidato se convirtió en el instrumento para implementar un modelo.&lt;/p&gt;

&lt;h2 id=&quot;qué-está-haciendo-cambridge-analytica-en-europa&quot;&gt;¿Qué está haciendo Cambridge Analytica en Europa?&lt;/h2&gt;
&lt;p&gt;¿Pero hasta qué punto influenciaron los métodos psicométricos el resultado de las elecciones? Cuando preguntamos, Cambridge Analytica no quiere dar ningún detalle sobre la efectividad de su campaña. Y quizás la pregunta de si los métodos psicométricos tuvieron algún efecto en el resultado de las elecciones de 2016 sea imposible de responder. Aún así existen pistas: Hay un incremento inesperado de Ted Cruz durante las primarias. También incrementó el voto en las zonas rurales. Hubo un descenso en los votos de los afroamericanos primerizos. El hecho de que Trump empleó tan poco dinero también podría ser explicado por la efectividad del método de la publicidad basada en personalidad. Así como el hecho de que gastó mucho más en su campaña digital que en televisión comparado con Hillary Clinton. Facebook resultó ser el arma definitiva y el mejor aliado en la campaña, como muestran los tweets de muchos empleados de Trump.&lt;/p&gt;

&lt;p&gt;Muchos han dicho que los estadistas perdieron las elecciones con sus predicciones tan alejadas de la realidad. ¿Pero y si es al revés?: Los estadistas de hecho ganaron las elecciones - pero sólo los que usaron el nuevo método. Es una ironía de la vida que Trump se quejara con la investigación científica, mientras usaba un método puramente científico en su campaña.&lt;/p&gt;

&lt;p&gt;Otro gran ganador es Cambridge Analytica. Steve Bannon, conocido miembro del comité directivo de la compañía y antiguo ejecutivo del periódico conservador Breitbart News, ha sido elegido como Consejero Senior de Donald Trump y Jefe de Estrategia. Marion Maréchal-Le Pen, la activista del Front-National y sobrina del candidato presidencial a Francia, ya ha comentado en twitter que aceptaría una invitación para colaborar con él, y en un video interno de Cambridge Analytica, la grabación de una reunión se titula “Italia”. Ya en 2012 SCL Elections estaba presente en la política italiana. Aunque Cambridge Analytica no comenta nada sobre sus supuestas conversaciones con la Primera Ministra británica Theresa May, Alexander Nix asegura que está formando su cartera de clientes en todo el mundo, y que tiene peticiones de Suiza y Alemania.&lt;/p&gt;

&lt;p&gt;Kosinski ha observado todo desde su oficina en Stanford. Tras las elecciones, existe cierta confusión en la Universidad. Kosinski responde con la mejor arma para un investigador: análisis científico. Junto con su compañera Sandra Matz, ha llevado a cabo una serie de pruebas, las cuales serán pronto publicadas. Los resultados iniciales, a los que ha tenido acceso Das Magazin, son alarmantes: El estudio muestra que la efectividad del método de la publicidad personalizada por perfil puede conseguir un 63% más de clicks y un 1400% más de conversión en campañas publicitarias en facebook dirigidas a personas basadas en sus características específicas. Demuestran además la escalabilidad de este método, mostrando como la mayoría de las páginas de facebook que promocionan productos o marcas están muy marcadas por la personalidad de sus miembros, y que una gran parte de consumidores pueden ser bien categorizados basados en su reacción con una sola página de facebook.&lt;/p&gt;

&lt;p&gt;El mundo está del revés. Gran Bretaña deja Europa, Donald Trump es presidente de los Estados Unidos de América. Y en Stanford, el investigador polaco Michal Kosinski, que quería advertir sobre el riesgo de usar el análisis psicométrico en la publicidad política, sigue recibiendo emails acusatorios. “No”, dice Kosinski con calma mientras agita su cabeza, “esto no es culpa mía. Yo no construí la bomba. Sólo demostré que existía”.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Gracias a Míriam Ballesteros (&lt;a href=&quot;https://twitter.com/mirballgo&quot;&gt;@mirballgo&lt;/a&gt;) por su ayuda en la revisión y corrección de este artículo.&lt;/p&gt;
</description>
        <pubDate>Sat, 04 Feb 2017 00:00:00 +0100</pubDate>
        <link>https://pabloreyes.es/kosinski-and-cambridge-analytica/</link>
        <guid isPermaLink="true">https://pabloreyes.es/kosinski-and-cambridge-analytica/</guid>
        
        
        <category>Personal</category>
        
      </item>
    
      <item>
        <title>Ensuciándome las manos en 2004</title>
        <description>&lt;p&gt;Si soy curioso ahora, lo era mucho más con 14 o 15 años. En aquella época me defendía bien con PHP, hacía mis pinitos con C, y empezaba a trastear con Python. La mitad del día lo pasaba en canales de IRC-Hispano, mayormente en canales de programación (#php_para_torpes, #python, etc) y Age of Empires (#aoc, #the_conquerors). Pasaba muchas horas y era muy activo, por lo que con los años acabé haciendo mi pequeña comunidad de ciber-amigos. Algunos de ellos programaban y montaban o gestionaban páginas o proyectos conocidos (&lt;a href=&quot;http://www.php-hispano.net/&quot;&gt;PHP_Hispano&lt;/a&gt; entre otros).&lt;/p&gt;

&lt;p&gt;Un día, me invitaron a &lt;em&gt;selecto&lt;/em&gt; grupo privado donde se organizaban para aprovecharse de fallas del sistema de publicidad de Google: Adsense. Todos éramos bloggers (o webloggers por aquella época) y teníamos anuncios en nuestras páginas, y estos cafres habían montado un sistema semi-automático para pincharnos en las publicidades de unos a otros todos los días de una forma que aún Google no era capaz de filtrar. Cada día, mis anuncios recibían 12 clicks. Y así estuvimos 2 años. Al cabo de unos meses con el dinero conseguido, jubilé mi &lt;a href=&quot;http://www.cpu-world.com/CPUs/Pentium-III/Intel-Pentium%20III%20866%20-%20RB80526PZ866256%20(BX80526C866256%20-%20BX80526C866256E).html&quot;&gt;Pentium 3 866Mhz&lt;/a&gt; y 64Mb de RAM por un &lt;a href=&quot;http://www.cpu-world.com/CPUs/K8/AMD-Athlon%2064%203400+%20-%20ADA3400DAA4BZ.html&quot;&gt;AMD Athlon 3400+&lt;/a&gt; con 1Gb y en una caja chulísima, con luces de colores. Era 2004 y había ganado mis primeros 1.000€.&lt;/p&gt;

&lt;p&gt;También en aquel entonces, un chalado de este grupo que trabajaba para Motorola nos dió acceso ilimitado a un software interno en estado de pruebas con el que podíamos hacer llamadas a todo el mundo de forma gratuita. Obviamente lo usamos con fines maléficos y acabamos asustando mucho a la madre de un compañero puertoriqueño de #php_para_torpes.&lt;/p&gt;

&lt;p&gt;Total, que uno de estos contactos era un tío que había montado la primera plataforma de música en streaming de España, y lo estaba petando mucho. Solo en el primer par de meses había conseguido más de 20.000 usuarios registrados y no paraba de ampliar servidores para aguantar la carga de tráfico. Tenía un foro &lt;a href=&quot;https://www.phpbb.com/&quot;&gt;phpBB&lt;/a&gt; que iba a toda pastilla y necesitaba que alguien se lo gestionara: aquí entro yo. De repente, era administrador de una de las páginas del momento en España. Lo estaba flipando un poco trasteando por el panel de administración cuando me encontré con la gestión de Backups. No me pude aguantar… y descargué el backup de la base de datos.&lt;/p&gt;

&lt;p&gt;Estaba un poco asustado. Quería husmear, pero me daba cosilla. Pensé que si abría los ficheros .sql con notepad era menos malo que si hacía todo el esfuerzo de montarme una base de datos local y cargar el dump: eso ya sería premeditado, oye. Cuando abrí el dump de 20Mb con &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gedit&lt;/code&gt; me petó el ordenador. Ni Athlon 3400+ ni hostias. Tuve que abrirlo con &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nano&lt;/code&gt; para encontrarme, entre otras cosas, 20.000 lineas como esta:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sql&quot; data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;k&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;phpbb_users&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_active&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_session_time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_session_page&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_lastvisit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_regdate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_level&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_posts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_timezone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_lang&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_dateformat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_new_privmsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_unread_privmsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_last_privmsg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_login_tries&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_last_login_try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_emailtime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_viewemail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_attachsig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_allowhtml&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_allowbbcode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_allowsmile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_allowavatar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_allow_pm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_allow_viewonline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_notify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_notify_pm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_popup_pm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_rank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_avatar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_avatar_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_email&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_icq&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_website&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_sig&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_sig_bbcode_uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_aim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_yim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_msnm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_occ&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;user_interests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_actkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user_newpasswd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;VALUES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;4&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;[USERNAME]&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;&apos;87f6f9d078c3bc5db5578f3b4add9470&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;2147483647&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;2147483647&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;&apos;2147483647&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0.00&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;english&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;D M d, Y g:i a&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;0&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;[USER_MAIL_ADDRESS]@hotmail.com&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;&lt;img src=&quot;/images/uploads/posts/hands-dirty/kid_surprised.jpeg&quot; alt=&quot;Niño sorprendido&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; class=&quot;img-right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;20.000 usuarios con sus direcciones de correos y sus contraseñas en MD5. No recuerdo si en 2005 aún alguien confiaba en MD5, pero os aseguro que no era para nada la mejor forma de guardar contraseñas. A parte del famoso &lt;a href=&quot;https://www.openwall.com/john/&quot;&gt;John The Ripper&lt;/a&gt;, existían páginas como &lt;a href=&quot;https://web.archive.org/web/20060718024011/http://gdataonline.com/&quot;&gt;GDataOnline&lt;/a&gt; (ya difunta) que contenían millones de hashs MD5 y sus correspondientes orígenes (&lt;a href=&quot;https://en.wikipedia.org/wiki/Rainbow_table&quot;&gt;Rainbow Tables&lt;/a&gt;). Básicamente, tu buscabas un hash y te devolvía (si lo conocía) el texto original. Además, la página tenía &lt;em&gt;una especie de API rudimentaria&lt;/em&gt; que devolvía XML.&lt;/p&gt;

&lt;p&gt;Como me estaba calentando, escribí un script que leía el fichero .sql y encontraba el email y contraseña encriptado de cada usuario usando expresiones regulares. A lo bestia. La cosa se fue (la fui) moviendo y obviamente acabé mandando peticiones a GDataOnline para traerme contraseñas limpitas.&lt;/p&gt;

&lt;p&gt;Cada paso que daba me daba un poco más de miedo y más me imaginaba a la policía pegando en la puerta.&lt;/p&gt;

&lt;p&gt;Al cabo de unas horas, acabé con esto:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;urllib&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;getPasswords&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;successful_passwords&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;

  &lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sa&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;inputFile001&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#Change this for every file
&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;findall&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;VALUES.*?;&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;output_file&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sa&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;outputFile001&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;#Change this for every file
&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;output_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;spaces&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt; &lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Nickname&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;spaces&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Password&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;spaces&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Mail&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;90&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;nickname&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;mail&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;39&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;urllib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;urlopen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;http://gdataonline.com/qkhash.php?mode=xml&amp;amp;amp;hash=%s&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; 
                          &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;strip&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;passwords&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;findall&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;.*?&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;passwords&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# If we get the original
&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;passwords&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;pop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
     &lt;span class=&quot;n&quot;&gt;successful_passwords&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nickname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ljust&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ljust&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mail&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ljust&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;22&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\r&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;clear&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Total: %i&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Analized: %i&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Found: %i&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;successful_passwords&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;%i passwords have been found&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;successful_passwords&lt;/span&gt;

 &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;sh&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;__main__&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;getPasswords&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Una delicia de código apoyado en todas las buenas prácticas de &lt;a href=&quot;https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670&quot;&gt;Code Complete&lt;/a&gt;. Un orgullo. ¡Y lo mejor es que funcionaba! El código leía cada fichero de dump y, usando una expresión regular, identificaba todos usuarios. Luego iteraba sobre ellos, extraía el campo donde se encontraba la contraseña encriptada y la mandaba a GDataOnline. Si GDataOnline conocía la contraseña, me la devolvía y yo la escribía en un fichero junto con el username y el email:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Nickname&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Password&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Mail&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;juan&lt;/td&gt;
      &lt;td&gt;mipassword&lt;/td&gt;
      &lt;td&gt;juanito_perez@hotmail.com&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;miguel&lt;/td&gt;
      &lt;td&gt;12341234&lt;/td&gt;
      &lt;td&gt;the_big_boy@yahoo.com&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;admin&lt;/td&gt;
      &lt;td&gt;this_is_my_admin_password&lt;/td&gt;
      &lt;td&gt;admin@thissite.com&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;….&lt;/td&gt;
      &lt;td&gt;….&lt;/td&gt;
      &lt;td&gt;….&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Había conseguido el 30% de las contraseñas en texto plano… 6.000 pares de (email, contraseña) en una época en la que la gente ni siquiera sabía que era &lt;a href=&quot;https://en.wikipedia.org/wiki/Multi-factor_authentication&quot;&gt;2FA&lt;/a&gt;. La probabilidad de que esos credenciales dieran acceso a correos electrónicos, redes sociales o cuentas bancarias era bastante altas.&lt;/p&gt;

&lt;p&gt;Al cabo de unos días de no poder dormir tranquilo, borré los dumps y el fichero final, pero guardé el script (&lt;em&gt;obra de arte&lt;/em&gt;) hasta hoy. Durante años mantuve el secreto oculto y nunca lo comenté a nadie: a fin de cuentas, muchos de mis amigos estaban registrados en esa web y muy probablmente había descubierto sus contraseñas.&lt;/p&gt;

&lt;p&gt;Ahora ya lo sabeis.&lt;/p&gt;
</description>
        <pubDate>Mon, 17 Sep 2012 00:00:00 +0200</pubDate>
        <link>https://pabloreyes.es/hands-dirty/</link>
        <guid isPermaLink="true">https://pabloreyes.es/hands-dirty/</guid>
        
        
        <category>programming</category>
        
        <category>Personal</category>
        
      </item>
    
  </channel>
</rss>
