Al jubilarse, publica el código fuente que acumuló durante más de 40 años
(dunfield.themindfactory.com)- Un desarrollador publicó, con motivo de su jubilación, el código fuente acumulado durante más de 40 años, permitiendo revisar directamente sistemas antiguos, herramientas y proyectos personales
- El alcance de la publicación incluye incluso sistemas operativos y kernels, como un kernel multiproceso/multitarea para ARM, un sistema operativo para CPU 6809 y un OS temprano de la época del Altair 1980
- También se ofrecen herramientas de desarrollo de bajo nivel como Micro-C Compiler, ensambladores cruzados, desensambladores, un emulador 8052 y depuradores
- Se publicó además una amplia variedad de utilidades para trabajo en PC, como DOSBox, utilidades de DOS, sincronización de archivos, manejo de ZIP, creación de paquetes de instalación y editores de texto
- También incluye proyectos personales de hardware como radioafición, un control remoto infrarrojo RS-232, Ethernet TTY, control X10 y un robot para leer 1,500 DVD, lo que le da un alto valor de preservación
Objetivo de la publicación y documentos guía
- Con motivo de su jubilación, publicó más de 40 años de código fuente acumulado correspondiente a “las cosas que escribí”
- El objetivo de la publicación es que otras personas puedan usar este código de forma útil o aprender de algunas partes
- Documentos enlazados en la página de publicación:
Sistemas operativos, kernels, máquinas virtuales y simulación
- ARMOS: kernel multiproceso/multitarea para ARM
- CUBIX: sistema operativo para CPU 6809
- DMF: OS temprano de la época del Altair 1980
- DVM: Dunfield Virtual Machine
- SIMSYS: sistemas relacionados con Altair, D6809, H8, Horizon y Mod8
- MONITORS: monitores para varios procesadores embebidos
- 8051ICE: emulador en circuito que usa EMILY
- EMILY52: emulador 8052
Compiladores, ensambladores, depuradores y herramientas de apoyo al desarrollo
- MICRO-C: Micro-C Compiler
- MCSAMPLE: programas de ejemplo de Micro-C
- XASM: ensamblador cruzado y herramientas
- DISASM: desensamblador cruzado
- DMS: depurador Dunfield MicroScope
- DESMO: Debug Scripting Monitor
- DDSIDE: IDE de Dunfield Development Systems
- BLDTOOL: herramienta para apoyar tareas de build
- PUBSRC: herramienta de mantenimiento de la sección de código fuente público
- HFC: Help File Compiler
- ESL: Extensible Script Language
Utilidades para DOS, archivos, discos, edición y empaquetado
- DBBD: disquete de arranque para DosBox
- DBUTIL: utilidades para DosBox
- DD_DBSRC: árbol de código fuente de DosBox
- DOSUTIL: varias utilidades de DOS
- FDI: Floppy Disk Image
- IMDSRC: ImageDisk
- EDT: editor de texto EDT
- ELF: herramienta para editar nombres de archivo largos
- FTOOLS: varias herramientas para trabajo con archivos
- SYNC: sincronización de dos árboles de directorios
- ZDIR: listado de archivos dentro de ZIP y
touch - MAR: MicroARchiver, usado para comprimir archivos de instalación
- MKPKG: creación de instaladores empaquetados en un solo
.exe - ESP: parcheo de cadenas en ejecutables
- PT: herramienta PaperTape
- MICROCAD: programa de dibujo CAD muy pequeño
Hardware, comunicación, control y proyectos personales
- DARC: Dunfield Amateur Radio Controller
- HTX242: control del transceptor amateur RS HTX-242
- ICOMCIV: código de interfaz ICOM CI-V para radioafición
- IR232: control remoto infrarrojo de aprendizaje serial RS-232
- ETTY: Ethernet TTY
- SNIFF: sniffer de Ethernet
- DLM: Data Line Monitor
- ITS: Interactive Terminal Switch
- DDLINK: DavesDataLink para transferencia de archivos por COM, LPT y NET
- SERCNCT: cambio entre varios dispositivos en un solo puerto COM
- DBOX: controlador para Sony VCR
- DVDROBOT: robot creado para leer 1,500 DVD
- EPROM: programador de EPROM
- 8031DWG: ejemplo de diseño basado en 8031
- X10CTRL: control de dispositivos X10 desde PC
- RINGSW: interruptor de timbre distintivo para línea telefónica
- PC100: emulador de terminal VT-100
- LABTOOLS: varias herramientas de laboratorio/prueba
- CAM: proyecto para niños con trastornos del desarrollo
- MACMON: monitoreo/registro del uso de red de los niños
- TRANZTCL: herramientas de desarrollo para Verifone TRANZ PointOfSale
1 comentarios
Opiniones de Hacker News
Al echarle un vistazo a DOSUTIL.ZIP, me encantaron esos programas en C simples y elegantes
Es impresionante que muchos usen solo 1 o 2 líneas de
#includeestándar de C, y que en 20 mil líneas de código C haya apenas 24#ifLa experiencia de leer una base de código así me inspiró cuando empecé a trabajar en Cosmopolitan Libc
#ifAunque, para hacer una comparación equivalente, solo tiene 2 sentencias
useMe resultó extraña la convención
True=7deSTYLE.TXTDice que, por experiencia con código de bajo nivel y hardware, para “minimizar lo que puede salir mal a bajo nivel”, a veces usaba
7en vez de1como verdadero en C, aprovechando que0==FALSEy!0==TRUEEs una elección habitual basada en que una diferencia de 3 bits es mejor que una de 1 bit, aunque él mismo reconoce que es una tontería, porque si realmente hubiera un error de hardware de 1 bit así, la mayor parte del sistema se rompería
Me pregunto si antes era común que los cambios aleatorios de bits arruinaran las condicionales
Tendrías que decidir qué rama asumir que se ejecuta de forma segura durante una falla, contar los bits de cada condición y considerar verdadero si hay más unos que ceros, e incluso registrar en logs o avisar al operador que se volteó un bit sin corrección de errores
Hay lugares donde los códigos de detección de errores son útiles, pero definir verdadero como 7 no basta
Aun así, disfruté leer el documento de estilo, y me gustó que haya publicado todo así. Seguramente alguien encontrará ahí una herramienta que le queda perfecta
0xA5(1010 0101) para enviar una secuencia alternada de bits ligeramente modificadaEs una forma de comprobar de una sola vez la mayor cantidad posible de fallas
TRUE=7no es una solución realSi es una variable booleana, en cada condición tendrías que manejar
if (var == TRUE),else if (var == FALSE)y qué hacer con cualquier otro valor, y ese código de manejo tampoco debería fallarAdemás, los cambios de bits pueden afectar variables usadas en un
switch, condiciones comoif (i > 17), punteros, direcciones de retorno en la pila e incluso el propio códigoEn el mejor de los casos es una solución muy parcial y nada trivial de implementar, así que cuesta verla como una convención estándar
Personalmente, creo que habría usado
-1Me da mucha pena no haber conservado bien mi código antiguo
Mi primer programa no trivial, un juego de Snake; mi primera utilidad hecha en ensamblador; mi primer driver de dispositivo para una impresora Centronics; hasta un calendario perpetuo que hice en Pascal en una hora, con una resaca terrible, para una tarea de la universidad: consideré que todo era trivial y no valía la pena guardarlo
Al final no me queda nada de código anterior a fines de los 90. Los desarrolladores jóvenes deberían conservar bien su código
Claro que si estos servicios “gratuitos” cierran, sería un problema, así que el self-hosting también sirve
En ese entonces los TSR parecían magia. Tal vez estén en algún disquete en el sótano de la casa de mi madre
También vale la pena leer el texto donde el autor recuerda cuando estuvo a punto de morir en 2019: https://dunfield.themindfactory.com/2019.htm
Sus estudios salían tan mal que un médico se negó a tratarlo por miedo a que muriera en cualquier momento durante la consulta
Pero sigue vivo, hace vida normal y hasta corre en la playa todos los sábados. Sus resultados no han mejorado y siempre le falta el aire, pero parece una persona que simplemente se niega a morir
Es parecido a lo que dijo el médico del enlace: “se ve mucho mejor de lo que dicen los papeles”
En el texto había una parte donde le negaban incluso “abrazar a sus hijos, dormir en su propia cama, comer y hacer algo de trabajo manual”; cuando mi padre no mejoraba de la leucemia y la neumonía y no podían quitarle el tubo respiratorio, los médicos también insistían con fuerza en que tendría una discapacidad de por vida
Muy bueno. Varias veces pensé que algún día me gustaría hacer algo parecido
Es similar a recibir una herencia de los abuelos. Seguro que habrá verdaderas joyas y objetos curiosos mezclados entre cachivaches y basura, pero el conjunto muestra las historias de personas reales que vivieron vidas ricas e interesantes
Unos pocos puntos destacados no pueden capturar bien esa vida
Por suerte, todavía conservo un asignador de memoria comercial que hice a fines de los 90. Era de un solo hilo y solo soportaba Metrowerks CodeWarrior y el MacOS antiguo, pero era el asignador más rápido y sin bugs en Mac
Con la llegada de MacOS X quedó obsoleto, y no sé a quién podría interesarle hoy
Como dije ayer, perdí el código fuente de Trapeze (https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)). Creo que nunca se me ocurrió conservar mi trabajo para compartirlo más adelante, cuando ya a nadie le importara
Es realmente genial. Comparado con cómo se verá mi historial de código más adelante, se siente como código bastante puro
En 2040, mi código probablemente mostrará rastros de haber usado un montón de librerías y frameworks que “ya nadie usa”
No es cuestión de bueno o malo, sino simplemente un reflejo de la época
Las prácticas de desarrollo populares hoy son sorprendentemente efímeras y frágiles. Casi ninguno de los proyectos actuales podría sobrevivir 10 años abandonado, y 40 años mucho menos
pip installynpm installvan a quedar inútilesCreo que la utilidad más influyente es ImageDisk
Se usó para preservar disquetes de muchos tipos de computadoras usando IBM PC, y mucho del software antiguo que hay en bitsavers.org y archive.org se recuperó con esta herramienta
En A Deepness in the Sky, de Vernor Vinge, aparece una sociedad humana de miles de años en el futuro, donde casi todo el software ya fue escrito y el problema es simplemente encontrarlo
Por eso los programadores-arqueólogos revisan archivos y, si hace falta, ejecutan código en un emulador dentro de un emulador dentro de un emulador: https://garethrees.org/2013/06/12/archaeology/
Tú también contribuiste a un tesoro del que alguien se beneficiará, ya sea mañana o dentro de 5.000 años
Como broma sobre la última corrección de bug antes de jubilarse, intenté ver micro-cad y me dio 404
URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
El comportamiento esperado es poder descargar el archivo
.zipMCSAMPLEExcelente. Fui acumulando varias “biblias” personales que siempre tengo a mano cuando trabajo con ciertos lenguajes o tareas de automatización, y también tengo bastantes métodos de organización que aprendí en HN
Pero nunca se me había ocurrido publicarlas porque se sienten demasiado personales y específicas de mi proceso mental
Sin embargo, ver estos materiales me inspiró. Es una idea realmente genial y, si fuera posible, también me gustaría apoyar económicamente el proyecto de jubilación en señal de agradecimiento
Y también qué métodos de organización aprendiste. Siempre me interesa conocer tips de productividad o software de otras personas
Si te interesa, me gustaría que intercambiáramos archivos. Creo que podría aprender mucho de tus materiales. Mi nombre de usuario de Gmail es el mismo que el de HN