{"version":3,"sources":["./src/app/calendar/calendar.component.ts","./src/app/calendar/calendar.component.html","./src/app/about/about.component.ts","./src/app/about/about.component.html","./src/environments/environment.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/header/header.component.ts","./src/app/header/header.component.html","./src/app/app-routing.module.ts","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.css']\n})\nexport class CalendarComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-about',\n templateUrl: './about.component.html',\n styleUrls: ['./about.component.css']\n})\nexport class AboutComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","
My name is Alex and welcome to my internet home.\n I am currently on a sabbatical and just enjoying life.\n I used to be a data engineer, and will probably be one\n again in the future. \n I'm currently working as a data engineer at Mentimeter!\n
The fields of Data Engineering and Data Science are both quite young\n without processes and practices that have been battle tested.\n I am interested in how can I spend as little time as possible on fixing\n leaking pipelines and instead focus on delivering value to the business,\n which is what I am getting paid for. How can automate testing of data, pipeline\n deployment and so on? Then the other question is how can we build applications\n that are easily built, configured and deployed?\n
\nYeah so basically:
\nA showcase of interesting projects I have been working on
\n\n I am currently running a small cluster of Raspberry Pis at home,\n which dutifully sent this website to you. I am using\n traefik\n as my reverse proxy. Traefik routes my subdomains to exposed docker containers\n and will automatically enable https on them too. This makes it\n really easy to spin up new services! It is as simple as just defining\n a label for which address the docker container should listen to.\n In the below picture you can see an overview of the architecture,\n and how the different containers interact with each other.\n
\nBefore I had a draw io diagram for this, but now I generate this picture with\n code using Diagrams as Code.\n The code for the below picture can be seen \n in my repo.\n
\n\n Monitoring the health of my infrastrucuture is critical to know if I should rebalance\n some code or distribute services differently on my cluster. I have a stats gatherer\n written in python that monitors the health of the CPU, hard-drive, RAM and the temperature.\n Then I also have a shell script that checks my network speed every ten minutes.\n The data is then sent to Timescaledb, which is a\n database optimized for time series data.\n\n Since the python script runs in a docker container I noticed some significant slowdowns\n for my speed measurement if it was running there. I don't know if this is because of docker\n or python, so instead I opted for just doing a simple shell script scheduled with crontab.\n
\n\n For live update on the health please checkout grafana.dahl.dev\n
\n\n For a summary on the different months see my superset dashboard that aggregates some of the health\n data see: superset.dahl.dev\n
\nThis website is automatically deployed to the server when new commits are pushed\n to the master branch. The website is an angular application, which can be viewed\n on github. I have set up\n drone, which is a self hosted CI/CD service that will\n get a hook from github whenever a new commit is pushed to master. The drone runner\n can be viewed on\n drone.dahl.dev/aleda145/resumewebpage/.\n The runner will build the supplied Dockerfile in the repo, and sent it up to my\n dockerhub account.\n Then I have Watchtower running in a\n container. Watchtower will poll the docker image every 30 seconds,\n and if it notices\n a change in docker images, it will pull the image, create a new container and\n start the service. This will result in a downtime for the website of around 1 second,\n which is acceptable since I get very little traffic :)\n
\nI was head of IT for LARM in 2019.\n I did some cool things to make the fair run as smoothly as possible.\n I launched the usage of RFID readers for checking into events. The previous process\n was students walking up to a desk, stating their name and were checked off in an\n Excel sheet. This was a tedious process that took at least 10 minutes when you have\n 300 students going to an event. My implementation meant that the students could check\n themselves in with their student card, and they were automatically registered in the database.\n Taking the check in time down to less than 5 minutes.\n
\n\n I was curious exploring the statistics data for enrollment, questions like,\n how has the gender ratio changed for higher education in the last 20 years?\n or, what is the normal age for a student that is enrolled in an engineering degree?\n\n I exported the data from UKÄ (link) and inserted it into a Postgres database.\n The postgres database was connected to Apache Superset, an Open Source\n dashboarding tool. Then the data crunched there.\n\n Check it out at superset.dahl.dev!\n Maybe you can find some interesting insight yourself?\n
\nI rode my bicycle from Connecticut, USA to San Jose, Costa Rica in 2016-2017.\n That was pretty cool! It was approximately 10000km. My bike computer broke after\n 7000km and southern Mexico is not the best place to replace a bike computer,\n so I can't know for sure!\n
\nThis was my route:
\nI like fermenting things. I almost always have homemade kimchi in my fridge.\n Then I also do some homebrewing. Last I did Sake, japanese rice wine. It was really cool because\n it introduced me to koji, a japanese fungus/mold that transforms the starch in\n the rice to sugar, which the yeast can then eat to produce alcohol.\n
\n