C(D|S)U bullshit

Liebe CDU/CSU,

damit ich das richtig verstehe: Ehe für alle, da seid ihr gegen, weil, eh, das schadet der Geburtenrate in Deutschland!1 Weil, eh, jeder Homosexuelle, der seine/n langjährigen gleichgeschlechtlichen Partner nicht heiraten darf, diesen natürlich sofort verlässt, eine Heteroehe schließt und mehrere Kinder zeugt!!1 Oder wie?

Auf der anderen Seite, das Kita-Geld, das kann man streichen, das hat damit gar nichts zu tun. Ein Zuschuss (wohlgemerkt, wir reden hier noch nicht von kostenlosen Kitas) von monatlich 100€, in einem Bundesland, in dem man gerne 500€ und mehr bezahlt. Auf gar keinen Fall schaden solche Kosten der Geburtenrate!!1 Zumindest nicht, wenn man was Ordentliches gelernt hat.

Zum Glück habe ich euch nicht gewählt.

Spring Boot: @ConditionalOnMissingProperty

Spring Boot bietet ein Conditional namens ConditionalOnProperty, die die Component nur dann registriert, wenn eine gewisse System-Property entsprechend (siehe Logik unter dem Link) gesetzt ist – und ggf. auch, wenn das Property fehlt und matchIfMissing auf true gesetzt ist.

Das “auch” störte mich in einem Fall, weil ich zwar gerne gewisse Komponenten per System-Property einkonfigurieren können möchte. Aber wenn ich diese nicht habe, brauche ich Fallback-Komponenten, und dafür eine Annotation, die nur triggert, wenn das Property fehlt.

Ansage ist hier:

Since detecting missing properties can be problematic, and we’ve not got a direct need for this ourselves, I think your own custom condition is the best approach.

, was ich hiermit getan habe. Jeder Kommentar erwünscht (gerne auf gist, aber wer keinen Account hat, kann auch hier).

IntelliJ/Gradle/Groovy: “Conflicting module versions.”

, bei Ausführen des Tests aus IntelliJ heraus; per Kommandozeile geht’s.

Internet sagt, man müsse die Dependency excluden (lokal oder global), um Sie dann in nur der gewünschten Version wieder zu includen, aber das führte bei mir bestenfalls nicht zum Erfolg, und schlimmstenfalls zu

Error:Cannot compile Groovy files: no Groovy library is defined for module ‘my-module_test’

Internet sagt weiterhin, man könne eine bestimme Version forcieren, aber das hat bei mir genau gar keine Auswirkungen.

Geholfen hat dann, das Setup aus compile und testCompile zu überprüfen: Ich hatte ein Modul mit Test-Sourcen als compile project, die Dependency  org.codehaus.groovy:groovy-all:2.4.10 aber als test-compile eingebunden. Korrekt ist in dem Fall, das Modul als testCompile project einzubinden (oder alternativ die Dependency als compile, aber hier wäre das “falsch rum”).

Offenbar gilt von der Shell aus die höhere (oder die später deklarierte?) (transitive) Dependency, in IntelliJ aber die zuerst deklarierte.

JS: navigator.language im Chrome

Chrome ist der neue Internet Explorer:

