Im aktuellen Eclipse 2019-06 fehlen die gewohnten Archetype im Katalog. Hier die URL
http://repo1.maven.org/maven2/archetype-catalog.xml
ergänzen:
Wenzlaff.de – Rund um die Programmierung
mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, Statistik, Krypto und Blockchain
Anleitungen zu allen Themen.
Wie kann mit Eclipse 2019-06 aus einem XSD Schema Javacode generiert werden? Das braucht man, um ein Datenmodell uä. zu erzeugen.
Zuerst erzeuge wir ein JAXB-Projekt fügen dann die XSD (hier mal die freemind.xsd als Beispiel, es geht aber jede) als Basis dem Projekt hinzu. Dann selektieren wir die XSD und generieren über das Kontextmenü das Modell. Bei der Generierung mit Java 8 oder 9 kommt es zu Fehlern. Deshalb erst das Projekt mit Java 7 wie folgt einrichten:
„Wie kann mit Eclipse 2019-06 aus einem XSD Schema Javacode generiert werden? Babyleicht? HiHi!“ weiterlesen
Das Statistische Bundesamt bietet für registrierten Nutzern 3 Werkzeuge kostenlos zum Download an. Unter anderem ein Java-Web-Client. Es heißt:“
Durch den „GENESIS-Webservice“ werden bestimmte Funktionen von GENESIS-Online auch für die automatisierte Verarbeitung zugänglich gemacht, wie z. B. Abruf und Download von Daten. Über unser Dienstangebot (WSDL) können registrierte GENESIS-Online-Nutzer die entsprechenden Schnittstellen in ihre eigenen Applikationen integrieren und programmgesteuert die angebotenen Dienste nutzen.“
Ok, dann wollen wir mal testen. Wir wollen auf den Mac OS X und dann auf einem Raspberry Pi die autom. Abfragen stellen. Als Beispiel sollen mal die Daten abfrage der Transfusion von Vollblut und Erythrozytenkonzentrat (EK) u.Ä. in Deutschland verwendet werden. Die Anzahl ist rückläufig, wenn auch in Deutschland immer noch fast eine Millionen Einheiten (a mind. ca. 200 Euro) verkauft werden.
Datenquelle: Statistisches Bundesamt (Destatis), Genesis-Online,
Abrufdatum 22.06.2019; Datenlizenz by-2-0; eigene Berechnung/eigene Darstellung
Welche Schritte sind nötig? „Java Webclient des Statistischen Bundesamtes für GENESIS Online DB starten auf Mac OS X und Raspberry Pi bzw. Linux“ weiterlesen
Was ist die Programmausgabe wenn dieses Programm ausgeführt wird?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * Rätsel des Tages. * * @author Thomas Wenzlaff * */ public class RätselDesTages { public static void main(String[] args) { System.out.println("Start"); assert false; System.out.println("Ende"); } } |
Eine neue Version der Eclipse IDE veröffentlicht. Die Installation und Neuerungen sind ja bei Heise beschrieben. Dann mal ein Quicktest:
Was kann man tun bei einem:
FireMotD: Info: No FireMotD ExportFile detected. Please generate with „sudo .\/FireMotD -S“ Fehler?
Einfach:
cd /opt/FireMotD/
sudo ./FireMotD -I -v
[sudo] Passwort für openhabian: xxxx
…
… nach ein paar Sekunden… „Raspberry Pi: No FireMotD ExportFile detected“ weiterlesen
Ab Java 8 werden die PermSize und MaxPermSize Kommandozeilen Parameter nicht mehr verwendet. Es wird eine Warnung in der Art:
1 2 3 |
Java HotSpot(TM) Server VM warning: ignoring option PermSize=32m; support was removed in 8.0 Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0 |
ausgegeben. Also tschüss java.lang.OutOfMemoryError: PermGen error.
Quelle: Oracle.com
Wie vor zwei Jahren hier schon mal beschrieben hat sich nicht viel geändert.
Aber es gibt eine neue Version (1.3.0) der Rest API, die wir verwenden wollen. Dazu die Maven pom.xml updaten:
1 2 3 |
<groupId>org.opensky</groupId> <artifactId>opensky-api</artifactId> <version>1.3.0</version> |
Hier der aktuelle Lauf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Flugbereich in Meter ; Flughöhe in Meter Parken 0 ; 303 1-500 ; 320 500-1000 ; 355 1000-2000 ; 410 2000-3000 ; 321 3000-4000 ; 310 4000-5000 ; 233 5000-6000 ; 234 6000-7000 ; 237 7000-8000 ; 306 8000-9000 ; 340 9000-10000 ; 538 10000-10500 ; 558 10500-11000 ; 897 11000-11500 ; 440 11500-12000 ; 486 12000-13000 ; 201 über 13000 ; 78 Summme ; 6559 Zeitpunkt ; Sun May 19 16:20:17 CEST 2019 Quelle ; The OpenSky Network, http://www.opensky-network.org |
Es sind also 6559 Flugzeuge weltweit in der Luft! Hier die paar Zeilen Java Code die dafür nötig sind: „Wie kann mit Java die Anzahl der Flugzeuge in der jeweiligen Höhe weltweit in real time ermittelt und mit OpenStreetMap via uMap visualisiert werden?“ weiterlesen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package de.wenzlaff.twpdftagger; public class RätselDesTages implements Runnable { public static void main(String[] args) { Thread t = new Thread(new RätselDesTages()); t.start(); } @Override public void run() { double d = 3.51f; float f = 1.99f; int i = (int) d + (int) f; System.out.println("Ergebnis: " + i); } } |
Was ist das Ergebnis? „Java: Rätsel des Tages“ weiterlesen
Manchmal will man in Excel nur wissen wieviele Zeilen bzw. Spalten markiert sind. Früher wurde das unten rechts angezeigt. Jetzt nur noch wenn der Bereich mit der Maus markiert ist (Taste unten lassen, sonst verschwindet es wieder) und dann oben links schauen:
10z x 2S heißt so viel wie 10 Zeilen x 2 Spalten. Ganz einfach, wenn man weiß wie 😉
Mit der @CsvSource Annotation in JUnit 5 kann man mit Kommaseparierte Parameter leicht und übersichtliche Tests schreiben. Die API ist aber noch im EXPERIMENTAL Status.
Hier mal ein Beispiel. Für jeden Kommandozeilen Parameter eine Testmethode schreiben:
„JUnit 5 Quickie: @CsvSource“ weiterlesen
Seit März 2017 gibt es noch kein neues Release von den Commons CLI. Aber warum die Commandline nicht auch damit auswerten? Macht alles viel übersichtlicher.
Das geht mit ein paar Zeilen Java Code und einen Eintrag in der pom.xml:
1 2 3 4 5 |
<dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.4</version> </dependency> |
Hier ein Beispiel snippets: „Java Quickie: Die Kommandozeilen Argumente mit Apache Commons CLI bändigen“ weiterlesen
Mit dem io.fabric8 Plugin kann ein Maven Projekt mit Java in Docker laufen. Dazu z.B. das Plugin wie folgt in der pom.xml eintragen.
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 |
<plugins> <!-- https://dmp.fabric8.io/ 0. Docker starten 1. mvn docker:build 2 mvn docker:run --> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.27.2</version> <configuration> <images> <image> <name>${project.name}:${project.version}</name> <build> <from>openjdk:9</from> <assembly> <descriptorRef>artifact</descriptorRef> </assembly> <cmd>java -jar maven/${project.name}-${project.version}.jar -v</cmd> </build> <run> </run> </image> </images> </configuration> <executions> <execution> <id>docker:build</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin> |
Damit ein mvn install läuft muss erst die Docker.App gestartet werden:
In Eclipse läuft es dann:
Mit der static Methode Files.newDirectoryStream. Diese Methode gibt es schon seit Java 1.7. Hier mal ein Beispiel für alle PDF Datein im aktuellen Verzeichnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
List<Path> pdfDateien = new ArrayList<Path>(); String eingabeVerzeichnis = "."; try { Files.newDirectoryStream(Paths.get(eingabeVerzeichnis), path -> path.toString().endsWith(".pdf")) .forEach(path -> pdfDateien.add(path)); } catch (IOException e) { System.err.println(e); } |
Was kann man gegen eine NoClassDefFoundError (org.bouncycastele.asn1.ASN10ctetString) beim verschlüsseln mit iText tun?
1 2 3 4 5 |
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13</version> </dependency> |
Zur Laufzeit wird die Klasse benötig. Es kommt diese Exc:
Manchmal will man wissen, welche Ports alle auf dem Raspberry Pi verwendet werden. Das geht z.B. mit
sudo netstat -tulpen
Das kann sich auch gut merken. Einfach an die Blumen „Tulpen“ denken.
oder auch nur alle aktiven mit „Linux Quickie: Wie können alle aktive Ports mit netstat angezeigt werden?“ weiterlesen
Wer noch für den Urlaub einen freien Wifi-Finder braucht, kann einen Wemo (ESP8266) verwenden, es muss ja nicht immer ein Raspberry Pi sein. Einfach dieses kleinen c Programm mit der Arduino IDO in den Wemo flashen, und mit 5 Volt an einem USB Port mit Strom versorgen.
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
/* * Wifi Finder der alle fünf Sekunden die Wifis scannt und für jedes freie WLan einmal kurz die LED anschaltet. * * Thomas Wenzlaff (c) 2019 www.wenzlaff.info */ #include "ESP8266WiFi.h" void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); pinMode(LED_BUILTIN, OUTPUT); Serial.println("Setup durchgeführt"); printMacAddress(); } void loop() { Serial.println("Starte den Scann nach WIFI ..."); digitalWrite(LED_BUILTIN, LOW); const int n = WiFi.scanNetworks(); Serial.println("OK, Scann durchgeführt"); if (n == 0) Serial.println("Keine Netzwerke gefunden"); else { Serial.print(n); Serial.println(" Netzwerk gefunden"); for (int i = 0; i < n; ++i) { Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(" dBm)"); Serial.print(" Verschlüsselung: "); printEncryptionType(WiFi.encryptionType(i)); delay(10); } } Serial.println(""); digitalWrite(LED_BUILTIN, HIGH); delay(5000); } void printEncryptionType(int thisType) { switch (thisType) { case ENC_TYPE_WEP: Serial.println("WEP"); break; case ENC_TYPE_TKIP: Serial.println("WPA"); break; case ENC_TYPE_CCMP: Serial.println("WPA2"); break; case ENC_TYPE_NONE: Serial.println("Keine"); digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); break; case ENC_TYPE_AUTO: Serial.println("Auto"); break; } } void printMacAddress() { byte mac[6]; WiFi.macAddress(mac); Serial.print("MAC: "); Serial.print(mac[5], HEX); Serial.print(":"); Serial.print(mac[4], HEX); Serial.print(":"); Serial.print(mac[3], HEX); Serial.print(":"); Serial.print(mac[2], HEX); Serial.print(":"); Serial.print(mac[1], HEX); Serial.print(":"); Serial.println(mac[0], HEX); } |
Der Sketch verwendet nur 266424 Bytes (25%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes. Globale Variablen verwenden 27124 Bytes (33%) des dynamischen Speichers, 54796 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.
Hier noch ein kleines 26 Sekunden Video um zu sehen wie der Scanner mit dem obigen Programm läuft:
Auf der Seriellen Konsolen werden übrigens die Daten auch ausgegeben, z.B.
In einen Beitrag Raspberry Pi: Höhenunterschiede mit heywhatsthat.com visualisieren hatte ich vor 4 Jahren schon mal über die visualisierung der Höhenunterschiede berichtet. Mit der Seite kann aber auch die maximal mögliche Empfangsreichweite visualisiert werden. Also: Wie weit kann der Empfang von Transpondersignalen von Flugzeugen maximal gehen, wenn wir berücksichtigen das die Erde eine Kugel ist?
Das hängt ja von der Höhe der Antenne, dem Empfangsort, die Flughöhe der Flugzeuge, dem Wetter und auch der Landschaft ab. Wer direkt vor einem Berg seine Antenne hat, empfängt halt auch nicht viel. Dann gibt es auch noch andere Parameter, wie Antennenart, Empfindlichkeit, stärke des Sendesignals und andere Dinge, die wir heute hier nicht berücksichtigen wollen.
Folgende vier Schritte sind nötig:
1. Auf die Seite heywhatsthat.com gehen
2. Auf den Reiter „New panorama“ klicken:
3. Auf der Maske 1. die Latitude z.B. 52.438837 2. die Longitude z.B. 9.742816 des Antennenortes eingeben. 3. die Höhe der Antenne z.B. 54 m und „above sea level“ markieren 4. einen Titel z.B. Langenhagen www.wenzlaff.info und 5. nicht vergessen auf Metric zu schalten, dann abschließend auf 6. Submit request klicken. Dann eine Minute wegschauen, da Werbung eingeblendet wird:
4. Auf der Seite dann oben Rechts auf den Reiter „Up in the Air“ klicken „Wie weit kann der Empfang von Transpondersignalen von Flugzeugen maximal gehen?“ weiterlesen
Wie hier ausführlich beschrieben, hier nun die Version 0.0.2 für den Raspberry Pi als DEB Archive aber auch als RPM für RedHat und für Windows nur die JAR Datei zum kostenlosen Download twpdfformulartocsv-0.0.2.zip
Einige Funktionen sind nun NEU z.b. die Hilfe, die mit -h aufgerufen werden kann, hier aber erst einmal das BPMN zum Programmablauf:
Die Versions Ausgabe mit -v „Update PDF-Formulare automatisch auswerten – PDF-Formulare to CSV (Excel) – Version 0.0.2 veröffentlicht – nun auch für Windows!“ weiterlesen
Warum wird beim ausführen dieses JUnit 5 Tests die Fehlermeldung angezeigt, das kein Test vorhanden ist?
Es ist nicht die fehlende @Test Annotation, die wird bei einem @ParameterizedTest nicht gebraucht.
Die Lösung …
„Rätsel des Tages: Warum läuft der JUnit 5 Test nicht und zeigt eine Message Box an?“ weiterlesen
In Eclipse kann man leicht die Testabdeckung visualisieren.
Wenn man z.B. einen JUnit Test über den Menüpunkt „Coverage As – JUnit Test“ ausführt:
Alle Zeilen die grün sind, wurden durchlaufen: „Eclipse Quickie: Testabdeckung anzeigen mit „Coverage As““ weiterlesen
Installiert man mono mit sudo apt install mono-complete ist mono zwar in 30 Minuten installiert, aber nicht in der aktuellsten Version, sondern in Version 4.6.2.
Aktuell ist aber 5.18.1 wie auf der mono Seite zu sehen. Die Installation ist aber auch schnell gemacht, Key, Certificate und Repo laden: „Aktuellste Version mono auf dem Raspberry Pi installieren für C# Programme (Visual C#)“ weiterlesen
Manchmal möchte man mehrere PDF-Formulare automatisch auswerten. Z.B. von einer Umfrage. Also wie bekommt man die im PDF-Formular eingegebenen Felder aller PDF Dateien eines Verzeichnises in eine Excel CSV Datei für die Auswertung? Wie man PDF-Formulare kostenlos erstellt, hatte ich ja schon hier beschrieben.
Das geht mit dem Raspberry Pi (oder auch Mac und Windows) ganz einfach mit dem Java Tool twpdfformulartocsv das ich implementiert habe. Es muss mind. Java 8 auf dem Pi installiert sein. Das kann man mit java -version überprüfen. Es kommt auf dem Pi Zero bei mir
1 2 3 |
openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13) OpenJDK Client VM (build 25.181-b13, mixed mode) |
Hier nun die Schritte, um es zu installieren.
„PDF-Formulare automatisch auswerten – PDF-Formulare to CSV“ weiterlesen
Und nicht vergessen die Uhr auf dem Raspberry Pi umstellen, wie hier (MESZ, MEZ, UT, UTC, GMT – Raspberry Pi: Wie kann die Sommerzeit bzw. Winterzeit überprüft und die Zeitzone gestellt werden?) beschrieben.
Manchmal will man auf den Raspberry Pi ein rpm von Red Hat auf einem Debian installieren. Wenn es auch selten vorkommt.
Man kann dann mit alien das Package Format konvertieren. Auf dem Raspberry Pi installieren wir die aktuelle Version aus dem Jahre 2016 mit einem sudo apt-get install alien und schon ist die 8.95 Version installiert.
Wie kann nun ein rpm in das deb Format konvertiert oder auch gleich installiert werden? Dazu einfach mit sudo das rpm Archive aufrufen. Hier mal ein Beispiel mit dem twpdfformulartocsv-0.0.1-1.noarch.rpm „Mit alien von rpm nach deb und zurück“ weiterlesen
Vor einiger Zeit hatte ich schon mal beschrieben, wie PDF-Formulare mit dem kostenlosen OpenOffice erzeugt werden können. Wie kann nun aber eine solche Auswahlbox mit Werten in einem PDF-Formular eingefügt werden?
Der Trick ist im Bearbeitungsmodus mit einem Doppelklick den Eigenschaften Dialog öffnen: „OpenOffice Quickie: Wie können Auswahlboxen für PDF-Formulare mit mehreren Werten erstellt werden?“ weiterlesen