MacMind es un proyecto que implementa un transformer de una sola capa y single-head en HyperCard (el lenguaje de scripting de Macintosh de 1989), usando 1.216 números almacenados en campos ocultos de una stack. El proyecto demuestra que no necesitás miles de GPUs para entender cómo funcionan realmente los transformers.
En 30 segundos
- MacMind es un transformer implementado en HyperCard 2.1 (1989), no un emulador ni una broma
- Usa HyperTalk (el lenguaje de scripting nativo) para implementar self-attention, embeddings y backpropagation
- Se entrena en la tarea de bit-reversal (primer paso del algoritmo FFT) y logra 100% accuracy después de 193 pasos
- Ocupa espacio mínimo: el stack completo cabe en cualquier Macintosh de los años 90 (incluso con 8 MB de RAM)
- Es parte de una tendencia reciente de implementar transformers en máquinas retro (PDP-11, IBM mainframes) para entender los principios sin abstracciones de frameworks modernos
HyperCard es un sistema de desarrollo visual lanzado en 1987 por Apple, incluido gratis con cada Macintosh. HyperTalk es el lenguaje de scripting que permite automatizar acciones sobre “stacks” (documentos interactivos basados en tarjetas). Así que cuando hablamos de “un transformer en HyperCard”, no es una metáfora: es código real corriendo en el intérprete de HyperTalk, procesando datos de verdad.
¿Qué es MacMind? El transformer que cabe en HyperCard
El proyecto fue creado por Sean F. Díaz y se aloja en GitHub bajo SeanFDZ/macmind. Es lo que pasaría si alguien decidiera tomar el paper de Attention is All You Need (2017) y preguntarse: “¿Y si lo intento en una máquina de 1989?”
Ponele que le pedís a MacMind que aprenda a invertir los bits de un número: toma 8 como entrada, lo procesa a través de capas de embedding, self-attention, y feedforward, y te devuelve 1 (porque 0001 en binario es 1000 invertido). Es un toy task, cierto, pero es el mismo tipo de tarea que cualquier transformer hace: mapear secuencias de entrada a secuencias de salida usando pesos aprendidos.
Lo concreto: MacMind almacena 1.216 números distribuidos en campos de datos ocultos dentro del stack. Esos números representan matrices de embeddings, pesos de atención, y parámetros del feedforward. El entrenamiento corre en el intérprete de HyperTalk, actualiza esos pesos con gradient descent, y después de 193 iteraciones alcanza 100% accuracy en la tarea de validación.
De HyperCard a la era de la IA: contexto histórico
HyperCard fue lanzado en 1987 con una propuesta revolucionaria: permitir que cualquiera creara aplicaciones interactivas sin programación tradicional. Cada “tarjeta” era un documento visual, conectadas por links (así como hiperlinks en la web, que HyperCard anticipó por 3 años).
En 1989 llegó HyperCard 2.0 con mejoras de performance, incluyendo un compilador on-the-fly que mejoraba la velocidad de ejecución de scripts de HyperTalk. Para 2.1 (la versión en la que corre MacMind), el intérprete era lo suficientemente rápido para realizar operaciones numéricas sin que fuera completamente insoportable.
La ironía es que HyperCard fue abandonado por Apple en 1998 (decidieron que no era rentable). Hoy, 38 años después de su lanzamiento, el proyecto MacMind toma lo mejor de HyperCard (simplicidad, portabilidad, accesibilidad) y lo apunta hacia la tecnología más candente de 2026: los transformers. Es un contraste visual que resume todo: máquina de 1989 ejecutando el tipo de red neuronal que impulsa ChatGPT. Complementá con como explicamos en nuestra guía sobre modelos de lenguaje.
La arquitectura del transformer: componentes clave explicados
Un transformer clásico (como el de GPT o Claude) consta de bloques apilados, cada uno con self-attention y feedforward. MacMind es un transformer minimalista: single-head, single-layer. Eso significa una sola cabeza de atención, una sola capa.
El mecanismo de self-attention es el corazón: para cada token en la entrada, calcula una matriz Query, una matriz Key, y una matriz Value. Luego computa attention scores multiplicando Query × Key, normaliza con softmax, y pondera los Values según esos scores. El resultado: cada posición en la secuencia “atiende” a todas las otras posiciones al mismo tiempo (a diferencia del recurrente, que procesa de a un token por vez).
Antes del attention viene el embedding: convertir un número entero a un vector denso de 4 dimensiones (en el caso de MacMind, bastante chico). Luego viene positional encoding (información sobre la posición en la secuencia, aunque en MacMind es mínimo porque la tarea es simple). Después el attention layer. Después un feedforward (dos capas lineales con ReLU). Y eso es todo.
La analogía que suele ayudar: un recurrente es como leer palabra por palabra, sosteniendo todo en memoria conforme avanzás. Un transformer es como escanear la frase completa de una vez, viendo todas las palabras simultáneamente, y decidir qué es importante según el contexto. En hardware de 1989, eso sigue siendo rápido porque la secuencia es cortísima (4-5 tokens por entrada máximo).
Cómo entrena MacMind: el bit-reversal permutation
La tarea de aprendizaje es bit-reversal: dado un número entre 0 y 255, invertir el orden de sus bits. Por ejemplo, 1 en binario es 00000001. Invertido es 10000000, que es 128 en decimal. Es una tarea artificial, pero tiene sentido matemático: bit-reversal es el primer paso del algoritmo Fast Fourier Transform (FFT).
El dataset de entrenamiento incluye todos los números del 0 al 255 con sus correspondientes salidas invertidas. El modelo se entrena con backpropagation estándar: forward pass (calcula salida), compara con salida esperada, calcula loss (error cuadrático), y propaga gradientes hacia atrás para actualizar pesos.
El progreso es visible en los logs: por step 50 alcanza 50% accuracy, step 75 logra 75% accuracy, y alrededor de step 193 oscila entre 95-100% antes de estabilizarse completamente en 100%. Los pesos convergen. El modelo aprendió el patrón, sin overfitting evidente, corriendo todo en HyperTalk. Más contexto en algo que exploramos en profundidad en nuestro análisis.
Stack técnico: HyperCard 2.1, System 7-9 y las limitaciones
MacMind requiere HyperCard 2.1 corriendo en System 7, 8, o 9 (las versiones de Mac OS de los años 90). El hardware objetivo es un Macintosh 68030 o mejor (a partir de 16 MHz), con al menos 8 MB de RAM (aunque se puede con menos si no hay otras aplicaciones corriendo).
La arquitectura de 68030 es bastante potente comparado con procesadores contemporáneos (es un CPU de 32 bits con pipeline real), pero sin FPU matemático dedicado (a menos que sea Macintosh IIci o superior). Entonces los cálculos de números flotantes en HyperTalk son puros enteros interpretados, compilados on-the-fly.
Las limitaciones son reales: el intérprete de HyperTalk es más lento que código compilado en C. Multiplicar dos matrices de 4×4 toma milisegundos, no microsegundos. Un training loop completo (256 forward passes + backprop) toma varios segundos. Pero sigue siendo viable para demostración y educación.
La ventaja absoluta: todo el código es portable. Un stack de HyperCard se corre igual en un Macintosh Quadra 650 de 1992 que en un Macintosh IIci de 1989 (claro, más lento en máquinas viejas, pero corre). No necesitás recompilar, no necesitás manejar tipos, no necesitás bajar dependencias. Es casi como un script de Python en esteroides de 1989.
Proyectos similares: transformers en PDP-11 y otras máquinas retro
MacMind no está solo. Existe una tendencia creciente de implementar transformers en máquinas antiguas, y no es nostalgia: es investigación genuina.
En 2026, aparecieron reportes de un developer de Windows que escribió un transformer completo en assembly de PDP-11 (un procesador de 1971). El modelo tiene apenas 19 KB de memoria total (sí, kilobytes) y entrena en 5.5 minutos. El CPU corre a 6 MHz. Según Tom’s Hardware, el mismo proyecto también existe en Adafruit con más detalles técnicos.
Hay también implementaciones en IBM mainframes de los años 60, en calculadoras gráficas de los 90, y en varias arquitecturas obscuras. ¿Por qué? Porque una vez que entendés que los transformers son solo matrices y álgebra lineal, podés implementarlos donde sea. La falta de librerías especializadas (CUDA, TPU, torch) se vuelve una ventaja pedagógica: ves exactamente qué está pasando en cada paso.
Archivos del proyecto: qué incluye MacMind
El repositorio de GitHub contiene tres componentes principales (según el repo oficial):
- Pre-trained stack: Un archivo .stack listo para usar, con los pesos ya entrenados. Lo abrís en HyperCard, ejecutás el script de “predict” (o “inference”), y le pasás un número, y te da la salida del transformer. Eso sí, no modifiques los pesos.
- Blank stack para entrenar: Arrancar de cero. Inicializa pesos al azar, carga el dataset, y corrés el training loop. Toma tiempo (las primeras 50 iteraciones son lentas mientras HyperCard compila), pero es educativo: ves exactamente cómo convergen los pesos.
- Python reference implementation: Para validar que la matemática de HyperCard es correcta. El mismo modelo implementado en NumPy. Sirve para debugging: si HyperCard da un resultado raro, comparás con Python y ves si es un bug de lógica o un problema de precision en aritmética.
Por qué importa: de la curiosidad retro a la investigación seria
Acá es donde mucha gente dice “pero para qué, si tenemos GPUs”. Es una pregunta legítima (medio que), pero la respuesta va a dos niveles. En si querés experimentar con modelos en tu máquina profundizamos sobre esto.
Primer nivel: educación. Si querés entender transformers de verdad, no solamente usar una librería, necesitás ver la mecánica. Con frameworks modernos (PyTorch, TensorFlow) hay tanto boilerplate y tanta abstracción que es fácil perder el hilo. En MacMind, cada número es explícito. Cada multiplicación de matrices está ahí. No hay “magic”.
Segundo nivel: constraints revelan esencia. Cuando tenés que hacer machine learning con 19 KB de memoria (PDP-11) o sin compilador (HyperTalk puro), empezás a entender qué es verdaderamente esencial en la arquitectura. El attention mechanism es lo mínimo indispensable. El residual connection desaparece porque la red es tan chica que no lo necesita. La normalización es opcional. Te quedás con el core.
Tercer nivel: nostalgia con propósito. Los años 80-90 fueron cuando se inventaron los primeros LSTMs, cuando la comunidad casi abandona las redes neuronales (“invierno de IA”). MacMind es una broma ácida con un punto: con el conocimiento actual, armamos en 1989 algo que habría sido considerado magia. Ilustra cuánta tecnología es sobre software y matemática, no hardware. Con un 68030 y HyperTalk, podías estar corriendo transformers. Pero no lo sabían.
Comparativa: transformers en máquinas retro vs. modernas
| Aspecto | MacMind (HyperCard) | PDP-11 Assembly | GPT-4 (GPU moderna) |
|---|---|---|---|
| Año de la máquina | 1989 | 1971 | 2026 |
| CPU | 68030 @ 16 MHz | 6 MHz (single-core) | 3.8+ GHz (miles de cores) |
| RAM disponible | 8-128 MB | 64 KB | 80+ GB |
| Memoria modelo | 1.216 números (4.8 KB aproximado) | 19 KB | 170+ billion parámetros |
| Tiempo training (1 epoch) | Segundos | 5.5 minutos | Semanas (con GPU) |
| Tarea | Bit-reversal (toy task) | Toy task | Lenguaje natural a nivel humano |
| Propósito real | Educación y demostración | Investigación fundamentals | Producción |

