Eben ist die neue Version JUnit 5.9.0 M1 veröffentlicht worden. Dann mal ein Quicktest. Ergebnis alles noch grün:

Was gibt es Neues? „Quicktest JUnit 5.9.0 M1 alles GRÜN“ weiterlesen

Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, KI, Statistik, Krypto und Blockchain
Alles rund um Java
Eben ist die neue Version JUnit 5.9.0 M1 veröffentlicht worden. Dann mal ein Quicktest. Ergebnis alles noch grün:

Was gibt es Neues? „Quicktest JUnit 5.9.0 M1 alles GRÜN“ weiterlesen
Das Eclipse-Plugin ObjectAid installieren über die Install URL http://www.objectaid.com/update/current funktioniert nicht mehr. Das Plug-In ist dafür zu alt. Die Seite gibt es nicht mehr.
Man kann sich aber noch das Plugin über diese URL https://web.archive.org/web/*/http://www.objectaid.com/update/current/objectaid-1.2.4.zip der Wayback Maschine landen. Das Zip dann lokal in ein Verzeichnis auspacken und über die local Funktion installieren:

Dann nach einem Restart, können die UML Diagramme leicht erstellt werden.
Hier ein Beispiel meiner Blockchain, in einen frühen Stadium bei XBT 38 k$ und Block Nr. 734258: „Wie können UML 2.0 Klassen-Diagramme mit Eclipse Plugin ObjectAid auch in Version 2022-03 erstellt werden?“ weiterlesen
Heute mal ein Vergleich mit einem Beispiel-Quarkus-REST Service normal vs. nativ.
Um die Größe und die Buildzeit zu vergleichen. Hier das Ergebnis vorweg:
|
1 2 3 |
Build Start Größe normal 4,00 s 0,625 s 4588 Byte nativ 53,47 s 0,018 s 39,126296 MB |
Also native gebaute Apps sind wesentlich länger zur Buildzeit dafür laufen sie aber auch wesentlich schneller und sind dann auch auf das jeweilige Betriebssystem beschränkt.

Um auf einen MacOs Quarkus auch nativ zu kompilieren muss die GraalVM und das Native-Image installiert sein.
Also installieren wir die GraalVM auf dem Mac mit Port: „Vergleich GraalVM nativ vs. herkömmlich mit Quarkus auf MacOS“ weiterlesen
Default ist in Eclipse in der git History das relative Datum eingestellt.

Das genaue Datum kann leicht hier eingestellt werden: „Wie kann in Eclipse 2022-03 das genaue Datum in der git History angezeigt werden?“ weiterlesen
Heute ist das neue Eclipse 2022-03 Release veröffentlicht worden. Wenn das kein Grund für ein Quickktest ist. Update über die Update URL hat leider nicht geklappt. Deshalb einmal neu installieren über den Updater:

Ok, das hat schon mal geklappt 🙂 „Quicktest Eclipse 2022-03 mit Java und ETH-Projekt“ weiterlesen
Habe ja vor ca. 5 Jahren mal ein Java-Programm dafür geschrieben.

Hier mal wieder ein aktueller Aufruf mit Echtzeit-Daten: „In welcher Höhe fliegen die 7168 Flugzeuge weltweit im Moment?“ weiterlesen
Hatte vor Corona schon mal eine Abfrage gemacht, wieviele Flugzeuge in welcher Höhe fliegen. Hier im Beitrag, habe ich auch das Java-Programm dazu vorgestellt, welches ich vor fast 2 Jahren geschrieben haben.

Es waren damals 6559 (19. Mai 2019) Flugzeuge. Heute … „Wieviele Flugzeuge sind jetzt im Vergleich zu „vor Corona“ in der Luft?“ weiterlesen
TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL DB verwenden. Um nicht JUnit 5 zu vergessen.

Wir bauen nun mit Quarkus eine React Anwendung die Titel und das Datum von Mindmaps anzeigt und per REST bedient werden kann. Die GUI im Browser sieht dann so aus: „TWRestMindmap mit React, Patternfly, RESTEasy, Swagger-UI, Quarkus, Panache, ORM, JPA, Hibernate, Docker und PostgreSQL“ weiterlesen

Vor ein paar Tagen wurde Picocli 4.6.2 veröffentlicht. An meinem heutigen Urlaubstag habe ich nun Zeit für einen Quicktest. Wie oben zu sehen, ist alles im TWEtherScan Projekt ok. Da habe ich auch eine große Testabdeckung der CMD-Api mit Picocli. Dieses Release fix einige Fehler auch mit dem Encoding. Aber, „This release has no breaking changes„.
Wer einen Reverse Proxy mit Gui, für API-Gateway, Sicherheits Proxy und HTTP-Proxy oä. benötigt, kann den Java Service Proxy auf einem Raspberry Pi 4 (Zero geht nicht) wie folgt erstellen.

