Aborten Worten

Crónica de una estafa en el Marketplace y la desidia de una gran superficie

Lo vivido recientemente con la compra de una placa base ASUS H81M-K en el Marketplace de Worten ha pasado de ser una simple transacción de segunda mano a un manual de lo que NUNCA debe permitir un consumidor.

1. El anzuelo: La «France» que hablaba Mandarín

El primer síntoma de alerta fue la ubicación. El vendedor, Clare02, se publicita con una sede flamante en el centro de París (Rue de Clichy). Pero la realidad logística que observé en el tracking de YunExpress reveló un periplo de 10 días por el interior de la China profunda.

Worten permite esta publicidad engañosa, donde el cliente cree comprar en la UE – con sus garantías y cercanía – para acabar recibiendo un paquete de una región con otra legislación.

2. Un socket dañado

Nada más abrir la caja, realicé una inspección de la placa base. En apariencia, estaba en buen estado hasta que observe el socket de la CPU:

  • Pines dañados: En el margen superior derecho del socket LGA 1150, un pin se encuentra desplazado lateralmente. Intentar montar una CPU ahí es sentenciarla a un cortocircuito inmediato.
  • Falso reacondicionamiento: El vendedor alardea de «30 años de experiencia» y pruebas exhaustivas, pero la placa llegó con restos de pasta térmica antigua de su anterior dueño en el marco del socket. ¿Qué clase de «profesional» ni siquiera limpia el residuo básico antes de vender una placa como testada?

socket dañado proveniente de Worten3. El Gaslighting del vendedor

Al reportar el fallo, la respuesta del vendedor es de manual de estafa:

Contamos con 30 años de experiencia profesional… es imposible que cometamos errores tan básicos… el daño es claramente consecuencia de una instalación incorrecta por su parte

El truco del espejo: culpar al cliente de una manipulación que nunca existió, pues el defecto se detectó visualmente al retirar la tapa protectora y la única CPU que tengo para esa placa base es la que tengo instalada en mi ordenador personal. De hecho, esta placa base la compré como reserva para cuando falle mi actual placa base, que ya tiene 10 años de uso. El vendedor hace un intento burdo de evadir la responsabilidad sobre un producto que nunca fue verificado antes de ser enviado desde su almacén.

4. El desentendimiento de Worten

Lo más grave no es el vendedor pícaro con todas las mañas aprendidas en Shenzhen, sino la respuesta de Worten. Tras elevar la disputa, recibí un correo genérico de su soporte:

La solicitud de devolución debe ser gestionada directamente con el vendedor… Deberás esperar por las instrucciones del vendedor…

Worten se lava las manos. Actúan como meros comisionistas de un fraude, permitiendo que vendedores extracomunitarios mientan sobre su ubicación y dejando al cliente en una situación de indefensión absoluta.


Apéndice Legal: Por qué esto es inaceptable

Para los que os encontréis en una situación similar, recordad que según la Ley General para la Defensa de los Consumidores y Usuarios:

  1. Falta de conformidad (Art. 114 y ss.): El vendedor está obligado a entregar un producto que sea conforme con el contrato. Una placa con pines doblados y restos de suciedad no es un producto conforme.
  2. Publicidad engañosa: Anunciar una ubicación en Francia para eludir la percepción de riesgo de un envío desde China es una práctica comercial desleal.
  3. Responsabilidad del Intermediario: Aunque Worten sea un Marketplace, tiene una responsabilidad solidaria al procesar el pago y alojar la publicidad engañosa del vendedor. No pueden derivar al cliente a una discusión a 10.000 km de distancia cuando el contrato se perfeccionó en su plataforma española.

Veredicto

Si valoráis vuestro hardware, vuestro tiempo y vuestro dinero: Aborten Worten. No son un puerto seguro, sino un puente hacia vendedores sin escrúpulos que operan fuera del radar de las garantías europeas.

La tesis que sentó la base física e ingenieril del ordenador moderno

