Clients

Since 1998 I have been contracted as a freelance developer for a substantial number of mission- or business critical software projects. Among the clients I have worked for are:

 
 

Selected projects

Among the projects I have worked on are:

Near-miss detection, Danish Maritime Authority.
Role: Architect, programmer.
Tech keywords: Java SE, Spring Boot, JTS topology suite, WKT, REST, OpenAPI, AIS, GPS, NMEA, applied mathematics.

I was hired as an application architect and domain specialist to support green-field development of an application intended to run onboard a larger ship, to collect and analyse positional data from own ship (GPS) and other ships (AIS). The application detects near-miss situations in which another ship enters the ellipse shaped safety zone ahead of own ship, and makes these incidents available to other on-board system e.g. for post-trip analysis and trip evaluation performed by navigators and other bridge personel.

The service is prepared to be available through the international Maritime Connectivity Platform (MCP).
2018
Navigational warnings in S-124 format, Danish Maritime Authority.
Role: Programmer.
Tech keywords: Java EE (CDI, JAX-RS, JAXB, JPA), JBoss, REST, OpenAPI, XML, GeoJSON, WKT.

I was hired to upgrade an existing Java/JBoss-based system for editing and promulgation of navigational warnings for ships in the Baltic Sea and Danish territorial waters. The main task was to create a REST service to distribute navigational warnings in a format compliant with the IHO S-124 standard. The service is part of an international programme, the Maritime Connectivity Platform (MCP), and is used by ships at sea.
2018
Electronic deed registration (Danish: eTinglysning), Bankdata.
Role: Programmer.
Tech keywords: Java EE (CDI, JAX-RS, JAXB, JPA, JMS), JDOM2, XML-DSig, Apache Camel, JBoss, OpenAPI.

I programmed major parts of JMS and REST-based integration points between Bankdata's internal systems and the external public electronic deed register, which uses a complex SOAP-over-MQ protocol. All API's exposed towards other Bankdata systems were documented using OpenAPI.
2018
Antenna selection algorithm, Undisclosed client.
Role: Programmer.
Tech keywords: Node.js, Javascript, PostGIS.

As a remote worker I delivered a turnkey node.js-based microservice to calculate the optimum antenna to use for coast-to-ship communication; given a geographical description of each antenna's coverage area.
2017
Core Credit API, Bankdata.
Role: System architect, team lead.
Tech keywords: Java EE (CDI, JAX-RS, JPA), Hibernate, JBoss, Swagger.

I laid the architecture, served as team-lead and programmed major parts of the Core Credit API at Bankdata, which serves as an important REST-based API for a no. of other internal systems to get information about private customers and their financial situation. The Core Credit API was deployed as a no. of separate microservices.
2017
Private credit granting system, Bankdata.
Role: System architect, team lead.
Tech keywords: Java EE (CDI, JPA, JSF, JAX-RS), JBoss, Swagger.

I led a group implementing a new credit granting system for private customers in 14 Danish banks. The work involved integration with internal and external data providers based on REST and SOAP protocols and a good ability of translating business requirements into working software. The work involved a large degree of communication and interaction with business consultants to ensure that the solution supported effective, low-labor, business processes.
2015-2016
Big data back-end for AIS messages, Danish Maritime Authority.
Role: Architect, programmer.
Keywords: Java EE, Cassandra, Big Data.

I implemented a message archive based on Apache Cassandra to store for 5 years ~2.500 AIS messages per second with maritime content, and make this searchable based on temporal and spatial query parameters. Datasize ~50-100 TB.
2015
AIS for flow management, Danish Maritime Authority.
Role: Architect, Analyst.
Keywords: AIS Application Specific Messages, maritime flow management, MONALISA 2.

I analyzed the need for information exchange in maritime flow management scenarios. The work came up with a detailed technical proposal for new AIS application specific messages and also included a reference implementation of an encoder and de-coder for the proposed messages.
2015
NoSQL evaluation, Undisclosed client.
Role: Architect.
Keywords: Architecture reviews, NoSQL technology evaluation

I performed system architecture reviews and recommendation of NoSQL database and real-time messaging software for the client's mission-critical systems.
2014
Anomaly detection, Danish Maritime Authority.
Role: Architect, programmer.
Keywords: Java EE, Cassandra, MapDB, KML, Google Earth, Guava, Guice, OpenLayers.

Combining domain knowledge of maritime surveillance with tech-nical skills in Java EE, databases, and applied mathematics to develop software for anomaly detection in very large data sets representing vessels in Danish territorial waters. The software assists surveillance operators in determining which vessels among thousands to pay attention to.
2013-2014
eCommerce, DT Group.
Role: Programmer.
Keywords: Java EE, IBM Websphere, JSP, Javascript, jQuery, Dojo.

