Archivo de la categoría Programación

El software inflado



La Ley de Wirth, enunciada por Niklaus Wirth en 1995, el artífice del lenguaje Pascal y sus derivados, dice lo siguiente:
“El software se ralentiza más deprisa de lo que se acelera el hardware”

Es un hecho evidente y notorio para todos. La mayoría de software que tenemos instalado funciona más lento que sus versiones anteriores. Lo vimos hace muchos años con Macromedia Studio 8 y Adobe CS3, que separados por un año y medio de diferencia, mostraron un incremento de tamaño del 15%. Puedes pensar que la diferencia entre Adobe Creative Suite 3 de marzo de 2007 y Macromedia Studio 8 de septiembre de 2005, estribaba también en el cambio de propietarios, y que por tanto requirió la integración de código adicional.…

Continuar leyendo...

FileOptimizer 11



Tal vez cuando leísteis FileOptimizer y la comunidad, tuvierais la impresión de que el desarrollo de File Optimizer, quedaría abandonado. No es en absoluto el caso, y sigue estando en una fase de desarrollo plenamente activo.

FileOptimizer, continúa evolucionando, y la prueba es la reciente versión 11, lanzada con importantes cambios y mejoras.

Para que os podáis hacer una idea, he tomado como base FileOptimizer 6.80, de abril de 2014, y que es la versión más antigua de código fuente que conservo en el repositorio, correspondiente a la r2. La he comparado con FileOptimizer 11.00 de septiembre de 2017, o sea 3 años y medio después.…

Continuar leyendo...

REBOOT para DOS



Disfruté bastante haciendo UPTIME 2.0 para DOS, así que me puse unos minutos, y desarrollé REBOOT.

Esta sencilla utilidad para DOS de 126 bytes en un archivo .COM, se encarga de lanzar un reboot o reinicio de equipos basados en DOS. En realidad, es un reinicio en caliente, o warm boot, similar al que obtendríamos pulsando Ctrl-Alt-Supr.

He usado ASMC, pero debería poderse ensamblar sin problemas con JWASM, UASM, o incluso MASM. La implementación es sencilla, salta a la dirección de memoria FFFF:0000, que almacena la rutina de reinicio de la BIOS. Dicha rutima, asume que en la posición 0040:0072 hay un entero de 16 bits que indica la forma de reboot.…

Continuar leyendo...

¿Cómo mejorar la compresión de NSIS?



Trabajando en FileOptimizer me sugirieron disminuir el tamaño del instalador.

Cómo sabéis, está basado en Nullsoft Scriptable Install System (NSIS), el instalador que se hizo famoso con el desaparecido WinAMP, y estaba configurado para comprimir usando LZMA, que es el algoritmo que aporta mejores resultados sobre ZLib y BZip2. Como podéis apreciar en Setup\FileOptimizerSetup.nsi, lo primero que se hacía era escoger LZMA como algoritmo de compresión:

SetCompressor /SOLID /FINAL lzma

Quedaba ampliar el diccionario de LZMA, que había fijado a 96 Mb. desde hacía algún tiempo. El motivo, que incluso en NSIS 3.01, si lo aumentaba, se producía un error un tanto extraño:

Internal compiler error #12345: deflateInit() failed(initialization failed [-2]).…

Continuar leyendo...

FileOptimizer y la comunidad



Hace unos meses publicaba Reflexiones acerca de FileOptimizer, donde os explicaba el gran esfuerzo que hace falta para mantener un producto como FileOptimizer, siendo totalmente gratis. En aquel momento, acababa de aparecer FileOptimizer 9, y desde entonces, hemos llegado ya a FileOptimizer 10, que además, celebra su quinto aniversario. 5 años en software, son un mundo, en particular, si hablamos de un desarrollo que está mantenido solamente por una persona, y de la que la cantidad de actualizaciones se cuentan por decenas, con una evolución palpable.

A tenor de sus estadísticas, no puedo estar más satisfecho con la popularidad que está adquiriendo.…

