Wir unterstützen...

Elterninitiative Kinderkrebsklinik e.V

Kinderkrebsklinik e.V

Sponsoren

Wir danken unseren Sponsoren:

Permanente Sponsoren

Uni Düsseldorf
(Raum und Beamer)


(Preise)


(Preise)


(Preise)


(Preise)

Mitgliedschaften



java.net Member

Events

Nachlese: Neo4j und die wunderbare Welt der Graphen | Print |
Written by Philip Höfges   
Monday, 22 September 2014 07:34

>> Video

Auch bei diesem Rheinjug-Tag haben sich wieder zahlreiche Menschen in der Heinrich-Heine-Universität versammelt, um einem Vortrag zu lauschen. Das Thema diesmal ist die Welt der Graphen. Gehalten wird der Vortrag von Michael Hunger, einem renommierten Mitarbeiter bei Neo Technology.

Michael Hunger gibt zunächst eine Einleitung zum Thema Graphen. Was sind Graphen eigentlich? Die Antwort ist, dass alles ein Graph ist. In der heutigen Gesellschaft ist jeder Mensch mit anderen vernetzt. Soziale Netzwerke sind nicht mehr wegzudenken. Aber wie sollte man diese vielen, vielen Daten verarbeiten? Die ersten Graphen stammen aus Schweden. Man hat sich überlegt, wie man die Daten geschickt verarbeiten kann. Die Graphen sind geboren. Ein weiteres Beispiel dafür ist die Logistik. Wie kann man verschieden Menschen verschiedene Informationen zukommen lassen? Wo ist die Ware? Wer transportiert sie? All dies lässt sich mit Graphen schnell und effizient lösen. Wie kommen Menschen von A nach B? Heutzutage mit Navigationssystemen. Auch diese sind nichts anderes als Graphen. Es wäre viel zu aufwendig, dies mit Datenbanken lösen zu wollen. Graphen schaffen hier sehr gute Abhilfe.

Nach Erklärung weiterer Beispiele, erklärt Michael Hunger wie Vorüberlegungen schon in Form von Graphen durchgeführt werden. Man stellt sich bereits Fakten in Form von Knoten vor und überlegt sich, wie jede Information mit einer anderen verbunden ist. Dadurch entsteht eine übersichtliche Darstellung von Informationen. Diese Darstellung ist formfrei und kann von jedem Benutzer selbst gewählt werden. Jeder Knoten kann alles sein, jede Art von Zustand.

Wieder zurück zu den sozialen Netzwerken. Eine Person gilt als sportbegeistert. Jedoch speichert das Netzwerk Informationen, z.B. auf welchen Seiten sich bewegt wird. Man glaubt also einer „sportbegeisterten“ Person dies garnicht, wenn mitgeschnitten wird, dass diese Person sich nicht auf Sportseiten herumtreibt. Genau deswegen sind die Beziehungen gewichtet. Man kann zum Beispiel den Zustand von Gefühlen gewichten. Liebe ist zum Beispiel nicht notwendigerweise bidirektional. Das heißt, das die Liebe auf die eine oder andere Seite gewichtet ist. Außerdem kann jeder Knoten mit unendlich vielen anderen Knoten verbunden sein. Jeder Mensch kann Gefühle für beliebig viele andere Menschen haben. Auch die Selbstliebe ist in einem Graphen gestattet, da jeder Knoten mit sich selbst verbunden sein kann.

Anschließend leitet Michael Hunger zum Kern des Vortrags über. Es gibt verschiedene Arten von Informationsdarstellung. Eine dieser Arten sind die Graphen, insbesondere die Darstellung mit Hilfe von Neo4j. Was macht Graphen gegenüber relationalen Modellen aus? Während relationale Modell eine Join-Tabelle aufbauen, die zwischen Knoten vermittelt, liefern Graphen eine eigene Datenstruktur dazu mit. Dadurch fällt die aufwendige Berechnung von Schlüsseln schlicht weg. Außerdem ist die Laufzeit bei Graphen nicht quadratisch, sondern linear. Um dies zu verdeutlichen, zeigt Michael Hunger ein einfaches Beispiel: Über wie viele Ecken kennt man andere Menschen? Graphen lieferen eine sehr schnelle Antwort, die sich auch bei wesentlich mehr Datensätzen nicht ändert, während das relationale Modell immer bei mehr Daten langsamer wird. Aber warum ist das so? Weil Graphen sich auf die nähere Umgebung des Zielknotens beschränkt und nicht die gesamte Datenbank durchsuchen - das spart Zeit.

