Portrait of Anton Rhein

Hi there!
My name is Anton Rhein
I am a software developer, shutterbug and pizza fancier.

Specialisation

Web development

Software engineering

CV

Education

2018 until now Leipzig University of applied sciences
Studies in computer science
target degree: B. Sc.
2015 - 2018 apprenticeship IT Specialist for application development
final mark: 1.1
passed with distinction
2012 general qualification for university entrance

Work

2019 Mogic LLC. Leipzig
Internship with scope on mobile app development
2018 Haema AG Leipzig
.NET - software developer
2016 - 2018 Haema AG Leipzig
apprenticeship IT-Specialist for application development
2013 - 2015 Siemens AG Stuttgart
cooperative studies in mechatronics

Coding Technologies

C#, especially ASP.NET
I've worked on several ASP.NET MVC Apps for about 2 years.
C / C++
I like these languages mostly because of their performance and because they offer many possibilities to operate on levels close to hardware. They require more knowledge about technological aspects of computer programming, way more than other popular languages like Java, C# or JS. It should be mentioned, that working with strings in C is hell of a pain.
JavaScript
The probably most popular (and may I say most abused) programming language today. I could not manage to avoid this one and I must admit, that I am quite good at it.
SQL
During my apprenticeship, in my CS studies and in private side projects I am using SQL for data definition and data manipulation. I am definitely not a pro, especially when it comes to complex queries I often get stuck. But I can manage simple (grouping) queries and commands.
React
It seems rediculous, how many JS frameworks and libraries are born every day. I hope, that this one will stay relevant for quite a time.
Java, especially Spring (Boot / Data Rest)
During my CS studies, I used Spring Data Rest as backend technology for an educational software project
Hibernate and Entity Framework
Spring Data Rest uses Hibernate by default; Entity Framework was the ORM of choice when working with ASP.NET MVC;

Non-dev activities

When not coding, I like to spent my remaining time on the following:

Photography
I own a DSLR and like to be outside taking photos of nice places, hot spots or interesting objects. I mainly focus on architecture and street photography.
Especially adopting unusual perspectives, paying attention to details and interesting structures is what makes this whole thing interesting to me .
Photo-Blog coming soon!
Painting
Not being a Picasso or Durer isn't an issue to me when painting. I mostly do it because it brings me down and relaxes me.

Opinions and Lessons learned

Be open
Diving into new languages, concepts, approaches is key when working in IT. I am not afraid of learning new technologies and languages, as well as taking on new projects. Every project contributes to your personal skills
Plug n Play
These solutions are very appealing to anyone (no matter to which field they apply), because they provide a working result without having to deal with all the details. However, when it comes to customizing, you will be trapped by the assumptions made by the manufacturer. So choose wisely, it is always a good idea to take some time for doing research.
Amdahls law applied to software complexity
Amdahl said, that the possible speed-up of programs gained by using parallel computing is limited mostly by a non-parallelizable, sequential portion of the program. In my opinion, this somehow applies to business logic complexity of software as well. As your application grows, no matter how well you design it, its complexity grows and the simplicity of making changes shrinks. So there is some kind of non-hideable or non-simplyfiable portion of complexity in each program.
The number of design patterns used in a program doesn't necessarily relate to its quality and maintainabilty
Software architecture is always a tradeoff
Currently there is no holy grail when it comes to designing software. Each decision you make may give you some sort of benefit but it will always give you another sort of drawbacks. Therefore, a software architect has to be aware of the drawbacks she or he introduces. These drawbacks have to be reasonable in favour of their benefits.
ORMs aren't always the best solution for accessing databases by your software
ORMs simplify the definition and access of database schemes. However, if your software heavily relies on the data, that is somehow stored in the database, you shouldn't rely on ORMs. In this case, database programming and the use of stored procedures might be much more effective than loading some kind of bulk data into the memory (and much likely over some network).

My personal side projects

Custom Pandoc Workflow (productive)

A suite of configurations and scripts (as well as templates) for quick document generation and creation

In my studies I have to deal oftenly with writing summaries, homeworks and papers. This suite automatically sets up a working installation of pandoc, latex and some customized template scripts. It registers bash scripts that shorten the creation of pandoc-flavoured markdown scripts. Along with each markdown script, a bash-script is generated, that stores document-specific configurations. During script generation, the user is prompted to configure TOCs, section numbering, table of figures etc. Thanks to pandoc (and latex), you can quickly write source code, that is highlighted during PDF generation as well as mathematic formulas that rely on mathtex syntax.

Setting up this suite took some time, I must admit. Especially because there was lots of documentation to read. I also had to search for many latex "hacks" in order to achieve the desired behaviour. There are still some issues with the latex template, that especially occur in large summaries, but I don't have much time to fix them. Most of the time, this suite fits any of my needs and I am writing more markdown than ever

