#!wml -o LYNX+UNDEF:%BASE.html -o UNDEF:%BASE.web.html

#use wml::fmt::isolatin global

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title>KISS &mdash; Keep it small and simple, auch im Web</title>
#include <include.wml>
</head>

<body>

<slide i=9>
<ll/><ll/><ll/>
<ll/><ll/><ll/>
<ll/>

<h1 align="center">KISS &mdash; Keep it small and simple, auch im Web</h1>

<ll/>

<p align="center">

<a href="http://www.froscon.de/">FrOSCon 2006</a><br>
25. Juni 2006

</p>

<ll/>

<p align="center">

Axel Beckert<br/>
&lt;<a href="mailto:abe@noone.org">abe@noone.org</a>&gt;<br/>
<a href="http://noone.org/abe/">http://noone.org/abe/</a>
</p>
</slide>

<slide i=16>
<h2>ÜBERSICHT</h2>

<ul>
    <li>Warum aufwendig wenn's auch einfacher geht?</li><!-- 80/20 -->
    <li>KISS &mdash; Keep it simple, stupid</li>
    <li>KISS, freie Software und alte Rechner</li>
    <li>Distributionen für alte Hardware</li><!-- DSL, DeLi, fli4l -->
    <li>Webserver</li>
    <li>Webseiten leicht gemacht</li>
    <li>Alte Rechner als Surf-Terminal</li>
    <li>Links</li>
</ul>

</slide>

<slidestart i=19>
<h2>Warum aufwendig wenn's auch einfacher geht?</h2>

<h3>Die 80/20-Regel gilt auch im Web</h3>

<p>

Grob 80% aller Rechenleistung wird für 20% aller Funktionen
gebraucht. Sowohl auf Webservern als auch bei Webbrowsern. Braucht man
das wirklich?

</p>
</slidestart>

<slideend i=14><p>

Warum Webseiten bei jedem Aufruf neu generieren wenn sie doch eh immer
wieder gleich aussehen? Warum die Benutzeroberfläche des Webbrowsers
mit der gleichen Technik wie die Webseiten erstellen, wenn es fertige
GUI-Bibliotheken gibt?

</p>
</slideend>

<slidestart i=19>
<h2>KISS &mdash; Keep it simple, stupid</h2>

<p>