Wie sieht das Ganze in Neo4j aus? Neo4j ist skalierbar, schemafrei, deklarativ und perfekt bei für stark vernetzte Daten. Die entsprechende Anfragesprache ist leicht zu lesen und beispielsweise SQL sehr ähnlich. Anhand einer sehr guten Demonstration zeigt Michael Hunger, wie das ganze durchgeführt wird. Der wesentliche Unterschied zu relationalen Modell ist die schnelle Abfrage von benachbarten Knoten. Durch simples Anklicken des Knotens kann dem Umkreis eingesehen werden.

Am Ende der Demonstration fasst Michael Hunger die geschilderten Resultate nochmals sehr übersichtlich zusammen: Alles kann ein als Knoten dargestellt werden, jeder Knoten kann mit unendlich vielen anderen Knoten verbunden sein und jedes Programm kann als Baum und somit als Graph dargestellt werden. Damit beendet Michael Hunger und dem Applaus der Zuhörer seinen Vortrag.

 
Nachlese: Sagt mein Profiler die Wahrheit? | Print |
Written by Philip Höfges   
Friday, 22 August 2014 09:22

>> Folien auf Speakerdeck

>> Video

Trotz der langen Sommerpause fanden sich über 80 interessierte Zuhörer im Hörsaal 5B ein, um dem Vortrag von Fabian Lange zum Thema „Profiling“ zu lauschen. Der Web- und Performance-Spezialist von codecentric gewinnt, trotz leichter technischer Schwierigkeiten mit dem Mikrofon, mit einem Beispielprogramm, welches Zeichenketten erzeugen soll. Bei zwei verschiedenen Durchläufen bricht das Programm aber an zwei unterschiedlichen Stellen ab. Wie kommt so etwas zustande? Und wie findet der Kopf vor dem Bildschirm dies heraus? Genaue dafür wurde Profiler entwickelt.

In Java gibt es einige Werkzeuge, wie Mission Control, die die JVM nutzen und Profiling betreiben. Fabian Lange stellt diese in einer kurzen Historie vor und nutzt ein Zitat von Heisenberg, um zu verdeutlichen, dass jede Messung den Code beeinflusst. Zur Veranschaulichung dieser These beschreibt er einige Fehlerquellen beim Profiling:

Der so genannte „Overhead“ ist nicht präzise angegeben. Man kann nicht genau sagen, dass ein Analyseprogramm beispielsweise einen Overhead von zehn Prozent hat, ohne zu wissen, wie lange das zu analysierende Programm eigentlich braucht. Oftmals ist sogar der Speicher sehr knapp, was dazu führt, dass die Daten, die bei der Analyse gesammelt wurden, nicht gespeichert und somit ausgewertet werden können. Ein weiteres Problem stellt die Genauigkeit dar. Wie kann sagen, etwas sei genau? Es gibt Werte, die man nicht mit dem Begriff der Genauigkeit angeben kann, da sie nicht messbar sind. Beispielsweise kann man sich zwar die Zeit am Telefon ansagen lassen, die Zeit, welche man braucht, um einen Knopf an der Mikrowelle nach Beenden des Gesprächs zu drücken ist dabei nicht messbar. Weiterhin nennt Fabian Lange das Problem der Zeitangabe. Man muss zwischen CPU-Zeit und realer Zeit differenzieren. Realzeit lässt sich zwar sehr präzise messen, z.B. mit einer Uhr an der Wand, aber die Zeit, die eine CPU für eine Instruktion braucht, ist nur zwar genau feststellbar. Und was macht man mit großen Datenmengen? Fabian Lange vertritt die Ansicht, dass es wesentlich sinnvoller ist, sich auf kleine Daten, welche schneller auswertbar sind, zu verlassen, als in einem riesigen Paket von Daten zu suchen.

Im Profiling gibt es zwei klassiche Herangehensweisen: Das Sampling und die Instrumentierung. Während beim Sampling in regelmäßigen Abständen der Zustand des Programms eingefangen wird, verändert der Benutzer bei der Instrumentierung den zu messenden Code zu Einfügen von Zusatzcode, um an genau diesen Stellen das Programm zu messen. Zur Veranschaulichung hat Fabian Lange selbstgeschriebene Beispiele vorbereitet. Anhand derer kann man sehr deutlich sehen, dass Sampling zwar die Laufzeit des Programms nicht erhöht, jedoch nicht so viele Daten liefert wie die Instrumentierung.

Anhand einer Demonstration mit dem Tool „Hprof“ stellt Fabian Lange anschließend die Unterschiede zwischen den verschieden Version von Java heraus. Trotz eines identischen Programms liefern die Versionen 6, 7 und 8 von Java bei der Auswertung der Profiling-Daten unterschiedliche Ergebnisse.

