<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
  <title type="text">Der Beweis | Atom Feed</title>
  <subtitle type="text">Allerlei wissenswertes im Newsticker..</subtitle>
  <updated>2026-04-12T08:41:18+02:00</updated>
  <id>tag:www.der-beweis.de,2026-04-12:/feed.xml</id>
  <link rel="alternate" type="text/html" href="https://www.der-beweis.de"/>
  <link rel="self" type="application/atom+xml" href="https://www.der-beweis.de/feed.xml"/>
  <generator version="0.0.0" uri="https://www.der-beweis.de">okay</generator>
  <entry>
    <title type="text">Beats</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/beats/index.html"/>
    <id>tag:www.der-beweis.de,2022-10-02:/build/beats/index.html</id>
    <published>2022-10-02T07:56:26+02:00</published>
    <updated>2025-04-25T22:56:49+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Internet Time</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://gitlab.com/spookey/beats">Beats</a>
          </h1>
          <dl>
            <dt>Beschreibung</dt>
            <dd>
              <div>
                Die Internet Time ist eine Erfindung aus der Schweiz,
                auch als
                <a href="https://de.wikipedia.org/wiki/Swatch-Internetzeit">Swatch&amp;trade; Beats&amp;reg;</a>
                bekannt.
              </div>
              <div>Es ist absurd und genial zugleich:</div>
              <div>
                Der Tag wird in
                <code>1000</code>
                Einheiten (Beats) unterteilt, und diese sind weltweit einheitlich.
                Sommer- bzw. Normalzeit gibt es nicht.
              </div>
              <div>
                Punktabzug in der B-Note gibt es, dass dazu eine neue
                Zeitzone erfunden wurde - die
<span><i>Biel Mean Time</i>.</span>              </div>
              <div>
                Ist aber deckungsgleich mit der Normalzeit
                <code>Europe/Berlin</code>
                bzw.
                <code>UTC+1</code>
                .
              </div>
            </dd>
            <dt>Demo</dt>
            <dd>
              <div>
                Beim nächsten Gong sind es:
                <span class="beats">?!?</span>
                Beats!
              </div>
            </dd>
            <dt>Projekt</dt>
            <dd>
              <div>
                Das Problem an sich ist einfach, aber lass doch mal was mit
                <code>MQTT</code>
                und
                <code>WebSockets</code>
                machen.
              </div>
              <div>Buzzword-Kompatibel einen Microservice in Java mit Spring-Boot.</div>
              <div>
                Zum vollen Beat wird dieser per
                <code>MQTT</code>
                veröffentlicht, die Webseite zeigt Beats, Centi-Beats und Milli-Beats
                an.
              </div>
              <div>
                Auch gibt es eine REST-Api und eine Metrics Integration
                für Prometheus.
              </div>
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <div>
                Spring-Boot auf Java 17 (damals; inzwischen 21), dazu den
                WebSocket Stater. Eclipse Paho für den
                <code>MQTT</code>
                Client.
              </div>
              <div>
                Im Frontent: Vue3, SockJs und WebStomp.
                Dazu Bulma fürs CSS.
              </div>
            </dd>
            <dt>Implementierung</dt>
            <dd>
              <div>
                Ein Tag hat
                <code>86400</code>
                Sekunden
<span>(<code>24 Stunden * 60 Minuten * 60 Sekunden</code>).</span>              </div>
              <div>
                Fein durch Tausend geteilt ergibt das den Faktor
                <code>86.4</code>
              </div>
              <div>
                Diesen muss man nur mit der momentanen Anzahl
                der Sekunden des Tages
                <span>
                  (in
                  <code>UTC+1</code>
                  natürlich)
                </span>
                multiplizieren, fertig ist der Karton!
              </div>
              <div>
                Das ganze ins Spring Framework geworfen, WebSockets dran
                kleben, einen Aktuator für Prometheus implementieren,
              </div>
              <div>
                dazu noch bisschen mit Paho einen
                <code>MQTT</code>
                Client basteln und zum richtigen Moment die Beats
                auf das (konfigurierbare) Topic publishen.
              </div>
              <div>Nichts weltbewegendes, ganz normaler (Business-) Wahnsinn.</div>
              <div>Aber: es macht Spaß, und so soll es doch auch sein!</div>
            </dd>
            <dt>Impression</dt>
            <dd>
              <div>
                <img alt="Beats Screenshot" src="https://www.der-beweis.de/build/beats/beats.png"/>
              </div>
              <div>
                Zugegeben: Visuell ist die Webseite nicht sehr anspruchsvoll.
                Mehr Information als die aktuelle Zeit ist halt einfach nicht drin.
              </div>
              <div>Immherhin hab ich noch die eine Progress-Bar hingezimmert.</div>
              <div>
                Beim Klick wechselt die Anzeige der Zahl zwischen
                Vollen-, Centi- und Milli-Beats.
                <i>Such wow!</i>
              </div>
            </dd>
            <dd>
              <div>
                Man kann errechnen wie viel Uhr es zum Zeitpunkt des Screenshot
                war - exakt
                <code>17:33:32</code>
                Uhr
<span>(<code>UTC</code>).</span>              </div>
            </dd>
            <dt>Vortrag</dt>
            <dd>
              <div>
                Für den lokalen
                <span>Hackerspace&amp;trade;</span>
                vor Ort hatte ich mal einen
                kurzen Vortrag über diesen Service gehalten.
              </div>
              <div>
                Schließlich läuft Beats auch dort, und füttert die
                <code>MQTT</code>
                Installation brav mit der aktuellen Uhrzeit. Internet kompatibel.
              </div>
              <div>
                Ganz klar, dazu
<span><a href="https://www.der-beweis.de/etc/talks/Internet Time">gibt es auch Folien</a>.</span>              </div>
            </dd>
            <dt>Probleme</dt>
            <dd>
              <div>Zur Zeit des Vortrags hatte ich noch einen fießen Bug im Code...</div>
              <div>
                Das Problem war: Bei Anzeige von Centi- &amp; Milli-Beats wurden
                manchmal die Nachkommastellen übersprungen.
              </div>
              <div>
                <span>Im Prinzip&amp;trade;</span>
                hat alles funktioniert, die (normalen) Beats waren
                doch immer korrekt.
              </div>
              <div>
                Es hat bisschen gedauert, und ich hab viel gefrickelt, bis es
                mir wie Schuppen von den Augen fiel...
              </div>
              <div>
                Ein Beat ist zwar nur eine Minute und
                26.4 Sekunden lang
              </div>
              <div>
                Aber für ein zehntel oder sogar hundertstel davon ist die
                sekundengenaue Auflösung viel zu grob.
              </div>
              <div>
                Sieh an: Nachdem ich alles auf Nanosekunden umgestrickt habe
                schnurrt alles wie ein Kätzchen. Butterweich. Phänomenal!
              </div>
            </dd>
            <dt>Fazit</dt>
            <dd>
              <div>
                Die Komplexität ist echt überschaubar.
                Der Sinn dahinter: Naja.. Fragwürdig.
              </div>
              <div>Dennoch: Es ist eine Fingerübung.</div>
              <div>
                Es ist also möglich mit der sperrigen Sprache Java
                filigrane Sachen zu machen, und dabei alles mit Unit-Tests
                abzudecken.
              </div>
              <div>
                Außerdem wollte ich mir das Thema WebSockets mal ein
                bisschen näher anschauen...
                Es ist interessant, überzeugt mich aber (noch?) nicht.
              </div>
              <div>
                Auch habe ich eine Menge über
                <code>MQTT</code>
                gelernt. Das ist die Hauptsache.
              </div>
              <div>Alles in allem - hat Spaß gemacht; Gerne wieder.</div>
            </dd>
          </dl>
          <div class="foot">
            <div>Internet Time</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>02.10.2022 - 07:56:26</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>25.04.2025 - 22:56:49</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Java" title="Java">Java</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#MQTT" title="MQTT">MQTT</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Microservice" title="Microservice">Microservice</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
        <script>
          !(function(){
            function beats() {
                const now = new Date();
                const raw = (
                    3600 * now.getHours()
                    + 60 * now.getMinutes()
                    +      now.getSeconds()
                    + (60 * (now.getTimezoneOffset() + 60))
                );
                const norm = Math.floor(raw / 86.4);
                const flow = norm &gt; 1000 ? (norm - 1000) : norm;
                return       flow &lt; 0    ? (flow + 1000) : flow;
            }
            setInterval(function() {
                const text = `@${beats()}`;
                Array.from(document.getElementsByClassName('beats'))
                    .forEach((el) =&gt; { el.innerText = text; });
            }, 100);
          })();
        </script>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Show Self</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/show_self/index.html"/>
    <id>tag:www.der-beweis.de,2017-08-26:/build/show_self/index.html</id>
    <published>2017-08-26T11:57:00+02:00</published>
    <updated>2024-08-30T17:28:56+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">recursive self presentation</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Show Self</h1>
          <div>
            Zum erklären von Web-Technologie ist es manchmal recht hilfreich
            den Quelltext auf der Seite gleich mit anzuzeigen.
          </div>
          <div>
            This is possible with just one simple trick!
            (Other developers hate him..)
          </div>
          <div>Die ganze Magie dahinter:</div>
          <div>
            <pre>
              <code>const code = document.createElement('code');</code>
              <code>code.appendChild(document.createTextNode(document.documentElement.outerHTML));</code>
            </pre>
          </div>
          <div>
            Die
            <code>TextNode</code>
            kümmert sich darum die spitzen Klammern in
            <code>&amp;lt;</code>
            bzw.
            <code>&amp;gt;</code>
            umzuwandeln.
          </div>
          <div>
            Das ganze noch in ein
            <code>pre</code>
            Tag schieben und an den
            <code>body</code>
            anhängen.. Fertig!
          </div>
          <div class="foot">
            <div>recursive self presentation</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>26.08.2017 - 11:57:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>30.08.2024 - 17:28:56</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#JavaScript" title="JavaScript">JavaScript</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
        <script>
          const code = document.createElement('code');
          code.appendChild(document.createTextNode(document.documentElement.outerHTML));
          
          const pre = document.createElement('pre');
          pre.appendChild(code);
          
          const main = document.createElement('div');
          main.setAttribute('class', 'main'); // not required - site specific
          main.appendChild(pre);
          
          document.body.appendChild(main);
        </script>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Topical</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/topical/index.html"/>
    <id>tag:www.der-beweis.de,2022-12-16:/build/topical/index.html</id>
    <published>2022-12-16T20:39:05+01:00</published>
    <updated>2024-04-20T21:44:42+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">MQTT Backlog</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://gitlab.com/spookey/topical">Topical</a>
          </h1>
          <dl>
            <dt>Motivation</dt>
            <dd>
              <div>
                Beim Einsatz von Messaging
<span>(<code>MQTT</code>)</span>                ist es oft hilfreich die Liste vergangener Nachrichten
                einsehbar zu haben.
              </div>
            </dd>
            <dt>Hintergrund</dt>
            <dd>
              <div>
                Mir wurde
                <code>MQTT</code>
                immer wieder wärmstens empfohlen, niederschwellig, Hacker-freundlich
                und auch sonst so.
              </div>
              <div>
                Im lokalen
                <span>Hackerspace&amp;trade;</span>
                vor Ort wird bisschen mit IOT rumgespielt, also hab ich mal einen
                Broker auf den Server vor Ort geworfen.
              </div>
              <div>
                Mein Erfahrungs-Horizont von Messaging ist sehr begrenzt
                (nicht vorhanden).
              </div>
              <div>
                Also rein in die Materie und sich die Finger schmutzig machen.
                Die meisten Dinge lernt man wenn man direkt mit Problemen
                konfrontiert wird.
              </div>
            </dd>
            <dt>Projekt</dt>
            <dd>
              Ein
              <code>MQTT</code>
              Client, der auf verschiedenen Topics lauscht, die Daten
              irgendwie abspeichert, und dann als Webseite wieder ausgibt.
            </dd>
            <dt>Vorgänger</dt>
            <dd>Zunächst hatte ich versucht das Problem mit Python zu lösen.</dd>
            <dd>
              Besagter
              <code>MQTT</code>
              Client ist dauerhaft am lauschen, und wirft die Daten in eine
              <code>SQLite</code>
              Datenbank.
            </dd>
            <dd>
              Die Webseite jedoch wurde bei jeder Änderung statisch gerendert.
              Mag funktionieren, jedoch bei vielen Nachrichten auf vielen Topics
              wird es hakelig.
            </dd>
            <dd>
              Also wird dies als Machbarkeits-Studie verbucht, und dann einmal
              ordentlich neu umgesetzt.
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <div>
                Spring-Boot auf Java 17 (damals; inzwischen 21).
                Eclipse Paho für den
                <code>MQTT</code>
                Client.
              </div>
              <div>
                Dazu eine ordentliche
                <code>MySQL</code>
                Datenbank.
              </div>
              <div>Das Frontent komplett in Thymeleaf, dazu Bulma fürs CSS.</div>
            </dd>
            <dt>Implementierung</dt>
            <dd>
              <div>
                Kaum wechselt man auf eine solide Technologie fängt alles an
                Spaß zu machen.
              </div>
              <div>
                Jede Message landet innerhalb von einem eigenen Thread in der
                Datenbank.
                Somit sind tausende parallel ankommende Messages kein Problem mehr.
              </div>
              <div>
                Ich bin bisschen verwundert: Die Spezifikation von
                <code>MQTT</code>
                Sagt absolut nichts über den Inhalt der Messages aus.
              </div>
              <div>
                Das einzige was drin steht:
<span>Es sind <code>bytes</code>.</span>                Schönen Dank! Little Endian oder Big Endian?!
              </div>
              <div>
                Natürlich hab ich mich letztendlich für Big Endian entschieden.
                Kein Frage!
              </div>
              <div>
                Eine Design Entscheidung war auch die Filter der Topics auf
                denen gelauscht wird in die Datenbank zu legen.
              </div>
              <div>
                Mag bisschen verwunderlich sein, wenn man die Anwendung das
                erste mal startet. Es passiert nichts, da noch keine Filter da sind.
              </div>
              <div>
                Auf der anderen Seite erlaubt es die Anpassung der
                Filter zur Laufzeit. Neu laden zur Laufzeit inklusive.
              </div>
              <div>Als Bonus gibt es noch eine Callback-API.</div>
              <div>
                Eine Message die durch einen bestimmten Filter auf ein Topic
                reinkommt lässt sich auf einen
                <code>HTTP</code>
                Endpunkt weiterleiten.
              </div>
              <div>
                Genauso auch umgekehrt:
                Man kann die API nutzen um Messages auf diversen Topics
                zu veröffentlichen.
              </div>
            </dd>
            <dt>Impressionen</dt>
            <dd>
              <div>
                <img alt="Topical Homepage" src="https://www.der-beweis.de/build/topical/topical.png"/>
              </div>
              <div>
                Die Homepage. Oben eine Übersicht wie viele Messages insgesamt
                auf wie vielen Topics jemals eingesammelt wurden.
              </div>
              <div>Unten folgen dann die Details zu den einzelnen Messages.</div>
            </dd>
            <dd>
              <div>
                <img alt="Topical report" src="https://www.der-beweis.de/build/topical/topical-report.png"/>
              </div>
              <div>
                Topical selbst schickt Nachrichten
                über eigene Statistiken zur Laufzeit.
              </div>
            </dd>
            <dd>
              <div>
                <img alt="Topical data type details" src="https://www.der-beweis.de/build/topical/topical-bytes.png"/>
              </div>
              <div>
                In
                <code>MQTT</code>
                sind die Datentypen nicht definiert.
                Deshalb werden verschiedene Varianten der Interpretation ausgegeben.
              </div>
              <div>
                Hier kam eine ganz normale Ganzzahl in Form von rohen
                <code>bytes</code>
                daher.
              </div>
            </dd>
            <dt>Fazit</dt>
            <dd>
              <div>
                Auf dem Weg zur endgültigen Anwendung war es eine längere
                Durststrecke. Zeitweise bisschen nervig.
              </div>
              <div>
                Ab dem Punkt als das Projekt sichtbar Gestalt annahm machte
                es eine menge Spaß.
              </div>
              <div>
                Habe natürlich eine Menge über Messaging im Allgemeinen
                und Speziellen über
                <code>MQTT</code>
                gelernt.
              </div>
              <div>
                Es ist herrlich einfach sich Schleifen im Message-Bus
                zu bauen.
              </div>
              <div>
                Erst recht bei Verwendung einer
                <code>HTTP</code>
                Bridge. So eine wie ich in Topical eingebaut habe.
              </div>
              <div>Umso nerviger ist es die Schleifen aufzulösen.</div>
              <div>
                Aber halb so wild. Mit Topical hat man ein mächtiges
                Debugging Tool zur Hand.
              </div>
            </dd>
            <dt>Ausblick</dt>
            <dd>
              <div>Das Projekt wirkt zeitweise ein bisschen wie eingeschlafen.</div>
              <div>
                Das liegt aber nicht daran dass ich das Interesse verloren habe.
                Im Gegenteil, es wird rege genutzt.
              </div>
              <div>
                Es hat einen Punkt erreicht wo es nichts mehr zum hinzufügen
                oder wegnehmen gibt.
              </div>
              <div>
                Alles was bleibt ist von Zeit zu Zeit die Abhängigkeiten auf
                Stand zu bringen.
                Perfekter Zustand - gerne mehr davon!
              </div>
            </dd>
          </dl>
          <div class="foot">
            <div>MQTT Backlog</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>16.12.2022 - 20:39:05</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>20.04.2024 - 21:44:42</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Java" title="Java">Java</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#MQTT" title="MQTT">MQTT</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Microservice" title="Microservice">Microservice</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">/build</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/index.html"/>
    <id>tag:www.der-beweis.de,2016-06-23:/build/index.html</id>
    <published>2016-06-23T21:59:00+02:00</published>
    <updated>2023-12-19T21:16:55+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Meine Projekte</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="tile">
          <div class="head">Internet Time</div>
<div class="tail"><a href="https://www.der-beweis.de/build/beats">beats</a>.<a href="https://gitlab.com/spookey/beats">git</a></div>        </div>
        <div class="tile">
          <div class="head">MQTT Logbook</div>
<div class="tail"><a href="https://www.der-beweis.de/build/topical">topical</a>.<a href="https://gitlab.com/spookey/topical">git</a></div>        </div>
        <div class="tile">
          <div class="tail">&amp;#x270c;&amp;#xfe0e;</div>
        </div>
        <div class="tile">
          <div class="head">
            <div>Sprachen vergleichbar machen.</div>
            <div>
              <img alt="e" src="https://www.der-beweis.de/build/euler/e.svg"/>
            </div>
          </div>
<div class="tail"><a href="https://www.der-beweis.de/build/euler">euler</a>.<a href="https://github.com/spookey/euler">git</a></div>        </div>
        <div class="tile">
          <div class="head">My coffee machine is full power!</div>
<div class="tail"><a href="https://www.der-beweis.de/build/full_power">full_power</a>.<a href="https://github.com/spookey/full_power">git</a></div>        </div>
        <div class="tile">
          <div class="head">My automated home is on fire!</div>
<div class="tail"><a href="https://www.der-beweis.de/build/master_control">master_control</a>.<a href="https://github.com/spookey/master_control">git</a></div>        </div>
        <div class="tile">
          <div class="head">version 0.0.0</div>
<div class="tail">./<a href="https://www.der-beweis.de/build/okay">okay</a></div>        </div>
        <div class="tile">
          <div class="tail">&amp;#x2601;&amp;#xfe0e;</div>
        </div>
        <div class="tile">
          <div class="head">Datensammler Daten sammeln.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/baypack">baypack</a>.<a href="http://bitbucket.com/spky/baypack">git</a></div>        </div>
        <div class="tile">
          <div class="head">Info-Display der Talks &amp; Termine für die MRMCD13.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/flightboard">flightboard</a>.<a href="https://github.com/spookey/mrmcd13-flightboard">git</a></div>        </div>
        <div class="tile">
          <div class="head">Eine Webapp für Barcode-Scanner &amp; Menschen.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/inventar">inventar</a>.<a href="http://bitbucket.com/spky/inventar">git</a></div>        </div>
        <div class="tile">
          <div class="head">Automatisierter Wochenrückblick.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/today_i">today-I</a>.<a href="https://github.com/spookey/today-I">git</a></div>        </div>
        <div class="tile">
          <div class="tail">&amp;#x266a;&amp;#xfe0e;</div>
        </div>
        <div class="tile">
          <div class="head">FreifunkAPI Files aktuell halten.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/ffflash">ffflash</a>.<a href="https://github.com/spookey/ffflash">git</a></div>        </div>
        <div class="tile">
          <div class="head">Wo ist mein Router?</div>
