C++ Builder. La elección de FileOptimizer

Embarcadero organizó el concurso Enterprise Software Development Article Challenge en el que se premia a aquel texto que describa el desarrollo de cualquier herramienta profesional que utilice C++ Builder o Delphi.

Por supuesto decidí participar, presentando mi FileOptimizer, y me permito a continuación daros una traducción mezcla de manual y automática para que podáis leerlo en español. Sin embargo el jurado valorará la cantidad de tráfico dirigido a la entrada, así como la calidad de la misma, de modo que si os apetece apoyarla, no tenéis más que pinchar en este enlace:

C++ Builder. The Choice For FileOptimizer by Javier Gutiérrez Chamorro

Introdución

Soy Javier Gutiérrez Chamorro, el fundador y desarrollador principal del galardonado FileOptimizer. Esto no es algo que diga yo, sino que viene respaldado por el apoyo de entidades como Sourceforge que lo premiaron en varias ocasiones como proyecto de la semana y del mes, y por supuesto, Embarcadero, que lo reconoció en el «Building Good with C++ Builder Contest 2021«.

Para comprender el contexto, lo primero es lo primero. Soy un profesional involucrado en tecnología desde hace casi 25 años, pero no estoy involucrado con Delphi ni C++ Builder desde hace más de una década. Pertenezco a la industria de Javascript, HTML, PHP y las toneladas de bibliotecas, frameworks y toolchains asociados. Como suele ocurrir, durante mi trabajo habitual me surgió una necesidad, un programa que me permitiera optimizar fácilmente las imágenes que se cargarían en webs y en aplicaciones iOS con el fin de reducir su tamaño, y así mejorar la velocidad de carga y de renderizado.

FileOptimizer es esencialmente una interfaz gráfica de usuario (GUI) para herramientas por línea de comandos, aplicaciones muy potentes pero a su vez difíciles de utilizar y que son las que se encargan de realizar el trabajo duro, la compresión sin pérdida de calidad. No importa si se trata de una imagen PNG, un vídeo MP4, un folleto PDF o un documento de Word, FileOptimizer lo reconocerá y encargará el trabajo a plugin apropiado para optimizarlo. ¿Cuál es el punto? Bueno, que conseguirás archivos que se ven exactamente igual que el original, que usan exactamente el mismo formato y que se pueden abrir con las mismas herramientas que el original; con la única diferencia que serán mucho más pequeños.


C++ Builder. La elección de FileOptimizer

Desarrollo

Los archivos pequeños eran un punto crucial en la década de 1980, cuando la memoria y el espacio de almacenamiento en disco eran escasos. Hoy en día con gigabytes de RAM y terabytes de disco puede sonar como algo del pasado, pero no lo es. Muchos dispositivos tienen capacidades de hardware limitadas (teléfonos inteligentes, tabletas, …) y necesitas sacar el máximo provecho de ellas; y en otros casos, el ancho de banda es la limitación. El ancho de banda es caro, y estoy seguro de que todos preferiríais colocar una imagen de 100 K en la web en lugar de esa misma imagen pesando 1.000 K. Sé que hay formatos modernos que reducen el tamaño del archivo a medida que los en comparación con los existentes, solo echa un vistazo a H265 para vídeos o WebP para imágenes. Desafortunadamente, esos nuevos formatos también requieren nuevas herramientas. Nuevos programas para editarlos o convertirlos, nuevas apps para visualizarlos… Así que la necesidad de reducir el tamaño de un archivo, pero manteniendo el formato original sigue tan presente como en los 80.

Siempre he sido usuario de la plataforma Windows, al menos después de que DOS y los viejos tiempos de Turbo Pascal y Turbo C++ eclipsaran. Realmente creo en las ventajas de las aplicaciones nativas, los binarios compactos y la velocidad de ejecución rápida. La filosofía de la vieja escuela de aprovechar al máximo el hardware. Cuando comencé FileOptimizer en 2012 no había tantas opciones, por lo que ir con Delphi o C++ Builder estaba claro. Personalmente, siempre me sentí más cómodo con C++ que con Object Pascal: el rendimiento de la programación de sistema a bajo nivel cuando es necesario, el mejor rendimiento en tiempo de ejecución y, especialmente, su capacidad para desarrollar cerca del hardware o a un nivel superior gracias a la encapsulación VCL.

Llevo usando C++ Builder desde su lanzamiento con la versión 1.0, tanto para desarrollos de hobby como profesionales. Me gusta mucho su enfoque de tener un verdadero entorno RAD con la potencia de C++, algo que Visual C++ aún no ha logrado, al igual que Power++/Optima++ no lo hizo en el pasado. Mi elección estaba clara, lo haría con Embarcadero C++ Builder.

La magia del desarrollo rápido de aplicaciones me permitió tener un prototipo funcional en solo unos días. Por supuesto a medida que pasaba el tiempo, y desde entonces he lanzado más de 50 versiones de FileOptimizer, fui agregando más y más características, pero lo importante es que conseguí un producto mínimo viable en tiempo récord.