In einer Zusammenfassung zeigt Fabian Lange, was für den Zuschauer hängen bleiben sollte. Die zentrale Aussage ist, dass Profiling keine Garantie bietet. Der Profiler kann nicht immer genau festhalten, an welcher Stelle des Programms der Fehler auftritt. Die letztendliche Verbesserung muss vom Anwender kommen. Zusammenfassend ist die Frage, ob ein Profiler die Wahrheit sagt, mit „Nein“ zu beantwortet.

Im Anschluss an den Vortrag wurde bei Freibier sehr angeregt über das Thema diskutiert.

 
Nachlese: Fun mit Java(FX) auf embedded Hardware | Print |
Written by Marc Buengener   
Monday, 07 April 2014 15:58

>> Zum Video

Heute Abend begrüßten wir in überschaubarer Runde Gerrit, um mit ihm Spaß mit Java, insbesondere mit JavaFX auf embedded Hardware zu haben. JavaFX auf embedded Hardware ist eine Teilmenge von JavaFX. Man muss also einige Einschränkungen in Kauf nehmen, profitiert aber von den Java-Vorteilen, z.B. einer aktiven Community. Wilde Grafikeffekte sind mit JavaFX allerdings nicht möglich. Das JDK für embedded Hardware ist aktuell noch 32 MB groß. Das Ziel ist es jedoch, den Footprint auf 16 MB zu verkleinern.

Unser Ziel ist es also, kleine Anwendungen zu schreiben, für die ein Desktoprechner überdimensioniert wäre. Als typische Anwendungsfelder nannte Gerrit
die Automatisierung der eigenen vier Wände,
Home Entertainment,
Anzeigen beliebiger Art, wie z.B. Displays für medizinische Messwerte,
sogenannte Information Kiosks, wie z.B. Bus- oder Zugfahrpläne und
den Bildungsbereich - einfach, um zu Lernen.

Auch die Hardware beschränkt die Möglichkeiten.
Empfehlenswert sind hier das
BeagleBoard xM,
das populäre Raspberry Pi und
neuere Hardware mit ARM-Architektur.

Neben dem eigentlichen Rechner sind noch
ein Netzteil,
eine Class 10 SD Memory Karte als schnelle Festplatte,
ein WiFi-Stick und
ein Touch-Display anzuschaffen.

Das Display ist die mit Abstand teuerste Komponente. Als allgemeinen Tipp empfahl Geritt einen powered USB-Hub zu verwenden, um seltsame Fehler, wie spontane Bildschirmausfälle, zu vermeiden.
Man muss also wieder tricksen, um Hardware-schonend zu programmieren.

Typische Anforderungen für die Entwicklung auf embedded Hardware ist beispielsweise die Verwendung einer berührungssensitive Benutzerschnittstelle. Maus- und Tastatureingaben wären für eine Fahrstuhlsteuerung ungewöhnlich. Auch die Steuerelemente entsprechen nicht denen einer Desktopanwendung und der Bildschirm ist oft viel kleiner, wie beispielsweise auf einer Smartwatch.

Der von Sun gepredigte Grundsatz "write once, run anywhere" trifft auf die Programmierung auf embedded Hardware nur mit erheblichen Einschränkungen zu.

Für das Rendering gilt das Scene-Graph-Konzept. Die Steuerelemente und deren Bestandteile sind in einer Baumstruktur hierarchisch gegliedert. Alle angewendeten Effekte und Bewegungen, gelten auch immer für die zugehörigen Kind-Knoten. Die Bildschirminhalte werden automatisch gerendert, der Entwickler hat darauf nur mittelbaren Einfluss. JavaFX ist nicht für die Spieleentwicklung gemacht.

Für die aktuellen Geräte sind ca. 1.000 Elemente (Nodes) verwaltbar. Wenn man mehr Bildschirmelemente nutzen möchte, reicht es nicht, diese unsichtbar zu machen. Sie würden im Speicher bleiben. Man muss ihre setManaged-Eigenschaft negieren.

Auch wenn Visualisierungen Gerrits Steckenpferd sind, auf embedded Hardware gilt der von Microsoft mit Windows 8 vorgemachte Grundsatz "content over chrome". Eine einfache Gestaltung einer Progressbar erfordert beispielsweise 3 Nodes im Scene-Graph. Den Fortschrittsbalken selbst, ein Zeiger-Element und vielleicht noch eine Textbox. Eine aufwendige Gestaltung mit gleichem Informationsgehalt kann schon mal 245 Nodes erfordern. Besonders, wenn viele Schattierungen und geschachtelte Elemente verwendet werden. Man sollte bei der Gestaltung der Benutzeroberfläche auf die Anzahl der Bildelemente achten. Animationen und aufwendige Effekte, wie dynamische Schattenwürfe und Verläufe sollte man vermeiden. Übereinander gezeichnete Elemente haben den besonderen Nachteil, dass sie sich gegenseitig beeinflussen.

