Paavo Karppinen

Ambitious Software Developer

Picture of myself

University of Jyväskylä, 2018-2024
Bachelor and Master of Science
Grade: 4/5
Major: Mathematical Information Technology (Computer Science)
Specialisation: Specialisation in Software and Telecommunication Technology
Minor: Basics of Human Resource Management
Master's Thesis: Project management of software development projects during the COVID-19 pandemic, grade: 4/5

I am a Master of Science in Computer Science from University of Jyväskylä. I would describe myself as an analytical person, I like try to figure out how different systems are built from the information that is just plainly available to me. I like solving problems and I would argue that I'm very good at it. On two uni courses, Continuous Software Engineering and Software Project, it has dawned on me how much I know when comparing to my fellow students. I've also been complimented on my intelligence/knowledge on these courses, especially the latter one.

I have strong programming skills via multiple courses and I also possess a C# certificate by the name of "Foundational C# with Microsoft". The certificate is by freeCodeCamp in collaboration with Microsoft. I also have experience with project work from courses Team & Client and Software Project. The former was a course where I was part of a five-member student team to design an event geared towards tertiary education students. On this project I was on a leadership role with a second member and at the end of the project, my work was praised. The second project was a project where I was the project manager as part of, again, a five-member student team, but this project was a software development one. At the end of the project, the instructor from the university's side praised my leadership. My master's thesis topic was software development project management during COVID-19 pandemic, and for the thesis, I needed to research project management methods used in software engineering. From this research I have a solid knowledge of agile methods and more specifically Scrum. I completed my military service as a leader, and my evaluation in the end was very good.

My interest is first and foremost software development but I do want to work in managerial positions in the future. I am also interested in Machine Learning, and I've started to deepen my knowledge on creating machine learning models.

Skills

Programming languages
  • C#
  • JavaScript
  • TypeScript
  • Python
  • Java
Frameworks
  • (ASP).NET
  • Express
  • NodeJS
  • Blazor
  • React
  • React Native
  • Next.js
Databases
  • SQL
  • SQL Server
  • MongoDB
  • Azure Cosmos DB for NoSQL
Project management
  • Leadership
  • Agile
  • Scrum
  • Kanban
  • ScrumBan
  • Jira
Embedded systems
  • Arduino
  • CircuitPython

Web development

I started my React journey with the open Full Stack course from University of Helsinki. I did the mandatory 1-5 parts and don top of those, I did parts 8-10, so TypeScript is a skill of mine. React Redux (Full Stack course part 6) has become familiar to me via my own apps. I've also utilised a UI library in Material UI. Using React is familiar to me, and I'm capable of making beautiful user interfaces. Next.js is my most recent escapade with React. Although, I've only done the Vercel Next.js tutorial. Based on the tutorial, understanding Next.js is of no issue to me, it reminds me a lot of Blazor Server as they both have a similar base idea. Blazor is the newest technology of mine and I've become familiar with it via different YouTube tutorials. I have my own projects as well through which I've learned the use of Blazor. With Blazor, I've used Fluent UI, a component library by Microsoft. Combining Blazor and Fluent UI, I've learned to make great and responsive user interfaces.

CI/CD

In regards to Continuous Integration/Continuous Development, I've completed the course "Continuous Software Engineering" course at University of Jyväskylä, which was also called the DevOps-couse by the course's teachers. On the course we utilised Azure and GitLab to deploy a web application to a container on Azure. On my own applications I've used GitHub Actions to deployt apps to Azure. On the Continous Software Engineering -course it became clear to me what is included in CI/CD in terms of development and the operational side of it.

Embedded systems

I've learned about embedded systems on a few courses from Kokkola university center. The courses from them I've completed are subject-level course "Introduction to embedded systems" and two advanced-level courses "Telecommunications of IoT-devices" and "Embedded internet" (rough translation from Finnish "Sulautettu internet"). All these courses I completed with a grade of at least 4 (on a scale of 1-5, 5 being the best grade). On two of these courses, Arduino was used and on the last mentioned course, I used a real Arduino unit with WiFi and different sensors. On this course also, we learned how to send data from the device to a cloud service (asksensors). On my own, I have looked into CircuitPython. While I haven't created anythin useful yet, I possess the capabilities to develop embedded software using that and by extension Python.

Project management

In terms of project management, I was the project manager in Unversity of Jyväskylä's Software Project -course. I've also completed the course "Project management". The supervisor on Software Project -course complimented my actions as project manager saying how I was always on top of what the team was doing. I used Jira on this project to manage the teams tasks.

Projects

