Note de lecture : Event Streams in Action, par Alexander Dean & Valentin Crettaz

Note : 5 ; Une architecture intéressante rendue difficile d’accès par trop de foisonnement technologique !

Le titre initial de cet ouvrage était « unified log processing ». Et c’est souvent de cela qu’il est question ici. Mais le propos a été quelque peu élargi en cours de route, tout en tournant quand même essentiellement autour des grands bus de messages que sont Kafka et Kinesis. Voyons ce qu’il en est.

Le livre compte près de 300 pages, structurées en 3 parties pour un total de 11 chapitres. La première de ces parties se focalise sur l’aspect Unified Log. C’est la plus conséquente du volume, car elle contribue pour 5 chapitres et noircit près de 115 pages ! Fort classiquement, le premier chapitre introduit quelques grands principes d’architecture de l’event stream, ainsi que des cas d’usage. Tout cela est fort agréablement écrit et très bien illustré. On rentre un peu plus dans le dur au chapitre 2, non pas avec la première partie qui détaille l’event log et la structure d’un évènement (en JSON), mais plutôt par l’illustration de la chose avec Kafka et son installation !

Le 3ème chapitre est assez gourmand. Il nous conduit à écrire notre premier worker Kafka. Cela veut dire aussi mettre en place un environnement de développement avec Vagrant et une architecture comprenant du Zookeeper et tout le toutim. Ce n’est pas très facile à suivre. En fait, on n’a guère le temps de reprendre notre souffle au chapitre 4 qui remet ça, mais avec Kinesis ! Dans son ensemble, le chapitre n’est pas super-agréable à lire : beaucoup de setup AWS (forcément) et de longs listing JSON assez ennuyeux en sont la cause principale. De plus, même si c’est assez logique, le code Kinesis est en Python, ce qui n’est pas ce que je préfère.
Au-delà d’être un chapitre douloureux, le va et vient entre Kafka et Kinesis afin de couvrir beaucoup de terrain est une surcharge technologique qui nuit à l’objectif du livre : nous permettre d’appréhender l’architecture « log unifié ». Cette première partie se conclut sur un chapitre au titre paradoxal : le stateful stream processing. Cela commence de manière fort sympathique avec des concepts tels que les évènements dérivés et le fenêtrage de traitement. C’est plus rugueux en seconde partie de chapitre où les auteurs nous introduisent la suppression de paniers avec Apache Samza, avec le code, l’installation et la configuration qui vont avec…

Lire la suite

Programming Concurrency on the JVM, par Venkat Subramaniam

Note : 5 ; Essentiellement intéressant pour la programmation par acteurs, bien que le traitement du sujet soit largement perfectible.

Ce livre a attiré mon attention, car il traite de programmation concurrente, non spécifiquement en Java, mais sur différents langages de la JVM. Dans la pratique, on parle presqu’exclusivement de Java et de Scala. Clojure parvient à se ménager une petite place, surtout que STM vient de là, mais JRuby et Groovy sont abordés de manière vraiment très succincte en fin de livre.

Du livre, parlons-en : il s’agit d’un texte de 250 pages découpé en 5 parties (la 5ème ne contient qu’un court chapitre de conclusion) et totalisant 10 chapitres. Le premier chapitre est une courte introduction illustrée par du multithread « de base » en Java. Il nous présente le thème récurrent du texte : « shared mutability is pure evil ! ».

La première partie s’intitule « stratégies for concurrency » et se contente de 2 chapitres sur 30 pages. Le chapitre 2 « division of labour » évoque le mapping des tâches avec des threads dans différentes configurations applicatives. C’est un sujet instinctivement naturel mais bien illustré ici. Le texte ayant pris quelques rides, il ne pouvait évoquer les co-routines popularisées par Go et désormais disponibles sur la JVM. Au chapitre 3, on prépare la seconde partie en évoquant, hélas de manière légère, des options de conception liées à la gestion des états, et plus précisément l’impact de la mutabilité. Un chapitre un peu décevant.