Es muss nur Java auf dem Raspberry Pi installiert sein. „Membrane Reverse Service Proxy auf dem Raspberry Pi installieren“ weiterlesen
SSH Brute-Force mit Java. Gar nicht so schwierig wie hier beschrieben.

Die neue Version läuft jetzt nur noch mit Java 11. „SSH Brute-Force mit Java, picocli und TWHackSSH jetzt auf Java 11 umgestellt“ weiterlesen

Es muss ja nicht immer remix sein, um ein Smart-Contract zu compilieren. Es geht auch wie oben dargestellt mit einem Maven-Plugin (oder Gradle) um mit Ethereum-Netzwerk zu interagieren. Also wie können Solidity Smart Contracts kompiliert und dafür eine Java-Wrapper-Klassen dafür generiert werden?
Wir nehmen als Beispiel mein bekannter Smart-Contract Gehirn.sol der den IQ auf der Blockchain festhalten kann und mit Solidity programmiert ist und speichern in in dem src/main/resources Verzeichnis.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @title Gehirn von Thomas Wenzlaff * @dev Mein Smart Contract mit solidity zum Speichern von IQ auf der Blockchain */ contract Gehirn { uint256 iq; constructor() public { // Mittelwert des IQ setzen iq = 100; } function setIQ(uint256 neuerIQ) public payable { iq = neuerIQ; } function getIQ() public view returns (uint256) { return iq; } function getBedeutung() public view returns (string memory) { if (iq <= 40) return "Keine Aussagekraft"; if (iq >= 41 && iq <= 70) return "Weit unterdurchschnittlich – Geistige Behinderung"; if (iq >= 71 && iq <= 79) return "unterdurchschnittlich"; if (iq >= 80 && iq <= 89) return "etwas unterdurchschnittlich"; if (iq >= 90 && iq <=109) return "Durchschnitt"; if (iq >= 110 && iq <=119) return "hoch"; if (iq >= 120 && iq <= 129) return "sehr hoch"; if (iq >= 130 && iq <= 159) return "hochbegabt"; if (iq > 160) return "Keine Aussagekraft"; } } |
Das Plugin wird mit mvn web3j:generate-sources gestartet und wie folgt in der pom.xml eingebunden: „Smart-Contract Wrapper für Java mit web3j-maven-plugin erstellen“ weiterlesen
Das Maven Plugin zum ausführen von Linux Befehlen wurde nun auf Java 11 umgestellt und die Version nach Maven Central hochgeladen.

Wie hier beschrieben noch ein Quicktest mit der neuen Version und ein ls:
|
1 |
mvn de.wenzlaff.command.maven.plugin:de.wenzlaff.command.maven.plugin:0.0.5:info -Dcommand="ls -ll" |
Ergebnis, sieht gut aus: „de.wenzlaff.command.maven.plugin: Neue Version auf Maven Central für Java 11 veröffentlicht und das bei BTC >60k$ (Block 705403)“ weiterlesen
Manchmal hat man in einer Excel-Tabelle eine oder mehrere Spalten mit Internet-Adressen (URLs) deren Gültigkeit man überprüfen will, da viele Adressen sich doch schnell ändern. Dh. ist die Adresse noch erreichbar oder ist eine ungültige Adresse (Broken Links) eingegeben.
So, dann heute mal ein paar updates für den TW Excel Linkchecker. Es läuft nun unter Java 11.
Man bekommt ja beim hochladen von Maven Central einen Report. Die 100% wollte ich mal senken. „Neue Version 0.0.8 auf Maven Central: Internet Adressen bzw. Links in Excel-Dateien überprüfen mit dem de.wenzlaff.linkchecker“ weiterlesen

Auf Maven Central publiziert und das bei diesen Pflegepersonalquotienten in Hannover und umzu …
Vor ein paar Tagen ist die neue Version von ArchUnit veröffentlicht worden. Diesmal gab es einen Breaking Change, es wurde die Klasse JavaClassList gelöscht. Es läuft alles wie gehabt:

Nötige Anpassungen in der pom.xml „Kuba erlaubt Kryptowährungen, wenn das kein Grund für ein Quicktest der neuen ArchUnit 0.21.0 ist“ weiterlesen
Wie hier schon beschrieben, geht das mit TWEtherScan zum Abfragen per REST-Api von Ethereum Informationen.

Hier die Beispiel Abfrage:
|
1 2 3 4 5 6 |
[INFO ] 2021-08-19 10:07:29,012 Etherscan.main() - Start TWEtherscan Internet Abfrage ... [INFO ] 2021-08-19 10:07:30,227 Ausgabe.printGasPrice() - Letzter Block Nr.: 13054524 [INFO ] 2021-08-19 10:07:30,228 Ausgabe.printGasPrice() - Gas Preis: 36 Gwei, Propose Gas Preis: 37 Gwei, Fast Gas Preis: 40 Gwei [INFO ] 2021-08-19 10:07:30,792 Ausgabe.printETHPreis() - Kurs für 1 ETH: 3020.09 Dollar [INFO ] 2021-08-19 10:07:31,334 Ausgabe.printAdressBetrag() - Stand: 0.00451771 Ether auf Adresse: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 [INFO ] 2021-08-19 10:07:31,895 Ausgabe.printAnzahlTransaktionen() - 1 Transaktion(en) für die Adresse = 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 |
Und hier der entsprechende Java Code. „Wie können die Anzahl der ETH Transaktionen einer ETH-Adresse per Java REST-API abgefragt werden?“ weiterlesen

Die ETH Kurse bez. Gas Preise können leicht per Java Rest-API erzeugt werden. Auch der Kontostand einer Adresse kann abgefragt werden (default BUY_ME_A_COFFEE). So überwache ich z.B. dauernd die
BUY_ME_A_COFFEE = 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2
via Kommandozeile (und NodeRed) und warte bis jemand da was für Kaffee und Kuchen überweist. Der aktuelle Wert reicht noch nicht ganz für zwei Personen in Hannover 😉 Wer also mal testen will …
Wenn man sich auf etherscan.io angemeldet hat und einen Token hier hinzugefügt hat, kann man leicht die Abfrage machen. Es sind maximal 5 Abfragen pro Sekunde kostenlos möglich:
-k Api-Token
Ausgabe:
|
1 2 3 4 5 |
[INFO ] 2021-08-14 18:09:44,225 Etherscan.main() - Start Etherscan abfrage ... [INFO ] 2021-08-14 18:09:45,166 Ausgabe.printGasPrice() - Letzter Block Nr.: 13024280 [INFO ] 2021-08-14 18:09:45,167 Ausgabe.printGasPrice() - Gas Preis: 39 Gwei, Propose Gas Preis: 41 Gwei, Fast Gas Preis: 52 Gwei [INFO ] 2021-08-14 18:09:45,720 Ausgabe.printETHPreis() - Kurs für 1 ETH: 3264.33 Dollar [INFO ] 2021-08-14 18:09:46,275 Ausgabe.printAdressBetrag() - Stand: 0.00451771 Ether auf Adresse: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 |
Der ganze Beispiel-Code liegt auf GitLab unter TWEtherScan.
Hier der Beispiel Code: „ETH Kurs und Gas Abfrage per Java Rest API via etherscan.io“ weiterlesen
Ab Java 11 gibt es den HTTPClient im JDK der den REST Zugriff vereinfacht.
Das ist mit einem Zweizeiler getan:
|
1 2 3 4 5 |
public static HttpResponse<String> getRequest(String url) throws IOException, InterruptedException { HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).method("GET", HttpRequest.BodyPublishers.noBody()).build(); return HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); } |
Den Response kann man mit dieser Methode auswerten: „Zweizeiler REST HTTPClient am Beispiel von AirLabs für Planespotter“ weiterlesen
Heute gilt „die Umsetzung von Architekturvorgaben lässt sich testen!“. Und das sogar mit JUnit 5! Cool.


