Wie man sieht so im Durchschnitt bei 57,7 Grad Celsius. Und auch in diesem warmen Sommer maximal 64,6 Grad Celsius. Und das bei einer CPU Nutzung von 25 %:
Was hat der Raspberry Pi so in 2018 in HAJ (EDDV) empfangen?
2018 ist zwar noch nicht ganz zu Ende, hier aber schon mal vorab die Auswertung für das Jahr 2018.
Was hat der Raspberry Pi so an transponder Informationen empfangen in EDDV? So ca. 140 Flugzeuge.
Und hier noch die Message Rate: „Was hat der Raspberry Pi so in 2018 in HAJ (EDDV) empfangen?“ weiterlesen
Wie kann von einem Raspberry Pi eine Buildpipeline eines GitLab Projekt automatisch antriggert werden?
Zuerst muss für das GitLab Projekt ein Trigger eingerichtet werden. Das geht auf GitLab hier:
Dann erscheint dieser Dialog, mit dem TOKEN: „Wie kann von einem Raspberry Pi eine Buildpipeline eines GitLab Projekt automatisch antriggert werden?“ weiterlesen
Neue M1 Version von JUnit 5.4.0 veröffentlicht
Es wurde vorgestern eine neue Version von JUnit 5 veröffentlicht,
siehe https://junit.org/junit5/docs/5.4.0-M1/release-notes/
Mindmap zum Thema „Neue M1 Version von JUnit 5.4.0 veröffentlicht“ weiterlesen
Debian Package (*.deb) auf dem Raspberry Pi mit oder ohne Abhängigkeiten (zależności) installieren
Will man *.deb Archive bzw. Programme auf dem Raspberry Pi installieren gibt es mind. zwei Möglichkeiten:
1. Installation ohne Abhängigkeiten
dpkg löst die Abhängigkeiten der zu installierenden Pakete nicht automatisch auf. Installiert man daher ein Paket, das von anderen abhängt, so kommt es zu Fehlermeldungen. Hier ein Beispiel mit dem twkaffee-0.0.1.deb, das für Testzwecke hier geladen werden kann.
|
1 |
sudo dpkg -i twkaffee-0.0.1.deb |
Das geht dann auch schneller als mit Abhängigkeiten „Debian Package (*.deb) auf dem Raspberry Pi mit oder ohne Abhängigkeiten (zależności) installieren“ weiterlesen
Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven und jdeb für Debian auf Raspberry Pi mit GitLab
Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven für Debian auf Raspberry Pi.
Oder wie kann man ein *.deb Archive mit Maven Plugin erzeugen?
Oder wie verpackt man ein JAR in ein deb Archive, um es einfach auf einem Raspberr Pi zu installieren?
Oder wer braucht ein Template für das erzeugen von Maven Artefacten mit einer automatischen Pipeline in GitLab?
Oder wie validiere ich die Build-Scripte der Build-Pipeline?

Auf diese ua. Frage gibt dieser Blog-Artikel Auskunft.
Wir wollen eine Build-Pipeline mit mehreren Javaversionen, test und build bzw. deploy erstellen. Hier der Flow der Pipeline:
So sieht die Pipeline mit den drei Stages aus: „Build Pipeline mit YAML Script zum erzeugen eines *.deb Archives mit Maven und jdeb für Debian auf Raspberry Pi mit GitLab“ weiterlesen
System-Info mit ASCII-Art-Logo nach dem Login auf dem Raspberry Pi anzeigen mit linuxlogo (Version 5.11) und screenfetch (Version 3.6.8)
Wer nach dem Anmelden per SSH auf der Shell ein schönes Logo mit System-Infos sehen will wie z.B diese:
„System-Info mit ASCII-Art-Logo nach dem Login auf dem Raspberry Pi anzeigen mit linuxlogo (Version 5.11) und screenfetch (Version 3.6.8)“ weiterlesen
Raspberry Pi: Um welche Uhrzeit wird immer der letzte Kaffee am Tag gekocht?
Vor ein paar Tagen hatte ich die Auswertung zum Kaffeeverbrauch gepostet. Die Daten werden ja online von einem meiner Raspberry Pi erfasst. Gestern der Beitrag zu der Frage: Wann der 1. Kaffee des Tages gekocht wird.
Heute habe ich mal gefragt, um welche Uhrzeit wird bei uns eigentlich der letzte Kaffee am Abend gekocht? Man soll ja vor dem zu Bett gehen nicht noch viel Kaffee trinken.
Die Antwort im Durchschnitt um 15:14 Uhr. Der gemessene Zeitraum ist fast 2 Jahre mit über 500 Messwerte. Hier dazu die Grafik mit der Uhrzeit als Y Wert. X ist die Anzahl der Messungen (Tage). Die rote Linie der Mittelwert.