Zum Abschluss erlebten wir eine Premiere in der rheinjug, eine interaktive Demo, zu der alle Zuhörer nach vorne gebeten wurden. Dort ergab sich die Party vor der Party und wir konnten die von Gerrit mitgebrachten Implementierungen auf Hardware wie Tablets, Smartphones und seiner Smartwatch wirklich begreifen.

 
rheinjug Sommerpause 2014 | Print |
Written by Lukas Ladenberger   
Thursday, 29 May 2014 19:20

Liebe Besucher der rheinjug,

nach einem erfolgreichen ersten Halbjahr 2014 mit vielen tollen Vorträgen geht die rheinjug in die wohlverdiente Sommerpause. An dieser Stelle noch einmal ein herzliches Dankeschön an die vielen Besucher, an unsere Dozenten und an unsere Sponsoren! Wir hoffen das zweiten Halbjahr wir mindestens genauso erfolgreich.

Der erste Vortrag nach der Sommerpause wird voraussichtlich Ende August 2014 stattfinden. Wir halten euch via Email und Webseite natürlich auf dem Laufenden! Bleibt gespannt!

Viele Grüße,
Euer rheinjug-Team

 
Nachlese: Gründung einer Cloud Company | Print |
Written by Michael Jastram   
Friday, 21 February 2014 09:16

Im Rahmen des heutigen Abends wurden auch einige interne Änderungen angekündigt. Michael Jastram, Gründer der rheinjug, hat seine Rolle als 1. Vorsitzenden des gemeinnützien Vereins nach sieben Jahren an Lukas Ladenberger abgegeben. Nach einem kurzen Rückblick über die Jahre, einschließlich des Konsums von Subs (5000), Cookies (2000) und Bier (1200 l), ging es dann auch zum nächsten Thema über.

Igor outete sich zunächst als Ex-Java-Programmierer und versuchte dann, ein paar Vororteile bezüglich Claud-Firmen aus dem Weg zu räumen. Zum Beispiel, dass die Sicherheit von Servern kleiner Unternehmen eher fragwürdig ist, wie er mit einem entsprechenden Foto dokumentierte. Und da ging es nur um die Hardware - Herausforderungen wie eine entsprechende Administration kommen dann noch dazu kurz: Keine kleine Firma kann auch nur annähernd die Infrastruktur-Qualität erreichen, die Firmen wie Amazon oder Google ermöglichen.

Nun stellte Igor einen typischen Cloud-Stack vor, der aus IaaS (Infastructure), PaaS (Platform) oder SaaS (Software) bestehen kann. Der wichtigste Punkt ist eben, dass gemietet wird, und nicht investiert werden muss. Aber es gibt noch eine reihe weitere Vorteile, abgesehen davon, dass der Markt wesentlich größer ist: Typische Cloud-Dienste wachsen mit ihren Kunden. Das wiederum bedeutet, dass viele kleine Firmen sich Cloud-Produkte leisten können, was bei traditioneller Software nicht der Fall gewesen wäre.

Nachdem damit die Grundlagen vermittelt und Missverständnisse aus dem Weg geräumt waren, stellte Igor das Arbeiten in seiner Firma elastic.io vor, die keinen eigenen Server betreibt: Der Code lebt bei gitHub, die Software läuft auf heroku, als Framework wird node.js eingesetzt. An diesem Punkt brach eine kleine Diskussion aus, denn viele Besucher drückten Sorgen über Daten-Klau aus. Igor konterte jedoch damit, dass es keinen Grund gibt, dem eigenen Admin mehr zu vertrauen als dem von Amazon. Abgesehen davon dass bspw. der Sourcecode allein, ohne das dazugehörige Team, nur wenig wert ist - wie man an vielen Open Source-Projekten sieht, denen der Hauptentwickler verlorengegangen ist.

Soweit, so gut: Cloud Software bietet viele Vorteile, doch wie setzt man sie am besten ein, insbesondere, um skalieren zu können? Igor stellte ein paar einfache Regeln auf: Design for Failure; Decoupling; Elasticity; Asynchrony; Avoid Distributed Tansactions; Auf jeden dieser Punkte ging er mit konkreten Beispielen ein und auch diese Themen lösten wieder angeregte Diskussionen aus.

Obwohl viele Fragen schon während des Vortrags gestellt und beantwortet wurden, kamen noch viele weitere Diskussionen in der anschließenden Fragerunde zustande, die sich - wie so oft - noch in einer gemütlichen Runde mit Bier fortsetzte.

 
<< Start < Prev 1 2 3 4 5 6 7 8 9 10 Next > End >>

Page 5 of 14