Code & Kernel – IT@UDE https://blogs.uni-due.de/zim ZIM - Wissen schafft IT Fri, 26 Aug 2016 08:27:33 +0000 de hourly 1 https://wordpress.org/?v=6.7 Keine Wanze am Handgelenk – das Android-Wear Smartwatch Mikrofon und die Spracherkennung abschalten https://blogs.uni-due.de/zim/2015/06/01/keine-wanze-am-handgelenk-das-android-wear-smartwatch-mikrofon-und-die-spracherkennung-abschalten/ Mon, 01 Jun 2015 17:45:45 +0000 https://blogs.uni-due.de/zim/?p=2225 Weiterlesen ]]> Eine ebenso bequeme wie vielleicht auch erschreckende Fähigkeit von Smartwatches ist die eingebaute Bedienung per Spracherkennung.

Während der Nutzer eines Android Smartphones sich frei entscheiden kann, ob die Spacheingabe und Google Now genutzt werden soll,  hat Google für Android Wear gar nicht vorgesehen, dass die Spracherkennung sinnvoll deaktivierbar ist. Nur im Flugmodus, in dem die Uhr gänzlich an der Kommunikation gehindert wird, ist auch die Spracherkennung abgeschaltet. In diesem Modus ist aber keine sinnvolle Nutzung der Smartwatch möglich, da selbst die Zeit nach einer Weile nicht mehr zuverlässig angezeigt wird, was für eine Uhr eine Katastrophe ist. Es ist anzunehmen, dass Apple mit der Spracherkenng der Apple Watch ähnlich verfährt.

Eine Suche nach einer Möglichkeit zur Deaktivierung der Spracherkennung bei Android Wear ergab nur zwei Hits, einen bei xda-Developer und einen bei Android-hilfe.de. Beides Anfragen nach einem solchen Feature aber keine hilfreichen Antworten. Offensichtlich gehöre ich zu der Minderheit der Nutzer, die keine Abhörwanze mit sich herumtragen möchten. Ich halte Spracherkennung für ein sehr nützliches Feature und habe mich in meiner Forschungtätigkeit ausführlich damit beschäftigt (siehe hier und hier),  aber ich möchte Sprachsamples von mir nicht in der Cloud bei Google gespeichert haben.

Aktiv ist die Spracherkennung immer, wenn die Uhr, bzw. der Arm angehoben wird, da sie dann auch per Keyword „Ok Google“ aktiviert wird. Die Kunstpause, die entsteht wenn ein Suchwort gesprochen wird, deutet darauf hin, dass die Sprachverarbeitung in der Cloud erfolgt. Da die Erkennung immer läuft, kann eine Wear-Smartwatch meiner Meinung nach auf nichtöffentlichen Sitzungen oder bei privaten Gesprächen gar nicht verwendet werden.

Auch der mögliche Missbrauch durch Menschen in Sprechweite, andere Apps oder Radio- und Fernsehton mit „OK Google wähle 0900-XXX“ muss bedacht werden. Eine dauerhaft aktivierte sprecherunabhängige Spracherkennung ist wie eine offene Konsole, an der jeder beliebige Kommandos eingeben kann.

Um Abhilfe zu schaffen, habe ich eine kleine Android Wear App geschrieben, welche das Mikrofon stummschaltet. Die Smartwatch ist damit weiterhin nutzbar für Notifikationen und andere Applikationen, die kein Mikrofon erfordern.

Die App kann hier im Play-Store heruntergeladen werden. Sie installiert eine Wear-App mit dem Namen „Mute Wear Mic“ auf der Smartwatch, die per Checkbox das Mikrofon abschaltet.Ihre Privatsphäre und die Ihrer Freunde und Kollegen wird mit dieser App geschützt. Um die Spracherkennung wieder einzuschalten, muss die App erneut aufgerufen und das Häkchen erst gesetzt und dann wieder entfernt werden.

Die App benötigt Rechte zur Änderung der Audioeistellungen.

Meine "mute wear mic" App
Meine „mute wear mic“ App

Wirklich 100% sicher, dass die Smartwatch nicht mithört kann man dann leider auch nicht mehr sein, da die NSA  mit dem Projekt Irritant Horn an einem Projekt gearbeitet hat, welches per Man-in-the-Middle die App-Stores von Google und Samsung manipulieren sollte.

Schade ist allerdings, dass immer mehr Nutzern Ihre Privatsphäre egal ist, da Sie davon ausgehen, dass die NSA eh an alle Daten kommt. Oder Ihnen ist Ihre Privatsspäre zugunsten von etwas Komfort egal. Interessant ist,  was Edward Snowden kürzlich dazu beigetragen hat:

Wenn Du meinst Privatshäre ist egal, nur weil Du nichts zu verbergen hast, kannst  Du genauso behaupten, Redefreiheit ist egal, nur weil Du nichts zu sagen hast!

]]>
Warum Sicherheit leider immer kompliziert sein muss – ein separates, neues Passwort für eduroam an der Universität Duisburg-Essen nicht nur gegen die Android Enterprise WPA2-Lücke (WLAN Eduroam Sicherheitslücke Android) https://blogs.uni-due.de/zim/2015/03/24/warum-sicherheit-leider-immer-kompliziert-sein-muss-ein-separates-neues-passwort-fuer-eduroam/ Tue, 24 Mar 2015 16:26:35 +0000 https://blogs.uni-due.de/zim/?p=2174 Weiterlesen ]]> Für technisch Interessierte hier die „ganze“ Android-eduroam-Story.

Auch wenn die dem eduroam-Verbund zugrundeliegende Infrastruktur als sicher gelten kann, könnten doch unzureichend implementierte Radius-Klienten in Mobilgeräten die eigentlich sichere Umgebung untergraben. Bei drahtlosen WLAN-Netzen muss der Client immer überprüfen, ob er mit dem richtigen Accesspoint verbunden ist. Eine SSID (den Namen des WLAN-Netzes) kann jeder Angreifer sehr leicht kopieren. Deshalb sind offene WLANs auch immer gefährlich.

Ein Client kann niemals sicher sein, dass bei einer DNS-Anfrage wirklich die dazu passende IP-Adresse zurückgeliefert wird. Nur wer in offenen Netzen verschlüsselt per https kommuniziert und auch wirklich die in dieser Verbindung verwendeten Zertifikate überprüft, kann sicher sein mit dem richtigen Server verbunden zu sein. Wer im Web Zertifikatswarnungen ignoriert kann dort, wie auch im richtigen Leben, von Betrügern übers Ohr gehauen werden. Bei herkömmlicher WEP- (das Verfahren ist unsicher) oder WPA-Verschlüsselung ist durch das sowohl dem Klienten als auch dem Accesspoint bekannte Passwort sichergestellt mit dem „richtigen“ Accesspoint zu kommunizieren. In Firmen- oder Hochschulnetzen ist ein einfaches WPA-Passwort aber nicht praktikabel und so kommt das Radius-Protokoll ins Spiel. Ursprünglich für die Authentifikation in Modem-Einwahlnetzen konzipiert, kann Radius auch in WLAN-Netzen mit dem Standard 802.1X (ursprünglich vorgesehen für LANs) eingesetzt werden.

Um sicher mit einem Radius-Server zu kommunizieren, werden in 802.1X (Extensible Authentication Protocol) die Methoden TTLS (Tunneled TLS) und PEAP (Protected EAP) eingesetzt. In beiden Fällen handelt es sich prinzipiell um einen sicheren TLS-Tunnel wie er auch von https oder ähnlich bei SSH-Verbindungen genutzt wird. Wie bei diesen Verbindungen ist auch bei Enterprise WPA (802.1X EAP) das Zertifikat entscheidend.
Ohne Überprüfung des Zertifikats gibt es keine sichere Verbindung! Wer auf die Zertifikate im eduroam WLAN verzichtet, handelt grob fahrlässig!

eduroam korrekt konfiguriert

Abb. 1 So ist eduroam korrekt konfiguriert

Übrigens wird die Unikennung nur im Tunnel übertragen, d. h. wenn ein UDE-Nutzer z. B. an der TU-Dortmund unterwegs ist, sehen die Kollegen dort nur die äußere anonyme Identität, welche nach unserer Anleitung „anonymous@uni-due.de“ lauten soll. Der Suffix „uni-due.de“ ist wichtig, damit die Anfrage über die Radius-Server des DFN-Vereins an unsere Radius-Server weitergeleitet werden kann. Innerhalb des sicheren Tunnels kann die Authentifikation mit einem Klartextpasswort (PAP) oder viel sicherer mit MSCHAPv2 stattfinden. Bei MSCHAPv2 werden nur Hashes (challenge/response) ausgetauscht, das Klartext-Passwort wird niemals übertragen. Das auf dem veralteten DES-Verschlüsselungsverfahren beruhende MSCHAPv2 ist aber angreifbar. Klartextauthentifizierung mit PAP sollte aber in keinen Konfigurationsanleitungen mehr empfohlen werden!

Neben der vom DFN-Verein beschriebenen Sicherheitslücke (1) im Android-Radius-Klienten bei der Konfiguration mehrerer Enterprise-WPA-WLAN-Profile, übrigens ein ungewöhnlicher Fall – nur wenige unserer Kunden haben daheim einen eigenen Radiusserver – gibt es weitere Sicherheitslücken, die sich bei unzureichend konfigurierten Klienten ausnutzen lassen. Ein Angriff auf einen unserer Kunden wurde im Mai 2014 mit dem Exploit „PEAP-ing TOM“ (3,4) durchgeführt. Durch diesen Exploit lassen sich nur Geräte angreifen, die unzureichend konfiguriert sind. Ein modifizierter Radius-Server bringt den Android-Klienten dazu sein Passwort per GTC (Generic Token Card, ein one-time Passwort) herauszugeben.

Um per PEAPing TOM angreifbar zu sein, reicht es aus in die Android-WLAN-Konfiguration kein Root-Zertifikat und keine Phase 2-Authentifizierungsmethode einzugeben (Siehe Abbildung 2).

Abb. 2 und 3: oben: So nicht! Ein angreifbares Android Profil - unten: das Angriffswerkzeug

Abb. 2: unten: So nicht! Ein angreifbares Android Profil – oben: das Angriffswerkzeug eduroam2