<div class="tail"><a href="https://www.der-beweis.de/build/locate_me">locate_me</a>.<a href="https://github.com/spookey/locate_me">git</a></div>        </div>
        <div class="tile">
          <div class="tail">&amp;#x2602;&amp;#xfe0e;</div>
        </div>
        <div class="tile">
          <div class="head">Wann ist denn endlich Pause?!</div>
<div class="tail"><a href="https://www.der-beweis.de/build/impatient">impatient</a>.<a href="https://github.com/spookey/impatient">git</a></div>        </div>
        <div class="tile">
          <div class="head">Sortieralgorithmen, von Hand.</div>
<div class="tail"><a href="https://www.der-beweis.de/build/squirrelsort">squirrelsort</a>.<a href="https://github.com/spookey/squirrelsort">git</a></div>        </div>
        <div class="tile">
          <div class="tail">&amp;#x2603;&amp;#xfe0e;</div>
        </div>
        <div class="tile">
          <div class="head">Druckzeitberechnung von 3D-Objekten.</div>
          <div class="tail">
            <a href="https://www.der-beweis.de/build/stempeluhr">stempeluhr</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">recursive self presentation</div>
          <div class="tail">
            <a href="https://www.der-beweis.de/build/show_self">show_self</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div>
              Bookmarklet
              —
              zeigt Youtube-Videos in einem kleinem Popup-Fenster an.
            </div>
            <div>
              <small>inaktiv — kein php auf dem Server...</small>
            </div>
          </div>
          <div class="tail">
            <a href="https://www.der-beweis.de/build/minitube.php">minitube</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">WordPress Plugin zum einbinden von Videos.</div>
          <div class="tail">
            <a href="https://www.der-beweis.de/build/videowarrior">video warrior</a>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/flightboard</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/flightboard/ls.html"/>
    <id>tag:www.der-beweis.de,2023-12-19:/build/flightboard/ls.html</id>
    <published>2023-12-19T21:16:55+01:00</published>
    <updated>2023-12-19T21:16:55+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">MRMCD2013 Flightboard</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>MRMCD2013 Flightboard</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130906_001.jpg" title="build/flightboard/20130906_001.jpg">20130906_001.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130906_002.jpg" title="build/flightboard/20130906_002.jpg">20130906_002.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130906_004.jpg" title="build/flightboard/20130906_004.jpg">20130906_004.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130906_005.jpg" title="build/flightboard/20130906_005.jpg">20130906_005.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130906_006.jpg" title="build/flightboard/20130906_006.jpg">20130906_006.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/20130908_002.jpg" title="build/flightboard/20130908_002.jpg">20130908_002.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/index.html" title="build/flightboard/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/up-next-fr.png" title="build/flightboard/up-next-fr.png">up-next-fr.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard/up-next-sa.png" title="build/flightboard/up-next-sa.png">up-next-sa.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">MRMCD2013 Flightboard</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/flightboard/index.html"/>
    <id>tag:www.der-beweis.de,2023-12-19:/build/flightboard/index.html</id>
    <published>2023-12-19T21:16:55+01:00</published>
    <updated>2023-12-19T21:16:55+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Info-Display der Talks &amp; Termine für die MRMCD13</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/mrmcd13-flightboard">Flightboard</a>
          </h1>
          <div>
            <div>
              Es ist schon sehr sehr lange her, aber neulich
              bin ich wieder über dieses Projekt gestolpert.
              Also warum nicht hier darüber schreiben?!
            </div>
            <div>
              Im Jahre 2013 war der Hackerspace vor Ort &amp;copy; in der
              Organisation zur
              <a href="https://2013.mrmcd.net">Konferenz MRMCD2013</a>
              stark mit eingebunden.
              Wir haben das Netzwerk gemacht.
            </div>
            <div>
              Ich frisch dabei, voller Energie aber im Thema Netzwerk
              damals leider noch nicht ganz so fit.
            </div>
            <div>
              Dennoch - eine Nische hatte ich doch noch gefunden wo ich dann
              auch etwas beisteuern konnte:
              Das Informations-Display am Haupteingang
              möchte mit Inhalt befüllt werden!
            </div>
            <div>
              Was auf den MRMCDs immer großartig ist:
              Es gibt (gab?) immer ein Motto, und das wird immer sehr
              aufwändig &amp; liebevoll umgesetzt.
              Dieses mal: Luftfahrt!
            </div>
            <div>
              Es war wie am Flughafen - Die Vorträge hatten Flugnummern, die
              Säale wurden Gates genannt, Besucher waren Passagiere,
              Sicherheitseinweisung inklusive...
            </div>
            <div>
              Ich erinnere mich noch an stundenlanges Papierflieger falten,
              Bindfaden ran und an die Decke hängen. Sah toll aus.
            </div>
          </div>
          <div>
            Ich - noch neu im Geschäft - hab also eine
            <code>Flask</code>
            Anwendung für das Informations-Display gebaut
            (Würde ich heute ganz anders machen, ist doch klar).
          </div>
          <div>
            Es gibt (gab?) ein
            <code>jQuery</code>
            Plugin das eine Fallblatt Anzeige simuliert.
            Das, und ein Parser der sich den kompletten Fahrplan der Konferenz
            lädt, bisschen hübsch in
            <code>html</code>
            aufbereitet und fertig ist das Projekt!
          </div>
          <div>
            Es ist alles bisschen hämdsärmlich, war jedoch effektiv...
            An vieles erinnere ich mich nicht mehr...
          </div>
          <div>
            Tine hatte mir damals die Sprites des Fonts im Photoshop für das
            <code>jQuery</code>
            Plugin generiert. Vielen lieben Dank - großarige Aktion!
          </div>
          <div>
            Am Scroll-Effekt (Titel ist länger als der
            vorhandene Platz in der Anzeige) habe ich bisschen länger geknobelt.
          </div>
          <div>
            Die Aufregung war riesig - der Hausmeister meinte, der Raum wo das
            Monitorkabel fürs Informations-Display endet muss die ganze Konferenz
            über verschlossen bleiben.
          </div>
          <div>
            Geheiligt sei dein Wochenende lieber Hausmeister, von mir aus...
            Also hab ich noch schnell
            <code>ssh</code>
            und
            <code>VNC</code>
            auf dem Laptop auf dem die Anwendung lief  eingerichtet..
            Wird schon nichts passieren!!1!
          </div>
          <div>
            Haha - weit gefehlt... Es ist eine Konferenz mit Hackern drin -
            natürlich war am Ende das komplette System offen..
            Dennoch human - Erst am Ende der Konferenz scrollten die Meme-Bilder
            über den Bildschirm.
          </div>
          <div>
            Im Nachgang hatte ich den Code auch noch weiter verwertet
            um für die
            <a href="https://media.ccc.de/c/mrmcd13">Aufzeichnungen der Vorträge</a>
            Info-Screens als Preroll zu generieren. Feine Sache das.
          </div>
          <div>Hatte damals noch ein paar Screenshots gemacht, auch fein:</div>
          <div>
            <div>
              <img alt="MRMCD2013 Flightboard Freitag" src="https://www.der-beweis.de/build/flightboard/up-next-fr.png"/>
            </div>
            <div class="centered">Hier lassen sich sogar ein bisschen die fallenden Lettern erkennen.</div>
            <div class="centered">
              Auf
              <a href="https://blogs.gnome.org/muelli/2013/09/mrmcd2013">dieser Seite hier</a>
              hab ich noch ein Foto vom Bildschirm selbst gefunden...
            </div>
          </div>
          <div>
            <div>
              <img alt="MRMCD2013 Flightboard Samstag" src="https://www.der-beweis.de/build/flightboard/up-next-sa.png"/>
            </div>
            <div class="centered">Haha - genau zum passenden Zeitpunkt den Screenshot gemacht!</div>
            <div class="centered">
              <small>
                Nein, doch nicht - der Quellcode verrät mir das war ein guter
                Zeitpunkt zum debuggen.. lol!
              </small>
            </div>
          </div>
          <div class="foot">
            <div>Info-Display der Talks &amp; Termine für die MRMCD13</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>19.12.2023 - 21:16:55</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#CCC" title="CCC">CCC</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#MRMCD" title="MRMCD">MRMCD</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Unsichtbare Farben</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/eyes.html"/>
    <id>tag:www.der-beweis.de,2023-11-06:/etc/eyes.html</id>
    <published>2023-11-06T21:57:05+01:00</published>
    <updated>2023-11-06T21:57:05+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Farben in Schwarz-Weiß-Bildern sehen</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Unsichtbare Farben</h1>
          <div class="container"></div>
          <dl>
            <dt>Anleitung</dt>
            <dd>Lange auf das Bild mit den lustigen Farben starren (nicht bewegen).</dd>
            <dd>Beim drauf klicken wird es durch ein Schwarz-Weiß-Bild getauscht.</dd>
            <dd>Die ersten Momente erscheint es so, als sei es bunt.</dd>
          </dl>
          <div>
            <div>
              mind
              &amp;#x270c;&amp;#xfe0e;
              blown!
            </div>
          </div>
        </div>
        <style>
          .container {
            background: top center no-repeat url('.hero-cl.jpg');
            height: 250px;
          }
          .container-active {
            background: top center no-repeat url('.hero-bw.jpg');
          }
          body::before {
            /* image preloading hack */
            content: url('.hero-bw.jpg');
            position: absolute;
            top: -9999rem;
            left: -9999rem;
            opacity: 0;
          }
        </style>
        <script>
          document.addEventListener('DOMContentLoaded', function() {
            const ACT = 'container-active';
            for (const elem of document.getElementsByClassName('container')) {
              elem.addEventListener('click', function() {
                elem.classList.contains(ACT)
                  ? elem.classList.remove(ACT)
                  : elem.classList.add(ACT);
              });
            }
          }, false);
        </script>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/topical</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/topical/ls.html"/>
    <id>tag:www.der-beweis.de,2022-12-16:/build/topical/ls.html</id>
    <published>2022-12-16T20:39:05+01:00</published>
    <updated>2022-12-16T20:39:05+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Topical</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Topical</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/topical/index.html" title="build/topical/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/topical/topical-bytes.png" title="build/topical/topical-bytes.png">topical-bytes.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/topical/topical-report.png" title="build/topical/topical-report.png">topical-report.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/topical/topical.png" title="build/topical/topical.png">topical.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/beats</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/beats/ls.html"/>
    <id>tag:www.der-beweis.de,2022-10-02:/build/beats/ls.html</id>
    <published>2022-10-02T07:56:26+02:00</published>
    <updated>2022-10-02T07:56:26+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Beats</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Beats</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/beats/beats.png" title="build/beats/beats.png">beats.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/beats/index.html" title="build/beats/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Happy</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/happy.html"/>
    <id>tag:www.der-beweis.de,2016-07-08:/etc/happy.html</id>
    <published>2016-07-08T11:53:00+02:00</published>
    <updated>2020-10-31T14:09:55+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">This feels great</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <style>
          .happy {
            animation-duration: 2s;
            animation-iteration-count: infinite;
            animation-name: lucky;
            animation-timing-function: linear;
            background: #000000;
            background: linear-gradient(
                to bottom,
                    #56ff82 0,
                    #3d8de8 20%,
                    #d84fff 40%,
                    #e8805b 60%,
                    #ffdf40 80%,
                    #56ff82 100%
            );
            background-size: 200% 200%;
            display: table;
            height: 18rem;
            margin: 2.5rem;
            padding: 1rem;
            width: 18rem;
          }
          @keyframes lucky {
            0%   {background-position: 0 -100%;}
            100% {background-position: 0  100%;}
          }
          .jolly {
            background: #ffffff;
            color: #000000;
            display: table-cell;
            font-size: 12rem;
            mix-blend-mode: screen;
            text-align: center;
            vertical-align: middle;
          }
        </style>
        <div class="main">
          <div class="happy">
            <div class="jolly">&amp;#x266b;&amp;#xfe0e;</div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Aua</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/aua.html"/>
    <id>tag:www.der-beweis.de,2016-07-08:/etc/aua.html</id>
    <published>2016-07-08T11:53:00+02:00</published>
    <updated>2020-10-31T13:46:24+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">This hurts</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <style>
          html {
            background-color: white;
            background-image: linear-gradient(
              to right top,
                white 0%,
                white 25%,
                black 25%,
                black 50%,
                white 50%,
                white 75%,
                black 57%,
                black 100%
              );
            background-size: 12px 12px;
          }
        </style>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Noise</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/noise.html"/>
    <id>tag:www.der-beweis.de,2016-12-17:/etc/noise.html</id>
    <published>2016-12-17T19:57:00+01:00</published>
    <updated>2020-10-31T13:46:24+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">My screen makes weird noise</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <style>
          html {
            background-color: black;
            background-image: repeating-linear-gradient(
              -45deg,
              black,
              black 10px,
              white 10px,
              white 20px
            );
            background-size: 15px 15px;
          }
        </style>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Squirrelsort</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/squirrelsort/index.html"/>
    <id>tag:www.der-beweis.de,2018-07-12:/build/squirrelsort/index.html</id>
    <published>2018-07-12T11:57:30+02:00</published>
    <updated>2019-03-25T21:06:56+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Sortieralgorithmen, von Hand.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/squirrelsort">Squirrelsort</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Bei der Vorbereitung zur Abschlussprüfung für meine Schule bin ich
              über eine Aufgabe gestolpert:
            </dd>
            <dd>
              <cite>Bitte lösen Sie folgendes Problem mit Pseudocode ...</cite>
            </dd>
            <dd>
              <cite>Einen Sortieralgorithmus implementieren Sie selbst.</cite>
            </dd>
            <dd>
              Au weia. Das Problem selbst war recht trivial,
              aber einen Bubblesort mal eben aus dem Ärmel schütteln?
            </dd>
            <dd>
              Vor allem wenn man es gewohnt ist immer
              <code>sorted()</code>
              zu verwenden...
            </dd>
            <dt>Idee</dt>
            <dd>
              Ich bastel mir jetzt mal einen Bubblesort zusammen, um das mal
              wirklich zu verstehen.
            </dd>
            <dd>
              Und um möglichst wenig schummeln zu können habe ich mich für
              <code>C++</code>
              entschieden.
            </dd>
            <dt>Umsetzung</dt>
            <dd>
              Als erstes schreibt man sich ein
              <code>makefile</code>
              um mit
              <code>clang</code>
              vernünftig reden zu können.
            </dd>
            <dd>
              Danach ein paar Funktionen um Arrays am Display darzustellen,
              sowie mit Zufallszahlen zu befüllen.
            </dd>
            <dd>
              Jetzt geht es an den eigentlichen Sortieralgorithmus:
              Erstmal einen
<span><a href="https://en.wikipedia.org/wiki/Bubble_sort">Bubblesort</a>.</span>            </dd>
            <dd>
              Nachdem man ein bisschen aufgeräumt hat, fängt man an
              im Web rumzuklicken..
            </dd>
            <dd>
              <cite>Da gibt es doch noch viel mehr...</cite>
            </dd>
            <dt>Umfang</dt>
            <dd>
              Letztendlich habe ich eine ganze Menge Sortieralgorithmen
              implementiert:
            </dd>
            <dd>
              <ul>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Bubble_sort">Bubblesort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Comb_sort">Combsort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Heapsort">Heapsort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Insertion_sort">Insertionsort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Merge_sort">Mergesort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Quicksort">Quicksort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Selection_sort">Selectionsort</a>
                </li>
                <li>
                  <a href="https://en.wikipedia.org/wiki/Shellsort">Shellsort</a>
                </li>
              </ul>
            </dd>
            <dt>Ausgabe</dt>
            <dd>
              Das Programm generiert in der jetzigen Form
              folgende Ausgabe:
            </dd>
            <dd>
              <div>
                <div class="literal">
                  <pre>input data:
[    15,    14,    13,    12,    11,    10,     9,     8,     7,     6,     5,     4,     3,     2,     1,     0 ]
(ok) - bubble:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - comb:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - heap:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - insert:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - merge:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - quick:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - select:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]
(ok) - shell:
[     0,     1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15 ]

input data:
[     0,    -1,    -2,    -3,    -4,    -5,    -6,    -7,    -8,    -9,   -10,   -11,   -12,   -13,   -14,   -15 ]
(ok) - bubble:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - comb:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - heap:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - insert:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - merge:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - quick:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - select:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]
(ok) - shell:
[   -15,   -14,   -13,   -12,   -11,   -10,    -9,    -8,    -7,    -6,    -5,    -4,    -3,    -2,    -1,     0 ]

input data:
[    36,   -91,   -39,    71,    23,   -66,    78,   -67,   -72,    96,    58,   -16,   -58,     9,    73,   -55 ]
(ok) - bubble:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - comb:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - heap:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - insert:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - merge:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - quick:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - select:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]
(ok) - shell:
[   -91,   -72,   -67,   -66,   -58,   -55,   -39,   -16,     9,    23,    36,    58,    71,    73,    78,    96 ]

input data:
[  -823,  -800,  -326,  -213,  -415,  -765,  -926,  -409,  -997,  -877,  -290,   844,  -302,  -121,   614,  -842 ]
(ok) - bubble:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - comb:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - heap:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - insert:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - merge:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - quick:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - select:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]
(ok) - shell:
[  -997,  -926,  -877,  -842,  -823,  -800,  -765,  -415,  -409,  -326,  -302,  -290,  -213,  -121,   614,   844 ]

input data:
[ -4586, -6474,  3483, -9694,  -963,  6604, -1012,  2676,  8453, -2115,  -459, -1230,  3181,  -801,  8572, -5436 ]
(ok) - bubble:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - comb:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - heap:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - insert:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - merge:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - quick:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - select:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]
(ok) - shell:
[ -9694, -6474, -5436, -4586, -2115, -1230, -1012,  -963,  -801,  -459,  2676,  3181,  3483,  6604,  8453,  8572 ]


input length:                     64
(ok) - bubble:                 45800
(ok) - comb:                   12000
(ok) - heap:                   51600
(ok) - insert:                 10100
(ok) - merge:                  21700
(ok) - quick:                 193300
(ok) - select:                 16400
(ok) - shell:                  30400

input length:                    128
(ok) - bubble:                178000
(ok) - comb:                   26000
(ok) - heap:                   39100
(ok) - insert:                 34300
(ok) - merge:                  38600
(ok) - quick:                  20300
(ok) - select:                 68500
(ok) - shell:                  24600

input length:                    256
(ok) - bubble:               1102700
(ok) - comb:                   56000
(ok) - heap:                   97900
(ok) - insert:                109000
(ok) - merge:                  77100
(ok) - quick:                  40500
(ok) - select:                196400
(ok) - shell:                  57300

input length:                    512
(ok) - bubble:               1629200
(ok) - comb:                  126800
(ok) - heap:                  185700
(ok) - insert:                427700
(ok) - merge:                 178900
(ok) - quick:                  88700
(ok) - select:                700500
(ok) - shell:                 131200

input length:                   1024
(ok) - bubble:               8501400
(ok) - comb:                  296100
(ok) - heap:                  407900
(ok) - insert:               1708400
(ok) - merge:                 343800
(ok) - quick:                 187500
(ok) - select:               3683300
(ok) - shell:                 357700

input length:                   2048
(ok) - bubble:              35942700
(ok) - comb:                  683700
(ok) - heap:                  921300
(ok) - insert:              12688500
(ok) - merge:                 761800
(ok) - quick:                 410300
(ok) - select:              12900200
(ok) - shell:                 852900