Alguien o algunas personas, en algún momento de principios del siglo XX, pensó que para crear una máquina que realizara ciertos cálculos, podría ser conveniente emplear la electricidad, las puertas lógicas, usar la base 2 como sistema de numeración y el álgebra de Boole, es decir, alguien debió sentar las bases técnicas del ordenador moderno. Personalmente, siempre tuve la duda de cómo fue ese proceso. Si bien es bastante conocido que el primer diseño de un ordenador digital fue realizado por Von Neumann en los años 40 y que los ordenadores actuales se basan en el mismo, resulta evidente que entre la máquina analítica de Charles Babbage (mecánica y que operaba en base 10) y Von Neumann debieron pasar bastantes cosas.

Bastantes años atrás, leí que Von Neumann dio una respuesta afirmativa a la pregunta de si la creación de su ordenador estaba influenciada por el trabajo de Alan Turing de 1936, en el que presenta el concepto de lo que ahora se conoce como «máquina de Turing» para resolver el problema matemático de la decibilidad. No obstante, el trabajo del matemático inglés es puramente conceptual y está centrado en resolver este célebre problema de lógica matemática, y no dice nada acerca de la base física o ingenieril de una máquina de Turing.

Recientemente he podido descubrir quién fue el creador de esta parte y cómo fue ese proceso. La clave está en la tesis de máster de Claude Elwood Shannon de 1937 llamada «A symbolic analysis of relay and switching circuits«. No la conocía y resulta que está considerada «una de las tesis de máster más importantes jamás escrita». Sus 69 páginas no tienen desperdicio, me han dado las respuestas que buscaba. En primer lugar, se entiende cuál era la situación del momento: ya existían circuitos para automatizar operaciones más o menos complejas, como centralitas de telefonía o equipos de control de motores industriales. Estos circuitos se fabricaban con relés y selectores rotativos. Este vídeo describe muy bien cómo funciona un relé:

En su tesis el autor identifica dos problemas en el trabajo con estos circuitos:

  • El análisis de los mismos, es decir, determinar qué hace un circuito ya existente.
  • La síntesis: consiste en crear un circuito a partir de unos requerimientos. La solución no es única y debería encontrarse la que requiere menor número de componentes.

La solución que el autor propone para ambos problemas es representar cada circuito mediante un conjunto de ecuaciones, cuyos términos representan los relés e interruptores del circuito. Para manipular las ecuaciones, Shannon desarrolla lo que denomina un «cálculo» (calculus), y demuestra que éste es análogo al «cálculo» de lógica proposicional (hoy en día simplemente se denomina «lógica de enunciados»). A continuación, expone que el álgebra de Boole es aplicable. Esto es debido a que la lógica de enunciados tiene estructura de álgebra de Boole.

Shannon no sigue la convención actual, él emplea el 0 para representar un circuito abierto (pasa corriente) y el 1 para el circuito cerrado (no pasa corriente), esto es importante tenerlo en cuenta para entender las primeras páginas. La suma u OR lógico se consigue mediante dos contactos ubicados en línea, accionado cada uno por un relé, mientras que el producto o AND lógico mediante dos interruptores en paralelo:

Contactos eléctricos tesis Shannon

El lado izquierdo del signo igual es una representación algo más «realista», mientras que el lado derecho es una abstracción simbólica.

En los siguientes esquemas se representa de forma un poco más detallada cómo crear las puertas lógicas AND y OR con humildes relés:

puerta lógica OR con relés

Puerta lógica OR

puerta lógica AND con relés

Puerta lógica AND

Si bien ambos diseños se podrían simplificar para emplear un único relé, éstos son de una mayor claridad. Por cierto, la puerta lógica NOT se puede implementar con un relé inverso (en el vídeo también se explica en qué consiste este relé).

En su tesis, después de desarrollar los conceptos básicos, explicar la analogía con la lógica de enunciados, mostrar los teoremas de álgebra de Boole que serán útiles para la síntesis de circuitos y poner ejemplos prácticos de su aplicación, en las páginas 16 / 17 hace una afirmación que parece avanzada a su tiempo:

También es posible emplear la analogía entre el álgebra de Boole y los circuitos de relés en dirección contraria, es decir, representar relaciones lógicas mediante circuitos eléctricos. Siguiendo esta línea se han obtenido algunos resultados interesantes, pero no son de importancia aquí.

Al decir que los circuitos pueden hacer cálculos lógicos, ha concebido el ordenador digital moderno. Su afirmación de que esto carece de importancia en su tesis no sé si es por modestia o porque no intuye sus disruptivas aplicaciones futuras. Al final de su tesis muestra el diseño de dos máquinas: una es un «sumador eléctrico» (electric adder) que trabaja en base 2 y la otra da todos los múltiplos de todos los primos menores o iguales a 10.000, a partir de la cual un humano sabrá que cualquier número inferior a 100.000.000 que no esté en la lista obtenida es un número primo (aunque la del diagrama de ejemplo está limitada a los tres primeros primos). Hasta el momento, hacer una lista así manualmente había representado un gran esfuerzo y encima con algunos errores, como Shannon explica. Si bien estas máquinas parecen ordenadores primitivos, todavía les falta una memoria programable, además de carecer de condicionales y saltos.

ecuaciones sumador eléctrico

Ecuaciones del sumador eléctrico

Diseño sumador eléctrico

Diseño del sumador eléctrico

En definitiva, esta tesis sentó las bases para la creación de circuitos digitales (y por lo tanto de los ordenadores) con una base teórica sólida, a diferencia de cómo se diseñaban los circuitos en esa época y mucho antes de la invención del transistor. Si bien este no es el trabajo más famoso de Claude Elwood Shannon, fue fundamental para sentar las bases del fenómeno que más ha cambiado la existencia del ser humano durante la segunda mitad del siglo pasado y del actual. En lo personal, descubrirlo ha sido encontrar mi eslabón perdido entre por un lado Babbage y por el otro Von Neumann y la tesis de Church-Turing.

Cómo el compilador JIT de Java mejora la velocidad de ejecución

Históricamente, los lenguajes siempre se habían dividido entre interpretados y compilados, en lo que se refiere a su ejecución. A día de hoy, con los compiladores JIT se crea una nueva categoría: los lenguajes que son una combinación de ambos. Los compiladores JIT son omnipresentes, por ejemplo los navegadores modernos disponen de uno para el lenguaje Javascript. También las máquinas virtuales de Java han evolucionado para incluir esta técnica, y es el caso concreto en el que se va a profundizar en este artículo.

Las implementaciones modernas de Java emplean un proceso de compilación dividido en dos pasos en el cual se produce una compilación en tiempo de ejecución, es decir, las máquinas virtuales de Java actuales disponen de un compilador JIT, just-in-time por sus siglas en inglés. En primer lugar, el compilador de Java compila en bytecode el código fuente, este bytecode es independiente de la plataforma de hardware donde se ejecuta. La máquina virtual de Java (JVM) es la encargada de ejecutar (interpretar mediante un intérprete) este bytecode. La máquina virtual sí es dependiente de la plataforma: Cada plataforma requiere de su propia máquina virtual para poder ejecutar el bytecode.

El compilador JIT de la máquina virtual es el encargado de detectar partes de este bytecode que se están ejecutando con mucha frecuencia y compilarlas al código máquina de la CPU de la plataforma para aumentar la velocidad de ejecución. El componente del compilador JIT encargado de detectar estos «puntos calientes» («hotspots» o «hot code» en inglés) del código es el profiler. Además, lo realiza en tiempo de ejecución, es decir, a medida que el programa se está ejecutando, detecta cuáles nuevas partes del código se han calentado y cuáles se han enfriado. De esta manera se supera la principal ineficiencia de los intérpretes: cuando código que se está ejecutando de forma reiterada (por ejemplo debido a un bucle while / for) debe ser interpretado una y otra vez. Además, esta característica es realmente potente, pues consigue que determinados tipos de programas se ejecuten más rápido que su equivalente en un lenguaje compilado orientado a objetos.

