Donnerstag, 3. Dezember 2015

November 2015 - Android


Allgemeines

Android ist ein Betriebssystem für mobile Geräte wie Smartphones oder Tablets. Das Betriebssystem wird von der Open Handset Alliance, welche von Google gegründet wurde, entwickelt. Bei Android handelt es sich um eine freie Software, die quelloffen programmiert wird (GPL-Lizenz). Als Basis verwendet Android den Linux-Kernel, ist jedoch keine klassische Linux-Distribution. Grundeigenschaften wie sie bei unixoiden Systemen vorkommen, wurden bei Android teilweise stark verändert. Linux ist ein monolithischer Kernel, das bedeutet, dass Treiber für Hardwarekomponenten und weitere Funktionen direkt im Kernel eingebaut sind.
Das erste Gerät mit Android als Betriebssystem kam am 22. Oktober 2008 auf den Markt. Die aktuellste Version ist "Android 6.0 Marshmallow".
Auf vielen Geräten, auf denen Android läuft, ist ein herstellerspezifischer Launcher installiert. Das bedeutet, dass die grafische Benutzeroberfläche teilweise stark angepasst wurde. Pure Android-Geräte sind zum Beispiel die Google-Nexus-Geräte. Auf ihnen sind keine speziellen Launcher installiert, es läuft das sogenannte "Vanilla Android".


grafische Benutzeroberfläche
(Vanilla-Android)

Bedienung

Android wird grundsätzlich über drei Tasten gesteuert: Die Zurück-Taste, womit man zur vorherigen Seite (Aktivität) gelangt, die Home-Taste, mit deren Hilfe man direkt auf den Startbildschirm gelangt, und diw Multitasking-Taste, die alle geöffneten Fenster anzeigt, zwischen denen man wechseln bzw. welche man schliessen kann. 


Zurück / Home /Multitasking



Je nach verwendetem Launcher und verwendeter Android-Version sehen die Tasten anders aus, sind jedoch bei allen Geräten etwa gleich angeordnet (bei Samsung Geräten sind die Zurück- und die Multitasking-Taste vertauscht). Bei älteren Geräten ist anstelle der Multitasking-Taste eine Options-Taste vorzufinden, die Multitasking-Funktion kann durch ein Gedrückthalten der Home-Taste erreicht werden.
Des Weiteren unterscheidet man zwischen Soft- und Hardwaretasten. Softwaretasten befinden sich auf dem Display und können bei Bedarf ausgeblendet werden. Hardwaretasten hingegen befinden sich als physische Knöpfe auf dem Gerät selbst (Bsp. Samsung).



Der Startbildschirm dient vor allem dazu, Applikationen zu starten. Deshalb die Bezeichnung "Launcher" (engl. launch = starten). Er besteht meist aus mehreren Seiten, auf denen sich die Anwendungen befinden können.


Startbildschirm

Am oberen Ende des Bildschirms, befindet sich die Statusleiste, hier sind der Akkustatus, die aktuelle Uhrzeit, der Empfang und, falls eingeschaltet, Dinge wie Bluetooth, WLAN usw. ersichtlich. Ebenfalls werden hier Benachrichtigungen angezeigt (z.B. SMS, verpasste Anrufe, WhatsApp etc.).


Statusleiste
Am unteren Rand des Startbildschirms ist das sogenannte App-Dock, Hier können vier Anwendungen platziert werden, welche auf allen Seiten des Startbildschirms immer angezeigt werden. Bei Android müssen sich nicht alle Anwendungen zwingend auf dem Startbildschirm befinden, sondern sind in einer App-Liste zu finden, von wo aus sie dann nach Bedarf auf den Startbildschirm gezogen werden können. Die App-Liste kann aufgerufen werden, indem man im App-Dock auf den  mittleren Button zwischen den Applikationen klickt.



App-Dock




Durch ein Ziehen nach unten von der Statusleiste aus öffnen sich die Schnelleinstellungen, hier können Einstellungen wie Helligkeit, Mobile-Daten, Bildschirmrotation, Stummschalten, Bluetooth, Flugmodus usw. vorgenommen werden, je nach Hersteller unterscheiden sich die Grösse und die Einstellungsmöglichkeiten geringfügig.


Schnelleinstellungen



Die Anpassbarkeit spielt auch beim Startbildschirm eine grosse Rolle. So ist es möglich, sogenannte "Widgets" auf dem Startbildschirm zu platzieren. Dabei handelt es sich um eine meist etwas grössere Anzeige von allgemeinen Daten, beispielsweise Wetter, Uhrzeit, Termine, Taschenrechner, Musik-Player, E-Mail usw.
Weiterhin können vom Benutzer installierte Anwendungen (z.B. ein Browser) als Standardanwendungen für Aktionen gesetzt werden. Auch ist es möglich, andere Teile des Systems zu ersetzten, beispielsweise die Tastatur oder den vom Hersteller installierten Launcher für den Startbildschirm.


Startbildschirm mit Uhr-Widget

Startbildschirm mit
aufgeklapptem Wetter-Widget

























Versionen

Die aktuellste Version ist momentan "Android 6.0 Marshmallow".
Die Android-Versionen enthalten ab Version 1.5 neben der Versionsnummer noch jeweils den Namen einer Süssigkeit. Anders als bei iOS entscheidet der jeweilige Gerätehersteller, für welches Gerät welche Version freigegeben wird. Es kann also sein, das auch für noch nicht so alte Geräte das Update auf die jeweils neuste Version komplett verweigert wird. Ausserdem geht es meist einige Monate, bis der Gerätehersteller die aktuellste Android-Version für seine Geräte freigibt (da, unter anderem, der herstellerspezifische-Launcher auf die neuste Android-Version angepasst werden muss). Seit der Version "5.0 Lollipop" ist es erstmals möglich, mehrere Benutzer auf einem Android Gerät zu haben (ähnlich wie bei einem Windows-PC).



Applikationen