Und weil ich Diagramme liebe, noch mal eins mit Punkten … „Raspberry Pi: Um welche Uhrzeit wird immer der letzte Kaffee am Tag gekocht?“ weiterlesen
Wie kann in Procreate® (Version 4.2.2) kopiert und eingefügt (copy and paste) werden?
Raspberry Pi: Um welche Uhrzeit wird immer der 1. Kaffee am Tag gekocht?
Gestern hatte ich die Auswertung zum Kaffeeverbrauch gepostet. Die Daten werden ja von einem meiner Raspberry Pi erfasst.
Heute habe ich mal gefragt, um welche Uhrzeit wird bei uns eigentlich der 1. Kaffee gekocht? Die Antwort im Durchschnitt um 6:54 Uhr. Der gemessene Zeitraum ist fast 2 Jahre mit über 500 Messwerte. Hier dazu die Grafik mit der Uhrzeit als Y Wert. X ist die Anzahl der Messungen (Tage)

Raspberry Pi: Der Kaffee (кофе) ist fertig
Habe ja schon einige Artikel über die Erfassung des Kaffee قهوة verbrauches mit dem Raspberry Pi geschrieben. Jetzt aber mal eine kleine Auswertung nach 612 Tage oder fast 2 Jahren. Erfasst wurden 2467 Tassen an 555 Tagen. Das macht einen Durchschnitt von etwas mehr als 4 Tassen Kaffee pro Tag die gekocht wurden, Tendenz steigend, aber nicht nur von mir getrunken wurde. Hier die ganzen Messwerte.

Details zum Aufbau mit Pushover benachrichtigung siehe in diesen Artikel.
Hier dazu etwas Javacode:
// Erster Eintrag
// 2017-04-05 17:20:41 UTC 1 1
// Letzter Eintrag
// 2018-12-09 11:43:37 UTC 2423 7
long anzahlTage = ChronoUnit.DAYS.between(kaffeeItems.get(0).getErstelltAmLokal(),
kaffeeItems.get(kaffeeItems.size() - 1).getErstelltAmLokal());
System.out.println("--------------------");
// gehe über den Tag solange der nächste gleich ist
int tage = 0;
int summe = 0;
for (int i = 0; i < kaffeeItems.size() - 1; i++) {
if (kaffeeItems.get(i).getErstelltAmLokal().getDayOfMonth() != kaffeeItems.get(i + 1).getErstelltAmLokal()
.getDayOfMonth()) {
System.out.println(kaffeeItems.get(i));
tage++;
summe += kaffeeItems.get(i).getAnzahlKaffeeAsInt();
}
}
System.out.println("--------------------");
System.out.println("Summe: " + summe + " Durchschnitt: " + summe / tage + " Tassen Kaffee pro Tag");
System.out.println("Anzahl Tage: " + tage);
System.out.println("Anzahl der Tage die gemessen wurden: " + anzahlTage);
Java 8 Quickie: Zeitzonen Umwandlung mit ZonedDateTime: UTC nach Europas Zeitzone

Manchmal hat man Zeitangaben z.B. aus IOT Geräten in der Form eines Strings „2018-12-10 12:14:15 UTC“. Nun müssen die Zeitangaben die in UTC verwendet werden in die lokale Zeitzone für Europa/Berlin umgewandelt werden. Das ist in der Regel eine Stunde plus. Wie geht das aber mit der Java 8 API?
Java 8 Quickie: Alle Zeitzonen mit getAvailableZoneIds mit Java ermitteln

Wie können alle Zeitzonen mit Java ermittelt werden? Das geht mit der Methode getAvailableZoneIds der Klasse ZoneId. Die Methode ist thread save und der Set kann zukünftig noch erweitert werden. Bei mir ist er heute 600 Einträge (IDs) groß, wie dieser JUnit Test zeigt:
@Test
public void testGetAlleZeitzonen(){
List
Das sind die Zeitzonen IDs:
„Java 8 Quickie: Alle Zeitzonen mit getAvailableZoneIds mit Java ermitteln“ weiterlesenJava Quickie: Gestern coole 20 Jahr Feier und heute schon ein JUnit-Test mit stream sorted ;-)
Gestern noch 20 Jahre wenzlaff.de gefeiert und heute schon ein JUnit Quicki zum sortieren mit stream sorted und kein Raspberry Pi Thema.