KISS steht ursprünglich für "Keep it simple, stupid" (dt.: "Halte es
einfach, Dummerchen") und soll aus dem Apollo Projekt der NASA
stammen, das <a
href="http://en.wikipedia.org/wiki/KISS_principle">KISS-Prinzip</a>,
etwas einfach und übersichtlich zu halten, hat sich aber in viele
Ingenieursbereiche und vor allem auch im Computerbereich verbreitet.

</p>
</slidestart>

<slideend i=1>
<p>

In der Zwischenzeit haben sich immer mehr Interpretationen des
Akronyms KISS angesammelt, die aber allesamt in die gleiche Richtung
gehen:

</p><ul>
  <li>Keep It Simple and Straightforward</li>
  <li>Keep It Super Simple</li>
  <li>Keep It Simple, Sweetie (etwas freundlicher)</li>
  <li>Keep It Simple, Smartguy (auch freundlicher)</li>
  <li>Keep It Small and Simple</li>
  <li>Keep It Small and Scalable (wir kommen den Computern näher)</li>
  <li>Keep It Simple and Stupid (wenn man betonen möchte, daß ein
      Programm nicht versuchen sollte, intelligent zu sein)</li>
  <li>Keep It Stupidly Simple (noch ein wenig deutlicher)</li>
  <li>Keep It Short and Simple (wohl aus dem Marketingbereich, läßt
      sich aber auch schön auf Quellcode anwenden)</li>
  <li>etc</li>
</ul>
<p>

(Quelle: <a
href="http://en.wikipedia.org/wiki/KISS_principle">engl. Wikipedia-Artikel
"KISS principle"</a>)

</p>
</slideend>

<slidestart i=15>
<h2>KISS, freie Software und alte Rechner</h2>

<p>

KISS fand in der Computerwelt insbesondere beim Design von UNIX
Verwendung und ist damit auch bei vielen freien Betriebssystemen
präsent, z.B. bei Linux und den ganzen BSD-Varianten.

</p><p>

Vor allem auf der Kommandozeile findet sich KISS wieder: Viele kleine
Programme (z.B. sed, awk, grep, find, sort, uniq, etc.), die alleine
nur eine Aufgabe erledigen, diese aber gut, schnell und zuverlässig
&mdash; erst das Zusammenspiel mehrere dieser kleinen Tools macht die
Kommandozeile unix-artiger Systeme so mächtig.

</p>
</slidestart>

<slideend i=7>
<p>

Und da die meisten dieser Programme wirklich nur eine Aufgabe machen,
sind sie klein, kompakt, übersichtlich und schnell. KISS eben.

</p><p>

Und wenn Software nach dem KISS-Prinzip gestaltet wurde, läuft sie
im Normalfall auch auf älterer, nicht mehr ganz so performanter
Hardware ganz gut. Entsprechend kann man mit einfach gestalteter
Software auch im Web schon sehr viel erreichen.

</p>
</slideend>

<slidestart i=19>
<h2>Distributionen für alte Hardware (1)</h2>

<p>

Es gibt in der Zwischenzeit einige Distributionen, die speziell auf
alte Hardware zugeschnitten sind &mdash; oft mit Anleihen bei
Embedded-Systemen. Meist sind diese Distributionen auf einen
bestimmten Zweck zugeschnitten und kommen nur mit einer entsprechend
eingeschränkten Paketauswahl daher. Beispiele:

</p></slidestart><slidemid i=11><p>

<b><a href="http://www.delilinux.de/">Desktop Light (DeLi)
Linux</a></b> ist als Desktop-System mit Kernel 2.2 primär für 486er
und Pentium 1 gedacht und kommt mit einer Sammlung von
ressourcenschonenden Anwendungen, darunter auch einige kompakte
Webbrowser, aber auch kompakte Webserver. Trotz mitgelieferter
Webserver ist es mehr als Entwicklungssystem für Webseiten und
-anwendungen gedacht als für den produktiven Server-Einsatz. 90 MB
ISO, passt auch auf 100-MB-Zip-Disketten.

</p></slidemid><slidemid i=5><p>

<b><a href="http://www.damnsmalllinux.org/">Damn Small Linux</a></b>
(DSL) ist eine vielseitige, auf den Desktop ausgerichtete und auf
Debian basierende Live-Distribution, die ab 486DX mit 16 MB RAM läuft,
in eine 128-MB-RAM-Disk geladen werden kann und bei einer
Festplatten-Installation in ein Debian umgewandelt werden kann.

</p></slidemid><slideend i=1><p>

<b><a href="http://www.fli4l.de/">fli4l</a></b>, ist ein
Ein-Disketten-Router, der über das Netz weitere Pakete nachladen kann,
u.a. auch um ihn um Webserver-Funktionalitäten zu erweitern.

</p>
</slideend>
<slide i=17>
<h2>Distributionen für alte Hardware (2)</h2>

<p>

Es gibt aber auch Allround-Distributionen bzw. -Ports-Sammlungen, die
alleine schon aufgrund ihrer Auswahl an Paketen bzw. Ports genügend
Alternativen zu den gängigen, aber tlw. ressourcenfressenden
Anwendungen und Serverdiensten mitbringen, allen voran <b>Debian</b>
mit über 14'000 Paketen in der aktuelle Distribution, aber auch
<b>Gentoo</b> und die <b>FreeBSD Ports Collection</b> bieten viel
Auswahl, auch bei Webservern, Webbrowsern und anderen Tools rund ums
Web.

</p>
</slide>

<slidestart i=21>
<h2>Webserver schlank konfigurieren</h2>

<p>

Apache alleine braucht nicht viel Ressourcen und ist bei passender
Konfiguration auch für alte, etwas schwächere oder gut ausgelastete
Rechner ein Überlegung wert.

</p></slidestart><slidemid i=16><p>

"Ressourcenschweine" sind dagegen dynamische Webseiten mit mod_perl,
Embperl, PHP, JSP, o.ä. &mdash; nicht nur, weil sie bei jedem Aufruf
ausgeführt werden sondern vor allem, weil sie einmal geladene Module
und Seiten im Speicher halten &mdash; und dies für jeden
Apache-Kindprozeß.

</p></slidemid><slideend i=2><p>

Eine Möglichkeit ist, statische und dynamische Seiten von getrennten
Prozessen ausliefern lassen:

</p><ul>
    <li>von verschiedener Software</li>
    <li>von verschieden konfigurierten Apaches</li>
    <li>Verschiedene Ports per Reverse-Proxy (mod_proxy oder Squid)
        nach außen hin transparent auf Port 80 anbieten oder
        ggf. verschiedene IPs verwenden.</li>
</ul><p>

Folge: Nicht alle gebrauchten sondern nur ein paar wenige
Webserver-Prozesse haben hunderte von Perl-, JSP- oder PHP-Modulen und
-Webseiten vorkompiliert im Speicher vorrätig. Und für statische
Webseiten braucht es nur den Systemcall sendfile(2) zum
Raussenden. Den Rest macht der Kernel.

</p></slideend>

<slidestart i=16>
<h3>Webserver schlank konfigurieren: Beispiele</h3>

<ul>

<li>Symlink.ch: Webseiten von www.symlink.ch mit einem Apache mit
    mod_perl, Bilder von images.symlink.ch mit einem Boa auf anderer
    IP, aber vom selben Host und Verzeichnis. (Dual Pentium III mit
    866 MHz)</li>

<li>noone.org: statische Webseiten und Bilder von einem schlanken
    Apache mit mod_proxy, der Anfragen nach dynamischen Seiten an
    einem Apache mit mod_perl und Embperl sowie einen Apache mit PHP
    auf hohen Ports weitergibt. (War lange Zeit ein Pentium II.)</li>

</ul>
</slidestart>

<slideend i=5>
<h3>Kleine, flotte Webserver</h3>

<p>

Es gibt neben den "großen" Webservern wie Apache, Roxen und Co. auch
viele, kleine Webserver, die zwar oft wenig Features haben, dafür aber
auch wenig Ressourcen brauchen, sehr schnell sind und sich auch von
einer großen Menge an Anfragen nicht beeindrucken lassen, so
z.B. <em>Boa, bozohttpd, dhttpd, fnord, mathopd, micro-httpd (per
inetd), thttpd oder thy</em>. Wenn, wie oft auf sehr alten Rechnern,
geringer Speicherverbrauch wichtiger als Performance ist, nicht nur
selten gebrauchte Daemons sondern auch den Webserver per inetd laufen
lassen.

</p>
</slideend>

<slidestart i=21>
<h2>Webseiten leicht gemacht</h2>

<p>

Was aber tun, wenn man statische Webseiten einheitlich gestalten will,
aber nicht immer alle Änderungen am Design oder der Menüstruktur
manuell nachpflegen möchte?

</p></slidestart>

<slidemid i=19><p>
Es gibt zwei einfache Lösungen für dieses Problem:

</p>
</slidemid>

<slidemid i=10>
<h3>CSS</h3>

<p>

CSS-basierte Webseiten bieten die Möglichkeit, das komplette Design
auszutauschen ohne alle Dateien zu bearbeiten. Und Seiten ohne tief
verschachtelte Tabellen machen Webs schlanker, übersichtlicher,
leichter wartbar und einfacher zu vereinheitlichen. Und wenn das CSS
in einer externen Datei liegt, muß es auch nur einmal vom Server
geladen werden und ist dann im Cache.

</p></slidemid><slideend i=5>

<h3>Statische Seiten generieren</h3>

<p>

Die andere Möglichkeit ist, Webseiten aus "Quellen" statisch zu
generieren, wie man aus C-Code ausführbare Programme kompiliert.

</p></slideend>

<slidestart i=19>
<h3>Tools zum Generieren statischer Webseiten</h3>

<p>

Ein Tool bzw. genauer eine Tool-Sammlung, das speziell für diesen
Zweck entwickelt wurde, ist die <a href="http://thewml.org/">Website
Meta Language</a>, welche aus neun hintereinandergeschalteten Tools
besteht, die jeweils als Filter fungieren und zusammen eine relativ
mächtige und dennoch übersichtliche Makro-Sprache bieten.

</p></slidestart><slidemid i=15><p>

Wenn man eher ein Blog statisch generieren möchte, dann ist eher
Blosxom (oder evtl. auch eines der Derivate wie PyBlosxom) einen Blick
wert.

</p></slidemid><slideend i=11><p>

Ansonsten bieten viele sog. Templating-Systeme die Möglichkeit,
Webseiten "offline" zu generieren (z.B. "embpexec.pl" bei Embperl und
"php" bei PHP).

<comment>

Warum braucht man heute dicke Webserver? Webseiten werden heutzutage
oft dynamisch aus Content Management Systemen (CMS) erzeugt und bei
jedem Aufruf muß der Server den Code der Webseite abarbeiten, viele
verschiedene Dateien öffen, Datenbanken abfragen, Cookies analysieren,
alles wieder zusammenbauen und rausschicken.

</comment>

</p>
</slideend>

<slide i=10>
<h3>Alte Rechner als Surf-Terminal</h3>

<p>

Um für Eltern, Großeltern oder kleine Geschwister aus einem alten, auf
den ersten Blick nicht mehr nutzbaren Rechner ein Surf-Terminal zu
machen, braucht's nicht viel:

</p><p>

Eine geeignete Linux-Distribution oder ein BSD und einen passenden,
sparsamen Webbrowser, z.B.
<ul>
<li>Opera (kostenlos, aber nicht frei)</li>
<li>Kazehakase (Gecko plus GTK+, zukünftig auch mit anderen
    Rendering-Engines)</li>
<li>Dillo (GTK+ bzw. zukünftig FLTK)</li>
<li>links2 (X, Framebuffer und Text-Modus, kann JavaScript)</li>
<li>Lynx (der Klassiker im Text-Modus)</li>
<li>links, elinks (Text-Modus)</li>
<li>w3m (Text-Modus)</li>
</ul>
</slide>

<slidestart i=18>
<h2>Links</h2>

<ul>
  <li>Dieser Vortrag: <a href="http://noone.org/kiss/"
      >http://noone.org/kiss/</a>

  <li>thttpd: <a href="http://www.acme.com/software/thttpd/"
      >http://www.acme.com/software/thttpd/</a></li>

  <li>Website Meta Language: <a href="http://thewml.org/"
      >http://thewml.org/</a></li>

  <li>Blosxom: <a href="http://blosxom.sourceforge.net/"
      >http://blosxom.sourceforge.net/</a>, <a href="http://www.blosxom.com/"
      >http://www.blosxom.com/</a></li>

  <li>Dillo: <a href="http://www.dillo.org/"
      >http://www.dillo.org/</a></li>
  
  <li>Kazekahase: <a href="http://kazehakase.sourceforge.jp/"
      >http://kazehakase.sourceforge.jp/</a></li>
  
</ul>
</slidestart>

<slideend i=7>
<h2>Danke</h2>

<ul>

  <li>Marko Jung, für die Anregung, einmal einen konzeptionellen
      Vortrag zum Thema Web zu halten.</li>

  <li>Lou Montulli, Michael Grobe und Charles Rezac f&uuml;r
      <a href="http://lynx.browser.org/">Lynx</a></li>

  <li>dem <a href="http://www.debian.org/">Debian-Projekt</a> f&uuml;r
      Debian GNU/Linux.</li>
</ul>
</slideend>

<address><p align="right">
Letzte &Auml;nderung an den Quellen: <get-var WML_SRC_ISOTIME /><br/>
Letzte Generierung: <get-var WML_GEN_ISOTIME /><br />
Generiert von <get-var WML_GEN_USERNAME />@<get-var WML_GEN_HOSTNAME />
mit WML <get-var WML_VERSION /><br/>
$Id$
</p></address>
</body>
</html>


