Welcome to my journey with technology. On this page, I will be continuing to document my experiences with different technologies. I use this page as a tool for myself to reference my knowledge about different tools, libraries, frameworks and programming languages. I document things that I have worked with while at work or in my spare time. All experiences are sorted by date from the most recent descending to the oldest.
The currently most popular and at the same time most confusing frontend package manager. I have used Webpack for my Typescript based Projects and began to really like it. The tool certainly has an initial learning curve.
Kubernetes, the Opensource Cluster Manager from Google, has come to my attention via various Blog posts and Talks on the Internet. Based on the ideas of Googles own intern Cluster Manager Borg, Kuberenetes is a remarkably well designed tool. The kubectl command line utility is really powerful. I’m currently using Kubernetes on the Goolge Cloud via the Container Engine offering.
After listening to many Google Cloud Platform Podcasts on my way to work, I decided to check out what the Platform has to offer. I’m really impressed by the tools and services offered by Google. The web-based cloud console and the terminal cloud commands are a really effective way to provision resources in the cloud. I deployed this Blog on Google Cloud and I will definitely use it for future projects.
After already having heard and read a lot about WordPress, I was always hesitant to set it up myself and learn about it. One of the reasons for my ignorance were the stories about WordPress Sites getting hacked. Better late than never I decided to try it out and started to learn about the core of WordPress and the Plugin system. I started this Blog as my first WordPress based Site. I then implemented the Page you’re currently viewing as a Plugin. It allows me to enter my journey with Technology in the Admin as a custom Post type and display it here via a custom shortcode. For the deployment, I’m using a docker image that allows me to deploy WordPress in a stateless way.
The Spring Boot Frameworks makes it very easy to configure Spring Application Context without ever using XML. I really like the Autoconfiguration part of the Framework. I have built an E-commerce frontend application using Spring Boot with an embedded servlet container and packaged into a Docker container.
A really reliable open source TCP based load balancer. I use Haproxy for cluster internal proxying.
I have used ansible to deploy and configure all my Linux Servers. The tool is simple and really powerful. The concept of describing server state via Playbooks and deploying/matching the desired via Ansible saves a lot of time and headache. I even use it now to setup my local dev machines.
I have used the Mesos Framework Marathon to deploy Docker-based applications on a Mesos Cluster. The framework enabled me to build a private Platform as a Service infrastructure.
I saw a tech talk by Benjamin Hindman and was introduced to the concept of Cluster management software. Based on Googles own internal Cluster Manager called ‘Borg’, Benjamin developed an open source version called Mesos. At the time the software was already powering a large part of Twitter’s servers. I remember building Mesos from source and playing around with a local setup. The concept of viewing your Cluster of servers as a single resource really made a lot of sense to me. I introduced Mesos at work and at the time of writing this, I’m running a production Mesos Cluster with a total of 1TB RAM.
Right when docker came out, I became really excited about its concepts of containerization and reproducible application environments. Based on cgroups developed by Google, docker was very useful to me and many others. I first started using it for my local dev environment and later used it to deploy all production applications at work.
In the last year of my apprenticeship as a software developer, I could choose between a handful of one week long courses about a specific topic. I took the course ‘App Programming in Java’. We had one week to learn the Android Platform and build a simple app. I was introduced to the Model View Presenter concepts of Android programming. With that knowledge built an App that stored Infos about items that I have lent to friends. The app was backed by a local SqlLite database.
In 2014 I read a lot about the Scala programming language. Scala was mentioned quite a lot on the common JVM blogs so I gave it a shot and read a book about it. The fact that the language was invented by Martin Odersky, who lives in Switzerland, has made me even more interested in learning the language. The functional aspect of the language was new and very interesting to me. This was before Java 8 was released. It took some time to get used to the scala syntax. I have learned about programming concepts that include functional programming, immutable state, pure functions, currying, pattern matching and higher order functions.
After evaluating the many ways of doing dependency injection, I was introduced to the Spring Framework. I decided to learn Spring Core and use Spring for all my dependency injection/configuration stuff. Spring is my absolute favorite Java Framework. I really like the good documentation and the many different library parts of spring. Some of my favorite spring libs are; spring-data, spring-security, spring-session and spring-boot.
I personally prefer Spring over JavaEE at any time.
At work, I was tasked with building a dynamic product configurator. After some research, I found the Angular v1 framework by google. I really liked the concepts. 2-way data binding in the browser seemed like an awesome idea. Since then I built a lot of frontend code with angular v1.
JSF is probably the most productive UI framework. You can build UIs pretty fast with it. I have used the Primefaces library which is very well maintained. We use it at work mostly for backends and I think that’s the only part where it shines. I strongly dislike the whole abstraction layer over the web standards and the statefulness of the framework.
At the time of writing this, we use JBoss AS 7.1 at work for some of our web frontends. Our service layers are written in EJB 3.1.
My favorite java application server. I use Tomcat for all my personal servlet-based web applications.
I first used hibernate at work when I was introduced to it in a course about java. I a really complete Object Relation Mapping framework.
I now use hibernate routinely at work and together with QueryDsl.
At work, our team hired a professor to teach us about the Java programming language. Over several weeks we studied together every Friday to get a good introduction to the language tooling and the most common frameworks. We looked at JavaEE and Spring Framework including the different types of dependency injection mechanisms. Since then I have used Java extensively at work and it is at the time of writing, the language I’m the most productive in. I’m also a big fan of the JVM itself.
I have used Nginx on many occasions and will continue to use it for all external traffic related purposes, be it service static files or providing a reverse proxy. Nginx is my favorite server application.
In school, we had the opportunity to build a mobile application. I chose the ios platform and learned objective c. I remember building an app that uses Google Maps to display some information about shopping centers around you. The syntax for method invocation with brackets took some time to get used to. I also was introduced to the memory management concept of reference counting.
I bought a book about the Metasploit penetration test framework. I played a little with the available exploits to gain access to my own vulnerable systems. The framework is quite amazingly built and the payload uses a technique called reflective DDL injection ( https://github.com/stephenfewer/ReflectiveDLLInjection ) which is a really neat concept. Metasploit showed me how easy it is to gain access to a vulnerable system with a public available exploit.
I learned the basics of the assembly language with the mentioned book ‘Hacking The Art of Exploitation’. I began to understand how the CPU executes machine code and how to invoke system calls.
Hacking The Art of Exploitation
I bought the book ‘Hacking – The art of exploitation’ to gain an understanding how applications and systems are hacked. This book gave me a deeper understanding how a program is executed by the operating system and the CPU. I highly recommend this book. I learned how shellcode exploits work and even built some small exploits for my own vulnerable executables. I learned how exploits can manipulate the control flow of a program. This gave me the understanding of writing safe code, which in low-level languages is quite hard.
I disliked my PHP code which was not clearly structured and the embedding of PHP in HTML made it even worse. So I started using the Zend Framework (https://framework.zend.com/) for PHP. This was also my first introduction to the Model View Controller pattern.
I started using Mysql as a persistent data store for building websites in conjunction with PHP.
In the computer course about operating systems we worked with ubuntu and I got introduced to the bash command line. This lead to the understanding that each command is, in fact, an executable itself and the shell simply executes the executable with the provided arguments. The chaining of commands with the use of pipes also made a lot of sense to me.
I learned that most servers are running a Unix based system which motivated me to set up my own Linux based servers.
In school, we had a course about dynamic web pages and started using PHP for handling form submissions and displaying user-generated content. At the time I really liked the implicit types of PHP.
Socks 5 Protocol
I became interested in proxy servers. Particularly on the traceability on the internet, I found the Socks5 protocol and implemented a server using the Boost Asio network library that understands the protocol.
QT UI Framework
I have used QT as a cross-platform UI Framework for a Server Client Application Config Interface.
C++ Boost Framework
While learning C++, I discovered the truly amazing C++ Framework called Boost. I have used the Boost.Asio library to build async socket server and client applications.
I wanted to build UI applications and learn object oriented programming so I bought the book “Visual C++ 2008”. The book started with ANSI C++ and later moved to the managed version C++/CLI running on .NET, it gave me a really good introduction to object oriented programming. I built some Windows Forms applications including a remote control UI with remote desktop streaming support.
I started an apprenticeship as a software developer and in the first year, we were tasked with learning the C programming language. I wrote my first programs using some basic stdin/stdout functions. I remember writing a big file of code and executing it and it only taking milliseconds to run. I was fascinated how fast CPU’s are and since then I started to develop a passion for writing code. I studied many hours to understand how memory allocation and pointers work. I believe those basics helped me to understand bigger abstractions later in my career.
C IRC Client
After learning how to use sockets in C. I wanted to build a tool to remote control a computer. I came across the IRC(https://tools.ietf.org/html/rfc2812) protocol for client-server communication. IRC was the first RFC protocol I implemented. I built a C program that runs in the background and connects to an IRC server node. The program listened to specific commands like ‘drive open’ to open the computer’s optical drive. This enabled me to connect to the IRC chat from a different computer and control the machine which the program is running on.
In school, I learned about the TCP Protocol and how the checksum and TCP headers are built.
HTML / CSS
In my last year of regular school. We had to make a graduation project. I made the decision to learn HTML and build a personal website. I bought a book about HTML and CSS. I read the whole book and learned the basics of HTML. With that knowledge, I built the website with only static .html files and some links between the files.
The very first time I wrote code was when my father bought me the book ‘Visual Basic 2005 for Kids’. I was 12 years old at that time. I remember how I programmed a simple calculator with the visual UI composer of Visual Basic Studio.