I have some proper web application projects that I've done. One is a React frontend application with .NET backend and MongoDB as its database, the second is a full-on Blazor applications with SQL Server as its database. The third application is also a Blazor application. This third app is meant for users to save data from their IoT devices/sensors and to visualise it. Fourth application I've worked on is a social media app created with .NET Web API and React.

Apex Legends project
The first React-based application is meant for users to save their personal statistics from the videogame Apex Legends. It uses a .NET backend that is a ReST interface. User authentication is done with JWT. The app utilises Refresh Tokens to better secure the application with shorter Tokens and as long as the user visits the website when they left it logged in within a week, a new Token is generated. After a week, user is signed out upon visiting the website. The Profile page in this application has password change form and it shows aggregate data about the stats they've saved. I am using MongoDB as the app's database. For styling I am using Material UI. You can access this app on Azure. Note that you need to register as a user before you can use the application.
Another application I've started working on as a hobby project is a social media app (like Bluesky and such). I chose to go with a .NET Web API for the backend and React for the frontend. For the authentication I went with token-based authentication with JWT bearer tokens. I wanted to replicate the Microsoft Identity providers for .NET, so I created my own version of their RoleManager, SignInManager, and UserManager (sort of). As for the frontend. I didn't want to rely on any ready-build component library like Fluent UI or Material UI, so I went with pure HTML and CSS. I wanted to use a NoSQL database for this application, and as Azure Cosmos DB for NoSQL had come to my mind earlier in 2024, and later I got some theoretical knowledge of it, I wanted to utilise it in practice. I very much embraced the strengths of the database (in my opinion) as I utilise Patch operations for updating existing data, and its unique SQL-like queries. I also use a local installation for Azure Blob Storage (Azurite) for saving and displaying images. The app still has some work around it, but it really showcases that I am capable of creating Full Stack applications from scratch, and it shows how far I've come since I first started web application development.
The first Blazor application's original meaning was for users to save information about the movies they've watched in a certain year. I improved the application at a later data to save wached TV series information. I also added a chat to chat with an AI model about films, or get recommendations based on the films they've watched, etc. Saved information includes the Director, Movie genre, name and release year and the year the user watched it. User can also write how they watched it (e.g. cinema, streaming and such) and also a Yes/No choice if they enjoyed the movie. As the application is done based on the Blazor template, I have configured 2FA for it and also external logins for GitHub, Google and Microsoft. I've also configured sending email for the confirmations. As the template included a Weather page, I decided to utilise this page to use the OpenWeatherMap API for user to search for a place to get a weather forecast. I am using SQL Server as the app's database. For the database operations I at first utilised Entity Framework, but later transitioned to writen SQL queries with Dapper. For the styling I am using Fluent UI. This app is also available on Azure.
Another project I worked on with Blazor was an IoT sensor dashboard/data visualisation app (akin to something like asksensors.com). Users first need to create an API key, and a sensor (or multiple) to be able to send data from their sensors. This app only receives data via a ReST API. Users can setup different charts to visualise the data with Apex Charts. Data can also be shown in a table form. The users can also setup email alerts based on what values their sent data gets (over/under certain value). Users can choose the threshold, email, and a custom message for the email. The app also supports binary data for the different data types. On this app, I've made a timer on the visualisations, so that whenever new data is uploaded, the user sees it, if they are on the page. I am using SQL Server for this app's database. For the database operations I utilise Dapper to write semi-complex SQL queries. For the app's UI, I use Fluent UI for the styling. This app is also available on Azure.
My biggest project in the sense of moving parts is an IoT device status/management system. This system consists of a .NET Web API, a React UI for login and register, an Angular UI for the devices, Docker for containerisation, and Nginx for serving the different parts. Docker Compose is used to orchestrate the different containers. I use Identity for the user authentication. The user accounts are stored in an SQL Server database. I also have an Azure Cosmos DB for NoSQL in use. The API controller uses versioning with v1 using the SQL database for saving the devices as well as the user accounts, while v2 (which is the go-to version) user the Cosmos DB for saving the devices. I use Fluent UI in the React app, and PrimeNG in Angular. As the subject of the system is IoT devices, I use Azure IoT Hub as a mediator between the UI (API) and the device. The device-side software was created with PlatformIO. I use Microsoft's azure-iot-sdk-c for the IoT Hub communication, which uses MQTT for it. An Azure Function is used to detect events on the IoT Hub as soon as they arrive. The Function's role is to save the incoming sensor measurements to the database for the appropriate device. The user can send cloud-to-device commands from the UI. I created this project to learn some new skills, but mainly as a way to show, that I am capable of creating full systems like these.

Contact me

Send message
An unhandled error has occurred. Reload 🗙