Welcome !

This is where I'll mostly be writing about myself and my projects. If you have any questions or want to get in touch for other reasons, feel free to send me a mail at contact [at] cbouthoorn {dot} nl.

Who am I?

I am Charlie, a programmer from the Netherlands. Currently I'm studying Computer Science full-time and working as a Software Engineer part-time. My hobbies include programming (obviously), and playing card games with friends. Sadly the COVID-19 pandemic has put a temporary hold on the latter, but the former is still going strong.

My programming history

I write code in a variety of languages. I started out with programming small batch scripts and quizes sometime around 2010, for example to open my CD drive or copy a bunch of files from a set of floppies to a directory. This was also when I wrote a few very simple web pages, solving parts of my math homework in JavaScript. Soon after, I started digging into Java to write Minecraft mods, which was a hot topic at that time. For side projects I mostly used Ruby, PHP, and CoffeeScript.

A few years later I started to take programming more seriously, and made a puzzle game in Lua with a friend at highschool. After that I used C++11 to make a basic compiler for the DSL of my calculator, which I also spent a significant amount of time hacking on. For the programming competitions I participated in, I used Python and also learned some C. Even later, Rust got popular and I started using that. As of today Rust is still my preferred choice for hobby projects, but I use C++ and JavaScript in a professional setting.

Some examples

Because I haven't had much free time since I've started working, I don't have a lot of recent projects in all programming languages I know. To still give an idea of what I can do, I've included several older projects. Please do note that I have not stopped learning or using the respective languages. I may do some things differently now than I did back when I made the project.

arium Rust TypeScript Vue 2021

At the time of writing, this project is still in a very early phase. Most of the plans are still on paper, but the idea is to make my own online calendar. It will be composed of a daemon, authentication helpers, a web server, and a web frontend. All parts will be modular and easily replaceable. Despite that, I still aim to get as most compiler checking as possible. For example, the structure of the API is specified directly into Rust, and compiled to TypeScript as well. Both the backend and the frontend use this API, so this means that the compiler will emit errors if there would be an inconsistency.

This project has several reasons to come into existence. Most importantly I created it because Google Calendar feels too limiting for me, and there don't seem to be any other good alternatives. A second reason is that I want to have a bigger project to work on, since most of my hobby projects are rather small. Besides that I also feel that it will be a great test to see how well my Rust and TypeScript skills are, and a way to learn Vue.

face TypeScript 2020

This is just a small clockface for my smartwatch. The interesting code can be found in app/index.ts. I've included this project in this list to show what I think is important and characteristic for my programming history: I love to hack on a lot of different things. If I don't like the stock options and the device has some sort of API, there is a 95% guarantee that I'll write my own code for it.

unsafe-unicorns Rust 2019

A word play on turning Unstable into unsafe, this is a project in which I'm porting one of my favourite card games into a digital version. With the start of the pandemic it became immoral to get together with friends to play card games, so I decided to take the task upon myself to turn this long favourite game into a digital version. This project is the backend, the frontend is still to be started upon. This project is on the list to show both my Rust skills and my willingness to accept a problem (like a pandemic) and turn a new solution out of it.

cirq C 2018

cirq was a simulator for electronic circuits. The idea was to be able to build small circuits from basic gates such as the AND, OR and NOT gate, and then compile them into its own circuit. These new circuits will then became available in the GUI as well, which can be reused to keep building on top of each other.

I have created and used this because I wanted to build a breadboard computer but didn't have the available hardware. In the end I managed to get a simple ALU to run on it, supporting ADD and SUB operations.

The reason I included this project in this list is because not only does it show my C proficiency, it also shows that I'm very interested in low hardware level computing. Besides this project I've also made some more circuits and simple calculators, including one in redstone.

rust-glass Rust 2017

A simple compiler written in Rust from an Esolang to JavaScript. This project was mostly for fun, because I really love esolangs and writing compilers.

feroxide Rust 2017

During high school I really liked Chrocodile Chemistry - a chemistry simulator. Sadly it was proprietary and paid-only, so I couldn't install it on my own laptop. Together with my chemistry teacher I decided to make an open source equivalent. Most of the work was put into the logic, but I also made a mockup interface: feroxide-gui.

skye PHP 2018

Laravel was a bit too big for the small projects I wanted to make, so I decided to make a minimal framework which fits the Model View Controller concept. This is also a project where I decided to look more into the OOP-possibilities with PHP. I've included this project in this list because it's the most recent public work I have which is written in PHP. My more recent work on a PHP codebase is all private.

thorium TypeScript 2018

One of Telegram's most popular bots is Combot. This bot collects statistics from all chats in it, and shows these in a nice graph. You can for example see who sends most messages in a certain group, during which times most messages are sent, who sends the most pictures, etc. The downside of this bot is that it's closed source, so no one knows who gets to read all of your (sometimes intimate) messages. That's why a friend and I decided to make our own open-source version. I made the backend of the website, based on Node and ExpressJS.

Other skills

Spoken languages

Besides programming languages, I'm also very interested in human languages. My native language is Dutch, and I've scored C2 on the Cambridge English exam in 2018. Furthermore I've been interested in Swedish since a child and have studied it at university for 1.5 years. I have not taken any formal exam, but I would estimate myself to be around C1 in receiving and B2 in producing Swedish.

Pentesting

The only thing I like more than building systems is breaking systems. Already during high school I found my way around silly restrictions by poking around in the software installed on the school laptops with my teacher's permission. In 2017 I also found an exploit in one of Ziggo's routers, which allowed any website to route all of the visitors' network data through any proxy. This was possible because the router did not do any CSRF checking on their forms, the login status was not bound to any session or cookie, and the logout procedure was bugged. I reported my findings directly to Ziggo, and they patched it a few years later.

My most recent exploit was found in the website of a health provider. I was able to rewrite the URL in such a way that any user who clicked the link would send their session token to a 3rd-party, because they didn't take into account that links such as <a href="javascript:alert(1)"></a> are in fact another way to do XSS. I reported this the same day I found it, and it was patched 2 days after.

Another way I like to test my pentesting skills is with wargames. The most notable one is OverTheWire's Natas wargame, where I managed to get up to Level 29. After that they start to dive into Perl, which I sadly don't know much about yet.

Linux

Just like I like to jump around programming languages to see what fits me best, I've also been hopping operating systems for quite a while. I switched to Ubuntu 12.04 in 2012 when Windows 8 came out and broke my laptop. With a few patches to and customisation of Unity, I kept this setup for about 3 years. After that it was time for something new, so I started exploring: I used Fedora, OpenSUSE, and probably some others for varying times, and eventually settled with Antergos. It was based on Arch Linux but still had the familiar Gnome. When that project discontinued in 2019, I moved to Manjaro, which was the closest other distribution at the time. At the time of writing I'm running Manjaro + i3 on my personal laptop, Ubuntu 20.04 on my work laptop, and Arch Linux on my VPS.

Tools and frameworks

Over the past few years I've used a lot of tools. These are certainly not the only ones, but I think they deserve to be mentioned at least once:

JavaScript/TypeScript
  • Webpack
  • Browserify
  • babel
  • ExpressJS
  • jQuery
  • lodash
DevOps
Version Control
  • git
  • Subversion
Pentesting
  • Metasploit
  • Burpsuite
  • nmap
  • sqlmap
  • aircrack-ng

Thanks to

IPv6 Certification ID

Footer

All code on this page is written by me and is provided by the MIT licence.