[Rezension] Sehr gute Einführung in Scala

June 17th, 2015

Rezension des Buchs: Martin Odersky, Lex Spoon, Bill Venners. Programming in Scala. Artima. 2010.

Scala ist ein wichtiger Meilenstein bei der Fusion von funktionaler und objektorientierter Programmierung. Diese Fusion ist aber noch nicht abgeschlossen, sondern ein “Entdeckungs-Prozess”, der noch ein paar Jahre andauern wird.

Um ein objekt-funktionaler Entwickler zu werden benötigt man momentan noch sehr viel Hintergrundwissen, weil man die Techniken und Methoden beider Paradigmen beherrschen muss. In Zukunft wird sich da eine Zwischenmenge bilden, so das der Einstieg leichter werden wird.

Ich persönlich kannte die funktionale Sprache Haskell und die Objektorientierung mit Java und Groovy auf der JVM sehr gut, hatte also weitreichende Vorkenntnisse. Aber trotzdem war das Buch eine doch fordernde Lektüre in der zweiten Hälfte.

Aber die Hauptaufgabe des Buchs – die Sprache Scala zu erklären – erledigen die Autoren meisterhaft. Sämtliche (damals implementierten Feature) werden ausführlich und verständlich erklärt. Das Buch ist auch jetzt nach 4 Jahren immer noch die beste Erklärung von Scala. Kapitel 25 z. B. enthält schöne fortgeschrittene Beispiele für die Integration eigener Datenstrukturen in das Collection-Framework ab Scala 2.8. Man benötigt allerdings Kenntnisse aus den Bereichen FP, OO und Java. Es ist kein Einsteigerbuch, sondern richtet sich an erfahrene Entwickler.

Ich habe dieses Buch jetzt dreimal gelesen, 2009 die erste Edition, 2011 die zweite und jetzt 2015 noch einmal. Das Buch kann man nicht gewinnbringend in einem Rutsch so durchlesen. Man muss zwischendrin stoppen und die Sprache ausprobieren, Beispiele erfinden und Scala am besten in Projekten verwenden. Nach dem ersten Mal 2009 habe ich bei manchen Teilen zuerst noch gedacht, “das ist so zu kompliziert, das brauche ich doch gar nicht” oder “die Syntax ist zu weit von Java entfernt, das will dann wieder kein Programmierer lernen”. Aber im Laufe der Zeit merkt man, dass sich viele Dinge mit Scala Traits, Klassen und Objekten sehr gut modellieren lassen, das Scala eine sehr elegante Sprache ist und das auch Kovarianz und Kontravarianz für die Implementierung eigener Kollektionen wichtig sind.

Das Buch ist 2010 erschienen, aber momentan nur in kleinen Teilen veraltet. GUIs erstellt man heute mit JavaFX und nicht mit Swing, die Skala-Aktoren sind deprecated. Leider fehlen natürlich auch wichtige Neuentwicklungen, wie z. B. die parallelen Collections (ab 2.9), Futures und Promises (2.10), Reflektions (2.10) und Makros. Auch die Frameworks Akka, Play und Spark gab es damals noch nicht und tauchen dementsprechend auch nicht auf. Sie würden den Rahmen des Buches allerdings auch sprengen.

Also: der Einstieg in Scala ist einfach, das Vorankommen dann aber erfordert Übung und man muss sich das Buch immer wieder zur Hand nehmen und Beispiele programmieren.

Scala ist eine sehr reichhaltige Sprache und dieses Buch ist nach wie vor der beste Einstieg. Es ist nicht immer einfach, aber es lohnt sich.

[Rezension] Definitiver Rundumschlag um das Hadoop-Ökosystem

June 2nd, 2015
Rezension des Buchs: Tom White. Hadoop: The Definitive Guide. 4th ed. O’Reilly. 2015

Das Hadoop-Ökosystem ist im Laufe der Zeit erheblich gewachsen. Dieses Buch bietet einen Überblick über die wichtigsten Themen und Projekte des Frameworks. Neben einer Erläuterung der Grundlagen von Hadoop, insbesondere HDFS, YARN und MapReduce, werden Erweiterungen, wie z. B. HBase, Spark, Zookeeper, Avro uvwm. ausführlich behandelt.

Um dieses Buch allerdings mit Gewinn lesen zu können, sollte man das MapReduce-Paradigma schon kennen und auch mit Hadoop erste Erfahrungen gesammelt haben. Es ist kein Einsteigerbuch. Es ist allerdings auch kein endgültiges Profibuch, da oft nicht genügend in die Tiefe gegangen wird.

