Rohdatenarchiv-Blogartikelserie veröffentlicht

Rohdatenarchiv im Webanalyse-Umfeld

Ich habe eine Artikelserie zum Thema Rohdatenarchiv für den etracker Blog geschrieben. In den Artikeln beschreibe wie ein Rohdatenarchiv und zweistufiges NoSQL-Datenbankkonzept im Webanalyse-Umfeld vom Nutzen ist. Die Artikel könnt ihr hier lesen:

Rohdatenarchiv [Teil 1]: Was ist das?

Rohdatenarchiv [Teil 2]: Was kann ich damit machen?

Rohdatenarchiv [Teil 3]: Und was ist unter der Motorhaube?

Viel Spaß beim Lesen!

Bild: By Camelia.boban (Own work) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons

Ankündigung: Vortrag auf der code.talks 2014 – etracker Architektur Insights

Am 9. und 10. Oktober 2014 werden die code.talks wieder stattfinden. Auch dieses Jahr werden wieder spannende Vorträge in einzigartiger Atmosphäre präsentiert und ich bin dabei:

http://www.codetalks.de/session_post/etracker-architektur-insights/

In diesem Talk gebe ich interessante Architektur-Einblicke in die Systemlandschaft des Web-Controlling und Big Data Spezialisten etracker.
Ich zeige wie das Tracking von Websites funktioniert und welche Möglichkeiten ein Rohdatenkonzept alles bietet:

Wie geht man mit großen Datenmengen um?
Und wie kommt man zu aggregierten Daten, die auch für Kundenreports schnell abgerufen werden können?

Als Zuhörer bekommst du eine umfangreiche Übersicht wie die Themen Big Data und NoSQL im Webanalyse-Umfeld bei etracker gehandhabt werden
und welche Architekturprinzipien Anwendung finden.

Ich freue mich schon riesig auf den Vortrag. Bist du auch dabei?

Running Lean

Ein systematischer Prozess wie aus Ideen erfolgreiche Produkte gemacht werden

running lean

Mauray hat erkannt, dass so viele Produkte wie nie zu vor geschaffen werden, aber die meisten Produkte nicht erfolgreich sind, da Unternehmen Geld, Zeit verschwenden und „nicht die richtigen“ Produkte entwickeln. Das Buch Running Lean hat den Anspruch, die Lean-Methodik von Eric Ries anschaulich anhand von Praxisbeispielen darzustellen.

Der Autor stellt einen systematischen Prozess vor wie aus Ideen erfolgreiche Produkte gemacht werden können (Product/Market Fit Strategy). Er stellt Methodiken wie Lean Canvas, Kanban, Customer Development Cycle und Bootstrapping vor.  Hier kann der Leser für sich Fragen beantworten, z.B. Wie finde ich Probleme, die sich lohnen zu lösen? Wie gehe ich systematisch vor? Wie werde ich schneller und fokussierter?

Dieses Buch ist für alle interessant, die neue Projekte starten wollen. Die Fülle an Informationen und die vorgestellten Methoden sind erprobt und die Vorgehensweise kann sowohl für Startups als auch bestehende Unternehmen angewendet werden. Hier der Link zu Amazon.

Join the Anti-If-Campaign

Ihr wollt für ein neues Feature etwas hinzufügen und merkt das ihr an 35 Codestellen, wo If-Abfragen verwendet werden, den Source Code ändern müsst. Na super!

Das Problem kennt ihr sicherlich. Ihr führt die Änderungen durch und dann müsst ihr im Anschluss natürlich alle Stellen testen, ob diese noch funktioniert oder nicht. Das bringt nicht nur kein Spaß, dass ist auch Verschwendung von Zeit und Geld. Das ist nicht praktikabel. Das geht besser. Ich rufe euch zur Teilnahme an der Anti-If-Campaing auf:

I have joined Anti-IF Campaign

http://www.antiifcampaign.com/join-the-campaign.html

Worum geht es hier? If-Bedingungen haben große Auswirkungen auf den Code. If-Bedingungen können gefährlich sein. Stattdessen sollte man lieber Objekte bauen, damit der Code flexibel, änderbar und einfach zu testen bleibt. Was habt ihr davon? Weniger Kopfschmerzen und mehr Freizeit. Es geht also um das effiziente Codieren, Software Design Prinzipien und Best Practies.

