Releases

Wenn ein Projekt auf GitHub eine neue Version veröffentlich, bekommt man das nicht unbedingt gleich mit. Ich nutze daher einen Dienst von GitHub und abonniere mir einen RSS-Feed von den Releases.

FEED URL

Wie kommt man an die Feed URL? Es ist ganz einfach. Gehen Sie auf die Releases Seite von dem gewünschten GitHub Projekt. Fügen Sie nun am Ende der URL noch .atom an und schon haben sie die URL für den Feed.

Das Vaadin Addon Repository

Damit man auf die Vielzahl von Addons für das Vaadin Framework drauf zugreifen kann, muss man das Repository bekanntmachen. Ich nutze das Vaadin Plugin com.devsoap.vaadin-flow, um das Repository einzubinden.

plugins {
    id 'com.devsoap.vaadin-flow' version '1.2'
}

Repository einbinden

Das Repository kann über die Methode addons() im Closure der Repositories eingefügt werden.

repositories {
    vaadin.addons()
}

Nun kann man auf eine Vielzahl von Addons für Vaadin Flow zurückgreifen.

Git Credentials

Es ist auf Dauer müßig, immer und immer wieder die Credentials einzugeben. Daher gibt den internen Credentials Store von Git, aber dieser speichert nur SSH Credentials.

git config --global credentials.helper 'store --file ~/.git-credentials'

Lösung für HTTP(s) Verbindungen

Es gibt im AUR das Paket git-credential-gnome-keyring. Der Helper ermöglicht es auch für HTTP Verbindungen die Credentials zu speichern.

yaourt -S --noconfirm git-credential-gnome-keyring

Nun muss der Helper nur noch git bekannt gemacht werden:

git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

Jetzt speichert Git die Credentials im Gnome-Keyring.

Einen bestimmten Test ausführen

Der Task test kennt Filter. Mit diesen Filtern kann man die auszuführenden Tests einschränken.

./gradlew test --tests *Soup.isBlackEyedBeansSoup -ds

Sternchen sind als Platzhalter erlaubt. Der Punkt trennt Klassen von Methode(n). Auch hier sind Platzhalter erlaubt. In dem Beispiel oben wird die Methode isBlackEyedBeanSoup in allen Klassen die mit Soup enden aufgerufen.

Zusätzliche Informationen ausgeben

Die normale Ausgabe unterdrückt Informationen die die Fehleranalyse ermöglichen.

  • -d, –debug Log in debug mode (includes normal stacktrace).

  • -s, –stacktrace Print out the stacktrace for all exceptions.

JSON

Der Aufruf von Restschnittstellen im Browser zeigt oftmals unformatiertes JSON an. Das macht das lesen der Response schwierig und dadurch implizit auch fehleranfälliger.

Chrome Plugin

Natürlich gibt es dafür schon Lösungen. Es gibt eine ganze Reihe von Plugins für Firefox und Chrome. Ich verwende
JSONView. Dieses kann das JSON parsen und verwendet hierfür intern jsonlint. Die Ausgabe ist nun übersichtlich und wird ordentlich dargestellt. Das Plugin ist performant und das Anzeigen von JSON Antworten macht richtig spaß.

Build Environment anzeigen

Welche Klassen sind im Classpath während des Buildvorgangs?

jre11 ./gradlew buildEnvironment

jre11 ist ein kurzes Shellskript welches mir die Java Umgebung in der Version 11 für das Programm zur Verfügung stellt und ist daher optional.

Welche Klassen werden in einer bestimmten Konfiguration geladen?

Gradle bindet je nach Aufgabe unterschiedliche Klassen ein. Welche sind diese? Das ist zum Beispiel die Frage die man sich stellt, wenn die Ausführung des Code Generators von Jooq unter JDK 11 nicht funktioniert.

Mit –configuration kann man den Dependency Tree auf eine Konfiguration einschränken. Hier ist es also die jooqRuntime die uns interressiert.

jre11 ./gradlew dependencies --configuration jooqRuntime

> Task :dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

jooqRuntime - The classpath used to invoke the jOOQ generator. Add your JDBC drivers or generator extensions here.
+--- org.jooq:jooq-codegen -> 3.11.5
|    +--- org.jooq:jooq:3.11.5
|    |    \--- javax.xml.bind:jaxb-api:2.2.12 -> 2.3.1
|    |         \--- javax.activation:javax.activation-api:1.2.0
|    \--- org.jooq:jooq-meta:3.11.5
|         \--- org.jooq:jooq:3.11.5 (*)
+--- org.xerial:sqlite-jdbc:3.23.1
+--- com.sun.xml.bind:jaxb-core:2.3.0.1
\--- com.sun.xml.bind:jaxb-impl:2.3.0.1

(*) - dependencies omitted (listed previously)

In dem Beipiel benötigt der Code Generator JAXB, welche ja aus dem JDK entfernt worden ist. So kann überprüft werden, ob die Klassen geladen werden.

Alte Methode um einen bestehenden Index zu verändern

Alte Methode

Unter Verwendung der alter table Anweisung musste zunächst der Index gelöscht und dann neu erstellt werden.

ALTER TABLE `articles` 
  DROP INDEX `selled`,
  ADD INDEX `selled` (`selled` ASC) 

Neue Methode die als Alias implementiert ist

Mit create or replace (ab MariaDB 10.1.4) kann der Index angelegt werden, wenn er noch nicht existiert oder modifiziert werden.

CREATE OR REPLACE 
  INDEX selled 
  USING BTREE 
  ON `articles` (`selled` ASC) 
  COMMENT 'Abfragen zu Verkaufsstatistiken...';

Hat man einen Web Server z.B. Tomcat im Classpath, dann startet Spring Boot diesen automatisch. Es kann aber sein, das man die selbe Codebasis für zwei Anwendungen benutzt. Es lässt sich das Starten des Webservers steuern. Zum einen über die application.properties und programmatisch.

Spring Boot 2.x

Hier über die Properties:
spring.main.web-application-type=none

oder

public static void main(String[] args) {
    new SpringApplicationBuilder(Application.class)
        .web(WebApplicationType.NONE) 
        .run(args);
}

Spring Boot 1.x

Ab 2.0 haben sie die Bezeichnungen geändert. Zuvor musste die web-environment auf false gesetzt werden.

spring.main.web-environment=false

Geringer Plattenplatz zur Verfügung?

Jeder kennt die Situation das schnell etwas mehr Plattenplatz her muss, weil zum Beispiel wichtige Updates anliegen. Wenn es schnell gehen muss, dann reicht oft eine Liste der Größten Dateien um zu entscheiden was gelöscht werden kann. Dazu reichen die Bordmittel von Linux aus. Ein bischen find, sort und head und schon bekommt man die größten Dateien auf dem Rootfilesystem angezeigt.

sudo find / -type f -ls | sort -k 7 -r -n | head -20

So lassen sich schnell die 20 größten Verbraucher an Plattenplatz bestimmen.

Aber Achtung: Es werden auch die virtuellen Dateisysteme (wenn eingehangen) mit untersucht und somit können auch bei viel Arbeitsspeicher Abbilder (/proc/kcore) oder VRAM der Grafikkarte mit in den Top 20 sein.