Cloud based programmable alarm clock (planning)

It is a little bit weird to write about a project that is still in planning stage. Maybe I should just write down my ideas.

Problem(s) to be solved

  • My smartphone alarm clock is not very customizable: It only allows for a single song to be played on alarm time
  • Snooze function of my smartphone alarm is buggy (by manufacturer, thanks Apple!)
  • As a student I like to organize my days using different calendars in the cloud. I also plan when it is time to wake up. So I am tired of manually configuring my alarm clock for the next day.
  • I want to be able to play a custom Spotify - playlist in shuffle mode when waking up
  • Especially in winter, I dont want to wake up in a dark room, so somehow my alarm clock has to lighten things up
  • I am one of those lazy guys, that won't jump out of the bed, only because an alarm is going off. So my alarm clock has to ensure I really woke up

Solution

  • I am using a Raspberry Pi Zero, as well as a tiny LCD screen, some decomposed speakers, a daylight bulb and some switches to build the alarm clock
  • When an event is stored in a calendar, a webhook will be called by the cloud provider that calls a serverless function which will store the event in some kind of online storage
  • Raspberry Pi will establish a websocket connection to some tiny server
  • The server pushes every new calendar event to the raspberry pi
  • The server is running a web interface, where I can configure various settings (like fallback alarm times, spotify credentials and so on)
  • When the alarm goes off, raspberry will push an appropriate message to the server. The server will wait a random time (between 30s and 2 mins or so) until sending a one time link to my email adress
  • I will have to click on that link before it times out, confirm some silly checkboxes and read a message in order to completely turn off the alarm
  • When the one-time link expires without being confirmed by me, the raspberry will fire off the alarm again
  • Maybe there will be some sort of speach outputthat tells me the current time
  • The raspberry will control the daylight bulb using PWM to slowly increase its brightness on alarm time

What I am currently looking up

  • Web / Cloud Providers: I want to reduce the running costsof the solution as much as possible
  • I want to use technologies that I haven't (or only rarely) used before (especially Rust and Webhooks)
  • I have to find a minimalistic storage solution. Running a database seems overpowered
  • I have to make up a data model, as well as dealing with architecture and security issues

Bucktracker (WIP)

UI Screenshot
Project Sisyphus

In a very german manner, I like to plan and track my monetary spendings accurately. Working with MS Excel is tedious: You have to copy/paste files, work with silly cross-cell references, pay attention to deletion and also have to remember, which spendings have already been tracked.

Backed by a database and multiple clients, this app will help to get rid of all the forementioned issues. I spent a lot time thinking about the domain model, designing the core logic and writing unit tests for the domain logic. Then I implemented the entire database model and logic by SQL using Postgres. I am using a tiny mapper library for converting result sets into domain objects. (Because ORMs are quite hard to master, and I want to be able to fine-tune every query)

I have chosen a service-oriented architecture, because the business logic remains the same on every client. So I am storing this logic on a server behind a web interface. The clients will call these server end-points to trigger the use cases.

The server application is written using C# and .NET Core. The Web-Interface uses React, without any UI-Library. I am thinking of extending the Web-UI to a PWA, especially because I dont want to pay Apple a hundred dollars a year for an app I have written during my leisure time and only servers personal purposes.

I have chosen the codename, because this project is very time consuming and hasn't been touched for quite a while.

LEGAL DISCLAIMER

The information on this site is intended solely for the personal non-commercial use of the user who accepts full responsibility for its use. While the author has taken every precaution to insure that the content of this site is both current and accurate, errors can occur.

The author assumes no responsibility or liability for any errors or omissions in the content of this site. The information contained in this site is provided on "as is" basis with no guarantee of completeness, accuracy, usefulness or timeliness and without any warranties of any kind whatsoever, express or implied. The author does not warrant that this site and any information or material downloaded from this site, will be uninterrupted, error-free, omission-free or free of viruses or other harmful intents.

Under no circumstances shall the owner or its affiliates, partners, suppliers or licensors be liable for any indirect, incidential, consequential, special or exemplary damages arising out of or in connection with your access or use of or inability to access or use the application and any third party content and services, whether or not the damages were foreseeable and whether or not company was advised of the possibility of such damages. Without limiting the generality of the foregoing, authors aggregate liability to you (whether under contract, tort, statute or otherwise) shall not exceed the amount of fifty dollars ($50.00). The foregoing limitations will apply even if the above stated remedy fails of its essential purpose.

The material and information contained on this website is for general information purposes only. You should not rely upon the material or information on the website as a basis for making any business, legal or any other decisions. Whilst the owner endeavours to keep the information up to date and correct, the author makes no representations or warranties of any kind, express or implied about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services or related graphics contained on the website for any purpose. Any reliance you place on such materials is therefore strictly at your own risk.

© 2020 Anton Rhein