Stellt sich raus: navigator.language ist im Chrome die Sprache des UI, nichtAccept-Language” m(

navigator.languages funktioniert dafür auch im FF und liefert alle akzeptierten Sprachen.

5 Alben für die Insel

UPDATE: Sieht so aus, als würde meine bisherige Methode, “Tracksets” einzubinden, nicht mehr (überall?) funktionieren 😡 Der Trick scheint zu sein, in den Einstellungen -> erweiterte Einstellungen -> Öffnen von Spotify über Web-Links erlauben:

Unter Linux geht es gar nicht, auf dem Telefon auch nicht. Ich stelle nach und nach alles auf Playlists um, das dauert aber eine Weile. Ich melde mich.

Fünf Alben “für die einsame Insel”, ohne besondere oder wertende Reihenfolge. “In a nutshell” ist jeweils eine Spotify-Playlist mit fünf ausgewählten Songs des Albums (deren Skripte dürfen dazu nicht geblockt sein, Google Analytics leider auch nicht).

Long time no hear! Ich bin wieder dem alten Fehler verfallen und wollte einen Themenbeitrag machen… mit dem Ergebnis, drei angefangene Posts vor mir her zu schieben. Anyway, dann also durcheinander:

Doors – In Concert

Die Doors höre ich inzwischen selten, aber das war mal anders: Zu Jugendzeiten hatte ich ein Poster von Jim Morrison über dem Bett hängen 🙂 Und das Doppelalbum hier ist gleichzeitig ein Best of – wie es meiner Meinung nach sein sollte bei Live-Alben, zumindest, wenn es nur ein Livealbum gibt.

PS: Ich bin etwas abgewichen von der “5 Songs”-Policy, aber erstens handelt es sich in diesem Fall um ein Medley, und zweitens wäre mir das sonst auch egal 🙃

Bruce Springsteen – The Ghost of Tom Joad

Das Rolling Stone Magazine titelte damals “Quo Vadis, Bruce?” Dieses Album ist so ganz anders als die aus E-Street-Zeiten, aber meiner Meinung nach die konsequente Weiterentwicklung der Idee “Working Class”: Während es früher um Aufwachsen, den eigenen Platz im Leben oder den (Vietnam-) Krieg ging, wird es hier deutlich ruhiger, gesetzter (rein musikalisch jetzt mal, inhaltlich habe ich gerade nicht so den Überblick), aber auch melancholischer. Wie man halt so wird, wenn sich die vorherigen Themen nicht in jedem Detail nur zum positiven gewendet haben.

Neko Case – Fox Confessor Brings the Flood

Das hatten wir noch nicht?? Hätte ich nur (ein mal) fünf Alben, dieses wäre dabei. Habe ich ungefähr den ganzen Sommer 2006 gehört; zuerst über das großartige Radio Paradise (woher ich das Album auch kenne), dann habe ich die CD von meiner damaligen Freundin bekommen. Ich liebe Nekos Stimme immer noch, und/aber ganz besonders auf diesem Album… das mit 38 Minuten sehr kurz ist, die Zeit kann und sollte man sich nehmen!

Art Blakely – Moanin’

OK, noch mal kurz Jazz. Ich verspreche, das war’s dann auch erst mal; Jazz höre ich auch eher im Winter. Das Album hier wurde übrigens von Rudy Van Gelder überarbeitet, der letzten August gestorben ist, und soll hier als Aufhänger stehen, euch “alle” RVG Edition-Alben an’s Herz zu legen! Jazz ist extrem unübersichtlich, und ich bin da kein (!) Experte, aber meiner persönlichen Erfahrung nach bekommt man einen guten Überblick, wenn man sich Miles Davis aus dem verschiedenen Jahrzehnten anhört, sowie die RVG-Alben.

R.L. Burnside – A Bothered Mind

And now for something completely different: Robert Lee “R.L.” Burnside. Der hat im zarten Alter von ~45 Jahren seine ersten Aufnamen herausgebracht, aber auch das war schon 1967 😅 So richtig ging es wohl erst in den 90ern los, ich stecke da nicht im Detail drin, aber auf diesem konkreten Album arbeitet er (unter anderem) mit Kid Rock, was definitiv anders klingt, als es seine Alben wohl in den 60ern getan haben. Deshalb ist das Album auch auf meiner “White Trash”-Playlist, was nicht nur politisch, sondern auch auf jeder anderen Ebene falsch ist. Aber ich schweife ab. Blues, gemischt mit Kid-Rock-“Rap” und elektronischem Groove.

Note to self: Kid Rock brauchen wir unbedingt nächstes mal!

Pre-shared key Authentifizierung mit Spring Boot

Pre-Shared Keys sind mit Spring Boot eine Geschichte voller Missverständnisse. Hier jeweils meine:

HTTP/HTTPS

In der Theorie scheint die Verwendung von https “überflüssig”, denn wenn ich eh nur vorher als “vertrauenswürdig” zertifizierte Clients zulasse, warum dann noch die Verbindung absichern. Naheliegende Antwort: Austausch von Identitäten über http ist nie gut – ⚠

Also https in den application.properties (/application.yml) der Server-Anwendung einschalten:

Zertifikatserstellung

Die eigentliche Idee ist jetzt: Jeder Client muss ein “trusted” Zertifikat vorweisen. Diese Zertifikate werden in einem “Trust-Store” abgelegt, den der Server bekommt. Der Client bekommt sein Zertifikat ebenfalls, dort in einem “Key-Store”, um sich auszuweisen. Andersrum analog: Das Serverzertifikat bekommt der Client in einem Trust-Store, um den https-Server zu verifizieren, der Server legt das in seinem Key-Store ab.

Insgesamt sieht die Erstellung so aus:

Wichtig dabei: Die verwendeten Passwörter (klar), aber auch der verwendete Name, beides brauchen wir unten.

PS, siehe unten und hier

Zertifikate einbinden

Die Zertifikate kann man dem Server jetzt über einen TomcatConnector bekannt machen, muss man in Spring Boot aber nicht (⚠; Danke, Nils). Stattdessen genügt Folgendes, ebenfalls in den application.properties:

Hier verweise ich auf Key-Stores in der .jar, was seit Tomcat 7.0.66+ funktioniert. ⚠

In der Client-Anwendung sieht das etwas anders aus, zuerst die application.properties:

Verwendung dann beispielhaft in einem RestTemplate (org.apache.http.* gibt’s hier)

ACHTUNG: Der NoopHostnameVerifier war hier nötig, da ich das Zertifikat nicht mit expliziten Hostnames erstellt habe, in Production würde man das wohl tun. ⚠

Userverwaltung

Natürlich kann man mehrere Client-Zertifikate verwenden, und natürlich kann man jedem Client separate Rechte zuweisen. In der Server-Anwendung:

(Quelle und Stack Overflow)

btw: Spring Security bringt einen default User mit (“user”, Passwort wird auf der Konsole beim Hochfahren ausgegeben). Deaktivierung in den application.properties:

hth