Im nächsten Artikel dieser Reihe stelle ich Techniken vor, wie ihr auf If-Bedingungen verzichten könnt und bessere Software entwickelt, die sich schnell ändern und erweitern lässt.

The Lean Startup

Machen, messen, lernen – so funktioniert der permanente Evaluationsprozess

leanstartup

Der Weg zum eigenen Unternehmen ist immer mit Risiko verbunden. Bis sich die Firma etabliert hat, dauert es. Wer scheitert, verliert viel Geld. Hier setzt die Methode von Eric Ries an. Lean Startup ist schnell, ressourcenfreundlich und erfolgsorientiert. Machen, messen, lernen – so funktioniert der permanente Evaluationsprozess.  Das spart Zeit, Geld und Ressourcen und bietet die Möglichkeit, spontan den Kurs zu korrigieren.

Wie lässt sich überprüfen, ob eine Produktideen erfolgreich sein kann oder nicht? Eric Ries Antwort auf diese Frage ist das „Validated Learning“. Anhand von durchgespielten Szenarien kann man die Erfolgsaussichten von Ideen, Produkten und Märkten bestimmen. Annahmen werden als Customer Problem Solution formuliert:

Welche Anwendergruppe hat welches Problem? Wie denken wir es zu lösen? Dazu gehört ein passendes „Minimal Value Product“ (MVP). Ziel des minimal brauchbaren Produkt ist es, Annahmen zu überprüfen und zu lernen. Zu erst erstellt man ein rudimentäres MVP. Wenn nun vorher getroffene Annahmen sich bestätigen, dann wird das MVP schrittweise zu eines richtigen Produkts ausgebaut.

Dieser Ansatz eignet sich nicht nur für Startups, sondern für jede Form der Produktentwicklung. Das Buch ist sehr gut geschrieben, allerdings konzentriert sich Ries zu sehr, den Leser vom Ansatz zu überzeugen. Viele vermissen eine Anleitungen z.B. in Form von Checklisten oder einem Ablaufplan. Aus diesem Grund bleibt es manchmal unklar, was konkret gemacht werden muss. Trotz der Lücken hat sich diese Methode in der Praxis bewährt. Hier der Link zu Amazon.

Lambda Expressions

Lambda Expressions sind cool. Das Feature bietet eine Vielzahl von Vorteilen.

Meiner Meinung sind Lambda Expression eine tolle Sache, da das Feature

– die Verwendung von Single Abstract Method-Interfaces vereinfacht
– mittels Functional Interfaces Logik implementieren kann ohne das zusätzlich eine Klasse geschrieben werden muss
– und mit neuen der Stream API eine bessere Verteilung und Auslastung von Multicore Prozessoren erlangt.

Java-Entwickler erhalten eine präzisere Syntax zur Verfügung stellt, der Runtime Overhead ist gegenüber anonymen Klassen geringer und es gibt noch weitere tolle Features wie Methodenreferenzen.

Wie ihr JDK 8 und Eclipse zusammen nutzen könnte, habe ich ja schon beschrieben.

Beispiel

Hier jetzt mal ein einfaches HelloWorld Beispiel, um zu zeigen, wie einfach das ist.

[code]
public interface Hello {
String greet(String name);
}
[/code]

Und hier die Main-Class mit der Lambda Expression

[code]
public class HelloWorld {

public static void main(String[] args) {
Hello hello = (String name) -> {
return "Hello " + name;
};

System.out.println(hello.greet("du!"));
}

}
[/code]

Syntax

Die Syntax von  Lambda Expression ist einfach.

[code]
(formal parameter list) ->{ expression or statements }
[/code]

Es wird eine kommaseparierte Liste mit Parametern rein gegeben, die dann in der Lambda Expression verwendet werden können. Der Parameterliste folgt der  -> Operator. Danach kommt der Lambda Body, der aus einem Statement oder einen Block bestehen kann. Return Typ ist dann void oder ein beliebiger Referenz Typ, ein Java Typ oder ein primitiver Typ. Wichtig ist noch, dass der Block mit geschweiften Klammern eingeschlossen wird, wenn der Rückgabe nicht void ist.

