Daniel Hundt - Erfahrung in fortgeschrittenen Technologien in der Webentwicklung

Übersicht

Inhalt

In diesem Bereich sollen einige fortgeschrittene Techniken vorgestellt werden, mit denen ich im Laufe der Zeit in den einzelnen Projekten Erfahrung gesammelt habe.

Ein Blick hinter die Kulissen

Als User sieht alles so einfach aus: Alles geht schnell und die Anwendung fühlt sich einfach "rund" an. Manches hat man bisher noch nicht so oft gesehen und verbindet man dann sofort mit "dieser bestimmten Seite". Anderes nimmt man gar nicht richtig wahr. Manche Funktionen lassen sich zwar Kinder-leicht bedienen, aber die Anstrengungen, die dafür nötig waren, sieht keiner.

Der Weg zur Marktreife

Entwicklungszyklus
Entwicklungszyklus

In der Regel beginnt alles mit einem Problem ("Das müssen wir anders lösen!") oder einer Idee ("Was wäre, wenn wir X machen würden?"). Anschließend wird dann völlig losgelöst versucht, eine "Tech-Demo" bzw. einen Prototypen nur mit dieser Funktionaltität zu erstellen. Hat der Prototyp nach einiger Forschung und Bastelei sein Ziel erreicht, werden die Erkenntnisse in einem Modul konzentriert, dass dann in einem anderen Kontext (z.B. innerhalb einer Seite) eingesetzt wird. Hierbei fallen dann immer wieder kleine oder größere Fehler auf oder weitere Features werden ergänzt.

Irgendwann ist das Modul (einigermaßen) ausgereift und kann im Produktiv-Betrieb ("breite Öffentlichkeit") genutzt werden. Meist werden auch hier im Laufe der Zeit noch Fehler (z.B. Geräteabhängig) festgestellt oder Zusatzanforderungen definiert. Erst nach mehreren Iterationen ist die Materie so weit durchdrungen und die Technik so weit ausgereift, dass das Modul auch in anderen Bereichen zum Einsatz kommen könnte und damit andere fortgeschrittene Funktionen erst möglich macht.

Es lebe die Modularisierung!

// TODO:

Auch diese Seite soll sich nach und nach weiterentwickeln. Einige Themen sind nur angeteasert und sollen später noch im Detail mit Leben gefüllt werden. Bei manchen Themen darf ich auch nicht weiter ins Detail gehen. "Top Secret" und so.

Themen

Erfahrung im Frontend

Erfahrung im Backend

  • HTTP Header 1: Sprache erkennen
  • HTTP Header 2: Woher kommen die Nutzer?
  • HTTP Header 2: Browserweiche / Geräteerkennung
  • HTTP Header 4: Kompression
  • Parsen von Freitexten
  • Solr/ElasticSearch 1: Attribut-Suche
  • Solr/ElasticSearch 2: Freitextsuche mit allem Drum und Dran
  • Solr/ElasticSearch 3: Umkreissuche
  • ElasticSearch 4: Aggregation
  • MySQL optimieren 1 - Explain und Index-Nutzung
  • MySQL optimieren 2 - Batch via LOAD DATA
  • MySQL optimieren 3 - Locking und Swap-Tabellen
  • MySQL optimieren 4 - Partitionen
  • MySQL optimieren 5 - Replikation
  • Geo-Daten: Umgang mit OpenStreetMap 1
  • Kryptografie 1: Hash, Verschlüsseln oder ganz anders?
  • Kryptografie 2: Passwörter sicher speichern
  • Kryptografie 3: Symmetrie mit AES
  • Kryptografie 4: Asymmetrie mit RSA
  • Kryptografie 5: Konzept für sicheren, asynchronen Nachrichtenaustausch
  • Anmeldung mit oAuth bei Facebook, Google und co.
  • Two Factor Authentication
  • Spam-Schutz 1: für Anfänger
  • Spam-Schutz 2: für Fortgeschrittene
  • Spam-Schutz 3: ReCaptcha
  • Asynchrone Prozesse via Message Queue (Redis/RabbitMQ)
  • Bildformate
  • Bildbearbeitung 1: Thumbnails
  • Bildbearbeitung 2: Verschieben, Zuschneiden und Skalieren
  • Bildbearbeitung 3: Drehen und Spiegeln
  • Bildbearbeitung 4: Filter
  • Bildbearbeitung 5: Performance
  • Bildbearbeitung 6: Heatmaps
  • Bildbearbeitung 7: dynamisch Bilder erzeugen
  • Deployment-Pipeline
  • Umwandlung 1: PDF zu JPG
  • Umwandlung 2: Vorschaubild aus Video
  • Umwandlung 3: Video für die Homepage ohne Youtube
  • Umwandlung 4: Audio im Web
  • Umwandlung Extended: Vom Video zur DVD
  • Objektorientiertes Programmieren: Wann public, private, protected und static benutzen
  • Struktur und Disziplin 1: Ordnung im Chaos
  • Struktur und Disziplin 2: Ein Programm für viele Kunden
  • Struktur und Disziplin 3: Transparente Module mit einer einzigen Funktion
  • Intelligente REST-API
  • Caching HTTP
  • Große Datenmengen übertragen via CSV
  • Speicherschonend Arbeiten mit yield und StreamingResponse
  • RSS-Feeds
  • SEO 1: Title, Überschriften und co.
  • SEO 2: strukturierte Daten mit Microdata
  • Skalierung 1: Deployment in Kubernetes
  • Skalierung 2: Auto-Scaler in Kubernetes
  • Skalierung 3: Proxy-Sidecars und Connection-Pools
  • High Availability 1: HAProxy und Load-Balancer
  • High Availability 2: MySQL / Percona Cluster
  • High Availability 3: Redis Sentinel
  • Logging 1: Health-Checks mit Prometheus und Grafana
  • Logging 2: Auswertbare Logs mit ElasticSearch und Kibana
  • Logging 3: Verknüpfung unterschiedlicher Logs
  • Zeilenumbruch 1: Trennung anhand von Wörtern bzw. innerhalb von Wörtern
  • Zeilenumbruch 2: Silbentrennung anhand von Regelwerk
  • Framework-Nutzung und wie man der Abhängigkeit entkommt
  • NGinx Proxy - DNS Request vermeiden und Client-Daten schützen
  • Schei? Encoding - w?ren wir lieber mal bei ASCII geblieben (UTF-8 / utfmb4)
  • automatische Tests 1: PHP-Tests mit phpUnit
  • automatische Tests 2: JavaScript-Tests mit jasmine
  • automatische Tests 3: Oberflächentests mit Selenium