Lire la suite

Note de lecture : Effective Modern C++, par Scott Meyers

Note : 7 ; Une verve et une pédagogie toujours présente, mais dans un ouvrage (et un sujet) plus difficile d’accès.

Je suis bien rouillé sur le C++. Je le savais déjà, mais ce texte m’en a fait prendre conscience de manière nette. Par ailleurs le C++ et la manière dont on doit penser son code ont aussi évolué de manière radicale, et ce texte plus que tout autre m’en a fait prendre conscience.

Ce sont 300 pages qui sont consacrées à couvrir les 42 items de ce texte. L’ensemble est regroupé en 8 chapitres. La place dédiée à chaque item est significativement plus importante que dans « effective C++ ». Le premier chapitre « deducing types » fait un peu moins de 30 pages et couvre 4 items. Il fait un choc car on prend de face l’un des aspects du C++ 11 les plus complexes : la gestion des types. Et là il faut bien comprendre les notions de lvalue, de rvalue (à propos, ne sautez pas l’introduction) et de référence universelle. Ajoutons-y l’inférence de type et une touche de template métaprogramming, vous vous dites que le livre va être très long, d’autant que l’auteur semble avoir perdu son humour au passage.

Sans être hilarant, le court chapitre 2 dédié à l’inférence de type avec auto nous permet de reprendre notre souffle. Peut-être ces explications nous auraient même été utiles au premier chapitre ? Je retrouve vraiment le style inimitable de Scott Meyers au chapitre 3. Les sujets traités sont moins ardus, mais ce chapitre couvre quand même 11 items sur 70 pages où l’auteur nous fait découvrir « in situ » les nouveaux mots-clés, les nouvelles constructions du C++ … et leurs sombres recoins. Un chapitre vraiment instructif et agréable.

Lire la suite

Note de lecture : Vous allez commettre une terrible erreur ! par Olivier Sibony

Note : 3 ; Plus une tribune pour que l’auteur clame ses idées, qu’un véritable travail d’étude.

De prime abord, le titre semblait prometteur sur l’investigation des biais cognitifs. Hélas, Olivier Sibony essaie de faire « comme les grands » mais n’y parvient pas. Le texte vise les décideurs et l’auteur se livre au long des pages à une danse de séduction à leur égard qui nuit gravement à la force du texte aussi bien qu’à son contenu même. Nous reviendrons là-dessus en conclusion de cette note.

L’ouvrage lui-même compte 330 pages (hors annexes) divisées en 3 parties, le tout totalisant 16 chapitres. La première partie compte 176 pages sur 9 chapitres. C’est la partie la plus longue, de loin, mais aussi la plus intéressante. Ça tombe bien. C’est justement la partie qui évoque les biais cognitifs. On commence au chapitre 1 par « le piège du storytelling ». Ce chapitre regroupe 3 biais : le biais de confirmation, le biais du champion et le biais d’expérience. Le tout est illustré … par une histoire ! Il s’agit de celle des avions renifleurs. Toutefois le propos et les biais sont clairement expliqués. Mais, et l’on retrouvera cela tout au long du livre, l’auteur manipule bel et bien les éléments dans une direction qu’il souhaite donner. Pour quelqu’un qui prône « les faits, rien que les faits » …

Le second chapitre évoque le piège de l’imitation. Il regroupe l’erreur d’attribution (où l’on corrèle trop vite un résultat avec un facteur), l’effet de halo où seuls les traits qui attirent notre regard sont notés à l’exclusion des autres éléments et le biais du survivant où les ratages sont ignorés. Un bon chapitre bien et clairement illustré. Le chapitre 3 nous emmène vers les pièges de l’intuition : en relatant Kahneman, nous y voyons plus clair sur le champ d’application de l’intuition et du danger de l’extrapoler. Un sujet clairement traité.

Lire la suite