Der JUnit Test: „Java Quickie: Gestern coole 20 Jahr Feier und heute schon ein JUnit-Test mit stream sorted ;-)“ weiterlesen
Jubiläum: 20 Jahre Homepage wenzlaff.de!
Heute vor 20 Jahren, am 1.12.1998 ging die Domain wenzlaff.de zum ersten mal ans Netz. Wie die Zeit vergeht.
Es war eine statische Webseite mit Freeware und Sprüche Datenbank mit Newsletter und einigen C++ und Java Programmen zum kostenlosen Download aus meiner Hand. Hier ein etwas unvollständiges Bildschirmfoto, mehr habe ich leider nicht mehr gefunden:



Aber auch schon lange vor dieser Zeit, hatte ich eine Homepage, die aber dann auf den Servern der UNI-Bremen kostenlos gehostet wurde. Da hatte ich als Informatiker einen Zugang mit Akustikkoppler mit 300 Baud und Lochkarten hatten wir da auch noch. Das war wenigstens etwas zum anfassen, batches mit Lochkarten schreiben, cool!
Und es gab keine Werbung im Internet.
Die schöne alte Zeit. Und in der Zwischenzeit gab es immer mal neue Technologie. Vom statischen html zum xhtml und JavaScript über einen eigenen Java html Generator mit Templates bis heute zu den Content-Management-System mit eigener Datenbank.
Bis heute konnte ich auch auf dieser Webseite immer auf Werbung verzichten. Juhu …
Wie soll es weiter gehen? Gibt es noch Themen nach über 1000 Beiträgen? Ideen habe ich noch genug, was fehlt ist die Zeit!
In diesem Sinne, vielen Dank an alle Leser und für das viele Feedback (die über 1000 Kommentare mit Kommentarfunktion habe ich ja abgeschaltet…DSGVO läßt grüßen) das auch nach wie vor erwünscht ist, aber eben über E-Mail 😉
Raspberry Pi: Merkels Flug zum G20-Gipfel mit Pushover Meldung in EDDV
Gestern habe ich mich über diese Pushover des Raspberry Pi gewundert:
Die werden schon selten von mir mit NodeRed empfangen und auch an Twitter versendet (siehe Blogbeitrag).
Zwei unterschiedliche Notfall Meldungen. Keine Flug Kennung. Das ist aber normal, das Regierungsmaschine die abschalten. War bei der Air Force One der USA hier in HAJ auch so.
Das war dann wohl die A340 mit Merkel, wie hier berichtet. Passte auch mit der Uhr-Zeit. Hatte aber gestern auch einen komplett Ausfall, wie hier berichtet. Ob das Zufall ist? Da würde mich mal interessieren ob es einen Zusammenhang gibt. …
Keine Flugzeuge in Hannover (EDDV, HAJ)? Liegt das an der eingestellten CEBIT?
Mein Raspberry Pi empfängt seit ein paar Stunden keine Flugzeudaten mehr:
So ein Bild habe ich noch nie gesehen:
Was war da los? Ist der Pi abgeraucht in Haj (EDDV)?
Dann mal bei der Gelegenheit ein update und reboot.
Ah, welche Version habe ich noch am laufen?
cat /etc/os-release
PRETTY_NAME=“Raspbian GNU/Linux 8 (jessie)“
NAME=“Raspbian GNU/Linux“
VERSION_ID=“8″
VERSION=“8 (jessie)“
ID=raspbian
ID_LIKE=debian
HOME_URL=“http://www.raspbian.org/“
SUPPORT_URL=“http://www.raspbian.org/RaspbianForums“
BUG_REPORT_URL=“http://www.raspbian.org/RaspbianBugs“
Ah, das alte Jessie. Das date ich aber mal nicht ab. Nur ein „Keine Flugzeuge in Hannover (EDDV, HAJ)? Liegt das an der eingestellten CEBIT?“ weiterlesen
Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions und Filter
Wenn man mit Lambda über eine Collection iteriert, kann man auch gleich einen Filter verwenden. Was das mit der 20 zu tun hat, kommt am 1.12.2018 hier auf dem Blog 😉