Was ich persönlich vermisse, ist ein Abschnitt “Hadoop in Practice”, in dem über Erfahrungen aus der Praxis berichtet wird. Hier sollten Tipps und “Best Practices” für Betrieb und Entwicklung behandelt werden. Wie sehen übliche Einsatzszenerien aus? Welche Probleme gibt es da? Wie verhalten sich unkomprimierte Dateien in der Regel bei der Performance? Welche Änderungen gibt es, wenn ich Komprimierung verwende? usw.

Denn das Buch liest sich stellenweise wie eine sehr lange Dokumentation. Auch gibt es viele überflüssige Tabellen, wie z. B. die Tabelle aller primitiven Datentypen von Hive. Als Entwickler benutze ich das Buch doch nicht als Referenz, dass kann ich schneller googlen als es im Buch nachzugucken.

Schade finde ich, dass das maschinelle Lernen, z. B. mit Mahout, gar nicht im Buch behandelt wird. Auch das Monitoring von Hadoop wird nur gestreift, hier wäre interessant, wie das z. B. mit Nagios, Ganglia, Puppet, Chef oder Ambari genutzt werden kann. Und heutzutage sollte Containerisierung mit Docker natürlich auch nicht fehlen.

Aber alles in allem ist es ein sehr umfangreiches Buch und mir haben die meisten Stellen gut gefallen, wie z. B. die Behandlung fehlerhafter Daten, Debugging und Profiling in Kapitel 6 oder die genaue Beschreibung des Aufrufs von MapReduce-Jobs in Kapitel 7.

Ich kann das Buch jedem mit den o.g. Grundkenntnissen empfehlen.

Dieses Review bei Amazon.

[Rezension] Guter Einstieg, aber zu unkritisch

May 15th, 2015

Rezension des Buchs: DJ Patil, Hilary Mason. Data driven – Creating a Data Culture. O’Reilly. 2015.

In diesem Buch erläutern die beiden Autoren, was sie unter einer “Datenkultur” verstehen. Sie erläutern, welchen Stellenwert die Daten in menschlichen Organisationen haben (hauptsächlich Firmen, NGOs (non government organisations), Vereine etc.) und das sie von möglichst vielen Menschen genutzt werden soll. Traditionelle Data-Warehouses waren bürokratisch organisiert, es gab eine kleine “Informations-Elite” und normale Anwender mussten u. U. lange auf die Umsetzung ihrer angeforderten Reports warten. Big Data setzt auf eine “Demokratisierung”, d.h. die Daten sollen möglichst vielen zur Verfügung gestellt werden.

Es ist ein ganz angenehmer Anfang, aber leider viel zu optimistisch und noch nicht zu Ende gedacht. Wo liegen die Gefahren? Was ist mit der Daten-Qualität? Wenn diese schlecht ist, sind auch die Folgerungen aus diesen Daten schlecht? Wie bringt man seinen Mitarbeitern Statistik bei? Facebook und Co. haben wohl keine Schwierigkeiten sehr intelligente “Data Scientists” anzuheuern, aber die kleineren Firmen hingegen wohl schon. Auch gibt es viele Möglichkeiten mit Statistik falsche Schlüsse zu ziehen, siehe z. B. das Buch “The flaw of averages” by S. Savage.

Aber insgesamt kurz und einen Blick wert, aber zu unkritisch.

[Rezension] Pflichtlektüre im Bereich Security

May 7th, 2015

Rezension des Buchs: Bruce Schneier. Beyond Fear: Thinking Sensibly About Security in an Uncertain World. Copernicus. 2003.

In dem 2003 geschriebenen Buch schreibt der Autor ganz allgemein über Sicherheit. Hier ist die englische “security” gemeint und nicht die “safety”, d. h. die Zuverlässigkeit. Er hat das Problem sehr gut durchdacht und abstrahiert soweit, dass er verschiedene Themen wie Terrorismus, Passkontrollen, Kreditkarten und Computersicherheit behandeln kann. Er stellt hierfür einen 5-Fragen-Plan auf, mit dem Sicherheit-Systeme hinterfragt werden können und führt dieses für die o.g. Bereiche durch.

Ich war zwischendurch sehr beeindruckt davon, wie viel Durchblick der Bruce Schneider wirklich hat. Es ist stellenweise schon ein Philosophiebuch. Auch die ökonomischen Hintergrunde berücksichtigt er. Für ihn ist Sicherheit immer ein Tradeoff zwischen der Vermeidung der Gefahr und dem Aufwand zur Erreichung dieser.

