Welcome to my journey with technology.
On this page I will continue to document some of my work with different technologies.
I use this page as a tool for myself to refer to past experience and knowledge about different tools, libraries, frameworks and programming languages.
I document things I have worked with at work or in my spare time.
All experiences are sorted by date from the most recent descending to the oldest.
Shopify API
Shopify has gotten to be the leader in providing E-commerce software as a Service for independent merchants and even big brands.
The platform offers a Partner Program that allows Shopify Developer's
to access the Shopify API to extend the functionality of individual stores.
Shopify Partners, which consists mostly of developers, can publish their Apps in the Shopify App Store.
The apps can be free or monetized trough different forms of subscriptions.
Like in the Apple App Store, Shopify takes a cut of the developer's revenue, which currently is at 20 percent.
There are now over 1million merchants hosting their e-commerce stores on Shopify. The App Store contains around 3000 apps.
I believe that there is still a big opportunity to provide value with new apps for those merchants.
I've started getting familiar with the Shopify Ecosystem by setting up some developer test stores and understanding how the app/install process works.
The Shopify API is very professional with date-based versioning and proper documentation. There are two different API flavors, REST and GraphQL. GraphQL is the newer API and is recommended for newer apps.
I am developing my first app right now, and I hope to be able to publish it soon and make my first experience with Shopify Merchants using my app.
Cloud Run
A new google cloud service called Cloud Run allows you to deploy docker containers in a serverless fashion. Cloud Run can be seen as an evolution of the Google Cloud Function service, in which each request triggers a new function invocation, which is also isolated into a form of a container anyway.
Cloud Run has some major differences, You can bring your own container image, which allows you to use any kind of programming language, you just have to listen on a provided PORT number where you can receive HTTP traffic.
Another major difference compared to Cloud Functions is that a single container instance can be used for multiple HTTP calls, this feature is called concurrency and significantly reduced the number of cold starts required.
Cloud Run auto-scales auto of the box and you only pay for what you use. This is very powerful, check out the pricing docs for more details.
I am currently running a small API on Cloud Run to fetch a JSON config on an e-commerce storefront, and so far as long as there is some traffic on the API, I get very fast responses, and I rarely see cold starts. I am also using StackDriver periodic health checks to keep the API warm.
Performance has also been very consistent. The StackDriver logging integration for monitoring the services is also very useful.
The newest release called "flow" is a rewrite form the old framework which was based on Google Web Toolkit.
The new version focuses more on modern web standards like Web-Components.
Vaadin has a server side component abstraction with data binding support which enables the
building of complex UI layouts with only using Java. The component tree is automatically rendered as HTML and sent to the client.
The productivity increase by using the framework is very high. The new architecture allows the integration of any web component.
I am currently building a new backend application at my work using Vaadin Flow and i really enjoy working with the framework.
Lit-Element
Lit-Element is a web framework developed under the Polymer project
by Google.
Lit Element helps with the development of Web-Components based web applications.
It extends the standard web-component api with some opinionated base classes called "LitElement".
It solves data binding, event handling and component communication.
Lit Element uses another polymer library called Lit-Html for the view rendering.
I've built an internal web application for managing project ideas using the Lit-Element framework.
Firebase - Firestore
Firebase is a product offered by Google.
I've used Firestore from the Firebase product suite.
Firestore is a hosted, fully managed NoSQL Database.
Whats special about Firestore is, that you directly write your app
against the database on the client side, without having to write
a server side data access layer. This also means the client has the ability to see
all your apps queries. To enable security and prevent data leaks, Firestore has a concept of Security Rules.
I've built an internal web application for managing project ideas using the Firestore Web SDK.
GatsbyJS
Gatsby is a modern static site builder written in JavaScript.
Gatsby has a novel approach by using a data store which can be filled by
using different plugins like markdown or external data sources, and then
using GraphQL to query the data store and building static sites based on the query results.
This website is currently built with GatsbyJS.
ARFoundation
ARFoundation is a framework for Unity that allows you to develop
augmented reality applications for iOS using ARKit and Android using ARCore.
It provides one interface with the features that both libraries
have in common.
I have built an AR mobile app which allows visualizing canvas images
on a detected wall without using markers. More about the app can be found on my blog here.
ASP.NET core
ASP.NET core is in my opinion a good choice for building modern web applications.
Especially with .NET Standard the app can run on many different platforms.
The MVC part has a lot of similar concepts from Spring MVC framework.
In one of my final assessments in my study we had to write a
AirBnB like web app for listing/booking accommodations.
The scaffolding feature of Visual Studio is a good starting point.
But to build productive application one needs better validations and additional service layers.
Unity
The Unity game engine and editor enables cross platform game development.
The concept of GameObjects which can be nested and each GameObject can
have multiple components scripts attached that can control the GameObjects behavior
has an initial learning curve. These concepts allow for a lot of flexibility
but it you have to make good design decisions to keep the game code organized.
I have used Unity in my final study project to build an Augmented Reality App.
Facebook Ads
Again one marketing tool that i will list here on my technology journey.
Facebook Ads is currently the most sophisticated ad platform on the planet.
Before they changed the minimum size of custom audiences it was possible to target
down to 5-10 individuals by layering different conditions like geo location and interests.
Facebook Ads are in my opinion hard to achieve a good return on ad spent, but once the algorithm learns your target
customer it can be very profitable.
Angular 2
The second generation of the popular Angular framework from Google.
They did a complete redesign and the upgrade path from 1.x is very
hard and in some cases impossible.
The framework is written in Typescript and brings many new features like ahead
of time compilation and server side rendering. The template syntax also changed from 1.x
Im very familiar with Angular 2 but i still only use it for side projects
and internal ui's at my work. The cost of maintenance for production apps is
to high in my opinion.
Xamarin
Cross platform mobile framework based on C# and XAML.
I used it to build a mobile app in my study.
Im not a fan of the technology. To much abstraction.
Swift
The language from Apple that intends to replace Objective-C as the
main language for developing iOS apps. I have used swift in my study
to develop some sample apps, but not yet for any production apps.
The language feels very modern, like a mix of java & typescript.
WPF
Windows Presentation Forms were part of my study courses.
WPF is based on the MVVM pattern, where you bind to the ViewModel properties
directly in the view definitions. The XAML language for the view layout
feels to much abstracted to me, when i already have to use XML i
would prefer to just use HTML.
Windows Forms
Windows Forms in 2017? Yes, this is what we had to use in one
of my study courses.
Adwords
Is it a sin to include Adwords in my technology journey?
I don't think so :) The Adwords backend is probably one of the most sophisticated technological system.
I work in e-commerce and have decided to get to know the power of Adwords.
I took a comprehensive course on Udemy to learn the key concepts and how to structure campaigns.
Transact-SQL
In my study i had to implement a full application
only using T-SQL code with stored procedures and trigger
in a MS-SQL database. I would not recommend you to do the same.
Entity Framework
Entity Framework is the C# default ORM Mapper. In my study i have used it
for all projects where i needed CRUD operations on the database.
Coming from a java background with Hibernate there are some parallels,
for instance the flush concept and lazy and eager fetching.
C#
I have used C# before, but in my study i had C# introduced again.
I do like the syntax of the language, some concepts are better solved
than in java, for example generics in c# keep the types
down to the CLR. The async/await construct is also useful.
Tensorflow
Tensorflow is a popular deep learning framework developed by google.
At the time of writing this i have only used it to try out some
open source generative adversarial network (GAN) on image style transfer.
I executed the training on Google Cloud using GPU instances.
Hazelcast
Hazelcast is a distributed in-memory data grid written in Java.
Hazelcast is one of my favorite java libraries.
I have used Hazelcast to build a distributed caching system for an e-commerce frontend
based on Spring Boot.
Hazelcast has a member/client concept which enables you to build
a lot of different server topologies. The docs are also quite excellent.
Webpack
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.
Typescript
I have used Typescript at work for a big Javascript Project. The popular Javascript language superset enabled me to write really clean and organized frontend code. I personally have grown to be a big fan of Typescript and will certainly use it for future Web projects.
Kubernetes
Kubernetes, the open source cluster manager from Google,
has come to my attention via various blog posts and talks
on the internet. Based on the concepts 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 Google Cloud
via the Container Engine offering.
Google Cloud
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.
Wordpress
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.
Grunt
The Javascript Task runner Grunt enabled me to automatically build and minify Javascript code. My favorite plugins are the angular template minifier and the usemin HTML tag based minifier.
Intellij Idea
The best IDE out there. Very much worth the small licence cost.
I love the auto de-compile feature of java byte code.
i created some custom live templates mostly for spring framework development.
Spring Boot
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.
Haproxy
A really reliable open source TCP based load balancer. I use Haproxy for cluster internal proxying.
Ansible
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.
Marathon
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.
Docker
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.
n 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.
Scala
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.
Spring Framework
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.
AngularJS
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.
JSF2
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.
Jboss
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.
Tomcat
My favorite java application server. I use Tomcat for all my personal servlet-based web applications.
Hibernate
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.
Nginx
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.
Objective C
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.
Objective C
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.
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 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.
NodeJs
I wrote a web-based chat app using javascript on the frontend and on the backend with NodeJS. I have used the Express Framework. The code was messy and I quickly came into callback hell.
jQuery
A javascript framework that abstracts browser differences and greatly simplifies dom selection was extremely valuable to me and many other websites at the time. I quickly learned jQuery and built many different UI widgets with it.
JavaScript
I started learning javascript to use Ajax to send requests from the Browser without refreshing the whole page. I quickly felt comfortable writing javascript. I did not buy a book about javascript which made de concepts of the language not entirely clear at first. The use of prototype inheritance and the behavior of the ‘this’ pointer, pointing to the caller context was learned the hard way
Zend Framework
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.
MySQL
I started using Mysql as a persistent data store for building websites in conjunction with PHP.
Linux
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.
PHP
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.
C++
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.
And i really liked the C++ template concept for generic methods.
I built some Windows Forms applications including a remote control UI with remote desktop streaming support.
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.
C
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.
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.
Visual Basic
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.