Continuar leyendo...

smart.inc



De TASM, Turbo Assembler, recuerdo una directiva que me encantaba, era SMART, y la agregaba a todos mis programas, porque increíblemente, no se podía activar desde la linea de comandos.

El modo SMART, realizaba ciertas optimizaciones sobre el código ensamblador, por ejemplo era capaz de convertir algo como:

shr ax, 2

En:

shr ax, 1 shr ax, 1

Os parecerá una absurdidad, pero lo cierto es que los procesadores anteriores al 80188 y 80186, como los 8086 y 8088, sólo permitían realizar desplazamientos de bits de una posición. Lo que hacía TASM cuando el procesador de destino no soportaba esa operación, era transparentemente transformarlo.…

Continuar leyendo...

EasyCode Visual Assembler



Con Uptime en ensamblador, volví a adentrarme en el maravilloso mundo de los ensambladores, que tantos buenos recuerdos me había traído.

Os comenté, que actualmente existen gran variedad de herramientas de este tipo, muchas de ellas, derivadas de Openwatcom Assembler (WASM), como UASM, ASMC o el difunto JWASM. Lo cierto es que si no fuera por OpenWatcom, y sin contar el pionero NASM (Netwide Assembler), todavía seguiríamos usando assemblers comerciales como Borland Turbo Assembler (TASM) o Microsoft Macro Assembler (MASM).

Lejos quedan los tiempos en que teníamos Arrowsoft A86/A386 y poco más.…

Continuar leyendo...

Uptime 2 para DOS



No hace mucho que os hablaba de Uptime para DOS, y que publiqué la versión 1.00 y la 1.10, un sencillo programa escrito en FAST, y que replicaba el comando uptime de UNIX.

El desarrollo empezó muy bien, con una eficiencia casi de ensamblador, pero contando con la ventaja de las estructuras de alto nivel. Hasta que me topé con el impedimento de las conversiones entre números de 16 y 32 bit, y con el maldito bug de mod32.

Entonces me planteé escribir la versión 2.00 en ensamblador. Menos de 150 lineas en código FAST, no parecían gran cosa en ensamblador. Así que comencé con JWASM (Japheth’s Watcom Assembler), un ensamblador y enlazador al mismo tiempo, compatible con MASM, de código abierto y que se contruyó sobre la base de Open Watcom Assembler (WASM / OWASM).…

Continuar leyendo...

Uptime para DOS



Al hablar de FAST, me entraron ganas de recordar viejos tiempos, así que un poco como con Bell/beep en ensamblador, decidí implementar algo sencillito que accediera al hardware de bajo nivel.

Lo más tedioso de ensamblador, es que no tienes ninguna biblioteca que tenga implementadas conversiones de números para mostrarlos en pantalla (binario a ASCII), o como en este caso de BCD (Binary Coded Decimal) a binario. En eso FAST Compiler, me iba a ayudar bastante.

En el grupo de desarrollo de FreeDOS, ha habido recientemente cierto interés, en portar aplicaciones UNIX a DOS, algo que implica una gran inversión de tiempo para familiarizarse con la implementación original, y que no me interesaba.…

Continuar leyendo...

FAST Compiler



Durante mis comienzos, me topé gracias al Shareware, con una grata sorpresa. Se trataba del lenguaje de programación FAST. Un lenguaje que jamás llegué a conocer a nadie que lo conociera, pero que en aquellos días de Turbo BASIC, me parecía increíble.

FAST Compiler, generaba archivos .COM para DOS extremadamente pequeños, y ofrecía una velocidad de ejecución, lejos del resto de compiladores. Además, sus rapidísimas rutinas de escritura en la pantalla de texto, hacía que pareciera más rápido de lo que aún era.

FAST, empezó a escribirse en 1986, de la mano de Peter Campbell Software, y que acabaría falleciendo en 2007, sin demasiada fama informática, a pesar de haber estado detrás de FastBase.…

Continuar leyendo...