Das Buch ist von 2003 und damals befand sich die USA noch in einem Schockzustand aufgrund 9/11. Das Buch von Herrn Schneier sollte wohl auch dazu anregen, die damals von der Politik betriebene “Homeland-Security” der USA kritisch zu überdenken. Denn viele der von der Politik geforderten Mittel können den gewollten Effekt nicht haben und sollen nur die Wähler beruhigen, sie sind ein Placebo.

Stellenweise in der Mitte allerdings wurde es ein wenig langatmig, aber dennoch ein Meilenstein.

[Rezension] 3D-Druck und Industrie 4.0 für Kleinunternehmen

May 2nd, 2015

Rezension des Buchs: Chris Anderson. Makers: Das Internet der Dinge: die nächste industrielle Revolution. Hanser. 2013.

Der Autor beschreibt in diesem Buch, wie industrielle Fertigungsprozesse mit CAD, dem 3D-Druck und/oder durch Outsourcing auch von Kleinunternehmern durchgeführt werden können. Die Dezentralisierung, d.h. eine möglichst große Verteilung der Produktionsmittel – im Gegensatz zu einer Zentralisierung im Sozialismus – wurde von vielen schon als Garant der Freiheit und Wohlstand gesehen. Das Buch ist von 2012 und der Autor beschreibt die Situation sehr enthusiastisch, allerdings auch ein wenig zu unkritisch.

1. Er geht nicht genügend auf die industrielle Verwendung der 3D-Drucker ein. Er schreibt “Es gibt keine Stückkostendegration”. Das mag im Kleinen stimmen, aber nicht, wenn 3D-Druck industriell 24/7 eingesetzt wird. Wir wird Plastik nachgefüllt? Wenn das Modell geändert wird, muss der Computer den optimalen Guss berechnen, d.h. die Pfade für den 3D-Drucker. Das kostet Zeit. Hier schreibt er “Dem Computer ist es egal, wie viele Berechnungen er durchführen muss”. Ja, aber bei den Stromkosten macht das einen Unterschied. Das könnte insbesondere später bei komplexeren Modell schon entscheidend sein (vor allem wenn die Strompreise weiter steigen).

2. Er berücksichtigt meiner Meinung nach das “Wissen” nicht, das ein 3D-Modellierer und -Entrepeneur haben muss und die Infrastruktur um den 3D-Betrieb herum. In Baden-Württemberg mit viel Industrie wird es mehr Aufträge geben, als z. B. in Ostfriesland mit wenig Industrie. So global wie der Autor die Wirtschaft beschreibt, ist sie meiner Meinung nach nicht.

3. Der Autor geht auch nicht auf die Gefahren auf Regulierung durch den Staat ein (bei uns auch die EU). Solange der 3D-Druck nur ein Hobby für wenige ist, tut er der etablierten Industrie nicht weh. Wenn sich das ändert, besteht die Gefahr, dass die etablierten Groß-Unternehmen versuchen, die Konkurrenz zu verhindern. Dann werden die Firmen beim Staat versuchen, kostenintensive Regulierungen durchzusetzen, die sich nur Großbetriebe leisten können.

4. Auch werden die rechtlichen Aspekte, wie Gewährleistung, Umtausch, Reklamationen, Kundenanfragen, etc. nicht behandelt. Der Autor ist US-Amerikaner, geht aber auch auf die Situation in den USA nicht ein.

5. Das Thema hat mit dem “Internet der Dinge” eigentlich nur am Rande zu tun. Das hat der Übersetzer da in den Buchtitel hineingebaut, denn das ist im englischen Original nicht vorhanden.

6. Das vorgeschlagene Geschäftsmodell von “3D Robotics” lässt sich leider nicht auf alle Unternehmen verallgemeinern. Das Unternehmen profitiert davon, dass Enthusiasten umsonst als Hobby an den Drohnen arbeiten, die Software verbessern usw. Diese Menschen arbeiten ja noch bei anderen Firmen und beziehen ihr Gehalt aus der “alten” Wirtschaft.

Das Buch ist aber als Einstieg sicherlich lesenswert.

Measuring traffic on the PCI Express Bus (PCIe)

April 24th, 2015

During my talk at the parallel 2015 conference i was asked how one can measure traffic on the PCI express bus. For multi GPU computing it is very important to control the amount of data exchanged on the PCIe bus.

