Senior Backend Developer who has worked with Java for 20 years, primarily on Linux-like platforms, and with C# for 3. Continuous Integration for 12 years expanding into Docker for the last 5 years, and Continuous Deployment and cloud technologies for the last 2. Located in Central Copenhagen, Denmark.
|Cell phone||+45 60 62 03 45|
|StackOverflow (Java gold badge)||https://stackoverflow.com/users/53897/|
Java developer in the DevOps office focusing on test, debugabillity and other automation for our Jenkins CI/CD pipeline.
Project employment i two phases, first converting an existing end-user Visual Basic application talking to MS SQL to a REST-based web solution, and second completely replacing application and operating system on existing customer devices with a Qt5 application running on Alpine Linux. I was responsible for the C# backend and the Linux installer in the two phases.
Senior Java Developer
Working as developer and devops on internally faced applications being migrated to in-house Kubernetes clusters (OpenShift/Rancher)
Wrote new microservices in Java using Spring Boot interfacing legacy applications not designed for cloud usage, including Docker image research and support.
Developed build+deploy pipelines for Jenkins on Kubernetes for “automatically build and deploy commits on new branches based on Jira issues”. First for OpenShift, then for Rancher + ArgoCD.
Migrated traditional .NET application to being built and deployed automatically, including selecting and extending Docker base images for in-house use.
Mentoring younger developers in tools and programming practices through e.g. code review in BitBucket.
Leveraged eBPF for out-of-process troubleshooting for Linux deployments.
Learned Python and C# for development and devops work.
Maintain existing legacy applications in C# deployed with Bamboo.
Migrate existing devops pipelines to Github Actions.
Extensive documentation using Markdown in GitHub/Bitbucket.
Senior Java Developer
Worked with various aspect of digital preservation. Most work was done as Open Source.
Ingest workflow archiving the daily Danish newspaper in our in-house preservation system. Emphasis has been on using Streams to make processing simpler, and dependency injection of configuration key-value strings using Dagger 2 https://github.com/statsbiblioteket/digital-pligtaflevering-aviser-tools
Reimplemented existing protection mechanism written in Clojure in Perl 5 as a maintainable high performance Apache FastCGI access checker protecting individual assets. https://github.com/statsbiblioteket/newspaper-fastcgi-ticket-checker
As a side project, designed and created a library to alleviate the lack of local variables in Java 8 Streams. https://github.com/statsbiblioteket/streamtuples
Assembled newspaper edition PDF’s from individual JPEG2000 images using Java and XSLT.
Converted existing legacy ant-based Java subversion repository to IDE-agnostic Maven project tree in git located on Github with jUnit 4 tests and upgraded to Java 8. https://github.com/netarchivesuite/netarchivesuite
Part of Architect group where we looked at creating a git friendly CI/ CD environment where multiple branches could be integration tested in a controlled environment. Initial work was done with OpenShift.
Researched and presented “What’s new in Java 8” internally. Slides at https://github.com/ravn/java8-presentation/raw/master/java-8-at-SB-2016-02-26.pdf
Updated existing projects to build and work with Java 9+ and jUnit 5.
Workplace is a Linux shop developing in-house Java applications with every developer choosing his/her own flavor. I used Ubuntu from 14.04 up to now 18.04 LTS as my daily work environment with initially Eclipse and then IntelliJ Ultimate. We use VirtualBox, Vagrant and Docker to handle extra instances as needed.
Senior Java Developer in an agile Cobol shop.
The core product is a COBOL-based Transport Management System running on the IBM i (previously AS/400) platform. I did not write COBOL.
Researched and wrote components in Java for those tasks not easily done in COBOL, like handling XML, image transformations and network transportation of data using a variety of protocols.
Co-designed and implemented a central API allowing the usage of Java applications as COBOL-components. As these usually run unattended they need to be very robust and produce high quality logs for offline debugging.
Implemented XSD schema checker filter to ensure the validity of outgoing XML.
Converted our complete Java source base to Maven to emulate our COBOL workflow, facilitate Continuous Integration and become independent of Eclipse. Latest work was on Continuous Delivery and artifact traceability.
Introduced Test Driven Development to document and clarify functionality of own code and third party jars.
Wrote a Java EE 6 Web Profile web application for warehouse access for the customers of our customers customers.
Converted our legacy CVS repository to several small git repositories while maintaining history.
Introduced JUnit 4 based integration tests.
Introduced JSR-223 scripting to allow extending behaviour in production without having to do a full redeploy of the component.
Used Groovy to get class annotations for runtime defined JAX-WS based web services.
Researched and implemented JSR-330 Dependency Injection to emulate IBM i “library lists” at runtime. Used Guice, Weld and Dagger as engines.
Used the Cajo remote procedure call platform to launch on remote server, but debug in local IDE.
Java Developer 2003 - 2004 (2 years)
Electronic Health Record system provider.
Organ Exchange database organization for Scandinavia.
Product catalogs in print, CD-ROM and on the web.
Worked on online catalog JSP site backed by Oracle 8i.
Automated an SGML to Oracle data publication workflow by using XML-data and the latest XSLT-tools, and optimized bulk data loading with SQLLDR, JDBC and Perl DBI.
Freelance consultant in Perl, XML, XSLT, FreeBSD, Linux and Java.
Unix system administrator at IMADA, MIP, Amrose and CPA at Odense University.
Syddansk Universitet / University of Southern Denmark Master’s degree, Computer Science · (1987 - 2000)