La experiencia siempre te enseña, al menos si quieres aprender. Lo que yo aprendí fue a reducir las dependencias al mínimo. Proyectos anteriores como XPlorer usaban muchos componentes de terceros, una clara ventaja para evitar tener que reinventar la rueda, pero también un problema a la hora de dar soporte a un nuevo sistema operativo o al actualizar la versión de C++ Builder. Esa fue la razón por la que FileOptimizer sólo se basa en componentes VCL tal cual, de sistema y por supuesto también en la API nativa de Windows.

El tiempo confirmó que aquello fue una buena decisión, según el registro de cambios, comencé FileOptimizer con C++ Builder XE2, y ahora va ya por C++ Builder 11.2 y ha sido probado con la beta de Malawi. Una década de historia es muchísimo tiempo en la vida del software, logrando convertirlo en obsoleto, en inútil o reemplazado. Vérsión tras versión de C++ Builder y de Windows pude irlo actualizando, y también aprovechando algunas nuevas características en cuanto aparecieron: TaskDialogs en Windows Vista, compatibilidad Wine en Linux… Todo ello sin romper la compatibilidad con versiones antiguas gracias a la carga dinámica de bibliotecas.

Mientras que C++ es un lenguaje de programación eficiente, C++ Builder es un entorno productivo para él. Fácil de depurar gracias a su Debugger integrado, escritura de código rápida concon CodeInsight, un potente editor y un estupendo diseñador visual que permite crear diseños complejos sin escribir ni una línea de código.


C++ Builder. La elección de FileOptimizer

Sin embargo, las nuevas características hacen crecer exponencialmente el código, aumentaron su complejidad hasta aproximadamente las 10,000 LOC (líneas de código), todo al tiempo que había que dar soporta a las más de 400 extensiones de archivo que se soporta actualmente, y a la gestión de nada menos que 100 programas de línea de comandos diferentes, ¡cada uno con su propia sintaxis!

En los tiempos actuales que todo es inteligente, FileOptimizer también. Por ejemplo puede detectar tipos de archivo analizando su contenido interno, sin necesidad de basarse en la extensión. Así por ejemplo si un imagen GIF esta guardada como MiImagen.foto, la lógica en FileOptimizer determinará de forma transparente para el usuario que realmente se trata de un GIF. El sistema es sencillo y conocido durante años, un motor de detección basado en los «magic bytes» de las caceberas que usan los formatos de archivo más habituales y que gracias a las facilidades que ofrece de C++ al manejar bytes y bloques de memoria se simplifica mucho. No está de más recordar que uno de los objetivos de diseño del lenguaje C/C++ fue precisamente ese.


C++ Builder. La elección de FileOptimizer

Conclusión

Dudo mucho que el éxito y la longevidad de FileOptimizer hubieran sido posibles sin algo como C++ Builder. En primer lugar, tenemos la continua evolución del lenguaje C++ y del entorno C++ Builder. Imaginad por un momento que lo hubiera creado con Visual Basic 6, el clásico, una herramienta que lleva años sin soporte real y siendo defacto incompatible.

El segundo argumento es la madurez, C++ Builder es una solución estable con un paradigma bien conocido y documentado que hace que sea rápido de aprender y fácil de dominar.

Finalmente, aunque menos habitual hoy en día, está su compatibilidad y rendimiento. Una herramienta que es capaz de funcionar incluso en una máquina Windows XP con 256 MB de memoria, pero que sacará todo el partido de un Windows 11 de última generación con 64 GB de memoria.


C++ Builder. La elección de FileOptimizer

Actualizado a 21 de abril de 2023. 8:51
Os coloco aquí los comentarios sobre mi participación de Jim McKeeth y Ian Barker.

YouTube video player

6 comentarios en “C++ Builder. La elección de FileOptimizer”

  1. Suerte con el concurso, un programa tan optimizado y útil como FileOptimizer bien merecería ganarlo, en cualquier caso es una excelente ocasión para que nuevo público lo descubra. Un saludo.

  2. Javier Gutiérrez Chamorro (Guti)

    Muchas gracias Jostma. El nivel es elevado, así que será complicado ganar. No obstante haber sido seleccionado ya es un logro (otro más). Según explican ponderarán la cantidad de visitas al post en el blog de Embarcadero, así como la calidad del mismo; no está claro en qué medida, pero cuanto más interés despierte y más visitas consiga, mejor.

  3. Javier Gutiérrez Chamorro (Guti)

    Gracias por el apoyo Gabriela. Creo que ganar va a ser difícil, pero también lo pensé en mi candidatura anterior. Os iré informando.

  4. Javier Gutiérrez Chamorro (Guti)

    Bienvenido VoxTank. Desconozco el optimizador que usas con los juegos de Phisical Dreams, se agradecerían más detalles. Lo que sí te puedo decir es que cómo se puede ver fácilmente en el repositorio SVN de FileOptimizer en Sourceforge (https://sourceforge.net/p/nikkhokkho/code/10/log/?path=) hay casi 2000 commits con regularidad en su código… Vamos que eso prueba quien es el mantenedor y de quién es la propiedad del código.

Deja un comentario