Leider vertraut Android (in allen Versionen, erst Android 5 ist sicher) auch bei korrekt konfiguriertem eduroam-Zugang allen Zertifikaten unterhalb der Deutschen Telekom Root und nicht nur den Zertifikaten unserer Radius-Server. Daher würde der beschriebene Angriff auch funktionieren, wenn der Angreifer ein gültiges Zertifikat unterhalb der Telekom Root besitzt (2). Auch MSCHAPv2 im inneren Tunnel hilft nicht wirklich zuverlässig, da auch dieses angreifbar ist (5). Alle unsere eduroam-Konfigurationsanleitungen für Android sind seit dem Frühjahr 2014 auf dem aktuellen Stand. Wir können aber nicht sicherstellen, dass nicht noch Kunden mit falscher Konfiguration unterwegs sind. Aufgrund der Vielzahl der mobilen Klienten, deren Integrität nicht immer überprüft werden kann, erschien es uns sinnvoll ein separates WLAN-Passwort einzuführen. Dazu wurden sowohl die zentrale Benutzerverwaltung AUM als auch die Radius-Server angepasst.

Als Reaktion auf die Android-Sicherheitslücken planen alle UAR-Rechenzentren gemeinsam die Einführung eines optionalen separaten Passwortes für eduroam. Übergangsweise wird das bisherige zur Unikennung passende Passwort für eduroam weiterverwendet werden können. Wenn ein Kunde ein separates Passwort konfiguriert, wird ausschließlich dieses für die eduroam-Authentifikation verwendet werden. Mittelfristig wird von den UAR-Rechenzentren eine Authentifikation mit persönlichen Zertifikaten angestrebt.

(1) http://www.dfn-cert.de/aktuell/Google-Android-Eduroam-Zugangsdaten.html

(2) http://h4des.org/blog/index.php?/archives/341-eduroam-WiFi-security-audit-or-why-it-is-
broken-by-design.html

(3) https://www.youtube.com/watch?v=-uqTqJwTFyU

(4) http://www.leviathansecurity.com/blog/peap-at-def-con-21/

(5) http://www.heise.de/security/artikel/Der-Todesstoss-fuer-PPTP-1701365.html

]]>
Mit SVG und Javascript richtigen Strom erzeugen – eine grafische Animation des einschrittigen Übertrages nach Howard Aiken und Konrad Zuse. https://blogs.uni-due.de/zim/2014/06/03/mit-svg-und-javascript-richtigen-strom-erzeugen-eine-grafische-animation-des-einschrittigen-uebertrages-nach-howard-aiken-und-konrad-zuse-4/ Tue, 03 Jun 2014 21:05:21 +0000 https://blogs.uni-due.de/zim/?p=2044 Weiterlesen ]]> Da am Ende etwas Buntes und Bewegliches herausgekommen ist, zeige ich es zuerst.

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/aiken6.svg“]

Die Herausforderung bestand darin, die grafischen Objekte mit elektrischen Eigenschaften zu versehen. Die Objekte sollen selbst wissen, ob sie sich berühren und sollen unter sich aushandeln, ob „Strom“ vom einem Objekt zu anderen übergeben werden soll. Und die Schaltelemente sollten natürlich im Bild anklickbar sein.

Am besten an dieser Stelle sollte ich mich entschuldigen, für die Möglichkeit, dass Sie als Leser und Betrachter das alles doch nicht so sehen und wahrnehmen, wie ich es mir gedacht habe. „Die Welt ist im Wandel“ könnte man mit der Elbenfürstin Galadriel aus der Tolkien-Welt sagen. In der Internet- und „Browser-Welt“ entstehen ständig neue Konzepte und Standards, die sich durchsetzen oder wieder im Nichts verschwinden. (Oder sie parken für einige Jahre oder Jahrzehnte in einer Warteschleife.) Um am Puls der Zeit zu sein, muss man daher immer die aktuellen Versionen der Web-Browser installiert haben. Mit meinem Artikel nutze ich ein Konzept und erzeuge zugleich eine Nachfrage nach der Unterstützung dieses Konzeptes.

Zunächst möchte ich aber erläutern, was die Zeichnung darstellt. Es geht um das maschinelle Addieren von Binärzahlen. Im Prinzip gehen Addiermaschinen – seien es mechanische, elektromechanische oder elektronische – ähnlich vor, wie wir es auch vom schriftlichen Addieren her kennen. Man stellt die Zahlen in einem sogenannten Stellenwertsystem dar, addiert dann zunächst die einzelnen „Stellen“ und muss eventuell noch pro „Stelle“ einen „Übertrag“ verarbeiten. Das ist unabhängig davon, ob man im Dezimalsystem, im Binärsystem oder in Hexadezimalsystem rechnet.

Schon die ersten Rechenmaschinen aus dem 17. Jahrhundert, die mit rotierenden Zahlenscheiben arbeiteten, brauchten eine besondere Vorkehrung um den Übertrag an die nächste Scheibe weiterzureichen. Eine besondere Schwierigkeit besteht in Situationen, wo ein Übertrag in einer Stelle, auch in der nächsten Stelle wieder einen Übertrag erzeugt. Nehmen wir z.B. die Addition 999999 + 1. Muss der Automat sich für diese Aufgabe mit den Überträgen von Stelle zu Stelle durchhangeln, oder kann er das in einem einzelnen Arbeitstakt bewerkstelligen?

Auch Howard Aiken und Konrad Zuse standen in der Mitte des letzten Jahrhunderts vor diesem Problem, als sie die ersten Computer konstruierten.

Der dargestellte Schaltplan geht auf Aiken zurück und ist dem Kapitel „Zuse, Aiken und der einschrittige Übertrag“ des Buches „Historische Notizen zur Informatik“ von Friedrich L. Bauer (ISBN: 978-3-540-85789-1) entnommen. Wir sehen die Addierschaltung für eine einzelne Stelle im Binärsystem. Es werden zwei Binärzahlen a und b addiert, die hier durch zwei Schaltergruppen a und b über Relais gesteuert werden. Die Relais sind auf der rechten Seite dargestellt. Am Anfang erhalten sie das Signal 0. Durch klicken auf die 0 wird zum Wert 1 umgeschaltet. Dann zieht das entsprechende Relais an. Außerdem kommt von rechts der Übertrag von der vorhergehenden Stelle des Binärsystems. Der Übertrag erfolgt in zwei Leitungen: Die untere ist genau dann stromführend, wenn ein Übertrag ankommt, und die obere genau dann, wenn kein Übertrag ankommt. Mit dem Schalter U kann man im Bild den Übertrag ein- und ausschalten. Dieser Schalter gehört nicht wirklich zu der Schaltung, die wir darstellen wollen. Er ist gewissermaßen ein Ersatz für die entsprechende (gleiche) Addierschaltung der vorhergehende Binärstelle. Unten links wird der Übertrag, der in der fokussierten Binärstelle berechnet wird, an die nächst höhere Stelle weitergeben. Durch klicken auf die beiden Eingänge für a und b und auf dem Schalter U kann man 8 verschiedenen Stellungen der Schaltung durchspielen. In der Mitte sieht man das Ergebnis der Summenberechnung für diese einzelne Binärstelle: Am Anfang ist es natürlich die 0.

Zuse verwendet in der Z3 eine Schaltung, die in jeder Stelle noch zwei weitere Relais benötigt.

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/z3.svg“]

Die Berechnung erfolgt in drei Schritten. Man beachte aber, dass auch hier wie bei Aiken, die Weitergabe des Übertrages nicht ein schrittweises Übertragen von Stelle zu Stelle ist. Nehmen wir eine Addition 1111 + 1 = 10000. Dann ergibt die xor-Verbindung von a und b in den ersten 4 Stellen jeweils den Relaisstand x=1. Kommt dann von rechts der Übertrag hinzu, wird er gleichzeitig an alle Stellen weitergeben und nicht Schritt für Schritt.

An einem Gymnasium in der Schweiz ist in einer Projektarbeit eine HTML-basierte Animation entstanden, die das Zusammenspiel mehrere Binärstellen darstellt. Siehe hier. Die Animation zeigt den „Stromfluss“ in Zeitlupe. In Wirklichkeit passiert das aber in Lichtgeschwindigkeit. Einen relevanten „Zeitverbrauch“ in der Schaltung hat man stattdessen durch die Trägheit der Relais. Das sollte man im Hinterkopf haben, wenn man diese und auch meine Schaltungen betrachtet.

Später kommt Zuse zu einer Schaltung mit Dioden. Das oben zitierte Buch stellt zwei Varianten gegenüber. In der ersten Publikation der Schaltung hatte sich offenbar ein Fehler eingeschlichen, welcher sich über mehrere Auflagen gehalten hatte. Das Informatik-Buch stellt die „richtige“ Schaltung daneben. Dummerweise ist auch diese Variante falsch.

Ich präsentiere eine 3. Variante, mit erneutem Anspruch auf Richtigkeit.

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/zuse3.svg“]

Kommen wir jetzt zu der Frage, wie die Bilder technisch realisiert wurden. Es lag nahe, für die Darstellung der Schaltpläne das XML-Format SVG für Vektorgrafik zu wählen. SVG wird heute von den aktuellen Versionen der Web-Browser unterstützt, sodass man kein besonderes Programm oder Plug-In zum Betrachten installieren muss. Die Browser verarbeiten die SVG-Datei in einer ähnlichen Weise, wie sie auch HTML-Dateien verarbeiten. Daher hat man hier die gleichen Möglichkeiten, mit Hilfe von Javascript als Programmiersprache Dynamik in ein Bild zu bringen. Das bedeutet:

  • Events (z.B. Mausklicken) können Javascript-Code zur Ausführung bringen.
  • Die Seite (HTML, SVG) wird im Speicher durch einen Objekt-Baum (DOM) dargestellt, auf den man mit Javascript zugreifen kann.
  • Javascript kann Eigenschaften vorhandener Seiten-Bestandteile verändern.
  • Javascript kann Seiten-Bestandteile erschaffen und entfernen.

Diese Möglichkeiten wollte ich nutzen, um zwei Ziele zu verfolgen:

  • Das endgültige Zeichnen eines Schaltplan sollte auf einer höheren anwendungsbezogenen Ebene erfolgen. Ich will also mit einfachen Befehlen Schalter Dioden und leitende Verbindungen platzieren können, ohne mich jedes mal wieder mit den SVG-spezifischen Details befassen zu müssen.
  • Und ich wollte richtigen Strom machen. Wenn sich zwei Objekte berühren, sollen sie als „verbunden“ gelten. Und wenn dann das eine Objekt „stromführend“ ist, soll sich diese Eigenschaft auf das andere Objekt automatisch übertragen.

