SDK Multiplataforma en C logo

SDK Multiplataforma en C

NAppGUI API

Siguiente ❯

Mientras que los civiles (es decir, los no programadores) a menudo fantasean con ganar la lotería, el equivalente para muchos programadores es la rara oportunidad de crear una nueva librería desde cero, sin las restricciones que a menudo frustran sus deseos de ampliar y mejorar una biblioteca existente. Philip J. Schneider - Industrial Light + Magic


La implementación de NAppGUI se ha dividido en varias librerías escritas en ANSI-C (C90) con pequeñas partes en C++98 (Figura 1). El proyecto compila sin problemas en todas las versiones de Visual Studio (desde VS2005), Xcode (desde 3) y GCC (desde 4). Se puede utilizar para el desarrollo de aplicaciones de alto rendimiento escritas en C en los sistemas Windows, macOS y Linux. Se ha marcado una clara línea que separa los paquetes orientados a cálculo y acceso a datos (back-end) de aquellos destinados a las capas de presentación o interfaz (front-end). También hemos seguido ciertos Estándares cuyas bases se centralizan en la librería Sewer, que si bien no incorpora mucha funcionalidad, si que define los tipos básicos y las macros de configuración comunes a todo el proyecto.

Esquema de dependencias del SDK NAppGUI.
Figura 1: Arquitectura de NAppGUI.
  • Paquetes que no contienen código dependiente de plataforma.
  • Paquetes que contienen código dependiente de plataforma bajo una interfaz común.
  • Sewer: Tipos básicos, asserts, Unicode, librería estándar de C, funciones matemáticas.
  • Osbs: Servicios del sistema operativo. API portable sobre archivos, directorios, procesos, hebras, memoria, etc.
  • Core: Utilidades no gráficas de uso común. Auditor de memoria, estructuras de datos, canales E/S, análisis léxico, etc.
  • Geom2D: Geometría 2D. Transformaciones, vectores, polígonos, colisiones, etc.
  • Draw2D: API de dibujo vectorial, imágenes y fuentes tipográficas.
  • Gui: Compositor de interfaces de usuario de alto nivel.
  • OSApp: Aplicaciones de escritorio. Ciclo de mensajes.
  • INet: Protocolos y servicios de Internet, como HTTP.

1. Un poco de historia

Empecé a trabajar en este proyecto de manera inconsciente, a mediados del año 2008 cuando estaba finalizando mis estudios de Ingeniería Informática en la Universidad de Alicante. Quería desarrollar un simulador de sistemas físicos que funcionase tanto en ordenadores PC-Windows como en los iMac de Apple sin que por ello tuviese que duplicar todo el trabajo. Las alternativas tecnológicas de la época, como GTK o Qt, no me convencían en absoluto ya que eran demasiado pesadas, complicadas de utilizar y lentas por lo que acabarían empañando la calidad, elegancia y empeño que estaba poniendo en mis algoritmos de cálculo matemático. Después de perder varios meses evaluando diferentes librerías para la programación multiplataforma descargué unos manuales técnicos de Apple para programar directamente en Cocoa, la tecnología base del fabricante de la manzanita para desarrollar software sobre iMac. A mediados de 2010 empecé a ver los primeros resultados y esto fue alentador. Había creado una aplicación con el prototipo de mi simulador en apenas 500Kb (Figura 2), en contraste con los más de 30Mb de dependencias exigidos por las soluciones de terceros. El código era compacto y limpio, la aplicación funcionaba a velocidad de vértigo y, sobre todo, tenía una apariencia profesional que recordaba en parte al iMovie, permitía manipular vistas 3D como en un videojuego y aportaba datos técnicos de la simulación en tiempo real. Esto me inspiró a seguir trabajando en trazar una barrera entre la parte de la aplicación reutilizable y aquella dependiente de una tecnología concreta. Esto permitiría adaptar mi simulador a diferentes modelos de ordenador y sistemas operativos.

Captura del simulador físico iMech.
Figura 2: Simulador iMech, basado en una versión primitiva de NAppGUI.

Paralelamente, en Septiembre de 2008 me reincorporo al mercado laboral después de seis años en la Universidad, mercado en el que sigo en la actualidad (Mayo 2021), aunque los últimos años trabajo como autónomo desde casa lo que permite organizar la agenda y optimizar mi tiempo al máximo. En estos años no he abandonado mi proyecto personal, he seguido trabajando en él en a tiempo parcial sencillamente por pura afición. Su desarrollo me ha permitido investigar y profundizar en áreas interesantes para mí y reciclarme constantemente. En 2013 hago mi primera incursión en el mundo del emprendimiento siendo co-fundador de iMech Technologies, empresa de software con la que sigo vinculado y cuyo principal objetivo fue la venta del motor de simulación que previamente había creado. Al no plantear una estrategia de marketing sólida, no conseguimos nuestros objetivos iniciales con iMech, pero pudimos reconvertirla incorporando nuevos clientes y, a día de hoy, sigue viva.

A mediados de 2015 empiezo a plantearme el hecho de que todo el esfuerzo técnico realizado durante estos años tiene suficiente entidad para convertirse en un producto por si mismo. Fué entonces cuando creo el proyecto NAppGUI y comienzo a migrar todas las librerías de iMech dedicadas al desarrollo multiplataforma. Durante estos últimos años he completado el soporte para Cocoa e incluido el de Win32 y Gtk+. He creado esta documentación en Español y en Inglés, ayudándome de los servicios de traducción de Google.

El 31 de Diciembre de 2019, subo a GitHub la primera versión pública precompilada de NAppGUI.

En Mayo de 2020 comienzo el desarrollo de la primera aplicación comercial programada íntegramente con NAppGUI.

El 8 de Septiembre de 2021, libero el código fuente de NAppGUI en GitHub, convirtiéndolo en un proyecto Open Source bajo licencia MIT.

Siguiente ❯