Kris van Tienhoven
IT Freelancer (architect, developer)
Brief
I am a freelance IT specialist who has worked on the development of a various web applications including a search engine, payment platform, experiment scheduling application and Machine Learning model building software. I prefer to be involved in the complete process from translating consumer requirements to the actual end-to-end testing of applications. However I'm most at home in the architectural design and implementation of software. I'm most familiar with Java Spring Boot applications, but I also have experience in PHP, JavaScript Vue, Python as well as various other Java EE platforms. Besides IT, my interests include philosophy and video games.
Education
Eindhoven University of Technology
MSc Computer Science and Engineering + Philosophy Certificate
2013-09 - 2016-08
Eindhoven University of Technology
BSc Technische Informatica, Minor in Philosophy
2009-09 - 2013-08
Experience
MantiSpectra
MantisCloud - Full software solution
Lead Developer
2021-03 - now
For MantiSpectra I'm actively developing all web software related to their proprietary sensor pods and backing Machine Learning models. The NIR sensor pods they develop can, with the help of the software, be used to predict characteristics of materials being scanned. This ranges from the level of alcohol in beer, the ripeness of a potato, the amount of fat in milk or whether a certain white powder is cocaine or powdered sugar. As of September 2023 the following is realized. First and foremost, an API that can be used by any customer of MantiSpectra and internally to create new ML models using sensor data as well as use those models to do predictions. In addition the API offers support to normalize scan data between different pods. In total the API features a large set of options to customize models; a total of 40 endpoints have been developed. Secondly a frontend application used to communicate with the API. Primarly intended to offer an easy to use UI for creating and managing models. Currently I'm in the progress of splitting the API into a micro-service architecture. As well as implementing model-sequences. For example this could be used to first identify the type of tomato and depending on the result send the scan data to one of several models to predict the ripeness, all with just a single scan and api call. The API is developed as a Java Spring Boot application backed with a postgres database and python scripts for the Machine Learning processes. The frontend application uses Quasar Vue as its framework.
iO The Netherlands B.V.
BAC - DigitalServices
Lead Developer
2024-03 - now
For Brussels Airport Company I was the lead backend developer for their DigitalServices platform. Running on AWS infrastructure, the Java and NodeJS applications provide business to consumer services ranging from planning your vacation to buying Food and Drink vouchers to be used on the airport. Among other things it concerns customer account and purchase management, flight data queries, automated reports for business analysis and integration with on premise systems like cash registers or fastlane gates. The AWS infrastructure is managed via terraform and we make use of gitlab and Jenkins for CI/CD.
iO The Netherlands B.V.
Atradius Collections - Login migration
Developer
2023-03 - 2023-11
For iO's project for Atradius Collections, a website and middleware to request debt collection, I was asked to ensure users could login using Azure B2C SSO. This involved ensuring that the middleware could handle the new auth tokens while maintaining the old login flow for users that were not yet migrated. The middleware now also ensures that anyone using the old login flow gets migrated to Azure B2C, by creating a user there and/or linking it to the user in the middleware's database. In addition I made it possible for users that were not in the database at all, but do exist in Azure B2C, could log in. This was done by deriving the user attributes necessary for the middleware to operate from the auth token.
iO The Netherlands B.V.
Worldline - Merchant Boarding Portal
Lead Developer
2022-10 - 2023-09
For Worldline, at iO, in a small team we developed a series of microservices which together offer functionality for managing the onboarding of new merchants. On the one hand there is the merchant-facing web application where they submit information about their company to Worldline. They can do this in the form of files and webforms collectively known as Documents. On the other hand there is the Worldline facing web application where they can see what a merchant submits and request extra information when needed. These web applications are each backed with their own API. Those APIs in turn delegate to and aggregate the work of five more services. First and foremost there is the service Document Management Service, storing the files and form data. Second there is a service that manages the type of Documents that Worldline can request; the Document Type Service. Then, the Document Signature Service keeps track of signature requests for specific Documents using DocuSign for actual signing. The fourth service is the Auth Service, storing the users of both webapplications and keeping track of their permissions. Finally there is a service to handle transforming form data into docx files. The services run together in an ECS cluster on AWS backed with Fargate. I was involved in pretty much everything but only developed on the Java Spring Boot APIs and services as well as a NodeJS lambda. In addition I set up a lot of the AWS services.
iO The Netherlands B.V.
Worldline - Connect
Lead Developer
2021-09 - 2023-04
After doing other projects for 2 years I came back to the Worldline Connect project, still in part being developed by iO (see below for my earlier experience). While I was away Ingenico got bought by Worldline, the composition of the various teams changed a lot and of course new development was done. Despite all that the project still felt familiar and the goal of Connect was still the same; to be a Payment Service Provider solution for as wide a market as possible. Coming back I took a Lead Developer role within the iO team. I did development and operational tasks for the project and helped junior developers do so. I was involved with integrating new payment engines TechProcess, focussed on the Indian marked, and WOPA, focussed on the Latin American market. Aside from that I worked on upgrading some of the numerous application to Spring Boot 2, revamping the release and CI/CD process and splitting off a large chunk of functionality to a new application. The main challenge of the project remains its scale. It is a gigantic code base, used for millions of payments every hour and not just the total number of developers working on Connect but also the Worldline organization is very large. This leads to meticulous and constrained development.
Wolfpack
Avans - RemoteLabs
Lead Developer
2022-03 - 2022-06
At Wolfpack I developed various extensions and optimalizations to ensure that the previously developed (also by me, see below) RemoteLabs applications could be used by Avans. This included supporting scheduled experiments to take the form of a remote desktop session. As well as ensuring the applications could be deployed to multiple servers each with a completely different network architecture (TU/e & Avans).
ISAAC Software Solutions B.V.
WTCB (Buildwise) - Azure Middleware
Lead Developer
2021-02 - 2021-12
For WTCB I helped develop a set of RESTful Java APIs running in Microsoft Azure to be used in websites. The APIs are dedicated to searching through events and subscribing to them, searching through and downloading files, sending emails and creating short urls for popular pages on their website. The APIs were deployed as Azure Function Apps, secured with Azure AD SSO and made heavy use of external systems. Events were retrieved and updated using the Microsoft Dynamics API. The metadata records of files were periodically cached in ElasticSearch when extracted from a propriatary datasource using the OAI 2.0 protocol
Wolfpack
Rezulto - LogoDigitaal
Developer
2020-09 - 2020-12
At Wolfpack I worked on the backend of a platform called LogoDigitaal built for Rezulto. The platform hosts various games for primary school pupils intended to teach words and word relations. The platform can be used by teachers to gain insight into the pupils' performance and tweak the games and word groups assigned to the children. LogoDigitaal is also used by admins to add new words or change their characteristics. The backend is built in the PHP Yii2 framework and is integrated with Basispoort for authentication.
Wolfpack
TU/e - RemoteLabs
Lead Developer
2019-10 - 2020-11
At Wolfpack I developed RemoteLabs, an online platform for educational institutions that makes it possible for students to run experiments on setups in physical labs from home. Students are able to login to a web application and work in teams on whatever setups teachers have given them access to. RemoteLabs en ables them to upload models and controllers for the physical setups and execute them either automatically via a queuing system or reserve a specific timeslot to have live interaction with the setup. Live interaction in RemoteLabs allows students to change parameters on the fly and get live information on what the se tup is doing via graphed signal values and camera's. When the experiments are finished, the students can download result files to further analyse. Some of the setups that students run experiments on include a flexable axle motor, a modular water tank system and a photovoltaic battery. RemoteLabs is built in Java Spring Boot and Javascript Vue. Communication between various components is achieved via REST api's, Artemis MQ and socket.io. The system is integrated with an external OIDC provider and has a PostgreSQL database. I was reponsible for finalizing the architectural design, setting up the CI/CD with GitLab & Maven, coachi ng junior developers as well as doing a large chunk of the implementation.
ISAAC Software Solutions B.V.
BNP Paribas - PSD2
Developer
2019-06 - 2019-09
I was hired by ISAAC to help develop a series of APIs for BNP Paribas UK to comply with PSD2 legislation. The main 'AISP' API follows OpenBanking specifications and makes it possible for registered third parties to retrieve account and transaction information of BNP customers after they have acquired those customer's consent. There is a supporting 'Registration' API for third parties to manage their registration. This API also follows OpenBanking specifications. Third there is an internal 'Consent' API that is used by other BNP systems to inspect and manage consents given by consumers. Finally there is an extension of Red Hat SSO that integrates with the Consent API to allow consumers to authorize access to their information by third parties. The APIs are written in Java and deployed on JBoss EAP running on windows servers. A MSSQL database was used.
ISAAC E-commerce Solutions B.V.
Passionned - Dynamic Scraper
Lead Developer
2019-04 - 2019-05
ISAAC hired me to help out with the development of a webscraper application developed for Passionned. The application makes it possible to analyze large websites with the purpose of comparing them on certain business qualities. For example comparing the websites of Microsoft and IBM on Business Intelligence. The scraper application exposed an interface to Passionned employees so they can easily create and run scrapes as well as make graphs and reports with the scraped data. My responsibilities in the project included develoment and testing of the visualization and report parts of the application as well as helping junior developers. The code was written in PHP in the Symfony framework. A MariaDB database was used.
ISAAC E-commerce Solutions B.V.
CM - Hosted Payment Pages
Lead Developer
2019-03 - 2019-03
I got the following assingment from ISAAC: set up a hosted payment pages platform that integrates two existing payment engines with a variety of payment methods within one month. The backend of the application can be seen as two parts; 1) a simple API for a frontend to use that services the various steps a consumer takes in an online checkout. As well as 2) an API for merchants to start the checkout and retrieve its status explicitely or through callbacks. I served as the lead backend (PHP) developer and tester and worked with 1 frontend developer and 1 architect from ISAAC. The application was developed for CM Payments and involved very close collaboration in ironing out the specifications within this short period of time and while development was already ongoing. The PHP Lumen framework was used and deployed on Docker images with the help of Docksal. PHP CodeSniffer and PHPStan were used for code quality. A MySQL database and a CockroachDB was used. The project was a succes.
ISAAC E-commerce Solutions B.V.
IGM - SalesManager
Developer
2018-10 - 2019-02
Working in a small team of ISAAC employees we developed an in-store SalesManager application for IGM. This application makes it possible for IGM personel to search through their millions of supplier articles and sales articles and make quotes, orders and invoices based on them. The application was integrated with various existing systems of IGM. Together with one other developer I established technical specifications, developed and tested the backend of this application. The code was written in PHP using the Symfony framework. For local testing we used Docker images with the help of Docksal. We used PHP CodeSniffer and PHPStan for code quality. A MariaDB database was used.
ISAAC E-commerce Solutions B.V.
Eindhoven Airport - ESB
Lead Developer
2018-09 - 2018-09
I was hired by ISAAC to develop a 'v2' of an ESB for Eindhoven Airport. It involved extending the existing message APIs and adding a third party friendly API overtop. To achieve the desired functionality it was also necessary to write some extensions of the application server code. I developed and tested the extensions and validated and corrected technical specifications. The code was written in Java and deployed on Red Hat Fuse servers.
ISAAC E-commerce Solutions B.V.
Ingenico (Worldline) - Post Purchase Engagement
Lead Developer
2018-06 - 2018-08
ISAAC hired me to be the backend developer on a small project that required some new functionality to be integrated in an existing payment platform. The new code makes it possible to engage customers who have just bought something in a game of chance or new purchase. To this end the existing web pages that guide the consumer through a payment should be extended to include a clickable image that will take the consumer to a third party. It will be possible for merchants integrating with the payment platform to determine which third parties they want to do business with. Such a third party will be able to request refunds or start new purchases on their behalf. Technically this project involved the creation of two new Java Spring Boot applications that communicate in various ways with the existing applications of the platform. I also did the testing, some of the architectural design and the complete integration with the payment platform in terms of CI/CD.
ISAAC Software Solutions B.V.
Ingenico (Worldline) - Connect
Developer
2016-11 - 2018-04
With ISAAC I helped continuous development of the Connect@Ingenico project. Connect encompasses a RESTful payment API uniting multiple payment engines as well as numerous SDKs and front end applications. These applications include Hosted Payment Pages and a Configuration Center for merchants using the API. I did the majority of the implementation of various new payment methods like PayPal Express Checkout and Bancontact. In addition I set up the framework for mocking external components’ responses to improve regression testing. I also implemented and partially designed a few new API endpoints. For example an endpoint for the creation, updates and retrieval of SEPA Direct Debit mandates. In the final months I was also partly responsible for (improving) the continuous delivery process. Lastly I did my fair share of bug fixing across the entire Connect platform. With the exception of a few Python scripts all implementation was done in Java EE. Writing and running both unit tests and integration tests was an integral part of the development process. Connect makes extensive use of technologies like EJB and MOXy and was deployed on Weblogic servers. Development was done according to Kanban and later SCRUM methodology. We used GIT to achieve coding concurrently on different features and Jenkins for continuous integration. WORKS B.V. served as an intermediary party for this contract.
Wolfpack
Penetration Tester
Penetration Tester
2017-08 - 2017-10
WORKS B.V. hired me to help with the penetration testing of a mobile app and its backend for a third-party. The assessment involved testing all relevant items in the OWASP testing checklist as well as source code review and creative testing. The results of the assessment are confidential. Testing tools in Kali Linux were used.
Localize
Forinhabit/Localize
Partner and Technical Architect
2014-03 - 2016-06
I was brought on to forinhabit by two former classmates who wanted to sell a service to search for homes chiefly based on the environmental preferences of the user. For example, the user would query the search engine with the following demands: an environment with lots of green and a primary school and grocery store within 500 meters. The results would be homes for sale, that best fit the criteria, sorted by how well they do so. From scratch, I designed and implemented a search engine capable of doing so. I also looked for, and transformed data sources to be used by the search engine. Implementation was done in Java and the application was deployed on a Glassfish server. In the last year and a half of this project I also managed the business side of the company, because the original founders of the company had left to pursue other dreams. I also rebranded the company to Localize and brought on a fellow developer to build a frontend. During this period I talked to various people in an attempt to find a venue for selling the service. I talked to various real estate agents, municipality officials as well as others involved in related startups. When I graduated I intended to continue the company and do some side projects as a freelancer. However, due to a lack of progression business wise I decided to shift my focus to the freelance work instead. I do still own the company name and the code if I ever change my mind.
Euflex B.V.
Student employee
Student employee
2010-09 - 2011-08
During part of my study I worked for a university funded R&D project in robotics. I was involved in improving the software simulation of Amigo, a service robot intended to help sick or otherwise less-abled people. I reprogrammed various components involved in the simulation of movement of the robot to fit an architectural style. I also did 3D model optimisation of Amigo to improve performance of the simulation. Programming was done in c++ and MeshLab was used for model editing.
Projects
Gamification for OpenML
The objective of my graduation project was to entice visitors of the website openml.org to share more datasets and algorithms as well as increase the user retention rate using gamification. OpenML is a platform where researchers in the field of Machine Learning can share their datasets, objectives and algorithms. I researched the topics of Gamification and Collaborative Science to come up with mechanics that measure a user’s activity, reach and impact on the website. I then built the metrics into the website and introduced leaderboards and badges for these metrics to urge users to gain higher scores. Implementation was done in PHP and JavaScript. One of the main challenges was finding a way not to alienate users by introducing something deemed too juvenile while still triggering their sense of ‘play’. Another challenge was coming up with metrics that were clear and easy to understand, representative of a user’s actions and tempting to chase.
Development of a log-analysis program
The objective of this project was to build (a start of) an application to analyse very large log files coming from industrial printers, knowing that it would be impossible to satisfy all user requirements in the given timeframe. To this end the team was required to work using the SCRUM methodology and to focus on identifying and implementing the most important pieces of functionality.
itienhoven.nl
My self hosted server serves not only as a place to display my CV but also as a, mostly temporary, staging ground for various for demo's and POCs for clients. In addition it features a full fledged back-office application to manage my CV as well as a privately accessable password manager. Both developed by me and individually secured.