TypeScript – Nur ein ECMAScript 6 Lückenbüßer?

Diese berechtigte Frage muss sich TypeScript, das statisch typisierte Superset von JavaScript, gefallen lassen. Schließlich bringt ECMAScript 6, die kommende Version des Standards für JavaScript, viele der in der aktuellen ECMAScript Version 5 vermissten Features mit, welche auch von TypeScript nachgerüstet werden (z.B. klassenbasierte Vererbung und ein Modulsystem). Dabei benötigt ECMAScript 6 keinen Kompilierungsschritt, sondern wird direkt vom Browser verarbeitet.

Auch wenn ECMAScript 6 noch nicht final spezifiziert ist, so rückt dies immer näher. Allmählich tauchen erste Features als Implementierung in den neusten Browserversionen auf – siehe Kompatibilitätsmatrix.

Wird also TypeScript überhaupt gebraucht? Ist es nicht nur eine Übergangslösung?

Continue reading

Posted in Web as a Platform | Tagged , , , , | 1 Comment

Memory Leaks in Java – eine Systematische Analyse – Symptome

Beobachtungen

Bei Speicherproblemen handelt es sich häufig um Probleme welche nicht direkt reproduzierbar sind. Eine Fehlersuche wird hierdurch erschwert.
Professionelle Profiling Tools helfen hier nur bedingt weiter. Mit ihnen können wir Metriken aufnehmen, Systematik und Erfahrung ist dennoch notwendig, um die Informationen korrekt und zielgerichtet zu bewerten.
Zur systematischen Analyse empfiehlt sich eine Beobachtung der Symptome, welche bereits wichtige Informationen zum Eingrenzen des Fehlers liefern können.
Es gibt unterschiedliche Kategorien von Beobachtungen

  • Exceptions
  • Systemverhalten
  • Zeitliches Verhalten / (un-)deterministisches Auftreten
  • durch Tooling gelieferte Ergebnisse

Ein Bewerten unterschiedlicher Beobachtungen hilft hierbei den Fehler einzugrenzen und mögliche Ursachen auszuschließen. Durch ein Bewerten aller Symptome im Zusammenspiel können die möglichen Ursachen eingeschränkt werden.
Continue reading

Posted in Java Basics, Java Runtimes - VM, Appserver & Cloud | Tagged , , , | Leave a comment

Memory Leaks in Java – eine Systematische Analyse – die Jagd beginnt mit dem OutOfMemoryError

Auf der Suche nach Performanceproblemen und Instabilitäten in Java-basierten-Systemen stößt man immer wieder auf Probleme mit der Speicherverwaltung. Das auch in Java Memory-Leaks auftreten können, sollte jedem Entwickler bewußt sein.

OutOfMemoryError Exception – das deutlicheste Symptom

Das deutlichste Symptom, dass es Probleme in der Speicherverwaltung einer Anwendung gibt, ist sicherlich ein OutOfMemoryError. Da diese Exception mit dem Beenden der JVM daherkommt, ist dies sicherlich auch die schmerzhafteste Variante, da dies naturgemäß häufig einen Produktionsausfall hervorruft und somit direkt auch in der Managment-Ebene aufschlägt.

Ein regelmäßiges Neustarten des Servers zu Mitternacht ist hier meist die schnellste Symptombehebung, behebt aber leider nicht die Einflüsse, die das fehlerhafte Speichermanagment auf Aspekte wie zum Beispiel System-Performance hat. Ein Vergrößern des Heap-Speichers verschiebt die Problematik leider nur, da auch hier die Performance und der Durchsatz der Anwendungen leiden kann, bedingt durch den erhöhten Verwaltungsaufwand des großen Heaps.
Ein neues Problem manifestiert sich in Form von hohen Pause-Zeiten des Garbage Collectors und eine überdurchschnittliche CPU Belastung durch den GC.

Nicht immer handelt es sich um ein Speicherleak bedingt durch nicht freigegebenen Objektreferenzen. Wenn es zu einem OutOfMemoryError kommt, genügt das heraufsetzen des Java Heap Speichers auch nicht immer, um Speicherprobleme in den Griff zu bekommen. Teilweise kann dies, wie erwähnt, sogar negative Auswirkungen auf die Gesamtperformance des Systemes haben.
Wir wollen in diesem Blog Post und in einer Reihe weiterer Blog Postings das Thema Memory Leaks in Java aufgreifen und versuchen, hier eine Systematik herauszustellen um MemoryLeaks zu erkennen und Symptome richtig zu deuten.
Mit dem notwendigen Hintergrundwissen, einem methodischen Vorgehen und natürlich den richtigen Werkzeugen ist das Auffinden und Beheben der meisten Speicherprobleme schnell erledigt.
Continue reading