Die Apps werden üblicherweise aus dem Google Play Store bezogen. Die angebotene Software wird von Google zuerst überprüft. Alternativ kann unter Android die .apk ("Android Package) Datei einer beliebigen App auf das Gerät geladen und dann dort direkt installiert werden.


Dateiverwaltung

Auf einem purem "Vanilla Android" gibt es keinen Dateimanager. Das Dateisystem eines Android-Geräts kann aber entweder mit einem PC oder einem aus dem Google Play Store heruntergeladenen Dateimanager verwaltet werden.



Entwicklungsumgebung

Anwendungen für Android werden mit dem Java-SDK entwickelt (zusätzlich wird das Android SDK benötigt). Dabei wird zuerst der in Java geschriebene Quellcode mit einem normalen Java-Compiler übersetzt und dann von einem Cross-Assembler für das Android-Betriebssystem angepasst. Die fertige Anwendung wird in eine .apk Datei verpackt und kann anschliessend über den Google Play Store veröffentlicht werden.






Sonntag, 1. November 2015

Oktober 2015 - PHP

In der Schule im "Modul 133 - Web Applikation realisieren" habe ich, nach JavaScript und  HTML5, nun auch mit PHP zu tun.


PHP ist eine serverseitig interpretierte Skriptsprache, clientseitig gibt es also keine weiteren Voraussetzungen als einen Webbrowser. Die Abkürzung PHP steht für "PHP: Hypertext Preprocessor". PHP wird hauptsächlich für dynamische Websites sowie Webanwendungen in Kombination mit einer Datenbank verwendet (z.B. User Login). Die aktuelle Version ist die 5.6.15 und die Syntax ist an C angelehnt. Zudem ist PHP plattformunabhängig.


Funktionsweise

PHP-Code wird serverseitig verarbeitet, das heisst, der Quelltext wird nicht direkt an den Webbrowser (Client) gesendet, sondern an einen Interpreter auf dem Webserver. Die Ausgabe des interpretierten PHP-Codes wird dann erst an den Client gesendet. Das ist meistens ein HTML-Dokument, kann aber auch einem anderen Dateityp angehören.
Der Webserver muss einen Dienst installiert haben, auf dem PHP ausgeführt werden kann. Häufig wird hier auf Apache oder auf den IIS zurückgegriffen. In Kombination mit Apache wird dann meistens MySQL als Datenbanksystem verwendet. Zum Testen und Entwickeln eignet sich am besten XAMPP, welches wir auch in der Schule benutzten, da bei dieser Anwendung schon alles Notwendige vorkonfiguriert ist und man nur noch die einzelnen Dienste starten muss.


Funktionsweise













Da PHP-Code, welcher normalerweise in einer Webserver-Umgebung läuft, immer zuerst durch den Interpreter des Webservers interpretiert werden muss, wird die Reaktionsgeschwindigkeit des Servers gesenkt. Zudem wird ein PHP-Skript vom Interpreter bei jedem Aufruf erneut abgearbeitet. Das bedeutet, jede PHP-Seite belastet den Webserver. Um dem entgegen zu wirken, gibt es verschiedene sogenannte PHP-Beschleuniger. Das sind Programme, welche die Ausführungsgeschwindigkeit erhöhen sollen. Da ein PHP-Skript zuerst in einen Bytecode übersetzt wird bevor er ausgeführt wird, ist es auch notwendig, dass das Skript bei jedem Aufruf in einen Bytecode übersetzt wird. Der PHP-Beschleuniger zwischenspeichert nun den generierten Bytecode, so dass er beim nächsten Aufruf auf diesen zurückgreifen kann und der Bytecode nicht erneut generiert werden muss. Ab PHP Version 5.5 ist ein solcher PHP-Beschleuniger bereits integriert.




Praktische Verwendung

PHP-Skripte werden in .php-Dateien gespeichert. Diese enthalten PHP-Code, können aber, was oftmals der Fall ist, auch HTML-Code enthalten. Aufgebaut wird die Datei wie eine normale .html-Datei. Der PHP-Code muss allerdings zwischen "<?php" und  "?>" stehen. Der Interpreter führt dann nur den Code zwischen "<?php" und  "?>" aus, der Rest des Codes wird dann als HTML (oder anderen Skriptsprachen wie JavaScript) interpretiert.
Am Schluss jedes PHP-Befehls steht ein Semikolon.

Beispiel eines PHP-Skripts mit HTML-Code:

<!DOCTYPE HTML>
<html>
    <head>
        <title>Beispiel</title>
    </head>
    <body>
        <?php
            echo 'Hallo Welt!';
        ?>
    </body>
</html>
Mit dem "echo"-Befehl wird in diesem Beispiel der Text "Hallo Welt" im Browser ausgegeben


Variablen

Auch in PHP gibt es Variablen. Die Variablen sind jedoch nicht, wie in vielen anderen Sprachen, streng typisiert. Es gibt zwar auch in PHP Datentypen, diese müssen aber nicht bei der Variablendeklaration angegeben werden. Variablen werden definiert, indem vor dem Namen der Variable ein $-Zeichen gesetzt wird:

$name = "Max";  
    
$alter = 30;   
Wenn der Inhalt der Variable ein String ist, muss dieser in Anführungszeichen gesetzt werden, handelt es sich aber um eine Zahl, wird diese einfach so angegeben.

Den Inhalt der Variable kann man dann zum Beispiel so ausgeben:

echo "Name: " . $name . "\nAlter: " . $alter;  

Die Ausgabe sieht dann folgendermassen aus:

       Name: Max       
       Alter: 30


Das "." dient in PHP dazu, einzelne Strings miteinander zu verbinden. 
Wird ein "\n" gemacht, wird an dieser Stelle ein Zeilenumbruch gemacht.
In PHP ist auch folgende Darstellung im Code möglich:

echo "Name: $name\nAlter: $alter";  

Dies ergibt die genau gleiche Ausgabe im Browser.

In PHP muss aber zwischen einfachen Anführungszeichen (') und doppelten Anführungszeichen (") unterschieden werden. Der Inhalt in doppelten Anführungszeichen wird von PHP ausgeführt, während der Inhalt in einfachen Anführungszeichen vom Browser genau so ausgegeben wird, wie er im Code steht.

echo 'Name: $name\nAlter: $alter';  

Im Browser würde dann folgendes ausgegeben werden:

                Name: $name\nAlter: $alter


Vordefinierte Variablen

In PHP gibt es eine Reihe vordefinierter Variablen. Man erkennt sie an dem "_" nach dem $-Zeichen und anhand des Variablennamens, der immer komplett grossgeschrieben ist.

Beispiele:

$_SERVER['PHP_SELF']
Dateiname des ausgeführten PHP-Skripts.

$_SERVER['REMOTE_ADDR']
IP-Adresse des Computers, der die Seite aufgerufen hat.

$_SERVER["HTTP_HOST"]
Domainname

$_SERVER["REDIRECT_URL"]
Die ursprünglich aufgerufene URI.


Verzweigung

Auch in PHP gibt es die Möglichkeit der Verzweigung mittels "if/else"-Bedingung.
Dazu stehen einem unter anderem folgende Operatoren zur Verfügung:

Operator Bedeutung
== gleich
=== gleich (auch vom Variablentyp - String, Boolean, Integer)
!= ungleich
<> ungleich, ist identisch mit !=
< kleiner
<= kleiner oder gleich
> größer
>= größer oder gleich

 Beispiel:

if ( $name == "Max" )
{
    echo "Dies ist Max";
}
else
{
    echo "Dies ist sonst jemand...";
}

Sonntag, 27. September 2015

September 2015 - Windows 10 & Windows Holographic

Windows 10


Microsoft Windows 10 ist das momentan neuste Betriebssystem von Microsoft.
Es wurde am 29. Juli 2015 veröffentlicht und ist der Nachfolger von Windows 8.1. Windows 10 wurde zusammen mit dem Windows Server 2016 (welcher noch nicht erschienen ist) am 30 September 2014 vorgestellt und seit dem 1. Oktober 2014 gab es die "Technical Preview" (Beta-Version) zum Testen. Des Weiteren wird das neue Betriebssystem kostenlos als Upgrade für einen begrenzten Zeitraum angeboten, sofern man zuvor ein Windows 7 oder Windows 8 Betriebssystem hatte.


Die wichtigsten Neuerungen

Starmenü

Eines der wohl wichtigsten Neuerungen gegenüber Windows 8(.1) ist die Rückkehr des Startmenüs.
In dieser Version sind auf der linken Seite wieder  die häufig benutzten Programme und im rechten Bereich lassen sich nun Kacheln hinzufügen. Auf diese Art ist die Funktion des Startbildschirms von Windows 8.1 in das neue Starmenü integriert.


Startmenü Windows 8.1

Startmenü Windows 10


Lauffähigkeit

Windows 10 ist auf vielen verschiedenen Geräten lauffähig. Neben den Desktop-Computern und Notebooks gibt es das Betriebssystem auch für Tabletcomputer, Smartphones, Embedded Devices, Convertibles, das Raspberry Pi 2 und die Xbox One.
Wobei Windows 10 je nach Gerät nur über eingeschränkte Funktionen verfügt.



Webbrowser
Microsoft Edge

In Windows 10 wurde der bis dahin standardmäßige Webbrowser "Internet Explorer" abgelöst und durch "Microsoft Edge" ersetzt. 
Eine neue Funktion des Webbrowsers ist, dass Websites nun mit Notizen versehen werden können und das so entstandene Dokument, ähnlich einem Screenshot, mit anderen Leuten geteilt werden kann. Ein "Lesemodus" kann störende Elemente auf der Seite ausblenden, um somit einen besseren Lesefluss zu erhalten. Zudem gibt es einen Lesezeichen-Service, mit dem gesetzte Lesezeichen auf mehreren Geräten verfügbar gemacht werden sollen.
Microsoft Edge ist, wie schon sein Vorgänger, fest in das Betriebssystem integriert, so dass der Webbrowser das in Windows 10 integrierte Adobe Flash-Plug-in nutzt und auch PDF-Dokumente ohne zusätzliche Tools anzeigen kann. Auch werden Updates wieder über die Windows-Update-Funktion bereitgestellt.
Jedoch erhielt Microsoft Edge einige Kritik wegen nicht richtig funktionierenden oder fehlenden Funktionen.


Microsoft Edge




Multidesktop

Ein weiteres neues Feature in Windows 10 ist "Task View". Mit diesem Feature können mehrere virtuelle Desktops aktiviert werden, zwischen denen der Benutzer beliebig wechseln kann. Man verfügt so also praktisch über mehrere Desktop Oberflächen. Eine maximale Anzahl an virtuellen Desktops gibt es eigentlich nicht, jedoch ist man durch die Bildschirmauflösung eingeschränkt. Es ist auch möglich, mehrere virtuelle Desktops zu einem zusammenzufügen, jedoch lassen sich keine geöffneten Fenster von einem Desktop in den anderen verschieben.


Task View



Apps

Seit Windows 10 gibt es nun keine unterschiedlichen Versionen des Windows-Stores mehr (früher zwischen Windows Phone und anderen Windows Versionen aufgeteilt), sondern einen einheitlichen Store für alle Versionen. Apps, die vorher nur bildschirmfüllend verwendet werden konnten, können nun auch in normalen Fenstern geöffnet werden.



Release-Modell

Windows 10 soll die letzte Windows-Version sein. Zukünftig sollen keine neuen Versionen mehr veröffentlicht werden, sondern immer nur Windows 10 aktualisiert werden. Das bedeutet, dass PCs mit Windows 10 nicht nur Fehlerbehebungen, sondern auch komplett neue Funktionen erhalten sollen.



Systemanforderungen


Folgende Mindestanforderungen sind von der Hardware erforderlich, um Windows 10 zu verwenden:

















Windows Holographic

Windows Holographic ist eine von Microsoft entwickelte Plattform für die Entwicklung von Augmented-reality-Anwendungen. In Verbindung mit Windows 10 soll Windows Holographic im Herbst 2015 erscheinen. So soll es möglich sein, Anwendungen unter Windows 10 mit Möglichkeiten der Augmented-reality zu ergänzen.
Microsoft hat hierzu eine eigene Datenbrille - die HoloLens - entwickelt. Es wird jedoch auch Hardware anderer Hersteller unterstützt, beispielsweise die Oculus Rift.



Microsoft HoloLens

Die HoloLens ist, wie schon erwähnt, eine Datenbrille, die von Microsoft entwickelt wurde. Das Gerät besitzt zwei durchsichtige Displays mit hoher Auflösung, die von Microsoft als "Linsen" bezeichnet werden. Des Weiteren verfügt die Brille über "3D-Sound", wodurch der Träger die Richtung von Tönen wahrnehmen kann. Die Brille hat zudem mehrere eingebaute Kameras, mit denen es auch möglich sein soll, die Umgebung abzuscannen und daraus eine dreidimensionale Ebene zu erzeugen.
Die HoloLens kann eigenständig verwendet werden, das bedeutet, sie funktioniert auch ohne Computer oder Smartphone. Sie wird über Gesten, Sprache, Kopf- und Augenbewegungen sowie einige kleine Knöpfe bedient.
Bislang konnten nur sehr wenige Personen die HoloLens testen, es gibt jedoch schon Kritik, dass das Sichtfeld ziemlich eingeschränkt sei.




Microsoft HoloLens


















Dienstag, 8. September 2015

August 2015 - Java

Im neuen Semester behandeln wir in der Schule das Modul 226 "Objektorientiert entwerfen und implementieren". Momentan geht es in diesem Modul um die Java Programmierung. Als IDE verwenden wir Eclipse.


Java

Java ist eine objektorientierte Programmiersprache, die 1995 von Sun Microsystems entwickelt wurde. 2010 wurde die Firma von Oracle aufgekauft. Die Java Technologie besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Programmen und der Laufzeitumgebung (JRE), für die Ausführung der Programme. JRE umfasst sowohl die Bibliotheken als auch die virtuelle Maschine (JVM).  Zweck der Virtualisierung ist die Plattformunabhängigkeit. Das erstellte Programm soll so ohne weitere Änderungen auf jeder unterstützten Rechnerarchitektur laufen können. Von Oracle selbst unterstützte Betriebssysteme sind: Windows, OS X, Linux und Solaris. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform zertifizieren.
Beim Ausführungsvorgang kann die JVM den Code interpretieren und ihn bei Bedarf kompilieren und auch optimieren.
Java gehört zu den populärsten Programmiersprachen nach C.

Grundkonzepte

Die hauptsächlichen Ziele beim Entwurf von Java waren:
- einfache, objektorientierte Programmiersprache
- robust und sicher
- architekturneutral und portabel
- sehr leistungsfähig
- interpretierbar und dynamisch


Syntax

Die Syntax von Java ist leicht verständlich und ist in der "Java Language Specification" von Oracle dokumentiert.

Beispiel eines einfachen "Hallo Welt"-Programms, das den Text auf der Konsole ausgibt:

 public class HalloWelt {
     public static void main(String[] args) {
         System.out.println("Hallo Welt!");
     }
 }

Datentypen

In Java gibt es zwei Datentyparten: - primitive Datentypen
                                                    - Referenzen


Primitive Datentypen:
Es gibt acht verschiedene primitive Datentypen. Sie unterscheiden sich in Grösse und Eigenschaften. Alle diese Datentypen verfügen über eine fest definierte Grösse, die für alle Plattformen gleich ist.










Typumwandlung:

Alle numerischen Datentypen lassen sich verlustfrei in den nächstgrösseren Datentyp umrechnen. So kann zum Beispiel ein "int" ohne speziellen Operator in ein "long" umgewandelt werden:

        int   i = 255;
        long l = i;



Umgekehrt funktioniert dies jedoch nicht einfach so. Um beispielsweise einen "long" in einen "int" umwandeln zu können, benötigt man den Typumwandlungsoperator. Dabei können jedoch auch Informationen verloren gehen:

        long l = 12345678901;
        int   i =  (int) l;


"boolean" kann in keinen anderen Datentypen umgewandelt werden. Datentypen vom Typ "char" können in jeden ganzzahligen Typ ab "int" umgewandelt werden.


Referenzen:
Alle Objekte und Felder werden über eine Adresse referenziert. In Java ist der Objektzugriff über Referenzen implementiert. In der Sprachdefinition werden sie als "Reference Values" bezeichnet. Das soll verdeutlichen, dass sie durch "Call-by-Value" übergeben werden.

Beispiel:

Object a = new Object() 

Ein neues Objekt wird erstellt, auf das die Referenz "a" referenziert.

Object b = a;            

Eine neue Referenz "b" wird erstellt und referenziert auf dasselbe Objekt wie "a".


Methoden

Das eigentliche Verhalten von Objekten wird in Methoden definiert. Die Methodensignatur besteht aus ihrem Namen und den Typen ihrer Parameter. Zusätzlich hat jede Methode einen bestimmten Rückgabetyp oder es wird "void" verwendet, wenn sie nichts zurückgeben soll.


Beispiel einer Methode:

 public static double summe(double a, double b)
    {
        return a + b;
    }


"a" und "b" sind hier die Parameter, die übergeben werden. Die Methode addiert die übergebenen Parameter und gibt das Resultat als "double" zurück.


Arrays

In Java ist ein Array ein eigenständiges Objekt. Dieses kann Elemente eines bei der Deklaration festgelegten Datentyps aufnehmen. Dazu muss die Länge des Arrays angegeben werden, die beschreibt, wie viele Elemente das Feld besitzen kann. Die Grösse eines Arrays ist fix und kann nach der Instanziierung nicht mehr geändert werden. In Java gibt es eigentlich keine mehrdimensionalen Arrays, es ist jedoch möglich, mehrdimensionale Arrays zu erstellen, indem man Arrays in Arrays verschachtelt.

Beispiel zur Deklaration:

int[] array = new int[3];

Auf der linken Seite des "=" wird die Objektreferenz deklariert und auf der rechten Seite wird das Feld mit der angegebenen Grösse initialisiert.

Um das Array nun mit Elementen zu füllen, macht man folgendes:

int[] array = new int[3];
array[0]=1;
array[1]=2;
array[2]=3;


Die Werte in den eckigen Klammern sind die jeweiligen Indexe. Der Index muss angegeben werden, um auf den gewünschten Wert zugreifen zu können.



Verzweigung

Wie in vielen anderen Sprachen gibt es auch in Java eine if/else-Verzweigung. Die Bedingung muss in Java ein boolescher Wert (true oder false) sein, was bei anderen Sprachen wie etwa C nicht unbedingt der Fall sein muss. Des Weiteren gibt es in Java das Schlüsselwort "then" nicht. Das Schlüsselwort "else" ist, wie in den meisten Programmiersprachen üblich, nur optional.

Syntax:


if (<Bedingung>)
    <Anweisung>;
else
    <Anweisung>;


Eine weitere Möglichkeit, eine Verzweigung in ein Programm einzubauen, ist die Fallunterscheidung mit "switch" und "case". Die Syntax ist folgende:

switch (''Ausdruck'') {
   case ''Konstante1'': ''Anweisung1''; break;
   case ''Konstante2'': ''Anweisung2''; break;
   default: ''Anweisung3'';
}

Trifft eines der "case" zu, wird die Anweisung darin ausgeführt. Danach folgt ein "break", da sonst der weitere Code auch noch ausgeführt werden würde.
"default" wird ausgeführt, falls keines der "case" zutreffen sollte.





Montag, 27. Juli 2015

Juli 2015 - Sortierverfahren

Im 4. Semester haben wir im Modul 318 "Analysieren und objektbasiert programmieren mit
Komponenten" verschiedene Sortierverfahren kennengelernt und im VB.NET in einem Projekt, das bewertet wurde, umgesetzt. Daher werde ich diesen Monat über die mir bekannten Sortierverfahren schreiben und das in der Schule gemachte Projekt vorstellen.


Sortierverfahren

Ein Sortierverfahren ist ein Algorithmus, dessen Ziel es ist, ein Array zu sortieren. Die einzige Voraussetzung ist, dass auf der Menge der Elemente eine Ordnung definiert ist, z. B. die numerische Ordnung von Zahlen. Im Laufe der Zeit wurden viele verschiedene Sortierverfahren entwickelt, die unterschiedlich effizient arbeiten bezüglich der Zeitkomplexität (Anzahl der nötigen Operationen) und der Platzkomplexität (zusätzlich benötigter Speicherplatz). Je nach Sortierverfahren hängt die Zeitkomplexität von der Anordnung der Werte am Anfang ab, es wird dann zwischen Best Case, Average Case und Worst Case unterschieden. Beim Worst Case sind die Werte zu Beginn am schlechtesten vorgeordnet. Des Weiteren spielen bei der Zeitkomplexität die Zugriffszeiten auf Dateien eine Rolle. Die Platzkomplexität hängt unter anderem von der Größe des Arbeitsspeichers ab.
Daneben unterscheidet man noch zwischen stabilen und instabilen Sortierverfahren. Bei stabilen Sortierverfahren  wird die relative Reihenfolge von Elementen, die bezüglich der Ordnung gleichwertig sind nicht verändert, bei instabilen Sortierverfahren wird dies allerdings nicht garantiert.




Verschiedene Sortierverfahren:

Hier möchte ich nun auf die vier verschiedenen Sortierverfahren, die ich in der Schule kennengelernt habe, eingehen. Zu einigen dieser Sortierverfahren, habe ich ein Strucktogramm erstellt, welches als Entwurf diente und den Ablauf detailliert darstellt.


1. Bubble-Sort

Der Bubble-Sort ist einer von 4 Sortieralgorithmen, die ich in der Schule kennengelernt habe. Er ist der am wenigsten komplexe Algorithmus und auch der langsamste. Der Bubble-Sort ist ein stabiles Sortierverfahren.
Funktion:
Der Bubble-Sort durchläuft die Eingabe-Liste von links nach rechts und vergleicht hierbei jeweils die zwei nebeneinander liegenden Elemente. Sollten diese das Sortierkriterium verletzten, werden sie getauscht, danach geht der Algorithmus weiter zum nächsten. Ist der Algorithmus am Schluss der Liste angekommen, ist das grösste Element der gesamten Eingabe-Liste am Schluss. Danach wird der Vorgang so oft wiederholt, bis die Elemente komplett sortiert sind, dabei muss das letzte Element des vorherigen Durchlaufs nicht mehr betrachtet werden, da es schon an der richtigen Stelle steht.


Strucktogramm - Bubble-Sort:





2. Ripple-Sort

Der Ripple-Sort ist eine optimierte Form vom Bubble-Sort. Der einzige Unterschied zum Bubble-Sort ist, dass der Ripple-Sort bei jedem Durchgang einen booleschen Wert auf "wahr" setzt, wenn etwas getauscht wurde. Ist dies nicht der Fall, bricht der Algorithmus ab und die Liste ist somit fertig sortiert. In der untenstehenden Animation sieht man, dass der Algorithmus vom Ripple-Sort nur sechs Mal durchläuft, wobei der Bubble-Sort noch ein siebtes Mal durchgelaufen wäre und am Schluss noch die 1 mit der 2, die beide schon am korrekten Platz sind, miteinander verglichen hätte.





Ripple-Sort






3. Intern-Sort:

Der Intern-Sort ist schon etwas komplizierter, aber auch schneller als die beiden vorher. Dieser Algorithmus sucht sich in der Eingabe-Liste den kleinsten Wert heraus. Dies macht er, indem er zuerst das erste Element der Liste mit dem größt möglichen (ÿ) vergleicht. Ist der Wert kleiner, werden dessen Position sowie das Element selber als kleinstes der Liste gespeichert. Danach geht er zum nächsten Element und vergleicht dieses nun mit dem Element, das vorhin abgespeichert wurde. Ist das neue Element wieder kleiner, wird nun dieses gespeichert. Dies geschieht solange, bis der Algorithmus einmal durch die ganze Eingabe-Liste gegangen ist und somit den kleinsten Wert ermittelt hat. Dieser kleinste Wert wird nun als erster in der Ausgabe-Liste (anhand der gespeicherten Position) gespeichert und in der Eingabe-Liste mit dem grössten Wert (ÿ) überschrieben. Dieser Ablauf geht solange weiter, bis die Ausgabe-Liste gleich lang wie die Eingabe-Liste ist.


Strucktogramm - Intern-Sort:






4. Quick-Sort:

Der Quicksort war das komplexeste Sortierverfahren zum Umsetzten,  jedoch auch mit Abstand das schnellste Verfahren. Der Quick-Sort ist ein nicht-stabiler Sortieralgorithmus. Er hat den Vorteil, dass er über eine sehr kurze innere Schleife verfügt, was die Ausführungsgeschwindigkeit stark erhöht. Speziell an diesem Algorithmus ist, dass er sich selber mehrmals aufruft.
Funktion:
Als erstes wird aus der Eingabe-Liste genau das Element in der Mitte bestimmt und unterteilt somit die Liste in zwei Teillisten. Die Elemente der linken und der rechten Teilliste werden mit dem vorher bestimmten Element verglichen. Sind die verglichenen Elemente jetzt grösser (bzw. kleiner) als das Element in der Mitte, werden die beiden Elemente aus den Teillisten vertauscht. Das geschieht solange, bis jedes Element der Teilliste mit dem Element in der Mitte verglichen worden ist. Nun ruft sich der Algorithmus selbst auf und bestimmt wieder das Element in der Mitte, diesmal aber von den beiden Teillisten und unterteilt sie in weitere Teillisten. Das geht solange weiter, bis die Eingabe-Liste sortiert wurde.


Strucktogramm - Quick-Sort:









Das Projekt


Für das Projekt hatten wir etwa die Hälfte des Semesters Zeit, davor beschäftigten wir uns noch ausgiebig mit Strucktogrammen. Die Vorgaben des Programms waren folgende:

- Zeichensortierung: Bubble-Sort, Ripple-Sort, Intern-Sort & Quick-Sort
- Umlautfunktion - (ä kommt nach a und nicht am Schluss der Liste)
- Menubar - Funktionen: Datei, Bearbeiten, Farbe, Info
- Toolbar - Funktionen: Datei, Bearbeiten, Farbe, Info
- dynamische Menu- und Toolbar, (Clipboard-Handling)
- GUI: Optionen, Checkbox(+Menu), Sortierzeit, ShortCut,
- Wortsortierung 2 Algorithmen mit und ohne Umlaut
- Änderungsfreundlichkeit:(Trennung Formular/Sortiermodul, Option Compare Text Modul)
- Änderungsfreundlichkeit: Kommentare
- Zusatz: Selbsterarbeitete weitere Sortieralgorithmen mit Struktogramm

Für die Wortsortierung habe ich vollständigkeitshalber alle 4 Algorithmen umgesetzt.
Den Zusatz konnte ich aus Zeitgründen nicht machen.
Alle anderen Vorgaben konnte ich meist recht gut lösen.

Und so sieht die Oberfläche des fertigen Programms aus:




Die einzelnen Funktionen der Elemente sollten mehr oder weniger selbsterklärend sein.


Sortiergeschwindigkeiten:

Das Sortieren des Textes von diesem Blogeintrag ergab folgende Zeiten:

Sortierverfahren:           nach Zeichen:               nach Wörtern:

Bubble-Sort                  ca. 79.079 Sekunden     ca. 0.170 Sekunden
Ripple-Sort                   ca. 74.053Sekunden      ca. 0.244 Sekunden
Intern-Sort                    ca. 15.410 Sekunden     ca. 0.188 Sekunden
Quick-Sort                    ca. 0.252 Sekunden       ca. 0.013 Sekunden

Quick-Sort - Zeichensortierung
(klicken zum Vergrössern)

Quick-Sort - Wortsortierung
(klicken zum Vergrössern)









Freitag, 5. Juni 2015

Mai 2015 - Schaltungen

Im zweiten Lehrjahr haben wir das Modul "Funktionsweise elektronischer und digitaler Baugruppen verstehen", was eigentlich nicht so viel mit der Informatik an sich zu tun hat. Da ich es aber ein interessantes Thema finde, schreibe ich diesen Monat etwas darüber.



Schaltalgebra

Die Schaltalgebra ist eine spezielle Ausführung der Booleschen Algebra. Sie wird verwendet für die Berechnung binärer Schaltungen. Binär bezieht sich hierbei auf die beiden Zustände geöffnet und geschlossen. Ein Element, das häufig verwendet wird, ist das Logikgatter, welches wir auch in der Schule sehr oft benutzt haben. In der heutigen Digitaltechnik werden binäre Schaltsysteme hauptsächlich aus elektronischen Bauelementen gebaut. Hierbei werden die beiden logischen Zustände durch unterschiedliche Spannungen realisiert. Der höhere Spannungspegel bedeutet im Normalfall eine logische Eins und der niedrigere Spannungspegel eine logische Null.


Logikgatter

Ein Logikgatter - oder auch nur Gatter genannt - ist wie schon erwähnt ein elektronisches Bauelement, welches Eingangs- sowie Ausgangssignale verarbeitet. Die Eingangssignale werden durch logische Operatoren wie NICHT, UND oder ODER etc. in ein logisches Ergebnis umgewandelt, welches dann das Ausgangssignal ergibt. Das Ausgangssignal kann nun wieder als Eingangssignal bei einem weiteren Gatter genutzt werden. Grundlegend hat man bei einem Gatter zwei Eingangssignale, es können aber eigentlich beliebig viele verwendet werden.


Typen von Logikgattern:




AND

NAND

OR

NOR

NOT

XOR

XNOR

 Wahrheitstabelle

Alle möglichen Ausgangszustände eines Logikgatters können auch mit einer Wahrheitstabelle ermittelt werden, in Abhängigkeit aller möglicher Eingangssignale.
Folgende Wahrheitstabellen gehören zu den oben dargestellten Logikgattern.



Wahrheitstabelle: AND

Wahrheitstabelle: NAND

Wahrheitstabelle: OR 

Wahrheitstabelle: NOR

Wahrheitstabelle: NOT 


Wahrheitstabelle: XOR
                        
Wahrheitstabelle: XNOR


Definition:

AND:
Der Ausgangswert ist nur dann eine logische 1, wenn jeder Eingangswert eine logische 1 ist.
Wird als  "·" (Malzeichen) dargestellt. Beispiel: A · B oder AB
NAND:
Der Ausgangswert ist immer dort eine logische 1, wo der Ausgangswert der AND-Verknüpfung eine logische 0 ist.
OR:
Der Ausgangswert ist immer dann eine logische 1, wenn mindestens einer der Eingangswerte eine logische 1 ist.
Wird als  "&" (Und-Zeichen) dargestellt. Beispiel: A & B
NOR:
Der Ausgangswert ist immer dort eine logische 1, wo der Ausgangswert der OR-Verknüpfung eine logische 0 ist.
NOT:
Der Ausgangswert wird jeweils zum gegenteiligen des Eingangswertes.
                    _
Beispiel: A = A (sprich: "A quer")

XOR (Antivalenz):
Der Ausgangswert ist immer dann eine logische 1, wenn an einer ungeraden Anzahl Eingängen eine logische 1 und an den restlichen eine logische 0 ist.
XNOR(Äquivalenz):
Der Ausgangswert ist immer dort eine logische 1, wo der Ausgangswert der XOR-Verknüpfung eine logische 0 ist.

KV-Diagramm

Das Karnaugh-Veitch-Diagramm ist eine einfache Möglichkeit, eine Boolesche Funktion möglichst kompakt darzustellen.

Beispiel (OR-Verknüpfung):

Klicken zum Vergrößern


Boolesche Funktion:
Um die Boolesche Funktion anzugeben, wird alles, wo das X eine logische 1, ist miteinander ODER-Verknüpft. 

Klicken zum Vergrößern


KV-Diagramm:
Nun werden die einzelnen Ergebnisse, die miteinander ODER-verknüpft sind, in das KV Diagramm eingetragen.








Dann wird so gut wie möglich zusammengefasst:



Daraus ergibt sich dann eine vereinfachte Boolesche Funktion:



Man sieht auf Anhieb, dass man so einfach eine zusammengefasste Lösung beschreiben kann und beides bedeutet das gleiche.


Flipflop

Ein Flipflop ist eine elektronische Schaltung, die zwei Zustände einnehmen und somit eine Datenmenge von einem Bit über eine unbegrenzte Zeit speichern kann, solange eine Spannungsversorgung gewährleistet ist. Das Flipflop ist ein unverzichtbares Bauelement der Digitaltechnik und damit ein fundamentaler Bestandteil der meisten elektronischen Schaltungen.
Es gibt viele verschiedene Arten von Flipflops. Sie unterscheiden sich in Anzahl und logischen Funktionen der Eingänge, der zeitlichen Reaktion auf Eingangssignale, insbesondere auf das Taktsignal. Allen Flipflops gemeinsam ist, dass sie zwei stabile Zustände haben, welche an einem Ausgang gemessen werden können. Normalerweise haben Flipflops neben dem Ausgang "Q" einen weiteren Ausgang "Q quer" vorhanden, an dem der negierte Wert von "Q" anliegt. Durch das Zusammenschalten mehrerer Flipflops können komplexere Systeme wie etwa Zähler, Datenspeicher und Mikroprozessoren entstehen. Sie sind somit Grundbausteine für die gesamte Digitaltechnik und Mikroelektronik.


Klassifizierung (anhand der Taktabhängigkeit)

Folgende Arten von Flipflops gibt es:









Nicht taktgesteuerte Flipflops:

Der Zustand des Flipflops wird direkt durch die Pegel der Eingangssignale bestimmt. Es wird also kein Takt benötigt. Es gibt aber die Möglichkeit, dass das Flipflop seinen Zustand nur während eines Pegelwechsels der Eingangssignale ändert.


Taktgesteuerte Flipflops:

Da nur in bestimmten Zeitabschnitten die Eingangssignale stabil anliegen, ist es von Vorteil, dass ein Flipflop nur zu einer bestimmten Zeit auf die Eingangssignale reagiert. Das kann durch die Verwendung eines Taktsignals realisiert werden, das die Steuereingänge des Flipflops nur zu bestimmten Zeiten freischaltet.

Taktzustandsgesteuerte Flipflops:
Taktzustandgesteuerte Flipflops reagieren während der gesamten aktiven Phase des Taktes auf die Eingangssignale und reichen deren Änderungen zum Ausgang durch.

Taktflankengesteuerte Flipflops:
Taktflankengesteuerte Flipflops können ihren Zustand nur während der Taktflanken ändern. Das Flipflop reagiert somit nur während einer ganz kurzen Zeit nach der Taktflanke auf die Eingangssignale. In der aktiven Taktphase geschieht nichts und das Flipflop behält seinen vorher gespeicherten Zustand.


JK-Flipflop

Das JK-Flipflop ist ein Taktflankengesteuertes Flipflop, welches meist bei den negativen Flanken die Eingangssignale misst. "J" und "K" sind hierbei die Eingänge. Ein weiterer Eingang ist "C", der für das Taktsignal vorgesehen ist ("Takt" -> eng: "Clock") Liegt an beiden der Eingänge ("J" und "K") eine 0 an, bleibt der Ausgang "Q" unverändert. Liegt nur an "K" eine 1 an und an "J" eine 0, so wird "Q" zu 0 (das Flipflop wird zurückgesetzt). Liegt nur an "J" eine 1 und an "K" eine 0 an, so wird "Q" zu 1 (das Flipflop wird gesetzt). Liegt an beiden Eingängen eine 1 an, wird der Zustand von "Q" gewechselt (toggle).


Schaltsymbol:




Wahrheitstabelle:



























Mittwoch, 25. März 2015

März 2015 - Ethernet

Diesen Monat schreibe ich über das Ethernet, da wir dies jetzt im vierten Semester behandeln.


Ethernet

Ethernet ist eine Technologie für kabelgebundene Datennetze. Sie ermöglicht den Austausch von Daten zwischen den in einem Netz angeschlossenen Geräten. Da Ethernet ursprünglich für lokale Netze gedacht war, trifft man auch häufig auf die Bezeichnung "LAN-Technik". Mittlerweile erreicht man mittels Glasfaser eine Reichweite von >10km.
Das Ethernet Protokoll beinhaltet die Festlegungen für Stecker, Kabeltypen und Übertragungsformen. IM OSI-Modell ist Ethernet in den beiden ersten Schichten zu finden. Seit 1990 ist Ethernet die meistverwendete LAN-Technik. Die erste Idee zu Ethernet entstand 1973, als Robert Metcalfe, der Erfinder von Ethernet, eine Skizze für seine Vorgesetzten entwarf. Ethernet wurde über mehrere Jahre entwickelt. Die erste Version arbeitete damals noch mit 3 Mbit/s. Ab 1980 wurde Ethernet vom IEEE (sprich: "i triple e") im Projekt 802 weiterentwickelt und es war ursprünglich eine Übertragungsrate zwischen 1 und 20 Mbit/s geplant. 1985 wurde der Ethernet-Standard dann  auch als internationaler Standard veröffentlicht und wurde in kurzer Zeit von mehr als 100 Herstellerfirmen unterstützt. 
Ethernet basiert auf der Idee, dass jeder Teilnehmer in einem LAN Daten durch Hochfrequenzen überträgt, allerdings  nur innerhalb eines gemeinsamen Netzes. Dafür, dass jeder Teilnehmer eindeutig adressiert werden kann, sorgt die MAC-Adresse (Media-Access-Control-Addresse).


Twisted-Pair-Kabel

Twisted-Pair-Kabel sind Kabel mit verdrillten Adernpaaren. Verdrillte Adernpaare bieten besseren Schutz gegenüber äusseren Einwirkungen, wie magnetische Wechselfelder, als nicht verdrillte Adern. Durch das Verdrillen heben sich Beeinflussungen durch äussere Felder meist gegenseitig auf. Ein elektrisch leitender Schirm aus Alufolie oder einem Metallgeflecht bietet weiteren Schutz. Die verschiedenen Varianten sind aber nicht immer auf die gleiche Weise und auch nicht gleich stark geschirmt.


Ausführungen:














UTP: Unshielded Twisted Pair

Das UTP ist das am weltweit meistverwendete Kabel für Ethernet-LANs. Sie sind bei uns aber wenig verbreitet, da weder die Paare geschirmt sind, noch es einen Gesamtschirm besitzt. Für Übertragungsraten bis Gigabit-Ethernet (später mehr dazu) reicht ein UTP-Kabel aus. Erst ab höheren Übertragungsraten werden geschirmte Kabel zwingend benötigt.


S/UTP: Screened Unshielded Twisted Pair

Der Aufbau ist gleich wie bei UTP, es hat jedoch noch einen Gesamtschirm aus Alufolie oder einem Metallgeflecht.















STP: Shielded Twisted Pair

STP-Kabel gibt es in zwei verschiedenen Varianten:
S/STP: Screened Shielded Twisted Pair (Gesamtschirm: Metallgeflecht, Paarschirm: Metallgeflecht)
F/STP: Foiled Shielded Twisted Pair (Gesamtschirm: Alufolie, Paarschirm: Metallgeflecht)














S/FTP: Shielded Foiled Twisted Pair
Gesamtschirm: Metallgeflecht
Paarschirm: Alufolie



CSMA/CD-Algorithmus

Der CSMA/CD-Algorithmus (Carrier Sense Multiple Access/Collision Detection) wird verwendet, um den Zugriff verschiedener Geräte auf ein gemeinsames Übertragungsmedium (z.B. ein Netzwerkkabel) im Halbduplex-Betrieb zu regeln.

Funktionsweise:



Wortbedeutung:
IFS: minimaler zeitlicher Abstand zwischen zwei gesendeten Paketen
   JAM-Signal: definiertes Störsignal                                                        
Backoff: Zufällige abzuwartende Zeit                                                 




Heutzutage spielt die Kollisionsauflösung nur noch eine kleine Rolle, da die meisten Netzwerke im Vollduplexmodus betrieben werden und keine Kollisionen mehr entstehen können.


Duplex 

Als Duplex wird die Richtungsabhängigkeit eines Kommunikationskanals bezeichnet. Es werden drei verschiedene Betriebe unterschieden:

Simplex: Daten können nur in eine Richtung übertragen werden.
Halbduplex: Daten können in beide Richtungen übertragen werden, aber nie zur selben Zeit.
Vollduplex: Daten können gleichzeitig in beide Richtungen übertragen werden.


Medientypen

Es gibt viele verschieden Ethernet-Varianten, die sich jeweils in der Übertragungsrate, dem Kabeltyp und dem Leitungscode unterscheiden.


Frühere Varianten:

- Xerox Ethernet: Ursprüngliche Ethernet-Implementation, die während ihrer Entwicklung zwei verschiedene Versionen hatte.

- 10Broad36: Standard der früher genutzt wurde, um über grössere Entfernung zu übertragen. Benutzte  eine Breitband-Modultechnik (ähnlich wie Kabelmodems)

- StarLAN: Erste Ethernet-Variante, die über ein Twisted-Pair-Kabel lief. Die Reichweite betrug bis zu 500 Metern.

10 Mbit/s-Ethernet

Von 10 Mbit/s-Ethernet gibt es viele verschiedene Varianten, bei denen überall eine Manchesterkodierung zum Einsatz kommt.

- 10BASE2: Verwendet ein Koaxialkabel. Jeder Teilnehmer benutzt einen BNC-T-Stecker für die Anbindung an die Netzwerkkarte. Maximal können sich 30 Teilnehmer im Netzwerk befinden.

-10BASE5 Ähnlich wie das 10BASE2, die maximale Anzahl an Teilnehmern liegt jedoch bei 100.

-StarLAN 10: Ist die erste Ethernet-Variante über ein Twisted-Pair-Kabel mit 10Mbit/s

- 10BASE-T: Weiterentwicklung des StarLAN 10, läuft über vier Adern (Twisted Pair) eines Cat-3 oder Cat-5 Kabels. Als Stecker werden die 8P8C-Modularstecker verwendet, welche Ähnlichkeiten mit den RJ-45-Steckern aufweisen.


Desweiteren gibt es noch einige mehr 10Mbit/s-Ethernet-Varianten die unter anderem auch über Glasfaser-Kabel kommunizieren.


100 Mbit/s-Ethernet

Von 100 Mbit/s-Ethernet die ein Kupferkabel verwenden, gibt es 3 verschiedene Varianten. Durchgesetzt hat sich jedoch nur 100BASE-TX.

100BASE-T: Allgemeine Bezeichnung für die drei 100 Mbit/s-Ethernetstandards. Als Stecker werden auch hier die 8P8C-Stecker verwendet, die häufig fälschlicherweise als RJ-45-Stecker bezeichnet werden.

- 100BASE-T4: Über Cat-3-Kabel und verwendet alle vier Aderpaare. Es verwendet den Halbduplexmodus.

- 100BASE-T2: Verwendet auch Cat-3-Kabel, benutzt aber nur zwei Aderpaare. Unterstützt den Vollduplexbetrieb.

- 100BASE-TX: Benötigt mindestens Cat-5-Kabel, kann aber auch bei eingeschränkter Reichweite normale Telefonkabel verwenden. Verwendet den 4B5B-Code mit MLT-3-Kodierung.

Auch hier gibt es weitere Varianten, die Glasfaser-Kabel verwenden.


Gigabit-Ethernet

Bei Gigabit-Ethernet (oder auch 1000Mbit/s-Ethernet) gibt es zwei verschiedene Kodiervarianten. Zum einen den 8b10-Code, der einen kontinuierlichen gleichspannungsfreien Datenstrom erzeugt, und zum anderen PAM-5, der zusammen mit dem Trellis-Code zum Einsatz kommt, wo der Datenstrom in vier Teilströme unterteilt wird. Die meist genutzte Variante ist 1000BASE-T. Sie kann mit Cat-5, Cat-5e und mit Cat-6-Kabel verwendet werden und benutzt PAM-5 mit dem Trellis-Code. Alle vier Doppeladern des Kabels werden benötigt und im Vollduplexmodus betrieben.