Functional Interfaces

In Java werden Lambda Expression zusammen mit Functional Interface benutzt. Ein Functional Interface ist ein Interface mit nur einer abstrakten Methode, java.util.concurrent.Callable mit call() ist ein Beispiel. Bei Lambdas muss nicht explizit das Interface angegeben werden. Der Target Type der Expression wird aus dem Kontext ermittelt, also:

– aus einer Variablen Deklaration,
– einer Zuweisung,
– Return Statement,
– wo ein Array initialisiert wird,
– Methoden- oder Konstruktorparametern,
– einem Lambda Expression Body
– einem bedingten Ausdruck
– oder einem Cast.

Wichtig aber ist, dass alle Exceptions, die auftreten können, im Functional Interface berücksichtigt werden, auf die in einer Lambda Expression reagiert werden soll. Aber das ist eigentlich klar, denn das ist ja auch schon mit normalen Interfaces so.

Sonstiges

Hier noch eine kleine Auflistung von Dingen, die mir bei der Arbeit mit Lambdas aufgefallen sind:

– Lambda Expressions sind wie eine anonyme Methoden. Die Implementierung muss der Schnittstelle genügen, du kannst Parameter spezifizieren und es kann ein Wert zurückgegeben werden.
– Damit ich innerhalb einer Lambda Expression auf z.B. lokale Variablen zugreifen kann,  müssen diese den final Modifier haben.
this und super Referenzen sind die des um umgebenen Kontext. Die Lambda Expressions führen keinen neuen Scope ein.
– Der Lambda Expression Parameter Name muss sich von Variablen unterscheiden, die im Kontext schon existieren

Fazit

Je mehr ich mit Lambda Expressions arbeite, desto mehr Spaß bringen sie. Das Feature hilft mir Logik mit weniger Zeilen Code zu implementieren. Weitere Beispiele findet ihr auf github:

GitHub-Mark-32px https://github.com/claudioaltamura/java8/tree/master/defaultmethods

Quellen

http://www.oracle.com/technetwork/articles/java/lambda-1984522.html

http://www.lambdafaq.org/

Bildquelle: neurolle by Rolf / pixelio.de

„Die 7 Wege zum Clean Code“-Vortrag jetzt auf Slideshare verfügbar.

Mein Vortrag, den ich auf den Clean Code Developer Days 2013 gehalten habe, ist online verfügbar.

Slideshare ist eine tolle Plattform. Ich habe deshalb meinen Vortrag auch dort hochgeladen. In meinem Vortrag findet ihr Informationen über:

  • statische Codeanalyse
  • Testdriven Development
  • Refactoring
  • Continuous Integration
  • Reviews
  • Coding Standards
  • Coding Dojos

[slideshare id=32845318&doc=die7wegezumcleancode-140328045717-phpapp02]

Viel Spaß beim Anschauen.

Der Weg zum Java-Profi

Konzepte und Techniken für die professionelle Java-Entwicklung

java-profi

Dieses Buch ist ein ideales Nachschlagewerk, dass wichtige Themen aus der Java-Welt kompakt und kompetent vermittelt. Beim Durchblättern fällt auf, dass hier alle Punkte berücksichtigt werden: Grundlagen, Analyse und Design,  Einrichtung und Arbeit mit einer professionelle Arbeitsumgebung und objektorientiertes Design. Der Leser bekommt Tipps für den Bau stabiler Applikationen mithilfe des Collections-Framework, Multithreading und JDK 7.  Sehr schön finde ich, dass Michael Inden auch über Fallstricke wie Bad Smells und Refactorings bis hin zu Entwurfsmuster schreibt sowie die Qualitätssicherung berücksichtig: Was ist ein guter Programmierstil? Wie verwendet man Coding Conventions?  Und wie setzt man Optimierungen um?

Praxisnahe Beispiele helfen dabei, das Gelernte schnell umzusetzen. Neben der Praxis wird Wert auf das Verständnis von grundlegenden Konzepten gelegt. Dank der Erfahrung des Autors sind die vorgestellten Techniken und Konzepte Grundlage bzw. Arbeitserleichterung für die professionelle Java-Entwicklung. Ich kann jedem Entwickler dieses Buch wärmstens empfehlen.

