Programmiersprachen

Angefangen habe ich in meiner Jugend mit PHP und habe später zu Python gewechselt. Einige Zeit lang bin ich auch in C-Programmierung in Verbindung mit Betriebssystem-Entwicklung eingestiegen. Für Windows-Programmierung verwende ich normalerweise C#. Kürzlich habe ich außerdem mit Erlang angefangen, um eine funktionale Sprache zu lernen, mit der man leicht verteilte Systeme realisieren kann. Als nächstes kommt vermutlich Go, weil man Go direkt in eine Binärdatei kompilieren und diese dann aufs Zielsystem laden kann.

Letztlich ist mein Ziel, dass ich möglichst viele verschiedene Sprachen und Systeme kenne, damit ich für jedes Problem immer die beste Lösung wählen kann.

Hosting

Ich liefe meine Websites mit nginx als Web-Server und HAproxy als Load-Balancer aus.

Einige meiner Websites sind statisches HTML generiert von den Static Website Generators Middleman und Jekyll, andere sind Python-basiert mit flask als Framework. Zuvor habe ich auch Django benutzt und noch früher programmierte ich meine Websites in PHP, erst ohne Framework, dann mit einem selbstprogrammierten MVC-Framework, Zend, oder Symfony.

Ich verwende Docker für mein Deployment, weil es mir eine schöne Möglichkeit liefert, meine verschiedenen Komponenten voneinander zu isolieren, so als seien sie auf unterschiedlichen Servern - was in Zukunft potentiell passieren könnte. Die tatsächliche Durchführung der Deployments mache ich mit Ansible, welches über SSH funktioniert.

Für meine Projekte wähle ich zwischen den verschiedenen verfügbaren Datenbanksystemen. Bis jetzt habe ich bei vielen Projekten MySQL und PostgreSQL verwendet, MongoDB als dokumentenorientierte Datenbank, SQLite für kleinere Projekte und Elasticsearch für Textsuche und zur Log-Verarbeitung im EFK-Stack (Elasticsearch, fluentd, Kibana). Als In-Memory-Datenbank verwende ich Redis.

Betriebssysteme

Ich verwende Linux für fast alle meiner Installationen.

Um Betriebssysteme besser zu verstehen, startete ich eine Tutorialserie über die Programmierung eines eigenen Betriebssystems namens SOS.

Benutzeroberfläche

Die meisten meiner privaten Projekte werden von der Kommandozeile aus verwendet und haben keine grafische Oberfläche. Ebenso ziehe ich es bei Programmieraufgaben vor, mit der Kommandozeile zu arbeiten. Allerdings programmiere ich beruflich auch Anwendungen mit grafischen Benutzeroberflächen.

Cloud Computing

Ich verwende privat Amazon AWS für einige Backups (verschlüsselt) und teste hin und wieder ihre verschiedenen neuen Dienste. Bisher habe ich folgende Dienste von Amazon AWS verwendet oder verwende sie noch immer aktiv:

Suchmaschinenprogrammierung

Als Hobby beschäftige ich mich viel mit der Architektur und Programmierung von Suchmaschinen. Im Zuge dessen entwickle ich auch eine Systeme. Im Moment verwende ich dazu Scrapy zum Crawling, Apache Kafka zur Verarbeitung der Dokumente und Elasticsearch als Suchindex.

Data Science

Ich nehme an verschiedenen Kaggle-Wettbewerben teil. Dabei verwende ich die verschiedenen Python-Pakete für Data Science. R habe ich anfangs ausprobiert, bin dann jedoch bei Python geblieben. Meine Data Exploration mache ich mit Jupyter Notebooks und seaborn, die Modelle trainiere ich dann mit scikit-learn. Je nach Interesse führe ich auch eigene Data-Science-Auswertungen von der Datenbeschaffung bis zu den Auswertungen durch, wie zum Beispiel meine Auswertung des österreichischen Fahrzeugmarkts.