Die Sache mit dem Strom schien zunächst nicht so schwierig zu sein. Was ist aber, wenn durch das Schalten eines Schalters ein Kontakt wieder gelöst wird? Dann müsste man die Stromübertragung zum Teil rückgängig machen. Man müsste also wissen, welches Objekt welchen anderen Objekten Strom übergeben hat; also eine Art Übertragungsrichtung. Ist das aber das richtige Konzept? Man kann sich Schaltungen vorstellen, die nach und nach den Strom auf weitere Objekte übertragen und dann schließlich auf ein Objekt stoßen, das schon über einem anderen Weg Strom bekommen hat. Wenn man jetzt etwas unterbricht, wie will man da noch eine Verlässlichkeit haben, welche Objekte wirklich vom Strom abgetrennt werden müssen und welche stromführend bleiben. Mein Fazit war „Strom übertragen“ geht gut, aber für „kein Strom“ kann man kein funktionierendes Übertragungskonzept ersinnen.

Um zu einer Lösung zu kommen, muss man sich einmal in richtigen Strom hineindenken. Die Weitergabe von Strom über einen leitenden Kontakt ist nicht ein einmaliges Event, sondern ein permanenter Vorgang. „Unterbrechen“ bedeutet daher nicht, dass eine Unterbrechung weitergeleitet werden muss, sondern dass die vorhandene Weiterleitung unterbrochen wird. Um dass zu erreichen habe ich mich entschieden, bei jeder Änderung in der Konstellation der Objekte (oder Schalterstellungen) erst einmal alles grundsätzlich wieder auf „aus“ zu setzen und jedes mal den Strom von den Stromquellen aus über die gegebenen Kontakte neu zu übertragen.

Es ist ein Datei mit Javascript-Code entstanden, die man in eine SVG-Datei einbinden kann. Hier ein kleines Beispiel für so eine SVG-Datei.

<?xml version=“1.0″ encoding=“UTF-8″?>
<svg version=“1.2″
baseProfile=“tiny“
viewBox=“0 0 20 4″
preserveAspectRatio=“xMidYMid“
fill-rule=“evenodd“ stroke-width=“0.05″
stroke-linejoin=“round“
xmlns=“http://www.w3.org/2000/svg“
xmlns:xlink=“http://www.w3.org/1999/xlink“
xml:space=“preserve“ onload=“init()“
>

<g visibility=“visible“ id=“Main“> </g>

<script type=“text/ecmascript“ xlink:href=“dynamische_schaltkreise.js“> </script>

<script type=“text/ecmascript“>
<![CDATA[

function init() {
var SP = new schaltplan(„Main“);
new quelle(SP,’W‘,3,3);
new schalter(SP,“a“,’O‘,“L“,3,3);
new verbindung(SP,“O“,5,2,6);
new verbindung(SP,“O“,5,4,6);
new schalter(SP,“b“,’W‘,“L“,13,3);
new dyn_text(SP,“O“,13,2,0,“0″,“1″);
SP.restart(); }
]]>
</script>

</svg>

Mit onload=“init()“ wird erreicht, dass als erstes nach dem Laden der SVG-Datei die Funktion init aufgerufen wird, in der wir den zu zeichnenden Schaltplan definieren müssen. Vorher haben wir einen leeren SVG-Gruppen-Knoten definiert, dessen Id „Main“ wir der schaltplan-Funktion übergeben. Hier ist das Beispiel im Bild. Es stellt eine einfache Wechselschaltung da, wie wir sie Zuhause in Diele, Keller oder Wohnzimmer haben. Logisch interpretiert ist es eine XOR-Schaltung.

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/wechsel.svg“]

Zum Weiterlesen empfehle ich den Programm-Code in der Javascript-Datei. Da ich damit rechnen muss, dass sich das einer anschaut, habe ich es mehrfach überarbeitet und glattgezogen und mit ausführlichen Erläuterungen versehen. Es ist eine „spannende“ Geschichte, in der es um Kommunikation und Vernetzung geht – wie aus dem prallen Leben. Der Programmierer und Blogger ist zufrieden und denkt sich: „Alles geschieht nach meinem Plan“. Im folgenden Bild sieht man ihn zusammen mit seinem Seelenverwandten Konrad Zuse.


(In Hünfeld, wo Zuse zuletzt gewohnt hat)

Weitere Anmerkungen

Instabile Schaltungen

Warum gibt es in der Natur Geräusche? Das ist gewissermaßen die Art der Natur mit instabilen Situationen klarzukommen: Die Natur macht daraus eine Schwingung. Ein einfaches Beispiel ist eine elektrische Klingel. Ein Magnet wird über einen Kontakt angesteuert. Zieht der Magnet an, wird die Stromzufuhr unterbrochen. Dann fällt der Magnet ab und der Stromkreis wird wieder geschlossen. In unserem Programm würde das zu einer Endlos-Schleife führen, mit der der Web-Browser als Interpreter des Programms nicht zurecht kommt.

Hazzards

Eine gewisse Unzuverlässigkeit von elektrischen Schaltungen ist in unserem Model ausgeklammert. Ein realer Schalter hat in der Phase des Umschaltens von 1 verbunden mit 2 zu 1 verbunden mit 3 eine kleine Übergangssituation, in der weder 1 mit 2 noch 1 mit 3 verbunden ist, oder in der gleichzeitig 1 mit 2 und 1 mit 3 verbunden ist. Man nennt das Hazzard oder Glitch. Hier sind zwei Schaltungen die prinzipiell gleich funktionieren. Man klicke vier mal auf den Schalter a: Dann nimmt die Schaltung vier verschiedene Konstellationen an. Die erste der Schaltungen hat aber die Eventualität in der Praxis nicht zu funktionieren. Beim zweiten Klick auf a könnte das Relais ungewollt abfallen. In der darauf folgenden Schaltung wird diese Unsicherheit überbrückt.

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/viertakter1.svg“ frameborder=“0″ scrolling=“no“]

[iframe src=“https://www.uni-due.de/zim/burkhard.wald/svg2014/viertakter2.svg“ frameborder=“0″ scrolling=“no“]

SVG in HTML einbetten

Zuletzt musste ich noch lernen meine SVG-Ergüsse in eine HTML-Dateien einzubetten. Bei den ersten Versuchen hat es problemlos geklappt, wenn ich einfach das <img>-Tag nahm, mit dem man auch Bitmap-Dateien einbindet. Doch da hatte ich noch keine Javascript-Dynamik in meinen Beispielen. Die Dynamik geht bei so eingebetteten Dateien leider verloren. Da die Inhalte unserer SVG-Dateien dynamisch mit einem Skript erzeugt werden, blieb ihre Darstellung folglich leer.

Die Lösung ist das <object>-Tag. Damit bindet man Medienobjekte ein, mit denen dann der Browser interagieren kann. Alternativ kann man auch das <iframe>-Tag verwenden. Für diesen WordPress-Blog hat sich das IFRAME als die praktikablere Lösung erwiesen. Das liegt aber daran, dass WordPress den HTML-Code nochmal filtert und verändert, um sein eigenes Konzept zu realisieren.

Lokalgeschichte

Auch an der Uni-Essen gab es einmal eine Zuse: eine Z25. Das war in vieler Hinsicht schon ein modernes Gerät auf der Basis von Transistorschaltungen. Sie konnte mit einem spezifischen Maschinencode aber auch schon mit der höheren Programmiersprache Algol programmiert werden. Als ich 1988 zum Rechenzentrum kam, Stand die Z25 ungenutzt im Rechnerraum an der Schützenbahn. Ich habe etwas recherchiert und mit pensionierten Kollegen gesprochen. Die Maschine wurde 1967 von der Abteilung Vermessungswesen der Ingenieurschule für Bauwesen mit Sondermitteln des Landes beschafft. Mit der Gründung der Gesamthochschule 1972 wurde die Fachhochschule in die Universität Essen integriert. Der Computer kam in die Henry-Dunant-Straße und wurde noch bis zum Ende der 70-er Jahre für die Programmierausbildung eingesetzt. Die immer noch funktionsfähige Maschine steht jetzt im Rechenmuseum Arithmeum der Universität Bonn und kommt bei Vorführungen zum Einsatz.

]]>
Integration einer Garagentorsteuerung in OpenHAB mittels Tinkerforge https://blogs.uni-due.de/zim/2014/05/27/integration-einer-garagentorsteuerung-in-openhab-mittels-tinkerforge/ Tue, 27 May 2014 16:30:50 +0000 https://blogs.uni-due.de/zim/?p=1985 Weiterlesen ]]> Während des ZIM talks über Home automation und Datenvisualisierung wies Th. Eichstädt-Engelen vom OpenHAB-Projekt auf die mittlerweile gute Unterstützung seitens OpenHAB für die Module von Tinkerforge hin.

Inspiriert von seiner Anmerkung und durch diesen Beitrag wird im Folgenden exemplarisch dargestellt, wie eine Umsetzung in OpenHAB möglich ist. Als Anwendungsbeispiel dient eine Handfernsteuerung für ein Garagentor, welche durch Tinkerforge Module physikalisch integriert und letztlich über den Bus von OpenHAB angesprochen werden soll.

Hands-on

Folgende Utensilien werden dafür benötigt:

  1. Eine bereits gepaarte Garagentorsteuerung (möglichst ein Zweitgerät, ohne Garantie). Dieses Gerät muss im Wesentlichen über einen Schalter verfügen.
  2. Tinkerforge Master Brick,
  3. Tinkerforge Industrial Quad Relay Bricklet,
  4. 2 Kabel und
  5. ein Lötkolben.

Zunächst sind auf der Platine der Fernbedienung am Schalter die beiden aktiven Anschlüsse zu identifizieren. Dies lässt sich leicht feststellen, indem man sie probeweise mit einem Kabel überbrückt. An die beiden so identifizierten Anschlüsse des Schalters wird dann je ein Kabel gelötet. (Achtung: Dies geschieht auf eigene Verantwortung! Hierdurch kann schlimmstenfalls die Fernbedienung unbrauchbar werden!) Die Enden dieser beiden Kabel werden dann einem der vier Schaltrelais auf dem Industrial Quad Relay Bricklet zugeführt (im Bild sind dies das rote und das grüne Kabel im ersten bzw. im der Kamera zugewandten Relais).