Ejemplos concretos: cómo se usa MacMind
Ejemplo 1: abris el stack pre-entrenado en HyperCard 2.1 (corre en emulador Basilisk II o en hardware real si tenés). Hacés click en un botón que dice “Predict”. Ingresás el número 5 (que en binario es 00000101). El transformer pasa ese número por embeddings, lo procesa en la capa de atención, lo pasa por feedforward, y te devuelve 160 (que es 10100000 en binario, la inversión correcta de 5). Eso es una predicción correcta.
Ejemplo 2: cargás el blank stack. Arrancá el training manualmente (es un loop de HyperTalk que podés frenar en cualquier momento). Subís el modelo, lo probás en local, funciona bárbaro, lo mandás a producción (que en este caso es simplemente guardás el stack con los nuevos pesos), y de repente todo se rompe porque… na, esto no pasa, el código es determinístico. Pero entendés que el learning rate, el número de iteraciones, y la inicialización de pesos SÍ importan. Si cambias el learning rate, converge más lento o se vuelve inestable.
Errores comunes
1. Confundir el proyecto con un emulador de IA completo
MacMind NO es un modelo pre-entrenado que entiende lenguaje natural. No va a procesar tu pregunta y darte una respuesta coherente como ChatGPT. Es un toy model que aprendió exactamente una tarea matemática simple (invertir bits). La utilidad está en ver la arquitectura, no en la capacidad del modelo.
2. Asumir que es “lento” comparado a Python
Sí, HyperTalk es más lento que NumPy. Pero comparar directamente es injusto: NumPy está escrito en C optimizado, compilado, con BLAS debajo. HyperTalk es un intérprete. Comparado a otros intérpretes de la época (o incluso BASIC), HyperTalk era razonablemente rápido. Y para propósitos educativos, “lento” sigue siendo “instantáneo” (milisegundos). Relacionado: los transformers modernos que conocemos hoy.
3. Creer que el proyecto prueba que GPUs no son necesarias
MacMind demuestra que la aritmética de transformers puede correr en cualquier lado. Lo que NO demuestra es que sea práctico entrenar modelos grandes sin GPUs. Un transformer con 170 billones de parámetros, corriendo en un 68030 a 16 MHz, tomaría siglos. Las GPUs existen por una razón: velocidad de matriz paralela. MacMind sacrifica velocidad a propósito para ganar claridad educativa.
Preguntas Frecuentes
¿Necesito una Macintosh real de 1989 para correr MacMind?
No. Podés correr HyperCard en un emulador como Basilisk II (que corre Mac OS clásico en Windows/Linux/Mac moderno) o en una Macintosh real si tenés una. El stack de MacMind es portable. Recomendación: emulador es más rápido de setear.
¿Es MacMind una broma o un proyecto serio?
Ambos. Es una broma con intención seria. El código está bien escrito, los pesos convergen correctamente, la matemática es correcta. Pero la propuesta (implementar transformers en HyperCard) tiene un componente artístico y educativo, no comercial. Es investigación-arte, como muchos proyectos retro.
¿Puedo usar MacMind para aprender transformers si no sé HyperTalk?
Sí. El código es autodocumentado (HyperTalk es casi inglés) y hay un reference en Python que es idéntico. Leés el código Python para entender lógica, leés el HyperCard para ver cómo se mapea a un lenguaje antiguo. O vice versa.
¿Hay planes de escalar MacMind a algo más útil?
No consta públicamente que haya roadmap de features. El proyecto está completo en su scope: demostrar que transformers caben en HyperCard, que entrenan, y que predicen correctamente. Escalarlo sería perder el punto.
Conclusión
MacMind es uno de esos proyectos que ilustra una verdad incómoda para la industria: la mayoría de las “innovaciones” modernas son matemática que ya conocemos, implementada con herramientas nuevas. Un transformer no es más inteligente en un GPU que en un 68030. Es más rápido, claro, pero la arquitectura es la misma.
Para desarrolladores que querés entender transformers de verdad, sin la niebla de PyTorch o TensorFlow, MacMind es un punto de entrada accesible. Podés ver every operation. No hay magia, solo álgebra lineal y derivadas. Y hay algo en eso: correr un transformer en hardware de 1989 y ver que funciona, es visceral. Te quita los supuestos de que necesitás lo último en GPUs para hacer inteligencia artificial.
Si tu interés es histórico, educativo, o simplemente querés entender cómo funcionan las redes neuronales modernas, dale una chance. Agarrá un emulador de Mac, cargá el stack, y metete en el code. Es código de 1989 resolviendo un problema de 2017, corriendo en 2026. Eso merece respeto.
Fuentes
- SeanFDZ/macmind en GitHub — Repositorio oficial del proyecto, con stacks pre-entrenados y en blanco, reference implementation en Python
- MacMind discussion en 68k.org — Community feedback y detalles técnicos de la implementación
- HyperCard World — Documentación y recursos sobre HyperCard 2.x y HyperTalk
- Tom’s Hardware — PDP-11 Transformer — Contexto de proyectos similares en máquinas retro