input length:                   4096
(ok) - bubble:             135837800
(ok) - comb:                 1438200
(ok) - heap:                 1948400
(ok) - insert:              37952300
(ok) - merge:                1761300
(ok) - quick:                1538600
(ok) - select:              52090200
(ok) - shell:                2136500
</pre>
                </div>
              </div>
            </dd>
            <dd>Der obere Teil zeigt das zu sortierende Array, sowie das Ergebnis an.</dd>
            <dd>
              Anfangs absteigend positive bzw. negative Zahlen,
              dann Zufallszahlen zwischen
              <span>&amp;#177; 99,</span>
              <span>&amp;#177; 999</span>
              und
              <span>&amp;#177; 9999.</span>
            </dd>
            <dd>Einfach nur um sicher zu stellen, dass korrekt sortiert wird.</dd>
            <dd>
              Im unteren Teil werden Arrays in den Längen von 64 bis 4096
              mit Zufallszahlen
              <span>&amp;#177; 9999</span>
              sortiert.
            </dd>
            <dd>
              Dabei wird die Zeit gestoppt - somit lassen sich die Algorithmen
              untereinander vergleichen.
            </dd>
            <dt>Fazit</dt>
            <dd>
              <a href="https://en.wikipedia.org/wiki/Bubble_sort">Bubblesort</a>
              ist in allen Tests immer mit Abstand am langsamsten.
            </dd>
            <dd>
              <a href="https://en.wikipedia.org/wiki/Quicksort">Quicksort</a>
              macht seinem Namen alle Ehere!
              Leider nicht bei kurzen Arrays, bei langen aber umso mehr.
            </dd>
            <dd>
              Ganz interessant sind noch
<span><a href="https://en.wikipedia.org/wiki/Comb_sort">Combsort</a>,</span>              sowie
<span><a href="https://en.wikipedia.org/wiki/Insertion_sort">Insertionsort</a>.</span>            </dd>
          </dl>
          <div class="foot">
            <div>Sortieralgorithmen, von Hand.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>12.07.2018 - 11:57:30</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>25.03.2019 - 21:06:56</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#C%2B%2B" title="C++">C++</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Impatient</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/impatient/index.html"/>
    <id>tag:www.der-beweis.de,2019-02-28:/build/impatient/index.html</id>
    <published>2019-02-28T19:57:02+01:00</published>
    <updated>2019-02-28T19:57:02+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Wann ist denn endlich Pause?!</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/impatient">Impatient</a>
          </h1>
          <div>
            <img alt="Impatient Screenshot" src="https://www.der-beweis.de/build/impatient/impatient.png"/>
          </div>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Man sitzt im nicht sehr gehaltvollen Unterricht,
              und die Zeit scheint still zu stehen...
            </dd>
            <dd>
              Die Wikipediaseite zum Stoff ist schnell durchgelesen, und hat
              meist mehr Informationen als das was behandelt wird...
            </dd>
            <dt>Idee</dt>
            <dd>
              <i>Wann ist denn endlich Pause?!</i>
            </dd>
            <dd>
              Ich schreib mir jetzt ein Programm, das die Sekunden bis zur
              nächsten Pause runterzählt!!1!
            </dd>
            <dt>Hintergrund</dt>
            <dd>
              Anfangs hatte ich mir ein Python Script geschrieben, das stumpf
              die Sekunden zur nächsten Pause anzeigt.
            </dd>
            <dd>
              Nicht schön, aber funktional — dadurch dass es auf der
              Kommandozeile lief, war die Darstellung nicht so optimal.
            </dd>
            <dd>
              Auf meinem Laptop für die Schule habe ich Wintendo am laufen,
              da alle praktischen Übungen dafür konzipiert sind.
            </dd>
            <dd>
              Mit einem ordentlichen Betriebssystem würde ich zwar nich so oft
              fluchen, mir aber auch das Leben unnögig schwer machen.
            </dd>
            <dd>Also schauen wir mal, wie man für diese Plattform programmiert.</dd>
            <dd>
              Somit sind
              <code>C#</code>
              und
              <code>.NET</code>
              das Mittel der Wahl.
            </dd>
            <dt>Features</dt>
            <dd>
              <div>
                <span>&amp;#x2714;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>
                  <div>Fenster lässt sich dynamisch vergrößern und verkleinern</div>
                  <small>
                    &amp;#x261e;&amp;#xfe0e;
                    Zahlen und Fortschrittsbalken füllen immer den gesamten Platz aus
                  </small>
                </li>
                <li>Kommt damit klar, wenn sich die Uhrzeit des Systems ändert</li>
                <li>Zur vollen Minute blinkt die Hintergrundfarbe</li>
                <li>Zeitintervalle lassen sich in der Konfigurationsdatei einstellen</li>
              </ul>
              <div>
                <span>&amp;#x2718;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>Fixiert auf vier Zeitintervalle - nicht mehr, nicht weniger</li>
                <li>Funktioniert nur unter Windows&amp;trade;</li>
              </ul>
            </dd>
            <dt>Fazit</dt>
            <dd>
              Hatte bisher mit einigen
              <code>C#</code>
              Entwicklern gesprochen, und immer gefragt ob sie zufrieden sind.
            </dd>
            <dd>Die Antwort war zumeist positiv.</dd>
            <dd>
              Ein bisschen
              <code>C#</code>
              konnte ich schon vorher, aber nun kann ich auch die Antworten
              nachvollziehen.
            </dd>
            <dd>
              Die Handhabung mit Zeit ist recht intuitiv und hat mich
              positiv überrascht.
            </dd>
            <dd>
              Die GUI-Elemente lassen sich sinnvoll ansprechen.
              Macht definitv Spaß!
            </dd>
            <dd>
              Beim Multithreading zwischen GUI und Kern-Logik wird einem
              unter die Arme gegriffen.
            </dd>
            <dd>
              <small>
                Man ist sich erstmal gar nicht bewusst, welche Komponente in
                einem Thread läuft
                &amp;#x261e;&amp;#xfe0e;
                Wahrscheinlich Fluch und Segen zugleich.
              </small>
            </dd>
            <dd>VisualStudio ist und bleibt ein Moloch!</dd>
            <dd>
              Was bringt einem der GUI-Designer, wenn dieser einem im
              Code rumpfuscht?
            </dd>
            <dd>
              Deshalb das Projekt immer in einem Repo liegen haben, dann
              merkt man sowas. Trotzdem nervig.
            </dd>
            <dd>
              Alles in allem bleibt aber ein positiver Eindruck.
              <code>C#</code>
              scheint eine recht brauchbare Sprache zu sein.
            </dd>
          </dl>
          <div class="foot">
            <div>Wann ist denn endlich Pause?!</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>28.02.2019 - 19:57:02</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#.NET" title=".NET">.NET</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#C%23" title="C#">C#</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">okay</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/okay/index.html"/>
    <id>tag:www.der-beweis.de,2016-06-30:/build/okay/index.html</id>
    <published>2016-06-30T17:22:41+02:00</published>
    <updated>2019-02-24T17:31:49+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">version 0.0.0</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>okay</h1>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Diese Website hier ist statisch und wird mit einem
              eigenen Tool generiert.
              Es hat den schönen Namen
              <code>okay</code>
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <code>
                <a href="http://pyyaml.org/">PyYAML</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="https://docs.python.org/3/library/xml.dom.minidom.html">xml.dom.minidom</a>
              </code>
              aus der Python Standard Library
            </dd>
            <dt>Features</dt>
            <dd>
              <span>&amp;#x2714;&amp;#xfe0e;</span>
              <ul>
                <li>generiert Webseiten</li>
                <li>
                  generiert einen
                  <a href="https://www.der-beweis.de/feed.xml">Atom Feed</a>
                </li>
                <li>
                  generiert eine
                  <a href="https://www.der-beweis.de/tags.html">Seite mit Tags</a>
                </li>
              </ul>
            </dd>
            <dd>
              <div>
                <span>&amp;#x2718;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>&amp;#x2603;&amp;#xfe0e;</li>
              </ul>
            </dd>
            <dt>Umsetzung</dt>
            <dd>
              Die Webseite wird direkt aus
              <code>YAML</code>
              Files gebaut.
            </dd>
            <dd>
              Damit bin so nah dran am
              <code>HTML</code>
              wie nötig, dabei aber so weit weg wie möglich.
            </dd>
            <dd>
              Der Parser hält sich an
              folgende Konzepte:
              <ul>
                <li>
                  <div>Die Grundstruktur ist eine Liste.</div>
                  <div>
                    <small>neues Listenelement == neue Zeile im HTML.</small>
                  </div>
                </li>
                <li>
                  <div>Strings werden formatiert, bevor sie weitergereicht werden.</div>
                  <div>Damit ist es möglich Variablen einzuschleusen:</div>
                  <small>
                    z.B. steht im Quelltext ein
                    <code>'{brace.encoding}'</code>
                    so wird daraus
                    <code>'utf-8'</code>
                  </small>
                </li>
                <li>
                  <div>
                    Dictionaries beschreiben
                    <code>HTML</code>
                    Elemente.
                  </div>
                  <div>
                    Der
                    <code>Key</code>
                    mit einer Liste als
                    <code>Value</code>
                    beschreibt den Namen und die darunter liegenden
                    <code>HTML</code>
                    Elemente.
                  </div>
                  <small>
                    Führende underscores
                    <code>'_'</code>
                    werden aus den
                    <code>Keys</code>
                    gestrichen, um z.B. Konflikte mit
                    <code>'class'</code>
                    und
                    <code>'id'</code>
                    zu verhindern.
                  </small>
                  <div>
                    Alle weiteren
                    <code>Key-Value Pairs</code>
                    sind Attribute des
                    <code>HTML</code>
                    Elements.
                  </div>
                </li>
                <li>
                  <div>
                    Weitere Elemente
<span>(z.B. <code>'True'</code>, <code>'False'</code>, <code>'None'</code>)</span>                    werden verworfen.
                  </div>
                </li>
                <li>
                  <div>
                    Der Header enthält Basis-Informationen wie
                    Beschreibung, Titel, Datum, Tags, ... der Seite.
                  </div>
                </li>
              </ul>
            </dd>
            <dd>
              Die Notation sieht so aus:
              <div class="literal">
                <pre>- _div:
  - Meine awesome
  - _a:
    - Webseite
    href: '{url.base}'
  class: example
</pre>
              </div>
            </dd>
            <dd>
              Das Ergebnis:
              <div class="literal">
                <pre>&lt;div class="example"&gt;
  Meine awesome
  &lt;a href="https://www.der-beweis.de"&gt;Webseite&lt;/a&gt;
&lt;/div&gt;
</pre>
              </div>
            </dd>
            <dt>Was soll der Name?!?</dt>
            <dd>Die Welt ist voll mit Statischen Website-Generatoren.</dd>
            <dd>Leider machen diese nur den Autor dessen glücklich, sonst niemanden.</dd>
            <dd>
              Nach einer sehr sehr langen Odysee habe ich beschlossen
              meinen eigenen Generator zu schreiben.
            </dd>
            <dd>
              Dieser hat den Namen
              <code>okay</code>
              damit er nicht versehentlich öffentlich oder
              sogar erfolgreich wird... :)
            </dd>
          </dl>
          <div>
            <h2>Wussten Sie schon?!?</h2>
            <div class="literal">
              <dl>
                <dt>brace</dt>
                <dd>
                  <dl>
                    <dt>author</dt>
                    <dd>
                      <code>spky</code>
                    </dd>
                    <dt>encoding</dt>
                    <dd>
                      <code>utf-8</code>
                    </dd>
                    <dt>feed_descr</dt>
                    <dd>
                      <code>Allerlei wissenswertes im Newsticker..</code>
                    </dd>
                    <dt>feed_title</dt>
                    <dd>
                      <code>Atom Feed</code>
                    </dd>
                    <dt>generator</dt>
                    <dd>
                      <code>okay</code>
                    </dd>
                    <dt>generator_version</dt>
                    <dd>
                      <code>0.0.0</code>
                    </dd>
                    <dt>joiner</dt>
                    <dd>
                      <code> | </code>
                    </dd>
                    <dt>lang</dt>
                    <dd>
                      <code>de</code>
                    </dd>
                    <dt>tags_descr</dt>
                    <dd>
                      <code>tags, keywords, categories, sections, whatever</code>
                    </dd>
                    <dt>tags_title</dt>
                    <dd>
                      <code>Tags</code>
                    </dd>
                    <dt>title</dt>
                    <dd>
                      <code>Der Beweis</code>
                    </dd>
                  </dl>
                </dd>
                <dt>check</dt>
                <dd>
                  <code>454e3f6159f71191e415c5369c244d781250d282e5021763d144d445f215d4b62d82bc22d9e6b17b6443b1c1f7c1e5db6a66fa61077db1932b32ff287f8027c6</code>
                </dd>
                <dt>debut</dt>
                <dd>
                  <code>okay</code>
                </dd>
                <dt>debut_flip</dt>
                <dd>
                  <code>Der Beweis | okay</code>
                </dd>
                <dt>debut_full</dt>
                <dd>
                  <code>okay | Der Beweis</code>
                </dd>
                <dt>descr</dt>
                <dd>
                  <code>version 0.0.0</code>
                </dd>
                <dt>extra</dt>
                <dd>
                  <dl>
                    <dt>store</dt>
                    <dd>
                      <dl>
                        <dt>your</dt>
                        <dd>
                          <dl>
                            <dt>data</dt>
                            <dd>
                              <code>here</code>
                            </dd>
                          </dl>
                        </dd>
                      </dl>
                    </dd>
                  </dl>
                </dd>
                <dt>icons</dt>
                <dd>
                  <dl>
                    <dt>cloud</dt>
                    <dd>
                      <code>&amp;#x2601;&amp;#xfe0e;</code>
                    </dd>
                    <dt>hand_down</dt>
                    <dd>
                      <code>&amp;#x261f;&amp;#xfe0e;</code>
                    </dd>
                    <dt>hand_left</dt>
                    <dd>
                      <code>&amp;#x261c;&amp;#xfe0e;</code>
                    </dd>
                    <dt>hand_right</dt>
                    <dd>
                      <code>&amp;#x261e;&amp;#xfe0e;</code>
                    </dd>
                    <dt>hand_up</dt>
                    <dd>
                      <code>&amp;#x261d;&amp;#xfe0e;</code>
                    </dd>
                    <dt>hand_victory</dt>
                    <dd>
                      <code>&amp;#x270c;&amp;#xfe0e;</code>
                    </dd>
                    <dt>heavy_ballot</dt>
                    <dd>
                      <code>&amp;#x2718;&amp;#xfe0e;</code>
                    </dd>
                    <dt>heavy_check</dt>
                    <dd>
                      <code>&amp;#x2714;&amp;#xfe0e;</code>
                    </dd>
                    <dt>note_eighth</dt>
                    <dd>
                      <code>&amp;#x266a;&amp;#xfe0e;</code>
                    </dd>
                    <dt>note_eighth_beamed</dt>
                    <dd>
                      <code>&amp;#x266b;&amp;#xfe0e;</code>
                    </dd>
                    <dt>note_quarter</dt>
                    <dd>
                      <code>&amp;#x2669;&amp;#xfe0e;</code>
                    </dd>
                    <dt>shamrock</dt>
                    <dd>
                      <code>&amp;#x2618;&amp;#xfe0e;</code>
                    </dd>
                    <dt>snowman</dt>
                    <dd>
                      <code>&amp;#x2603;&amp;#xfe0e;</code>
                    </dd>
                    <dt>umbrella</dt>
                    <dd>
                      <code>&amp;#x2602;&amp;#xfe0e;</code>
                    </dd>
                  </dl>
                </dd>
                <dt>inner</dt>
                <dd>
                  <code>build/okay</code>
                </dd>
                <dt>paths</dt>
                <dd>
                  <dl>
                    <dt>favicon</dt>
                    <dd>
                      <code>https://www.der-beweis.de/favicon.ico</code>
                    </dd>
                    <dt>feed</dt>
                    <dd>
                      <code>https://www.der-beweis.de/feed.xml</code>
                    </dd>
                    <dt>logo</dt>
                    <dd>
                      <code>https://www.der-beweis.de/logo.png</code>
                    </dd>
                    <dt>stylesheet</dt>
                    <dd>
                      <code>https://www.der-beweis.de/style.css</code>
                    </dd>
                    <dt>tags</dt>
                    <dd>
                      <code>https://www.der-beweis.de/tags.html</code>
                    </dd>
                    <dt>touchicon</dt>
                    <dd>
                      <code>https://www.der-beweis.de/apple-touch-icon.png</code>
                    </dd>
                    <dt>touchicon_precomposed</dt>
                    <dd>
                      <code>https://www.der-beweis.de/apple-touch-icon-precomposed.png</code>
                    </dd>
                  </dl>
                </dd>
                <dt>url</dt>
                <dd>
                  <dl>
                    <dt>base</dt>
                    <dd>
                      <code>https://www.der-beweis.de</code>
                    </dd>
                    <dt>bname</dt>
                    <dd>
                      <code>index.html</code>
                    </dd>
                    <dt>ext</dt>
                    <dd>
                      <code>.html</code>
                    </dd>
                    <dt>full</dt>
                    <dd>
                      <code>https://www.der-beweis.de/build/okay/index.html</code>
                    </dd>
                    <dt>inner</dt>
                    <dd>
                      <code>https://www.der-beweis.de/build/okay</code>
                    </dd>
                    <dt>is_file</dt>
                    <dd>
                      <code>True</code>
                    </dd>
                    <dt>name</dt>
                    <dd>
                      <code>index</code>
                    </dd>
                    <dt>tail</dt>
                    <dd>
                      <code>build/okay/index.html</code>
                    </dd>
                  </dl>
                </dd>
                <dt>visit</dt>
                <dd>
                  <dl>
                    <dt>bitbucket</dt>
                    <dd>
                      <code>http://bitbucket.com/spky</code>
                    </dd>
                    <dt>flickr</dt>
                    <dd>
                      <code>http://www.flickr.com/photos/friidis</code>
                    </dd>
                    <dt>github</dt>
                    <dd>
                      <code>https://github.com/spookey</code>
                    </dd>
                    <dt>gitlab</dt>
                    <dd>
                      <code>https://gitlab.com/spookey</code>
                    </dd>
                    <dt>lastfm</dt>
                    <dd>
                      <code>http://www.last.fm/user/friidis</code>
                    </dd>
                    <dt>mastodon</dt>
                    <dd>
                      <code>https://chaos.social/@spky</code>
                    </dd>
                    <dt>pinboard</dt>
                    <dd>
                      <code>https://pinboard.in/u:spky</code>
                    </dd>
                    <dt>pixelfed</dt>
                    <dd>
                      <code>https://pixel.tchncs.de/spky</code>
                    </dd>
                    <dt>srht</dt>
                    <dd>
                      <code>https://sr.ht/~spky/</code>
                    </dd>
                    <dt>stackoverflow</dt>
                    <dd>
                      <code>http://stackoverflow.com/users/2064185/spky</code>
                    </dd>
                    <dt>tumblr</dt>
                    <dd>
                      <code>http://woitech-hightech.tumblr.com</code>
                    </dd>
                    <dt>vimeo</dt>
                    <dd>
                      <code>https://vimeo.com/spky</code>
                    </dd>
                  </dl>
                </dd>
              </dl>
            </div>
          </div>
          <div class="foot">
            <div>version 0.0.0</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>30.06.2016 - 17:22:41</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>24.02.2019 - 17:31:49</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Blink</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/blink.html"/>
    <id>tag:www.der-beweis.de,2018-06-29:/etc/blink.html</id>
    <published>2018-06-29T15:29:49+02:00</published>
    <updated>2018-06-29T15:29:49+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Teh blink tag - best thing in the universe!</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <blink>
            <img alt="blinking image" src=".big_dick.jpg"/>
          </blink>
        </div>
        <script>
          function blink() {
            for(const elem of document.getElementsByTagName('blink')) {
              elem.style.visibility = (
                elem.style.visibility === 'visible'
                  ? 'hidden' : 'visible'
              );
            }
          }
          
          document.addEventListener('DOMContentLoaded', function() {
            window.setInterval(blink, 125);
          }, false);
        </script>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Locate Me</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/locate_me/index.html"/>
    <id>tag:www.der-beweis.de,2017-07-19:/build/locate_me/index.html</id>
    <published>2017-07-19T07:04:42+02:00</published>
    <updated>2017-12-09T18:39:09+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Wo ist mein Router?</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/locate_me">Locate Me</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>GPS-Koordinaten im Freifunk Router automatisch setzen.</dd>
            <dt>Hintergrund</dt>
            <dd>Aus einer Laune heraus hatte ich mir mal einen USB-GPS Dongle gekauft.</dd>
            <dd>
              Dieser lag nach der ersten Euphorie einfach so rum, und grinste
              mich aus dem Regal an..
            </dd>
            <dt>Idee</dt>
            <dd>
              Die lokale Freifunk Community vor Ort hat eine Karte, auf der alle
              Router verzeichnet sind.
            </dd>
            <dd>
              Die Karten-Software
              <a href="https://github.com/ffnord/ffmap-d3">ffmap-d3</a>
              (wurde durch
              <a href="https://github.com/ffrgb/meshviewer">meshviewer</a>
              abgelöst)
              kann zweierlei Karten darstellen:
            </dd>
            <dd>
              <ul>
                <li>Welche Router sich untereinander verbunden haben</li>
                <li>
                  Eine
                  <a href="https://www.openstreetmap.org/">OpenStreetMap</a>
                  die anzeigt wo auf der Welt der Router sich befindet.
                </li>
              </ul>
            </dd>
            <dd>
              Um letzteres darzustellen muss man händisch die Position des Routers
              eintragen.
            </dd>
            <dd>Doch das ist mühsam, und wird gerne mal vergessen.</dd>
            <dd>Peinlich wird das bei Routern die man zu Veranstaltungen aufstellt.</dd>
            <dd>Manche Router haben eine USB-Buchse, da kommt der Dongle wie gerufen!</dd>
            <dt>Ziel</dt>
            <dd>
              Ich wollte was vollautomatisches:
              Nur den Dongle anstecken, warten... Fertig!
            </dd>
            <dd>Der ganze Rest soll wie von selbst geschehen.</dd>
            <dt>Werkzeuge</dt>
            <dd>
              OpenWrt kommt mit
              <a href="https://wiki.openwrt.org/doc/howto/usb.essentials">USB-Geräten</a>
              klar, und hat zum Glück einen Lua Interpreter mit im Gepäck!
            </dd>
            <dd>
              Mit
              <a href="https://wiki.openwrt.org/doc/techref/uci">UCI kann man die Konfiguration</a>
              im Lua Programm komfortabel lesen und schreiben.
            </dd>
            <dd>
              Der GPS-Dongle spukt seine Daten im
              <a href="https://de.wikipedia.org/wiki/NMEA_0183">NMEA Format</a>
              aus.
            </dd>
            <dd>Dies ist ein steinaltes Format und kommt aus der Seefahrt.</dd>
            <dd>
              Es ist also gut abgehangen, und es gibt
              <a href="http://www.gpsinformation.org/dale/nmea.htm">ordentliche Dokumentation</a>
              dazu. Sehr gut!
            </dd>
            <dt>Umsetzung</dt>
            <dd>Das Programm an sich ist nicht sehr komplex.</dd>
            <dd>
              <ol>
                <li>
                  Programmparameter von der Kommandozeile abfragen
                  <ul>
                    <li>
                      Gerätepfad zum GPS-Dongle
