Maps unter Java mit computeIfAbsent nutzen

Wenn eine Map unter Java etwas komplexer wird, wie z.B. folgende Map:

Map<String, List<String>> testMap = new HashMap<>();

wird das befüllen derselbigen interessant. In diesem Beispiel soll ein Key und ein neuer Value für die Liste vom Typ String hinzugefügt werden. Damit dies funktioniert muss überprüft werden ob der Key bereits existiert und wenn dies nicht der Fall ist, ein neuer Key angelegt werden. Im kompletten Beispiel sieht das Ganze so aus:

String key = "ABC";
String valueForList = "DEF";

Map<String, List<String>> testMap = new HashMap<>();

if(!testMap.containsKey(key)) {
    testMap.put(key, new ArrayList<>());
} 

testMap.get(key).add(valueForList);

Einfacher und unkomplizierter ist es die Methode computeIfAbsent zu nutzen, welche seit Java 8 in der Definition des Map-Interfaces enthalten ist. Mit der Nutzung der Methode verkürzt sich das Beispiel wie folgt:

String key = "ABC";
String valueForList = "DEF";

Map<String, List<String>> testMap = new HashMap<>();
testMap.computeIfAbsent(key, s -> new ArrayList<>()).add(valueForList);

Damit wird automatisch eine neue ArrayList angelegt, wenn der entsprechende Schlüssel noch nicht hinterlegt ist. Anschließend kann der entsprechende Wert für die Liste hinzugefügt werden.

Arduino für den Industrieeinsatz

Die Arduino-Familie ist im Grundsatz für das schnelle Prototyping gedacht. Der Einsatz in Industrieumgebungen ist also nicht allzu empfehlenswert. Das haben sich die Macher des Controllino ebenfalls gedacht. Finanziert über Kickstarter, entwickelten sie eine speicherprogrammierbare Steuerung, welche Arduino-kompatibel ist und sich für den Industrieeinsatz eignet.

controllino.biz

Der Controllino verfügt, je nach Modell, über bis zu 21 Eingänge, 24 Ausgänge, 16-Relay-Ausgänge und unterschiedlichste Interfaces zur Ansteuerung, wie I2C oder SPI. Daneben verfügt er über einen USB- und einen Ethernet-Anschluss. Ebenfalls integriert ist eine Real time clock. Bezogen werden kann der Controllino über die offizielle Seite unter controllino.biz. Preislich bewegen sich die Controller in einem Bereich von ein- bis dreihundert Euro, je nachdem welches Modell gewählt wird.

Archiv für grafische Interfaces

Im Laufe der letzten Jahre und Jahrzehnte haben wir einige Generationen von Betriebssystemen und ihrer unterschiedlichen grafischen Interfaces erlebt. Damit auch jüngere Generationen sich die alten grafischen Interfaces anschauen können, gibt es die Webseite Guidebook.

Die Auswahl der GUIs unter guidebookgallery.org

Auf der Webseite, welche unter guidebookgallery.org zu erreichen ist, finden sich Screenshots der unterschiedlichen Oberflächen und dazugehöriger Materialien. Die Bandbreite reicht von alltäglichen Betriebssystemen wie Windows oder macOS zu Systemen mit Exotenstatus wie IRIX oder BeOS. Neben Screenshots findet man auf der Seite Videos, Poster und andere Materialien rund um grafischen Interfaces aus der Vergangenheit.

USB Networking + Windows

Man hält es nicht für möglich aber USB Networking ist auch unter Windows möglich :) Dazu muss man die Datei moko.inf herunter und startet sein Moko. Sobald es oben ist steckt man es an den Rechner ran. Wichtig ist es wirklich erst dann ranzustecken wenn das System geladen ist.

Windows erkennt das ganze dann als RNDIS/Ethernet Gadget und verlangt nach einem Treiber dafür. Hier wird dann die moko.inf serviert. Nach der Installation warnt uns Windows dann das eingeschränkte bzw. keine Konnektivität herrscht. Um dieses Fehler zu beheben wechselt man in die Netzwerkkonfiguration und weißt dem Interface die feste IP 192.168.0.200 zu. Danach ist das Moko per SSH unter der IP 192.168.0.202 zu erreichen.

Edje

Möchte man eine Anwendung welche ein Interface beinhalten soll mit Hilfe der EFL schreiben so benötigt man eine EDJ Datei. In dieser EDJ Datei (welche nichts anderes ist als eine mit der EET Bibliothek erzeugte Datei) befindet sich die Beschreibung des Interfaces samt Bildern und anderen Ressourcen. Zur Zeit existieren zwei Möglichkeiten eine EDJ Datei zu erzeugen.

Die erste Möglichkeit eine solche Datei zu erstellen, ist es eine Textdatei mit der Endung EDC zu erstellen. Dabei handelt es sich um eine Datei in der die Ressourcen und das Aussehen des Interfaces beschrieben sind. Diese Datei wird dann mittels der Anwendung edje_cc zu einer EDJ Datei gemacht. Die zweite Möglichkeit ist der EDJE Editor mit welchem man diese Oberfläche gestalten kann. Ich empfehle allerdings die erste Variante weil der Editor meiner Meinung nicht wirklich zu gebrauchen ist.

In der EDJE EDC Datei (aus der dann später die EDJ wird) ist das gesamte Interface definiert. Die Syntax der Datei orientiert sich an C. Im großen und ganzen besteht eine EDC Datei aus mehreren Sektionen wie z.B. fonts, images, data und collections. Kompiliert man dann mit edje_cc eine EDC Datei so werden die Bilder etc. automatisch in diese Datei integriert.

Die Anwendung welche das Interface benutzen möchte muss dann nur den Namen der EDJ Datei sowie die verwendeten Signale kennen, damit die passenden Callbacks in der Anwendung definiert werden können. Diese Callbacks sind praktisch die Eventhandler für das entsprechende Signal. Das heißt theoretisch kann man das Interface einer Anwendung komplett austauschen solange es die gleichen Signale liefert. Soviel erst einmal zu Edje.

Weitere Informationen gibt es unter:
http://www.cuddletech.com/edje/docs/html/edje_book.html
http://wiki.enlightenment.org/index.php/Evas
http://web.archive.org/web/20070712132921/http://www.rephorm.com/pages/tutorials/evas/basics