tinkerforge_setupBild: Industrial Quad Relay Bricklet, Master Brick und die Platine einer vorhandenen Fernsteuerungen

Das Industrial Quad Relay Bricklet wird am Master Brick befestigt und letzterer mittels USB angeschlossen, nämlich an den Rechner, auf dem der so genannte „Brick Daemon“ laufen muss.

Software – Brick Viewer und Brick Daemon

Zur Umsetzung ist neben OpenHAB auch Software von der Tinkerforge-Website notwendig. Zunächst wird mit dem Tinkerforge Brick Viewer die ID des Industrial Quad Relay Bricklets ausgelesen und notiert, z.B.: ifd. Diese ID wird später für die Konfiguration von OpenHAB benötigt.

Danach wird auf einem von OpenHAB erreichbaren Server der Brick Daemon installiert. Dies kann natürlich auch derselbe Server sein, auf dem OpenHAB läuft.

Konfiguration in OpenHAB

In OpenHAB wird nun zunächst die Tinkerforge Binding so konfiguriert, dass der Brick Dämon per IP auf dessen Standard-Port erreicht werden kann:

####### Tinkerforge Binding #######
tinkerforge:hosts=127.0.0.1

Listing openhab.cfg (Auszug)

Jetzt sind zwei Items zu definieren. Das erste Item (hier: QR1) repräsentiert das physikalische Tinkerforge Relais, das zweite Item Garage wird benötigt um den physikalischen Druckschalter einer Fernbedienung über den Touchscreen eines Smartphones zu simulieren. In OpenHAB wollen wir für die Nutzung von Touchscreens nur ein „button pressed“ Event auswerten, nicht aber zusätzlich ein „button released“ Event. Also wird beim Antippen des Switch-Items Garage das Relais über das Switch-Item QR1 aktiviert und nach 1,5 Sekunden – über eine Zeitverzögerung gesteuert – wieder unterbrochen. Die subid referenziert das benutzte Relais; hier ist es der erste von insgesamt vier Stück, also relay0.

/* Garage */
Switch QR1    "QR1" {tinkerforge="uid=ifd, subid=relay0"}
Switch Garage "Garage" <garagedoor>

Listing Items (Auszug)

Zur Realisierung der Aktivierung und zeitverzögerten Deaktivierung des Schalters wird noch eine Regel hinzugefügt.

rule "Garage"
when
Item Garage received command
then
QR1.sendCommand(ON)
Thread::sleep(1500)
QR1.sendCommand(OFF)
// Sure it is off? Wait...
Thread::sleep(1500)
// ...and send again...
QR1.sendCommand(OFF)
end

Listing Rules (Auszug)

Schließlich wird die interaktive Schaltfläche als Button Element in die Sitemap eingefügt.

 Switch item=Garage mappings=[ON="Door"]

Listing Sitemap (Auszug)

Für Näheres sei auf die OpenHAB-Binding-Doku zu Tinkerforge verwiesen.

Im Ergebnis zeigt das OpenHAB UI dann einen interaktiven Button, bei dessen Druck die Handfernbedienung 1,5 Sekunden lang über das Relais geschaltet wird.

tinkerforge_openhab_ui

Bild: OpenHAB UI (hier mit Button für eine Garagentorsteuerung)

Fazit

Das hier beschriebene Vorgehen ist rein experimenteller Natur und empfiehlt sich nur sehr bedingt zur Nachahmung. Eine derartige Modifikation einer Fernbedienung führt sehr wahrscheinlich zum Verlust des Garantieanspruchs! Außerdem kann eine Fernbedienung grundsätzlich beim Löten beschädigt werden. Eine derartige Schaltung (hier: Relais) kann natürlich auch über viele andere Mechanismen und dann ggf. preiswerter realisiert werden, z.B. über den GPIO-Port eines Raspberry Pi oder über Schaltkreise hinter einer seriellen Schnittstelle. Als Einstieg in die Ergänzung von OpenHAB um Tinkerforge ist eine solche Schaltung aber gut geeignet, da man sehr schnell zu Ergebnissen gelangt.

]]>
Es muss nicht immer VPN sein – surfen im IP-Adressbereich der Uni über einen SSH-Tunnel https://blogs.uni-due.de/zim/2014/01/30/es-muss-nicht-immer-vpn-sein-ein-ssh-tunnel-realisiert-einen-socks-proxy-fur-nat-umgebungen-oder-ipv6-only-angebundene-unitymedia-kunden/ Thu, 30 Jan 2014 17:10:39 +0000 https://blogs.uni-due.de/zim/?p=1868 Weiterlesen ]]> Ein virtuelles Privates Netzwerk (VPN) bindet entfernte Nutzer über das Internet in ein lokales Netzwerk ein. Das geschieht im Allgemeinen transparent, d.h. für die Nutzerinnen und Nutzer sieht es so aus, als ob sie sich beispielsweise im Uni-Netz befinden. Alle Netzdienste in einem Firmen- Heim- oder Universitätsnetz können dann unterwegs so genutzt werden, als ob man vor Ort wäre. Sehr häufig geht es aber nur um einen einzigen Netzdienst, nämlich das Web. An der Universität Duisburg-Essen werden viele Dinge heute webbasiert erledigt. Allerdings erfordern viele Seiten, dass sich der Nutzer im IP-Adressbereich der Uni befindet. Warum also ein vollständiges VPN verwenden, wenn eigentlich nur die Verbindungen über die Ports 80 (http) und 443 (https) genutzt werden? Eine Möglichkeit http- und https-Verbindungen umzuleiten ist ein Web-Proxy, der auf Protokollebene zwischen dem Browser und dem Web vermittelt. Dazu muss aber ein dezidierter Proxy-Server betrieben werden, der von außerhalb des Uni-Netzes zugänglich ist. Alternativ realisiert ein sogenannter Socks-Proxy so etwas auf Socket-Ebene also über TCP/IP Ports.

Ein Tunnel sie alle zu knechten …

Alle aktuelle Browser unterstützen die Verbindung auch über einen Socks-Proxy. Wer Login-Zugriff per SSH auf einen Rechner in dem Zielnetz hat, kann sehr einfach einen Socks-Proxy per SSH-Tunnel realisieren. Das ist beispielsweise an der Universität Duisburg-Essen für alle Nutzer der Fall. Alle Mitarbeiter haben mit ihrer Unikennung Zugriff auf staff.uni-due.de und alle Studierende können die Maschine student.uni-due.de mit ihrer Kennung nutzen.

Linux/MacOS/Unix:

Unter unixoiden Betriebsystemen wie Linux und MacOS geht das sehr einfach mit Bordmitteln auf der Kommandozeile (hier mit staff.uni-due.de für Mitarbeiter):

ssh -N -D2000 <unikennung>@staff.uni-due.de

Der Parameter -N verhindert hier den Aufbau einer interaktiven Shell-Verbindung. Der Parameter -D gibt den lokalen Zugriffsport für den dynamischen Tunnel an. Diesen Port wählt man unter Unix geschickter Weise oberhalb von 1023, damit keine Root-Rechte erforderlich sind.

Windows:

Unter Windows benötigen Sie einen SSH-Clienten wie beispielsweise den quelloffen Putty.

Nach der Installation wird Putty folgendermaßen konfiguriert (hier staff.uni-due.de  für Mitarbeiter, Studierende verwenden student.uni-due.de):

putty_tunnel0

Dann wird der Tunnel mit dem lokalen Endpunkt Port 2000 (willkürlich gewählt) konfiguriert. Wichtig für einen Socks-Proxy ist die Einstellung „Dynamic“:

putty_tunnel1

Nach klick auf „Add“ ist der Tunnel eingerichtet. Sinnvollerweise speichert man das Profil nun ab. Vorsicht ist geboten bei der Checkbox „Local ports accept connection from other hosts“. Wer diese Option anwählt tunnelt womöglich andere Rechner oder gar Angreifer mit in das Universitätsnetz.

Betriebssystemunabhängig – die Browser-Konfiguration:

So konfiguriert man den Browser (hier z.B. Firefox, sorry ich verwende nur den englischsprachigen), damit er den Tunnel auch benutzt:

putty_tunnel2

Technisch gesehen wird nun jeder http-Request über den lokalen Port 2000 des Klienten abgewickelt, der ja über den (gesicherten) ssh-Tunnel mit dem Publikumsrechner im LAN der Uni verbunden ist.

Wenn der Tunnel erfolgreich in Betrieb genommen worden ist, kann man zum Beispiel auf www.wieistmeineip.de überprüfen, ob auch wirklich der Tunnel im Browser verwendet wird. Dort wird nun eine IP-Adresse aus dem Uni-Adressbereich 132.252.X.X angezeigt. Natürlich muß die Proxy-Einstellung immer wieder rückgängig gemacht werden, wenn der Tunnel wieder abgebaut wird. Zweckmäßig ist die Nutzung eines extra Browsers oder beispielsweise bei Opera die Verwendung der Schnelleinstellungen.

So ein Socks-Proxy funktioniert auch in Umgebungen, in denen herkömmliche VPN-Lösungen versagen (müssen), z.B. doppeltes NAT. Es ist auch möglich beliebig viele Klienten aus einer NAT Umgebung gleichzeitig zu verbinden, was bei einem VPN zu Problemen führen kann. Auch Unitymedia-Kunden mit IPv6-Stack ohne IPv4 profitieren von dieser Lösung.

socks-proxy

Übrigens bekommt Ihr Provider (oder das Internet-Cafe in dem Sie sich befinden) nicht mit was in dem Tunnel passiert, alles ist bis zum Socks-Proxy in der Uni verschlüsselt. Nach dem Tunnel, also ab staff.uni-due.de bzw. student.uni-due.de geht es aber wieder unverschlüsselt weiter. Zumindest Ihr Provider hat aber keine Chance diese Verbindungsdaten abzugreifen.Der Provider sieht nur die Verbindung zum Socks-Proxy. Gegen die Datenschnüffellei der NSA schützt das aber nicht wirklich, da der Traffic aus der Uni zu den Webseiten die Sie besuchen abgegriffen wird, was wirklich eine Frechheit ist!

Spezialitäten:

Wer mehr möchte, kann auch Programme die keine Socks-Proxys unterstützen mit dieser Technik ausstatten, indem man einen Wrapper wie z.B. tsocks einsetzt.

