THEReapMan.net

Ich werde diese Schallplatte nicht kaufen, sie ist zerkratzt.!

IPv6 in der Praxis – Eine kleine Analyse

IPv6, der Nachfolger von IPv4 kommt ja nun langsam in die puschen.
Events wie der IPv6-Launchday bringen immer mehr Contentanbieter dazu ihre Dienste auch per IPv6 anzubieten.

Wer Hintergrundinfos zu IPv6 braucht dem kann ich nur CRE Nr. 197 empfehlen http://cre.fm/cre197 Tim und Clemens erklären euch dort ausführlich das Warum und das Wie.

Nun habe ich seit geraumer Zeit zuhause ein voll funktionsfähiges IPv6 Netz laufen das sich über einen SiXXs Tunnel nach aussen verbindet.
Das Netz besteht aus ner reihe Windows 7 Kisten und paar Linux Dosen. Dazu kommt der normale Zoo an Android und iOS devices den man so mit am Start hat.

Nun messe ich seit einiger Zeit auch den Traffic der durch meine Router Schnittstellen rauscht mit vnstat und habe heute mal geschaut wie viel IPv6 traffic nun wirklich in die weite Welt hinaus geht.

Da bis jetzt der September der einzige vollständig aufgezeichnete Monat ist beziehe ich mich hauptsächlich auf diese Daten.

Und da staut man nicht schlecht. insgesamt gingen 77,78 GB (rx und tx) durch meine ADSL Strippe.
Davon waren insgesamt 15,04 GB IPv6-only traffic durch den Sixxs tunnel – immerhin knapp 19%.

Mal schau wo das noch hingeht. Ohne IPv4 gehts zwar immer noch nicht aber immerhin geht schon einiges.

Markus

EIBd für Windows: Download win32 build

Nach der grossen Nachfrage im KNX User Forum (www.knx-user-forum.de) gibt’s nun hier die fertig kompillierte Version.

EIBD für Windows (basiert auf eibd v0.0.5) / Lizensiert unter GPLv2
Download: eibd für win32

Quellcodes
Source: eibd
Source: cygwin

Einfach entpacken und fertig. Ein beispielaufruf finded ihr in der starteibd.cmd (verbindet mit einer KNX IP-Schnittstelle auf IP 192.168.10.80)

Quickie: Projekte von einem Netzlaufwerk starten mit Visual Studio 2010

Visual Studio 2010 verhindert in seiner default einstellung das debuggen von Code der auf einem Netzlaufwerk liegt.
Man bekommt beim versuch eine Security Exception beim laden von DLL’s.

Um Visual Studio 2010 dazu zu bewegen auch vom Networkshare zu debuggen muss in die datei devenc.exe.config eine Zeile eingefügt werden.

Die Datei befindet sich im VS installationsordner unter “Common7\IDE
Dort muss in den Bereich

<runtime>

die Zeile

<loadFromRemoteSources enabled="true"/>

eingefügt werden.
Danach lässt Visual Studio auch das debuggen vom Netzwerk zu.

eibd für Windows kompilieren

Eibd ist ein Interface programm zum KNX/EIB-Installationsbus zur Gebäudesteuerung. Es wurde als open-source Software entwickelt und läuft hauptsächlich auf Linux/Unix Systemen.
Ich benötigte allerdings eine auf Windows lauffähige Version für mein openHome Projekt.

Die Lösung liegt in der Software Cygwin. Damit wird eine Unix kompatible Umgebung unter Windows abgebildet in der man mit ein paar kniffen auch den eibd komilieren kann.
Als Ergebnis bekommt man dann Windows Binaries  die man mit einer handvoll Cygwin librarys auf jedem Windows Rechner starten kann.

Aber jetzt gehts zum kompilieren:
Cygwin Paketmanager

Cygwin von Cygwin.com herunterladen und installieren

Während der Installation wird ein Paketmanager angezeigt mit dem man weitere *nix tool dazuinstallieren kann. Wir brauchen folgende:

  • gcc-g++
  • bison
  • flex
  • libxml2-devel
  • make
  • gettext-devel
  • w32api
  • libxslt
  • libxslt-devel
  • libargp

Eibd und Abhängigkeiten herunterladen

Der eibd ist Bestandteil des sog. BCU-SDK’s von Martin Kögler.
Das BCU-SDK bekommt man hier (Die BCD SDK Sources der aktuellen Version herunterladen)
Dann wird noch eine spezielle Version von GNU pth benötigt: pthsem ebenfalls von Martin Kögler.
Alles in einem ordner entpacken so das bcusdk und pthsem eigene Verzeichnisse haben.

Kompilieren

Cygwin starten und das Verzeichniss mit den Quellen mounten:

Im Beispiel liegen die Quellen im Windowspfad d:\eibd
Im Cygwin beachten das Windowspfade einen Slash statt eines Backslashes haben!

Zuerst muss pthsem kompiliert werden mit dem sogenannten Unix-Dreisatz:

  • Ins pthsem Verzeichniss wechseln mit
    cd pthsem-2.0.8
  • Kompilieren und installieren mit:
    ./configure && make && make install