Para ver un caso concreto de cómo se optimiza en tiempo de ejecución un programa realizado en Java, pongamos a trabajar al ordenador: calculará 100 veces el número situado en la duodécima posición de la serie de Fibonacci, una forma como otra cualquiera de poner a calcular un ordenador. Este número es el 144, pero lo que realmente nos interesa es el tiempo transcurrido en cada una de las 100 ejecuciones.

fibonacci en Java Sigue leyendo

Estructura de álgebra de Boole

En una entrada anterior publicada hace más de 4 años, en primer lugar se explicaba cómo simplificar expresiones booleanas en nuestro código a partir de las propiedades fundamentales o axiomas del álgebra de Boole y de sus propiedades derivadas, así como a partir del complemento de una función booleana. Finalmente, se añadía una nota en la que se comentaba la similitud entre el álgebra de Boole, la lógica de primer orden y la teoría básica de conjuntos (la formulada por Georg Cantor). Con el presente artículo se pretender dar orden y exponer correctamente el porqué de está relación que se dejó caer en forma de una breve nota.

En su breve obra titulada «El análisis matemático de la lógica» publicada en 1847, el matemático británico autodidacta George Boole tuvo la originalidad de utilizar las técnicas algebraicas para tratar expresiones de la lógica. En su sistema se definen unas operaciones sobre unas variables abstractas que tienen que cumplir unas propiedades, de forma similar a como en el álgebra de las fracciones se definen las operaciones de suma, resta, multiplicación y división y deben cumplir unas determinadas propiedades. Con esta obra puso fin a la lógica aristotélica e inició la lógica formal matemática contemporánea.

No obstante, no fue hasta 1860 que en los trabajos del también británico economista y lógico William Jevons y el filósofo, lógico y matemático norteamericano Charles Sanders Peirce apareció el concepto más general de álgebra de Boole. Un álgebra de Boole es una estructura algebraica, es decir, consta de un conjunto no vacío de elementos y un conjunto no vacío de operaciones sobre dicho conjunto. Además, una estructura algebraica es axiomática, es decir, debe cumplir una serie de propiedades.

William Jevons

William Jevons, principalmente conocido por la paradoja de Jevons.

Sigue leyendo

La simplificación de la complejidad de la arquitectura de las aplicaciones web

La nueva generación de javascripters cree que inventó justo ayer la programación web, pero resulta que hace 25 años ya se libraba la misma batalla que libran ahora, sólo que exclusivamente con LAMP. A Docker y Kubernetes no se llegó precisamente de sopetón… La solución a los problemas fue aumentar la complejidad, lo que a su vez creó nuevos problemas, esta situación y su evolución se describe en este breve artículo de Ben Johnson de lectura muy recomendable.

Asimismo, propone una solución en la que se deshace gran parte de la complejidad añadida durante más de 2 décadas. Esta solución consiste en aumentar la capacidad de un servidor en vez de aumentar el número de los mismos y emplear… ¡el denostado SQLite! (Al menos denostado para las aplicaciones web) Hoy en día Amazon, a través de AWS, ofrece servidores con 96 núcleos y cientos de gigas de RAM. En un servidor bastante más grande, pero dentro de lo que puede administrar un kernel de Linux, se ha conseguido con SQLite la friolera de 4 millones de consultas SQL por segundo con un solo hilo.

El inconveniente de SQLite, es que a diferencia de los sistemas gestores de bases de datos relacionales como MySQL u Oracle, no tiene capacidades de red, con lo que no hay replicación de los datos a otros servidores, entre otros inconvenientes, por lo que si el servidor revienta, se perdieron los datos desde la última copia de seguridad realizada. Para solucionar este problema, Ben ha creado Litestream, una herramienta que se encarga de replicar continuamente una base de datos SQLite en un Amazon S3 (un servicio de almacenamiento en la nube).

Curiosa e interesante iniciativa, que lleva el principio KISS (Keep it simple, stupid!) al extremo. A ver cómo evoluciona…