Jetzt aber hier erst mal ein Beispiel zum Filter:
|
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 |
@Test public void streamForEachFilterTest() { List<Mindmap> maps = getTestMindmaps(); assertEquals(3, maps.size()); List<Mindmap> ergebnis = new ArrayList<>(); System.out.println("Neu mit Stream API von Java 8 iterieren inkl. Filter:"); // iterieren mit forEach über eine Collection von Mindmaps und Lambda // expressions inkl. Filter maps.stream() // der Stream .filter(mindmap -> mindmap.getName().contains("zwei")) // mit dem Filter, alle Mindmaps die zwei im Namen enthalten .forEach(mindmap -> { // über die gefundenen gefilterteten Mindmaps System.out.println("Mindmap die (zwei) enthält: " + mindmap); ergebnis.add(mindmap); }); assertEquals(1, ergebnis.size()); } private List<Mindmap> getTestMindmaps() { // Liste mit Mindmaps erstellen List<Mindmap> maps = new ArrayList<>(); // Mindmap 1 erstellen und der Liste hinzufügen Mindmap m1 = new Mindmap(); m1.setPath(Paths.get("mindmap-eins.itmz")); maps.add(m1); // Mindmap 2 erstellen und der Liste hinzufügen Mindmap m2 = new Mindmap(); m2.setPath(Paths.get("mindmap-zwei.itmz")); maps.add(m2); // Mindmap 3 erstellen und der Liste hinzufügen Mindmap m3 = new Mindmap(); m3.setPath(Paths.get("mindmap-drei.itmz")); maps.add(m3); return maps; } |
Und die nötige Mindmap BE Klasse: „Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions und Filter“ weiterlesen
Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions
Ab Java 8 kann mit der forEach Methode über einen Stream iteriert werden und das mit Lambdas.
Hier mal eine Gegenüberstellung als JUnit Test:
|
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 |
@Test public void streamForEachVsForCollectionTest() { // Liste mit Mindmaps erstellen List<Mindmap> maps = new ArrayList<>(); // Mindmap 1 erstellen und der Liste hinzufügen Mindmap m1 = new Mindmap(); m1.setPath(Paths.get("mindmap-eins.itmz")); maps.add(m1); // Mindmap 2 erstellen und der Liste hinzufügen Mindmap m2 = new Mindmap(); m2.setPath(Paths.get("mindmap-zwei.itmz")); maps.add(m2); System.out.println("Altes iterieren mit for Schleife:"); List<Mindmap> ergebnis = new ArrayList<>(); // in for-Schleife Ergebnis anzeigen und Ergebnis der Liste hinzufügen for (Mindmap mindmap : maps) { System.out.println(mindmap); ergebnis.add(mindmap); } assertArrayEquals(maps.toArray(), ergebnis.toArray()); ergebnis.clear(); System.out.println("Neu mit Stream API von Java 8 iterieren:"); // iterieren mit forEach über eine Collection von Mindmaps und Lambda // expressions maps.stream().forEach(mindmap -> { System.out.println(mindmap); ergebnis.add(mindmap); }); assertArrayEquals(maps.toArray(), ergebnis.toArray()); } |
Und das Mindmap BE: „Java Quickie: Iterieren mit forEach über eine Collection (von Mindmaps) mit Lambda expressions“ weiterlesen
Java Quickie: Ist eine Domain erreichbar?
Mit der Methode isReachable aus der Klasse InetAddress kann seit Java 1.5 leicht überprüft werden (via Echo) ob ein Rechner bzw. Domain erreichbar ist oder „lebt“. Als Parameter wird die Timeout Zeit in Millisekunden übergeben, hier also 1000 für eine Sekunde:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@Test public void testIsDomainErreichbar() throws Exception { String domain = "kleinhirn.eu"; boolean isErreichbar = InetAddress.getByName(domain).isReachable(1000); assertTrue(isErreichbar); } @Test(expected = IllegalArgumentException.class) public void testIsDomainErreichbarExc() throws Exception { String domain = "kleinhirn.eu"; boolean isErreichbar = InetAddress.getByName(domain).isReachable(-1000); assertTrue(isErreichbar); } |
Eine IOException gibt es bei Netzwerkfehler. Und eine IllegalArgumentException wenn ein negativer Wert für den Timeout angegeben wird, das macht man ja auch nicht 😉
















