Betonblock Konfigurator

Esta aplicación web se hizo para la compañía alemana Seliger. Querían un configurador que calculara para sus clientes la cantidad y tamaños de bloques de cemento para las construcciones más habituales.

screenshot

Calcula en tiempo real la distribución óptima de tamaños de los bloques, teniendo en cuenta que es mejor usar bloques grandes, tanto por resistencia como por coste.

El botón «Unverbindliche Anfrage per Email senden» [enviar una consulta sin compromiso por email] abre un email preformado en la aplicación de correo del usuario con una lista exacta de tamaños y cantidades de bloques, incluídos remates [«Abschlusssteine»] si se piden, sin necesidad de un servidor de correo.

Habían intentado primero comprar una licencia para un configurador existente de otra compañía alemana que vende productos de cemento, razonando que al operar en otra región no los considerarían competencia, pero los rechazaron.

Me pidieron que hiciera uno nuevo desde cero, enseñándome esa aplicación web existente que está disponible al público. El uso de esa aplicación existente es un proceso burocrático de varios formularios que especifican el patrón general, luego los parámetros tal como el número de divisiones, y después para cada parte los tamaños pedidos. Luego se toma un momento para construír el modelo, y al final lo muestra en 3D.

Yo concebí un algoritmo para calcular instantáneamente los tamaños de bloque óptimos, con una complejidad de cálculo sublineal lo que significa que se pueden recalcular estructuras de varios kilómetros en una fracción de segundo incluso en ordenadores lentos.

Eso permite una experiencia como usuario mucho mejor, empezando directamente con un modelo que se puede modificar libremente. No hay necesidad de volver atrás para cambiar tamaños o añadir una división.

Pruébelo en la página de demostración o en la página de Seliger.

Balloon design tool

A web application for designing balloon sculptures. It started as an Excel spreadsheet prototype made by the client where cells had rounded corners and could have different colours.

He then asked me to do an improved version as a web application that customers could use at home to make their own designs, print them and bring them to his shop. It had to work on a wide range of computers and mobile devices with different web browsers.

screenshot

Since prints might lack colour, the application can show the colour codes as labels on top of each balloon. That way it does not matter which kind of printer the customer has.

Over the years more patterns such as arches were added, with additional tools for splitting balloons into smaller ones, painting whole areas at once, and undo/redo.

The customer built it up into a paid service including training materials for professional balloon sculpture creators at Balloonpro.co Design Tool. This softened the impact of having his shops closed during the Covid-19 lockdowns.

Monitor de vertidos petrolíferos en Nigeria

→Demostración, →Documentación

