This web application was made for the German company Seliger. They wanted a configurator for their customers to calculate the number and sizes of concrete blocks for the most common constructions.
It calculates in real time the optimal distribution of block sizes, taking into account that it is preferable to use big blocks, both for strength and cost.
The button “Unverbindliche Anfrage per Email senden” [send a non-binding request by email] opens a pre-filled email in the user’s email application with an accurate list of block sizes and amounts, including capstones [“Abschlusssteine”] if requested, without needing an email server.
They had first tried to license an existing configurator from another German company selling concrete products, reasoning that since they operated in a different region they would not be seen as competitors, but were rejected.
Then they asked me to make a new one from scratch, showing me that existing web application which is publicly available. Using that existing application is a bureaucratic process with a series of forms specifying the general pattern, then the parameters such as the number of divisions, then for each part the requested sizes. It then takes a moment to construct the model, and finally displays it in 3D.
I came up with an algorithm to calculate instantly the optimal block sizes, with sub-linear computational complexity which means it is possible to re-calculate structures several kilometers in size in a fraction of a second even on slow computers.
That allows a much better user experience, starting directly with a model that can be modified freely. No need to go back to change sizes or add a subdivision.
Try it out at the demonstration page or at Seliger’s website.
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.
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.
→Demonstration, →Documentation
The software system used by the Nigerian National Oil Spill Detection and Response Agency (NOSDRA) for recording, mapping and monitoring oil spills. Allows the citizens and other stakeholders check the accuracy of those reports at oilspillmonitor.ng
This work was done for the British NGO Stakeholder Democracy Network (SDN), both the append-only ledger database and server (PHP) and the web application front-end with a special version for mobile device use in the field.
Try it out at the development site which includes the latest prototype features and enhancements: demo.sentido-labs.com/oil-spill-monitor/
Official site operated by SDN until April 2019, now by NOSDRA: oilspillmonitor.ng
→Demonstration, →Documentation
A web application that, from satellite measurements, identifies gas flares in Nigeria, and estimates the energy wasted, value of gas burnt, missing fees (penalties for gas flaring are seldom enforced), potential for electricity generation, and CO₂ emissions.
This 2018 edition is the successor of the first Nigerian Gas Flare Tracker (GFT) I made in 2014, which was an adaptation of the Nigerian Oil Spill Monitor (OSM).
This work was done for the British NGO Stakeholder Democracy Network (SDN).
Official site operated by SDN until April 2019, now by NOSDRA: gasflaretracker.ng
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.
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.
Connects to a list of Oracle 19c databases with mutual authentication (TCPS) using the corresponding Oracle wallet (orapki) for each database.
It periodically polls events from the auditing table (unified_audit_trail) and outputs them as Newline-Delimited JSON for Logstash to pick up.
This plugin for Sudo 1.83 and later reports all input (detects and omits password input) and output during each Sudo session to a remote TLS 1.2+ endpoint.
The format is Newline-Delimited JSON, with one line per input or output event. If the TLS connection fails, the fall-back mechanism is a local log file for each Sudo session stored as “〈log-dir〉/〈id〉.ndjson” .
It runs on IBM AIX and Linux.
First I ported ES and LS version 7.0.1. Then as new versions came out I ported 7.1.1, 7.2.0, and 7.4.0.
The customer needed to use Elasticsearch 6 and Logstash 6 (or later) under AIX 6 and 7, on IBM’s J9 Java platform.
As I started working on this I found out that there had recently been a release of OpenJDK for AIX 7 but it was not enough in this case.
A set of configuration files and transformation scripts to connect Elasticsearch to ServiceNow Alerts.
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.
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.
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.
Developed for the German Research Center for Artificial Intelligence (DFKI).
The task was to design and implement a multi-agent system based on JADE that could be used for integrating the work of the project partners (academic research institutions from France and Germany), and then integrate the Learning Management System ILIAS as part of the system.
The integration was achieved by using “liaison” agents: small Java components that when linked into each partner's software gave it an agent representative in the system.
There was a liaison agent for each of the components:
Each agent can report the learner's progress using SCORM messages, a custom XML encoding of the standard SCORM API. I also built demonstration content for the project as SCORM packages to be loaded into the ILIAS LMS.
The learner agent has an AgentSpeak brain provided by Jason.
EC-TEL 2012 Conference poster in English
Reads a stream of XML files and writes a stream of line-oriented JSON according to a mapping file that describes which data to extract, and how to encode it in JSON.
It was done for Tahi Data Services (TDS) LTD PTE of Singapore. They needed to stream XML auditing logs from Solaris 9/10 and Oracle 11 to an aggregator that requires JSON format, and it has to work on legacy systems where only Java 5 is available.
Tutorial feedback overlays for Java applications, just 24 KB compressed.
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
An example of a small, focused just-in-time component.
The bars grow from the bottom, the donuts grow clockwise, and all charts are multi-lingual.
The code for the different chart types (bar, multibar, donut)
is encapsulated in the Charts object
used for the example in the picture.
It was written from scratch in one day for a Belgian web design agency, using D3.js
Multi-stream web video player for interactive piano lessons.
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)