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, Krypto und Blockchain
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
… dann mal etwas auf der Blockchain tun … 😉
Nachher… „Report: 4 components have vulnerabilities, which is 10% of all components.“ 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
Hier hatte ich ja den Code veröffentlicht. Jetzt ist doch schon mehr los als vor Corona.
„Fast 9000 (-747) Flugzeuge in der Luft bei Block Nr. 732443“ weiterlesen
Eben eine Neue Eclipse Version 2021-12 veröffentlicht. Die letzte in diesem Jahr. Wenn das kein Grund für ein Quicktest ist!
Alles OK beim meinem Blockchain Projekt und das bei BTC 48414 bzw. ETH 4196 🙂 … „Quicktest: Neue Eclipse Version 2021-12“ 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
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„.
Vor zwei Stunden wurde eine neue ArchUnit 0.0.22 veröffentlicht. Dann mal gleich ein Quicktest. Memory leak ist nun gefixt. Und es können Unterstriche durch Leerzeichen in Testnamen ersetzt werden:
1 2 3 |
@AnalyzeClasses(packages = "de.wenzlaff.package") @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class SomeTestClass { ... } |
Warum wird in JUnit 5-Test kein public mehr verwendet? „Less is more“ sagt das JUnit-5 Team und die Testklassen liegen ja eh meistens im gleichen (Test) Package. Auch ist so eine besser Kapselung möglich.
Am 11. November letzten Jahres fürte der Ausfall von Infura dazu, dass viele zentrale Börsen die Abhebung von ETH und ERC20-Token gestoppt hatten. Zudem ließen sich Metamask, Uniswap und auch andere Anwendungen auf Ethereum nicht mehr nutzen. Infura scheint ein beliebter Dienstleister für Ethereum Nodes zu sein, auf den sich nicht nur kleinere Unternehmen und Projekte verlassen, sondern auch milliardenschwere Börsen wie Binance.
Für dieses Projekt soll dennoch mal die Infura-API verwendet werden, um den Kontostand einer ETH-Adresse zu ermitteln. Mit dem web3j Framework ist das auch in Java realisierbar. Hier der Architektur Aufbau:
Wir starten (wie immer) mit einem JUnit 5 Test: „ETH-Kontostand via Web3j und Infura mit Java in 5 Schritten abfragen“ 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
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
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.
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
Gerade eben die Java Blockchain erweitert v0.0.3. Wer Lust hat mitzumachen kann gern Merge-Requests einreichen.
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
Wie werden in Java Nachrichten signiert und vom Empfänger validiert? Das geht mit ein paar Zeile aus dem Java Package java.security. Wir verwenden die auch in Bitcoin verwendeten Elliptische-Kurven-Kryptografie secp256k1. Was wollen wir zu Entspannung nach Feierabend machen?
Das wird in diesem BPMN-Diagramm dargestellt:
Hier die kommentierte Java Klasse: … „Signieren von Nachrichten mit Digital Signature Algorithm (ECDSA) in Java und Elliptische-Kurven-Kryptografie (ECC) secp256k1“ weiterlesen
Kryptografische Hashfunktionen können zur Integritätsprüfung verwendet werden, um Änderungen in Daten festzustellen. Bitcoin verwendet kryptografische Hashfunktionen sehr ausgiebig, um zu überprüfen, dass sich Daten nicht geändert haben. Zum Beispiel wird immer ab und zu – durchschnittlich alle 10 Minuten – ein neuer Hash der gesamten Zahlungsgeschichte erzeugt. Wenn jemand versucht, diese Daten zu ändern, wird dies sofort von jedem, der die Hashes überprüft, bemerkt.
Grundlegenden Eigenschaften von Hash:
-Gleiche Eingabedaten erzeugen den gleichen Hash.
-Leicht unterschiedliche Eingabedaten erzeugen sehr unterschiedliche Hashes.
-Der Hash hat stets eine feste Länge. Bei SHA256 sind dies 256 Bits.
-Die Holzhammermethode Trial-and-Error ist der einzige bekannte Weg, einen Input zu finden, der einen bestimmten Hash erzeugt.
Hier mal ein kleines Java Beispiel mit unterschiedlichen Libs und pur Java: … „Mal was anderes als Schnee und Glatteis: Salzen mit SHA-256 in Java“ weiterlesen
Wie kann man für Bitcoin die geheimen Wörter, private und public Key und Adressen mit Java auf einem Raspberry Pi generieren? Hier mal ein Beispiel. Zuerst ein BPMN für den Überblick wie es läuft.
Das geht in 1 Minute, mit diesen drei Schritten auf der Komandozeile … „Java Bitcoin: BIP39 Mnemonic Generierung mit Adressen mit Java auf einem Raspberry Pi in 1 Minute – Crypto BPMN“ weiterlesen
Wer mal alle Security Provider im System ausgeben will, kann diese Methode verwenden:
1 2 3 4 5 6 7 8 |
private static Provider[] getSecurityProviders() { System.out.println("Alle " + Security.getProviders().length + " im System bekannten Security Provider:"); Provider[] provider = Security.getProviders(); for (int i = 0; i < provider.length; i++) { System.out.println(provider[i].getInfo()); } return provider; } |
Ergebnis auf einem Test-System: „Java: Ausgabe Methode aller im System bekannten Security Providers oder safety first“ weiterlesen
Wie können Hyperlinks in PDFs erzeugt werden?
Da die Klasse Link in iText 7.1 von der Text Klasse erbt, wie das UML oben zeigt, ist es einfach. Hier ein Beispiel:… „Neujahr 2021: Mein erster Beitrag in 2021 – Hyperlinks in PDF: iText 7.1“ weiterlesen
Auf Github gibt es viele Templates für die .gitignore Datei. Für das Erstellen einer .gitignore Datei kann aber auch die Webseite von gitignore.io verwendet werden.
Auf dem Raspberry Pi kann man aber auch eine Shell Funktion installieren, dann geht es noch einfacher. Dazu einfach diese Funktion einmal auf der Kommandozeile aufrufen: … „.gitignore mal etwas anders“ weiterlesen
Manchmal braucht man in automatisch generierten PDFs eine Überschrift auf jeder Seite.
Wie geht das mit iText 7?
Mit einen implementierten IEventHandler. Der dann nach jeder erzeugten Seite PdfDocumentEvent.START_PAGE einen Event generiert, der dann die Überschrift erzeugt. Dazu habe ich eine Klass HeaderHandler entwickelt. Es kann als Option auch entschieden werden ob auch auf der ersten Seite einen Überschrift erzeugt werden soll. Hier die Klasse:
„Impfbeginn in Deutschland – Mal was anderes: Wie können Header in PDF Dokumente mit iText 7.1 autom. auf jede Seite erzeugt werden?“ weiterlesen
Gestern hatte ich ja Kalendereinträge erstellt, die man leicht in seinen Kalender importieren kann. Wer aber Old School unterwegs ist,
hat hier die Pläne als PDF zum ausdrucken. Habe in Java mal eben ein paar PDF-Bibellesepläne für das neue Jahr zum ausdrucken erstellt:
bibelleseplan-1-pro-tag-ab-01.01.2021.pdf
bibelleseplan-2-pro-tag-ab-01.01.2021.pdf
bibelleseplan-3-pro-tag-ab-01.01.2021.pdf
Oder wer heute starten will: bibelleseplan-3-pro-tag-ab-25.12.2020.pdf
Hier ist die Java Klasse, mit Stream Klasse und neuer Date API: „Ziel 2021: tägliches Bibellesen – Bibelleseplan als Old School PDF“ weiterlesen
Eine kleine Demo zeigt, dass es gar nicht so kompliziert ist, ein professionelles Web-Application-Framework auf dem Raspberry Pi zum Laufen zu bekommen. Und das in 10 Minuten! Ok, dann los.
Eine vaadin Anwendung Version 16.0.0 und Jetty Server 9.4.15 in 10 Minuten erstellen. Das ist mit dem Archetype möglich. Als Version wird latest angegeben. Diesen Aufruf auf der Kommandozeile in einem leeren Verzeichnis aufrufen:
1 2 3 4 5 6 7 |
mvn -B archetype:generate \ -DarchetypeGroupId=com.vaadin \ -DarchetypeArtifactId=vaadin-archetype-application \ -DarchetypeVersion=LATEST \ -DgroupId=de.wenzlaff.twvaadinprojekt.app \ -DartifactId=twvaadinprojekt-app \ -Dversion=1.0-SNAPSHOT |
Das ist beim 2. Mal in 10 Sekunden erledigt. Beim 1. Mal müssen noch die Maven Artefakte ins lokale Repo geladen werden, das dauert etwas. „Vaadin Anwendung auf dem Raspberry Pi 4 B in 10 Minuten mit Jetty-Server und Archetype erstellen als Vorbereitung für den richtiger Lockdown ab Mittwoch!“ weiterlesen
Auf dem Rasberry Pi 4 ist ja default Java 11 installiert. Nun wollen wir mal schnell ein kleines Java Projekt mit Maven erstellen. Da ist schnell gemacht mit Archetype vom Maven.
Danke Dr.Kleinhirn.eu für die Bereitstellung der Mindmap
Also nur noch Maven 3.6.0 installieren mit: sudo apt-get install maven
Dann checken ob alles richtig installiert ist mit: mvn -version
Dann in einem leeren Verzeichnis „Mal was anderes als COVID-19 Impfstoff BNT162b2: Maven install auf einem Raspberry Pi 4 B mit Beispielprojekt in 10 Minuten mit Archetype“ weiterlesen
Einen REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern ist nicht kompliziert.
Vorraussetzungen Java 11 und Maven. Test mit:
mvn -version
auf der Kommandozeile:
1 2 3 4 5 6 |
➜ ~ mvn -version Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /opt/local/share/java/maven3 Java version: 11.0.9, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home Default locale: de_DE, platform encoding: UTF-8 OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac" |
Dann fangen wir in einem leeren Verzeichnis an
1 2 |
mkdir rest-co2ampel cd rest-co2ampel |
jetzt rufen wir mit dem Maven Quarkus Plugin das create Goal auf:
1 |
mvn io.quarkus:quarkus-maven-plugin:1.9.0.Final:create -DprojectGroupId=de.wenzlaff.co2ampel -DprojectArtifactId=info-kleinhirn -DclassName="de.wenzlaff.Co2AmpelResource" -Dpath="/co2ampel" |
Zwei Sekunden später, ist das Projekt angelegt: „REST Service in 15 min mit Quarkus, OpenAPI, Swagger UI und JUnit-Test erstellen und um CO2-Ampel Service erweitern“ weiterlesen