5 puntos por GN⁺ 2023-11-04 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2023-11-04
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 #include estándar de C, y que en 20 mil líneas de código C haya apenas 24 #if
    La experiencia de leer una base de código así me inspiró cuando empecé a trabajar en Cosmopolitan Libc

    • Si solo tienes un objetivo de compilación, puedes reducir mucho los macros #if
    • Los compiladores de C de antes dejaban pasar todo tipo de errores que un compilador de C moderno detectaría correctamente
    • En Rust escribí un listener HTTP simple con una sola ruta, y Cargo trajo unas 105 dependencias para compilarlo
      Aunque, para hacer una comparación equivalente, solo tiene 2 sentencias use
    • En cambio, en C también hay una tabla hash implementada solo con macros. Bastante genial: https://troydhanson.github.io/uthash/
  • Me resultó extraña la convención True=7 de STYLE.TXT
    Dice que, por experiencia con código de bajo nivel y hardware, para “minimizar lo que puede salir mal a bajo nivel”, a veces usaba 7 en vez de 1 como verdadero en C, aprovechando que 0==FALSE y !0==TRUE
    Es 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

    • Incluso si eso ocurriera, no puedes pensar todas las condicionales como si fueran booleanos de tres estados
      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
    • El autor básicamente admite que era una costumbre tonta, y de hecho creo que vuelve menos clara la intención
      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
    • Para verificar si una línea de datos serial funciona, se usa 0xA5 (1010 0101) para enviar una secuencia alternada de bits ligeramente modificada
      Es una forma de comprobar de una sola vez la mayor cantidad posible de fallas
    • Si te preocupa tanto eso, TRUE=7 no es una solución real
      Si 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 fallar
      Además, los cambios de bits pueden afectar variables usadas en un switch, condiciones como if (i > 17), punteros, direcciones de retorno en la pila e incluso el propio código
      En 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
    • Más que un problema común, suena a “podría pasar, así que tratemos de evitarlo donde sea fácil”
      Personalmente, creo que habría usado -1
  • Me 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

    • Como los chicos de hoy usan Git y varios hubs de hosting, el código rara vez desaparece; quizá este sea un problema que solo vivirá nuestra generación
      Claro que si estos servicios “gratuitos” cierran, sería un problema, así que el self-hosting también sirve
    • Conservo mucho código viejo, pero me da demasiada vergüenza como para volver a verlo
    • A mí me pasa algo parecido. También hice un programa de hojas de cálculo para DOS, tenía gráficos y fórmulas en modeX, y también hice algunos juegos y algunos virus
      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

    • Fue intenso. Me hizo pensar en mi suegro, que tuvo un infarto en 2015 y terminó con el 90% del corazón dañado
      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”
    • Me pregunto por qué los médicos son así
      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
    • Curiosamente me recordó a The Shadow Out of Time de H. P. Lovecraft
    • Es sombrío, pero al final parece un final feliz
  • 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 qué habría que hacerlo solo después de jubilarse? ¿No se puede hacer ahora mismo?
    • Me habría gustado conservar algo de lo que hice durante 40 años programando, pero cada vez que cambié de trabajo lo dejé todo atrás
      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

    • Si no guardas esas dependencias por tu cuenta, más adelante puede que nadie pueda leer ni compilar correctamente el código
      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
    • Todos esos pip install y npm install van a quedar inútiles
  • Creo 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

    • A los ingenieros fans de Vinge les gusta especialmente el detalle de que, aunque suele pensarse que el calendario moderno, es decir, del futuro lejano, se basa en el primer alunizaje humano, en realidad se basa en la Unix Epoch
  • 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 .zip

    • Parece que viene completo dentro del zip MCSAMPLE
    • A mí también me dio el mismo 404. No hay muchos programas CAD originales, así que tengo muchas ganas de ver este
  • Excelente. 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

    • Me da curiosidad saber qué quieres decir exactamente con “biblias” aquí
      Y también qué métodos de organización aprendiste. Siempre me interesa conocer tips de productividad o software de otras personas
    • Yo también tengo bastantes biblias de ese tipo
      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