Es ist sogar möglich einen kompletten Stack über einen Socks-Proxy umzuleiten. Dazu wird das Tool tun2sock (bzw. badvpn) eingesetzt. Damit ist ein SSH-basiertes VPN realisierbar.

Für Kunden von Unitymedia mit neuem Ipv6-Stack ohne IPv4 wäre es damit möglich das Zwangs-NAT für alle Verbindungen zu überwinden.

Noch ein Tipp für die Besitzer eines Servers/virtuellen Servers oder eines Shellaccounts mit fester erreichbarer IP:

Wer von einem limitierten Internetzugang (z.B. NAT und kein Zugriff auf den Router) aus Serverdienste (Web, ssh, etc.) betreiben möchte, kann z.B. mit

ssh -R 3333:localhost:22 <gateway-maschine>

einen ssh-Server des nicht erreichbaren Rechers in einem NAT (oder in einem Ipv6-only-Netz) auf den Port 3333 auf einer Gateway-Maschine (die über eine öffentlich erreichbare IP-Adresse verfügt) umlenken, wenn auf der Gateway-Maschine in der Konfigurationsdatei /etc/ssh/sshd_config

GatewayPorts yes

(Neustart des sshd erforderlich) eingetragen wird.

So kann die versteckte Maschine per ssh auf den Port 3333 der Gateway-Maschine erreicht werden. Das klappt beispielsweise auch mit einem Server (z.B. auch Webserver, dann aber Port 80 weiterleiten) auf einem Smartphone (oder einem mobilen Roboter, wie ich das hier im Jahre 2009 realisiert habe) im UMTS-Netz, dass bei fast allen Providern auch per NAT betrieben wird!

nat-tunnel-server

Dazu sind natürlich auf der aus dem Internet erreichbaren Maschine Root-Rechte erforderlich.

Ohne Root-Rechte ist es etwas komplizierter so etwas zu realisieren, hier benötigt man zwei Tunnel:

auf der hinter einem NAT versteckten lokalen Maschine:

ssh -R 3333:localhost:22 <gateway-maschine>

auf der Gateway-Maschine mit öffentlicher IP:

server# ssh -g -L4444:localhost:3333 localhost

Dann kann nun über den Port 4444 der Gateway-Maschine per ssh auf die versteckte Maschine zugegriffen werden. Das funktioniert mit beliebigen Quellports, also auch mit Port 80. Die Beispiele beziehen sich auf die Unix-Kommandozeile aber sollten mit entprechenden Einstellungen auch unter Windows funktionieren, sofern man einen sshd für Windows installiert.

Vorausgesetzt wird immer, dass keine Firewall die Ports blockiert. Wenn man nicht über root-Rechte verfügt, muss man Ports oberhalb von 1023 wählen, es geht bis 65535 😉 .
Die Maschinen staff.uni-due.de und student.uni-due.de am ZIM der Universität Duisburg-Essen erlauben dieses erweiterte Verfahren übrigens nicht, da sie durch Firewalls geschützt sind. Einen Socks-Proxy können Sie aber mit diesen Maschinen aufbauen.

]]>
Die neue Zeit-API https://blogs.uni-due.de/zim/2012/12/18/die-neue-zeit-api/ https://blogs.uni-due.de/zim/2012/12/18/die-neue-zeit-api/#respond Tue, 18 Dec 2012 22:10:44 +0000 https://blogs.uni-due.de/zim/?p=1631 Weiterlesen ]]> Am 21. Februar 1946 erschien die erste Ausgabe der Zeit. Seitdem haben Journalisten, Redakteure, Drucker und Archivare einen riesigen Artikel-Berg angehäuft. Führen wir uns den technologischen Wandel vor Augen, der seit dem stattgefunden hat, wird uns die Herausforderung bewusst, diesen gedruckten Schatz der Öffentlichkeit nutzbar (also digital) zur Verfügung stellen zu wollen. 2006 begann die Zeit mit diesem Projekt: Man lese Die Digitalisierung des ZEIT Archivs .

Nun ist eine Programmierer-Schnittstelle zu den Metadaten des Archives (also eine API) als Beta-Version online geschaltet worden. Die Nachricht kam Freitag 23.11. über den Open-Data-Blog der Zeit. Die Idee einer solchen API kommt aus der Erkenntnis, dass durch die Digitalisierung der Artikel, deren Inhalte noch längst nicht aus dem Dunkelgrau des Kellers befreit sind. Dazu bedarf es intelligenter und praktikabler Endanwendungen, die auf die Daten zugreifen, sie auswerten und anzeigen. Die Veröffentlichung der Schnittstelle ist als Einladung an Programmierer zu verstehen, sich mit den Daten auseinanderzusetzen und Nutzungs-Szenarien zu entwickeln.

Das wollte ich mir auch mal anschauen. Startpunkt ist die Web-Site des Projektes http://developer.zeit.de/. Da liest man dann am besten erstmal die Nutzungsbedingungen. Wenn man kein kommerzielles Interesse hat, ist man schon mal auf der richtigen Seite. Man muss aber zwischen der Nutzung der Schnittstelle und der Nutzung der Inhalte der Artikel unterscheiden. Für letztere gelten natürlich die Urheberrechte der Autoren und die allgemeinen Nutzungsbedingungen von Zeit-Online. Ach ja: Zur Zeit bietet die API noch keinen Zugriff auf die Text-Inhalte der Artikel. Zu jedem Artikel gibt es aber einen Link zu einer Zeit-Online-Webseite, auf der der Text angezeigt wird.

Ohne Registrierung geht heute natürlich nichts. Unter „Quick Start“ kann das geschehen, in dem man Name und Email-Adresse angibt. Dann bekommt man einen Zugriffscode, den man für jede Schnittstellen-Abfrage verwenden muß. Die Registrierung bewirkte bei mir im IE aber einen Javascript-Fehler, sodass ich auf den Firefox ausgewichen bin. So hatte ich dann meinen Zugang und konnte über „API Explorer“ auf den Developer-Web-Seiten erste Abfrageerfahrungen bekommen.

Technisch ist die API eine sogenannte REST-Schnittstelle. Das bedeutet, dass man an einen Web-Server eine HTTP-Anfrage stellt, und dieser statt mit einer Web-Seite mit einem einfach strukturiertem Text-Output antwortet, der das Ergebnis der Anfrage enthält. Für die Output-Formatierung wird JSON verwendet. Das sieht zum Beispiel so aus: Die Anfrage

http://api.zeit.de/author?q=*Martenstein*

ergibt den Output

{
  "matches": [
  {
    "type": "author",
    "uri": "http://api.zeit.de/author/Harald-Martenstein",
    "value": "Harald Martenstein"
    },
  { 
    "type": "author",
    "uri": "http://api.zeit.de/author/Martenstein",
    "value": "Martenstein"
    }
  ],
  "found": 2,
  "limit": 10,
  "offset": 0
  }

Der von mir geschätzte Autor Harald Martenstein muss hier als Versuchskaninchen herhalten. Aber wie stellt man so eine Anfrage eigentlich unabhängig von dem API-Explorer auf der Web-Seite. Am einfachsten kann man versuchen die Anfrage als URL in seinem Web-Browser einzugeben. Man muss aber noch den Zugangscode als weiteren Parameter mit übergeben. Unsere Anfrage lautet dann z.B.

http://api.zeit.de/author?q=*Martenstein*&api_key=qwert1234567890

Firefox zeigt mir das Ergebnis direkt als Text an. Der Internet-Explorer weiss aber nichts damit anzufangen und bietet mir an, es abzuspeichern. Danach kann ich es dann mit einem Text-Editor öffnen.

Soweit der erste Eindruck. Es ergeben sich jetzt drei Fragenkomplexe:

  • Die Frage nach den Details der Schnittstelle: Welche Abfragemöglichkeiten bietet die Schnittstelle im Detail und wie sehen dann jeweils die Antworten aus. Wie sind die Daten technisch strukturiert.
  • Die Frage nach technischen Möglichkeiten: Wie kann ich mit einer solchen Schnittstelle umgehen, und sie in Anwendungen einbauen.
  • Die Frage nach dem Inhalt: Was steckt denn wirklich drin in dieser Datenbank und welche Qualität hat der Inhalt.

Die Frage nach den Details