To satisfy business requirements, I programmed new features in the eCommerce solutions used in the multi-million kroner webshops of Silvan, Stark, Cheapy, Beier, Neumann on both web and mobile platforms and for both B2C and B2B customers. I introduced automated builds with Jenkins and functional tests with Selenium.
2012-2013
NemID Erhverv, Nets DanID.
Role: Programmer.
Keywords: Java EE, Maven, JSP, Spring MVC and Web Flow, Oracle/MySQL, Jenkins.

I programmed essential parts of the self-service website for “NemID Business” - publicly available on http://nemid.nu. Both front-end and back-end. Programming was done in Java EE / Spring MVC / Spring Web Flow / Hibernate and JSP / Javascript with continuous builds (Jenkins) and extensive automated testing based on Cucumber.rb.
2010-2011
Credit Granting for Businesses and Privates, Jyske Bank, Bankdata.
Role: Programmer, business analyst.
Keywords: Java EE, IBM Websphere, JSF, Spring web flow, Rapid Prototyping, web services.

I analyzed business processes and performed data modeling for advanced credit management to business customers. My work resulted in Axure prototypes and job descriptions that formed the basis for developers and testers' work. The final system is used by all advisors in 14 Danish banks, including Jyske Bank and Sydbank.

As team leader for a team of 3-4 Java developers I programmed essential parts of a credit management system used by 1.000+ bank advisers of Jyske Bank. Including essential SOAP/WSDL integration points against a mainframe and led the work of implementing an advanced AJAX/Web2.0-baseret user interface. Programming was done in Java EE, Spring Web Flow, Javascript and JSF / IceFaces.
2008-2010
2011-2012
Master data management, Jyske Bank.
Role: Programmer.
Keywords: Java EE, IBM Websphere, IBM Infosphere Master Data Management (MDM), web services – SOA(P).

I programmed essential parts of a Java EE-based Master Data Management System (MDM) for use in Denmark's 3rd largest bank, Jyske Bank. The system handles all the bank's customers, their names, addresses, family relationships, relationships with other banks, etc. Programming was done in Java EE based on IBM's InfoSphere Master Data Management product.
2008
Database web-subsystem for VTS, VTS Great Belt (Denmark), VTMIS (Bulgaria), MSSS (Malaysia),
Maritime Assistance Service (Denmark).

Role: Lead software engineer.
Keywords: Java EE, Tomcat, XUL, Javascript, Linux, Postgres.

Java EE lead engineer on a web 2.0-based database for the registration of ships passing under the Great Belt Bridge in Denmark. The system records details of individual ships and their passages through the belt, combined with real-time weather data from sensors in the area and a radar system All to assist operators in risk assessment of individual passages and build up information to generate statistical reports.
2004-2007
AIS message pre-processing, GateHouse A/S, Royal Danish Administration of Navigation and Hydrography.
Role: Software engineer.
Keywords: Linux, C/C++, NMEA 0813.

I programmed a software component for a land-based radio network that exchanges maritime navigation messages on the Danish Maritime Authority’s AIS network. The component pre-processed messages to remove duplicates and invalid messages. Programmed in C++. Extensive use of sockets and multithreaded programming.
2004
Integrated navigation computer, Offshore Systems Intl./Royal Danish Navy.
Role: Lead software engineer.
Keywords: Embedded Linux, C/C++, Matlab, NMEA 0183.

Lead engineer on an embedded Linux-based system for on-board navigation of naval vessels. Implementation based on detailed al-gorithmic specifications. Inputs from several independent ship-borne sensors (civilian GPS, military GPS, gyro, INS, speed log, etc.). The system carries out pre-processing of signals, Kalman filtering, fault detection, estimates of posi-tion/velocity/acceleration which are forwarded to other onboard systems, including weapon systems.
2002-2003
RDN CCIS, Royal Danish Navy.
Role: Lead software engineer, software team leader.
Keywords: Solaris, C/C++, ILOG Views, Oracle.

Lead engineer on a nation-wide coastal radar system. Used in peacetime for land-based surveillance of Danish waters, sea rescue and coastguard tasks; in wartime to the command the Danish fleet.
1995-1996
1998-2003

Open source projects

I maintain the open source project “AISmessages” which is a Java-based and ultra-efficient message decoder for maritime navigation and safety messages compliant with ITU 1371 (NMEA armoured AIS messages). It is available on github: http://github.com/tbsalling/aismessages.

AISmessages can be tried via HTML on a separate website HTML – or as a a RESTful web service on ais.tbsalling.dk.