|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; /** * Dubletten Test. * * @author Thomas Wenzlaff * */ public class TestDoppelte { @Test void testDoppelteUndNullEntfernen() { System.out.println("----> Array mit Orten:"); List<String> orte = new ArrayList<>(); orte.add(null); orte.add(null); // doppelter Eintrag orte.add("Hannover"); orte.add("Langenhagen"); orte.add("Bremen"); orte.add("Bremen"); // doppelter Eintrag orte.stream().forEach(ort -> System.out.println(ort)); assertEquals(6, orte.size()); System.out.println("----> Entfernen von Dubletten mit HashSet:"); Set<String> orteSetOhneDublette = new HashSet<>(orte); orteSetOhneDublette.stream().forEach(ort -> System.out.println(ort)); assertEquals(4, orteSetOhneDublette.size()); System.out.println("----> Wieder zurück als Liste ohne die null Werte und anders sortiert:"); List<String> kopie = orteSetOhneDublette.stream().filter(Objects::nonNull).collect(Collectors.toList()); kopie.stream().forEach(ort -> System.out.println(ort)); assertEquals(3, kopie.size()); } } |
Ergebnis: „Java: Array von Dubletten und null entfernen mit HashSet und zurück“ weiterlesen
Werden mit org.json.JSONObject Json Dateien erstellt, werden die ldt. Spezifikation nicht sortiert. Das ist für die Auswertung mitunter schwer zu lesen.

Gestern die neue Version von ArchUnit 0.19.0 veröffentlicht. Dann mal ein Quicktest: … „ArchUnit in Version 0.19.0 veröffentlicht oder wie validiere ich die Architektur am Beispiel einer Blockchain“ weiterlesen
SSH Brute-Force mit Java. Gar nicht so schwierig.

Wir lesen eine Passwort- und eine Userdatei ein und machen ein connect zu einem SSH-Server mit jeder Kombination bis wir eine gültige Verbindung gefunden haben. Hier die Architektur inkl. JUnit-Testklassen: … „SSH Brute-Force mit Java, picocli und TWHackSSH“ weiterlesen
Mit automatischer Architektur validierung mit JUnit 5 Annotation @ArchTest von archunit kann leicht die Architektur vorgaben überprüft werden. Aber es kann auch leicht verhindert werden, das man z.B. System.out oder System.err verwendet. Oder das verhindert wird, das das interne Java Logging verwendet wird.
Was für mich auch wichtig ist, das der Logger immer LOG heißt, und nicht log oder logger.

Einfach diese JUnit-Test Klasse in alle Projekte einbinden. „Architektur mit archunit validieren“ weiterlesen
Seit JUnit 5.1 gibt es das OS Enum. Mit der können leicht Tests in Abhängigkeit des OS durchgeführt werden. Es werden die folgenden Betriebssysteme unterstüzt:
Also nur die Methode z.B. mit der @EnabledOnOs(OS.MAC) Annotation versehen, und der Test läuft nur auf dem Mac 🙂 oder nicht dann mit @DisabledOnOs(OS.MAC): … „Betriebssystem abhängige Tests 🙁 – EnabledOnOs oder DisabledOnOs für JUnit 5“ weiterlesen
Gestern wurde ArchUnit in Version 0.18.0 veröffentlicht.

Wenn das keine Grund ist mal zu zeigen, wie man eine Package-Abhängigkeit überprüfen kann.
Also wir wollen einen Test schreiben, der durchläuft wenn nur aus dem Package blockchain auf das Package be zugegriffen wird. Wie hier im UML Diagramm gezeigt:… „ArchUnit gestern in Version 0.18.0 veröffentlicht oder wie validiere ich die Architektur am Beispiel einer Blockchain“ weiterlesen
Wollte heute mal noch vor dem Börsengang von Coinbase ein Blockchain in Java coden. Mit nur zwei Klassen sind die Grundlagen implementiert. D.h. ein Block verweist jeweils auf den nächsten Block. Jeder Block hat einen Hash über die Daten und kann so von jedem validiert werden. Ein Block kann alles enthalten, hier mal ein String Objekt, es muss ja nicht immer Bitcoin sein. Hier die Architektur:
Ein JUnit 5 Testklasse erzeugt eine gültige Blockchain mit 5 Blöcken und wird anschließend validiert. Bei Bitcoin werden alle 10 Minuten neue Blöcke erzeugt. Die haben dann jeweils (ursprünglich) eine Größe von ca. max 1 MB an Daten.
Dann im zweiten Testfall wird ein Block verändert und in die Blockhain eingefügt. Das Ergebnis der validierung muss dann einen Error ausgeben.
Ein Block sieht so aus: „Blockchain in Java – Bitcoin heute Neues Allzeithoch – Nasdaq: Börsengang von Coinbase“ weiterlesen
Update ohne Probleme. JUnit Test läuft, was will man mehr… „Quicktest: Neue Version Eclipse 2021‑03 veröffentlicht – Better Than Ever“ weiterlesen
Heute wird ja Pi-Day gefeiert. Dazu habe ich mal eben eine Java Klasse geschrieben:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * Anlass der Pi-Day 14.3.2021. * * https://de.wikipedia.org/wiki/Pi-Tag * * @author Thomas Wenzlaff * */ public class PiDay { public static void main(String[] args) { System.out.println(Math.PI); } } |
Und nun die Frage. Was ist das Ergebnis wenn ich diese Klasse ausführe? Hier die Lösung, … „Fast vergessen, heute ist Pi-Day – „Pi or not to Pi!““ weiterlesen