Hier der Link zu Amazon.

Default Methoden in Java 8

Mit Default-Methoden läßt sich Logik nun direkt in Interfaces abbilden. In anderen Sprachen ist die Verwendung solcher vorgefertigter Funktionalität auch als Mixin bekannt.

Default-Methoden erlauben, das Interfaces direkt als funktionale Bausteine verwendet werden können. Klassisch wurde mit einem Interface eine Schnittstelle nur definiert, die dann eine Implementationklasse erfüllt. Default-Methoden revolutionieren die Art und Weise wie mit Interfaces und abstrakten Klassen in Java gearbeitet wird. Code kann in einer ganz neuen Art in einem Projekt verteilt werden.

So läßt sich einfach ein Interface inhaltlich erweitert. Z.B. das Collection Interface besitzt die Methode isEmpty().

[code language=“java“]
public interface Collection {

public boolean isEmpty();

}
[/code]

Diese Methode könnte man in einem weiteren Interface als Default-Methode definieren, da wahrscheinlich in 99% der Fälle die Implementierung wie folgt aussieht:

[code language=“java“]
public interface CollectionNew extends Collection {

public boolean isEmpty() {
return this.size() == 0;
}

}
[/code]


API-Evolution
Mit Default-Methoden kann eine bereits veröffentliche Schnittstelle um neue Methoden erweitert werden. Bestehende Implementationen können auch nach der Änderung der Schnittstelle compiliert werden (Quellcodekompatibel). Man ist als Entwickler nicht mehr gezwungen, eine neue Version einer Schnittstelle in einer Version X eines Interface anzubieten. So kann die Fragmentierung einer Schnittstelle verhindert werden.

Umgang mit Adaptern
Auf abstrakte Klassen kann man verzichten. Die Default-Logik ist ja schon im Interface definiert. Also, statt ein Interface, eine abstrakte Klasse und dann erst eine Klasse zu schreiben, die das Interface vollständig erfüllt, muß jetzt nur das Interface und schließlich eine Implementationsklasse geschrieben werden.

Vererbung
Default-Methoden können in Unterklassen überschrieben werden. Nicht erlaubt ist das Schlüsselwort final an einer Default-Methode, aber das versteht sich von selbst.

Fazit
Mit Default-Methoden wird dem Java-Entwickler ganz neue Möglichkeiten gegeben, Schnittstellen zu designen und Klassenhierarchien aufzubauen. Auf github findet ihr noch ausführlichere Beispiele:

GitHub-Mark-32px https://github.com/claudioaltamura/java8/tree/master/defaultmethods

Applying UML and Patterns

Eine Einführung in die Objektorientierte Analyse/Design und iterative Entwicklung

Link zu Amazon

In diesem Buch wird der gesamte Entwicklungsprozess betrachtet, angefangen mit Usecases bis zum Softwaredesign. Der Leser erhält einen super Einblick in folgende Bereiche:

Anforderungen
Use Cases
OOA/D
OO-Prinzipien
UML
Patterns
Iterative Entwicklung
agile Methoden
Testen
Architektur

Dieses Buch ist vollgespickt mit Bespielen und Praxistipps. Craig Larmans Buch läßt sich sehr locker lesen. Schön ist, dass auf einfache Art und Weise Larman UML zur Kommunikation seiner Ideen nutzt. Besonders gut finde ich die Anwendung der GoF Design Patterns im POS (Point of Sale)-System Beispiel, dass sich durch das ganze Buch zieht.

Hervorzuheben sind außerdem die GRASP-Pattern. Die GRASP-Patterns
(General Responsibility Assignment Software Patterns) bezeichnen eine Menge von Entwurfsmustern, die die Zuständigkeiten bestimmter Klassen in objektorientierten System festlegen. Geübte OO-Entwickler beherrschen diese Patterns unbewußt. Gleichzeitig stellen diese Patterns ein Katalog dar, mit dem fortgeschrittene Entwickler ihre Regeln für gutes bzw. schlechtes Design überprüfen können. Ich kann das Buch absolut empfehlen.

Hier der Link zu Amazon.

Consent Management Platform von Real Cookie Banner