You need the  Intel Performance Counter Monitor (https://software.intel.com/en-us/articles/intel-performance-counter-monitor). Compile it and copy pcm-pcie.exe into a new directory.

Then read this helpful article http://www.correlsense.com/blog/intel-performance-counter-monitor/ of how to obtain the missing WinRing dlls and drivers. Copy them into the same directory, start the cmd.exe as an admin and there you go.

Now you can analyse the traffic on the PCI bus.

C:xyzIntelPerformanceCounterMonitorV2.8bin>pcm-pcie.exe
DEBUG: Setting Ctrl+C done.

Intel(r) Performance Counter Monitor: PCIe Bandwidth Monitoring Utility

Copyright (c) 2013-2014 Intel Corporation
This utility measures PCIe bandwidth in real-time

PCIe event definitions (each event counts as a transfer):
   PCIe read events (PCI devices reading from memory – application writes to disk/network/PCIe device):
     PCIePRd   – PCIe UC read transfer (partial cache line)
     PCIeRdCur* – PCIe read current transfer (full cache line)
         On Haswell Server PCIeRdCur counts both full/partial cache lines
     RFO*      – Demand Data RFO
     CRd*      – Demand Code Read
     DRd       – Demand Data Read
     PCIeNSWr  – PCIe Non-snoop write transfer (partial cache line)
     PRd       – MMIO Read [Haswell Server only: PL verify this on IVT] (Partial Cache Line)
   PCIe write events (PCI devices writing to memory – application reads from disk/network/PCIe device):
     PCIeWiLF  – PCIe Write transfer (non-allocating) (full cache line)
     PCIeItoM  – PCIe Write transfer (allocating) (full cache line)
     PCIeNSWr  – PCIe Non-snoop write transfer (partial cache line)
     PCIeNSWrF – PCIe Non-snoop write transfer (full cache line)
     ItoM      – PCIe write full cache line
     RFO       – PCIe parial Write
     WiL       – MMIO Write (Full/Partial)

* – NOTE: Depending on the configuration of your BIOS, this tool may report '0' if the message
           has not been selected.

Starting MSR service failed with error 2 The system cannot find the file specified.
Trying to load winring0.dll/winring0.sys driver…
Using winring0.dll/winring0.sys driver.

Number of physical cores: 6
Number of logical cores: 12
Number of online logical cores: 12
Threads (logical cores) per physical core: 2
Num sockets: 1
Physical cores per socket: 6
Core PMU (perfmon) version: 3
Number of core PMU generic (programmable) counters: 4
Width of generic (programmable) counters: 48 bits
Number of core PMU fixed counters: 3
Width of fixed counters: 48 bits
Nominal core frequency: 3500000000 Hz
Package thermal spec power: 140 Watt; Package minimum power: 47 Watt; Package maximum power: 0 Watt;
2 memory controllers detected with total number of 5 channels.

Detected Intel(R) Core(TM) i7-5930K CPU @ 3.50GHz “Intel(r) microarchitecture codename Haswell-EP/EN/EX”
Update every 1 seconds
delay_ms: 84
Skt | PCIeRdCur |  RFO  |  CRd  |  DRd  |  ItoM  |  PRd  |  WiL
0    4236         576    5980 K  1536 K     48    3456    7116
———————————————————————–
*    4236         576    5980 K  1536 K     48    3456    7116

[Rezension] OO mit JavaScript hervorragend erklärt

April 4th, 2015

Rezension des Buchs: Nicholas C. Zakas. The Principles of Object-Oriented JavaScript. No Starch. 2014.

JavaScript hat einen Prototyp-basierten Ansatz zur Objektorientierung. Damit unterscheidet es sich stark von den üblichen objektorientierten Programmiersprachen, wie z. B. Java, C++ und Ruby. Denn bei diesen wird der Code mit Hilfe von Klassen und deren Hierarchien strukturiert. Diese Klassen und Hierarchien sind bei JavaScript bisher aber nur über kleine Umwege zu erreichen.

Daher muss man auch als gestandener OO-Entwickler bei JavaScript erst wieder lernen, wie man größere Applikationen mit Klassen, Funktionen, Modul-Objekten und Mixins strukturieren kann.

In diesem kleinem Buch erklärt der Autor mit sehr viel Fachkenntnissen, wie die traditionelle Objektorientierung auch mit JavaScript (ECMAScript 5) umgesetzt werden kann. Der Autor konzentriert sich nur auf diese “Lücke”, andere Themen werden in diesem Buch nicht behandelt. Es ist kein allgemeines Lehrbuch über die objektorientierte Programmierung. Für das Verständnis sind Grundkenntnisse in OO und in JavaScript notwendig.

Ob dieses Buch auch nach dem Erscheinen von ECMAScript 6, das für Mitte 2015 angekündigt wurde, noch lesenswert ist, kann ich noch nicht beurteilen. Momentan aber ist es eine der besten Quellen, um JavaScript zu verstehen.

Trying out next-gen JavaScript, ECMAScript 6

April 4th, 2015

With Babel (https://babeljs.io) you can test many features of the upcoming next version of JavaScript called ECMAScript 6 (https://en.wikipedia.org/wiki/ECMAScript) now.

I made some tests and prepared a grunt package (http://gruntjs.com) and made in available on github, see https://github.com/jdinkla/ecma6-babel-test.

[Rezension] Java MapReduce mit Hadoop

March 27th, 2015

Rezension des Buchs: Donald Miner, Adam Shook. MapReduce Design Patterns: Building Effective Algorithms and Analytics for Hadoop and Other Systems. O’Reilly. 2012.

MapReduce ist ein “Korsett” und zwingt den Entwickler in enge Grenzen. Daher macht es Sinn, dieses Buch zu lesen, damit man schnell die üblichen Tricks und Kniffe kennenlernt. Ähnlich ist es ja beim Lernen von anderen Paradigmen auch, wie z. B. Devide-and-Conquer oder Rekursion. Man begreift das allgemeine Prinzip schnell, man muss aber lernen, wann und wie man es am besten einsetzt.

In diesem Buch werden typische Anwendungsfälle für Hadoop in Java MapReduce implementiert. Dabei liegt der Schwerpunkt nicht auf den eigentlichen Entwurfsmustern (“design patterns”), wie der Titel des Buches suggeriert, sondern auf den konkreten Implementierungen. Wer nur an der Implementierung dieser Pattern interessiert ist, wird mit diesem Buch gut bedient. Man sollte aber vorher schon erste Erfahrungen mit Hadoop gemacht haben und Java gut kennen.

Wer allerdings wirkliche “Entwurfsmuster” für beliebige MapReduce-Frameworks sucht, wird mit diesem Buch nicht 100% glücklich. Die im Untertitel erwähnten “other systems” kommen definitiv zu kurz. Auch wer Hadoop mit Pig, Hive oder Apache Crunch benutzt kann sich das Lesen des Buches evtl. sparen oder nur schnell durchfliegen. Die langen Java-Listings kann man sich dann nämlich sparen.

Wer allerdings wirklich wissen will, was hinter Pig passiert, sei es bei der Fehlersuche oder bei Performance-Problemen, der kann sich hier schon den einen oder anderen Tipp anlesen.

[Rezension] Gute Einführung in C++ AMP

March 16th, 2015

Rezension des Buchs: Kate Gregory. Ade Miller. C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++. Microsoft Press. 2012.

Dieses Buch ist eine gute Einführung in die Programmierung mit C++ AMP. Leider ist das Buch zum Zeitpunkt der Rezension das einzige Buch über C++ AMP, so dass ich es nur mit anderen Büchern über CUDA und OpenCL vergleichen kann. Aber den Vergleich hält das Buch stand und hat sich solide 4 Sterne verdient. Die Reihenfolge fand ich in Kapitel 2 ein bisschen ungünstig, aber das hat sich im nächsten Kapitel wieder gelegt. Kapitel 2 sollte man beim ersten Lesen überspringen und erst am Ende lesen. Denn Kapitel 2 ist über das schon etwas kompliziertere n-body Problem und auch noch mit DirectX-Grafik. Das ist didaktisch nicht klug, das am Anfang zu behandeln. Dann gibt es da noch ein paar Kleinigkeiten, wie z. B. das ständig std::vector<> und std::shared_ptr<> im Programmcode geschrieben wird. Mich stört das “std::”.

Aber alles in allem ist man nach diesem Buch bereits ein fortgeschrittener GPU-Programmierer, der schon ein gutes Verständnis von der Thematik hat. Notwendig sind Vorkenntnisse in C++, STL und der parallelen Programmierung. Die Beispielprogramme wurden an VS 13 angepasst.


Copyright © 2007-2015 Jörn Dinkla. All rights reserved.