\documentclass[a4paper, 11pt]{article}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{a4wide}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{color}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage{ulem}
\usepackage{listings}
\usepackage{float}
\usepackage[rflt]{floatflt}
\usepackage{tabularx}
\setlength{\parindent}{0pt}
\title{Internet mal anders}
\usepackage[
pdftitle={Internet mal anders}
pdfsubject={Dieser Webserver inklusive Website und CMS ist komplett in Free Pascal programmiert.}
pdfauthor={Udo Schmal}
pdfkeywords={ISAPI CMS, Lazarus, Webserver, Xinha, Delphi, browscap.ini, GZIP, Udo Schmal}
]{hyperref}
\definecolor{darkblue}{rgb}{0,0,.5}
\hypersetup{pdftex=true, colorlinks=true, breaklinks=true, linkcolor=darkblue, menucolor=darkblue, pagecolor=darkblue, urlcolor=darkblue}
\begin{document}Internet mal anders
\singlespacing
{\LARGE \textbf{\label{sec:title}Internet mal anders}}

\singlespacing
\textbf{Mühlen am Niederrhein}
\href{https://www.gocher.me/Muehlen-am-Niederrhein}{\begin{figure}[h]
\centering
\includegraphics{/home/udo/webserver/www.gocher.me/www-root/media/mills/nrw/Steprather_Muehle_Walbeck_20200404_142656_1.jpg}
\end{figure}

Mühlen am Niederrhein ⇨
}
\singlespacing
\textbf{Mühlen in Schleswig-Holstein}
\href{https://www.gocher.me/Muehlen-in-Schleswig-Holstein}{\begin{figure}[h]
\centering
\includegraphics{/home/udo/webserver/www.gocher.me/www-root/media/mills/sh/Amanda_20221113_112957.jpg}
\end{figure}

Mühlen in Schleswig-Holstein ⇨
}
\singlespacing
\textbf{Andere Mühlen}
\href{https://www.gocher.me/Muehlen}{\begin{figure}[h]
\centering
\includegraphics{/home/udo/webserver/www.gocher.me/www-root/media/mills/Nymindegab_20230626_140154.jpg}
\end{figure}

Anderen Mühlen ⇨
}
\item           
\begin{floatingfigure}[r]{0.33\textwidth}
\centering
\includegraphics[width=0.25\textwidth]{/home/udo/webserver/www.gocher.me/www-root/media/Entwicklung.png}
\end{floatingfigure}

\singlespacing
{\large \textbf{Entwicklung}}

Die hier aufgeführten Routinen sind zum großen Teil Bestandteile meines eigens für meine Homepage entwickelten CMS, sie sollen zeigen was mit Free Pascal auf der Server-Seite und JavaScript auf der Client-Seite alles möglich ist.

\singlespacing
\textbf{Lazarus / Free Pascal}

\begin{itemize}\label{sec:keyword:pascal}
\end{itemize}

\singlespacing
\textbf{JavaScript}

\begin{itemize}\label{sec:keyword:javascript}
\end{itemize}