El sistema informático usado por la Agencia Nacional para la Detección y Respuesta contra Vertidos Petrolíferos (National Oil Spill Detection and Response Agency, NOSDRA) nigeriana para registrar, cartografiar y monitorizar vertidos petrolíferos. Permite a los ciudadanos y otros afectados contrastar la veracidad de esos informes en oilspillmonitor.ng](https://oilspillmonitor.ng)

screenshot

Este trabajo se hizo para la ONG británica Stakeholder Democracy Network (SDN).

Pruébelo en el sitio de desarrollo que incluye las últimas prestaciones y mejoras en prototipo: demo.sentido-labs.com/oil-spill-monitor/

Sitio oficial operado por SDN hasta abril de 2019, ahora por NOSDRA: oilspillmonitor.ng

Rastreador de antorchas petrolíferas en Nigeria

→Demostración, →Documentación

Una aplicación web que a partir de mediciones por satélite identifica antorchas petrolíferas en Nigeria, y estima la energía desperdiciada, el valor del gas quemado, multas perdidas (las penalizaciones por quemado en antorcha no suelen ejecutarse), el potencial de generación de energía, y las emisiones de CO₂.

screenshot

Esta edición del 2018 es el sucesor del primer observatorio de antorchas petrolíferas en Nigeria (Nigerian Gas Flare Tracker, GFT) que hice en 2014, el cual fue una adaptación del monitor de vertidos petrolíferos en Nigeria (Nigerian Oil Spill Monitor, OSM).

Este trabajo se hizo para la ONG británica Stakeholder Democracy Network (SDN).

Sitio oficial operado por SDN hasta abril de 2019, ahora por NOSDRA. gasflaretracker.ng

Remote Agent for Apache Kafka®

Java application that connects to a Kafka® cluster and establishes membership of a consumer group so that the current read-point/offset is maintained internally by Kafka. It then fetches the records from the given topic(s) and outputs them as Newline-Delimited JSON, one line per record.

The records can be transformed (e.g. path flattened or re-named) and filtered.

  • --filter=’/item/date before 2023-11-28T07:47
  • --filter=’/item/color = “yellow”
  • --filter=’/item/count > 3
  • --filter=’mv /*/_metadata /meta
  • --filter=’rm /*/attachment
  • --filter=’mask 4 //credit-card

It can run in scheduled mode (--period option), where it continues running after all pending records have been processed, waits the specified amount of time, and starts again. This means there is no need to use schedulers like cron to schedule batch runs, it can do that by itself.

Auditing client for Oracle® DB

Connects to a list of Oracle 19c databases with mutual authentication (TCPS) using the corresponding Oracle wallet (orapki) for each database.

screenshot

It periodically polls events from the auditing table (unified_audit_trail) and outputs them as Newline-Delimited JSON for Logstash to pick up.

Complemento para auditoría remota de Sudo en JSON

Este complemento para Sudo 1.83 y posteriores reporta todas las entradas (detecta y omite la entrada de claves) y salidas durante cada sesión de Sudo a un terminal TLS 1.2+.

screenshot

El formato es JSON delimitado por líneas (Newline-Delimited JSON), con una línea por cada suceso de entrada o salida. Si la conexión TLS falla, el mecanismo secundario es un fichero local por cada sesión Sudo almacenado como “〈log-dir〉/〈id〉.ndjson”.

Funciona en IBM AIX y en Linux.

Adaptación de Elasticsearch y Logstash para IBM AIX

Primero adapté la versión 7.0.1 de ES y LS. Luego según salían otras nuevas también adapté las versiones 7.1.1, 7.2.0, y 7.4.0.

El cliente necesitaba usar Elasticsearch 6 y Logstash 6 (o posteriores) sobre AIX 6 y 7, en la plataforma Java J9 de IBM.

screenshot

Al empezar el trabajo averigüé que había habido recientemente una edición del OpenJDK para AIX 7 pero no bastó en este caso.

ServiceNow® Alerts from Elasticsearch

A set of configuration files and transformation scripts to connect Elasticsearch to ServiceNow Alerts.

screenshot

The events sent by Elasticsearch’s webhook are received by a Listener Transform Script, found under Event Management → Event Listener (Push) → Listener Transform Scripts.


{
    "line" => "This alarm comes from Elasticsearch",
    "host" => "LPAR179",
    "offset" => 36,
    "port" => 12344,
    "file" => "logstash-test/oracle-audit/test.log",
    "type" => "ora",
    "@version" => "1",
    "@timestamp" => 2020-11-12T13:22:59.640Z,
    "os" => "Linux"
}

The alerts will be listed in the Alert Console, found under Event Management → Alert Console.

screenshot

FOP XML→PDF position tracker

Tracks the location of objects from the input XML into the PDF produced by Apache FOP (Formatting Objects Processor), for instance to know at which page to find a specific item.

screenshot

The customer is a company that offers financial document management to their customers. Their document processing pipeline extracts and normalizes the content from various inputs, and uses Apache FOP for building the PDF views.

They needed to track the page in the produced PDF where specific elements were rendered.

The solution was a Java component that intercepted drawing calls in the FOP renderer once the content has been paginated.

eLearning Multi-Agent System

Desarrollado para el Centro Alemán de Investigación en Inteligencia Artificial (DFKI).

screenshot

El objetivo era diseñar e implementar un sistem multi-agente sobre JADE que pudiera usarse para integrar el trabajo de los socios de projecto (instituciones de investigación académica de Francia y Alemania). y luego integrar el Sistema de Gestión de Aprendizaje [Learning Management System] ILIAS como parte del sistema.

La integración se logró con el uso de agentes «de enlace» [liaison]: pequeños componentes Java que al enlazarse con el software de cada socio le proporcionaba un agente representante en el sistema.

Había un agente de enlace para cada componente:

  • Sistema de Gestión de Aprendizaje ILIAS adaptado por el DFKI
  • Entorno 3D Virtual I-FLEG del INRIA
  • Gestor de diálogos de la Universidad de Saarland
  • Chatbot Francés y Alemán para pruebas, basados en AIML, no parte del projecto

Cada agente puede informar sobre el avance del aprendiz mediante mensajes SCORM, una codificación a medida en XML del API SCORM estándar. También hice contenidos de demostración para el proyecto como paquetes SCORM que se cargan en el SGA [LMS] ILIAS.

El agente del estudiante [learner agent] tiene un cerebro AgentSpeak proporcionado por Jason.

EC-TEL 2012 Póster de conferencia en Inglés

Conversor en flujo de XML a JSON

Lee un flujo de ficheros XML y escribe un flujo de líneas JSON (line-oriented JSON) según un fichero de correspondencias que describe qué data extraer, y cómo codificarlo en JSON.

screenshot

Se hizo para Tahi Data Services (TDS) LTD PTE de Singapur. Necesitaban enviar flujos de diarios de auditoría XML de Solaris 9/10 y Oracle 11 a un agregador que requiere formato JSON, y tiene que funcionar en sistemas anticuados en los que sólo hay Java 5.

Tutorial Toolkit

Tutorial feedback overlays for Java applications, just 24 KB compressed.

screenshot

The translucent blue layer is a stencil that prevents the user from interacting with the components under it, making it easier for them to focus on the active components.

The screenshot shows a note-style call-out (another style is thought bubble) with four target buttons in the application (arrows), and one button for proceeding to the next step in the tutorial.

It's enough to specify the note content and targets, and Tutorial Toolkit finds the proper place for the call-out so that they don't get occluded, using a bespoke single-pass constraint solver.

This work was done in one month for the London Knowledge Lab, and was used in the MiGen project. It can be seen briefly in the video MiGen: Unlocking Algebra at 3'20" and 4'22".

Download (GPL license) TTK 1.0

Under dist/lib/ there is a ready to use JAR file: launch the demo application from the screenshot with

java -jar dist/lib/TTK-20121008.jar

Technical documentation in English

Gráficas multi-lingües animadas con D3

Un ejemplo de componente pequeño y preciso, hecho en el momento.

screenshot

Las barras crecen desde el fondo, las rosquillas en sentido horario, y todas las gráficas son multi-lingües.

El código para cada tipo de gráfica (barra, multi-barra, rosquilla) está encapsulado en el objeto Charts usado en el ejemplo de la imagen.

Lo escribí desde cero en un día para una agencia de diseño web belga con D3.js

VideoLecture player

Multi-stream web video player for interactive piano lessons.

screenshot

The screenshot shows (paused) a live webcam RTMP stream, an MP4 H.264 video HTTP stream, an FLV video RTMP stream, and an F4V video HTTP stream. All can play at the same time and it uses either the Flash plug-in or HTML5 video.

This work was done in two weeks for the German Research Center for Artificial Intelligence (DFKI)

Manual in English