Compare commits
12 Commits
84fea909cd
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
88c5cb7002
|
|||
|
ca675cefc8
|
|||
|
fc95d4d8c5
|
|||
|
32fc67fa36
|
|||
|
86bb5040fa
|
|||
|
d71af628ab
|
|||
|
ed8097e492
|
|||
|
384e12ed02
|
|||
|
59f76e58fa
|
|||
|
55765e71a1
|
|||
|
0e9af4f540
|
|||
|
8f554e5c2e
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,6 +3,7 @@ _markdown_*
|
|||||||
svg-inkscape/
|
svg-inkscape/
|
||||||
*.markdown.*
|
*.markdown.*
|
||||||
*.pdf
|
*.pdf
|
||||||
|
main.*.tex
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/latex,dotenv
|
# Created by https://www.toptal.com/developers/gitignore/api/latex,dotenv
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=latex,dotenv
|
# Edit at https://www.toptal.com/developers/gitignore?templates=latex,dotenv
|
||||||
|
|
||||||
|
|||||||
54
README.md
54
README.md
@@ -1,18 +1,43 @@
|
|||||||
# Hi! I'm Tim Huizinga
|
# Hi! I'm Tim Huizinga
|
||||||
An Applied Physics student with a passion for programming!
|
|
||||||
|
|
||||||
I have always enjoyed programming as a hobby, and would love to make it my carreer.
|
Ever since I was young I have always been interested in technology, whether it was taking apart (broken) electronics or playing around on my parents computer.
|
||||||
Since then I have also combining this hobby with the hardware side of things.
|
In high school I discovered that I also really liked physics, so that is what I ended up studying, but programming always remained one of my hobbies.
|
||||||
Most recently I have picked up [Rust], and have fallen in love with this programming language.
|
A couple of years ago I picked up the programming language [Rust] and all my personal projects since have been build with it!
|
||||||
|
|
||||||
I'm also quite experienced with Linux as I have been daily driving it for the past decade at this point.
|
I also discovered I enjoyed working with hardware during my minor in Electronics for Robotics and have since worked on a variety of hardware related projects at home as well.
|
||||||
Making me very familiar with the terminal and the different command line tools available.
|
One example would be adding bluetooth audio to my car, which included hacking into the CAN bus to integrate with the normally CD only steering wheel controls.
|
||||||
And have even been running my own Linux server at home for quite some time now!
|
|
||||||
|
I'm also a big Linux fan and have run it as my main operating system for well over a decade at this point, I even game in a virtual machine so I technically never have to leave Linux!
|
||||||
|
This has since expanded to running my own Linux server at home and more recently tinkering with a bare metal Kubernetes cluster at home.
|
||||||
|
|
||||||
[Rust]: https://rust-lang.org
|
[Rust]: https://rust-lang.org
|
||||||
|
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
|
|
||||||
|
### [Home Automation](https://git.huizinga.dev/Dreaded_X/automation_rs)
|
||||||
|
I have slowly been converting my house into my very own smart home!
|
||||||
|
It all started with a couple of [Philips Hue] light bulbs.
|
||||||
|
The Hue app allows for some level of automation but it wasn't quite doing what I wanted.
|
||||||
|
So initially I wrote a very simple program in [Go] to add my own automations.
|
||||||
|
As I added more smart devices to my house, the program grew massively in scope with things quickly getting hacked in just to make it work.
|
||||||
|
Eventually I decided to rewrite the whole thing in [Rust]!
|
||||||
|
This was my first real Rust after picking up the language during [Advent of Code] and was (and still is) a great learning experience.
|
||||||
|
|
||||||
|
[Philips Hue]: https://nl.wikipedia.org/wiki/Philips_Hue
|
||||||
|
[Go]: https://go.dev
|
||||||
|
[Rust]: https://rust-lang.org
|
||||||
|
[Advent of Code]: https://adventofcode.com/
|
||||||
|
|
||||||
|
### [Siranga (Greek for Tunnel)](https://git.huizinga.dev/Dreaded_X/siranga)
|
||||||
|
Sometimes you want to use your fancy new work-in-progress with someone remote, but how would you do this easily and securely?
|
||||||
|
That is where Siranga comes in, with this tool you can quickly create a new subdomain that connects to a local port on your machine, and all you need: SSH!
|
||||||
|
When connecting to Siranga over SSH it makes uses of the tunneling capabilities of SSH to forward one of your local ports to Siranga.
|
||||||
|
At the same time Siranga acts as a webserver and when a connection comes in for a given subdomain it will handle creating the connection through the SSH tunnel.
|
||||||
|
|
||||||
|
The authorized SSH keys for each user are retrieved through LDAP and the subdomains are (optionally) protected using ForwardAuth.
|
||||||
|
In my Kubernetes cluster LDAP is provided by LLDAP and ForwardAuth is provided by my single sign-on provider Authelia.
|
||||||
|
|
||||||
### [Z80 Computer](https://git.huizinga.dev/Z80/Z80)
|
### [Z80 Computer](https://git.huizinga.dev/Z80/Z80)
|
||||||
The first big hardware project that I worked on was building a computer, from the ground up, around the [Z80] microprocessor.
|
The first big hardware project that I worked on was building a computer, from the ground up, around the [Z80] microprocessor.
|
||||||
I had to learn a wide range of skills for this project, including things like learning how to design PCBs, programming in assembly, working with [FPGA]s, and learning to operate an oscilloscope.
|
I had to learn a wide range of skills for this project, including things like learning how to design PCBs, programming in assembly, working with [FPGA]s, and learning to operate an oscilloscope.
|
||||||
@@ -28,24 +53,13 @@ However since then I have also connected the [ESP32] to the [CAN bus] of my car,
|
|||||||
[ESP32]: https://en.wikipedia.org/wiki/ESP32
|
[ESP32]: https://en.wikipedia.org/wiki/ESP32
|
||||||
[CAN bus]: https://en.wikipedia.org/wiki/CAN_bus
|
[CAN bus]: https://en.wikipedia.org/wiki/CAN_bus
|
||||||
|
|
||||||
### [Home Automation](https://git.huizinga.dev/Dreaded_X/automation_rs)
|
|
||||||
I have slowly been converting my house into my very own smart home!
|
|
||||||
It all started with a couple of Philips Hue light bulbs, the Hue app allows for some level of automation but it wasn't quite doing what I wanted.
|
|
||||||
So initially I wrote a very simple program in [Go] to add my own automations.
|
|
||||||
As I added more smart devices to my house, the program grew massively in scope with things quickly getting hacked in just to make it work.
|
|
||||||
Eventually I decided to rewrite the whole thing in Rust!
|
|
||||||
This was my first real Rust after picking up the language during [Advent of Code] and was (and still is) a great learning experience.
|
|
||||||
|
|
||||||
[Philips Hue]: https://nl.wikipedia.org/wiki/Philips_Hue
|
|
||||||
[Go]: https://go.dev
|
|
||||||
[Advent of Code]: https://adventofcode.com/
|
|
||||||
|
|
||||||
### [Pico P1](https://git.huizinga.dev/Dreaded_X/pico_p1)
|
### [Pico P1](https://git.huizinga.dev/Dreaded_X/pico_p1)
|
||||||
This is my most recent project, as I had recently decided to pick up a [Raspberry Pi Pico W] just to play around with.
|
This is my most recent project, as I had recently decided to pick up a [Raspberry Pi Pico W] just to play around with.
|
||||||
I decided to build a device to read out my [DSMR5] based smart meter using it's P1 port and publish the information using MQTT.
|
I decided to build a device to read out my [DSMR5] based smart meter using it's P1 port and publish the information using [MQTT].
|
||||||
The main intention of this project is to learn about Rust for embedded devices, which is still a very new ecosystem.
|
The main intention of this project is to learn about Rust for embedded devices, which is still a very new ecosystem.
|
||||||
So far it has been quite a nice experience!
|
So far it has been quite a nice experience!
|
||||||
|
|
||||||
[Raspberry Pi Pico W]: https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi_Pico
|
[Raspberry Pi Pico W]: https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi_Pico
|
||||||
[DSMR5]: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf
|
[DSMR5]: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf
|
||||||
|
[MQTT]: https://nl.wikipedia.org/wiki/MQTT
|
||||||
|
|
||||||
|
|||||||
4
build.sh
4
build.sh
@@ -1,2 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
cd tool && cargo run && cd .. && latexmk -shell-escape -lualatex
|
cd tool && cargo run && cd ..
|
||||||
|
latexmk -shell-escape -lualatex main.en.tex
|
||||||
|
latexmk -shell-escape -lualatex main.nl.tex
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ find . -name "*.fls" | xargs rm -rf
|
|||||||
find . -name "*.log" | xargs rm -rf
|
find . -name "*.log" | xargs rm -rf
|
||||||
find . -name "*.markdown.in" | xargs rm -rf
|
find . -name "*.markdown.in" | xargs rm -rf
|
||||||
find . -name "*.out" | xargs rm -rf
|
find . -name "*.out" | xargs rm -rf
|
||||||
|
find . -name "main.*.tex" | xargs rm -rf
|
||||||
rm -rf svg-inkscape
|
rm -rf svg-inkscape
|
||||||
rm -rf _markdown_*
|
rm -rf _markdown_*
|
||||||
rm -rf latex
|
rm -rf latex
|
||||||
|
|||||||
@@ -43,6 +43,8 @@
|
|||||||
|
|
||||||
\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
|
\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
|
||||||
|
|
||||||
|
\usepackage[none]{hyphenat}
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% PAGE LAYOUT
|
% PAGE LAYOUT
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|||||||
22
en.tex
Normal file
22
en.tex
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
\newcommand{\WhoAmI}{Who Am I?}
|
||||||
|
\newcommand{\Experience}{Experience}
|
||||||
|
\newcommand{\Education}{Education}
|
||||||
|
\newcommand{\ProgrammingLanguages}{Programming Languages}
|
||||||
|
\newcommand{\OtherSkills}{Other Skills}
|
||||||
|
\newcommand{\Languages}{Languages}
|
||||||
|
\newcommand{\Hobbies}{Hobbies}
|
||||||
|
\newcommand{\Projects}{Personal Projects}
|
||||||
|
|
||||||
|
\newcommand{\Now}{Now}
|
||||||
|
|
||||||
|
\newcommand{\Dutch}{Dutch}
|
||||||
|
\newcommand{\English}{English}
|
||||||
|
\newcommand{\Native}{native}
|
||||||
|
\newcommand{\NearNative}{near native}
|
||||||
|
|
||||||
|
\newcommand{\AnalogPhotography}{Analog Photography}
|
||||||
|
\newcommand{\HouseMusic}{House Music}
|
||||||
|
|
||||||
|
\newcommand{\Maths}{Maths}
|
||||||
|
\newcommand{\Physics}{Physics}
|
||||||
|
\newcommand{\Soldering}{Soldering}
|
||||||
BIN
images/pfp.jpg
Executable file
BIN
images/pfp.jpg
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 MiB |
292
main.nl.tex
292
main.nl.tex
@@ -1,292 +0,0 @@
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
% Developer CV
|
|
||||||
% LaTeX Template
|
|
||||||
% Version 1.0 (28/1/19)
|
|
||||||
%
|
|
||||||
% This template originates from:
|
|
||||||
% http://www.LaTeXTemplates.com
|
|
||||||
%
|
|
||||||
% Authors:
|
|
||||||
% Jan Vorisek (jan@vorisek.me)
|
|
||||||
% Based on a template by Jan Küster (info@jankuester.com)
|
|
||||||
% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
|
|
||||||
%
|
|
||||||
% License:
|
|
||||||
% The MIT License (see included LICENSE file)
|
|
||||||
%
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
% https://www.latextemplates.com/template/developer-cv
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\documentclass[9pt]{developercv} % Default font size, values from 8-12pt are recommended
|
|
||||||
|
|
||||||
\usepackage{svg}
|
|
||||||
\usepackage{xurl}
|
|
||||||
\usepackage{markdown}
|
|
||||||
\markdownSetup{
|
|
||||||
renderers = {
|
|
||||||
link = {%
|
|
||||||
#1%
|
|
||||||
% TODO: For some reason _ in url turn in _{}
|
|
||||||
% \href{#2}{#1}%
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
% File containing somewhat private information, not checked into the repository
|
|
||||||
\input{latex/private.tex}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% TITLE AND CONTACT INFORMATION
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\begin{minipage}[t]{0.45\textwidth} % 45% of the page width for name
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
% If your name is very short, use just one of the lines below
|
|
||||||
% If your name is very long, reduce the font size or make the minipage wider and reduce the others proportionately
|
|
||||||
\colorbox{black}{{\HUGE\textcolor{white}{\texttt{\textbf{\MakeUppercase{Tim}}}}}} % First name
|
|
||||||
|
|
||||||
\colorbox{black}{{\HUGE\textcolor{white}{\texttt{\textbf{\MakeUppercase{Huizinga}}}}}} % Last name
|
|
||||||
|
|
||||||
\vspace{6pt}
|
|
||||||
|
|
||||||
{\huge Applied Physics Student} % Career or current job title
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the first row of icons
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
|
||||||
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
|
||||||
\icon{\faMapMarker*}{12}{Delft}\\
|
|
||||||
\icon{\faPhone*}{12}{\phone}\\
|
|
||||||
\icon{\faAt}{12}{\href{mailto:\email}{\texttt{\email}}}\\
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the second row of icons
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
|
||||||
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
|
||||||
\icon{\faGlobe}{12}{\href{https://huizinga.dev}{\texttt{huizinga.dev}}}\\
|
|
||||||
\icon{\faGithub}{12}{\href{https://github.com/DreadedX}{\texttt{github.com/DreadedX}}}\\
|
|
||||||
\icon{\faGit}{12}{\href{https://git.huizinga.dev/explore}{\texttt{git.huizinga.dev}}}\\
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
\vspace{0.5cm}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% INTRODUCTION
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\cvsect{Wie ben ik?}
|
|
||||||
|
|
||||||
\begin{minipage}[t]{1\textwidth} % 40% of the page width for the introduction text
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
Een Applied Physics student met aan passie voor programeren!
|
|
||||||
|
|
||||||
Ik heb het altijd leuk gevonden om te programeren als hobby, en wil er graag mijn baan van maken.
|
|
||||||
Tegenwoordig gaat deze hobby ook vaak samen met de hardware kant.
|
|
||||||
Recent ben ik ook begonnen met het programeren in Rust, en het is snel mijn favoriete programeer taal geworden.
|
|
||||||
|
|
||||||
Daarnaast heb ik ook veel ervaring met Linux, ik gebruik het al bij 10 jaar als mijn daily driver.
|
|
||||||
Hierdoor ben ik erg bekend met de command line en de verschillende tools die daar beschikbaar zijn.
|
|
||||||
Ik draai zelfs al enige tijd mijn eigen Linux server thuis!
|
|
||||||
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% EXPERIENCE
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\cvsect{Ervaring}
|
|
||||||
|
|
||||||
\begin{entrylist}
|
|
||||||
\entry
|
|
||||||
{2019}
|
|
||||||
{App Developer}
|
|
||||||
{EOCE}
|
|
||||||
{Ik heb een interne Android app ontwikkeld voor het kalibreren van temperatuur sensoren.}
|
|
||||||
\entry
|
|
||||||
{2018 -- 2019}
|
|
||||||
{Student Assistent}
|
|
||||||
{TU Delft}
|
|
||||||
{Ik hielp andere studenten als zij vragen hadden tijdens de werkcolleges voor het vak Elektromagnetisme.}
|
|
||||||
\end{entrylist}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% EDUCATION
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\cvsect{Opleiding}
|
|
||||||
|
|
||||||
\begin{entrylist}
|
|
||||||
\entry
|
|
||||||
{2019 -- Now}
|
|
||||||
{MSc}
|
|
||||||
{TU Delft}
|
|
||||||
{Applied Physics met een focus op Quantum Computation.}
|
|
||||||
\entry
|
|
||||||
{2016 -- 2019}
|
|
||||||
{BSc}
|
|
||||||
{TU Delft}
|
|
||||||
{Technische Natuurkunde met een minor in Electronics for Robotics.}
|
|
||||||
\end{entrylist}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% ADDITIONAL INFORMATION
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
\cvsect{Programeertalen}
|
|
||||||
|
|
||||||
\iconsvg{rust}{12}{Rust}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{c}{12}{C}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{javascript}{12}{JavaScript}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{python}{12}{Python}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{java}{12}{Java}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{csharp}{12}{C\#}\\
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\vspace{32.35pt} % Make sure it lines up with the rest
|
|
||||||
|
|
||||||
\iconsvg{cpp}{12}{C++}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{go}{12}{Go}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{typescript}{12}{TypeScript}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{lua}{12}{Lua}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{kotlin}{12}{Kotlin}\\
|
|
||||||
\hfill
|
|
||||||
\iconempty{12}{Verilog}\\
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
\cvsect{Andere vaardigheden}
|
|
||||||
|
|
||||||
\icon{\faCalculator}{12}{Wiskunde}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{linux}{12}{Linux}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{git}{12}{Git}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{android}{12}{Android Dev}\\
|
|
||||||
\hfill
|
|
||||||
\iconempty{12}{PCB Design}\\
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\vspace{32.35pt} % Make sure it lines up with the rest
|
|
||||||
|
|
||||||
\icon{\faApple*}{12}{Natuurkunde}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{bash}{12}{Bash}\\
|
|
||||||
\hfill
|
|
||||||
\iconsvg{docker}{12}{Docker}\\
|
|
||||||
\hfill
|
|
||||||
\icon{\faMicrochip}{12}{Embedded}\\
|
|
||||||
\hfill
|
|
||||||
\iconempty{12}{Solderen}\\
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
\cvsect{Talen}
|
|
||||||
|
|
||||||
\textbf{Nederlands} - native \\
|
|
||||||
\textbf{Engels} - near native
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
% PROJECTS
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\clearpage
|
|
||||||
\begin{minipage}[t]{1\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
|
|
||||||
\colorbox{black}{{\Huge\textcolor{white}{\textbf{\MakeUppercase{Projecten}}}}}
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
\vspace{8pt}
|
|
||||||
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\cvsect{Z80 Computer}
|
|
||||||
|
|
||||||
Een van mijn eerste grote hardware projecten was een computer ontwerpen rondom the de Z80 microprocessor.
|
|
||||||
Hiervoor moest ik een groot aantal nieuwe vaardigheden leren, waaronder het ontwerpen van PCB's, programeren in Assembly, werken met FPGA's en leren omgaan met een oscilloscope.
|
|
||||||
|
|
||||||
\vspace{3pt}
|
|
||||||
|
|
||||||
\rurl{git.huizinga.dev/Z80/Z80}
|
|
||||||
|
|
||||||
\vspace{6pt}
|
|
||||||
|
|
||||||
\cvsect{Pico P1}
|
|
||||||
|
|
||||||
Dit is mijn meest recente project, ik had recent een Raspberry Pi Pico W gekocht om mee rond te spelen.
|
|
||||||
Uiteindelijk heb ik besloten een apparaat te maken om mijn DSMR5 slimme meter uit te lezen via de P1 en deze informatie vervolgen via MQTT te delen.
|
|
||||||
Het doel van dit project was vooral om ervaring op te doen met Rust voor embedded devices, een ecosystem dat nog volop in ontwikkeling is momenteel.
|
|
||||||
Tot nu toe is dit een hele goede ervaring geweest.
|
|
||||||
|
|
||||||
\vspace{3pt}
|
|
||||||
|
|
||||||
\rurl{git.huizinga.dev/Dreaded_X/pico_p1}
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\cvsect{Car Stereo}
|
|
||||||
|
|
||||||
Mijn Peugeot 207 heeft alleen bluetooth voor bellen, dus het leek mijn leuk om mijn eigen bluetooth ontvanger to bouwen met een ESP32 microcontroller.
|
|
||||||
Oorspronkelijk was het doel om gewoon een onvanger to bouwen en deze aan te sluiten op de aux port in het dashboardkastje, maar uiteindelijk is het project toch iets complexer geworden.
|
|
||||||
Het is namelijk nu ook mogelijk om de muziek de bedienen via de knoppen op mijn stuur, dit komt omdat ik de ESP32 aangesloten heb op de CAN bus van mijn auto.
|
|
||||||
|
|
||||||
\vspace{3pt}
|
|
||||||
|
|
||||||
\rurl{git.huizinga.dev/Dreaded_X/car-stereo}
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\cvsect{Home Automation}
|
|
||||||
|
|
||||||
Ik ben langzaam aan bezig om mijn huis om te toveren in een smart home!
|
|
||||||
Het begon allemaal met een aantal Philips Hue lampen, doormiddel van de Hue app is wel wat mogelijk voor automatisering, maar niet precies wat ik wilde.
|
|
||||||
Dus in de eerste instantie had ik een heel simpel programma geschreven in Go om zo mijn eigen automatiseringen mogelijk te maken.
|
|
||||||
Maar naarmate ik meer smart devices toevoegde aan mijn huis werd dit programma steeds complexer, vooral omdat ik alles er een beetje in moest hacken om het werkend te krijgen.
|
|
||||||
Uitendelijk heb ik er voor gekozen om het helemaal opnieuw te bouwen in Rust!
|
|
||||||
Dit was mijn eerste echte project met Rust nadat ik het begonnen was met leren tijdens Advent of Code en het was (en is nog steeds) een heel leerzaam project.
|
|
||||||
|
|
||||||
\vspace{3pt}
|
|
||||||
|
|
||||||
\rurl{git.huizinga.dev/Dreaded_X/automation_rs}
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
\end{document}
|
|
||||||
132
main.tex
Executable file → Normal file
132
main.tex
Executable file → Normal file
@@ -40,8 +40,7 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
% File containing somewhat private information, not checked into the repository
|
\input{{{lang}}.tex}
|
||||||
\input{latex/private.tex}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% TITLE AND CONTACT INFORMATION
|
% TITLE AND CONTACT INFORMATION
|
||||||
@@ -58,16 +57,23 @@
|
|||||||
|
|
||||||
\vspace{6pt}
|
\vspace{6pt}
|
||||||
|
|
||||||
{\huge Applied Physics Student} % Career or current job title
|
{\huge Software Developer} % Career or current job title
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the first row of icons
|
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the first row of icons
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
||||||
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
||||||
\icon{\faMapMarker*}{12}{Delft}\\
|
\IfFileExists{latex/private.tex}{
|
||||||
\icon{\faPhone*}{12}{\phone}\\
|
% File containing somewhat private information, not checked into the repository
|
||||||
\icon{\faAt}{12}{\href{mailto:\email}{\texttt{\email}}}\\
|
\input{latex/private.tex}
|
||||||
|
|
||||||
|
\icon{\faMapMarker*}{12}{\City}\\
|
||||||
|
\icon{\faPhone*}{12}{\Phone}\\
|
||||||
|
\icon{\faAt}{12}{\href{mailto:\Email}{\texttt{\Email}}}\\
|
||||||
|
}{
|
||||||
|
\hfill
|
||||||
|
}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the second row of icons
|
\begin{minipage}[t]{0.275\textwidth} % 27.5% of the page width for the second row of icons
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
@@ -85,12 +91,23 @@
|
|||||||
% INTRODUCTION
|
% INTRODUCTION
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
\cvsect{Who Am I?}
|
\cvsect{\WhoAmI}
|
||||||
|
|
||||||
\begin{minipage}[t]{1\textwidth} % 40% of the page width for the introduction text
|
\begin{minipage}[t]{0.25\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
\input{latex/blurb.tex}
|
\begin{tikzpicture}
|
||||||
|
\clip (0,0) circle (1.8cm) ;
|
||||||
|
\node[anchor=center] at (0, -0.2) {\includegraphics[width=6cm]{images/pfp.jpg}};
|
||||||
|
%adjust this coordinate to move image
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{minipage}
|
||||||
|
\begin{minipage}[t]{0.75\textwidth} % 40% of the page width for the introduction text
|
||||||
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
|
\vspace{0.3cm}
|
||||||
|
|
||||||
|
\input{latex/blurb.{{lang}}.md.tex}
|
||||||
|
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
@@ -98,38 +115,20 @@
|
|||||||
% EXPERIENCE
|
% EXPERIENCE
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
\cvsect{Experience}
|
\cvsect{\Experience}
|
||||||
|
|
||||||
\begin{entrylist}
|
\begin{entrylist}
|
||||||
\entry
|
\input{latex/experience.{{lang}}.yml.tex}
|
||||||
{2019}
|
|
||||||
{App Developer}
|
|
||||||
{EOCE}
|
|
||||||
{I developed in internal Android app to aid in the calibration of temperature sensors.}
|
|
||||||
\entry
|
|
||||||
{2018 -- 2019}
|
|
||||||
{Teaching Assistant}
|
|
||||||
{Delft University of Technology}
|
|
||||||
{I helped others students if they had questions during tutorial sessions for the course Electromagnetism.}
|
|
||||||
\end{entrylist}
|
\end{entrylist}
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
% EDUCATION
|
% EDUCATION
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
\cvsect{Education}
|
\cvsect{\Education}
|
||||||
|
|
||||||
\begin{entrylist}
|
\begin{entrylist}
|
||||||
\entry
|
\input{latex/education.{{lang}}.yml.tex}
|
||||||
{2019 -- Now}
|
|
||||||
{MSc}
|
|
||||||
{Delft University of Technology}
|
|
||||||
{Applied Physics with a focus on Quantum Computation.}
|
|
||||||
\entry
|
|
||||||
{2016 -- 2019}
|
|
||||||
{BSc}
|
|
||||||
{Delft University of Technology}
|
|
||||||
{Applied Physics with a minor in Electronics for Robotics.}
|
|
||||||
\end{entrylist}
|
\end{entrylist}
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
@@ -139,7 +138,7 @@
|
|||||||
\begin{minipage}[t]{0.18\textwidth}
|
\begin{minipage}[t]{0.18\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
\cvsect{Programming languages}
|
\cvsect{\ProgrammingLanguages}
|
||||||
|
|
||||||
\iconsvg{rust}{12}{Rust}\\
|
\iconsvg{rust}{12}{Rust}\\
|
||||||
\hfill
|
\hfill
|
||||||
@@ -173,40 +172,57 @@
|
|||||||
\begin{minipage}[t]{0.18\textwidth}
|
\begin{minipage}[t]{0.18\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
\cvsect{Other skills}
|
\cvsect{\OtherSkills}
|
||||||
|
|
||||||
\icon{\faCalculator}{12}{Maths}\\
|
\icon{\faCalculator}{12}{\Maths}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconsvg{linux}{12}{Linux}\\
|
\iconsvg{linux}{12}{Linux}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconsvg{git}{12}{Git}\\
|
\iconsvg{git}{12}{Git}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconsvg{android}{12}{Android Dev}\\
|
\iconsvg{docker}{12}{Docker}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconempty{12}{PCB Design}\\
|
\iconsvg{k3s}{12}{K3S}\\
|
||||||
|
\hfill
|
||||||
|
\icon{\faMicrochip}{12}{Embedded}\\
|
||||||
|
\hfill
|
||||||
|
\iconempty{12}{\Soldering}\\
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
\begin{minipage}[t]{0.18\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
\vspace{32.35pt} % Make sure it lines up with the rest
|
\vspace{32.35pt} % Make sure it lines up with the rest
|
||||||
|
|
||||||
\icon{\faApple*}{12}{Physics}\\
|
\icon{\faApple*}{12}{\Physics}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconsvg{bash}{12}{Bash}\\
|
\iconsvg{bash}{12}{Bash}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconsvg{docker}{12}{Docker}\\
|
\iconsvg{react}{12}{React}\\
|
||||||
\hfill
|
\hfill
|
||||||
\icon{\faMicrochip}{12}{Embedded}\\
|
\iconsvg{kubernetes}{12}{Kubernetes}\\
|
||||||
\hfill
|
\hfill
|
||||||
\iconempty{12}{Soldering}\\
|
\iconsvg{android}{12}{Android Dev}\\
|
||||||
|
\hfill
|
||||||
|
\iconsvg{latex}{12}{LaTeX}\\
|
||||||
|
\hfill
|
||||||
|
\iconempty{12}{PCB Design}\\
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\hfill
|
\hfill
|
||||||
\begin{minipage}[t]{0.18\textwidth}
|
\begin{minipage}[t]{0.18\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
\cvsect{Languages}
|
\cvsect{\Languages}
|
||||||
|
|
||||||
\textbf{Dutch} - native\\
|
\textbf{\Dutch} \\
|
||||||
\textbf{English} - near native
|
\hspace*{2em} \Native \\
|
||||||
|
\textbf{\English} \\
|
||||||
|
\hspace*{2em} \NearNative
|
||||||
|
|
||||||
|
\vspace{8pt}
|
||||||
|
|
||||||
|
\cvsect{\Hobbies}
|
||||||
|
|
||||||
|
\AnalogPhotography\\
|
||||||
|
\HouseMusic
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
@@ -217,30 +233,34 @@
|
|||||||
\begin{minipage}[t]{1\textwidth}
|
\begin{minipage}[t]{1\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
|
|
||||||
\colorbox{black}{{\Huge\textcolor{white}{\textbf{\MakeUppercase{Projects}}}}}
|
\colorbox{black}{{\Huge\textcolor{white}{\textbf{\MakeUppercase{\Projects}}}}}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
\vspace{8pt}
|
\vspace{8pt}
|
||||||
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
\begin{minipage}[t]{0.45\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
\input{latex/project/z80.tex}
|
\input{latex/project/automation.{{lang}}.md.tex}
|
||||||
|
|
||||||
\vspace{6pt}
|
\vspace{6pt}
|
||||||
\input{latex/project/pico_p1.tex}
|
|
||||||
|
\input{latex/project/z80.{{lang}}.md.tex}
|
||||||
|
|
||||||
|
\vspace{6pt}
|
||||||
|
|
||||||
|
\input{latex/project/pico_p1.{{lang}}.md.tex}
|
||||||
|
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\hfill
|
\hfill
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
\begin{minipage}[t]{0.45\textwidth}
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||||
\input{latex/project/car-stereo.tex}
|
\input{latex/project/siranga.{{lang}}.md.tex}
|
||||||
|
|
||||||
|
\vspace{6pt}
|
||||||
|
|
||||||
|
\input{latex/project/car-stereo.{{lang}}.md.tex}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\hfill
|
\hfill
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
|
||||||
\input{latex/project/automation.tex}
|
|
||||||
\end{minipage}
|
|
||||||
\hfill
|
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
%----------------------------------------------------------------------------------------
|
%----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
# Hi! I'm Tim Huizinga
|
# Hi! I'm Tim Huizinga
|
||||||
#{blurb.md}
|
|
||||||
|
#{blurb.en.md}
|
||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
#{project/z80.md}
|
|
||||||
#{project/car-stereo.md}
|
#{project/automation.en.md}
|
||||||
#{project/automation.md}
|
#{project/siranga.en.md}
|
||||||
#{project/pico_p1.md}
|
#{project/z80.en.md}
|
||||||
|
#{project/car-stereo.en.md}
|
||||||
|
#{project/pico_p1.en.md}
|
||||||
|
|||||||
11
markdown/blurb.en.md
Normal file
11
markdown/blurb.en.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Ever since I was young I have always been interested in technology, whether it was taking apart (broken) electronics or playing around on my parents computer.
|
||||||
|
In high school I discovered that I also really liked physics, so that is what I ended up studying, but programming always remained one of my hobbies.
|
||||||
|
A couple of years ago I picked up the programming language [Rust] and all my personal projects since have been build with it!
|
||||||
|
|
||||||
|
I also discovered I enjoyed working with hardware during my minor in Electronics for Robotics and have since worked on a variety of hardware related projects at home as well.
|
||||||
|
One example would be adding bluetooth audio to my car, which included hacking into the CAN bus to integrate with the normally CD only steering wheel controls.
|
||||||
|
|
||||||
|
I'm also a big Linux fan and have run it as my main operating system for well over a decade at this point, I even game in a virtual machine so I technically never have to leave Linux!
|
||||||
|
This has since expanded to running my own Linux server at home and more recently tinkering with a bare metal Kubernetes cluster at home.
|
||||||
|
|
||||||
|
[Rust]: https://rust-lang.org
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
An Applied Physics student with a passion for programming!
|
|
||||||
|
|
||||||
I have always enjoyed programming as a hobby, and would love to make it my carreer.
|
|
||||||
Since then I have also combining this hobby with the hardware side of things.
|
|
||||||
Most recently I have picked up [Rust], and have fallen in love with this programming language.
|
|
||||||
|
|
||||||
I'm also quite experienced with Linux as I have been daily driving it for the past decade at this point.
|
|
||||||
Making me very familiar with the terminal and the different command line tools available.
|
|
||||||
And have even been running my own Linux server at home for quite some time now!
|
|
||||||
|
|
||||||
[Rust]: https://rust-lang.org
|
|
||||||
12
markdown/blurb.nl.md
Normal file
12
markdown/blurb.nl.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Een Applied Physics student met een passie voor programmeren!
|
||||||
|
|
||||||
|
Ik heb het altijd leuk gevonden om te programmeren als hobby en wil er graag mijn baan van maken.
|
||||||
|
Tegenwoordig gaat deze hobby ook vaak samen met de hardware kant.
|
||||||
|
Recent ben ik ook begonnen met het programmeren in [Rust] en het is snel mijn favoriete programmeertaal geworden.
|
||||||
|
|
||||||
|
Daarnaast heb ik ook veel ervaring met Linux.
|
||||||
|
Ik gebruik het al bijna 10 jaar als mijn daily driver.
|
||||||
|
Hierdoor ben ik erg bekend met de command line en de verschillende tools die daar beschikbaar zijn.
|
||||||
|
Ik draai zelfs al enige tijd mijn eigen Linux server thuis!
|
||||||
|
|
||||||
|
[Rust]: https://rust-lang.org
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
---
|
---
|
||||||
type = "Project"
|
project:
|
||||||
url = "git.huizinga.dev/Dreaded_X/automation_rs"
|
url: git.huizinga.dev/Dreaded_X/automation_rs
|
||||||
title = "Home Automation"
|
title: Home Automation
|
||||||
---
|
---
|
||||||
|
|
||||||
I have slowly been converting my house into my very own smart home!
|
I have slowly been converting my house into my very own smart home!
|
||||||
It all started with a couple of Philips Hue light bulbs, the Hue app allows for some level of automation but it wasn't quite doing what I wanted.
|
It all started with a couple of [Philips Hue] light bulbs.
|
||||||
|
The Hue app allows for some level of automation but it wasn't quite doing what I wanted.
|
||||||
So initially I wrote a very simple program in [Go] to add my own automations.
|
So initially I wrote a very simple program in [Go] to add my own automations.
|
||||||
As I added more smart devices to my house, the program grew massively in scope with things quickly getting hacked in just to make it work.
|
As I added more smart devices to my house, the program grew massively in scope with things quickly getting hacked in just to make it work.
|
||||||
Eventually I decided to rewrite the whole thing in Rust!
|
Eventually I decided to rewrite the whole thing in [Rust]!
|
||||||
This was my first real Rust after picking up the language during [Advent of Code] and was (and still is) a great learning experience.
|
This was my first real Rust after picking up the language during [Advent of Code] and was (and still is) a great learning experience.
|
||||||
|
|
||||||
[Philips Hue]: https://nl.wikipedia.org/wiki/Philips_Hue
|
[Philips Hue]: https://nl.wikipedia.org/wiki/Philips_Hue
|
||||||
[Go]: https://go.dev
|
[Go]: https://go.dev
|
||||||
|
[Rust]: https://rust-lang.org
|
||||||
[Advent of Code]: https://adventofcode.com/
|
[Advent of Code]: https://adventofcode.com/
|
||||||
17
markdown/project/automation.nl.md
Normal file
17
markdown/project/automation.nl.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/automation_rs
|
||||||
|
title: Home Automation
|
||||||
|
---
|
||||||
|
|
||||||
|
Ik ben langzaamaan bezig om mijn huis om te toveren in een smart home!
|
||||||
|
Het begon allemaal met een aantal [Philips Hue] lampen, door middel van de Hue app is wel wat mogelijk voor automatisering, maar niet precies wat ik wilde.
|
||||||
|
Dus in de eerste instantie had ik een heel simpel programma geschreven in [Go] om zo mijn eigen automatiseringen mogelijk te maken.
|
||||||
|
Maar naarmate ik meer smart devices toevoegde aan mijn huis werd dit programma steeds complexer, vooral omdat ik alles er een beetje in moest hacken om het werkend te krijgen.
|
||||||
|
Uitendelijk heb ik er voor gekozen om het helemaal opnieuw te bouwen in [Rust]!
|
||||||
|
Dit was mijn eerste echte project met Rust nadat ik het net begonnen was met leren tijdens [Advent of Code] en het was (en is nog steeds) een heel leerzaam project.
|
||||||
|
|
||||||
|
[Philips Hue]: https://nl.wikipedia.org/wiki/Philips_Hue
|
||||||
|
[Go]: https://go.dev
|
||||||
|
[Rust]: https://rust-lang.org
|
||||||
|
[Advent of Code]: https://adventofcode.com/
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
type = "Project"
|
project:
|
||||||
url = "git.huizinga.dev/Dreaded_X/car-stereo"
|
url: git.huizinga.dev/Dreaded_X/car-stereo
|
||||||
title = "Car Stereo"
|
title: Car Stereo
|
||||||
---
|
---
|
||||||
|
|
||||||
My Peugeot 207 only has bluetooth for calling, so I decided it would be fun to build my own bluetooth receiver using the [ESP32] microcontroller.
|
My Peugeot 207 only has bluetooth for calling, so I decided it would be fun to build my own bluetooth receiver using the [ESP32] microcontroller.
|
||||||
13
markdown/project/car-stereo.nl.md
Normal file
13
markdown/project/car-stereo.nl.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/car-stereo
|
||||||
|
title: Car Stereo
|
||||||
|
---
|
||||||
|
|
||||||
|
Mijn Peugeot 207 heeft alleen bluetooth voor bellen, dus het leek mijn leuk om mijn eigen bluetooth ontvanger te bouwen met een [ESP32] microcontroller.
|
||||||
|
Oorspronkelijk was het doel om gewoon een ontvanger te bouwen en deze aan te sluiten op de aux aansluiting in het dashboardkastje, maar uiteindelijk is het project toch iets complexer geworden.
|
||||||
|
Het is namelijk nu ook mogelijk om te muziek de bedienen via de knoppen op mijn stuur.
|
||||||
|
Dit komt omdat ik de [ESP32] aangesloten heb op de [CAN bus] van mijn auto.
|
||||||
|
|
||||||
|
[ESP32]: https://en.wikipedia.org/wiki/ESP32
|
||||||
|
[CAN bus]: https://en.wikipedia.org/wiki/CAN_bus
|
||||||
10
markdown/project/inventory.en.md
Normal file
10
markdown/project/inventory.en.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/inventory
|
||||||
|
title: Inventory System
|
||||||
|
---
|
||||||
|
|
||||||
|
As I got more into developing hardware my collection of electronic components also grew and I needed a better way of organizing everything.
|
||||||
|
I decided that it was a great opertunity to learn React and to develop the frontend of my very own simple inventory management system.
|
||||||
|
The system uses QR codes to link the physical components to their representation in the mangement system, which contains more information on the specific component like for example datasheets.
|
||||||
|
It also stores where each of the components is supposed to be stored, which makes it very easy to find components in the future.
|
||||||
11
markdown/project/inventory.nl.md
Normal file
11
markdown/project/inventory.nl.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/inventory
|
||||||
|
title: Inventory Systeem
|
||||||
|
---
|
||||||
|
|
||||||
|
Doordat ik steeds meer bezig was met hardware projecten, groeide ook mijn verzamling electronische componenten en had ik een betere manier nodig om het allemaal to organizeren.
|
||||||
|
Toen besloot ik dat dit een goed moment was om React the leren en om mijn eigen simplete inventory management systeem te ontwikkelen.
|
||||||
|
Het systeem maakt gebruik van QR codes om the physieke componenten the linken aan een representatie in het management systeem.
|
||||||
|
Hier is vervolgens weer meer informatie over het component the vinden is, zoals datasheets.
|
||||||
|
Ook staat er in het systeem waar elk component opgeslagen dient te worden, hierdoor is het gemakkelijk om later de componenten weer te vinden.
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
---
|
---
|
||||||
type = "Project"
|
project:
|
||||||
url = "git.huizinga.dev/Dreaded_X/pico_p1"
|
url: git.huizinga.dev/Dreaded_X/pico_p1
|
||||||
title = "Pico P1"
|
title: Pico P1
|
||||||
---
|
---
|
||||||
|
|
||||||
This is my most recent project, as I had recently decided to pick up a [Raspberry Pi Pico W] just to play around with.
|
This is my most recent project, as I had recently decided to pick up a [Raspberry Pi Pico W] just to play around with.
|
||||||
I decided to build a device to read out my [DSMR5] based smart meter using it's P1 port and publish the information using MQTT.
|
I decided to build a device to read out my [DSMR5] based smart meter using it's P1 port and publish the information using [MQTT].
|
||||||
The main intention of this project is to learn about Rust for embedded devices, which is still a very new ecosystem.
|
The main intention of this project is to learn about Rust for embedded devices, which is still a very new ecosystem.
|
||||||
So far it has been quite a nice experience!
|
So far it has been quite a nice experience!
|
||||||
|
|
||||||
[Raspberry Pi Pico W]: https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi_Pico
|
[Raspberry Pi Pico W]: https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi_Pico
|
||||||
[DSMR5]: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf
|
[DSMR5]: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf
|
||||||
|
[MQTT]: https://nl.wikipedia.org/wiki/MQTT
|
||||||
15
markdown/project/pico_p1.nl.md
Normal file
15
markdown/project/pico_p1.nl.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/pico_p1
|
||||||
|
title: Pico P1
|
||||||
|
---
|
||||||
|
|
||||||
|
Dit is mijn meest recente project.
|
||||||
|
Ik had recent een [Raspberry Pi Pico W] gekocht om mee rond te spelen.
|
||||||
|
Uiteindelijk heb ik besloten een apparaat te maken om mijn [DSMR5] slimme meter uit te lezen via de P1 en deze informatie vervolgens via [MQTT] te delen.
|
||||||
|
Het doel van dit project was vooral om ervaring op te doen met Rust voor embedded devices, een ecosystem dat nog volop in ontwikkeling is momenteel.
|
||||||
|
Tot nu toe is dit een hele goede ervaring geweest.
|
||||||
|
|
||||||
|
[Raspberry Pi Pico W]: https://en.wikipedia.org/wiki/Raspberry_Pi#Raspberry_Pi_Pico
|
||||||
|
[DSMR5]: https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf
|
||||||
|
[MQTT]: https://nl.wikipedia.org/wiki/MQTT
|
||||||
13
markdown/project/siranga.en.md
Normal file
13
markdown/project/siranga.en.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/siranga
|
||||||
|
title: Siranga (Greek for Tunnel)
|
||||||
|
---
|
||||||
|
|
||||||
|
Sometimes you want to use your fancy new work-in-progress with someone remote, but how would you do this easily and securely?
|
||||||
|
That is where Siranga comes in, with this tool you can quickly create a new subdomain that connects to a local port on your machine, and all you need: SSH!
|
||||||
|
When connecting to Siranga over SSH it makes uses of the tunneling capabilities of SSH to forward one of your local ports to Siranga.
|
||||||
|
At the same time Siranga acts as a webserver and when a connection comes in for a given subdomain it will handle creating the connection through the SSH tunnel.
|
||||||
|
|
||||||
|
The authorized SSH keys for each user are retrieved through LDAP and the subdomains are (optionally) protected using ForwardAuth.
|
||||||
|
In my Kubernetes cluster LDAP is provided by LLDAP and ForwardAuth is provided by my single sign-on provider Authelia.
|
||||||
13
markdown/project/siranga.nl.md
Normal file
13
markdown/project/siranga.nl.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Dreaded_X/siranga
|
||||||
|
title: Siranga (Greek for Tunnel)
|
||||||
|
---
|
||||||
|
|
||||||
|
Sometimes you want to use your fancy new work-in-progress with someone remote, but how would you do this easily and securely?
|
||||||
|
That is where Siranga comes in, with this tool you can quickly create a new subdomain that connects to a local port on your machine, and all you need: SSH!
|
||||||
|
When connecting to Siranga over SSH it makes uses of the tunneling capabilities of SSH to forward one of your local ports to Siranga.
|
||||||
|
At the same time Siranga acts as a webserver and when a connection comes in for a given subdomain it will handle creating the connection through the SSH tunnel.
|
||||||
|
|
||||||
|
The authorized SSH keys for each user are retrieved through LDAP and the subdomains are (optionally) protected using ForwardAuth.
|
||||||
|
In my Kubernetes cluster LDAP is provided by LLDAP and ForwardAuth is provided by my single sign-on provider Authelia.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
type = "Project"
|
project:
|
||||||
url = "git.huizinga.dev/Z80/Z80"
|
url: git.huizinga.dev/Z80/Z80
|
||||||
title = "Z80 Computer"
|
title: Z80 Computer
|
||||||
---
|
---
|
||||||
|
|
||||||
The first big hardware project that I worked on was building a computer, from the ground up, around the [Z80] microprocessor.
|
The first big hardware project that I worked on was building a computer, from the ground up, around the [Z80] microprocessor.
|
||||||
11
markdown/project/z80.nl.md
Normal file
11
markdown/project/z80.nl.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
project:
|
||||||
|
url: git.huizinga.dev/Z80/Z80
|
||||||
|
title: Z80 Computer
|
||||||
|
---
|
||||||
|
|
||||||
|
Een van mijn eerste grote hardware projecten was een computer ontwerpen rondom de [Z80] microprocessor.
|
||||||
|
Hiervoor moest ik een groot aantal nieuwe vaardigheden leren, waaronder het ontwerpen van PCB's, programmeren in Assembly, werken met [FPGA]'s en leren omgaan met een oscilloscope.
|
||||||
|
|
||||||
|
[Z80]: https://en.wikipedia.org/wiki/Zilog_Z80
|
||||||
|
[FPGA]: https://en.wikipeida.org/wiki/Field-programmable_gate_array
|
||||||
22
nl.tex
Normal file
22
nl.tex
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
\newcommand{\WhoAmI}{Wie ben ik?}
|
||||||
|
\newcommand{\Experience}{Ervaring}
|
||||||
|
\newcommand{\Education}{Opleiding}
|
||||||
|
\newcommand{\ProgrammingLanguages}{Programeertalen}
|
||||||
|
\newcommand{\OtherSkills}{Andere vaardigheden}
|
||||||
|
\newcommand{\Languages}{Talen}
|
||||||
|
\newcommand{\Hobbies}{Hobby's}
|
||||||
|
\newcommand{\Projects}{Projecten}
|
||||||
|
|
||||||
|
\newcommand{\Now}{Heden}
|
||||||
|
|
||||||
|
\newcommand{\Dutch}{Nederlands}
|
||||||
|
\newcommand{\English}{Engels}
|
||||||
|
\newcommand{\Native}{vloeiend}
|
||||||
|
\newcommand{\NearNative}{vloeiend}
|
||||||
|
|
||||||
|
\newcommand{\AnalogPhotography}{Analoge fotografie}
|
||||||
|
\newcommand{\HouseMusic}{House muziek}
|
||||||
|
|
||||||
|
\newcommand{\Maths}{Wiskunde}
|
||||||
|
\newcommand{\Physics}{Natuurkunde}
|
||||||
|
\newcommand{\Soldering}{Solderen}
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="#FFFFFF"><path d="M25.1 17.7l13.4.1c-4.9 4.9-7.8 11.2-8.8 18.3l-5.1-.1c-5.5-.2-9.8-4.3-9.7-9.3 0-5.1 4.5-9 10.2-9zm40.2 77.2c.9 2.2 6.9 14.4 6.9 14.4H55.1s5.5-11.5 6.7-14.4c1-2.2 2.5-2.3 3.5 0z"/><path d="M114.9 47.9c-1.1 4.3-5.5 7.5-10.9 7.5h-5c-.3.1-.5.3-.4.6v53.3h-9.1L72 73.1c1.8-2 2.9-4.7 2.9-7.6 0-4.8-2.8-9.1-7-10.8v-4.9c0-2.1-1.8-3.6-3.9-3.6h-.2c-2.1 0-3.9 1.8-3.9 3.9v4.6c-4.6 1.5-8 5.8-8 11 0 3 1.2 5.8 3.1 7.8l-17 35.9H23.1c-5.7 0-10.2-4.6-10.2-10.3V29.7s0-.6.1 0c.8 4.8 5 8.5 10.1 8.6H100c-.1 0 14.6-1.3 14.9 9.6z"/><path d="M63.3 59.8c3.1 0 5.7 2.6 5.6 5.8 0 3.1-2.6 5.7-5.8 5.6-3.1 0-5.6-2.6-5.6-5.7 0-1.5.6-2.9 1.7-4 1.2-1.1 2.6-1.7 4.1-1.7zm2.3-3.3v-6c0-.7-.3-1.3-.9-1.6-.9-.5-2-.2-2.5.7-.2.3-.3.6-.2 1v5.8c-5 .8-8.5 5.5-7.7 10.6v.1c.4 2.4 1.7 4.6 3.7 6l-21.3 45.7c-.8 1.6-.7 3.6.4 5.1 1.6 2.3 4.7 2.9 7 1.3.8-.5 1.4-1.3 1.8-2.1L60 92.5c.9-2 3.3-2.9 5.4-1.9.8.4 1.5 1.1 1.9 1.9l14.5 30.3c1.2 2.5 4.2 3.5 6.7 2.3s3.5-4.2 2.3-6.7L69 72.9c4-3.2 4.7-9.1 1.5-13.1-1.2-1.6-2.9-2.7-4.9-3.3m14-43.6h-.1l5.3-9.2c.3-.5.1-1.1-.3-1.5-.5-.2-1-.1-1.3.3L77.6 12c-8.7-3.9-18.7-3.9-27.5 0l-5.4-9.4c-.2-.3-.6-.6-1-.6s-.8.2-1 .6c-.2.4-.2.8 0 1.1l5.4 9.2c-8.8 4.9-14.6 13.3-16 23.1h63.8c-1.5-9.8-7.5-18.2-16.3-23.1zM51.2 28l-.4.4c-.5.5-1.2.8-1.9.8h.1c-1.5 0-2.7-1.2-2.7-2.6v-.1c0-.7.3-1.4.8-1.9.9-1.1 2.6-1.3 3.7-.4 1.3.9 1.4 2.6.4 3.8zm27.4 1c-1.5.1-2.7-1.1-2.7-2.6v-.1c0-.7.3-1.4.8-1.9 1-1 2.7-1 3.8 0 .5.5.8 1.2.8 1.9 0 1.6-1.2 2.7-2.7 2.7zm27.1 29h-4.2c-.2.1-.4.3-.4.6v66.5c0 .3.2.5.5.5h4.4c5.1 0 9.2-4.2 9.2-9.2 0 0-.1-61.1 0-63.4.1-2.4-.5-.7-.7-.2-1.5 3.2-4.8 5.3-8.6 5.3h-.2z"/><circle cx="63.3" cy="65.5" r="3.2"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB |
1
svg/k3s.svg
Normal file
1
svg/k3s.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="#FFFFFF"><path d="M114.434 11.875H13.547C6.074 11.898.023 17.949 0 25.422v77.719c.023 7.472 6.074 13.523 13.547 13.546h100.887c7.472-.023 13.523-6.074 13.546-13.546V25.42c-.023-7.472-6.074-13.523-13.546-13.546zM54.078 88.094l-24.621 14.308a6.592 6.592 0 01-9.008-2.386 6.59 6.59 0 012.387-9.008l24.621-14.309a6.587 6.587 0 019.012 2.383 6.593 6.593 0 01-2.39 9.012zm9.688-21.801h-.032a6.59 6.59 0 01-6.558-6.617l.125-28.364a6.587 6.587 0 016.586-6.562h.031a6.59 6.59 0 016.559 6.617l-.125 28.367a6.588 6.588 0 01-6.586 6.559zm43.562 33.703a6.585 6.585 0 01-9 2.41L73.672 88.172a6.589 6.589 0 116.59-11.41l24.656 14.234a6.586 6.586 0 012.41 9zm0 0"/></svg>
|
||||||
|
After Width: | Height: | Size: 723 B |
1
svg/kubernetes.svg
Normal file
1
svg/kubernetes.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="#FFFFFF"><g><path d="M56.484 55.098c.37.27.82.43 1.31.43 1.2 0 2.18-.95 2.23-2.13l.05-.03.75-13.26c-.9.11-1.8.26-2.7.46-4.93 1.12-9.2 3.55-12.54 6.83l10.87 7.71.03-.01zM55.034 74.528a2.218 2.218 0 00-2.58-1.69l-.02-.03-13.05 2.21a26.15 26.15 0 0010.51 13.15l5.06-12.22-.04-.05c.17-.42.23-.89.12-1.37zM50.694 65.118c.44-.12.85-.38 1.16-.76.75-.94.62-2.29-.28-3.07l.01-.05-9.93-8.88a26.07 26.07 0 00-3.7 16.48l12.73-3.67.01-.05zM60.334 69.018l3.66 1.76 3.66-1.75.9-3.95-2.53-3.16h-4.06l-2.54 3.16zM67.934 53.348c.02.46.18.91.49 1.29.75.94 2.1 1.11 3.06.41l.04.02 10.8-7.66c-4.08-3.99-9.4-6.6-15.15-7.3l.75 13.24h.01zM75.514 72.778c-.17-.03-.34-.05-.51-.04-.29.01-.58.09-.85.22a2.23 2.23 0 00-1.08 2.89l-.02.02 5.11 12.34c4.93-3.14 8.61-7.83 10.54-13.24l-13.16-2.23-.03.04zM65.954 79.318a2.246 2.246 0 00-2.04-1.17c-.77.03-1.5.46-1.89 1.18h-.01l-6.42 11.6a26.16 26.16 0 0014.27.73c.88-.2 1.74-.44 2.57-.72l-6.43-11.63h-.05z"/><path d="M124.544 76.788l-10.44-45.33a8.012 8.012 0 00-4.37-5.43l-42.24-20.18a8.157 8.157 0 00-3.92-.78 8.15 8.15 0 00-3.1.78l-42.24 20.18a8.055 8.055 0 00-4.37 5.43l-10.41 45.34a7.92 7.92 0 001.1 6.14c.14.22.3.43.46.64l29.24 36.35a8.087 8.087 0 006.32 3.01l46.89-.01c2.46 0 4.78-1.11 6.32-3.01l29.23-36.36a7.981 7.981 0 001.53-6.77zm-16.07-.55c-.31 1.35-1.76 2.17-3.26 1.85-.01 0-.03 0-.04-.01-.02 0-.03-.01-.05-.02-.21-.05-.47-.09-.65-.14-.86-.23-1.49-.58-2.27-.88-1.67-.6-3.06-1.1-4.41-1.3-.69-.05-1.04.27-1.42.52-.18-.04-.75-.14-1.08-.19-2.42 7.61-7.58 14.21-14.57 18.33.12.29.33.91.42 1.02-.16.43-.4.83-.19 1.49.49 1.27 1.28 2.52 2.24 4.01.46.69.94 1.22 1.36 2.02.1.19.23.48.33.68.65 1.39.17 2.99-1.08 3.59-1.26.61-2.82-.03-3.5-1.43-.1-.2-.23-.46-.31-.65-.36-.82-.48-1.52-.73-2.32-.57-1.68-1.05-3.07-1.73-4.25-.39-.57-.86-.64-1.29-.78-.08-.14-.38-.69-.54-.97-1.4.53-2.84.97-4.34 1.31-6.56 1.49-13.13.89-18.99-1.37l-.57 1.04c-.43.11-.84.23-1.09.53-.92 1.1-1.29 2.86-1.96 4.54-.25.79-.37 1.5-.73 2.32-.08.19-.22.45-.31.64v.01l-.01.01c-.67 1.39-2.23 2.03-3.49 1.43-1.25-.6-1.72-2.2-1.08-3.59.1-.2.22-.49.32-.68.42-.79.89-1.33 1.36-2.02.96-1.5 1.8-2.84 2.29-4.11.12-.42-.06-1-.22-1.43l.46-1.1c-6.73-3.99-12.04-10.34-14.58-18.21l-1.1.19c-.3-.17-.89-.56-1.45-.51-1.35.2-2.74.7-4.41 1.3-.78.3-1.4.64-2.27.87-.18.05-.44.1-.65.15-.02 0-.03.01-.05.02-.01 0-.03 0-.04.01-1.5.32-2.95-.5-3.26-1.85-.31-1.35.65-2.72 2.14-3.08.01 0 .03-.01.04-.01.01 0 .01 0 .02-.01.21-.05.48-.12.68-.16.88-.17 1.6-.13 2.43-.19 1.77-.19 3.23-.34 4.53-.75.41-.17.81-.74 1.09-1.1l1.06-.31c-1.19-8.22.82-16.28 5.16-22.81l-.81-.72c-.05-.32-.12-1.04-.51-1.46-.99-.93-2.25-1.71-3.76-2.64-.72-.42-1.38-.69-2.1-1.23-.15-.11-.36-.29-.52-.42-.01-.01-.03-.02-.04-.03-1.21-.97-1.49-2.64-.62-3.73.49-.61 1.24-.92 2.01-.89.6.02 1.23.24 1.76.66.17.14.41.32.56.45.68.58 1.09 1.16 1.66 1.77 1.25 1.27 2.28 2.32 3.41 3.08.59.35 1.05.21 1.5.15.15.11.63.46.91.65 4.3-4.57 9.96-7.95 16.52-9.44 1.53-.35 3.05-.58 4.57-.7l.06-1.07c.34-.33.71-.79.82-1.31.11-1.36-.07-2.82-.28-4.59-.12-.82-.31-1.51-.35-2.4-.01-.18 0-.44.01-.65 0-.02-.01-.05-.01-.07 0-1.55 1.13-2.81 2.53-2.81s2.53 1.26 2.53 2.81c0 .22.01.52.01.72-.03.89-.23 1.58-.35 2.4-.21 1.76-.4 3.23-.29 4.59.1.68.5.95.83 1.26.01.18.04.79.06 1.13 8.04.71 15.5 4.39 20.99 10.14l.96-.69c.33.02 1.04.12 1.53-.17 1.13-.76 2.16-1.82 3.41-3.08.57-.61.99-1.18 1.67-1.77.15-.13.39-.31.56-.45 1.21-.97 2.9-.86 3.77.23s.59 2.76-.62 3.73c-.17.14-.39.33-.56.45-.72.53-1.38.8-2.1 1.23-1.51.93-2.77 1.71-3.76 2.64-.47.5-.43.98-.48 1.43-.14.13-.63.57-.9.8a32.75 32.75 0 014.74 10.95c.92 3.99 1.06 7.97.53 11.8l1.02.3c.18.26.56.89 1.09 1.1 1.3.41 2.76.56 4.53.75.83.07 1.55.03 2.43.19.21.04.52.12.73.17 1.5.37 2.45 1.74 2.14 3.09z"/><path d="M86.274 52.358l-9.88 8.84.01.03c-.34.3-.6.7-.71 1.18-.27 1.17.44 2.33 1.58 2.65l.01.05 12.79 3.68c.27-2.76.11-5.62-.55-8.48-.66-2.89-1.77-5.56-3.25-7.95z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
1
svg/latex.svg
Normal file
1
svg/latex.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="#FFFFFF"><path d="M29.2 63H28c-.5 5.1-1.2 11.3-10 11.3h-4c-2.3 0-2.4-.3-2.4-2V45.8c0-1.7 0-2.4 4.7-2.4h1.6v-1.5c-1.9.1-6.3.1-8.4.1-1.9 0-5.8 0-7.5-.1v1.5h1.1c3.8 0 3.9.5 3.9 2.3v26.1c0 1.8-.1 2.3-3.9 2.3H2v1.5h25.8L29.2 63z"/><path d="M28.3 41.8c-.2-.6-.3-.8-.9-.8s-.8.2-1 .8l-8 20.3c-.3.8-.9 2.4-4 2.4v1.2h7.7v-1.2c-1.5 0-2.5-.7-2.5-1.7 0-.2 0-.3.1-.7l1.7-4.3h9.9l2 5.1c.1.2.2.4.2.6 0 1-1.9 1-2.8 1v1.2h9.8v-1.2h-.7c-2.3 0-2.6-.3-2.9-1.3l-8.6-21.4zm-1.9 3.6l4.4 11.3h-8.9l4.5-11.3z"/><path d="M68.2 42.2H37.9L37 53.3h1.2c.7-8 1.4-9.7 9-9.7.9 0 2.2 0 2.7.1 1 .2 1 .7 1 1.9v26.1c0 1.7 0 2.4-5.2 2.4h-2v1.5c2-.1 7.1-.1 9.4-.1s7.4 0 9.5.1v-1.5h-2c-5.2 0-5.2-.7-5.2-2.4v-26c0-1 0-1.7.9-1.9.5-.1 1.9-.1 2.8-.1 7.5 0 8.2 1.6 8.9 9.7h1.2l-1-11.2z"/><path d="M94.9 74.2h-1.2c-1.2 7.6-2.4 11.3-10.9 11.3h-6.6c-2.3 0-2.4-.3-2.4-2V70.2h4.4c4.8 0 5.4 1.6 5.4 5.8h1.2V62.9h-1.2c0 4.2-.5 5.8-5.4 5.8h-4.4v-12c0-1.6.1-2 2.4-2h6.4c7.6 0 8.9 2.7 9.7 9.7h1.2l-1.4-11.2H64.2v1.5h1.1c3.8 0 3.9.5 3.9 2.3v26c0 1.8-.1 2.3-3.9 2.3h-1.1V87h28.6l2.1-12.8z"/><path d="M109.9 56.6l6.8-10c1-1.6 2.7-3.2 7.2-3.2v-1.5H112v1.5c2 0 3.1 1.1 3.1 2.3 0 .5-.1.6-.4 1.1l-5.7 8.4-6.4-9.6c-.1-.1-.3-.5-.3-.7 0-.6 1.1-1.4 3.2-1.5v-1.5c-1.7.1-5.3.1-7.2.1-1.5 0-4.6 0-6.5-.1v1.5h.9c2.7 0 3.7.3 4.6 1.7l9.1 13.8-8.1 12c-.7 1-2.2 3.3-7.2 3.3v1.5H103v-1.5c-2.3 0-3.1-1.4-3.1-2.3 0-.4.1-.6.5-1.2l7-10.4 7.9 11.9c.1.2.2.4.2.5 0 .6-1.1 1.4-3.2 1.5v1.5c1.7-.1 5.4-.1 7.2-.1 2.1 0 4.4 0 6.5.1v-1.5h-.9c-2.6 0-3.6-.2-4.7-1.8l-10.5-15.8z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
1
svg/react.svg
Normal file
1
svg/react.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="#FFFFFF"><g><circle cx="64" cy="64" r="11.4"/><path d="M107.3 45.2c-2.2-.8-4.5-1.6-6.9-2.3.6-2.4 1.1-4.8 1.5-7.1 2.1-13.2-.2-22.5-6.6-26.1-1.9-1.1-4-1.6-6.4-1.6-7 0-15.9 5.2-24.9 13.9-9-8.7-17.9-13.9-24.9-13.9-2.4 0-4.5.5-6.4 1.6-6.4 3.7-8.7 13-6.6 26.1.4 2.3.9 4.7 1.5 7.1-2.4.7-4.7 1.4-6.9 2.3C8.2 50 1.4 56.6 1.4 64s6.9 14 19.3 18.8c2.2.8 4.5 1.6 6.9 2.3-.6 2.4-1.1 4.8-1.5 7.1-2.1 13.2.2 22.5 6.6 26.1 1.9 1.1 4 1.6 6.4 1.6 7.1 0 16-5.2 24.9-13.9 9 8.7 17.9 13.9 24.9 13.9 2.4 0 4.5-.5 6.4-1.6 6.4-3.7 8.7-13 6.6-26.1-.4-2.3-.9-4.7-1.5-7.1 2.4-.7 4.7-1.4 6.9-2.3 12.5-4.8 19.3-11.4 19.3-18.8s-6.8-14-19.3-18.8zM92.5 14.7c4.1 2.4 5.5 9.8 3.8 20.3-.3 2.1-.8 4.3-1.4 6.6-5.2-1.2-10.7-2-16.5-2.5-3.4-4.8-6.9-9.1-10.4-13 7.4-7.3 14.9-12.3 21-12.3 1.3 0 2.5.3 3.5.9zM81.3 74c-1.8 3.2-3.9 6.4-6.1 9.6-3.7.3-7.4.4-11.2.4-3.9 0-7.6-.1-11.2-.4-2.2-3.2-4.2-6.4-6-9.6-1.9-3.3-3.7-6.7-5.3-10 1.6-3.3 3.4-6.7 5.3-10 1.8-3.2 3.9-6.4 6.1-9.6 3.7-.3 7.4-.4 11.2-.4 3.9 0 7.6.1 11.2.4 2.2 3.2 4.2 6.4 6 9.6 1.9 3.3 3.7 6.7 5.3 10-1.7 3.3-3.4 6.6-5.3 10zm8.3-3.3c1.5 3.5 2.7 6.9 3.8 10.3-3.4.8-7 1.4-10.8 1.9 1.2-1.9 2.5-3.9 3.6-6 1.2-2.1 2.3-4.2 3.4-6.2zM64 97.8c-2.4-2.6-4.7-5.4-6.9-8.3 2.3.1 4.6.2 6.9.2 2.3 0 4.6-.1 6.9-.2-2.2 2.9-4.5 5.7-6.9 8.3zm-18.6-15c-3.8-.5-7.4-1.1-10.8-1.9 1.1-3.3 2.3-6.8 3.8-10.3 1.1 2 2.2 4.1 3.4 6.1 1.2 2.2 2.4 4.1 3.6 6.1zm-7-25.5c-1.5-3.5-2.7-6.9-3.8-10.3 3.4-.8 7-1.4 10.8-1.9-1.2 1.9-2.5 3.9-3.6 6-1.2 2.1-2.3 4.2-3.4 6.2zM64 30.2c2.4 2.6 4.7 5.4 6.9 8.3-2.3-.1-4.6-.2-6.9-.2-2.3 0-4.6.1-6.9.2 2.2-2.9 4.5-5.7 6.9-8.3zm22.2 21l-3.6-6c3.8.5 7.4 1.1 10.8 1.9-1.1 3.3-2.3 6.8-3.8 10.3-1.1-2.1-2.2-4.2-3.4-6.2zM31.7 35c-1.7-10.5-.3-17.9 3.8-20.3 1-.6 2.2-.9 3.5-.9 6 0 13.5 4.9 21 12.3-3.5 3.8-7 8.2-10.4 13-5.8.5-11.3 1.4-16.5 2.5-.6-2.3-1-4.5-1.4-6.6zM7 64c0-4.7 5.7-9.7 15.7-13.4 2-.8 4.2-1.5 6.4-2.1 1.6 5 3.6 10.3 6 15.6-2.4 5.3-4.5 10.5-6 15.5C15.3 75.6 7 69.6 7 64zm28.5 49.3c-4.1-2.4-5.5-9.8-3.8-20.3.3-2.1.8-4.3 1.4-6.6 5.2 1.2 10.7 2 16.5 2.5 3.4 4.8 6.9 9.1 10.4 13-7.4 7.3-14.9 12.3-21 12.3-1.3 0-2.5-.3-3.5-.9zM96.3 93c1.7 10.5.3 17.9-3.8 20.3-1 .6-2.2.9-3.5.9-6 0-13.5-4.9-21-12.3 3.5-3.8 7-8.2 10.4-13 5.8-.5 11.3-1.4 16.5-2.5.6 2.3 1 4.5 1.4 6.6zm9-15.6c-2 .8-4.2 1.5-6.4 2.1-1.6-5-3.6-10.3-6-15.6 2.4-5.3 4.5-10.5 6-15.5 13.8 4 22.1 10 22.1 15.6 0 4.7-5.8 9.7-15.7 13.4z"/></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
68
tool/Cargo.lock
generated
68
tool/Cargo.lock
generated
@@ -23,6 +23,12 @@ version = "0.15.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "equivalent"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gray_matter"
|
name = "gray_matter"
|
||||||
version = "0.2.6"
|
version = "0.2.6"
|
||||||
@@ -31,7 +37,23 @@ checksum = "1cf2fb99fac0b821a4e61c61abff076324bb0e5c3b4a83815bbc3518a38971ad"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"toml",
|
"yaml-rust",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.14.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
|
||||||
|
dependencies = [
|
||||||
|
"equivalent",
|
||||||
|
"hashbrown",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -40,6 +62,12 @@ version = "1.0.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.5.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.6.1"
|
version = "2.6.1"
|
||||||
@@ -139,6 +167,19 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.29"
|
version = "2.0.29"
|
||||||
@@ -150,15 +191,6 @@ dependencies = [
|
|||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "toml"
|
|
||||||
version = "0.5.11"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tool"
|
name = "tool"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -168,6 +200,7 @@ dependencies = [
|
|||||||
"gray_matter",
|
"gray_matter",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_yaml",
|
||||||
"walkdir",
|
"walkdir",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -177,6 +210,12 @@ version = "1.0.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "walkdir"
|
name = "walkdir"
|
||||||
version = "2.3.3"
|
version = "2.3.3"
|
||||||
@@ -217,3 +256,12 @@ name = "winapi-x86_64-pc-windows-gnu"
|
|||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yaml-rust"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
|
||||||
|
dependencies = [
|
||||||
|
"linked-hash-map",
|
||||||
|
]
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ edition = "2021"
|
|||||||
anyhow = "1.0.75"
|
anyhow = "1.0.75"
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
gray_matter = { version = "0.2.6", features = [
|
gray_matter = { version = "0.2.6", features = [
|
||||||
"toml",
|
"yaml",
|
||||||
], default-features = false }
|
], default-features = false }
|
||||||
regex = "1.9.4"
|
regex = "1.9.4"
|
||||||
serde = { version = "1.0.188", features = ["derive"] }
|
serde = { version = "1.0.188", features = ["derive"] }
|
||||||
|
serde_yaml = "0.9.25"
|
||||||
walkdir = "2.3.3"
|
walkdir = "2.3.3"
|
||||||
|
|||||||
111
tool/src/main.rs
111
tool/src/main.rs
@@ -4,29 +4,34 @@ use std::{
|
|||||||
path::Path,
|
path::Path,
|
||||||
};
|
};
|
||||||
|
|
||||||
use gray_matter::{engine::TOML, Matter};
|
use gray_matter::{engine::YAML, Matter};
|
||||||
use regex::{Captures, Regex};
|
use regex::{Captures, Regex};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
#[serde(tag = "type")]
|
|
||||||
enum FrontMatter {
|
|
||||||
Project { title: String, url: String },
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
fn main() -> anyhow::Result<()> {
|
||||||
dotenvy::dotenv().ok();
|
dotenvy::dotenv().ok();
|
||||||
|
|
||||||
generate_latex()?;
|
|
||||||
|
|
||||||
generate_readme()?;
|
generate_readme()?;
|
||||||
|
|
||||||
|
generate_lang("en")?;
|
||||||
|
generate_lang("nl")?;
|
||||||
|
|
||||||
|
generate_latex_from_md()?;
|
||||||
|
generate_latex_from_yml()?;
|
||||||
|
generate_latex_private()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_latex() -> anyhow::Result<()> {
|
#[derive(Debug, Deserialize)]
|
||||||
let matter = Matter::<TOML>::new();
|
#[serde(rename_all = "snake_case")]
|
||||||
|
enum FrontMatter {
|
||||||
|
Project { title: String, url: String },
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_latex_from_md() -> anyhow::Result<()> {
|
||||||
|
let matter = Matter::<YAML>::new();
|
||||||
|
|
||||||
let prefix = Path::new("../markdown");
|
let prefix = Path::new("../markdown");
|
||||||
|
|
||||||
@@ -37,12 +42,12 @@ fn generate_latex() -> anyhow::Result<()> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("{entry:#?}");
|
|
||||||
|
|
||||||
let mut file = File::open(entry.path()).unwrap();
|
let mut file = File::open(entry.path()).unwrap();
|
||||||
let mut contents = String::new();
|
let mut contents = String::new();
|
||||||
file.read_to_string(&mut contents).unwrap();
|
file.read_to_string(&mut contents).unwrap();
|
||||||
|
|
||||||
|
println!("Converting '{entry:?}' into LaTeX");
|
||||||
|
|
||||||
let result = matter.parse(&contents);
|
let result = matter.parse(&contents);
|
||||||
let content = format!(
|
let content = format!(
|
||||||
"\\begin{{markdown}}\n{}\n\\end{{markdown}}\n",
|
"\\begin{{markdown}}\n{}\n\\end{{markdown}}\n",
|
||||||
@@ -62,15 +67,72 @@ fn generate_latex() -> anyhow::Result<()> {
|
|||||||
content
|
content
|
||||||
};
|
};
|
||||||
|
|
||||||
let path = entry.path().strip_prefix(prefix)?.with_extension("tex");
|
let path = entry.path().strip_prefix(prefix)?.with_extension("md.tex");
|
||||||
let path = Path::new("../latex").join(path);
|
let path = Path::new("../latex").join(path);
|
||||||
create_dir_all(path.parent().unwrap())?;
|
create_dir_all(path.parent().unwrap())?;
|
||||||
let mut file = File::create(path)?;
|
let mut file = File::create(path)?;
|
||||||
file.write_all(contents.as_bytes())?;
|
file.write_all(contents.as_bytes())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
struct Entry {
|
||||||
|
name: String,
|
||||||
|
description: String,
|
||||||
|
at: String,
|
||||||
|
start: isize,
|
||||||
|
end: Option<isize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_latex_from_yml() -> anyhow::Result<()> {
|
||||||
|
let prefix = Path::new("../yaml");
|
||||||
|
|
||||||
|
for entry in WalkDir::new(prefix).into_iter() {
|
||||||
|
let entry = entry?;
|
||||||
|
|
||||||
|
if entry.metadata()?.is_dir() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut file = File::open(entry.path()).unwrap();
|
||||||
|
let mut contents = String::new();
|
||||||
|
file.read_to_string(&mut contents).unwrap();
|
||||||
|
|
||||||
|
println!("Converting '{entry:?}' into LaTeX");
|
||||||
|
|
||||||
|
let data: Vec<Entry> = serde_yaml::from_str(&contents)?;
|
||||||
|
|
||||||
|
let mut content = String::new();
|
||||||
|
for entry in data {
|
||||||
|
let date = if entry.end.is_none() {
|
||||||
|
format!("{} -- \\Now", entry.start)
|
||||||
|
} else if entry.start == entry.end.unwrap() {
|
||||||
|
format!("{}", entry.start)
|
||||||
|
} else {
|
||||||
|
format!("{} -- {}", entry.start, entry.end.unwrap())
|
||||||
|
};
|
||||||
|
|
||||||
|
content = format!(
|
||||||
|
"{content}\\entry\n\t{{{date}}}\n\t{{{}}}\n\t{{{}}}\n\t{{{}}}\n",
|
||||||
|
entry.name, entry.at, entry.description
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let path = entry.path().strip_prefix(prefix)?.with_extension("yml.tex");
|
||||||
|
let path = Path::new("../latex").join(path);
|
||||||
|
create_dir_all(path.parent().unwrap())?;
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
file.write_all(content.as_bytes())?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn generate_latex_private() -> anyhow::Result<()> {
|
||||||
let private = format!(
|
let private = format!(
|
||||||
"\\newcommand{{\\city}}{{{}}}\n\\newcommand{{\\phone}}{{{}}}\n\\newcommand{{\\email}}{{{}}}\n",
|
"\\newcommand{{\\City}}{{{}}}\n\\newcommand{{\\Phone}}{{{}}}\n\\newcommand{{\\Email}}{{{}}}\n",
|
||||||
std::env::var("CITY")?,
|
std::env::var("CITY")?,
|
||||||
std::env::var("PHONE")?,
|
std::env::var("PHONE")?,
|
||||||
std::env::var("EMAIL")?,
|
std::env::var("EMAIL")?,
|
||||||
@@ -88,7 +150,7 @@ fn generate_readme() -> anyhow::Result<()> {
|
|||||||
let mut contents = String::new();
|
let mut contents = String::new();
|
||||||
file.read_to_string(&mut contents)?;
|
file.read_to_string(&mut contents)?;
|
||||||
|
|
||||||
let matter = Matter::<TOML>::new();
|
let matter = Matter::<YAML>::new();
|
||||||
|
|
||||||
let re = Regex::new(r"\#\{(.*)\}").expect("Regex should be valid");
|
let re = Regex::new(r"\#\{(.*)\}").expect("Regex should be valid");
|
||||||
let contents = re.replace_all(&contents, |caps: &Captures| {
|
let contents = re.replace_all(&contents, |caps: &Captures| {
|
||||||
@@ -118,3 +180,20 @@ fn generate_readme() -> anyhow::Result<()> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_lang(lang: &str) -> anyhow::Result<()> {
|
||||||
|
let main = Path::new("../main.tex");
|
||||||
|
|
||||||
|
let mut file = File::open(main)?;
|
||||||
|
let mut contents = String::new();
|
||||||
|
file.read_to_string(&mut contents)?;
|
||||||
|
|
||||||
|
let contents = contents.replace("{{lang}}", lang);
|
||||||
|
|
||||||
|
let path = main.with_extension(format!("{lang}.tex"));
|
||||||
|
println!("Generating '{path:?}'");
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
file.write_all(contents.as_bytes()).unwrap();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
11
yaml/education.en.yml
Normal file
11
yaml/education.en.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
- name: Applied Physics MSc
|
||||||
|
description: With a focus on Quantum Computation focused courses
|
||||||
|
at: Delft University of Technology
|
||||||
|
start: 2019
|
||||||
|
end: 2024
|
||||||
|
|
||||||
|
- name: Applied Physics BSc
|
||||||
|
description: With a minor in Electronics for Robotics
|
||||||
|
at: Delft University of Technology
|
||||||
|
start: 2016
|
||||||
|
end: 2019
|
||||||
11
yaml/education.nl.yml
Normal file
11
yaml/education.nl.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
- name: Applied Physics MSc
|
||||||
|
description: Met een focus op Quantum Computation gerelateerde vakken.
|
||||||
|
at: TU Delft
|
||||||
|
start: 2019
|
||||||
|
end: 2024
|
||||||
|
|
||||||
|
- name: Technische Natuurkunde BSc
|
||||||
|
description: Met een minor in Electronics for Robotics.
|
||||||
|
at: TU Delft
|
||||||
|
start: 2016
|
||||||
|
end: 2019
|
||||||
54
yaml/experience.en.yml
Normal file
54
yaml/experience.en.yml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
- name: Consultant
|
||||||
|
description: |
|
||||||
|
As a consultant for ALTEN I bring my software development expertise to other companies to help them out with various projects.
|
||||||
|
But when I between assignments
|
||||||
|
The goal of this project is to take in measurement data, collected by sending vibrations into the earth and measuring the response in several different location, and performing a process called full wave inversion.
|
||||||
|
This process makes it possible to gain insight into the speed of the soundwaves underground and could therefore reveal certain properties underground.
|
||||||
|
|
||||||
|
I have worked on almost all aspects of this project, ranging from building the User Interface, to refactoring the codebase, to improving the build system and Azure Devops pipeline.
|
||||||
|
|
||||||
|
at: ALTEN
|
||||||
|
start: 2024
|
||||||
|
|
||||||
|
- name: Software Developer (via ALTEN)
|
||||||
|
description: |
|
||||||
|
At Grimbergen they were working on a robot to mill the rough surface of the walls of the Hubertustunnel in The Hague, but the project started to run out of time.
|
||||||
|
So a couple of colleagues and I where brought in to turn to project around. During this project the deadlines where very tight, only one month before a big test and demo, and only three months before the project needed to be finished.
|
||||||
|
During this time I had to quickly learn ROS (Robot Operating System) as I had no prior experience, but within no time I was speed and ended up playing a leading role in ensuring the project was (for the most part) done in time.
|
||||||
|
|
||||||
|
As the robot is currently deployed I have taken a maintenance role in the project fixing issues as they popup, while also taking part in the startup phase for the next project.
|
||||||
|
|
||||||
|
at: Grimbergen
|
||||||
|
start: 2025
|
||||||
|
|
||||||
|
- name: Software Developer (via ALTEN)
|
||||||
|
description: |
|
||||||
|
I was brought in to update the Yocto Linux based embedded Linux distribution running on several of their public transit products to the latest version.
|
||||||
|
During this project I was essentially the sole developer working on this update and as a result I had a wide range of responsibilities.
|
||||||
|
This included updating build files so they would build with the new version, testing the new distribution to ensure everything worked, updating the installation tools to ensure compatibility, and modifying the FTDI linux driver to support an odd configuration that was not properly accounted for in the hardware.
|
||||||
|
|
||||||
|
At the same time I was also in charge of maintaining the existing distribution and fixing issues in both the old and new distribution when they got reported.
|
||||||
|
|
||||||
|
at: SWARCO
|
||||||
|
start: 2024
|
||||||
|
end: 2025
|
||||||
|
|
||||||
|
- name: Intern
|
||||||
|
description: |
|
||||||
|
As intern for ALTEN I mapped out the different parts of the Chengeta Wildlife poacher detection project, developed by previous interns.
|
||||||
|
Based on this I put together a plan with concrete steps for further development of the project, with focus on integrating the existing work together.
|
||||||
|
at: ALTEN
|
||||||
|
start: 2023
|
||||||
|
end: 2024
|
||||||
|
|
||||||
|
- name: App Developer
|
||||||
|
description: Developed an internal Android app in Java to aid in the calibration of IoT temperature sensors
|
||||||
|
at: EOCE
|
||||||
|
start: 2019
|
||||||
|
end: 2019
|
||||||
|
|
||||||
|
- name: Teaching Assistant
|
||||||
|
description: Helped other students with questions and their homework during tutorial sessions for the course Electromagnetism.
|
||||||
|
at: Delft University of Technology
|
||||||
|
start: 2018
|
||||||
|
end: 2019
|
||||||
19
yaml/experience.nl.yml
Normal file
19
yaml/experience.nl.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
- name: Stagair
|
||||||
|
description: |
|
||||||
|
Als stagair voor ALTEN heb ik de verschillende onderdelen van het Chengeta Wildlife stropers detectie project, verricht door eerdere stagairs, duidelijk in kaart gebracht.
|
||||||
|
Aan de hand van dit eerdere verrichte werk heb ik een plan opgestelt met concrete stappen om dit project verder door te ontwikkelen tot een geheel.
|
||||||
|
at: ALTEN Nederland
|
||||||
|
start: 2023
|
||||||
|
end: 2024
|
||||||
|
|
||||||
|
- name: App Developer
|
||||||
|
description: Interne Android app ontwikkeld in Java voor het kalibreren van IoT temperatuursensoren.
|
||||||
|
at: EOCE
|
||||||
|
start: 2019
|
||||||
|
end: 2019
|
||||||
|
|
||||||
|
- name: Teaching Assistant
|
||||||
|
description: Tijdens werkcolleges voor het vak Elektromagnetisme andere studenten helpen met vragen en het maken van huiswerk
|
||||||
|
at: TU Delft
|
||||||
|
start: 2018
|
||||||
|
end: 2019
|
||||||
Reference in New Issue
Block a user