Es gibt verschiedene sogenannte „Endpunkte“. Oben habe ich den Endpunkt „author“ verwendet. Jeder Endpunkt bietet die Möglichkeit einer Suche an (http://api.zeit.de/author?q=…) und die Möglichkeit mit der Angabe einer Id ein konkretes Datenobjekt anzusprechen (http://api.zeit.de/author/Martenstein). Bei einer Suche bekommt man die Liste der Suchergebnisse (s.o.) angezeigt, aber beschränkt auf eine Anzahl „limit“. Dieser Parameter wird defaultmäßig auf 10 gesetzt. Man kann Ihn aber verändern in dem man zB die Anfrage http://api.zeit.de/author?q=*stein*&limit=20 formuliert. Der Ausgabe-Parameter „found“ sagt uns, dass 129 Objekte gefunden wurden, aber nur 20 werden angezeigt. Die nächsten 20 bekommt man mit derAbfrage http://api.zeit.de/author?q=*stein*&limit=20&offset=20 .

Ruft man ein konkretes Objekt auf, so bekommt man auch alle damit verknüpften anderen Objekte angezeigt. Bei einem Autor ist das die Liste der Artikel dieses Autors, und bei einem Artikel (Endpunkt „content) ist es die Liste der Autoren und eine Liste von Schlagwörtern (Endpunkt „keyword“) und weiteres. Z.B ergibt dieser Martenstein-Artikel über „Mainstream“ und „Schwarminteligenz“ mit der URI (Uniform Resource Identifier) http://api.zeit.de/content/3iPD4MgYlRa4rr1zJCHFp0 den Output

{
  "creators": [
  {
    "uri": "http://api.zeit.de/author/Harald-Martenstein",
    "rel": "author",
    "name": "Harald Martenstein"
    }
  ],
  "subtitle": "Er beherrscht Medien, treibt Minister aus dem Amt und wechselt alle paar Jahre die Richtung: Der Mainstream hat gewaltige Kraft \u2013 er ist der Geist der Mehrheit. Aber hat er deshalb recht? Ein Essay",
  "title": "Der Sog der Masse",
  "release_date": "2011-11-10T06:00:00Z",
  "uri": "http://api.zeit.de/content/3iPD4MgYlRa4rr1zJCHFp0",
  "relations": [
  {
    "uri": "http://api.zeit.de/content/1xD2amStxoI8VBLUAzhWQm",
    "rel": "related",
    "name": "Der Sog der Masse"
    },
  {
    "uri": "http://api.zeit.de/content/63eeTFG26WQ2I0lSJCuIsg",
    "rel": "related",
    "name": "Der Sog der Masse"
    }
  ],
  "supertitle": "Mainstream",
  "href": "http://www.zeit.de/2011/46/DOS-Mainstream",
  "teaser_text": "Er beherrscht Medien, treibt Minister aus dem Amt und wechselt alle paar Jahre die Richtung: Der Mainstream hat gewaltige Kraft \u2013 er ist der Geist der Mehrheit.",
  "keywords": [
    {
      "uri": "http://api.zeit.de/keyword/guido-westerwelle",
       "rel": "person",
       "name": "Guido Westerwelle"
       },
     {
       "uri": "http://api.zeit.de/keyword/angela-merkel",
       "rel": "person",
       "name": "Angela Merkel"
       },
    {
       "uri": "http://api.zeit.de/keyword/karl-theodor-zu-guttenberg",
       "rel": "person",
       "name": "Karl-Theodor zu Guttenberg"
       },
     {
       "uri": "http://api.zeit.de/keyword/harald-schmidt",
       "rel": "person",
       "name": "Harald Schmidt"
       },
    {
      "uri": "http://api.zeit.de/keyword/gruene",
      "rel": "organization",
      "name": "Gr\u00fcne"
      },
    {
      "uri": "http://api.zeit.de/keyword/usa",
      "rel": "location",
      "name": "USA"
      },
    {
      "uri": "http://api.zeit.de/keyword/bundestag",
      "rel": "subject",
      "name": "Bundestag"
      },
    {
      "uri": "http://api.zeit.de/keyword/schwarmintelligenz",
      "rel": "subject",
      "name": "Schwarmintelligenz"
      },
    {
      "uri": "http://api.zeit.de/keyword/galileo-galilei",
      "rel": "person",
      "name": "Galileo Galilei"
      }, 
    {
      "uri": "http://api.zeit.de/keyword/talkshow",
      "rel": "subject",
      "name": "Talkshow"
      }
    ],
  "teaser_title": "Der Sog der Masse",
   "categories": [
     {
       "uri": "http://api.zeit.de/department/gesellschaft",
       "rel": "department",
       "name": "Gesellschaft"
       },
    {
      "uri": "http://api.zeit.de/product/zei",
      "rel": "product",
      "name": "DIE ZEIT"
      },
    {
      "uri": "http://api.zeit.de/department/zeitgeschehen",
      "rel": "sub_department",
      "name": "Zeitgeschehen"
      }
    ]
  }

Darin ist auch der Parameter „href“ verborgen, womit ein Link auf den Arikel im Zeit-Online-Angebot gegeben wird: http://www.zeit.de/2011/46/DOS-Mainstream

Die Frage nach der Technik:

Am besten begibt man sich für den Anfang auf eine Linux-Kommandozeile. Da gibt es die Kommandos „wget“ und „curl“. Ich beziehe meine Beschreibung auf curl. Studenten oder Mitarbeiter unserer Uni können sich auf einen der Linux-Login-Server stud.uni-due.de oder staff.uni-due.de mit ihrer Unikennung einloggen. Da ist curl und auch wget verfügbar. Der Aufruf von curl hat im einfachsten Fall die Form

curl URL

Man sollte die URL aber in Hochkomma einschließen. Das Zeichen &, das ja in solchen URLs oft vorkommt, würde sonst vom Kommandointerpreter falsch interpretiert. Details zu curl erfragt man mit curl --help . Die Zeit-API bietet auch die Möglichkeit den Zugangscode als einen http-Header mit zusenden und nicht als Parameter im Query-String, wie wir es oben gemacht haben. Dann würde eine Schnittstellen-Anfrage so aussehen.

curl -H 'X-Authorization: 1234567890qwert' 'http://api.zeit.de/...die Anfrage...'

Wir wollen nun anreißen, wie man so eine REST-Schnittstelle mit JSON-Output in einer AJAX-Web-Anwendung nutzen kann. Die vier Buchstaben AJAX bedeuten, dass eine vom Web-Browser dargestellte Web-Seite Javascript-gesteuert Daten per http nachläd, diese mit Javascript verarbeitet und durch dynamische Veränderung der Seitenstruktur die Daten darstellt (dynamisches HTML).

Um mit Javascript einen HTTP-Request abzusetzen stellen die heutigen Browser ein spezielles Objekt bereit. Zuerst muss man davon eine Instanz erzeugen:

var httpRequest = new XMLHttpRequest();

Wir benötigen eine Funktion, die die Antwort des Request auswertet und auf das Request-Objekt als globale Variable zugreifen kann. Sagen wir

function antwort_auswerten() {
  …
  }

Diese Funktion muss mit dem Request-Objekt verbunden werden:

httpRequest.onreadystatechange = antwort_auswerten;

Mit dem folgenden Befehl wird der Request formuliert, aber noch nicht gesendet:

httpRequest.open('GET', url);

Der Befehl führt zu einem Fehler, wenn die Sicherheitseinstellung des Browsers die Aktion nicht zuläßt. Beim Internet-Explorer trat dieses Problem bei mir auf. Ich konnte es lösen, indem ich die Site „api.zeit.de“ unter „Extras, Internetoptionen, Sicherheit, lokales Internet“ unter „Sites, erweitert“ aufgenommen habe, und den Bereich „lokales Internet“ von der Sicherheitsstufe „mittel“ nach „niedrig“ oder „sehr niedrig“ verschoben habe. Bei „niedrig“ wird man bei jedem Request nochmal gefragt, ob man ihn zulassen will. Bei „sehr niedrig“ geht es einfach durch. Als sicherheitskritisch wird hier auch bewertet, wenn eine Web-Seite eines Servers A (bei mir www.uni-due.de) Inhalte von einem Server B (hier api.zeit.de) laden will.

Es bietet sich an, den Open-Befehl in ein try-catch-Konstrukt zu nehmen:

try {
  httpRequest.open('GET', url);
  } catch(e) {
  alert("Aufgefangener Fehrler: " + e.description);
  }

Danach setzt man noch den Autorisierungs-Header und sendet den Request.

httpRequest.setRequestHeader('X-Authorization','123456789qwert');
httpRequest.send();

Das Warten auf die Antwort geschieht nun versteckt im Hintergrund. Irgent wann schlägt die Antwort auf, was bewirkt, dass die Funktion antwort_auswerten aufgerufen wird. In dieser Funktion sollte man dann erst mal prüfen ob die Schnittstelle nicht mit einem Fehler geantwortet hat. Wenn httpRequest.readyState den Wert 4 hat und httpRequest.status den Wert 200, dann ist alle Ok und man kann den Resposetext verarbeiten. JSON liefert genau das Textformat in dem man ein strukturiertes Datenobject innerhalb eines Javascript-Programmen serialisiert schreiben würde. Also könnte man einfach so vorgehen

var response = new Object();
eval("response = " + httpRequest.responseText);

Allgemein wird davon aber abgeraten, weil es ein Sicherheitsrisiko beinhaltet. Schließlich führt man ja einen Programmcode aus, den man vorher nicht gesehen hat. Viele Browser bieten heute einen JSON-Parser als ein Objekt an. Dann kann man

response = JSON.parse(httpRequest.responseText);

schreiben. Leider muss man bei der AJAX-Programmierung viel Aufwand hineinstecken, wenn das Ergebnis in beliebigen Browsern lauffähig sein soll.

In dem Objekt response ist nun der gesamte Inhalt der Antwort strukturiert enthalten. Haben wir z.B. einen konkreten Autor abgefragt (z.B. http://api.zeit.de/author/Harald-Martenstein) dann ist response.matches die Liste seine Artikel, response.matches[0] ist der erste Artikel und response.matches[0].title beinhaltet den Titel des Artikeln und response.matches[0].href die URL, die auf den Artikel bei Zeit-Online verweist. Nun kann man sich der Möglichkeiten dynamischer Webseiten Web-Seiten bedienen und die abgerrufene Information in der Webseite darstellen (man siehe z.B. Neue Knoten erzeugen und in Baumstruktur einhängen bei SELFHTML).

Die Frage nach dem Inhalt

Verlassen wir zuletzt wieder die Technik um einige Dinge zu erwähnen, die mir zum Inhalt aufgefallen sind. Das sind gewissermaßen Unzulänglichkeiten des Datenbestandes, doch will ich ihre Erwähnung nicht als Kritik verstanden sehen. Es soll stattdessen deutlich werden wie schwierig der Aufbau einer solchen Datenbank ist.

Der erste Punkt ist, dass die Autoren oft mehrfach vorkommen: mit unterschiedlichen Schreibweisen und IDs. Harald Martenstein finden wir als author/Harand-Martenstein (72 Artikel), als author/Martenstein (2 Artikel) und als author/martenstein (1 Artikel). Dazu kommt, dass das CMS von Zeit-Online offenbar noch mehr Artikel kennt. Die Seite http://www.zeit.de/autoren/M/Harald_Martenstein/index.xml listet 591 Artikel auf. Hier ist also noch ein ToDo, um alle Artikel eines Autor zu erfassen und auch nur einem einzigem Autoren-Objekt zuzuordnen.

Ein anderer Aspekt bezieht sich auf die Information zu einem einzelnen Artikel. Da gibt es die Attribute „title“, „subtitle“, „supertitle“, „teaser_title“ und „teaser_text“. Vermutlich ist nur „title“ zwingend und immer vorhanden. Alle anderen Attribute sind optional. Mir ist auch nicht klar ob sie immer im gleichen Sinne verwendet werden. Das macht es schwierig eine einheitliche Darstellung eines Artikels zu programmieren.

Ich bin gespannt, wie sich die Sache weiterentwickeln wird. Welche Wege werden eingeschlagen, um die Meta-Datenbank zu verbessern, und welche Anwendungen (APPs) werden entstehen? Und ich bin natürlich gespannt, welche interessanten alten Artikel man erstöbern kann.

]]>
https://blogs.uni-due.de/zim/2012/12/18/die-neue-zeit-api/feed/ 0
myUDE präsentiert – online und in 3D https://blogs.uni-due.de/zim/2012/10/30/myude-praesentiert-online-und-in-3d/ Tue, 30 Oct 2012 08:00:59 +0000 https://blogs.uni-due.de/zim/?p=1566 Weiterlesen ]]> Seit dem 15.10.2012 ist die offizielle Campus-App der Universität Duisburg-Essen – myUDE (www.myUDE.de) – online und in den Stores von Apple und Google verfügbar. Doch wie sollen die Inhalte präsentiert werden? Powerpoint, Prezi, oder mal mit was Neuem?

