Preface
I started writing code around 2003 during my time in commercial school as a hobby developing small PHP scripts and gained additional knowledge in usage of MySQL databases. During the following 4 years I also got into server and network administration while setting up my home network with a floppy disk Linux distribution. At that time my interest in setting up and managing my own network grew rapidly and I got my first experiences in virtualization from a computer magazine called “c’t” that offered a Xen based Debian distribution. From this time on I was running and managing my own infrastructure. This was still basic with no enterprise network features. That changed during my time in university where I learned additional languages like C, C++ and Java. I was also introduced to network security, deeper knowledge of Linux and frameworks like JavaEE. More and more features and services were added to my network. For example a self managed DHCP server, a professional firewall (pfSense), a PXE boot server, web and application servers and storage. When this became more and more difficult to maintain because of distributed credentials and configurations I set up a Samba4 active directory and gained knowledge in central user and group management, connecting applications to services via standardized protocols (like LDAP, SSH, FTP and others). This improved further more my understanding ind application development in terms of separation of application and application data (runtime data).
Currently I am managing physical, virtual and cloud servers manually or automated via API from different providers. I implement trigger based application building, testing, packaging, deployment, installation and configuration based on requirements. This includes software, documentation and management projects which are build using different tool chains (gcc, csc, javac, mkdocs, python and others). This includes the plain distribution via network protocols, packaging with setup frameworks and archives the same as local and remote testing with unit frameworks and testing projects for integration tests.
Development
Programing languages
- Java (1.8 – now) and JNI
- Spring Boot and Java EE web applications and services
- Native Swing desktop applications
- Gradle, Maven and Ant build systems combined with Maven dependency management
- Jasper Report design and implementation (including unit tests)
- Build pipelines including unit testing, packaging and deployment.
- C# (.NET core preferred)
- .NET 5 desktop applications
- ASP.NET webservices
- Windows Services
- C/C++ (gcc, msvc)
- Windows services and background jobs
- Smaller examples with the ESP32 micro controller framework
- Socket network communication
- Make build system
- JavaScript
- Single page applications with plain JavaScript.
- Basic understanding of React, Angular and Vue.js
- Kotlin
- Entry level knowledge
Frameworks
- SpringBoot
- REST- and SOAP webservices
- Spring Data JPA
- JGit integration
- JavaEE
- REST- and SOAP webservices
- Vaadin
- Java based web frontend for user management
- Java Swing
- Implementation of a product configuratior with import and export functionality, ERP interfaces and document generator.
- Planing and visualization tools.
- ESP32-IDF (Micro controller programming in C)
- PWM fan and LED control.
- React and JavaScript in general.
- Single Page applications
- Asynchronous communication for improved user experience.
Scripting
- PowerShell
- Software installation and uninstallation scripts
- API handling (DNS, VM)
- Build process automation
- Application configuration (Conditional search and replace in configuration files)
- PowerShell remoting
- Windows PE integration
- Bash and other *nix shells
- API Handling
- Installation and configuration scripts for Linux
- Remote execution
- Legacy Windows “cmd”
- I’d rather not use that anymore …
Styling and UI
- HTML5 and CSS
- Plain HTML5 and CSS design
- Basic understanding of responsive layouts
- Scalable vector graphics
- Work with automatically generated SVGs for data presentation
- Work with scalable QR codes and barcodes.
- React and Vaadin
- Dynamically loaded frontends connected to a Java Spring Boot backend and MySQL/MariaDB database.
DevOps
Tools, Frameworks
- Azure DevOps (On premise and self hosted)
- Setup and maintenance of build pipelines
- Maintenance of backend: Clearing deprecated builds via API and shrinking database.
- Jenkins (Self hosted)
- Usage of Builds and pipelines
- Managing dependent builds
- Exporting artifacts
- Building Java and C/C++ projects on Windows and Linux hosts
- GitLab (On premise and self hosted)
- Maintenance of deployment pipelines including VM provisioning, DNS administration, software installation and remote configuration.
- Creating build pipelines for software projects (Java and Frameworks, .NET, PHP) with different build tools. Gradle preferred.
Techniques
- Default tasks: build, test, packaging, deployment
- Building with build tools like Gradle, Maven, Ant, Sln/Csproj, Make
- Testing with JUnit and Nunit tests.
- Packaging: Jar archives, NSIS setups, Direct remote deployment, Binaries integrated into Bash scripts.
- Artifact generation
- Versioned jar files
- NuGet packages
- Deployment
- Passwordless remote deployment and execution via SSH from and to Windows and Linux
- Remote execution of installers
- Windows OOBE mode for pre installation of software
- DISM wim management and integration
- WinPE deployment environments
- PXE booting and automation
- Archiving and lifecycle management with NuGet feeds and Maven repositories
- basically everything that can be done on command line
Version control systems
- Git: Usage with common providers and utilization for all kinds of projects and own applications.
- Subversion (Setup with “Apache” web server and usage)
Administration
Virtualization
- Linux KVM (Low cost virtualization)
- Debian based host
- Debian, Ubuntu and Arch Linux based VMs
- VMWare ESXi (Enterprise grade virtualization)
- Snapshot management
- Setup and network configuration
- License management
- Oracle VirtualBox (Desktop virtualization for testing and development)
- Snapshot based testing in Desktop environment which allows fast restoring and testing from a plain state.
- Virtualized networks for testing of network application and remote applications (like backup and restore tools)
Packaging and deployment
- Docker
- Basic understanding of functionality
- Deployment of containers and configuration of applications
- Infrastructure configuration (Network, storage, etc.)
- NSIS setups
- Windows based installation and configuration routine.
- Bash-Scripting with embedded resources
- Configurator in .NET 5 in combination with NSIS
- Binary embedding in C applications
Operating systems
- Windows server and client (Legacy pre Windows 10/Server 2016 and current)
- Linux server (Debian and derivatives, Arch Linux) and client
- BSD with specialized distributions like pfSense
Technologies
- SystemD (Linux) and Windows services (C# and C)
- Automated restart at system boot
- Resource and user configuration
- Dependency configuration
- Samba4 – “Active Directory” alternative
- Free open source LDAP and enterprise administration server
- Combined with Bind9 DNS server
- Implemented for single sign on
- Works as authentication source for web- and local applications
- Certificate management
- DNS management
- User and computer management
- self compiled and administrated
- Cron and cron like syntax for scheduled jobs in SpringBoot and on native Linux machines
- OpenSSL PKI, signing and usage for encryption
- Certificate management and best practices
- Let’s Encrypt (per domain and wildcard with automatic refresh and self written hooks)
Networking
- OpenVPN Administration with PKI
- Monitoring with Zabbix for Windows and Linux machines
- Server and client installation and administration
- IPv4 and IPv6 networks with pfSense
- Active Directory with Samba4, ISC bind9 and ntp
- Implemenation of fail2ban to prevent ssh brute force attacks.
Offtopic
I don’t know where to put these points, that’s why they are under “Offtopic”.
- Application support (Mostly desktop applications of all kind)
- Elaboration of best practices (e.g. Format templates in documents, style guidelines, naming schemas)
- Windows preconfiguration with dism
- Linux automation with preseed (Debian) and CloudInit (Ubuntu)