<span>(<code>/dev/ttyACM0</code>)</span>                    </li>
                    <li>Ermittelte Informationen ausgeben, oder gleich mit abspeichern?</li>
                    <li>Soll noch die Altitude (Höhe) eingesammelt werden?</li>
                  </ul>
                </li>
                <li>Danach in einer Endlosschleife die NMEA Daten durchgehen.</li>
                <li>
                  Irgendwann fliegen Latitude &amp; Longitude Informationen vorbei
<span>(<code>GPGGA</code> bzw. <code>GPRMC</code>).</span>                </li>
                <li>
                  Die ermittelten Positions-Daten in die
                  Konfiguration des Routers schreiben.
                </li>
                <li>Fertig!</li>
              </ol>
            </dd>
            <dd>
              Jetzt heißt es nur noch warten, bis die Karten-Software vorbei kommt,
              um die Position einzusammeln.
            </dd>
            <dt>Fazit</dt>
            <dd>
              Es war eines meiner ersten Lua-Scripte,
              nicht sehr komplex, aber sinnvoll.
            </dd>
            <dd>
              Ich konnte meinen GPS-Dongle sinnstiftend einsetzen
              und dabei noch etwas lernen - Perfekt!
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/locate_me">locate_me.git</a>
              </div>
            </dd>
          </dl>
          <div class="foot">
            <div>Wo ist mein Router?</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>19.07.2017 - 07:04:42</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>09.12.2017 - 18:39:09</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Freifunk" title="Freifunk">Freifunk</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#GPS" title="GPS">GPS</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Lua" title="Lua">Lua</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Master Control</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/master_control/index.html"/>
    <id>tag:www.der-beweis.de,2016-12-17:/build/master_control/index.html</id>
    <published>2016-12-17T18:50:38+01:00</published>
    <updated>2016-12-17T18:50:38+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">My automated home is on fire!</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/master_control">Master Control</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>Ein Script um Abläufe in der Echt-Welt zu automatisieren.</dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              <a href="https://www.der-beweis.de/build/full_power">full_power</a>
              wird dadurch noch besser!!1!
            </dd>
            <dd>An meinem Computer hängt eine USB-Festplatte,</dd>
            <dd>die iTunes Bibliothek ist auf eben dieser Platte.</dd>
            <dd>Also muss ich erst die Platte anschalten, bevor ich iTunes starte..</dd>
            <dd>Davor sollte ich aber noch mit dem Bluetooth Audio Device verbinden..</dd>
            <dd>
              Und am Ende, schalte ich erst den Strom ab,
              oder hänge ich zuerst die Platte aus?!?
            </dd>
            <dd>Aber erst alle Programme die auf die Platte zugreifen schließen!</dd>
            <dd>... *seufz* ...</dd>
            <dt>Ziel</dt>
            <dd>
              Eine Lösung die mir das Nachdenken abnimmt
              und so Fehler verhindert :)
            </dd>
            <dd>
              Irgendwas, das die Abhängigkeiten auflöst,
              und eigenständig laufen kann.
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <ul>
                <li>
                  <code>
                    <a href="https://www.der-beweis.de/build/full_power">full_power</a>
                  </code>
                </li>
                <li>
                  <code>python3</code>
                </li>
                <li>
                  <code>Apple Script</code>
                  <div>
                    <small>
                      mit eingebettet, für z.B. den Bluetooth Audio Dialup, oder
                      um Scripte explizit im neuen Terminal-Fenster zu starten.
                    </small>
                  </div>
                </li>
              </ul>
            </dd>
            <dt>Features</dt>
            <dd>
              <ul>
                <li>
                  <div>Schaltet Strom.</div>
                  <small>
                    Kennt meine Funksteckdosen, und weiß was
                    an welcher Steckdose angeschlossen ist.
                  </small>
                </li>
                <li>
                  <div>Verbindet mit meinem Bluetooth Audio Gerät.</div>
                  <small>Schaltet aber zuerst den Strom für die Stereoanlage an.</small>
                </li>
                <li>
                  <div>USB-Festplatten ein- und aushängen.</div>
                  <div>
                    <small>
                      mount
                      &amp;#x261e;&amp;#xfe0e;
                      Strom an.
                    </small>
                  </div>
                  <div>
                    <small>
                      unmount
                      &amp;#x261e;&amp;#xfe0e;
                      Erst alle Programme schließen,
                      Platte aushängen und dann den Strom aus.
                    </small>
                  </div>
                  <div>
                    <small>
                      Kann aber auch Platten die nicht an einer Funksteckdose
                      hängen mounten.
                    </small>
                  </div>
                  <div>
                    <small>
                      &amp;#x261e;&amp;#xfe0e;
                      Holt sich das Passwort zum entsperren aus der Keychain.
                    </small>
                  </div>
                </li>
                <li>
                  <div>Startet Programme.</div>
                  <div>
                    <small>
                      Erst auf die Platte mit der Musik drauf warten,
                      dann iTunes starten..
                    </small>
                  </div>
                  <div>
                    <small>Und währenddessen die wird die Stereoanlage eingeschaltet..</small>
                  </div>
                </li>
                <li>
                  <div>Power Management.</div>
                  <small>
                    Ausschalten, Neustarten, Ausloggen,
                    Standby, Bildschim aus/sperren/-schoner ...
                  </small>
                </li>
                <li>
                  <div>Gruppen für alle Elemente.</div>
                  <small>z.B. alle Steckdosen aus.</small>
                </li>
              </ul>
            </dd>
            <dt>Service</dt>
            <dd>
              Zusätzlich lassen sich mit Helfer-Scripten
              noch ein paar Dinge generieren:
              <ul>
                <li>
                  eine
<span><a href="http://zsh.sourceforge.net/Doc/Release/Completion-System.html">zsh completion</a>.</span>                </li>
                <li>
                  ein plist-File für einen
<span><a href="https://www.alfredapp.com/help/workflows/">Alfred Workflow</a>.</span>                </li>
              </ul>
            </dd>
            <dt>Umsetzung</dt>
            <dd>Natürlich habe ich mittels Klassen alles Modular aufgebaut.</dd>
            <dd>
              Es gibt eine Abstrakte-Basis-Klasse
<span>(<a href="https://docs.python.org/3/library/abc.html">abc</a>),</span>              die die Methoden
              <code>full()</code>
              sowie
              <code>null()</code>
              verlangt.
            </dd>
            <dd>
              Abhängigkeiten
              <span>&amp;#x261c;&amp;#xfe0e;</span>
            </dd>
            <dd>
              Instanzen bekommen beim Erstellen die Abhängigkeiten,
              die sie selbst zum starten benötigen mit übergeben.
            </dd>
            <dd>
              In jeder Klasse selbst existieren zwei Listen:
              <code>below</code>
              und
<span><code>above</code>.</span>            </dd>
            <dd>
              Der Konstruktor sieht nun so aus:
              <div class="literal">
                <pre>def __init__(self, *depends):
     self.below = []
     self.above = []

     for elem in depends:
        self.below.append(elem)
        elem.above.append(self)
</pre>
              </div>
            </dd>
            <dd>
              Zack, noch eine Methode, um in beiden Richtungen
              durch diesen simplen Baum zu iterieren..
            </dd>
            <dd>
              Und dann noch
              <code>
                <a href="https://docs.python.org/3/library/argparse.html">argparse</a>
              </code>
              drum rum geschnallt, fertig!
            </dd>
            <dt>Versionen</dt>
            <dd>Das Projekt existiert schon länger als sein Git-Repo..</dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Gleich beim Entwickeln von
              <a href="https://www.der-beweis.de/build/full_power">full_power</a>
              habe ich mir schon Alfred Workflows zusammengeklickt.
            </dd>
            <dd>
              Zwei Beispiele:
              <ul>
                <li>
                  <a href="https://www.der-beweis.de/build/master_control/alfred_connect_audio.png">connect_audio</a>
                </li>
                <li>
                  <a href="https://www.der-beweis.de/build/master_control/alfred_launch_itunes.png">launch_itunes</a>
                </li>
              </ul>
            </dd>
            <dd>
              Die kann man mit der
              <a href="https://www.alfredapp.com/remote/">Alfred Remote</a>
              verknüpfen, so lässt sich dann alles vom Telefon aus bedienen.
            </dd>
            <dd>Das ganze wird aber sehr schnell undurchsichtig und ist schwer zu pflegen.</dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Der nächste Versuch war ein längliches
<span><code>bash</code>-Script. Zunächst recht verheißungsvoll.</span>            </dd>
            <dd>
              Da darin das überprüfen von Abhängigkeiten eher schwierig ist,
              wurde fast alles von Hand ausformuliert.
            </dd>
            <dd>
              Dies potenziert den Aufwand mit jedem neuen Feature, und zieht massiv
              Bugs nach sich :(
            </dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Also wieder ans Reißbrett, und so entstand die oben
              beschriebene Version in
<span><code>python</code>.</span>            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/master_control">master_control.git</a>
              </div>
            </dd>
            <dd>
              <div>
                &amp;#x261e;&amp;#xfe0e;
                <a href="https://www.der-beweis.de/build/full_power">full_power</a>
              </div>
            </dd>
          </dl>
          <div class="foot">
            <div>My automated home is on fire!</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>17.12.2016 - 18:50:38</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Home%20Automation" title="Home Automation">Home Automation</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/master_control</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/master_control/ls.html"/>
    <id>tag:www.der-beweis.de,2016-12-17:/build/master_control/ls.html</id>
    <published>2016-12-17T18:50:28+01:00</published>
    <updated>2016-12-17T18:50:28+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Master Control</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Master Control</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/master_control/_init.txt" title="build/master_control/_init.txt">_init.txt</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/master_control/alfred_connect_audio.png" title="build/master_control/alfred_connect_audio.png">alfred_connect_audio.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/master_control/alfred_launch_itunes.png" title="build/master_control/alfred_launch_itunes.png">alfred_launch_itunes.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/master_control/index.html" title="build/master_control/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Full Power</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/full_power/index.html"/>
    <id>tag:www.der-beweis.de,2016-07-21:/build/full_power/index.html</id>
    <published>2016-07-21T11:22:03+02:00</published>
    <updated>2016-12-17T17:12:37+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">My coffee machine is full power!</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/full_power">Full Power</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>Irgendwann hatte ich mir mal zwei NodeMCU Development-Boards bestellt.</dd>
            <dd>
              Diese basieren auf dem
              <a href="https://de.wikipedia.org/wiki/ESP8266">esp8266</a>
              – bringen also gleich alles für Wlan mit.
            </dd>
            <dd>
              Leider verschwanden die erstmal in der Bastelkiste, bis ich auf
              folgende Idee kam:
            </dd>
            <dt>Ziel</dt>
            <dd>
              <div>Es muss doch möglich sein, 230V mit µ-Prozessoren zu schalten.</div>
              <small>
                <strong>Spoiler:</strong>
                Natürlich geht das!
              </small>
            </dd>
            <dt>Recherche</dt>
            <dd>
              &amp;#x261e;&amp;#xfe0e;
              Am gefahrlosesten und flexibelsten sind Funksteckdosen.
            </dd>
            <dd>Dann informieren, wie man diese ansteuert:</dd>
            <dd>
              &amp;#x261e;&amp;#xfe0e;
              Es gibt generische 433-MHz Sender und Empfänger.
              Und es gibt Libraries dazu.
            </dd>
            <dd>
              Alles klar! - Auf die Teileliste kommt also:
              <ul>
                <li>
                  <div>Brennenstuhl RCS 1000N Funksteckdosen.</div>
                  <small>empfangen auf 433-MHz und haben DIP-Schalter für die Adressen.</small>
                </li>
                <li>
                  Die
                  <a href="https://www.der-beweis.de/build/full_power/nodemcu.jpg">NodeMCU</a>
                  natürlich.
                </li>
                <li>FS1000A 433-MHz Transmitter.</li>
                <li>Eine RGB-Led, paar normale Leds, Widerstände, Kabel...</li>
              </ul>
            </dd>
            <dt>Werkzeuge</dt>
            <dd>Die Entdeckungsreise geht weiter..</dd>
            <dd>
              Es gibt einen
              <a href="https://github.com/esp8266/Arduino">Arduino-Support</a>
              für den esp8266!
            </dd>
            <dd>
              Für das Projekt ist daraus folgendes relevant:
              <ul>
                <li>
<div><a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi">ESP8266WiFi</a>STA</div>                  <small>
                    Der esp8266 bucht sich in mein Wlan ein,
                    und bekommt per DHCP eine IP-Adresse.
                  </small>
                </li>
                <li>
                  <div>
                    <a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer">ESP8266WebServer</a>
                  </div>
                  <div>
                    <small>
                      Stellt einerseits eine API bereit, um die Steckdosen und
                      die RGB-Led anzusteuern, oder zur abfrage des Status.
                    </small>
                  </div>
                  <div>
                    <small>
                      Und liefert eine statische Webseite aus - Das Javascript
                      darin spricht dann mit der API.
                    </small>
                  </div>
                </li>
                <li>
                  <div>
                    <a href="https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266mDNS">ESP8266mDNS</a>
                  </div>
                  <small>
                    Somit ist der esp8266 unter z.B.
                    <code>http://device.local</code>
                    erreichbar.
                  </small>
                </li>
              </ul>
            </dd>
            <dd>
              <div>
                Ich probiere damit auch einmal
                <a href="http://platformio.org">PlatformIO</a>
                aus.
              </div>
              <small>
                &amp;#x261e;&amp;#xfe0e;
                viel angenehmer als die Arduino-IDE.
              </small>
            </dd>
            <dt>Umsetzung</dt>
            <dd>
              Der Quellcode ist modular aufgebaut,
              Funktionalität wird in Klassen gebündelt.
            </dd>
            <dd>
              Am Ende entstehen Module für:
              <ul>
                <li>
                  <div>Logging auf der Seriellen Schnittstelle</div>
                  <small>und ein paar Funktionen um mit Strings zu arbeiten.</small>
                </li>
                <li>
                  <div>Eine Kommandozeile, auch auf der Seriellen Schnittstelle</div>
                  <small>
                    Nachfolgende Module registrieren dort Kommandos,
                    um z.B. die Konfiguration zu bearbeiten oder um mit dem Wlan
                    (neu) zu verbinden.
                  </small>
                </li>
                <li>
                  <div>Speichern in und laden einer Konfigurationsdatei</div>
                  <small>Auf dem eingebauten Flash im esp8266, per SPIFFS.</small>
                </li>
                <li>
                  <div>Das Netzwerk</div>
                  <small>esp8266 als Wlan Client &amp; mDNS Responder.</small>
                </li>
                <li>
                  <div>Die RGB-Led</div>
                  <small>
                    Konvertiert Farbwerte in das entsprechende PWM-Signal,
                    und kann sanft zwischen den Farben wechseln.
                  </small>
                </li>
                <li>
                  <div>Ansteuern des 433-MHz Transmitters</div>
                  <small>Und somit der Funksteckdosen.</small>
                </li>
                <li>
                  <div>Die HTTP-Verbindungen</div>
                  <ul>
                    <li>
                      <div>
                        Eine API zum schalten von Licht und Strom, und
                        zur Abfrage des Status.
                      </div>
                      <small>
                        Ist also mit allen anderen Modulen verdrahtet,
                        und schickt Antworten im JSON-Format.
                      </small>
                    </li>
                    <li>
                      <div>Eine Webseite.</div>
                      <small>
                        Darin ein bisschen Javascript, dass
                        direkt mit der API kommuniziert.
                      </small>
                      <div>
                        Ein simples, aber sehr effektives Präprozessor-Makro
                        erlaubt das Einlesen von HTML-Templates.
                      </div>
                      <div>
                        Die
                        <code>
                          <a href="https://www.arduino.cc/en/Reference/StringReplace">String::replace()</a>
                        </code>
                        Funktion ersetzt die entsprechenden Platzhalter.
                      </div>
                    </li>
                  </ul>
                </li>
              </ul>
            </dd>
            <dt>Versionen</dt>
            <dd>
              Dies ist wohl mein umfangreichstes C++ Projekt bisher,
              und somit lerne ich beim entwickeln auch ständig was neues..
            </dd>
            <dd>
              So kommt es, dass ich nach der
              <a href="https://github.com/spookey/full_power/releases/tag/v1">ersten fertigen Version</a>
              sofort damit unzufrieden war..
            </dd>
            <dd>
              <div>
                <cite>"Das alles geht noch eleganter.. Bestimmt!"</cite>
              </div>
            </dd>
            <dd>Somit habe ich mich daran gemacht, alles noch mal neu zu schreiben.</dd>
            <dd>
              Die neue Version bringt die Kommandozeile
              und die Konfigurationsdatei mit.
            </dd>
            <dd>
              Löst also die Konfiguration mittels Header-File ab,
              es muss jetzt nicht mehr nach jeder Änderung neu kompiliert werden..
            </dd>
            <dd>
              <div>
                Weiterhin wurden die Webseite und die eigentlichen Funktionen durch
                die API enkoppelt.
              </div>
              <small>
                Dies beschleunigt das Schalten beim Aufruf mit z.B.
                <code>curl</code>
              </small>
            </dd>
            <dt>API</dt>
            <dd>
              <div>
                Die neue Version nutzt keine URL-Parameter mehr, sondern besetzt
                ganze Pfade nach diesem Schema:
              </div>
              <code>/{modul}/{aktion}/{daten}</code>
            </dd>
            <dd>
              Um also den Strom einer Steckdose an und aus zu schalten reichen
              folgende Aufrufe:
              <div>
                <code>curl http://device.local/power/full/0110100100</code>
              </div>
              <div>
                <code>curl http://device.local/power/null/0110100100</code>
              </div>
            </dd>
            <dd>
              Die RGB-LED kann entweder zu einer Farbe hin wechseln,
              oder in dieser blinken:
              <div>
                <code>curl http://device.local/light/fade/0xfff800</code>
              </div>
              <div>
                <code>curl http://device.local/light/flash/0x008fff</code>
              </div>
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/full_power">full_power.git</a>
              </div>
              <div>
                &amp;#x261e;&amp;#xfe0e;
                <a href="https://github.com/spookey/full_power/blob/master/etc/schaltplan.png">Schaltplan</a>
              </div>
            </dd>
            <dd>
              <div>
                &amp;#x261e;&amp;#xfe0e;
                <a href="https://www.der-beweis.de/build/master_control">master_control</a>
                nutzt dieses Projet hier &amp; kümmert sich um Abhänigkeiten
              </div>
              <small>Erst die USB-Festplatte aushängen, dann den Strom dafür aus..</small>
            </dd>
            <dt>Noch offen</dt>
            <dd>Die Hardware in ein Gehäuse stecken.</dd>
            <dd>Das Ganze an einem Ort mit Stromversorgung und Empfang aufhängen.</dd>
            <dt>Bilder</dt>
            <dd>
              <div>
                <strong>Das Development-Board</strong>
              </div>
              <small>Ist drei mal so groß wie der eigentliche µ-Chip :)</small>
              <div>
                Es handelt sich um eine NodeMCU v1.0 / V2 von Amica mit einem
                ESP-12E.
              </div>
              <div>
                <a href="https://www.der-beweis.de/build/full_power/nodemcu.jpg">
                  <img alt="NodeMCU Development-Board" src="https://www.der-beweis.de/build/full_power/nodemcu.jpg"/>
                </a>
              </div>
            </dd>
            <dd>
              <div>
                <strong>Der Aufbau am Breadboard.</strong>
              </div>
              <ul>
                <li>
                  <div>Die roten LEDs sind Status-Indikatoren zum Debuggen.</div>
                  <small>Traffic auf RX bzw. TX oder Signal am Transmitter.</small>
                </li>
                <li>GND: Weiß</li>
                <li>3.3V: Rot</li>
                <li>Daten für den Transmitter: Orange</li>
                <li>Stromversorgung für die Status LED am Transmitter: Blau</li>
                <li>
                  Das fliegende orange Kabel oben ist meine Behelfsantenne, bis ich
                  alles in ein Gehäuse verpacke.
                </li>
              </ul>
              <div>
                <a href="https://www.der-beweis.de/build/full_power/breadboard.jpg">
                  <img alt="Breadboard aufbau" src="https://www.der-beweis.de/build/full_power/breadboard.jpg"/>
                </a>
              </div>
            </dd>
            <dd>
              <div>
                <strong>Webseite der ersten Version.</strong>
              </div>
              <div>
                Funkioniert zwar, hat jedoch ein paar Nachteile:
                <ul>
                  <li>zu kleine Knöpfe, man trifft am Telefon oftmals den falschen..</li>
                  <li>Das color-input Element wird von Safari nicht unterstützt..</li>
                  <li>
                    <div>
                      Die Schaltvorgänge werden über URL-Parameter
                      auf der Homepage geregelt.
                    </div>
                    <div>
                      Somit wird bei jedem Aufruf die Webseite neu zusammengesetzt,
                      was auf der kleinen CPU recht lange dauern kann..
                    </div>
                  </li>
                </ul>
              </div>
              <div>
                <a href="https://www.der-beweis.de/build/full_power/website_v1.png">
                  <img alt="erste Version der Webseite" src="https://www.der-beweis.de/build/full_power/website_v1.png"/>
                </a>
              </div>
            </dd>
            <dd>
              <div>
                <strong>Webseite der aktuellen Version.</strong>
              </div>
              <div>
                <ul>
                  <li>Mehr Platz zwischen den Knöpfen.</li>
                  <li>Mehr Kontrast, und Rahmen um die Eingabe-Elemente.</li>
                  <li>
                    Die Farbe für die LED lässt sich mit den drei Reglern unten
                    zusammenmischen.
                  </li>
                  <li>Mehr Info im Footer :)</li>
                </ul>
              </div>
              <div>
                Im Hintergrund läuft ein bisschen Javascript, dass
                <ul>
                  <li>die Eingaben an die API weiterreicht,</li>
                  <li>Farben mischt,</li>
                  <li>und periodisch die Status Informationen erneuert.</li>
                </ul>
              </div>
              <div>
                <a href="https://www.der-beweis.de/build/full_power/website_v2.png">
                  <img alt="zweite Version der Webseite" src="https://www.der-beweis.de/build/full_power/website_v2.png"/>
                </a>
              </div>
            </dd>
          </dl>
          <div class="foot">
            <div>My coffee machine is full power!</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>21.07.2016 - 11:22:03</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>17.12.2016 - 17:12:37</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#C%2B%2B" title="C++">C++</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Home%20Automation" title="Home Automation">Home Automation</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/full_power</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/full_power/ls.html"/>
    <id>tag:www.der-beweis.de,2016-07-21:/build/full_power/ls.html</id>
    <published>2016-07-21T11:21:03+02:00</published>
    <updated>2016-12-17T17:10:37+01:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Full Power</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Full Power</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/full_power/breadboard.jpg" title="build/full_power/breadboard.jpg">breadboard.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/full_power/index.html" title="build/full_power/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/full_power/nodemcu.jpg" title="build/full_power/nodemcu.jpg">nodemcu.jpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/full_power/website_v1.png" title="build/full_power/website_v1.png">website_v1.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/full_power/website_v2.png" title="build/full_power/website_v2.png">website_v2.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Video Warrior</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/videowarrior/index.html"/>
    <id>tag:www.der-beweis.de,2016-08-09:/build/videowarrior/index.html</id>
    <published>2016-08-09T11:21:56.173435+02:00</published>
    <updated>2016-08-09T11:21:56.173435+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">WordPress Plugin zum einbinden von Videos.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://plugins.trac.wordpress.org/log/videowarrior/">Video Warrior</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>Ab so ca. 2006 hatte ich hier für ein paar Jahre ein Blog am laufen.</dd>
            <dd>
              Befüllt wurde mit Absurditäten und Fundstücken aus dem Rest des
              großen weiten Internets.
            </dd>
            <dd>
              <small>
                Einen schönen Gruß an meine treuen Leser aus dieser Zeit :)
                War schön mit euch!
              </small>
            </dd>
            <dd>
              Es kam oft genug vor, dass ich Videos aus diversen Quellen einbinden
              wollte.
            </dd>
            <dd>
              Die damalige Auswahl an Plugins sagte mir nicht so zu.
              Diese hatten verschiedene Pobleme:
              <ul>
                <li>Ziehen Javascript von fremden Servern (Datenschutz!!1!).</li>
                <li>Pfuschen einem im Stylesheet rum.</li>
                <li>Zu aufwändig in der Bedienung (23 mal klicken, und so Sachen).</li>
                <li>...</li>
              </ul>
            </dd>
            <dt>Ziel</dt>
            <dd>
              <div>
                Ein Plugin, dass im Blogpost den Text
                <code>[youtube 123456789]</code>
              </div>
              durch den nativen Code zum Einbinden von
              <i>YouTube</i>
              ersetzt.
            </dd>
            <dd>Es existierte bereits ein Plugin, dass so fast alles richtig machte.</dd>
            <dd>
              Doch leider war die Entwicklung davon eingeschlafen,
              und es fehlten Features..
            </dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Also tat ich das, was man in der Open-Source Welt so tut:
<span><i>forken</i>!</span>            </dd>
            <dt>Umsetzung</dt>
            <dd>WordPress unterstützt Text-Filter:</dd>
            <dd>
              Es lässt sich eine
              <code>
                <a href="http://regexr.com/">regex</a>
              </code>
              mit einer Callback-Funktion registrierten.
            </dd>
            <dd>Bei einem Match, wird der Text durch die Ausgabe der Funktion ersetzt.</dd>
            <dd>
              Klingt machbar
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Es dauerte also nicht lange, bis die erste
              Version veröffentlicht wurde.
            </dd>
            <dt>Features</dt>
            <dd>
              Zunächst konnte das Plugin nur Videos von
              <i>YouTube</i>
              und damals noch
              <i>Google Video</i>
              einbinden.
            </dd>
            <dd>
              Später kam die Unterstützung für
              <i>Vimeo</i>
              dazu.
            </dd>
            <dd>
              Und solche Pro-Features wie eine
<span><code>readme.txt</code>.</span>              <div>
                <small>.. und darin ein Link auf meine Amazon Wunschliste :)</small>
              </div>
            </dd>
            <dt>Links</dt>
            <dd>
              Die
              <a href="https://wordpress.org/plugins/videowarrior/">Plugin-Seite auf wordpress.org</a>
              existiert nach wie vor.
            </dd>
            <dd>
              Und das
              <a href="https://plugins.trac.wordpress.org/log/videowarrior/">SVN Repository</a>
              gibts auch noch!
            </dd>
          </dl>
          <div>
            Sucht man nach Worten aus der
            <code>readme.txt</code>
            findet man noch Blogs, die das Plugin nutzen.
          </div>
          <div class="foot">
            <div>WordPress Plugin zum einbinden von Videos.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>09.08.2016 - 11:21:56</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#PHP" title="PHP">PHP</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Stempeluhr</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/stempeluhr/index.html"/>
    <id>tag:www.der-beweis.de,2013-07-29:/build/stempeluhr/index.html</id>
    <published>2013-07-29T14:23:00+02:00</published>
    <updated>2016-06-30T16:14:50+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Druckzeitberechnung von 3D-Objekten.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Stempeluhr</h1>
          Druckzeitberechnung von 3D-Objekten direkt am GCode.
          <dl>
            <dt>Projekt</dt>
            <dd>Es bestand Bedarf korrekte Druck-Zeiten von GCode-Objekten zu ermitteln.</dd>
            <dd>
              Diese Lösung entstand nach
              <ul>
                <li>langem Tüfteln (erstmal mit Python klar kommen).</li>
