About
Hello, my name is Espen Harlinn.
When CodeProject.com was shut down, I decided that my ramblings about software development needed a new home, and this is it.
Experience:
Chief Architect, Sea Surveillance AS, July 2021 - December 2024
Developed a Vessel Traffic Management Solution (VTMS) solution in C# called iSurv.
The core of the solution is a Windows service developed in C# for .Net 8, with a service API implemented using Net MQ. The service uses a Microsoft SQL Server database with 355 tables to store its data.
The service receives AIS data over UDP, controls radars and receives radar video using a proprietary TCP based protocol, and controls PTZ cameras using the ONVIF web services implemented by networked cameras.
The user interface was developed as a Windows Forms app in .Net 8, using custom controls provided by DevExpress.
The service implements a message notification service based on Net MQ that eliminates the need for periodic polling for data by the user interface, as all changes are published over Net MQ to subscribing apps, including radar video.
The user interface receives and renders camera video over the real-time Streaming Protocol (RTSP) using an embedded VLC media player.
Map information can be provided by Bing Maps, OpenStreetMap, or as tiles directly from the service app.
There is also a Windows service that provides map information using C-MAP that can be configured as a tile source for the solution.
The solution uses GeographicLib to accurately translate latitude, longitude and altitude into cartesian 3D coordinates required to calculate the pan, tilt and zoom values used to control the camera when tracking a vessel at sea. The ONVIF API provides an API function that performs this operation, but unfortunately this feature is seldom implemented by the cameras.
Senior Software Architect, Ulriken Consulting AS, December 2020 - July 2021
Consultant for Sea Surveillance AS.
Chief Architect, Powel, October 2014 - 2020
Mesh
Mesh is an analytics and data management solution, optimized for timeseries operations, that provides context to data and is the foundation for the Volue Smart Power solutions.
I worked as the technical lead on the Mesh development project, which lasted throughout my time with Powel ASA, now a part of Volue ASA.
The core of the Mesh solution was developed in C++, including:
- The analytics engine, a high performance timeseries analytics engine that executes complex queries against thousands of timeseries, using a proprietary query language.
- The local timeseries storage, a high performance timeseries database engine, written on top of Microsofts’ extensible storage engine. The local timeseries storage was implemented using the Harlinn.Common.Core library.
- The Oracle data exchange, for synchronizing the local timeseries storage with data stored in an Oracle database. The Oracle data exchange was implemented using the Harlinn.OCI library.
- The Mesh messaging service, a messaging API for Mesh implemented using Zero MQ, able to handle both binary and XML formatted messages. This was the only API that fully exposing the capabilities of Mesh.
The Mesh core services are tightly integrated with .Net, which hosts the core services, providing .Net service APIs to the Mesh solution, implemented in C#.
The Mesh solution also includes a C# client library for working with the Mesh messaging service using the binary message format, providing the fastest data exchange mechanisms between Mesh .Net clients and the Mesh service.
Mesh Explorer
Mesh Explorer is a WinForms application developed in C# using components from DevExpress developed as a tool for the Mesh development team.
Mesh Explorer is used to explore the structure of a Mesh database, allowing users to view and edit all aspects of a Mesh database.
Nimbus
Nimbus is the user interface for Powels’ production planning processes, implemented in C# as a WPF application.
It is used to view, analyze and edit data and to execute optimizations and simulations of power plants.
Integration between Nimbus and Mesh, was an integral part of the Mesh development project.
Nimbus consumes many of the .Net service APIs exposed by Mesh, and several of the .Net based service APIs were initially designed specifically for Nimbus.
Inflow
Inflow is used to forecast inflow to reservoirs and power plants. With Inflow, operators can control their water resources, and plan their power production more accurately.
Increasing the performance of Inflow was one of the prime motivations for the Mesh development project.
Inflow was developed using C++ and initially worked directly with the Oracle RDBMS.
The Mesh solution includes a C++ client library for working with the Mesh messaging service using the binary message format, providing the fastest data exchange mechanisms between Mesh clients and the Mesh service. This library and the Mesh messaging service was initially developed to improve the performance of the communication between Inflow and Mesh.
DeltaXE
DeltaXE is a trade and logistics solution for the European power and gas markets that serves as a real-time position management solution capturing all trades and positions across all markets.
DeltaXE is a WebLogic Jakarta EE service application.
I was, initially, engaged to troubleshoot multithread issues inside the server, review the design of the solution, and plan a path for integration with Powels Smart Energy software portfolio. Working with the DeltaXE team in Basel, Switzerland, was enjoyable, and always interesting.
Valider
Valider chose Powel for the development of Norways largest smart metering platform.
The core of the AMS service developed for Valider was developed as a set of Jakarta EE services running on WebLogic. The solution was initially developed by an external partner, while the last stages of the development was performed by a team of Powel developers located in Gdansk. I was brought into the project to help identify and resolve performance issues - working closely with the developers in Gdansk, helping to optimize the Oracle RDBMS throughput.
Sales support and customer integration
As one of the Chief Architects, my role included presenting the technical architecture of the Smart Energy Software portfolio at sales meetings, and working out the deployment details in cooperation with the customers.
Deployment and integration with a large customer, is always a process, and as the provider of a complex suite of software that must be integrated with the customers existing ecosystem, Powel always provided the adaptions, as needed, to facilitate this integration. This process usually involved all the teams responsible for the various components going into the final solution, working in collaboration with each other and the customer.
Other roles
- C++ Expert, ISO C++ Standards Committee, February 2012 - present
- Owner, Harlinn.com, September 2010 - present
- Principal Architect, Goodtech, Feb 2012 - Oct 2014
- Senior Architect, Goodtech, Jan 2011 - Feb 2012
- Senior Software Architect, Elan IT, May 2009 - September 2010
- Chief Engineer, Optimum Production, January 2008 - April 2009
- Senior Software Architect, ProControl, January 2001 - December 2007
- Senior Software Architect, Seamos, August 1996 - December 2000
- Consultant, Freelance consultant, June 1992 - June 1996
I worked on the Optimum Software portfolio from the late 90’s until the operations of Optimum Production AS was shut down by its new owners in 2009. The Optimum Software portfolio was used to optimize the production for the Ekofisk oilfield.
The Optimum Software portfolio was initially developed as a Java EE server, and was moved to the .Net platform in 2003.
The Optimum Software portfolio was based on Weatherford’s WellFlo and ReO simulation and optimization software.
At the time, ReO and WellFlo were standalone software packages, requiring manual modelling and data entry.
The Optimum Software portfolio retrieved real-time production data, well-test data and optimization goals from an Oracle database at ConocoPhillips. The data was then automatically fed into ReO and WellFlo, before performing a network flow analysis to select a good starting point for the ReO optimization process.
After ReO completed it’s optimization process, the software calculated the optimal valve settings, writing the new settings back into the Oracle database at ConocoPhillips, enabling automatic adjustment of the valves’ settings.
The Optimum Software portfolio included a Windows service, handling:
- Retrieval of data from oracle.
- Starting and initializing the ReO and WellFlo software.
- Performing the initial network flow analysis.
- Running the optimizations.
- Calculating the valve settings.
- Storing the results in the Oracle database.
- Exposing a data service API, for access to all relevant data.
In, addition, there was a user interface developed as a Windows Forms application in C#, and a simpler web app, providing read-only access to the visualizations and optimization results.
Awards:
- CodeProject MVP 2021
- CodeProject MVP 2013
- CodeProject MVP 2012
Education
- Mathementics, University of Bergen, 1992 - 1993
- B.Sc. Electronics and communications engineering, NKI Ingeniørhøyskolen, 1989 - 1992