Wenn pthsem ohne Fehlermeldung durchgelaufen ist können wir uns an den eibd machen.

  • Ins bcusdk Verzeichniss wechseln
  • das bcusdk konfigurieren
    Da wir nur den eibd haben wollen und nicht das ganze SDK folgenden Befehl im cygwin absetzen:
    ./configure –enable-onlyeibd –enable-eibnetip –enable-eibnetiptunnel –enable-eibnetipserver –enable-usb
    Damit wird ein eibd erstellt der KNX-IP-Schnittstellen, KNX-IP-Routern und USB-Schnittstellen unterstüzt und gleichzeitig als KNXnet/IP Schnittstelle auftreten kann.
  • Nach der konfiguration machen wir nur noch ein
    make
    Wenn make sauber durchgelaufen ist haben wir einen unter Windows lauffähigen eibd erzeugt!

Zusammentragen der Binarys

Als letzten Schritt müssen wir noch die binarys finden um den eibd ohne laufendes cygwin auszuführen

  1. die eibd.exe liegt unter bcusdk-0.0.5\eibd\server\.libs
  2. dann brauchen wir noch folgende Dateien aus dem Cygwin Verzeichnis ( c:\cygwin\bin )
    • cygargp-0.dll
    • cyggcc_s-1.dll
    • cygstdc++-6.dll
    • cygwin1.dll
Diese Dateien alle in ein eigenes Verzeichnis kopieren und fertig.
Das Verzeichniss kann man nun auf jeden beliebigen Windows Rechner kopieren und dort eibd ganz normal ausführen wie auf einem Linux System.

Freihand zeichnen im Browser mit HTML5 und JavaScript

Mit HTML5 hält das <canvas> Element einzug in die Webentwicklung.
Dies dient dem dynamischen Zeichnen von Objekten wie Linien oder Rechtecken direkt im Browser per JavaScript.

Um nun einen Bereich auf einer Webseite zu erstellen mit dem man mit der Maus bzw. mit dem Finger (bei IOS oder Androidgeräten) freihand zeichnen kann, geht man wie folgt vor

 1. Schritt: Canvas in HTML

Zunächst legt man in seinem HTML Code ein Canvas Element fest:

<html>
    <head></head>
    <body>
       <canvas id="myCanvas" width="300" height="200">
        Fallback content, in case the browser does not support Canvas.
        </canvas>
    </body>
</html>

Damit wird ein 300×200 Pixel grosser Canvas bereich angelegt. Über die ID finden wir das Element später im JavaScript wieder.

2. Schritt: Canvas initialisieren

Zunächst muss das <canvas> Element initialisiert werden

function initCanvas() {
    // Get a reference to the element.
    canvas = document.getElementById('myCanvas');
    // Always check for properties and methods, to make sure your code doesn't break
    // in other browsers.
    if (canvas && canvas.getContext) {
         // Get the 2d context.
         // Remember: you can only initialize one context per element.
         context = canvas.getContext('2d');
         if (context) {
            context.lineCap = "round";
            //Fill it with white background
            context.save();
            context.fillStyle = '#fff';
            context.fillRect(0, 0, context.canvas.width, context.canvas.height);
            context.restore();
            context.lineWidth = 5;
            context.strokeStyle = "#000";

            //enable mouse events
            canvas.onmousedown = enableDraw;
            canvas.onmouseup = disableDraw;

            //touch events
            canvas.addEventListener('touchstart', enableDraw, false);
            canvas.addEventListener('touchend', disableDraw, false);
            canvas.addEventListener('touchmove', draw, false);
       }
    }
}
  • Zeile 13-18: Einstellen der Linienbreite und -farbe sowie das füllen des canvas mit einem weissen hintergrund.
  • Zeile 21+22: Binden der Mausevents an das canvas für normale Browser
  • Zeile 25-27: Binden der Touchevents an das canvas für Touchgeräte (IOS/Android)

3. Schritt: Zeichenfunktionen

 

         function draw(e) {
            e.preventDefault();

            if (e.targetTouches)
                event = e.targetTouches[0];
            else
                event = e;
            context.lineTo(event.pageX, event.pageY);
            context.stroke();
        }

        function enableDraw(e) {
            e.preventDefault();

            if (e.targetTouches)
                event = e.targetTouches[0];
            else
                event = e;

            context.beginPath();
            context.moveTo(event.pageX, event.pageY);
            context.lineTo(event.pageX + 1, event.pageY + 1);
            canvas.onmousemove = draw;
        }

        function disableDraw(e) {
            e.preventDefault();

            if (e.targetTouches)
                event = e.targetTouches[0];
            else
                event = e;

            context.lineTo(event.pageX, event.pageY);
            context.stroke();
            context.closePath();
            canvas.onmousemove = null;
        }

enableDraw() und disableDraw() starten bzw. beenden das zeichnen beim festhalten der maustaste bzw. beim loslassen.

draw() zeichnet dann die linie beim gedrückhalten der maustaste bzw. beim fahren mit dem finger über das canvas.

4. Probleme

Das Beispiel hat noch kleinere Macken wenn es um das zeichnen auf schwächeren Touch devices geht. wenn man dabei zu schnell mit dem finger über das canvas wischt werden nicht alle events verarbeitet, wodurch die Zeichnung dann kantig wird (vor allem wenn man kurven oder kreise zeichnet).

5. Demo

Hier geht’s zur Demo