Der Blog lebt wieder

- 2 mins read

Nach einigen Jahren Pause ist dieser Blog zurück — mit frischem Setup, klarerem Fokus und derselben Motivation wie damals: Wissen verständlich weitergeben, sauber strukturiert, technisch fundiert und aus echter Praxis.

In der Praxis kommt es hin und wieder vor, dass man zu einem Eintrag X vorherige und/oder nachfolgende Einträge benötigt.

Beispiele dafür könnten folgende User-Stories sein:

  • In einer Tabelle sind für die Lebzeit eines Gebäudes alle geplanten Wartungen eingetragen. Als Gebäudeverwalter möchte ich im Dashboard zu dem Gebäude immer die nächsten 3 fälligen Wartungen sehen.
  • In einer Tabelle sind alle bisher durchgeführten Reparaturen eines Autos erfasst. Als Nutzer möchte ich in einem Dashboard/Report immer die letzten 5 Wartungen sehen.
  • Eine Tabelle beinhaltet alle veröffentlichte PC-Spiele. Als Nutzer möchte ich zu jedem Spiel, das Spiel, die vorherige und die 2 nachher veröffentlichten Spiele angezeigt bekommen.

Sehr häufig habe ich bisher die Aufgabe aufgeteilt. Ich habe per SQL die Daten so weit wie notwendig eingegrenzt und sortiert und in einer Programmiersprache, dann die Logik für X vorherige/nachfolgende Einträge gebaut.

Diese Aufgabe lässt sich auch komplett im SQL lösen und genau darum geht es auch in diesem Beitrag.

Beim Benutzen des dockerfile-maven-plugin erhält man unter Windows beim Kompilieren die Fehlermeldung.

[ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.10:build (default) on project project-service: Could not build image: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: com.spotify.docker.client.shaded.org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.10:build (default) on project project-service: Could not build image
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        ...

Lösung/Workaround

localhost ist ein per Internetstandard definierter Domainname, der über eine Loopback-Schnittstelle auf die gerade genutzte Maschine verweist, meistens auf die IP-Adresse 127.0.0.1.[1]

In diesem Beitrag geht es darum, was das localhost aus den verschiedenen Perspektiven beim Einsatz von Docker ist. Dafür setzen wir die folgende Testumgebung auf:

  • Service A mit Webserver auf Port 80
  • Service B mit Webserver auf Port 81

In dem Repository docker-localhost habe ich die zwei Dockerfiles inkl. der Konfigurationsdateien bereitgestellt. Darin ist auch beschrieben, wie man die Images erstellen kann.

Beim Durcharbeiten der Jenkins Installationsanleitung erhielt ich unter Windows (Version: 1809 Build 17763.404) die nachfolgende Fehlermeldung:

Error response from daemon: 
driver failed programming external connectivity on endpoint gracious_cartwright (fdab7a0981070a7acbe7ee7e7868adaf10953fdc0a81c46ed114357bee65eaca): 
Error starting userland proxy: Bind for 0.0.0.0:50000: unexpected error Permission denied.

Die Anleitungen, bei denen ein Neustart des Systems oder von Docker empfohlen wird, habe ich alle ausprobiert und die haben nichts gebracht.[1]

In diesem Beitrag gibt es die Lösung und einige Hintergrundinformationen.

Für ein Projekt während des Studiums musste ich ein Projekt für/auf dem Raspberry Pi realisieren. Die Variante, mit vim oder nano auf dem Raspberry direkt zu entwickeln und dann mit gcc von Hand zu kompilieren, die uns von unseren Dozenten/Betreuern empfohlen wurde, war wegen der bereits gewohnten und lieb gewonnenen Komfortabilität von IDE’s für mich keine Option.

In diesem Post beschreibe ich, was und wie man alles einrichten muss, damit man wie gewohnt in Visual Studio entwickeln, und das Debuggen und Deployen auf dem Raspberry Pi ausgeführt wird.

💡 Hinweis
Dieser Artikel wurde aus meinem alten Blog-System übernommen. Kleinere Darstellungsunterschiede sind möglich. Inhaltlich entspricht er meinem damaligen Wissensstand und ist vielleicht nicht mehr auf dem neuesten Stand.
ℹ️ Info
Mit der Version 15.7 von Visual Studio hat Microsoft, IntelliSense für Linux verbessert. Beim Verbinden mit dem Gerät, werden automatisch alle benötigten Includes von dem Zielsystem heruntergeladen und von IntelliSense genutzt.Dieser Beitrag sowie das Beispiel-Projekt wurden am 21.05.2018 daran angepasst.

Nach einer Erweiterung der XML-Konfigurations-Dateien in einem Open-Source Projekt, sind die Validierungs-Tests in der CI fehlgeschlagen. In diesem Projekt werden die XML-Dateien gegen eine rng-Datei (RELAX NG-Schema) validiert und ich habe das Schema noch nicht um meine Erweiterungen ergänzt.

Ich stellte fest, dass für die Validierung das Tool xmllint (Bestandteil von libxml2) verwendet wird. Um meine Änderungen schnell selber prüfen zu können, wollte ich das Tool auf meiner Maschine ausführen und die XML-Dateien gegen die RNG-Dateien validieren.