<li>und ein paar Umwegen (Siehe auch <span>&amp;#x261e;&amp;#xfe0e;</span> <a href="https://github.com/spookey/Grabthars-Holzhammer">Grabthars-Holzhammer</a>).</li>              </ul>
            </dd>
            <dd>
              Irgendwann wurde um das Ganze noch ein Web-Framework geschnallt.
              <div>
                <small>
                  Weil es geht, und ich wissen wollte wie
                  — ich war ja damals noch Anfänger!
                </small>
              </div>
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <code>python2</code>
            </dd>
<dd><code><a href="http://flask.pocoo.org">Flask</a></code>, <code><a href="http://jinja.pocoo.org">Jinja2</a></code> &amp; <code><a href="http://werkzeug.pocoo.org">Werkzeug</a></code></dd><dd><code><a href="https://flask-wtf.readthedocs.io">Flask-WTF</a></code> - zum auswerten des Upload-Formulars</dd>            <dd>
              Als Special:
              <code>
                <a href="http://pygments.org">Pygments</a>
              </code>
            </dd>
            <dt>Features</dt>
            <dd>
              <div>
                <span>&amp;#x2714;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>Berechnung der Druckzeit mit minimaler Abweichung.</li>
                <li>Zufällige Auswahl von Hintergründen.</li>
                <li>Alle Ressourcen (CSS-Framework, Fonts) kommem vom eigenen Server.</li>
              </ul>
              <div>
                <span>&amp;#x2718;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>
                  Linearer Algorithmus
                  <span>&amp;#x261e;&amp;#xfe0e;</span>
                  Große GCodes == lange warten.
                </li>
              </ul>
            </dd>
          </dl>
          Hier ein paar Screenshots der Web-Anwendung:
          <dl>
            <dt>Hauptseite</dt>
            <dd>
              Bitte einen GCode hochladen.
              <div>
                <img alt="index page" src="https://www.der-beweis.de/build/stempeluhr/main.png"/>
              </div>
            </dd>
            <dt>Ergebnis</dt>
            <dd>
              Gut Ding will Weile haben...
              <div>
                <img alt="result page" src="https://www.der-beweis.de/build/stempeluhr/success.png"/>
              </div>
            </dd>
            <dt>Code</dt>
            <dd>
              Die URL
              <code>/code</code>
              gibt Teile des eigenen Quelltextes aus
              <small>(deshalb Pygments...)</small>
              <div>
                <img alt="Open Source as in Ass Open" src="https://www.der-beweis.de/build/stempeluhr/code.png"/>
              </div>
            </dd>
          </dl>
          <div class="foot">
            <div>Druckzeitberechnung von 3D-Objekten.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>29.07.2013 - 14:23:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>30.06.2016 - 16:14:50</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#GCode" title="GCode">GCode</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Euler</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/euler/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-18:/build/euler/index.html</id>
    <published>2016-04-18T17:49:00+02:00</published>
    <updated>2016-06-25T01:34:41+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Sprachen untereinander vergleichbar machen</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <a href="https://github.com/spookey/euler">
            <img alt="Euler" src="https://www.der-beweis.de/build/euler/e.svg"/>
          </a>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Implementieren eines simplen Algorithmus zur Berechnung von
              <em>e</em>
              in möglichst vielen Sprachen.
            </dd>
            <dt>Ziel</dt>
            <dd>Benutzte Sprachen untereinander vergleichbar machen.</dd>
            <dd>
              Korrektheit der Ergebnisse von
              <em>e</em>
              eher zweitrangig.
            </dd>
            <dt>Umsetzung</dt>
            <dd>
              Jede Implementation nimmt als Kommandozeilen-Parameter eine
              Obergrenze von
              <em>k</em>
              entgegen.
            </dd>
            <dd>
              Bis zu dieser Grenze (i.d.R. 100) wird gerechnet,
              das Ergebnis zurückgegeben.
            </dd>
            <dd>
              Ein
              <code>bash</code>
              Script lässt die Implementation je 100 mal bis zum jeweiligen
              Schleifendurchlauf rechnen.
            </dd>
            <dd>
              Dabei wird mit
              <code>time</code>
              die Laufzeit gemessen.
            </dd>
            <dd>Die Ergebnisse werden in html-Seiten geschrieben.</dd>
            <dd>
              Anzeigen &amp; auswerten der Graphen mittels
              <code>
                <a href="http://www.chartjs.org">chart.js</a>
              </code>
            </dd>
            <dd>
              Ein
              <code>make</code>
              File koordiniert das Kompilieren &amp; Starten der
              Programme, sowie das Generieren der Graphen.
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/euler">euler.git</a>
              </div>
              <div>
                <strong>Output</strong>
              </div>
              <div>
                Siehe
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                <a href="https://www.der-beweis.de/build/euler/sample_2016_05/index.html">sample_2016_05</a>
                <span>&amp;#x261c;&amp;#xfe0e;</span>
              </div>
            </dd>
          </dl>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/bc.html">bc</a>
                </strong>
              </div>
              Business Calculater
              /
              Basic Calculater
              - überraschend flott,
              die krude Syntax scheint sich zu lohnen..
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/c.html">c</a>
                </strong>
              </div>
              Damit man mal einen Referenzpunkt hat.
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/groovy.html">groovy</a>
                </strong>
              </div>
              Groovy interpretiert.
              Achtung: die Y-Achse geht hier bis vier!!1!
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/groovyc.html">groovyc</a>
                </strong>
              </div>
              Groovy kompiliert.
              Wird nicht unbedingt besser
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/java.html">java</a>
                </strong>
              </div>
              Ich spare mir jeglichen Kommentar dazu...
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/js.html">js</a>
                </strong>
              </div>
              <code>node.js</code>
              is also ist nur bedingt flott.. soso..
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/lua.html">lua</a>
                </strong>
              </div>
              Das kam für mich total überraschend.
              Sehr gut, weiter so!
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/php.html">php</a>
                </strong>
              </div>
              Bau mal lieber deine Personal Home Page damit...
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/py.html">py</a>
                </strong>
              </div>
              Python 3.5
              And now for something completely different
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/rb.html">rb</a>
                </strong>
              </div>
              Ruby 2.3
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/rust.html">rust</a>
                </strong>
              </div>
              Braucht sich echt nicht vor
              <code>c</code>
              zu verstecken
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/swift.html">swift</a>
                </strong>
              </div>
              Swift interpretiert.
              Nicht schlecht
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div>
            <div class="centered">
              <div>
                <strong>
                  <a href="https://www.der-beweis.de/build/euler/sample_2016_05/swiftc.html">swiftc</a>
                </strong>
              </div>
              Swift kompiliert.
              Noch weniger schlecht
            </div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/euler/index.html">https://www.der-beweis.de/build/euler/index.html</a>
            </div>
          </div>
          <div class="foot">
            <div>Sprachen untereinander vergleichbar machen</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>18.04.2016 - 17:49:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>25.06.2016 - 01:34:41</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Jabber</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/jabber.html"/>
    <id>tag:www.der-beweis.de,2007-08-15:/etc/jabber.html</id>
    <published>2007-08-15T17:23:11+02:00</published>
    <updated>2016-06-24T00:48:28+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Eine Einführung in Jabber/XMPP</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Jabber</h1>
          <small>
            Dieser Text ist uralt (ca. 2007) und kann an manchen Stellen falsche
            Informationen enthalten.
            —
            You have been warned!
          </small>
          <div>
            Hier möchte ich mal etwas Licht ins Dunkle bringen, was Jabber
            eigentlich so ist, wie es funktioniert, und warum man es unbedingt
            benutzen sollte.
          </div>
          <h2>Inhalt</h2>
          <ul>
            <li>
              <a href="#1">1. - Übersicht zu Jabber</a>
              <ul>
                <li>
                  <a href="#1.1">1.1 - Vergleich mit anderer IM-Software</a>
                </li>
              </ul>
            </li>
            <li>
              <a href="#2">2. - Wie funktioniert Jabber</a>
              <ul>
                <li>
                  <a href="#2.1">2.1 - Begriffserklärungen</a>
                  <ul>
                    <li>
                      <a href="#2.1.1">2.1.1 - JID</a>
                    </li>
                    <li>
                      <a href="#2.1.2">2.1.1 - Ressource</a>
                    </li>
                    <li>
                      <a href="#2.1.3">2.1.3 - Priority</a>
                    </li>
                    <li>
                      <a href="#2.1.4">2.1.4 - Transport</a>
                    </li>
                  </ul>
                </li>
                <li>
                  <a href="#2.2">2.2 - Veranschaulichung</a>
                  <ul>
                    <li>
                      <a href="#2.2.1">2.2.1 - Server</a>
                    </li>
                    <li>
                      <a href="#2.2.2">2.2.2 - Jabber User</a>
                    </li>
                    <li>
                      <a href="#2.2.3">2.2.3 - Transports</a>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <a href="#3">3. - Was braucht man für Jabber</a>
            </li>
            <li>
              <a href="#4">4. - Kleine Tipps und Helferlein</a>
              <ul>
                <li>
                  <a href="#4.1">4.1 -  Mehr Infos zu Jabber</a>
                </li>
                <li>
                  <a href="#4.2">4.2 -  Jabberserver</a>
                </li>
                <li>
                  <a href="#4.3">4.3 -  Jabber Transports</a>
                </li>
                <li>
                  <a href="#4.4">4.4 -  Jabber Clients</a>
                </li>
                <li>
                  <a href="#4.5">4.5 -  Jabber Roster Utility</a>
                </li>
                <li>
                  <a href="#4.6">4.6 - JWChat</a>
                </li>
              </ul>
            </li>
            <li>
              <a href="#5">5. - Fazit</a>
            </li>
          </ul>
          <h2 id="1" title="1">1. - Übersicht zu Jabber</h2>
          <div>
            Jabber (meist auch
            <a href="http://de.wikipedia.org/wiki/XMPP">XMPP</a>
            genannt) ist ein
            <a href="http://de.wikipedia.org/wiki/Open_source">quelloffenes</a>
            <a href="http://de.wikipedia.org/wiki/Netzwerkprotokoll">Netzwerkprotokoll</a>
            für Instant Messaging, das seit 1998 aus Frust gegenüber der
            proprietären Instant Messanger wie
            <a href="http://de.wikipedia.org/wiki/AOL_Instant_Messenger">AIM</a>
            <a href="https://de.wikipedia.org/wiki/ICQ">ICQ</a>
            <a href="http://de.wikipedia.org/wiki/Windows_Live_Messenger">MSN</a>
            <a href="http://de.wikipedia.org/wiki/Yahoo%21_Messenger">Y!</a>
            entwickelt wurde.
            Da Jabber Open Source ist, gibt es nicht
            <strong>den</strong>
            Jabberclient, und nicht
            <strong>den</strong>
            Jabberserver, den man sich herunterlädt, installiert und anmeldet,
            und dann hat man Jabber, nein man sucht sich eher einen Client und
            Server aus, der einem am besten gefällt und kann dann aber mit
            Leuten auf anderen Jabber Servern problemlos kommunizieren.
            <br/>
            Auch ist es möglich über Jabber mithilfe von sogenannten Transports
            (manchmal auch Gateways genannt) mit Mitgliedern von anderen Instant
            Messaging Systemen zu Chatten. Weiterhin sind aufgrund der
            Quelloffenheit und Flexibilität von Jabber verschiedenste
            Verwendungszwecke denkbar: zum Beispiel Jabberclients die auf dem
            Handy laufen, E-Mails über Jabber schreiben und einiges mehr ist
            möglich. Eine Funktion für Audio- und Videochats wird inzwischen in
            manche Clients auch mit eingebaut.
          </div>
          <h3 id="1.1" title="1.1">1.1 - Vergleich mit anderer IM-Software</h3>
          <div>
            Man kann Jabber eigentlich kaum mit den herkömmlichen Instant
            Messaging Systemen vergleichen, da es im Endeffekt weiter über die
            Schnittmenge von
            <a href="http://de.wikipedia.org/wiki/AOL_Instant_Messenger">AIM</a>
            <a href="https://de.wikipedia.org/wiki/ICQ">ICQ</a>
            <a href="http://de.wikipedia.org/wiki/Windows_Live_Messenger">MSN</a>
            <a href="http://de.wikipedia.org/wiki/Yahoo%21_Messenger">Y!</a>
            hinausgeht, dennoch orientiert es sich auch an diesen.
            Es gibt bei den meisten Jabberclients einen ähnlichen Aufbau, mit einer
            Kontaktliste (Roster genannt) in der man die Kontakte (JID) verwaltet,
            mit Chatfenstern, und eventuell auch Multi-User Chats (MUC, ähnlich wie
            <a href="http://de.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a>
            ). Dateitransfers sind natürlich auch möglich. Somit erklärt sich die
            Funktionsweise der Jabberclients meist von selbst, wenn man schon
            einmal ICQ oder ähnliches benutzt hat.
            <br/>
            Weiterhin setzt Jabber nicht auf einen großen, zentralen Server,
            sondern auf viele kleine, damit die Angriffsfläche gegen das gesamte
            Jabbernetzwerk besonders niedrig ist, und man das gesamte Jabber
            Netzwerk nicht einfach an einer zentralen Stelle abschalten kann.
            Weiterhin kann man Chats zusätzlich zur normalen Client zu Server
            Verschlüsselung zwischen den einzelnen Usern extra verschlüsseln.
          </div>
          <h2 id="2" title="2">2. - Wie funktioniert Jabber</h2>
          <h3 id="2.1" title="2.1">2.1 - Begriffserklärungen</h3>
          <h4 id="2.1.1" title="2.1.1">2.1.1 - JID</h4>
          <div>
            Eine JID ist eine ID (Jabber User Identifier) unter der man
            erreichbar ist (ähnlich wie die ICQ Nummer, oder der Screen
            Name bei AIM). Sie ist ähnlich wie eine E-Mail Adresse aufgebaut, und
            zwar so:
            <code>beispiel@server.xy</code>
<span>(Der User <code>beispiel</code> ist auf dem Jabberserver <code>server.xy</code>).</span>          </div>
          <h4 id="2.1.2" title="2.1.2">2.1.2 - Ressource</h4>
          <div>
            Eine Ressource ist ein Anhang an die JID, die spezifiziert, welchen
            Client man explizit erreichen will.
          </div>
          <div>
            Im Klartext bedeutet dies: Wenn der User
            <code>Beispiel</code>
            gleichzeitig mit seinem
            <code>Computer</code>
            und mit seinem
            <code>Laptop</code>
            online ist, sehen die Leute den Kontakt einerseits als
<span><code>beispiel</code>@<code>server.xy</code>/<code>computer</code></span>            und andererseits als
<span><code>beispiel</code>@<code>server.xy</code>/<code>laptop</code>.</span>          </div>
          <div>
            Die Ressource kann vom Benutzer individuell eingestellt werden
<span>(<code>laptop</code> könnte auch unterwegs heißen, oä).</span>          </div>
          <div>
            Meldet man sich nur mit einem Client an, erscheint die Ressource nicht,
            da es ja nur einen Client zu erreichen gibt.
          </div>
          <h4 id="2.1.3" title="2.1.3">2.1.3 - Priority</h4>
          <div>
            Die Priority ist ein Zahlenwert, der bestimmt wie wichtig ein Client
            bei gleichzeitiger Aktivität mit einem anderen Client auf dem selben
            Jabberaccount zu verhalten hat.
            Die Priority wird  vom Benutzer festgelegt, und der Zahlenbereich geht
            von ca. -100 bis ca. +100, wobei die Regel gilt:
            Je höher die Nummer, desto wichtiger der Client
            (Bei negativen Zahen nehmen die Clients nur Nachrichten an, die
            explizit an ihre Ressource geschickt wird, sonst wird die Nachricht
            verworfen, oder weitergeleitet). Dies hat den Vorteil, dass man
            bestimmen kann, an welchen Client die Jabbernachricht deines gegenüber
            eher ankommt, wenn keine spezielle Ressource vom Versender angegeben
            wird.
          </div>
          <div>
            <strong>Beispiel:</strong>
            Der User
            <code>Beispiel</code>
            ist wieder einmal auf seinen beiden Computern online,
            also sieht sein Gegenüber:
<span><code>beispiel</code>@<code>server.xy</code>/<code>computer</code></span>            und
<span><code>beispiel</code>@<code>server.xy</code>/<code>laptop</code></span>          </div>
          <div>
            Der User
            <code>Beispiel</code>
            hat nun dem Client auf dem Laptop die Priorität 5 zugewießen, und dem
            Computer die Priorität 3. Wenn nun ein Benutzer eine Nachricht an
<span><code>beispiel</code>@<span>server.xy</span></span>            <strong>ohne Ressource</strong>
            schickt kommt sie auf dem Laptop an, da dieser die
            <strong>höhere</strong>
            Priority hat.
          </div>
          <h4 id="2.1.4" title="2.1.4">2.1.4 - Transport</h4>
          <div>
            Ein Transport (manchmal auch Gateway genannt) ist ein Service, der von
            manchen Jabberserver Betreibern zusätzlich angeboten wird, und
            Verbindungen zu
            <a href="http://de.wikipedia.org/wiki/AOL_Instant_Messenger">AIM</a>
            <a href="https://de.wikipedia.org/wiki/ICQ">ICQ</a>
            <a href="http://de.wikipedia.org/wiki/Windows_Live_Messenger">MSN</a>
            <a href="http://de.wikipedia.org/wiki/Yahoo%21_Messenger">Y!</a>
            zulässt. Vorraussetzung dafür ist, dass man für den jeweiligen Dienst
            ein Konto benötigt, da sich der Transport mit z.B. deiner ICQ Nummer
            bei ICQ anmeldet, und deine ICQ Kontakte dich wie gewohnt in ihrer
            Kontaktliste sehen, und deine ICQ Kontakte in deinem Roster dann als
            Jabberkontakte erscheinen.
          </div>
          <div>
            Ein ICQ Kontakt über einen Jabbertransport sieht dann ungefähr so aus:
<span><code>123456</code>@<code>icq.transport.xy</code></span>          </div>
          <div>
            Der Transport leitet dann die Nachrichten aus ICQ nach Jabber weiter,
            und umgekehrt. Somit ist es ohne weiteres möglich auf Jabber
            umzusteigen, ohne dass man seine ehemaligen Kontakte verliert.
          </div>
          <h3 id="2.2" title="2.2">2.2 - Veranschaulichung</h3>
          <div>
            <div>
              <a href="https://www.der-beweis.de/etc/.jabber_net.png">
                <img alt="Jabber Netzwerk" src="https://www.der-beweis.de/etc/.jabber_net.png"/>
              </a>
            </div>
            <div>Na, alles klar? Dieses Bild soll mal eine Übersicht geben.</div>
          </div>
          <h4 id="2.2.1" title="2.2.1">2.2.1 - Server</h4>
          <div>
            Wir haben in der Mitte den Jabberserver
            <code>Server1</code>
            der mit dem anderen Servern mittels
            <code>Server2</code>
            verbunden ist. Nebenbei hat
            <code>Server1</code>
            noch einen ICQ Transport im Angebot.
          </div>
          <h4 id="2.2.2" title="2.2.2">2.2.2 - Jabber User</h4>
          <div>
            <div>
              Also können
              <code>Alice</code>
              und
              <code>Bob</code>
              über
              <code>Server1</code>
              kommunizieren, und wenn
              <code>Carol</code>
              <code>Bob</code>
              erreichen möchte, dann geht die Nachricht von ihr durch
              <code>Server2</code>
              dann durch
              <code>Server1</code>
              und landet dann bei
              <code>Bob</code>
            </div>
            <div>
              Möchte
              <code>Carol</code>
              an
              <code>Alice</code>
              eine Nachricht schreiben, und möchte, dass sie bei
              <code>Alice</code>
              direkt auf dem Notebook ankommt, dann schreibt sie ihre Nachricht an
<span><code>alice</code>@<code>server1</code>/<code>mobile</code></span>            </div>
          </div>
          <h4 id="2.2.3" title="2.2.3">2.2.3 - Transports</h4>
          <div>
            Möchte jetzt
            <code>Bob</code>
            seinen Freund
            <code>Dave</code>
            erreichen, der noch kein Jabber benutzt, dann meldet sich
            <code>Bob</code>
            mit z. B. seiner ICQ Nummer am Transport an, woraufhin
            <code>Dave</code>
            als Jabberkontakt in
            <code>Bobs</code>
            Roster (Kontaktliste) erscheint.
          </div>
          <h2 id="3" title="3">3. - Was braucht man für Jabber</h2>
          <div>
            Für Jabber braucht man nicht viel, man braucht nur einen Client,
            und einen Jabberaccount auf einem Jabberserver.
            Eventuell einen Transport, für den Kontakt in andere Instant Messaging
            Systeme. Und das war eigentlich schon die Hauptsache.
          </div>
          <div>
            Generell muss man zu Jabberservern sagen, sucht euch größere aus, die
            schon etwas länger existieren, dort haben die User meist ein bisschen
            mehr Ahnung und können euch eher helfen, und bei Clients müsst ihr
            ein paar ausprobieren, bis ihr den findet, der euch am meisten gefällt.
          </div>
          <h2 id="4" title="4">4. - Kleine Tipps und Helferlein</h2>
          <div>
            Hier ein paar kleine Tipps, die euch das Leben mit Jabber leichter
            machen, und noch vieles mehr, das ich in diesem Tutorial nicht
            ansprechen wollte, da es sonnst den Rahmen sprengen würde..
          </div>
          <h3 id="4.1" title="4.1">4.1 - Mehr Infos zu Jabber</h3>
          <div>
            <div>
              Es gibt massig Infos zu Jabber:
              <ul>
                <li>
                  Auf
                  <a href="http://www.jabber.org">jabber.org</a>
                </li>
                <li>
                  Im
                  <a href="http://hp.kairaven.de/jabber">Jabbertutorial auf der Raven-Homepage</a>
                </li>
                <li>
                  <a href="http://www.entartete-kunst.com/yet-another-jabber-faq">Yet another Jabber FAQ</a>
                  bei Missis Notitzblog
                </li>
                <li>
                  Auf der
                  <a href="http://fholzhauer.de">Webseite von fh</a>
                </li>
                <li>
                  Oder ganz klassisch im
                  <a href="https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol">Wikipedia Artikel zu XMPP</a>
                </li>
              </ul>
            </div>
            <div>
              Multimedial gibt es:
              <ul>
                <li>
                  Die
                  <a href="http://ulm.ccc.de/dev/radio/detail?id=31;type=archive;action=show">/dev/radio Sendung</a>
                  vom
                  <a href="http://ulm.ccc.de">CCC Ulm</a>
                  <a href="http://archiv.ulm.ccc.de/radio/devradio31_nomusic.mp3">(mp3)</a>
                </li>
                <li>
                  Die
                  <a href="http://chaosradio.ccc.de/cr119.html">Chaosradio Sendung</a>
                  vom
                  <a href="https://berlin.ccc.de">CCC Berlin</a>
                  <a href="http://chaosradio.ccc.de/archive/chaosradio_119.mp3">(mp3)</a>
                </li>
                <li>
                  <a href="http://events.ccc.de/congress/2006/Fahrplan/track/Hacking/1667.en.html">Jabber Showcase</a>
                  - ein Vortrag von
                  <a href="http://fholzhauer.de">fh</a>
                  auf dem
                  <a href="https://events.ccc.de/congress/2006">23. Chaos Communication Congress</a>
                  -
                  <a href="http://chaosradio.ccc.de/23c3_m4v_1667.html">Aufzeichnung</a>
                  <a href="https://media.ccc.de/v/23C3-1667-de-jabber_showcase">(mirror)</a>
                </li>
                <li>
                  Das
                  <a href="http://ulm.ccc.de/ChaosSeminar/2005/03_Jabber">Chaosseminar</a>
                  vom
                  <a href="http://ulm.ccc.de">CCC Ulm</a>
                  mit
                  <a href="http://fholzhauer.de">fh</a>
                  -
                  <a href="http://archiv.ulm.ccc.de/chaosseminar/200503-jabber/cs-200503-jabber_video.mp4">Aufzeichnung</a>
                  -
                  <a href="http://archiv.ulm.ccc.de/chaosseminar/200503-jabber/cs-200503-jabber_slides.pdf">Slides</a>
                  <a href="http://fholzhauer.de/wp-content/uploads/2006/10/chaosseminar-jabber.pdf">(mirror)</a>
                </li>
              </ul>
            </div>
            <div>
              <a href="http://www.bitsploit.de/archives/648-GnuPG-und-Psi-0.11.html">Auf bitsploit</a>
              erfährt man, wie man in Psi die Chats mit GnuPG verschlüsselt.
            </div>
            <div>
              Ein bisschen tiefer in die Technik kann man sich
              <a href="http://oreilly.com/catalog/jabber/chapter/ch05.html">bei O’Reilly</a>
              einlesen.
            </div>
          </div>
          <h3 id="4.2" title="4.2">4.2 - Jabberserver</h3>
          <div>
            Gute Jabberserver sind zum Beispiel
            <ul>
              <li>
                <a href="http://jabber.ccc.de">jabber.ccc.de</a>
              </li>
              <li>
                <a href="http://jabber.ulm.ccc.de">jabber.ulm.ccc.de</a>
              </li>
              <li>
                <a href="http://web.swissjabber.ch">swissjabber.ch</a>
              </li>
              <li>
                <a href="http://web.amessage.info">amessage</a>
              </li>
              <li>
                <a href="http://status.jabber.org">jabber.org</a>
              </li>
            </ul>
            <div>
              Eine Liste von öffentlichen Jabberservern, an denen man sich einfach
              anmelden kann, ist auf
              <a href="http://www.jabber.org/user/publicservers.shtml">jabber.org</a>
              zu finden.
            </div>
            <div>
              Es ist besser, wenn man sich einen Server aussucht, der etwas größer
              ist, da man schnelleren Support bekommen kann. Andererseits muss man
              damit rechnen, dass bei größeren Servern die Wahrscheinlichkeit höher
              ist, dass dieser überlastet sein könnte.
            </div>
          </div>
          <h3 id="4.3" title="4.3">4.3 - Jabber Transports</h3>
          <div>
            Jabber Transports gibt es viele.
            Leider sind manche nur für die geschlossene Benutzergruppe zugänglich,
            andere sind chronisch überlastet..
            Also gilt es die guten, wenig benutzten Transports zu finden..
          </div>
          <div>
            Hier stelle ich mal eine Liste von guten Jabber Transports zusammen,
            mit denen ich gute Erfahrungen gemacht habe:
            <ul>
              <li>
                aszlig.net
                <code>(AIM/ICQ/IRC/Mail/MSN/Y!)</code>
              </li>
              <li>
                headcounter.org
                <code>(AIM/ICQ/IRC/Mail/MSN/Y!)</code>
              </li>
              <li>
                schokokeks.org
                <code>(AIM/GG/ICQ/IRC/MSN/SMS/Y!)</code>
              </li>
              <li>
                gajim.org
                <code>(ICQ/IRC/MSN)'</code>
              </li>
            </ul>
          </div>
          <div>
            Leider ändert sich im Umfeld der Jabber Transports immer sehr schnell
            etwas, so dass diese Liste nicht immer aktuell sein kann..
            <br/>
            Dennoch hilft es mit der Service Discovery verschiedene Jabberserver
            abzusuchen, so findet man auch eine Menge Transports! Viel Spaß.
          </div>
          <h3 id="4.4" title="4.4">4.4 - Jabber Clients</h3>
          <div>
            Es gibt für Jabber nicht
            <strong>den</strong>
            einen Client, nein, es gibt eine ganze Menge davon. So kann man
            problemlos den Client wechseln, falls der alte nicht mehr
            gefallen sollte.
          </div>
          <div>
            Aus dem riesigen Angebot von Clients möchte ich euch ein paar
            Empfehlungen geben, denn unter einigen guten Clients gibts leider auch
            einige, die schlecht programmiert sind, die Entwicklung eingeschlafen
            ist, oder die leicht menschenunverständlich sind..
          </div>
          <h4>Windows</h4>
          <div>
            Jabber auf Windows ist kein Problem,
            gibt es dort ein paar gute Clients:
            <ul>
              <li>
                <a href="http://psi-im.org">PSI</a>
              </li>
              <li>
                <a href="http://www.igniterealtime.org/projects/spark">Spark</a>
              </li>
              <li>
                <a href="http://www.pidgin.im">Pidgin</a>
              </li>
              <li>
                <a href="http://www.pandion.be">Pandion</a>
              </li>
              <li>
                <a href="http://exodus.jabberstudio.org">Exodus</a>
              </li>
            </ul>
            Unterstützen sie doch alle alles was man so fürs Jabbern benötigt.
            <h4>Mac OS</h4>
            <div>
              Leider gibt es noch für Mac OS sehr wenige Jabberclients,
              dennoch gibt es immerhin:
              <ul>
                <li>
                  <a href="http://psi-im.org">PSI</a>
                </li>
                <li>
                  <a href="http://www.igniterealtime.org/projects/spark">Spark</a>
                </li>
                <li>
                  <a href="https://www.adium.im">Adium</a>
                  (kann ich nicht wirklich empfehlen, da er Jabber nur
                  mäßig bis schlecht unterstützt)
                </li>
                <li>
                  <a href="https://www.apple.com/support/mac-apps/messages/">iChat</a>
                  (wenn auch nur sehr begrenzt)
                </li>
              </ul>
            </div>
            <h4>Linux</h4>
            <div>
              Für Linux gibts wohl die meisten Clients:
              <ul>
                <li>
                  <a href="http://psi-im.org">PSI</a>
                </li>
                <li>
                  <a href="http://www.gajim.org">Gajim</a>
                </li>
                <li>
                  <a href="http://www.pidgin.im">Pidgin</a>
                </li>
                <li>
                  <a href="http://tkabber.jabber.ru/en">Tkabber</a>
                </li>
                <li>
                  <a href="http://kopete.kde.org">Kopete</a>
                </li>
              </ul>
            </div>
            <div>
              Weiterhin gibt es auf
              <a href="https://xmpp.net/directory.php">xmpp.net</a>
              eine ausführliche Liste über Jabberclients, wie auch in der
              <a href="http://de.wikipedia.org/wiki/Liste_von_Jabber-Clients">Wikipedia</a>
            </div>
            <div>
              Nach einer gewissen Zeit wird jeder seinen Client finden, der persönlich
              am meisten gefällt, man muss nur ein bisschen rumprobieren.
            </div>
          </div>
          <h3 id="4.5" title="4.5">4.5 - Jabber Roster Utility</h3>
          <div>
            <a href="https://unclassified.software/jru-php/jru.php">Jabber-Roster Utility in php</a>
            -
            Macht euch das Leben leichter, bei der Verwaltung der Jabber
            Kontaktliste, z.B. bei einem Transportwechsel. Liste in einen
            Texteditor kopieren, den alten Transport durch den neuen ersetzen
            lassen, alten Transport mit
            <code>-</code>
            entfernen, Kontaktliste aktualisieren, fertig.
            (Wer das nicht verstanden hat, der liest sich die
            <a href="http://unclassified.software/de/apps/jru-php">Dokumentation vom Jabber Roster Utility</a>
            lieber selbst durch..
          </div>
          <h3 id="4.6" title="4.6">4.6 - JWChat</h3>
          <div>
            Unterwegs auf einem Computer, der keinen Jabber Client installiert hat?
            Kein Problem mit dem Web Chat Frontend von
            <a href="http://jwchat.org">JWChat.org</a>
          </div>
          <h2 id="5" title="5">5 - Fazit</h2>
          <div>
            Jabber ist leider noch ein Nerdspielzeug, überzeugt aber in fast allem
            gegenüber den herkömmlichen Instant Messaging Systemen. Jabber ist
            zuverlässiger, einfacher, nicht so nervig, und viel transparenter
            gegenüber dem User, als die herkömmlichen Systeme, die einen meist
            alleine lassen. selbst das gaze Potential von Jabber ist noch lange
            nicht ausgenutzt, und dadurch dass Jabber Open Source ist könntest du
            selbst Jabber nach deinen Wünschen anpassen.
          </div>
          <div>
            Leider ist Jabber wegen seinem Nerdstatus und wegen seiner noch
            geringen Verbreitung reichlich unsexy.. Im Gegensatz dazu, was macht
            denn ICQ oder MSN so supergeil? Die nervigen Fehlermeldungen?
            Dass von Zeit zu Zeit alle Kontakte aus der Liste verschwinden?
            Oder ist es die Werbung, die städig blinkt, und einem am konzentrieren
            hindert? Wohl kaum!?!
          </div>
          <div>
            Ich fände es schön, wenn ich einigen Leuten, die hier diesen Text
            gelesen haben, ich mal in Jabber antreffen würde.
            Und noch schöner wärs, wenn ich sie öfters als nur ein-, zweimal
            treffen würde. Am besten regelmäßig.
          </div>
          <div>Viel Spaß beim Jabbern!</div>
          <div class="foot">
            <div>Eine Einführung in Jabber/XMPP</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>15.08.2007 - 17:23:11</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>24.06.2016 - 00:48:28</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#XMPP" title="XMPP">XMPP</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/ls.html"/>
    <id>tag:www.der-beweis.de,2016-06-23:/build/ls.html</id>
    <published>2016-06-23T22:00:00+02:00</published>
    <updated>2016-06-23T22:00:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Meine Projekte</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Meine Projekte</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/baypack" title="build/baypack">baypack</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/beats" title="build/beats">beats</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler" title="build/euler">euler</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/ffflash" title="build/ffflash">ffflash</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/flightboard" title="build/flightboard">flightboard</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/full_power" title="build/full_power">full_power</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/impatient" title="build/impatient">impatient</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar" title="build/inventar">inventar</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/locate_me" title="build/locate_me">locate_me</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/master_control" title="build/master_control">master_control</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/okay" title="build/okay">okay</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/show_self" title="build/show_self">show_self</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/squirrelsort" title="build/squirrelsort">squirrelsort</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/stempeluhr" title="build/stempeluhr">stempeluhr</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/today_i" title="build/today_i">today_i</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/topical" title="build/topical">topical</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/videowarrior" title="build/videowarrior">videowarrior</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/index.html" title="build/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/minitube.php" title="build/minitube.php">minitube.php</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Vorträge, Präsentationen, Talks …</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/talks/index.html"/>
    <id>tag:www.der-beweis.de,2016-06-23:/etc/talks/index.html</id>
    <published>2016-06-23T21:39:00+02:00</published>
    <updated>2016-06-23T21:39:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Vorträge, Präsentationen, Talks …</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Vorträge, Präsentationen, Talks …</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Ammoniak" title="etc/talks/Ammoniak">Ammoniak</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Grundgesetz" title="etc/talks/Grundgesetz">Grundgesetz</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Hacking%20the%20Media" title="etc/talks/Hacking%20the%20Media">Hacking the Media</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Hausautomatisierung" title="etc/talks/Hausautomatisierung">Hausautomatisierung</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Internet%20Time" title="etc/talks/Internet%20Time">Internet Time</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Komprimierung%20-%20RLE_LZW_Huffmann" title="etc/talks/Komprimierung%20-%20RLE_LZW_Huffmann">Komprimierung - RLE_LZW_Huffmann</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Das%20Parfum%20-%20Filmkritik.pdf" title="etc/talks/Das%20Parfum%20-%20Filmkritik.pdf">Das Parfum - Filmkritik.pdf</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Die%20Vermessung%20der%20Welt%20-%20Handout.pdf" title="etc/talks/Die%20Vermessung%20der%20Welt%20-%20Handout.pdf">Die Vermessung der Welt - Handout.pdf</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Die%20neuen%20Leiden%20des%20jungen%20W.pdf" title="etc/talks/Die%20neuen%20Leiden%20des%20jungen%20W.pdf">Die neuen Leiden des jungen W.pdf</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Kognitive%20Psychologie.pdf" title="etc/talks/Kognitive%20Psychologie.pdf">Kognitive Psychologie.pdf</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Theater%20-%20Stiluebung%20-%20Raymond%20Queneau.pdf" title="etc/talks/Theater%20-%20Stiluebung%20-%20Raymond%20Queneau.pdf">Theater - Stiluebung - Raymond Queneau.pdf</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks/Werden%20wir%20wirklich%20als%20gute%20Menschen%20geboren%20-%20Handout.pdf" title="etc/talks/Werden%20wir%20wirklich%20als%20gute%20Menschen%20geboren%20-%20Handout.pdf">Werden wir wirklich als gute Menschen geboren - Handout.pdf</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">/etc</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/etc/index.html"/>
    <id>tag:www.der-beweis.de,2016-06-23:/etc/index.html</id>
    <published>2016-06-23T21:38:00+02:00</published>
    <updated>2016-06-23T21:38:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Wichtige Sachen!</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>/etc</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/etc/gpg" title="etc/gpg">gpg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/talks" title="etc/talks">talks</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/aua.html" title="etc/aua.html">aua.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/blink.html" title="etc/blink.html">blink.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/eyes.html" title="etc/eyes.html">eyes.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/happy.html" title="etc/happy.html">happy.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/jabber.html" title="etc/jabber.html">jabber.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/noise.html" title="etc/noise.html">noise.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc/shield.svg" title="etc/shield.svg">shield.svg</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/ls.html"/>
    <id>tag:www.der-beweis.de,2016-06-22:/ls.html</id>
    <published>2016-06-22T12:01:00+02:00</published>
    <updated>2016-06-22T12:01:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">ls /</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>ls /</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build" title="build">build</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/etc" title="etc">etc</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/404.html" title="404.html">404.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/apple-touch-icon-precomposed.png" title="apple-touch-icon-precomposed.png">apple-touch-icon-precomposed.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/apple-touch-icon.png" title="apple-touch-icon.png">apple-touch-icon.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/favicon.ico" title="favicon.ico">favicon.ico</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/impressum.html" title="impressum.html">impressum.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/index.html" title="index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/logo.png" title="logo.png">logo.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/robots.txt" title="robots.txt">robots.txt</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/style.css" title="style.css">style.css</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Der Beweis</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/index.html"/>
    <id>tag:www.der-beweis.de,2016-06-22:/index.html</id>
    <published>2016-06-22T12:00:00+02:00</published>
    <updated>2016-06-22T12:00:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Der Beweis | Professioneller Internet Auftritt</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="tile">
          <div class="head">
            Der Beweis
            —
            Schönen guten Tag, Willkommen, Helau, Hand-Schüttel...
            <div>
              <small>
                <a href="https://www.der-beweis.de/impressum.html">Impressum</a>
              </small>
            </div>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            Basteln, Software, Scripte,
            Projekte, Python, Portfolio,
            Code, Löten, Webseiten,
            Schrauben, Frickeln, Leichen-Im-Keller,
            Programmieren und dergleichen...
          </div>
          <div class="tail">
            <a href="https://www.der-beweis.de/build">/build</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            Kram, Krempel, Sonstiges,
            Diverses, Geraffel, Kitsch,
            Messiglück, üble Beläge,
            Ramsch, Plunder, Schrott,
            Gemischtwaren, Unrat
            und dergleichen...
          </div>
          <div class="tail">
            <a href="https://www.der-beweis.de/etc">/etc</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div class="all-small-caps centered">THIS PAGE INTENTIONALLY LEFT BLANK</div>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div>Anrufbeantworter goes wild.</div>
            <div>Meine Mailbox als Podcast!</div>
            <div>
              <small>since 2009</small>
            </div>
          </div>
          <div class="tail">
            <a href="https://telefonmann.der-beweis.de">telefonmann</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div>Writing at a glance.</div>
          </div>
          <div class="tail">
            <a href="https://www.toor.su">toor.su</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div>Man kann sich doch nicht alles merken!</div>
            <div>Deshalb wird hier alles notiert.</div>
          </div>
          <div class="tail">
            <a href="https://wissen.der-beweis.de">wissen</a>
          </div>
        </div>
        <div class="tile">
          <div class="head">
            <div>
              <div>
                <a href="https://pinboard.in/u:spky">Pinwand</a>
              </div>
              <div>
                <a href="http://www.last.fm/user/friidis">Klangkonsum</a>
              </div>
<div><a href="http://www.flickr.com/photos/friidis">Bilder</a>, <a href="https://vimeo.com/spky">Bewegtbild</a></div>              <div>
                <a href="https://github.com/spookey">Deppendrehkreuz</a>
              </div>
<div><a href="https://gitlab.com/spookey">Labor</a>, <a href="https://sr.ht/~spky/">Hütte</a></div>              <div>
                <a href="http://stackoverflow.com/users/2064185/spky">Stapelüberlauf</a>
              </div>
<div><a href="https://chaos.social/@spky" rel="me">Mammut</a>, <a href="https://pixel.tchncs.de/spky">Pixel</a></div>              <div>
                <a href="http://woitech-hightech.tumblr.com">Stolpern</a>
              </div>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/today_i</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/today_i/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-29:/build/today_i/ls.html</id>
    <published>2016-04-29T10:00:00+02:00</published>
    <updated>2016-04-29T10:00:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Today-I</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Today-I</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/today_i/index.html" title="build/today_i/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/today_i/login.png" title="build/today_i/login.png">login.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/today_i/main.png" title="build/today_i/main.png">main.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/today_i/sample_2013_12.png" title="build/today_i/sample_2013_12.png">sample_2013_12.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/today_i/sample_2014_04.png" title="build/today_i/sample_2014_04.png">sample_2014_04.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Today-I</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/today_i/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-29:/build/today_i/index.html</id>
    <published>2016-04-29T09:59:00+02:00</published>
    <updated>2016-04-29T09:59:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Automatisierter Wochenrückblick.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Today-I</h1>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Das Blog des Hackerspaces vor Ort
              <span> &amp;copy; </span>
              wird recht selten gepflegt.
            </dd>
            <dd>Noch weniger sind dazu Einträge über aktuelle Projekte vorhanden.</dd>
            <dd>
              Idee
              <span>&amp;#x261e;&amp;#xfe0e; </span>
              Kleine Einträge die Woche über sammeln, und
              gebündelt im Blog veröffentlichen.
            </dd>
            <dd>
              Also wird sich ein/zwei Wochenenden lang hingesetzt und
              diese Anwendung geschrieben.
            </dd>
            <dd>
              Nach dem Login stehen ein Text- und ein Upload-Feld (für Bilder)
              zur Verfügung und freuen sich auf Inhalt.
            </dd>
            <dd>
              Einmal die Woche läuft ein Cronjob, der einen neuen Blogeintrag als
              Entwurf bereit stellt, sowie alle Bilder mit hochlädt.
            </dd>
            <dd>
              So kann man den Entwurf ggf. noch mal bearbeiten,
              bevor man den Beitrag freischaltet.
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              Geschrieben in
              <code>python2</code>
            </dd>
<dd>Als Basis: <code><a href="http://flask.pocoo.org">Flask</a></code>, <code><a href="http://jinja.pocoo.org">Jinja</a></code> &amp; <code><a href="http://werkzeug.pocoo.org">Werkzeug</a></code></dd><dd><code><a href="https://flask-wtf.readthedocs.io">Flask-WTF</a></code> &amp; <code><a href="https://wtforms.readthedocs.io">WTForms</a></code> für die Textfelder</dd><dd><code><a href="https://flask-login.readthedocs.io">Flask-Login</a></code> für das User-Management. Dieses nutzt <code><a href="https://github.com/gdub/python-simpleldap">simpleldap</a></code> zur Kommunikation mit dem LDAP-Server</dd><dd><code><a href="https://pypi.python.org/pypi/img_rotate">img_rotate</a></code> für <code><a href="http://www.pythonware.com/products/pil/">PIL</a></code>. Zum automatischen ausrichten der Bilder.</dd><dd><code><a href="https://python-wordpress-xmlrpc.readthedocs.io">wordpress-xmlrpc</a></code> zum Erstellen der Blogeinträge und hochladen der Bilder.</dd>            <dt>Features</dt>
            <dd>
              <ul>
                <li>
                  In Eile geschrieben, nie wesentlich gepflegt.
                  Wurde nur nach Bedarf gepatcht..
                </li>
                <li>
                  Bilder werden beim Hochladen anhand der EXIF-Daten
                  korrekt gedreht.
                  (Passiert häufig bei Fotos von Smartphones).
                </li>
                <li>
                  Keine Datenbank
                  <span>&amp;#x261e;&amp;#xfe0e;</span>
                  Einträge der Woche werden in
                  <code>json</code>
                  gespeichert.
                </li>
                <li>
                  Archiv Funktion
                  <span>&amp;#x261e;&amp;#xfe0e;</span>
                  Nach dem Upload auf das Blog, werden die Einträge und Uploads im
                  Archiv gesammelt.
                </li>
                <li>
                  Erkennt doppelte Dateinamen in den Uploads, benennt diese um:
                  <code>
                    <span>image.png</span>
                    <span>&amp;#x261e;&amp;#xfe0e;</span>
                    <span>image_.png</span>
                  </code>
                </li>
              </ul>
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/today-I">today-I.git</a>
              </div>
            </dd>
          </dl>
          <div>
            <dl>
              <dt>Login</dt>
              <dd>
                <div>
                  Durch die Kopplung an das bereits bestehende LDAP spart man sich eine
                  komplette Nutzerverwaltung.
                  <br/>
                  Kein speichern von Logins, kein Passwort-vergessen-Link, einfach nur
                  den LDAP-Server fragen, fertig!
                </div>
                <div>
                  <img alt="login" src="https://www.der-beweis.de/build/today_i/login.png"/>
                </div>
              </dd>
              <dt>Hauptseite</dt>
              <dd>
                <div>
                  Hier kann man im Textfeld mit Begeisterung von seinen Projekten
                  berichten, und dazu ein Foto hochladen.
                </div>
                <div>
                  <img alt="main" src="https://www.der-beweis.de/build/today_i/main.png"/>
                </div>
              </dd>
              <dt>Beispiel #1</dt>
              <dd>
                <div>Hier ein recht frühes Beispiel vom Dezember 2013:</div>
                <div>
                  <img alt="sample_2013_12" src="https://www.der-beweis.de/build/today_i/sample_2013_12.png"/>
                </div>
              </dd>
              <dt>Beispiel #2</dt>
              <dd>
                <div>Oder ein bisschen aktueller, vom April 2014:</div>
                <div>
                  <img alt="sample_2014_04" src="https://www.der-beweis.de/build/today_i/sample_2014_04.png"/>
                </div>
              </dd>
            </dl>
            Es finden sich Einträge von
            <em>Oktober 2013</em>
            bis
            <em>Juli 2015</em>
          </div>
          <div class="foot">
            <div>Automatisierter Wochenrückblick.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>29.04.2016 - 09:59:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#CCC" title="CCC">CCC</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/inventar/sample_2016_04</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/inventar/sample_2016_04/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-27:/build/inventar/sample_2016_04/index.html</id>
    <published>2016-04-27T10:10:00+02:00</published>
    <updated>2016-04-27T10:10:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Sample 2016 04</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Sample 2016 04</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/category.png" title="build/inventar/sample_2016_04/category.png">category.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/category_edit_inventar.png" title="build/inventar/sample_2016_04/category_edit_inventar.png">category_edit_inventar.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/item.png" title="build/inventar/sample_2016_04/item.png">item.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/item_eintopf.png" title="build/inventar/sample_2016_04/item_eintopf.png">item_eintopf.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/label.png" title="build/inventar/sample_2016_04/label.png">label.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/label_edit_print.png" title="build/inventar/sample_2016_04/label_edit_print.png">label_edit_print.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/search_e.png" title="build/inventar/sample_2016_04/search_e.png">search_e.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/user.png" title="build/inventar/sample_2016_04/user.png">user.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04/user_charly.png" title="build/inventar/sample_2016_04/user_charly.png">user_charly.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/inventar</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/inventar/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-27:/build/inventar/ls.html</id>
    <published>2016-04-27T10:09:00+02:00</published>
    <updated>2016-04-27T10:09:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Inventar</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Inventar</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04" title="build/inventar/sample_2016_04">sample_2016_04</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/icon.png" title="build/inventar/icon.png">icon.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/inventar/index.html" title="build/inventar/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">Inventar</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/inventar/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-27:/build/inventar/index.html</id>
    <published>2016-04-27T10:08:00+02:00</published>
    <updated>2016-04-27T10:08:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Eine Webapp für Barcode-Scanner &amp; Menschen.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Inventar</h1>
          <div>
            <img alt="barcode scanner" src="https://www.der-beweis.de/build/inventar/icon.png"/>
          </div>
          <dl>
            <dt>Projekt</dt>
            <dd>Der Barcode-Scanner liegt schon länger in der Bastelkiste...</dd>
            <dd>
              Und im Hackerspace vor Ort &amp;copy; blickt auch keiner mehr durch...
              <ul>
                <li>wem was gehört</li>
                <li>wo was hingehört</li>
                <li>wie lange schon was rum liegt (z.B. Essen...)</li>
              </ul>
            </dd>
            <dd>
              Man hat dieses
              <a>CSS-Framework</a>
              entdeckt, ist sehr beeindruckt,
              und will unbedingt was damit machen.
            </dd>
            <dt>Idee</dt>
            <dd>
              <div>
                <cite>"Je ein Barcode-Label auf einmal alles kleben."</cite>
              </div>
            </dd>
            <dd>
              Koordinierung der Objekte aus der Echtwelt erfolgt dann
              durch ein Inventar-System.
            </dd>
            <dd>
              <strong>Denkbar</strong>
              <ul>
                <li>
                  Ein fest installierter
                  <abbr title="Raspberry Pi, Beaglebone, etc..">Mini-Computer</abbr>
                  mit Tastatur, Display, Barcode-Scanner und Label-Drucker..
                </li>
                <li>
                  Die Anwendung läuft dann direkt da drauf,
                  oder hinter einer LDAP-Authentifizierung mit auf dem Webserver
                </li>
              </ul>
            </dd>
            <dt>Werkzeuge</dt>
            <dd>
              <code>python3</code>
            </dd>
            <dd>
              CSS-Framework:
              <code>
                <a href="http://bulma.io">bulma</a>
              </code>
            </dd>
            <dd>
              Icons:
              <code>
                <a href="https://fortawesome.github.io/Font-Awesome">FontAwesome</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="http://flask.pocoo.org">Flask</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="http://flask-sqlalchemy.pocoo.org">Flask-SQLAlchemy</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="https://flask-wtf.readthedocs.io">Flask-WTF</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="http://jinja.pocoo.org">Jinja2</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="http://www.sqlalchemy.org">SQLAlchemy</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="http://werkzeug.pocoo.org">Werkzeug</a>
              </code>
            </dd>
            <dd>
              <code>
                <a href="https://wtforms.readthedocs.io">WTForms</a>
              </code>
            </dd>
            <dt>Features</dt>
            <dd>
              <div>
                <span>&amp;#x2714;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>
                  Erzeugt on-the-fly Code128 Barcodes im SVG-Format
                  im eigenen Modul (ohne weitere Abhängigkeiten).
                </li>
                <li>Datenbank wird beim ersten Start automatisch erzeugt.</li>
                <li>Alle Ressourcen (CSS-Framework, Fonts) kommem vom eigenen Server.</li>
                <li>
                  &amp;#x261e;&amp;#xfe0e;
                  Ein
                  <code>Makefile</code>
                  sammelt von GitHub alle benötigten Ressourcen ein,
                  und entpackt diese in den
                  <code>static</code>
                  Ordner.
                </li>
              </ul>
              <div>
                <span>&amp;#x2718;&amp;#xfe0e;</span>
              </div>
              <ul>
                <li>Laser Barcode-Scanner können nicht direkt vom Bildschirm scannen.</li>
                <li>
                  Suche leitet bei direkten Treffern noch nicht weiter.
                  <small>(ist auch sonst noch nicht sehr mächtig)</small>
                </li>
                <li>Entwicklung eingestellt.</li>
              </ul>
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="http://bitbucket.com/spky/inventar">inventar.git</a>
              </div>
              <div>
                <strong>Output</strong>
              </div>
              <div>
                Siehe
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                <a href="https://www.der-beweis.de/build/inventar/sample_2016_04">sample_2016_04</a>
                <span>&amp;#x261c;&amp;#xfe0e;</span>
              </div>
            </dd>
          </dl>
          <div>
            <div>Die Suche gibt eine gute Übersicht aller Elemente:</div>
            <div>
              <a href="https://www.der-beweis.de/build/inventar/sample_2016_04">
                <img alt="search e" src="https://www.der-beweis.de/build/inventar/sample_2016_04/search_e.png"/>
              </a>
            </div>
          </div>
          <div class="foot">
            <div>Eine Webapp für Barcode-Scanner &amp; Menschen.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>27.04.2016 - 10:08:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Barcode" title="Barcode">Barcode</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#CCC" title="CCC">CCC</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/stempeluhr</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/stempeluhr/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-25:/build/stempeluhr/ls.html</id>
    <published>2016-04-25T16:44:00+02:00</published>
    <updated>2016-04-25T16:44:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Stempeluhr</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Stempeluhr</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/stempeluhr/code.png" title="build/stempeluhr/code.png">code.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/stempeluhr/index.html" title="build/stempeluhr/index.html">index.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/stempeluhr/main.png" title="build/stempeluhr/main.png">main.png</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/stempeluhr/success.png" title="build/stempeluhr/success.png">success.png</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/baypack/sample_2016_02</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/baypack/sample_2016_02/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-25:/build/baypack/sample_2016_02/ls.html</id>
    <published>2016-04-25T13:32:00+02:00</published>
    <updated>2016-04-25T13:32:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/export.csv" title="build/baypack/sample_2016_02/export.csv">export.csv</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/export.json" title="build/baypack/sample_2016_02/export.json">export.json</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/feed.atom" title="build/baypack/sample_2016_02/feed.atom">feed.atom</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/index.html" title="build/baypack/sample_2016_02/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/baypack</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/baypack/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-25:/build/baypack/ls.html</id>
    <published>2016-04-25T13:31:00+02:00</published>
    <updated>2016-04-25T13:31:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">BayPack</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>BayPack</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02" title="build/baypack/sample_2016_02">sample_2016_02</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/baypack.svg" title="build/baypack/baypack.svg">baypack.svg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/baypack/index.html" title="build/baypack/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">BayPack</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/baypack/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-25:/build/baypack/index.html</id>
    <published>2016-04-25T13:30:00+02:00</published>
    <updated>2016-04-25T13:30:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Daten vom Datensammler sammeln</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <a href="http://bitbucket.com/spky/baypack">
            <img alt="BayPack" src="https://www.der-beweis.de/build/baypack/baypack.svg"/>
          </a>
          <dl>
            <dt>Projekt</dt>
            <dd>
              Es gibt PayBack&amp;trade;-Karten, die nur Punkte&amp;trade;-sammeln
              zulassen, jedoch kein abheben erlauben.
            </dd>
            <dd>
              Eine solche wurde für den Hackerspace vor Ort&amp;copy;
              organisiert, kopiert, und in Umlauf gebracht.
            </dd>
            <dd>
              Auf der Webseite gut versteckt lassen sich die Punkte&amp;trade; gegen
              Geld&amp;trade; eintauschen.
            </dd>
            <dd>Der Gewinn daraus geht auf das Spendenkonto des Hackerspaces.</dd>
            <dt>Ziel</dt>
            <dd>Ermitteln wie wertvoll Daten sein können.</dd>
            <dd>Bereitstellen der Daten in lesbaren, verarbeitbaren Formaten.</dd>
            <dd>Leute dazu anregen, Statistiken &amp; Grafiken daraus zu erstellen.</dd>
            <dt>Werkzeuge</dt>
            <dd>
              <code>
                <a href="https://www.crummy.com/software/BeautifulSoup">BeautifulSoup</a>
              </code>
              sowie
              <code>
                <a href="http://python-requests.org">requests</a>
              </code>
              zum verarbeiten der Quelle.
            </dd>
            <dd>
              <code>
                <a href="http://www.sqlalchemy.org">SQLAlchemy</a>
              </code>
              für ein SQlite-File.
            </dd>
            <dd>
              Mit
              <code>
                <a href="http://jinja.pocoo.org">Jinja2</a>
              </code>
              wird das
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02">html</a>
              generiert.
            </dd>
            <dd>
              <code>
                <a href="http://werkzeug.pocoo.org">Werkzeug</a>
              </code>
              ist für den
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/feed.atom">feed</a>
              zuständig.
            </dd>
            <dt>Features</dt>
            <dd>
              Alles ist eine Klasse:
              <ul>
                <li>
                  Module sind untereinander abhängig
                  <br/>
                  <span>&amp;#x261e;&amp;#xfe0e;</span>
                  benötigen Instanzen anderer Klassen um erzeugt zu werden.
                  <br/>
                  <small>Sogar der Logger ist eine Klasse</small>
                </li>
                <li>
                  Die meisten Objekte haben eine
                  <code>__call__()</code>
                  Methode.
                </li>
              </ul>
            </dd>
            <dd>
              Modul unabhängige Konfiguration:
              <code>crawler</code>
              <code>storage</code>
              <code>output</code>
            </dd>
            <dd>Implementierung des Crawlers als Iterator.</dd>
            <dd>
              Nahtloses wiederaufnehmen alter Buchungen unter
              Vermeidung von Duplikaten.
            </dd>
            <dd>
              Abbruch des Crawlers, nach sieben
              <small>(konfigurierbar)</small>
              Tagen ohne neue Daten.
            </dd>
            <dd>
              <div>
                Minimale Datenhaltung &amp;mdash; Jedes Datum, Punkte&amp;trade;stand,
                Sammelstelle&amp;reg; und jede Aktion&amp;copy; existiert nur einmal.
                <br/>
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                Die eigentlichen Buchungen sind immer nur Referenzen darauf.
              </div>
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="http://bitbucket.com/spky/baypack">baypack.git</a>
              </div>
              <div>
                <strong>Output</strong>
              </div>
              <div>
                Siehe
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                <a href="https://www.der-beweis.de/build/baypack/sample_2016_02/ls.html">sample_2016_02</a>
                <span>&amp;#x261c;&amp;#xfe0e;</span>
              </div>
            </dd>
          </dl>
          <div>
            Die Ausgabe ist limitiert auf 42
            <small>(konfigurierbar)</small>
            Elemente.
          </div>
          <div>
            Die Software kann zusätzlich noch
            <code>_full</code>
            erzeugen, die alle bis dato bekannten Daten enthalten:
          </div>
          <ul>
            <li>
              index.html
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              index_full.html
            </li>
            <li>
              export.csv
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              export_full.csv
            </li>
            <li>
              export.json
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              export_full.json
            </li>
            <li>
              feed.atom
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              feed_full.atom
            </li>
          </ul>
          <div class="centered">
            <strong>
              <a href="https://www.der-beweis.de/build/baypack/sample_2016_02">baypack sample_2016_02</a>
            </strong>
          </div>
          <div class="centered">
            <small>Zum sortieren auf die Überschriften der Tabelle klicken.</small>
          </div>
          <div>
            <div>
              stripped
              iframe
              sorry!
              see original page at
              <a href="https://www.der-beweis.de/build/baypack/index.html">https://www.der-beweis.de/build/baypack/index.html</a>
            </div>
          </div>
          <div class="foot">
            <div>Daten vom Datensammler sammeln</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>25.04.2016 - 13:30:00</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#CCC" title="CCC">CCC</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/euler/sample_2016_05</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/euler/sample_2016_05/index.html"/>
    <id>tag:www.der-beweis.de,2016-04-18:/build/euler/sample_2016_05/index.html</id>
    <published>2016-04-18T17:51:00+02:00</published>
    <updated>2016-04-18T17:51:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/bc.html" title="build/euler/sample_2016_05/bc.html">bc.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/c.html" title="build/euler/sample_2016_05/c.html">c.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/groovy.html" title="build/euler/sample_2016_05/groovy.html">groovy.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/groovyc.html" title="build/euler/sample_2016_05/groovyc.html">groovyc.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/java.html" title="build/euler/sample_2016_05/java.html">java.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/js.html" title="build/euler/sample_2016_05/js.html">js.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/lua.html" title="build/euler/sample_2016_05/lua.html">lua.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/php.html" title="build/euler/sample_2016_05/php.html">php.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/py.html" title="build/euler/sample_2016_05/py.html">py.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/rb.html" title="build/euler/sample_2016_05/rb.html">rb.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/rust.html" title="build/euler/sample_2016_05/rust.html">rust.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/swift.html" title="build/euler/sample_2016_05/swift.html">swift.html</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05/swiftc.html" title="build/euler/sample_2016_05/swiftc.html">swiftc.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">ls /build/euler</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/euler/ls.html"/>
    <id>tag:www.der-beweis.de,2016-04-18:/build/euler/ls.html</id>
    <published>2016-04-18T17:50:00+02:00</published>
    <updated>2016-04-18T17:50:00+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">Euler</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>Euler</h1>
          <ul>
            <li>
              <a href="https://www.der-beweis.de/build/euler/sample_2016_05" title="build/euler/sample_2016_05">sample_2016_05</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/e.svg" title="build/euler/e.svg">e.svg</a>
            </li>
            <li>
              <a href="https://www.der-beweis.de/build/euler/index.html" title="build/euler/index.html">index.html</a>
            </li>
          </ul>
        </div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="text">FFFlash</title>
    <link rel="alternate" type="text/html" href="https://www.der-beweis.de/build/ffflash/index.html"/>
    <id>tag:www.der-beweis.de,2014-04-30:/build/ffflash/index.html</id>
    <published>2014-04-30T13:24:39+02:00</published>
    <updated>2015-10-19T18:36:52+02:00</updated>
    <author>
      <name>spky</name>
      <uri>https://www.der-beweis.de</uri>
    </author>
    <summary type="text">FreifunkAPI Files aktuell halten.</summary>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <div class="main">
          <h1>
            <a href="https://github.com/spookey/ffflash">FFFlash</a>
          </h1>
          <dl>
            <dt>Projekt</dt>
            <dd>
              FFFlash
              ist ein Projekt um sein
              <a href="https://api.freifunk.net">FreifunkAPI</a>
              File automatisch aktuell zu halten.
            </dd>
            <dt>Hintergrund</dt>
            <dd>
              Die FreifunkAPI besteht aus
              <code>JSON</code>
              Files, die jede Community veröffentlicht.
            </dd>
            <dd>
              Diese beinhalten Treffpunkte, Termine, Kontaktmöglichkeiten,
              wie viele Router online sind, etc..
            </dd>
            <dd>
              Die Adresssen darauf werden an
              <a href="https://github.com/freifunk/directory.api.freifunk.net">zentraler Stelle</a>
              gesammelt.
            </dd>
            <dd>
              Auf Basis dessen entstanden schon einige hilfreiche Anwendungen:
              <ul>
                <li>
                  Die
                  <a href="https://www.freifunk-karte.de">Freifunk Karte</a>
                  oder...
                </li>
                <li>
                  die
                  <a href="http://appstore.com/nofail/freifunk">Freifunk App</a>
                  für iOS.
                  <small>Nicht das von Cisco.</small>
                </li>
              </ul>
            </dd>
            <dd>
              Das FreifunkAPI File wird initial mit dem
              <a href="https://freifunk.net/api-generator">API Generator</a>
              erstellt.
            </dd>
            <dd>Und dort liegt meines Erachtens nach das Problem:</dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Jede Community erstellt sich irgendwann im Laufe ihres bestehens ein
              API File.
            </dd>
            <dd>
              Wenn man Glück hat, findet sich jemand, der regelmäßig die
              Informationen aktuell hält.
            </dd>
            <dd>Trotz Generator ist dies eine Menge Aufwand, und der Mensch ist faul...</dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Updates geschehen selten bis gar nicht.
            </dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Die Informationen sind in der Regel veraltet!
            </dd>
            <dd>
              <span>&amp;#x261e;&amp;#xfe0e;</span>
              Anwendungen die auf dieser Datenbasis aufbauen verlieren an Qualität.
            </dd>
            <dd>
              <small>
                Hatte damals mit dem Entwickler darüber gesprochen, er konnte oder
                wollte dies nicht so recht einsehen...
              </small>
            </dd>
            <dt>Ziel</dt>
            <dd>
              Ständig frickelt man an den Maschinen im Netz rum, an denen
              die aktuellen Statistiken anfallen.
            </dd>
            <dd>
              <code>JSON</code>
              lässt sich doch kinderleicht mit einem Script generieren..
            </dd>
            <dd>Kann man beides nicht irgendwie kombinieren?!? Klar! Doofe Frage...</dd>
            <dt>Umsetzung</dt>
            <dd>
              Anfangs wurde mit viel Gaffa, Liebe und Heißkleber etwas
              funktionales gezimmert.
            </dd>
            <dd>
              Es entstand eine simple Klasse, die bestehende Werte in einem
              API File ersetzen konnte.
            </dd>
            <dd>
              Dazu noch ein Script um die Anzahl der Nodes aus der
              <a href="https://github.com/ffnord/ffmap-d3">damaligen Karte</a>
              zu ermitteln.
            </dd>
            <dd>
              Eine gewisse Zeit lang war sogar noch ein Twitter-Modul
              mit rangeflanscht.
              <div>
                <small>Die monotonen Meldungen waren aber irgendwann zu viel...</small>
              </div>
              <small>
                <code>Status: online: 42 (23 Router, 19 Teilnehmer) 23:42 17.08.2014</code>
              </small>
            </dd>
            <dd>
              <div>Irgendwann hatten wir mehrere Communities auf den selben Servern.</div>
              <small>Und damit auch mehrere API Files.</small>
            </dd>
            <dd>
              <div>Das Script ließ sich nicht elegant auf mehrere Communities erweitern.</div>
              <small>Falsche Annahmen, fest einprogrammierter Text, Spaghetti-Code...</small>
            </dd>
            <dd>Also zurück ans Reißbrett, der Rewrite wird geplant:</dd>
            <dt>Features</dt>
            <dd>
              <div>
                Genau wie der Vorgänger kann
                FFFlash
                nur bestehende Felder ändern.
              </div>
            </dd>
            <dd>
              <div>
                Es existiert keinerlei Konfiguration.
                Alles wird beim Start auf der Kommandozeile mitgegeben.
              </div>
              <small>
                Läuft sowieso in der Crontab, oder man schreibt sich ein Shell-Script
                passend zu seinem Setup.
              </small>
            </dd>
            <dd>
              <div>
                Dazu lassen sich noch sogenannte
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                Sidecars mit einflechten.
              </div>
              <div>
                Dies sind kleine
                <code>JSON</code>
                oder
                <code>YAML</code>
                Files, die die Werte in der Ausgabe ersetzen.
              </div>
              <small>
                Sie enthalten entweder nur einen einzigen Wert, oder größere
                Strukturen bis hoch zum kompleten API File.
              </small>
            </dd>
            <dd>
              <div>
                Infos zu den Nodes kommen diesmal direkt aus dem
                <a href="https://github.com/ffnord/ffmap-backend">Backend</a>
                und nicht mehr von der Karte.
              </div>
              <small>Zugriff entweder direkt auf die Datei, oder per HTTP.</small>
            </dd>
            <dd>
              <div>
                Man ist sowieso am Zahlen auswerten, warum nicht noch einen Highscore
                vergeben?
                <span>&amp;#x261e;&amp;#xfe0e;</span>
                Rankfile.
              </div>
              <div>
                Auf Basis dessen
                <span>
                  könnte man mal
                  &amp;trade;
                </span>
                weitere lustige Anwendungen entwickeln.
              </div>
              <small>Lange dabei sein, hohe Uptime, und viele Clients bringt gut Punkte.</small>
            </dd>
            <dt>Links</dt>
            <dd>
              <div>
                <strong>Repository</strong>
              </div>
              <div>
                <a href="https://github.com/spookey/ffflash">ffflash.git</a>
              </div>
            </dd>
            <dd>
              Sogar Tests existieren, auf Travis-CI kann man nachsehen,
              ob noch alles passt.
            </dd>
            <dd>
              Es wurde an nichts gespart, sogar eine
              <a href="http://ffflash.readthedocs.io/en/latest">Dokumentation</a>
              ist am Start.
            </dd>
          </dl>
          <div>
            Es gibt immer noch Communities die
            FFFlash
            einsetzen..
          </div>
          <small>
            Obwohl ich schon länger nicht mehr Freifunke..
            <span>
              Cool
              &amp;#x2603;&amp;#xfe0e;
            </span>
          </small>
          <div class="foot">
            <div>FreifunkAPI Files aktuell halten.</div>
            <div>
              <dl>
                <dt>Erstellt</dt>
                <dd>30.04.2014 - 13:24:39</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Editiert</dt>
                <dd>19.10.2015 - 18:36:52</dd>
              </dl>
            </div>
            <div>
              <dl>
                <dt>Tags</dt>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Freifunk" title="Freifunk">Freifunk</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Projekt" title="Projekt">Projekt</a>
                </dd>
                <dd>
                  <a href="https://www.der-beweis.de/tags.html#Python" title="Python">Python</a>
                </dd>
              </dl>
            </div>
          </div>
        </div>
      </div>
    </content>
  </entry>
</feed>
