Generative Kunst erstellen

Kunst für den Ungeübten ist ein schwieriges Pflaster. Das muss allerdings nicht immer so sein. Mit Silk kann auf einer bereitgestellten Zeichenfläche gemalt werden und dadurch entstehen dort interessante Bilder. Das Ganze hat dabei durchaus etwas Meditatives. Die Bilder können anschließend exportiert werden.

Silk in Aktion

Zu finden ist Silk unter weavesilk.com. Neben der Webapp existiert mittlerweile eine App für iOS, in der zweiten Version.

‎Silk 2 – Generative Art
Preis: 2,99 €

In der App existieren weitere Möglichkeiten zur Anpassung der Generierung, sowie ein HD-Export für die Ergebnisse.

Separates Watches-Fenster in IntelliJ IDEA aktivieren

In den neueren Versionen der Java-IDE IntelliJ IDEA wurde die Ansicht des Variables– und des Watches-Fensters standardmäßig zusammengelegt. Damit können alle aktuell aktiven Variablen und die selbstdefinierten Watches in einem Fenster betrachtet werden.

Standardmäßig ist das Variablen- und das Watch-Fenster zu einem Fenster zusammengefasst

Dem ein oder anderen mag diese neue Ansicht zu unübersichtlich sein. Die alte Ansicht ist nicht aus der IDE verschwunden, so das diese wieder aktiviert werden kann. Dazu muss dann Brillensymbol in der vertikalen Symbolleiste des Fensters ausgewählt werden.

Die alte Ansicht kann wieder aktiviert werden

Damit wird die alte Ansicht, in der die aktiven Variablen und die Watches wieder getrennt sind, aktiviert.

Historic Tale Construction Kit

Wer kennt es nicht, es ist Freitag Nachmittag und plötzlich wird ein historisch akurater Comic aus dem Mittelalter benötigt. Damit hier niemand im Regen stehen muss, gibt es das Historic Tale Construction Kit.

Mit dem Historic Tale Construction Kit können entsprechende Comics erstellt werden

Mit diesem ist es möglich solche Comics problemlos aus den vorgefertigten Elementen zu generieren. Ist der Comic fertiggestellt, kann er als PNG Datei exportiert werden. Ausprobiert werden kann das Ganze auf der Seite des Projektes. Der entsprechende Quelltext ist unter MIT-Lizenz lizenziert und damit freie Software. Er kann über GitHub bezogen werden.

Probleme mit Festplatten und macOS

Seit dem Update auf macOS 10.14.4, zeigen bestimmte Festplatten beim Hochfahren des Systems eine ungewöhnliche Eigenart. Sie werden beim Start und auch beim Anstecken während des Betriebes nicht mehr automatisch gemountet. Betroffen von dem Fehler sind augenscheinlich nur verschlüsselte Festplatten.

Nach der Aktivierung kann die Festplatte wieder genutzt werden

Es scheint sich um ein Bug in der Version 10.14.4 von macOS zu handeln, welcher wahrscheinlich mit dem nächsten Update gefixt wird. Solange dies nicht der Fall ist, können die Festplatte über das Festplattendienstprogramm manuell aktiviert werden. Dazu wird dieses gestartet und anschließend mit der rechten Maustaste auf die betreffende Festplatte geklickt. Im sich öffnenden Menü wird der Punkt Aktivieren ausgewählt. Damit ist die externe Festplatte wieder eingebunden.

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.