Powerpoint ist für Präsentationen der Standard und immer eine sichere Bank. Jedoch wird es an vielen Stellen genutzt, so dass auch die seit einiger Zeit verfügbaren SmartArt-Elemente mittlerweile zu genüge bekannt sind. Was gibt es also für Alternativen, die zudem auch noch online eingesetzt werden können?

Hier ein kleiner Überblick:

* Prezi (http://prezi.com)

Auch Prezi ist schon seit längerem bekannt, bietet jedoch einen sehr interessanten Ansatz. Auf einer unendlichen Fläche werden Bilder und Texte abgelegt. Virtuelle Folien werden angelegt und der Pfad zwischen diesen vorgegeben. Durch Größenunterschiede der Folien und Verschiebungen auf der Fläche entstehen interessante Effekte. Prezi verwendet Flash; verfügt mittlerweile aber auch über Apps, z. B. für iPad, die ohne Flash auskommen. Weiterhin gibt es einen EDU-Zugang (http://edu.prezi.com). Dieser hat den Vorteil, dass eigene Präsentationen auch privat bleiben können.

Ein Beispiel: http://prezi.com/d3lswto1mebc/free-falling-through-prezi/

* impress.js (http://bartaz.github.com/impress.js/#/bored)

Auch Impress.js ist eine Werkzeug, mit dem sich beeindruckende Präsentationen erstellen lassen. Grundlage ist eine Javascript-Library, die die wesentlichen Elemente bereitstellt. Wie bei Prezi werden auf einer unendlichen Fläche Elemente abgelegt. Besonderheit ist hier, dass der Folienwechsel in allen drei Dimensionen erfolgen kann. Dies setzt beim Erstellen ein gutes räumliches Vorstellungsvermögen voraus. Mit Strut (http://tantaman.github.com/Strut/web-dist/index.html) und Impressionist (http://hsivaram.com/impressionist/0.1/) stehen hier jedoch zwei Online-Editoren bereit, die einen Teil der Arbeit erledigen können. Da es sich bei impress.js um eine einfache Javascript-Datei handelt, lässt sich diese auch gut an die eigenen Bedürfnisse anpassen und auf dem eigenen Webserver in Präsentationen einbinden.

Beispiele und Webseiten, die impress.js verwenden sind auf der Webseite https://github.com/bartaz/impress.js/wiki/Examples-and-demos aufgeführt. Ein kleines Tutorial findet sich unter: http://tutorialzine.com/2012/02/css3-product-showcase/.

Was mit impress.js möglich ist, zeigt z. B. das Beispiel über Responsive Design: http://johnpolacek.github.com/WhatTheHeckIsResponsiveWebDesign-impressjs/#/title

* jmpress.js (http://shama.github.com/jmpress.js/#/home)

Jmpress.js ist eine Portierung von impress.js nach jQuery mit dem Ziel, dieses auch für Webauftritte zu verwenden. Es gibt sogar die gleiche Präsentation (http://sokra.github.com/jmpress.js/examples/impress/). jmpress.js wurde jedoch nicht nur portiert, sondern auch um weitere Funktionen ergänzt. So gibt es nun Themes, es sind automatisierte Animationen möglich und in einzelne Elemente kann hineingezoomt werden. Es ist sogar möglich, Animationen bzw. Präsentationen zu verschachteln. Weiterhin können die Funktionen über Plugins erweitert werden.

Dokumentation und Beispiele für jmpress.js sind zu finden unter http://shama.github.com/jmpress.js/docs/. Auch hier gibt es ein Tutorial http://tympanus.net/codrops/2012/04/05/slideshow-with-jmpress-js/

Beispiele für Präsentationen sind http://sokra.github.com/jmpress.js/ oder http://sasson.rtl-themes.co.il/impress#/.

myUDE-Präsentation

Für die eigene Präsentation habe ich mich entschieden, jmpress.js zu verwenden. Dieses bietet die Möglichkeit, automatisierte Animationen zu erstellen. Das Beispiel beruht auf der Vorlage aus dem Tutorial von Codrops:

http://www.uni-due.de/zim/kerkewitz/beispiele/myude/index.html

Alternativen:

Weitere Alternativen um interessante Möglichkeiten, Präsentationen oder auch Webseiten zu gestalten sind die Folgenden. Teilweise verfügen diese auch über einen eigenen Editor:

– dizzi.js http://dizzy.metafnord.org/#intro/ (Editor: http://dizzy.metafnord.org/editor/

– reveal.js http://lab.hakim.se/reveal-js/ Editor http://www.rvl.io

– sliderocket http://www.sliderocket.com, Flash-Ausgabe, jedoch auch mit kostenfreiem edu-Zugang

– sowie http://zoom.it/ oder auch http://janne.aukia.com/zoomooz/

 

 

]]>
Raspberry Pi versus Cray XT 6m Supercomputer – MD5-Hash-Kollisionen berechnen mit dem Raspberry Pi https://blogs.uni-due.de/zim/2012/08/20/raspberry-pi-versus-cray-xt-6m-supercomputer-%e2%80%93-md5-hash-kollisionen-berechnen-mit-dem-raspberry-pi/ https://blogs.uni-due.de/zim/2012/08/20/raspberry-pi-versus-cray-xt-6m-supercomputer-%e2%80%93-md5-hash-kollisionen-berechnen-mit-dem-raspberry-pi/#respond Mon, 20 Aug 2012 16:23:13 +0000 https://blogs.uni-due.de/zim/?p=1496 Weiterlesen ]]> Der Raspberry Pi ist ein kleines Board mit ARM11- Prozessor (ein ARM1176JZF-S um genau zu sein, mit ARMv6 Befehlssatz), welches über einen 100 Mbit Ethernet-Port, HDMI, Analog Video, GPIO-Pins, SPI, I²C, UART und zwei USB-Schnittstellen verfügt. Der Prozessor ist übrigens identisch mit der im Apple iPhone der ersten Generation verbauten CPU.

Das kommt in der Verpackung, eine SD-Karte ist nicht dabei.

Das kommt in der Verpackung, eine SD-Karte ist nicht dabei.

Das Besondere ist der Preis, der Raspberry Pi kostet nur 25-30$ und ist für den Einsatz in Schulen vorgesehen. In England ist er inklusive T-Shirt und Versand nach Deutschland für 34 € zu haben. Aufgrund seiner niedrigen Leistungsaufnahme von nur 3,5 Watt (lüfterlos und ohne Kühlkörper), seiner geringen Größe (etwa Kreditkartenformat, aber durch die Konnektoren ca. 1,5 cm hoch) und des günstigen Preises eignet sich der Raspberry Pi für energiesparende Eigenentwicklungen wie etwa ein NAS, einen kleiner Router oder ein eigenes kleines Mediacenter. Als Massenspeicher fungiert eine SD-Karte, die beispielsweise mit einer angepassten Linux-Version, wie z.B. Raspbian “wheezy”, einem modifizierten Debian, bespielt werden kann.

Die Verwendung der angepassten Distribution ist sehr zu empfehlen, da diese Version im Gegensatz zu den Debian-ARM Versionen die Hardware Floating-Point-Unterstützung des ARM11 auch wirklich ausnutzen. Bei der Übersetzung von Source-Paketen sollte auch immer die GCC Compiler-Optionen

-mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard

angegeben werden, damit wirklich die Hardware-Floating-Point Unterstützung aktiviert wird. Ansonsten werden die Floating-Point-Operationen per Library in Software durchgeführt, was naturgemäß sehr viel länger dauert (Faktor 10). Die Ubuntu-Arm Distribution ist übrigens nicht für den Raspberry Pi geeignet, da sie als Mindestanforderung den ARMv7-Befehlssatz (ab ARM Cortex A8) voraussetzt.

Kleine ARM-Kunde und Tablet-Tipps

ARM-Prozessoren, bzw. von den Herstellern in System on  a Chip (SoC)  integrierte ARM-Kerne, treiben übrigens so ziemlich alle aktuellen Android Smartphones und Tablets an. Auch die Apple-A5 SoC im iPhone und iPad verwenden ARM-Prozessorkerne. Übrigens sind neben dem Hauptprozessor für die Benutzerschnittstelle (auf dem das Android oder das  iOS läuft) auch fast immer mehrere zusätzliche ARM-Kerne in einem Mobiltelefon verbaut. Leistungsschwächere, aber energiesparende “kleinere” ARM-Varianten werden beispielsweise für den Kommunikationsprozessor (das “Radio”) des Telefons eingesetzt, welcher die GSM und UMTS-Kommunikation abwickelt. Auch in fast allen Bluetooth-Chipsätzen und  GPS-Chipsätzen steckt jeweils ein weiterer kleiner ARM-Kern. Die Wahrscheinlichkeit ist also sehr hoch, dass in Ihrem Smartphone vier oder mehr ARM-Kerne in Chipsätzen “verbaut” sind.

Die Nummerierung der Befehlssätze ARMvX darf nicht mit der der Bezeichnung der Architektur verwechselt werden, siehe auch http://de.wikipedia.org/wiki/ARM-Architektur. Übrigens findet sich hier eine schöne Zuordnung von ARM-Befehlssatzversionen zu den korrespondierenden ARM-Architekturen und den zugehörigen Handelsnamen der SoC ARM-Implementierungen einiger Hersteller. Diese Aufstellung kann bei der Auswahl eines Android-Tablets in Hinsicht auf zu erwartende CPU-Leistung sehr hilfreich sein. (Unterhalb Cortex A8 – Finger weg!)  Brauchbare Tablets mit Cortex A8 sind schon für knapp über 100 Euro erhältlich. Eine dem iPad 3 vergleichbare Performance kann aber erst einem Cortex A9 basierten Gerät mit mehreren Kernen abverlangt werden.

MD5-Hash-Kollision

Um die Leistungsfähigkeit der ARM11-Prozessors auf die Probe zu stellen, wurde kein klassischen Benchmark eingesetzt, sondern die MD5 Collision Demo von Peter Selinger für den Raspberry Pi kompiliert. Hier bei handelt es sich um einen Algorithmus, der einen Angriff auf einen MD5 Hashwert vornimmt und eine Kollision erzeugt. Mit so einer Hash-Kollision kann zweites Dokument oder ein zweites Binary erzeugen werden, dass einen identischen MD5 Hash zu einer Originaldatei besitzt. Der Algorithmus startet immer mit einem Zufallswert für die Berechnung einer Hash-Kollision, so dass es immer unterschiedlich lange dauert bis eine Kollision gefunden wird. Startet man den Prozess aber mehrmals auf einer Maschine mit mehreren Kernen, so steigt die Wahrscheinlichkeit recht schnell an ein Ergebnis zu kommen. Der Algorithmus parallelisiert also nicht die selber die Berechnung, sondern profitiert vom abweichenden Zufallsstartwert auf jedem Kern.

PC versus …

Getestet wurde zunächst mit einem single core Atom Netbook (2 Stunden 46 Minuten) und dann mit einer 8-Kern-Maschine (zwei Xeon Quad Core Prozessoren), dem Publikumsrechner des ZIM für Mitarbeiter der Hochschule. Diese Maschine benötigte nur 16 Minuten und 6 Sekunden um eine Kollision zu finden. Wohlgemerkt einer der Kerne hatte eine Kollision gefunden, der letzte Kern benötigte fast drei Stunden. (siehe Abbildung)

Das top-Kommando ("1" für die Ansicht aller Kerne)

Das top-Kommando ("1" für die Ansicht aller Kerne)

… CRAY versus ….

Den Cray XT 6m Supercomputer der Universität Duisburg-Essen konnte ich bereits im Juni 2010 mit der gleichen „Rechenaufgabe“ testen. Ich hatte seinerzeit allerdings nur 300 der insgesamt 4128 Kerne zur Verfügung, einer der Kerne fand nach 56 Sekunden eine Hash-Kollision. Auf der Cray kann ein Job automatisiert auf allen zur Verfügung stehenden Kernen gestartet werden.

… Raspberry PI

Und der gute Raspberry Pi? Ein Testlauf brachte nach 30 Stunden und 15 Minuten eine Hash-Kollision zum Vorschein. Wie beschrieben, es handelt sich um keinen wirklichen Benchmark. Zwei weitere Durchgänge endeten nach 19Stunden 10 Minuten und 29 Stunden und 28 Minuten. Aber wie sieht denn nun die Energiebilanz des Raspberrys im Vergleich mit der Cray aus?

Preiswerter und leiser als ein Cray Supercomputer bei etwa gleichem Energieverbrauch bezogen auf die Rechenleistung

Preiswerter und leiser, aber auch sehr viel langsamer als ein Cray Supercomputer bei etwa gleichem Energieverbrauch bezogen auf die Rechenleistung

Die zwei Cray-Schränke an der Universität Duisburg-Essen benötigen je 40kW und die erzeugte Wärme per Klimatisierung abzuführen wird jeweils die gleiche Leistung benötigt. Also insgesamt 160 KW bzw. umgerechnet auf den im Experiment genutzten Anteil der 300 Kerne ca. 11.6 KW. Der Energieverbrauch in 56 Sekunden beträgt dann 0,18 KWh. Der Raspberry Pi nimmt eine Leistung von 0,0035 KW auf und verbraucht daher in 30,25 Stunden 0,106 KWh. Wenn man die Klimatisierung nicht berücksichtigen würde, ergäbe sich überraschenderweise ein etwa ähnlicher Energieverbrauch pro Rechenleistung!

]]>
https://blogs.uni-due.de/zim/2012/08/20/raspberry-pi-versus-cray-xt-6m-supercomputer-%e2%80%93-md5-hash-kollisionen-berechnen-mit-dem-raspberry-pi/feed/ 0
Timelines – Zeitleisten im Web (3) https://blogs.uni-due.de/zim/2012/04/28/timelines-zeitleisten-im-web-3/ Sat, 28 Apr 2012 12:00:27 +0000 https://blogs.uni-due.de/zim/?p=1293 Weiterlesen ]]> In zwei Blog-Einträgen wurden schon Zeitleisten eingeführt (https://blogs.uni-due.de/zim/2011/11/04/timelines-zeitleisten-im-web-1/) und dargestellt (https://blogs.uni-due.de/zim/2011/11/08/timelines-zeitleisten-im-web-2/).

Mit Timeline von Verite (http://timeline.verite.co) gibt es nun eine weitere Javascript-Library, die ihren Fokus auf das Einbinden von verschiedenen Medien und Medieninhalten gelegt hat. Schon implementiert sind Schnittstellen zu Twitter, YouTube, Flickr, Vimeo, Google Maps und Soundcloud. Weitere sollen folgen. Praktisch ist, dass Links einfach in jedes Feld eingegeben werden können; sie werden automatisch erkannt und in der Ausgabe richtig dargestellt. Über CSS-Einstellungen kann die Ausgabe angepasst werden.

Die Anleitung auf der Seite ist gut und es existiert auch ein Generator für Embeded Code. Vorhanden ist auch schon ein WordPress-Plugin (http://wordpress.org/extend/plugins/timeline-verite-shortcode/).

Die Eingabe-Daten werden über http://de.wikipedia.org/wiki/JSON eingelesen. JSON ist ein kompaktes Datenformat und wird zum Teil als Ersatz für XML verwendet. Es ist jedoch immer auf die Einhaltung der Syntax zu achten. Für die Fehlerbehebung kann ein Online-Tool (http://jsonlint.com/) helfen. Wer der Cloud nicht traut kann sich auch ein Tool installieren; für Mac z. B. Jason (http://olivierlabs.com/jason/). Eine weitere Eingabemöglichkeit ist die Verknüpfung mit einem Google-Dokument. Hierfür gibt es auch eine Vorlage.

Ein Nachteil hat Timeline zur Zeit: Geräte mit Touchscreens werden noch nicht richtig unterstützt. Aber dies ist erkannt und soll sich in einer der nächsten Versionen ändern.

Auch zu Timeline gibt es ein Beispiel mit einigen Daten aus UDE seit der Gründung. Bei den Mercator-Professuren wurden die Vorträge eingebunden, bei „Poet in Residence“ jeweils das zugehörige Plakat.

Hier geht es zum Beispiel:

 

Fazit: Timeline ist ein Open-Source-Projekt, bietet eine schöne Zeitleiste und einfache Möglichkeiten Multimedia-Inhalte einzubinden.

]]>
Radio-WebApp mit dem jQuery Mobile Framework https://blogs.uni-due.de/zim/2012/02/23/radio-webapp-mit-dem-jquery-mobile-framework/ Thu, 23 Feb 2012 08:00:11 +0000 https://blogs.uni-due.de/zim/?p=1109 http://de.wikipedia.org/wiki/Webapp) sind populär. Doch wie lässt sich das eine mit dem anderen verbinden? Wie aufwändig ist es, diese selbst zu erstellen? Weiterlesen ]]> Mobile Geräte sind populär, WebApps (http://de.wikipedia.org/wiki/Webapp) sind populär. Doch wie lässt sich das eine mit dem anderen verbinden? Wie aufwändig ist es, diese selbst zu erstellen?

Hier gibt es sogenannte Frameworks, mit denen einfach, auch umfangreiche mobile WebApps zu erstellen. Die folgende, unvollständige Liste enthält Frameworks, die frei nutzbar und zudem nicht auf eine bestimmte Architektur beschränkt sind:

Doch wie sieht eine solche WebApp aus? Ein Beispiel mit jQuery Mobile!

  1. Zuerst wird eine Idee für eine App benötigt. Hier wird der Stream von CampusFM (http://campusfm.info/), dem Campus-Radio der Universität Duisburg-Essen, so aufbereitet, dass er schnell von über eine Webseite auf einem mobilen Gerät aufgerufen werden kann.
  2. Anschließend wird das Grundgerüst der Webseite erstellt. Hier macht jQuery Mobile folgenden Vorschlag (http://jquerymobile.com/demos/1.0.1/docs/pages/page-anatomy.html):
    <!DOCTYPE html> <html> <head> <title>Page Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" /> <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script> </head> <body> ...content goes here... </body> </html> 
  3. Zuletzt ist der Aufruf notwendig, um den Audio-Stream darzustellen.
    <object id="musik" type="video/quicktime" height="48" width="250" data="http://132.252.179.253:8000/listen.pls"> <param name="autoplay" value="false" /> <param name="loop" value="false" /> <embed id="musik" type="video/quicktime" height="48" width="250" data="http://132.252.179.253:8000/listen.pls" controller="false" autoplay="false" loop="false" > </embed> </object> 

    Auch wenn das gewählte Framework grundsätzlich für andere Geräte, z. B. Android, eine richtige Darstellung liefert, liegt der berühmte Teufel im Detail. Quicktime ist auf iOS direkt nutzbar, auf anderen Geräten leider nicht immer. Jedoch gibt es hier Abhilfe durch HTML5. Der Aufruf lautet dann:

    <audio src="http://132.252.179.253:8000" controls> Der Browser unterstützt dieses Audio-Element nicht.</audio> 

    HTML5 funktioniert bei iOS und ist auch umfangreich von Apple dokumentiert (Link-1, Link-2). HTML5 funktioniert dann auch bei anderen Geräten, wenn der dortige Browser HTML5 unterstützt. Welche Audio-Formate grundsätzlich vom Gerät unterstützt werden, kann z. B. auf der folgenden Seite überprüft werden:  http://textopia.org/androidsoundformats.html. Bei Android-Geräten kann es erforderlich sein, dass ein anderer Browser, z. B. Opera, nachinstalliert wird.

Das zusammengesetzte Ergebnis ist dann auf dem folgenden Bild zu sehen.

Die Links zu den beiden Versionen sind zu finden unter: http://www.uni-due.de/zim/kerkewitz/beispiele/index.html oder direkt unter:

Über diese Links können die Webseiten auch auf den Home-Bildschirm gelegt und damit direkt aufgerufen werden.

(Ein anderes Beispiel für eine mobile WebApp haben wir schon einmal in folgendem Blogeintrag gezeigt: https://blogs.uni-due.de/zim/2011/07/07/plattformunabhangige-entwicklung-von-mobile-learning-applikationen-fur-iphone-und-android-smatphones/)

]]>