\singlespacing
\textbf{C\#}

\begin{itemize}\label{sec:keyword:c#}
\end{itemize}

\item           
\begin{floatingfigure}[r]{0.33\textwidth}
\centering
\includegraphics[width=0.25\textwidth]{/home/udo/webserver/www.gocher.me/www-root/media/Administration.png}
\end{floatingfigure}

\singlespacing
{\large \textbf{Administration}}

Hier finden Sie Themen zur Server Administration und Konfiguration, Anleitungen und Hilfestellungen.

\begin{itemize}\label{sec:keyword:administration}
\end{itemize}

\item           
\begin{floatingfigure}[r]{0.33\textwidth}
\centering
\includegraphics[width=0.25\textwidth]{/home/udo/webserver/www.gocher.me/www-root/media/Analyse.png}
\end{floatingfigure}

\singlespacing
{\large \textbf{Analyse}}

Fehler finden, Möglichkeiten entdecken und Konzepte zur Umsetzung.

\begin{itemize}\label{sec:keyword:analyse}
\end{itemize}

\singlespacing
{\large \textbf{Besonderheiten dieser Website}}

Diese Website basiert auf einer in Free Pascal geschriebenen Webserver-Application, ein Dienst/Service mit einen HTTP-Server-Prozess und einen Hintergrund-Prozess. Wobei der HTTP-Server-Prozess für die komplette Bearbeitung der Eingehenden Anfragen zuständig ist und der Hintergrund-Prozess sich um die Abwicklung von Aufgaben die nicht unmittelbar mit den eingehenden Anfragen zu tun haben wie z.B. um Optimierung von Dateien, generieren von Statistiken und Updates. Alle Komponenten des Webservice wurden komplett in Free Pascal programmiert.

Bis zum 21.06.2015 basierte diese Website noch auf der ISAPI-Schnittstelle des IIS von Microsoft, da mir nach einigen Tests klar wurde das eine weitere zeitliche Optimierung nicht mehr möglich war, da die anfallenden Millisekunden fast komplett im Bereich des Servers anfielen, hatte ich mich entschlossen einen eigenen Webserver zu schreiben. Im Gegensatz zu den bekannten Webservern ist bei meinem Webserver keine aufwendige Installation und Konfiguration erforderlich, an Hand der Dateitypen wird z.B. automatisch das beste Verfahren zur Übertragung gewählt, also z.B. GZip Komprimierung, Minimierung, Gültigkeit, … und alles nativ ohne Einbindung externer Module, dadurch war eine erhebliche Steigerung der Verarbeitungsgeschwindigkeit möglich. Zur Zeit wird die Antwortzeit lediglich durch den dynamischen DNS Eintrag über MyFritz meiner Fritzbox an einem VDSL-Anschluss gebremst, die eigentlichen Verarbeitungszeiten des Servers sind außer bei sehr komplexen Seiteninhalten wie große Source-Listings oder riesige Bildergalerien auf meinem nun über 10 Jahre alten Rechner kaum messbar.

Bis zum 20.10.2018 lief dieser Webservice noch unter Windows, nun läuft er unter Ubuntu.

Ich bemühe mich ständig aktuelle Standards zu implementieren, darunter sind z.B. folgende Leistungsmerkmale:

\begin{itemize}
\item lauffähig unter Windows und Linux (dank Free Pascal Cross-Compiler)
\item SSL (TLS 1.3) Implementierung über OpenSSL, überprüft mit \href{https://www.ssllabs.com/ssltest/}{www.ssllabs.com} (A+)
\item CSP und Cookies optimiert auf Basis von \href{https://securityheaders.com/}{securityheaders.com} (A+)
\item HTTP, HTTPS inklusive SNI Realisierung mit HSTS und HTTP/2 über TLS-ALPN Unterstützung
\item \href{https://pagespeed.web.dev/}{Google PageSpeed Insights} (97-100\%) und Google Lighthouse (Feature im Google Chrome) optimiert
\item IPv4 und IPv6 Unterstützung, Überprüfung mit \href{https://ipv6-test.com/}{IPv6 test}
\item GZip / Deflate / Brotli (Implementierung über Brotli Libraries) / Compress(LZW) Komprimierung auch von dynamischen Inhalten
\item dynamisches Minimieren von CSS und JavaScript
\item realisiert in Vanilla-JS (ohne JavaScript-Frameworks also reines JavaScript) und dadurch sehr schnell
\item dynamisch generierte Sitemaps: \href{https://www.gocher.me/sitemap.xml}{Pages}, \href{https://www.gocher.me/sitemap-news.xml}{News}, \href{https://www.gocher.me/sitemap-image.xml}{Images}
\item dynamisch generierte RSS-Feeds, Open Search, Open Graph, AppCache, vCard, iCal, …
\item mit allen wichtigen Icons, überprüft mit \href{https://realfavicongenerator.net/favicon_checker}{Favicon checker}
\item kurze Sprechende URLs
\item Schema.org realisiert in zahlreichen Elementen wie z.B. Navigationspfade, Logos, Sitelinks-Suchfeld, Videos, WebPage, Organization, Article, Person, … Überprüfung mit \href{https://developers.google.com/search/docs/appearance/structured-data?hl=de}{Google Testtools für strukturierte Daten}
\item Social Media Bookmarks inklusive native sharing wenn es vom Endgerät unterstützt wird
\item native Volltextsuche auch über Bilder und Downloads wie z.B. PDF-Dateien
\item Backend mit extrem optimierten WYSIWYG Editor
\item Barrierearm, überprüft mit \href{https://wave.webaim.org/}{wave.webaim.org} (0 Errors)
\item Seitengenerierung dynamisch, also ohne "Caching"
\item dynamische generierte Bilder (dem Endgerät angepasst)
\item Viewport (lazy loading) für Bilder (auch Video-Poster und Background), Videos, YouTube, OpenStreetMap, IFrames, …
\item W3C konforme Inhalte, Überprüfung mit \href{https://validator.w3.org/}{W3C - Markup Validation Service} (keine Fehler, keine Warnungen)
\item SEO optimiert
\item HTML5 / XHTML 1.1, CSS3, JavaScript mit aktuellen Features wie z.B. Slider, Accordion, Tabsheets, Fullscreen, …
\item Responsive Webdesign
\item Print CSS
\item Seiteninhalt als PDF, RTF (Richtext), HTML und Text oder auch als Package (Zip-Archiv - zur Verwendung in einer App) abrufbar/herunterladbar
\item datenschutzkonform
\end{itemize}

Weitere Informationen findest Du unter \href{https://www.gocher.me/CMS}{CMS}.

Manche Bereiche dieser Website sind nur für Freunde offen, falls Ihr noch keine Zugangsdaten habt meldet Euch doch bei mir!

Die ganzen Bilder liegen nicht in den angezeigten Auflösungen auf dem Server, sondern werden während der Laufzeit angepasst für Euer Browser-Fenster zur Verfügung gestellt!
\end{document}