Software

Apache NetBeans

Apache NetBeans es tanto un entorno de desarrollo integrado como una plataforma para construir aplicaciones de escritorio en Java. Soy "commiter" de Apache NetBeans y miembro del "Project Management Committee".

La verdad es que tengo poco tiempo para echar una mano en NetBeans. Ahora mismo estoy enfocado en devolver la vida al soporte de C/C++ (muy bloqueado por cpplite) y en añadir soporte para el lenguaje de programación Rust.

toml-java

La librería tomlj es muy popular para leer ficheros en formato TOML en Java. Pero no se mantiene ya (a mí me fastidia especialmente este bug), por lo que he hecho otra y está disponible en https://github.com/vieiro/toml-java.

Tiene un API sencillo de usar, y una batería de tests unitarios bastante exigente. Las coordenadas de Maven Central son:

<dependency>
    <groupId>net.vieiro</groupId>
    <artifactId>toml-java</artifactId>
    <version>1.1.1</version>
</dependency>

dsm - Design Structure Matrix

DSM (github) es un pequeño programa que permite generar una matriz de estructura de dependencias (o matriz de estructura de diseño) a partir de un fichero de texto, generando la matriz en una hoja Excel.

El programita permite analizar con facilidad relaciones de dependencia relativamente complejas. Lo usé para analizar las dependencias de módulos dentro del clúster C/C++ de NetBeans.

Se usa el algoritmo de Eades (hay dos, realmente) para obtener una aproximación rápida al problema Feedback Arc Set.

Por ejemplo, este archivo de dependencias (grafo dirigido acíclico) produce la siguiente matriz DSM (con todos los elementos sobre la diagonal):

dsm
Fig. 1. Un ejemplo del resultado

xmark - Páginas web con markdown y Tufte-CSS

xmark (github) utiliza commonmark para traducir Markdown en XML, luego usa una hoja de estilo XSLT para transformar el XML a HTML que, combinado con con tufte-css produce unas páginas web elegantes, como ésta.

Edward Tufte es profesor emérito de Yale y es reconocido internacionalmente por su libro The Visual Display of Quantitative Information, una referencia para la visualización de información cuantitativa.

tufte books
Fig. 2. Algunos libros de Edward Tufte

covidrobots.org

Durante la pandemia participé en el proyecto Covid Robots, que instaló robots para la automatización de realización de pruebas PCR en 17 hospitales de España.

La documentación está todavía disponible en https://covidrobots.org

COVID19Spain - Cálculo de propagación de virus de Covid

Durante la pandemia hice un pequeño programa Python que calcula una aproximación burda a la tasa de propagación R0 del virus de COVID-19.

covid spain sir r0
Fig. 3. Evolución de propagación de COVID19 en España en 2019

NetBeans standalone editor

La versión 5.5 de NetBeans permitía incluir el editor de código fuente en aplicaciones Java Swing.

standalone editor
Fig. 4. Un ejemplo del editor

cbmap - Mapas crit-bit en C

cbmap es una estructura de datos de tipo mapa en C, basada en los crit-bit trees de D. J. Bernstein.

Luego llegó Rust y este tipo de "hacks" con punteros en C no se pueden hacer ya.

luacons - Expresiones S en Lua

luacons es una pequeña librería para manipular expresiones S en Lua.

Quizá algún día haga un intérprete de Scheme en Lua.

Mandelbrot Explorer - Ley de Amdahl

El explorador del fractal de Mandelbrot es una pequeña aplicación que utilicé (mientras trabajaba en el Sun Java Center, sobre el 2005) para investigar la ejecución multihilo en aplicaciones de escritorio, con Java Swing. Permite generar imágenes del fractal, y navegar por él.

Dibuja el fractal de Mandelbrot utilizando un conjunto de hilos ajustable, e informa del tiempo total necesario para dibujarlo, lo que permite comprobar experimentalmente la Ley de Amdahl.

Este software se utiliza en la Universidade Federal de Minas Gerais de Brasil en la asignatura "Automação em Tempo Real", para estudiar diferentes aspectos de paralelización y concurrencia.

Algunas características de este software son:

  • Los fractales de Mandelbrot molan.

  • Se utilizó para probar la librería 'SwingWorker' antes de su incorporación en el API de Java.

  • Sirve de ejemplo de cómo bloquear la interacción de usuario utilizando un 'GlassPane'.

  • Buena separación de modelo, vista y controlador.

  • Sirve de ejemplo de cómo almacenar imágenes en disco (pantallazos) utilizando los API de imágenes de Java.

  • Sirve de ejemplo de cómo utilizar un mapa de colores indexado para dibujar gradientes de colores del negro al rojo oscuro.

  • Sirve de ejemplo de cómo utilizar tipografías personalizadas en Java.

mandelbrot small
Fig. 5. Una imagen producida con el programa

El código fuente (ojo, es del 2005) está disponible en github.