Éste es el ¿absurdo? reto que propone cada año el International Obfuscated C Code Contest (IOCCC), en un intento de picar a programadores de todo el mundo hacia el extremo de la programación más enrevesada e imposible de entender. De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc. Mejor ver algunos screenshot:
#8:
De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc
Yo creía que sabía programar. Mejor me dedico a cultivar tomates
#10:
#8 cuando yo me dí cuenta de esa triste verdad, no me quedó más remedio que empezar a desarrollar una fructifera y rica vida social para compensar mi mediocridad como informático.
Te acompaño en el sentimiento
#33:
Para poner el tema en perspectiva, vale la pena señalar que este certamen de programación tiene más años que la mayoría de usuarios de Menéame. Se remonta a 1984, y es el concurso mas antiguo de Internet.
Mí entrada favorita de todos los tiempos es ésta de 1990, una correspondencia literaria amorosa con ruptura incluida escrita en código C: http://www.ioccc.org/1990/westley.c
Lo tiene todo: ofuscación, aspecto atractivo, ingenio, elegancia e incluso una vaga utilidad. Para más coña, el programa es una emulación del "me quiere, no me quiere" que acepta como parámetro el número de pétalos de la margarita.
La gracia empezó a decaer a lo largo de los 90 y con el tiempo el IOCCC se convirtió simplemente en un concurso de funcionalidad y programación compacta. Pero los primeros años se premiaba con criterios mucho más curiosos y divertidos, como la paradójica prestación de que un programa escribiese su propio código, la apariencia visual del código más curiosa o ingeniosa (había verdaderos artistas que llegaban incluso a hacer con su código un dibujo descriptivo de la utilidad del programa), y hasta había un premio al mejor abuso de las normas del certamen. Recuerdo una divertida entrada que ganó esas tres categorías presentando... ¡un fichero vacío!
Todos esos momentos se perderán, como lágrimas en la lluvia.
#26:
#8 Saber encajar un programa en 4096 caracteres te hace un frikazo con muy poca vida social, pero no necesariamente un buen programador.
Siempre he pensado que un buen programador es aquel que logra crear código eficiente, pero a la vez fácil de leer y basado en una estructura lógica que puedes comprender sin mucho esfuerzo, todo lo contrario al código de este emulador que casi está en lenguaje máquina, lo cual tiene su mérito, pero no es una muestra de buena programación (en mi opinión).
#24:
#20 Que gran verdad. Primero empezamos con el truco del swap. Ahora la memoria es tan barata que en cuanto el disco duro rasca sin avisar compramos 16 GB más. El tamaño de los buffers dinámicos los metemos en variables de tipo long, y por supuesto ni queremos oir hablar de campos con longitud de bits... ¿tenemos que guardar un booleano? A tomar por saco, en un int para él solito.
Los buenos programadores teníamos un Spectrum de 16K y despreciabamos a los que se compraban en el 48K, por despilfarradores de RAM.
De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc
Yo creía que sabía programar. Mejor me dedico a cultivar tomates
#8 cuando yo me dí cuenta de esa triste verdad, no me quedó más remedio que empezar a desarrollar una fructifera y rica vida social para compensar mi mediocridad como informático.
#8 Saber encajar un programa en 4096 caracteres te hace un frikazo con muy poca vida social, pero no necesariamente un buen programador.
Siempre he pensado que un buen programador es aquel que logra crear código eficiente, pero a la vez fácil de leer y basado en una estructura lógica que puedes comprender sin mucho esfuerzo, todo lo contrario al código de este emulador que casi está en lenguaje máquina, lo cual tiene su mérito, pero no es una muestra de buena programación (en mi opinión).
#26 como te gustaría tener un presidente que supiera modular los problemas con tan poco recursos
ha cambiado eso mucho... antes las tías le molaban los albañiles.... ahora los programadores son los que se lleva el gato al agua si no, mira las ofertas de trabajo son los que mas hace falta y viajan mucho al extranjero
#26: Recuerda:
Un buen programador es aquel que jamás escribe comentarios, sino que escribe un código tan súmamente legible y bello, que se comenta por si mismo.
#10 Tranqui, tronco... todo lo que han hecho ha sido compactar el código del emulador que Fabrice Bellard ya hizo hace años. Como son unos impresentables han evitado nombrar la fuente original.
#10 Pues si tu sientes eso siendo programador, imagina lo que yo sentí cuando estudiaba ingeniería industrial y tuve que enfrentarme a la programación en C por primera vez. Estructurar mi pensamiento para entender un ejercicio tan básico como el algortimo de la burbuja me llevó un tiempo nada despreciable. Pero bueno, más allá de que no me dedique a ello me parece un mundo fascinante, y a esos niveles ya debe ser la p..a. A costa de la vida social, seguramente, por eso prefiero quedarme como estoy.
#8 Teniendo experiencia suficiente, cualquiera hace cualquier cosa. La diferencia es el tiempo y las ganas que le pone cada uno. No está de más recordar que cuando uno se vaya a la tumba, sus habilidades no sirven de nada para poner en perspectiva el tiempo que cuesta aprender algo vs. si merece la pena aprenderlo.
Para poner el tema en perspectiva, vale la pena señalar que este certamen de programación tiene más años que la mayoría de usuarios de Menéame. Se remonta a 1984, y es el concurso mas antiguo de Internet.
Mí entrada favorita de todos los tiempos es ésta de 1990, una correspondencia literaria amorosa con ruptura incluida escrita en código C: http://www.ioccc.org/1990/westley.c
Lo tiene todo: ofuscación, aspecto atractivo, ingenio, elegancia e incluso una vaga utilidad. Para más coña, el programa es una emulación del "me quiere, no me quiere" que acepta como parámetro el número de pétalos de la margarita.
La gracia empezó a decaer a lo largo de los 90 y con el tiempo el IOCCC se convirtió simplemente en un concurso de funcionalidad y programación compacta. Pero los primeros años se premiaba con criterios mucho más curiosos y divertidos, como la paradójica prestación de que un programa escribiese su propio código, la apariencia visual del código más curiosa o ingeniosa (había verdaderos artistas que llegaban incluso a hacer con su código un dibujo descriptivo de la utilidad del programa), y hasta había un premio al mejor abuso de las normas del certamen. Recuerdo una divertida entrada que ganó esas tres categorías presentando... ¡un fichero vacío!
Todos esos momentos se perderán, como lágrimas en la lluvia.
FreeDOS kernel version 1.1.33 (Build 2033) [Jan 31 2004 16:30:33]
Kernel compatibility 7.10 - WATCOMC - FAT32 support
(C) Copyright 1995-2004 Pasquale J. Villani and The FreeDOS Project.
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2, or (at your option) any later version.
- InitDiskno hard disks detected
FreeCom version 0.82 pl 2 XMS_Swap [Apr 28 2003 17:47:52]
Current date is Sun 01-05-2014
Enter new date (mm-dd-[cc]yy):
Current time is 10:56:51.56 pm
Enter new time:
No confundamos, un buen programador es:
-Aquel que su código hace lo que debe de hacer
-Aquel que su código no hace lo que no debe de hacer
-Aquel que su código es limpio, reusable y con comentarios cuando de verdad haga falta.
-Aquel que hasta cierto punto optimiza el código que genera (depende de las prisas).
Lo demás son frikadas. Que lo mete en 4K? Y?
Ahorrarse bytes no significa nada. Y menos hoy en día con GB de espacio hasta en un móvil.
Lo que suele ocupar en un programa no es el código, son los datos.
Se nota que es un concurso, si programase yo eso me caería una buena bronca de mi profesor de Radiocomunicaciones, por no poner comentarios.
En todo caso es una maravilla. Es más estos concursos siempre salen maravillas. Creo recordar de alguien que un año, hace pocos años vamos, hizo un juego entero que se basaba todo en matemática para crear la música y los niveles en tiempo real.
Aquí quería decir un detalle, ¿valorariamos como buen cirujano a alguien que sepa hacer cirugas a corazón abierto con un juego de cubertería?
Aviso que mi intención no es desprestigiar a nadie, evidentemente hay mejores programadores que otros, sin embargo hacerlo en medida a este concurso, me parece exactamente lo que mi ejemplo, absurdo. Ahora en informática hay otras prioridades, y según lo que programes ahorrarte unos bits en booleanos metiendolos juntos en un mismo byte no tiene tanto sentido y te crea dependencias complicadas de modificar en el futuro.
Tampoco tiene tanto sentido optimizar el código cuando el compilador hace un trabajo mucho mejor. Esto es un concurso, así que vale, pero en un proyecto real hay que saber cuando eres tacaño con los recursos y cuando es mejor ser flexibles.
#44 Por eso digo que en un proyecto real hay que saber cuando haces una cosa u otra, optimizar solo porque eres guay, es una chorrada.
Y por cierto, date cuenta que ese en particular es un proyecto "muerto", programas un emulador para un sistema que ya no se desarrolla, tus requerimientos estas congelados, no cambian.
#32 Te equivocas, SDL solo dibuja la matriz de pixeles que genera en un recuadro. Ejerce de "pizarra", nada más. La pantalla VGA, el código de arranque para los disquetes, disco duro y demás está en la BIOS externa del emulador, que es exactamente el funcionamiento de aquellos PC con CPU 8086 de Intel
Estoy de acuerdo con muchos comentarios de aqui. Hay programadores y programadores, estan los de arrastrar y soltar y estan los "primos lejanos de Chuck Norris", y estoy totalmente de acuerdo, para que TODOS lo puedan entender, de ahi que a algunos nos contratan las carnicas, a otros no se quien y otros exigen lo que se les canta en sueldo, y a los envidiosos, nada de excusas, que ellos son buenos y nosotros malos ! printf("Hostias !")
#20 Que gran verdad. Primero empezamos con el truco del swap. Ahora la memoria es tan barata que en cuanto el disco duro rasca sin avisar compramos 16 GB más. El tamaño de los buffers dinámicos los metemos en variables de tipo long, y por supuesto ni queremos oir hablar de campos con longitud de bits... ¿tenemos que guardar un booleano? A tomar por saco, en un int para él solito.
Los buenos programadores teníamos un Spectrum de 16K y despreciabamos a los que se compraban en el 48K, por despilfarradores de RAM.
#24 Emulador de Spectrum 48k. Funciona en un i386 con DOS y compatibles como FreeDOS. Se creó en la guerra yugoslava mientras los programadores esquivaban el fuego de los francotiradores.
Comentarios
De entre los ganadores de 2013 me ha llamado mucho la atención una auténtica obra maestra: un emulador completo de 8086 capaz de ejecutar, sobre MSDOS, AutoCAD, Windows 3.0, etc
Yo creía que sabía programar. Mejor me dedico a cultivar tomates
#8 cuando yo me dí cuenta de esa triste verdad, no me quedó más remedio que empezar a desarrollar una fructifera y rica vida social para compensar mi mediocridad como informático.
Te acompaño en el sentimiento
#8 Saber encajar un programa en 4096 caracteres te hace un frikazo con muy poca vida social, pero no necesariamente un buen programador.
Siempre he pensado que un buen programador es aquel que logra crear código eficiente, pero a la vez fácil de leer y basado en una estructura lógica que puedes comprender sin mucho esfuerzo, todo lo contrario al código de este emulador que casi está en lenguaje máquina, lo cual tiene su mérito, pero no es una muestra de buena programación (en mi opinión).
cc #10
#26 Es como los records Guiness: una chorrada admirable.
#26 como te gustaría tener un presidente que supiera modular los problemas con tan poco recursos
ha cambiado eso mucho... antes las tías le molaban los albañiles.... ahora los programadores son los que se lleva el gato al agua si no, mira las ofertas de trabajo son los que mas hace falta y viajan mucho al extranjero
#26: Recuerda:
Un buen programador es aquel que jamás escribe comentarios, sino que escribe un código tan súmamente legible y bello, que se comenta por si mismo.
#10 Tranqui, tronco... todo lo que han hecho ha sido compactar el código del emulador que Fabrice Bellard ya hizo hace años. Como son unos impresentables han evitado nombrar la fuente original.
http://bellard.org/
http://bellard.org/jslinux/
#33 buenísimo
#10 Pues si tu sientes eso siendo programador, imagina lo que yo sentí cuando estudiaba ingeniería industrial y tuve que enfrentarme a la programación en C por primera vez. Estructurar mi pensamiento para entender un ejercicio tan básico como el algortimo de la burbuja me llevó un tiempo nada despreciable. Pero bueno, más allá de que no me dedique a ello me parece un mundo fascinante, y a esos niveles ya debe ser la p..a. A costa de la vida social, seguramente, por eso prefiero quedarme como estoy.
#8 Teniendo experiencia suficiente, cualquiera hace cualquier cosa. La diferencia es el tiempo y las ganas que le pone cada uno. No está de más recordar que cuando uno se vaya a la tumba, sus habilidades no sirven de nada para poner en perspectiva el tiempo que cuesta aprender algo vs. si merece la pena aprenderlo.
Para poner el tema en perspectiva, vale la pena señalar que este certamen de programación tiene más años que la mayoría de usuarios de Menéame. Se remonta a 1984, y es el concurso mas antiguo de Internet.
Mí entrada favorita de todos los tiempos es ésta de 1990, una correspondencia literaria amorosa con ruptura incluida escrita en código C:
http://www.ioccc.org/1990/westley.c
Lo tiene todo: ofuscación, aspecto atractivo, ingenio, elegancia e incluso una vaga utilidad. Para más coña, el programa es una emulación del "me quiere, no me quiere" que acepta como parámetro el número de pétalos de la margarita.
La gracia empezó a decaer a lo largo de los 90 y con el tiempo el IOCCC se convirtió simplemente en un concurso de funcionalidad y programación compacta. Pero los primeros años se premiaba con criterios mucho más curiosos y divertidos, como la paradójica prestación de que un programa escribiese su propio código, la apariencia visual del código más curiosa o ingeniosa (había verdaderos artistas que llegaban incluso a hacer con su código un dibujo descriptivo de la utilidad del programa), y hasta había un premio al mejor abuso de las normas del certamen. Recuerdo una divertida entrada que ganó esas tres categorías presentando... ¡un fichero vacío!
Todos esos momentos se perderán, como lágrimas en la lluvia.
Música en 90 caracteres.
echo "main(i)" | gcc -x c - && ./a.out | aplay
#3 : In function ‘main’:
:1:1: warning: right shift count >= width of type [enabled by default]
Igualito que los programas de hoy en día en java.
Por cierto he conseguido ejecutar FreeDOS:
FreeDOS kernel version 1.1.33 (Build 2033) [Jan 31 2004 16:30:33]
Kernel compatibility 7.10 - WATCOMC - FAT32 support
(C) Copyright 1995-2004 Pasquale J. Villani and The FreeDOS Project.
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2, or (at your option) any later version.
- InitDiskno hard disks detected
FreeCom version 0.82 pl 2 XMS_Swap [Apr 28 2003 17:47:52]
Current date is Sun 01-05-2014
Enter new date (mm-dd-[cc]yy):
Current time is 10:56:51.56 pm
Enter new time:
A:>
http://odin.fdos.org/fdodin06.8088.zip Bajadlo y descomprid el archivo. En vez de usar el disco Dos6.22.img usad el ODIN.720
Joder hay niveles, niveles y niveles, pero lo de emular completo 8086 es un puto genio .
#17 No soy programador pero en los #defines mete bastantes atajos.
Aquí versiones para Win7 de "4kB Demo - Elevated door RGBA & TBC": http://jansloot.telcomsoft.nl/Sources-2/DemoScene/Elevated_4kB/Elevated_4kB.htm
En 4 kb. (compilado):
Ganas de mas?
http://www.pouet.net/prodlist.php?type%5B0%5D=4k&platform%5B0%5D=Windows&page=1&order=views
#20 En #19, usa la API de DirectX. Así, cualquiera .
No confundamos, un buen programador es:
-Aquel que su código hace lo que debe de hacer
-Aquel que su código no hace lo que no debe de hacer
-Aquel que su código es limpio, reusable y con comentarios cuando de verdad haga falta.
-Aquel que hasta cierto punto optimiza el código que genera (depende de las prisas).
Lo demás son frikadas. Que lo mete en 4K? Y?
Ahorrarse bytes no significa nada. Y menos hoy en día con GB de espacio hasta en un móvil.
Lo que suele ocupar en un programa no es el código, son los datos.
#include "SDL.h"
Ah vale, si puedo usar las librerías que quiera, la cosa cambia.
#15 Solo usa SDL como "pantalla" para visualizar los píxeles que genera. Lo demás es C puro.
Avatares redondos! Y haría que me sobraran muchos caracteres sólo para dar más rabia.
Siguiendo los links he llegado a una pagina donde puedes probar las formulas musicales
http://wurstcaptures.untergrund.net/music/
Es puro vicio
He dado con esta formula.
http://wurstcaptures.untergrund.net/music/?oneliner=(((t%3C%3C5)%7C(t%3E%3E1))%20%2F(t%3E%3E16))&oneliner2=&t0=0&tmod=0&duration=100&separation=100&rate=44100
#28 http://wurstcaptures.untergrund.net/music/?oneliner=((t%5E(t%3E%3E64%7Ct%3E%3E11)%2670%26t%3E%3E8))*(t%26t%3E%3E12%7Ct%3E%3E14)%2B(t%5Et%3C2)%2B(t%26t)-(t%3E%3E4)%2B(t%26%26t)-(t-t*4%2Bt)&oneliner2=&t0=0&tmod=0&duration=130&separation=0&rate=22050
Please, bitch
#28 #30 Si os va el tema ese "music oneliner player" nació por estos lares:
https://www.pouet.net/topic.php?which=8357&page=1
Y en ese hilo (muy recomendable) hay ejemplos a montones, algunos muy buenos como este:
http://wurstcaptures.untergrund.net/music/?oneliner=t*(0xCA98CA98%3E%3E(t%3E%3E9%2630)%2615)%7Ct%3E%3E8&rate=8000
nada, yo tengo una vida
Interesante método para comprimir código con DEFINE's.
Este tio hace cosas parecidas:
http://bellard.org/
http://bellard.org/projects.html
Es el padre de Qemu y FFMPEG (Usado por VLC y demás).
Y luego hay cosas como esto:
http://www0.us.ioccc.org/2004/arachnid.c
#include
int main() int a;
return a;//Soy un temerario
">
Se nota que es un concurso, si programase yo eso me caería una buena bronca de mi profesor de Radiocomunicaciones, por no poner comentarios.
En todo caso es una maravilla. Es más estos concursos siempre salen maravillas. Creo recordar de alguien que un año, hace pocos años vamos, hizo un juego entero que se basaba todo en matemática para crear la música y los niveles en tiempo real.
Salu2
Más de alguno programa parecido en mi empresa. No hay Dios que entienda nada.
Aquí quería decir un detalle, ¿valorariamos como buen cirujano a alguien que sepa hacer cirugas a corazón abierto con un juego de cubertería?
Aviso que mi intención no es desprestigiar a nadie, evidentemente hay mejores programadores que otros, sin embargo hacerlo en medida a este concurso, me parece exactamente lo que mi ejemplo, absurdo. Ahora en informática hay otras prioridades, y según lo que programes ahorrarte unos bits en booleanos metiendolos juntos en un mismo byte no tiene tanto sentido y te crea dependencias complicadas de modificar en el futuro.
Tampoco tiene tanto sentido optimizar el código cuando el compilador hace un trabajo mucho mejor. Esto es un concurso, así que vale, pero en un proyecto real hay que saber cuando eres tacaño con los recursos y cuando es mejor ser flexibles.
#43 "Tampoco tiene tanto sentido optimizar el código cuando el compilador hace un trabajo mucho mejor."
Intenta programar un emulador de Play Station para ARM sin XV ni OpenGL ni nada por el estilo y que te salga rápido.
El compilador optimiza, pero para ciertas cosas, meter mano a bajo nivel es imprescindible.
http://notaz.gp2x.de/pcsx_rearmed.php
#44 Por eso digo que en un proyecto real hay que saber cuando haces una cosa u otra, optimizar solo porque eres guay, es una chorrada.
Y por cierto, date cuenta que ese en particular es un proyecto "muerto", programas un emulador para un sistema que ya no se desarrolla, tus requerimientos estas congelados, no cambian.
Depende de las librerías que te dejen usar.
con librerias externas que ocupan cientos de megas yo tambien hago el windows 8 con 3 lineas
#32 Te equivocas, SDL solo dibuja la matriz de pixeles que genera en un recuadro. Ejerce de "pizarra", nada más. La pantalla VGA, el código de arranque para los disquetes, disco duro y demás está en la BIOS externa del emulador, que es exactamente el funcionamiento de aquellos PC con CPU 8086 de Intel
Así que sí, ha creado un emulador de PC XT.
Estoy de acuerdo con muchos comentarios de aqui. Hay programadores y programadores, estan los de arrastrar y soltar y estan los "primos lejanos de Chuck Norris", y estoy totalmente de acuerdo, para que TODOS lo puedan entender, de ahi que a algunos nos contratan las carnicas, a otros no se quien y otros exigen lo que se les canta en sueldo, y a los envidiosos, nada de excusas, que ellos son buenos y nosotros malos ! printf("Hostias !")
Yo programo en Objective-C, que C es de perroflautas. Tengo pasta => uso Mac. Tú no.
Ahora ya sabeis porque a los "programadores" de hoy os pagan 800€ .Mucho me parece,os deberian pagar menos.
La necesidad aviva el ingenio, y cuando solo tienes 4k de memoria ,tienes mucha necesidad.
#20 Que gran verdad. Primero empezamos con el truco del swap. Ahora la memoria es tan barata que en cuanto el disco duro rasca sin avisar compramos 16 GB más. El tamaño de los buffers dinámicos los metemos en variables de tipo long, y por supuesto ni queremos oir hablar de campos con longitud de bits... ¿tenemos que guardar un booleano? A tomar por saco, en un int para él solito.
Los buenos programadores teníamos un Spectrum de 16K y despreciabamos a los que se compraban en el 48K, por despilfarradores de RAM.
#24 Emulador de Spectrum 48k. Funciona en un i386 con DOS y compatibles como FreeDOS. Se creó en la guerra yugoslava mientras los programadores esquivaban el fuego de los francotiradores.
http://www.worldofspectrum.org/warajevo/Story.html
#20 Estudio ingeniería informática, y el profesor nos dice: "Si ahora el Eclipse os lo hace todo" Java
#50 profesores malos hemos tenido todos
#include
int main()
return 0;
">
#1 Supongo que has querido poner "POLLA\n".
#include
int main()
#1 and #2 n ;)");
return 0;
">
#2 puts("POLLA");
#1 Falta de uso... no problem google te ayuda: http://bit.ly/1eAhHvU A ver si alegras esa cara,