Posted in Java Basics, Java Runtimes - VM, Appserver & Cloud | Tagged , , , , | 1 Comment

Funktionale Programmierung in In-Memory-Grid Systemen

Große Datenmengen im GB und TB Bereich erlauben es nicht, die zu verarbeitenden Daten zur Verarbeitung an den Client zu übertragen. Eines der wichtigen Konzepte in modernen, verteilten In-Memory-Grid Systemen ist es daher, den auszuführenden Code zu den Daten zu bringen.

Die Ausführung von Code in solchen Systemen erscheint oft umständlich und wenig intuitiv für den Programmierer. Das Einbetten von Funktionen in Klassen, welche im Clusterverbund ausgeführt werden können, erzeugt einen zusätzlichen Boilerplate Code, da entsprechende Interfaces implementiert werden müssen. Hier bietet sich funktionale Programmierung an, um Funktionen im Cluster zur Verfügung zu stellen.
Am Beispiel von Scala als Sprache, welche funktionale Programmierung unterstützt, möchte ich zeigen, dass diese beiden Konzepte sehr gut zusammenspielen und somit die korrekte, performante Verwendung von In-Memory-Grid Systemen unterstützt wird.
Als Grid-System findet Hazelcast Verwendung.
Continue reading

Posted in Other languages for the Java VM | Tagged , , , , , | Leave a comment

Spring Boot – Getting started

Im April 2014 wurde die Version 1.0.0 von Spring Boot veröffentlicht. Mittlerweile sind wir bei Version 1.1.4 angekommen. Das Projekt verspricht eine noch schnellere Entwicklung von Anwendungen mit Spring:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that can you can “just run”.

Mit Spring Roo und Grails gab es zwar bereits zuvor zwei Projekte unter dem Dach von Pivotal, mit denen man sehr schnell Anwendungen erzeugen konnte. Beide beschränken sich allerdings auf Webanwendungen. Spring Boot erweitert dieses Spektrum deutlich. Sie möchten ein Projekt mit Spring Integration starten, einen REST-Service anbieten oder auf eine NoSQL-Datenbank zugreifen? Mit Hilfe der sogenannten “Starter POMs” können Sie ein entsprechendes Projekt mit wenigen Zeilen Konfiguration aufsetzen. Durch beliebige Kombination mehrerer solcher “Starter POMs” lässt Sie auch die Infrastruktur für komplexe Anwendungen erzeugen.
Continue reading

Posted in Build, config and deploy, Spring Universe | Tagged , , , , , , , | 1 Comment

TypeScript nun bei GitHub, Compiler soll schneller werden, ECMAScript 6 Features auf der Roadmap

TypeScript LogoTypeScript, das statisch typisierte Superset von JavaScript (Vorstellung auf blog.oio.de), zieht von CodePlex um zu GitHub.
Dies hat Microsoft nun in einem Blogbeitrag bekanntgegeben. Damit folgt Microsoft der Forderung der Community.
Man erhofft sich dadurch eine bessere Zusammenarbeit mit der Community.

Die Issues von CodePlex wurden in den Issue-Tracker von GitHub umgezogen.
Außerdem wurde auch das Wiki umgezogen und hat seinen neuen Platz bei GitHub gefunden.
Continue reading

Posted in Web as a Platform | Tagged , , , , | Leave a comment

Locking mit Git

“Heutzutage macht man Git”! Git ist auf dem besten Weg, sich als das Standard-Tool für die versionierte Verwaltung von Dateien durchzusetzen. Wer fängt heute schon noch ein neues Projekt mit SVN oder gar CVS an? Sicherlich, Git bietet zahlreiche Vorteile gegenüber den vielen Alternativen. Dennoch sollte man sich vor einem Wechsel zu Git genau anschauen, ob das Tool auch zum Einsatzzweck im jeweiligen Projekt passt. Nehmen wir das Beispiel “Locking von Dateien”:

In SVN kann man über die Eigenschaft svn:needs-lock festlegen, dass eine Datei nur bearbeitet werden kann, falls sie zuvor für alle anderen Benutzer gesperrt wurde. Dateien, die eine Sperre benötigen und aktuell nicht durch den aktuellen Benutzer gesperrt sind, werden mit einem Betriebssystem-Schreibschutz versehen. Erst nachdem die Datei mit einer globalen Sperre versehen wurde, wird dieser Schreibschutz aufgehoben.

Die Stärke von Git liegt in der Verwaltung von textbasierten Dateien. Paralleles und offline-fähiges Arbeiten gehört zu den Design-Grundsätzen von Git. Locking von binären Dateien wiederspricht diesen Grundsätzen fundamental. Daher unterstützt Git das Sperren von Dateien nicht.

Kann Locking mit Git dennoch umgesetzt werden?
Continue reading

Posted in Build, config and deploy | Tagged , , , | Leave a comment