FreshRSS

🔒
❌ Über FreshRSS
Es gibt neue verfügbare Artikel. Klicken Sie, um die Seite zu aktualisieren.
Vor vorgesternIhre RSS-Feeds

c't zockt Retro: Alte Point&Click-Adventures wiederbelebt

Von Mirko Dölle

zurück zum Artikel

Das c't-zockt-Team dreht die Zeit zurück und erweckt alte Adventures für Amiga, Atari, DOS und Windows zu neuem Leben – unter Linux.

Mit Linux und einem eigens gepatchten ScummVM-Emulator dreht das c't-zockt-Team die Zeit zurück: Heute um 21 Uhr startet die neue Retro-Serie, in der wir alte Point&Click-Adventures aus Amiga-, Atari-, DOS- und frühen Windows-Zeiten auf Twitch live aus dem Wohnzimmer streamen.

Qualitätsjournalis Zak McKracken weigert sich, Stories für ein Boulevard-Blatt zu erfinden. Sein Chef überredet ihn zu einer letzten Story über ein zweiköpfiges Eichhörnchen, das unweit der UFO-Sichtungen am Mt. Rainier Camper angreift. Ganz ehrlich!
Qualitätsjournalis Zak McKracken weigert sich, Stories für ein Boulevard-Blatt zu erfinden. Sein Chef überredet ihn zu einer letzten Story über ein zweiköpfiges Eichhörnchen, das unweit der UFO-Sichtungen am Mt. Rainier Camper angreift.

Den Anfang macht die deutsche DOS-Version von Zak McKracken and the Alien Mindbenders von Lucasfilm Games aus dem Jahr 1988. Hier stolpert Qualitätsjournalist Zak während der Recherche für eine Boulevard-Story über eine Alien-Verschwörung und muss zusammen mit Annie, Melissa und Leslie mal eben die Welt vor der Unterjochung retten – unter anderem, indem Zak Maja-Tempel, das Bermuda-Dreieck, Atlantis und schließlich den Mars bereist.

Archäologische Datenrettung

Bei der Vorbereitung gab es gleich mehrere Herausforderungen: Die erste war, die alten 5,25"-Disketten aus der Original-Spiele-Box auf einen modernen Rechner zu kopieren. Das gelang uns mit einem alten Windows-98-Rechner und einem FTP-Server: Mit modernen USB-Sticks, selbst kleinen Größen, konnte Windows nicht umgehen, sodass wir die geretteten Dateien der Disketten per FTP übertragen mussten. Erstaunlich: Obwohl die 5,25"-Disketten über 30 Jahre alt waren und das Laufwerk kaum jünger, gab es keinen einzigen Lesefehler.

Anspruchsvoll ist auch die Grafik des Spiels mit einer Auflösung von 320x200 Pixeln – das füllt heute nicht einmal den Bildschirm eines Smartphones. Das Adventure im DOS-Emulator in Originalgröße zu streamen war also keine Option. Der Emulator ScummVM, der neben Spielen von Lucasfilm Games auch viele Abenteuer von Sierra und anderen Spieleschmieden unterstützt, bietet immerhin eine zweifache, respektive dreifache Vergrößerung.

Original-Feeling in Full HD

Verschwörung: Aliens haben die Telefongesellschaften übernommen und verdummen nun die Menschheit. Wir haben es schon immer geahnt!
Verschwörung: Aliens haben die Telefongesellschaften übernommen und verdummen nun die Menschheit. Wir haben es schon immer geahnt!

Doch selbst in dreifacher Vergrößerung wäre ein heute gängiger Full-HD-Bildschirm nur zu einem Viertel gefüllt, weshalb wir die Entwickler von ScummVM angesprochen haben. Diese stellten uns einen Patch für vierfache Vergrößerung bereit, mit dem wir dann eigens ein neues Debian-Paket des Emulators erzeugten. Zak McKracken wird also in einer Auflösung von 1280x800 Pixeln unter Linux zu sehen sein, ergänzt um ein Chat- und ein Kamerafenster, sodass der Stream insgesamt Full-HD-Auflösung haben wird. Trotz der hohen Auflösung geht von dem Original-Feeling nichts verloren, wir haben uns gegen Optimierungen von Grafik oder Schriften entschieden.

Der erste Teil von Zak McKracken and the Alien Mindbenders wird heute ab 21 Uhr auf dem Twitch-Kanal von c't zockt [1] zu sehen sein und voraussichtlich, aufgrund der zu erwartenden Gesamtspieldauer, an einem anderen Donnerstagabend fortgesetzt werden. Die Aufzeichnung werden wir in den nächsten Wochen im YouTube-Channel von c't zockt [2] veröffentlichen. Für Nachschub ist auch schon gesorgt, neben Zak McKracken haben wir bereits Monkey Island 1 und 2, Loom und die Space-Quest-Saga Teil 1 bis 6 von unserem Pile of Shame gerettet. ()


URL dieses Artikels:
http://www.heise.de/-4456321

Links in diesem Artikel:
[1] https://twitch.tv/ctzockt
[2] https://www.youtube.com/ctzockt
[3] mailto:mid@ct.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 27. Juni 2019 um 15:55

Angezockt: Empires of the Undergrowth - Das große Krabbeln

Von Rudolf Opitz

zurück zum Artikel

Im Early-Access-Spiel "Empires of the Untergrowth" kontrolliert der Spieler eine Ameisenkolonie und lässt sie mit der richtigen Strategie wachsen, kämpfen und siegen.

Die Ameisenkönigin liegt in ihrer Brutkammer. Um sie herum wuseln einige Arbeiterinnen und versorgen die wenigen Eier. Doch die neue Kolonie muss wachsen und braucht Futter. Mit der richtigen Taktik hilft der Spieler den Ameisen im Early-Access-Spiel "Empires of the Undergrowth [1]", sich zu einer großen, wehrhaften Kolonie zu entwickeln.

Das Echtzeitstrategiespiel von Slug Disco Studios erinnert in mancher Hinsicht an den Klassiker Dungeon Keeper. Als übergeordnete Instanz gibt man den Arbeiterinnen den Befehl zu graben, Futter zu sammeln oder Nahrungs- und Brutfelder anzulegen. Letztere sorgen für mehr Arbeiter- oder Soldatenameisen und bei den unvermeidlichen Kampfverlusten für stetigen Nachschub – aber nur so lange, wie Futter vorhanden ist. Herz der Kolonie ist die Königin, die es unter allen Umständen zu verteidigen gilt. Stirbt sie, ist die Runde vorbei.

Verschiedene Spiele-Modi, Aufgaben und Herausforderungen und nicht zuletzt eine Vielzahl an Feinden sorgen für Überraschungen und viel Spaß. Der Spieler kann unterschiedliche Strategien ausprobieren und nicht nur im unterirdischen Bau sondern auch an der liebevoll gestalteten Oberfläche agieren.

Das Formicarium

Im Hauptspiel, dem Formicarium, lebt die Startkolonie – eine Königin mit sieben Arbeiterinnen – in einer Ameisenfarm, die auf dem Tisch einer Wissenschaftlerin steht. Während des Spiels hört man die Konversation mit ihrem Assistenten. Dieser führt Experimente durch (Herausforderungen) und ist etwas sadistisch veranlagt.

Empires of the Undergrowth (0 Bilder) [2]

[3]

Grafisch macht Empires of the Undergrowth viel her – die Entwicker haben die Unreal-4-Engine benutzt –, allerdings dürfte es zumindest arachnophobisch veranlagten Spielern Unbehagen verursachen. Ameisen und besonders Feinde wie Moderkäfer, räuberische Larven, Krebse, Fangschrecken, verschiedene Spinnen und nicht zuletzt andere Ameisenvölker werden recht realistisch dargestellt und animiert.

Wer die Hauptaufgabe erfüllt hat, kann spezielle Maps spielen oder ein freies Spiel starten. Bei letzterem wählt man Schwierigkeit und Feinde individuell aus und lässt in der Arena verschiedene Krabbeltiere gegeneinander antreten.

Early Access

Obwohl Empires of the Undergrowth noch ein unfertiges Early-Access-Spiel ist, fielen uns kaum grafische oder spielerische Fehler auf, wenn man von der wechselnden Maustaste beim Setzen von Pheromon-Markern (damit steuert man Kampf- und Arbeitseinheiten) absieht. Mal braucht es einen Doppelklick auf die rechte Maustaste, mal reicht ein Linksklick.

Besonders wichtig: Das Spiel versteht zu fesseln und lässt Spieler, die Spaß am Ausprobieren von Taktiken haben, auch die eine oder andere Niederlage verschmerzen. Die bisherigen Inhalte reichen bereits für viele Stunden Spielspaß; die Entwickler planen aber weitere Feinde und Ameisenvölker wie Schnappkiefer- und Blattschneiderameisen – von letzteren gibt es bereits eine spielbare Demo-Map.

Empires of the Undergrowth ist für Linux, macOS und Windows bei GOG [4], Itch.io [5] und Steam [6] erhältlich und kostet rund 20 Euro. Unser Angezockt-Video finden Sie im ctzockt-Kanal [7] von YouTube oder hier:

ct angezockt: Empires of the Undergrowth

()


URL dieses Artikels:
http://www.heise.de/-4454821

Links in diesem Artikel:
[1] http://eotugame.com/
[2] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4454421.html?back=4454821
[3] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4454421.html?back=4454821
[4] https://www.gog.com/game/empires_of_the_undergrowth
[5] https://slugdisco.itch.io/empires-of-the-undergrowth
[6] https://store.steampowered.com/app/463530/Empires_of_the_Undergrowth/
[7] https://www.youtube.com/ctzockt
[8] mailto:rop@ct.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 27. Juni 2019 um 06:30

ESP32 to go

Von heise online

zurück zum Artikel

2016 stellte Espressif eine leistungsfähige Familie von Microcontrollern auf Basis des ESP32 vor. Dieses Blog hat den ESP32 zwar bereits früher thematisiert, aber zum Auftakt einer Reihe von Beiträgen zu diesem Thema werden ESP32 und entsprechende Boards noch mal genauer beleuchtet.

Das chinesische Chip-Unternehmen Espressif hat vor wenigen Jahren durch seinen ESP8266-Chip große Euphorie bei Makern ausgelöst. Der ESP8266 als System-on-a-Chip (SoC) integriert sowohl einen leistungsstarken Microcontroller als auch eine WiFi-Komponente. Entsprechende Boards sind inzwischen schon für eine Handvoll Euros zu haben. Ich habe ESP-01-Boards bereits in diesem Blog genutzt, um Arduinos preiswert mit dem WLAN beziehungsweise dem Internet zu verbinden. Es ist dabei aber leicht zu übersehen, dass der ESP8266 in vielen Aspekten mit Arduinos ATMEL-Chips mithalten kann.

Warum ist der ESP32 interessant?

Wie auch bei Vierrad-Enthusiasten üblich soll zuerst ein Blick unter die Motorhaube erfolgen. ESP32-Chips enthalten eine ganze Reihe von interessanten Merkmalen:

  • Sie beherbergen meistens zwei 32-Bit-Prozessorkerne des Typs Tensilica Xtensa LX6, die mit 160 MHz bis 240 MHz Taktfrequenz arbeiten. “Meistens” deshalb, weil es auch eine ESP32-Variante mit nur einem Kern gibt.
  • Der “Laderaum” sorgt für komfortables Wohngefühl: Mit 520 KB RAM und 448 KB ROM dürften für die meisten Embedded-Anwendungen genügend Reserven vorhanden sein.
  • Im Gegensatz zu vielen Arduino-Boards verwendet der ESP32 3,3V als Betriebsspannung. Der entscheidende Vorteil: Weil viele Sensoren und Aktuatoren ebenfalls mit 3,3V arbeiten, entfällt der sonst notwendige Pegelwandler zwischen 3,3V- und 5V-Komponenten.
  • Da heutzutage das Thema Energiesparen vorherrscht, sei auf den Low-Power-Modus des ESP32 verwiesen. Im Tiefschlaf (Deep Sleep) verbraucht ein ESP32-Board nur einen Bruchteil der sonst benötigten Leistung. Das ermöglicht autonome Systeme, die im Batterie-/Akku-Betrieb mit langer Laufzeit auskommen müssen.
  • Diverse Schnittstellen verbinden den Microcontroller mit der Außenwelt. Darunter befinden sich UARTs, SPI, CAN, I2C, I2S, PWM – ich spare mir aufgrund des Trägheitsprinzips die Beschreibung der diversen Hardwareschnittstellen, da sie bis auf CAN schon in vergangenen Folgen zur Sprache kamen. Mit CAN ist ein standardisiertes Bussystem gemeint, das häufig in Anwendungen der Automatisierungstechnik zum Einsatz kommt. Autohersteller und ihre Zulieferer nutzen CAN zur Kommunikation verschiedener Steuereinheiten miteinander.
  • Damit sich analoge Werte in digitale umwandeln lassen, verfügt der Chip über diverse ADCs (Analog Digital Converter). Umgekehrt erlauben DACs (Digital Analog Converter) die Wandlung digitaler in analoge Signale.
  • Zur drahtlosen Kommunikation mit anderen Geräten integriert der ESP32 sowohl WLAN als auch Bluetooth. Letzteres war beim ESP8266 nicht möglich.
  • Ohne Firmware lässt sich ein Microcontroller nicht nutzen. Die Firmware des ESP32 ist in einem seriell anschließbaren externen Flash-Speicher untergebracht. Es macht daher meistens nur wenig Sinn, einen Standalone-ESP32-Chip zu erwerben, sondern stattdessen ein Board, das den Firmwarespeicher neben anderer Features – zum Beispiel einen USB-Anschluss – umfasst.
  • Zu guter Letzt: Ein integrierter Hall-Sensor erlaubt die Messung elektromagnetischer Felder. Die im ESP32 integrierte Crypto-Einheit finden in Anwendungen Einsatz, um die Kryptographie-Operationen zu beschleunigen.
Blockbild der ESP32-Architektur

Allerdings gibt es nicht nur eine Variante des ESP32, sondern gefühlt ein gutes Dutzend. Die heißen dann auch mal ESP32S, firmieren je nach Größe als WROOM oder WROVER, haben verschiedene Erweiterungen. Uns sollen deren Unterschiede kalt lassen. Für die Hardware-Interessierten verweise ich auf die Webseite esp32.net [1].

Come on Board

Selbstredend existiert nicht das eine ESP32-Board, sondern Dutzende. Solche mit Display und solche ohne, solche mit LoRA-Kommunikation und solche ohne. Dazu verschiedenste Formfaktoren, nach außen gelegte Pins und dergleichen mehr.

Ein Board des Typs ESP32
Ein Board des Typs ESP32 (Bild: amazon.de)

Als NodeMCU firmieren die Boards, die im Auslieferungszustand die Skriptsprache LUA und die entsprechende Firmware beherbergen. Grundsätzlich gibt es unterschiedliche Firmware-Optionen, die auf ESP32-Boards laufen, darunter zum Beispiel MicroPython (oder CircuitPython auf Adafruit-Boards), FreeRTOS (RTOS = Real-Time Operating System), und der Arduino Core für ESP32. Letztere Option nutze ich für den Rest dieses Blog-Postings.

SparcFun.com
Pin-Belegung des ESP32 Smart Thing von SparkFun (Bild: SparkFun.com)

Zu den häufig anzutretenden Vertreter ihrer Gattung gehören beispielsweise das Original-ESP32-Dev-Modul von Espressif und seine zahlreichen Klone sowie das DOIT ESP32 DevKit V1. Diese gibt es in der Regel für Preise von 5 bis 10 Euro bei den üblichen Verdächtigen (eBay, Amazon, Watterott, EXP-TECH, Alibaba ....). Das finanzielle Risiko hält sich also in Grenzen. Eine Bestellung in China kommt noch etwas billiger, lohnt sich wegen der längeren Lieferzeiten aber nur, wenn es einem nicht schon in den Fingern juckt.

Eine Frage der Programmierung

Es gibt diverse Optionen, die eine Host-/Target-Entwicklung mit ESP32-Boards unterstützen:

  • Von Espressif selbst steht die ESP-IDF-Plattform im Angebot.
  • Das Open-Source-Projekt ESP32 Arduino Core liefert eine Sammlung von Bibliotheken und Werkzeugen, mit der sich die Arduino IDE nutzen lässt, um Software für ESP32-Boards zu programmieren. Weiterer Vorteil: Leistungsstarke Entwicklungsumgebungen wie Visual Studio Code verfügen über Plug-ins für Arduino und Arduino ESP32 Core.

In Rahmen dieses Blogs dient die Arduino IDE in Kombination mit dem Arduino Core für ESP32 als Werkzeug der Wahl. Sie ist kostenlos und bietet ausreichende Funktionalität. Man könnte sie gewissermaßen als MVP (Minimal Viable Produkt) bezeichnen. Aber keine Sorge! In späteren Folgen kommt auch noch die Alternative Visual Studio Code zur Sprache.

Arduino IDE

Um ESP32-Boards unter der Arduino IDE zu nutzen, müssen Entwickler zunächst eine möglichst aktuelle Version der IDE für Windows, Linux, oder macOS herunterladen. Das Installationspaket steht auf der Downloadseite von arduino.cc [2] zur Verfügung. Auf die Installation gehe ich an dieser Stelle nicht weiter ein und verweise auf frühere Postings. Dazu gibt es YouTube-Ressourcen wie die hier [3].

Arbeiten mit der Arduino IDE
Arbeiten mit der Arduino IDE

Nach Installation der Arduino IDE ist folgende URL des gewünschten ESP32-Boardmanagers in der Einstellungsseite (Windows: File | Preferences, macOS: Arduino | Preferences) einzutragen: https://dl.espressif.com/dl/package_esp32_index.json.

ESP32 to go

Anschließend sollte man im Boardsmanager (Tools | Boards | Boardsmanager) nach "ESP32" suchen. Dort müsste das Paket "esp32 by Espressif Systems" auftauchen, das sich mit Install installieren lässt.

ESP32 to go

Das war es auch schon. Besser gesagt fast. Die (chinesischen) ESP32-Boards enthalten häufig einen UART-to-USB-Baustein von SiLabs. UART steht für Universal Asynchronous Receiver Transmitter und dient der seriellen Kommunikation zwischen Host-PC und Embedded Board über USB. Um am Windows-, Linux-, macOS-Computer mit dem Board kommunizieren zu können, ist ein entsprechender Treiber notwendig. Den gibt es über das Internet unter der URL <SiLabs> [4]).

Von Mappings und anderen Schikanen

Um die verschiedenen Pins eines ESP32-Boards mit symbolischem Namen innerhalb der Arduino IDE anzusprechen, existieren sogenannte Mappings, bereitgestellt durch den Arduino Core. Dazu finden sich im Installationsverzeichnis der IDE (Arduino | hardware | espressif | esp32 | variants | esp32) entsprechende Deklarationen in pins_arduino.h. Wie aus dem folgenden Bild ersichtlich, erweist sich ein solches Mapping als wichtig, um etwas Ordnung ins Namenschaos zu bringen.

Das Mapping der ESP32-Pins auf die Arduino IDE
Das Mapping der ESP32-Pins auf die Arduino IDE (Bild: LastMinuteEngineers.com)

Funktion der Tasten

Im Regelfall befinden sich zwei Tasten auf einem ESP32-Board, eine EN-Taste und eine BOOT-Taste. Der ESP32 kennt zwei Betriebsmodi, Normalmodus und Firmware-Update-Modus. Für das Einspielen neuer Software (eigenes Programm plus Laufzeitumgebung/Firmware) müssen Entwickler das Board daher in den Uploadmodus versetzen. Die EN-Taste sorgt lediglich für einen Restart. Stattdessen ist für den Software-Upload folgendes Vorgehen notwendig:

  1. BOOT-Taste drücken und gedrückt halten
  2. EN-Taste betätigen und wieder loslassen
  3. BOOT-Taste loslassen

Achtung:

  • Dieses Vorgehen können einige Boards auch automatisieren.
  • Die Tasten haben auf unterschiedlichen Boards unterschiedliche Namen (z. B. "RS" und "0", "BOOT" und "RST").
Ein Board des Typs SparkFun ESP32 Thing mit Tasten &quot;RST&quot; und &quot;0&quot;
Ein Board des Typs SparkFun ESP32 Thing mit Tasten "RST" und "0"

Sollte beim Kompilieren eines Programms innerhalb der IDE zu einer Fehlermeldung mit roter Schrift kommen, genügt es meist, die BOOT-Taste ein bisschen gedrückt zu halte, um sie anschließend wieder los zu lassen.

Das erste Mal

Nun erfolgt die erste Prüfung des jungfräulichen ESP32-Boards. Die Arduino IDE soll einen ersten Einblick vermitteln, dass die Programmierung exakt auf dieselbe Weise erfolgen kann wie bei Arduino-Boards.

Sobald der ESP32 am Hostcomputer angeschlossen ist, sucht man im Tools-Menü nach dem benutzten Board und stellt es ein. Zudem gibt im Ports-Bereich den vom Board verwendeten seriellen (SLab-)Port ein.

Ich selbst nutze zum Experimentieren das ESP32 Smart Thing von SparkFun sowie ein ESP32-Board von Watterott, besitze aber aus Preisgründen zahlreiche Boards des Typs NodeMCU32 sowie Lolin32 aus chinesischer Produktion.

ESP32-Boards gibt es fast so viele wie Sand am Meer
ESP32-Boards gibt es fast so viele wie Sand am Meer

Um das ESP32-Board zum ersten Mal zu programmieren, öffnet man in der Arduino IDE ein neues Projekt beziehungsweise einen neuem Sketch und gibt nachfolgenden Code ein. Der Sketch geht davon aus, dass sich die eingebaute LED an Pin 2 befindet. Sollte Entwickler ein anderes Board besitzen, lesen sie dessen Beschreibung und definieren sie gegebenenfalls für die Konstante LED einen anderen Wert. Danach lässt man das Programm übersetzen und aufs Board übertragen. Nach dem Öffnen des seriellen Monitors gibt man 115.200 Baud als Geschwindigkeit ein. Um den seriellen Monitor zu öffnen, navigiert man über den Menüpfad Tools | Serial Monitor.

Jetzt müsste sowohl die Onboard-LED im Einsekundentakt blinken als auch der Text “Hallo, ESP32” wiederholt auf dem seriellen Monitor erscheinen.

const int LED = 5; // Eingebaute blaue LED an Pin 5
// Setup - läuft nach jedem Reset genau einmal
void setup() {
// Digitaler Ausgang steuert die LED
pinMode(LED, OUTPUT);
Serial.begin(115200); // Seriellen Port mit 115200 Baud initialisieren
}

// Unendliche Ereignisschleife; HIGH & LOW sind Spannungslevels!
void loop() {
Serial.println(“Hallo, ESP32”); // Ausgabe an seriellen Monitor senden
digitalWrite(LED, HIGH); // Es werde Licht
delay(1000); // Wartezeit von einer Sekunde
digitalWrite(LED, LOW); // Licht aus
delay(1000); // Wartezeit von einer Sekunde
}

Damit ist die Jungfernfahrt bereits erledigt. Wer experimentieren will, könnte zum Beispiel an Pin 5 auch eine externe LED anschließen oder andere Schikanen einbauen.

Arbeitsteilung

Da der ESP32 eine Mehrkernarchitektur aufweist, lassen sich echt parallele Threads beziehungsweise Tasks einsetzen. Das folgende Programm nutzt diese Möglichkeit exemplarisch, um Tasks mittels xTaskCreatePinnedToCore() zu erzeugen und sie an einen der beiden Kerne zu binden. Der erste Task taskOne läuft auf dem ersten Kern 0 der zweite taskTwo auf dem zweiten Kern 1. Beide Tasks haben Priorität 1 und erhalten 10.000 Bytes Stackgröße.

taskOne lässt die eingebaute LED jede halbe Sekunde blinken, während taskTwo jede halbe Sekunde Text am seriellen Monitor ausgibt.

TaskHandle_t task1; // Jeder Task benötigt einen Handle
TaskHandle_t task2;
// LED Pin ist die eingebaute Pin
const int ledPIN = 5;

void setup() {
Serial.begin(115200);
pinMode(ledPIN, OUTPUT);

// task ausgeführt in taskOne()
// auf dem ersten Core (Core 0), Prio: 1
xTaskCreatePinnedToCore(
taskOne, /* Funktion mit Code des Tasks */
"TaskOne", /* Name des Tasks */
10000, /* Stackgröße des Tasks */
NULL, /* Parameter des Tasks */
1, /* Priorität des Tasks */
&task1, /* Handle auf Task */
0); /* Task soll auf Kern 1 laufen */
delay(500);

// task ausgeführt in taskTwo()
// auf dem zweiten Core (Core 1), Prio: 1
xTaskCreatePinnedToCore(
taskTwo, /* Funktion mit Code des Tasks */
"TaskTwo", /* Name des Tasks */
10000, /* Stackgröße des Tasks */
NULL, /* Parameter des Tasks */
1, /* Priorität des Tasks */
&task2, /* Handle auf Task */
1); /* Task soll auf Kern 2 laufen */
delay(500);
}

// taskOne: LED soll alle 2 Sekunden blinken
void taskOne( void * optionalArgs ){
for(;;){
digitalWrite(ledPIN, HIGH);
delay(500);
digitalWrite(ledPIN, LOW);
delay(500);
}
}

// taskTwo: Ausgabe am seriellen Monitor alle 100 msec
void taskTwo( void * optionalArgs ){
Serial.print("Task 2 läuft auf Kern ");
Serial.println(xPortGetCoreID())
for(;;){
Serial.println("LED an");
delay(500);
Serial.println("LED aus");
delay(500);
}
}
void loop() { /* braucht es nicht */ }


Die Methode loop() bleibt in diesem Fall ungenutzt, weil sich die Ereignisschleife ohnehin in den endlos laufenden Tasks abspielt.

Das Beispiel ist zwar lehrreich, aber etwas theoretisch. In der Praxis könnte einer der Tasks die Kommunikation mit der Außenwelt übernehmen, während der zweite Messwerte von Sensoren liest.

Let's talk

In jedem Fall wäre es hilfreich, würden Tasks auch Information austauschen. Genau das demonstriert das nachfolgende Beispiel. Mittels xQueueCreate legt das Hauptprogramm eine Queue mit einem Slot des Datentyps unsigned long an. Das Kreieren der Tasks bewerkstelligt diesmal die Methode xTaskCreate. Das Programm implementiert eine simple Produzenten-Konsumenten-Konstellation.

Der Aufruf von vTaskDelay ist das ESP32-Pendant zu Arduinos delay, arbeitet aber mit höherer Auflösung, weshalb wir die gewünschte Zeitdauer noch durch die Konstante portTICK_PERIOD_MS teilen müssen. Die Konstante gibt an, wie viele Taktzyklen pro Millisekunde durchgeführt werden.

Um sicherzustellen, dass ein Wert in der Queue vorhanden und ungelesen ist oder bereits ein neuer geschrieben werden kann, fragt der Produzent queue auf Null ab, bevor er schreibt. Entsprechend prüft der Konsument, ob tatsächlich ein Wert in der Queue vorliegt.

QueueHandle_t  queue = NULL; // Queue anlegen

void setup()
{
printf("Starte zwei Tasks und eine Queue /n /n");
queue = xQueueCreate(20,sizeof(unsigned long));
if(queue != NULL){
printf("Queue kreiert \n");
vTaskDelay(1000/portTICK_PERIOD_MS); // Eine Sekunde warten
xTaskCreate(&produzent,"produzent",2048,NULL,5,NULL);
printf("Produzent gestartet \n");
xTaskCreate(&konsument,"konsument",2048,NULL,5,NULL);
printf("Konsument gestarted \n"); // Hier nutzen wir mal C/C++
} else {
printf("Queue konnte nicht angelegt werden \n");
}
}

void konsument(void *pvParameter)
{
unsigned long counter;
if (queue == NULL){
printf("Queue nicht bereit \n");
return;
}
while(1){
xQueueReceive(queue,&counter,(TickType_t )(1000/portTICK_PERIOD_MS));
printf("Empfangener Wert über Queue: %lu \n",counter);

vTaskDelay(500/portTICK_PERIOD_MS); // halbe Sekunde warten
}
}

void produzent(void *pvParameter){
unsigned long counter=1;
if(queue == NULL){
printf("Queue nicht bereit \n");
return;
}
while(1){
printf("An Queue gesendeter Wert: %lu \n",counter);
xQueueSend(queue,(void *)&counter,(TickType_t )0);
// ... schreibt den wert von Counter in die Queue
counter++;
vTaskDelay(500/portTICK_PERIOD_MS); // halbe Sekunde warten
}
}
void loop() {}

Deep Sleep

Ein ESP32-Board braucht im aktiven Zustand schon einige mA, im Schnitt etwa 150 bis 260 mA. Im aktiven Modus inklusive aller Komponenten wie WiFi und Bluetooth können das sogar bis zu 800 mA bei Spitzenlasten sein. Innerhalb von IoT-Anwendungen kommt es aber durchaus häufig vor, dass Geräte mittels Sensoren nur alle Minuten oder sogar Stunden kurzzeitige Messungen vornehmen, um sie anschließend per Kommunikationsprotokoll nach außen zu übertragen. Es macht also keinen Sinn, einen Embedded-Controller ständig aktiv arbeiten zu lassen. Bei einem autonomen, batteriebetriebenen Gerät müsste man ansonsten alle paar Stunden die Batterie ersetzen. Stellt man sich vor, dass das Gerät auf einem Baum in großer Höhe angebracht ist, dürfte die praktische Dimension dieses Problems klar sein.

Deshalb unterstützt der ESP32 diverse Sparmodi. Beim Deep-Sleep-Modus sind nur noch der RTC (Echtzeituhr) und der ULP-Koprozessor (ULP = Ultra Low Power) aktiv. Der benötigte Reststrom beträgt in diesem Fall gerade einmal 2,5 micro Ampere. Damit lässt sich gut auskommen.

Um vom Tiefschlaf zu erwachen, braucht der ESP32 keinen schönen Prinzen, obwohl auch das möglich wäre. Es gibt drei Optionen: Betätigen eines Touch-Pins, Ereignis an einem externen Pin (= Signalflanke) oder zeitgesteuertes Aufwecken mittels des ULP-Koprozessors. Diesen letzteren Fall beleuchtet nachfolgendes Beispiel.

Allerdings führt der Tiefschlaf auch eine Art digitale Demenz nach sich, weil die Daten (= Variablen) bis auf eine Ausnahme verloren gehen. Alle Daten, die mit dem Schlüsselattribut RTC_ATTR_DATA deklariert sind, bleiben erhalten. Immerhin beherbergt dieser persistente Speicher rund viermal so viele Daten wie ein gewöhnlicher Arduino Uno/Mega/Nano Speicher insgesamt mitbringt.

Im folgenden Programm liegt die Variable restarted im besagten Speicher. Sie zählt einfach mit, wie oft bereits ein Neustart erfolgte. Beim ersten Start (restarted == 0) blinkt die eingebaute LED kurz. Sind schon mehrere Restarts nach Tiefschafphasen erfolgt (restarted != 0), blinkt die LED häufiger.

Die Einleitung eines zeitgesteuerten Tiefschlafs beginnt mit dem Aufruf von esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR. Die Zeit in Sekunden gibt TIME_TO_SLEEP wieder. Da intern die Berechnung in Microsekunden erfolgt, muss der Umrechnungsfaktor uS_TO_S_FACTOR noch dazu multipliziert werden. Den eigentlichen Tiefschlaf leitet der folgende Aufruf ein: esp_deep_sleep_start():

#define uS_TO_S_FACTOR 1000000         // Microsekunden => Sekunden 
#define TIME_TO_SLEEP 3 // Schlaflänge in Sekunden :-)
RTC_DATA_ATTR int restartet = 0;
#define LEDPIN 2 // eingebaute LED
#define BLINK_DELAY 200 // Blinkfrequenz = 200 / BLINK_DELAY
void setup() {
Serial.begin(115200);
Serial.println(“Deep Sleep mittels Timer - Demo”);
pinMode(LEDPIN,OUTPUT); // LED

delay(500); // a bisserl Geduld



if(restartet == 0) // das erste Mal
{
Serial.println(“Initialer Start”);
digitalWrite(LEDPIN, HIGH); // Licht an
delay(10 * BLINK_DELAY);
digitalWrite(LEDPIN, LOW); // Spot aus
restartet++;
} else // nicht mehr jungfräulich
{
Serial.println(“Schon ein paar Mal aus Schlaf erwacht: “ + String(restartet)));
blinken(restartet);
}

// In Tiefschlaf versetzen
Serial.print(“Tiefschlaf wird initiiert für “ + String(TIME_TO_SLEEP));
Serial.println(“ Sekunden”);
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start(); // Schlaf beginnt
}
void blinken(byte n) { // n mal Blinken im BLINK_DELAY msec Abstand
Serial.println(“Blinken startet”);
for (i = 0; i < n; i++) {
Serial.println(“LED an”);
digitalWrite(LEDPIN, HIGH);
delay(BLINK_DELAY);
Serial.println(“LED aus”);
digitalWrite(LEDPIN, LOW);
}
}
void loop() {
Serial.println(“Unerreichter Code”);
}

Da das Programm den Tiefschlaf in setup() durchführt, kommt es in diesem Beispiel natürlich nie zur Ausführung der Methode loop().

Fazit

Nun sind wir am Ende dieses Beitrags angekommen, womit die Basis für eigene Experimente gelegt wäre. Dabei lag der Fokus auf die inneren Werte des ESP32. Wir haben die funktionale Architektur beleuchtet, einige besondere Aspekte wie Parallelisierung und Tiefschlaf betrachtet und dazu Beispiele kennen gelernt. Im Mittelpunkt der Programmierung stand dabei die Arduino IDE.

Beim nächsten Beitrag kommt die Interaktion des ESP32 mit der Außenwelt zur Sprache. Themen sind dann insbesondere die WiFi-Funktionalität des Microcontrollers.

Bis dahin viel Spaß beim Experimentieren!


URL dieses Artikels:
http://www.heise.de/-4452689

Links in diesem Artikel:
[1] http://esp32.net
[2] https://www.arduino.cc/en/Main/Software
[3] https://www.youtube.com/watch?v=39yjdj1b9bs
[4] https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 26. Juni 2019 um 08:53

Back again

Von heise online

zurück zum Artikel

Dieser Blog war krankheitsbedingt verwaist. Jetzt ist es an der Zeit, ihn wieder mit neuen Beiträgen zu füllen. In der nahen Zukunft soll wieder das Thema IoT (Internet of Things) und Mikroelektronik zur Sprache kommen.

In den letzten Postings – also vor einer gefühlten Ewigkeit – habe ich mich mit IoT und Embedded Microcontrollerboards beschäftigt. Das geschah hauptsächlich auf Basis des Arduino-Ökosystems.

Das Thema Arduino spielt auch weiterhin eine wichtige Rolle. Immerhin hat sich in der Zwischenzeit einiges getan, was neue Arduino-Boards betrifft. In den zukünftigen Beiträgen verschiebt sich mein Fokus allerdings in Richtung Espressifs ESP32-Plattform. Auch andere Mütter haben schließlich hübsche Töchter. Dabei soll der Blog gelegentlich auch Themen wie KI @ Microcontrollers und Cloud Computing adressieren.

ESP32 – Power to Go

Microcontroller-Boards mit ESP32 unter der Motorhaube bieten für wenige Euro viel Leistung und Funktionalität. Speziell die eingebaute WiFi-Funktionalität springt dabei ins Auge. Daher bieten sich diese Boards auch für komplexere Projekte an. Die Menge von Möglichkeiten ist schier unüberschaubar.

In den ersten Beiträgen soll die Architektur des ESP32 im Schwerpunkt stehen, natürlich auch mit dem Blick auf passende Entwicklungswerkzeuge. Da die Community einen sogenannten Arduino-Core für den ESP32 entwickelt hat, lassen sich Anwendungen auch weiterhin mit der vertrauten Arduino IDE erstellen. Es gibt dafür aber auch leistungsstärkere Alternativen wie Visual Studio Code, die bei den Betrachtungen ebenfalls zur Sprache kommen.

Your Wish is My Command

Sollten Sie spezielle Themenwünsche haben, würde ich mich über entsprechendes Feedback sehr freuen. Ein Blog lebt schließlich auch von der Interaktion des Autors mit seinen Lesern.

Ich freue mich auf Ihre Rückmeldungen.


URL dieses Artikels:
http://www.heise.de/-4446767

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 14. Juni 2019 um 11:22

Videotutorial: "7 Days To Die" optimal einstellen und überleben

Von Liane M. Dubowy

zurück zum Artikel

Unser Videotutorial zeigt, wie Sie den ersten Tag im Alpha 17 des Survival-Games "7 Days To Die" überleben und die performancehungrige Grafik optimieren können.

Fiese Zombies, Hunde, Wölfe und Bären: Die Gefahren in "7 Days To Die" sind reichlich. Auch Hunger, Durst oder eine Infektion können das Leben in der Postapokalypse schnell beenden. c't-Redakteur Rudolf Opitz liefert in Teil 1 unseres Videotutorials zu "7 Days To Die" Tipps, die durch den ersten Spieltag helfen.

Viele neue Features

Mit der im Dezember 2018 erschienenen Alpha 17 [1] haben die Entwickler von The FunPimps noch eine Schippe draufgelegt und viele neue Features ins Spiel eingebaut. Über 120 neue "Points of Interest" sind dazugekommen, die riesigen Gebäude mit unterirdischen Gängen und viel versteckter Beute lassen so schnell keine Langeweile aufkommen. Die Erkundung jedes einzelnen gleicht einer kleinen Quest.

Umfangreiches Crafting verschafft Waffen, Nahrungsmittel und Fahrzeuge, mit denen die Postapokalypse leichter zu bewältigen ist. Erst im Laufe des Spiels schaltet man weitere Fähigkeiten frei. Neben der liebevoll gestalteten Standardmap Navezgane lassen sich beliebig viele neue zufallsgenerierte Maps starten, die für Abwechslung sorgen.

So überlebt ihr den ersten Tag! | 7 Days To Die A17 #01

Performance-Einbrüche umgehen

So komplex und spannend das Spiel ist: In vielen Dingen merkt man, dass "7 Days To Die" noch in der Early-Access-Phase steckt – auch wenn die Bezeichnung "Alpha" ein starkes Understatement ist. Besonders die Performance lässt häufig noch zu wünschen übrig. Fallen die Frameraten zu tief, kann man glücklicherweise an vielen Schräubchen in den Einstellungen drehen, um mehr herauszuholen. Wenn man die richtigen findet, sieht die Grafik auch in der Early-Access-Phase gut aus. In Folge 00 unseres 7 Days To Di-Tutorials zeigen wir, wo Anpassungen sinnvoll sind und wo eher nicht.

Die richtigen Grafikeinstellungen für mehr Spielspaß A17 | 7 Days To Die #00

Weitere Episoden unseres 7-Days-To-Die-Tutorials erscheinen jeweils donnerstags im c't-zockt-YouTube-Channel [2].

"7 Days To Die" gibt es für Linux, macOS und Windows bei Steam für rund 23 Euro [3]. Der Kauf schließt alle künftigen Versionen bis zur Fertigstellung ein. ()


URL dieses Artikels:
http://www.heise.de/-4415885

Links in diesem Artikel:
[1] https://www.heise.de/ct/artikel/Harte-Zeiten-c-t-zockt-LIVE-ab-17-Uhr-die-neue-Version-von-7-Days-To-Die-4242808.html
[2] https://www.youtube.com/ctzockt/
[3] https://store.steampowered.com/app/251570/7_Days_to_Die/
[4] mailto:lmd@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 08. Mai 2019 um 18:47

Jakarta EE: Der Anfang vom Ende oder die Chance für einen Neuanfang?

Von heise online

zurück zum Artikel

Mike Milinkovich, Executive Director der Eclipse Foundation, hat einen ernüchternden Lagebericht [1] zu den mittlerweile mehr als 18 Monate anhaltenden Verhandlungen zwischen der Eclipse Foundation und Oracle bezüglich Jakarta EE und der Verwendung von Oracles Markenrechten an Java veröffentlicht. Offiziell geht es um das Recht zur Verwendung der Namensrechte, unter anderen des Namensraums javax. Inoffiziell geht es um nicht weniger als die Zukunft des Enterprise-Java-Standards: Jakarta EE (vormals Java EE).

Vor rund anderthalb Jahren verkündete Oracle die Öffnung von Java EE [2] und übergab wenig später die zugehörigen Sourcen inklusive Technology Compability Kits (TCKs) an die Eclipse Foundation [3]. In den darauffolgenden Monaten investierte die Open-Source-Organisation viel Zeit und Energie in die Portierung der aktuellen Java-EE-Version 8 hin zu einem zu 100 Prozent kompatiblen Jakarta EE 8.

Parallel zu diesen Bemühungen wurde ein eigener Spezifikationsprozess namens Jakarta EE Specification Process (JESP) [4] etabliert, der den bis dato gültigen Java Community Process (JCP) von Oracle ablösen soll. Die Portierung ist mittlerweile abgeschlossen, wie in dem Blog Post "Jakarta EE has landed [5]" von Ian Robinson und Kevin Sutter zu lesen ist.

Keine Einigung in Sicht

Nachdem es zunächst so aussah, als ob es nach Oracles "Donation" an die Eclipse Foundation auch bezüglich der Verwendung der damit einhergehenden Marken- und Namensrechte zu einer sinnvollen Einigung kommen könnte, schreibt Milinkovich nun, dass genau damit leider nicht zu rechnen ist:

"It had been the mutual intention of the Eclipse Foundation and Oracle to agree to terms that would allow the evolution of the javax package namespace in Jakarta EE specifications. Unfortunately, following many months of good-faith negotiations, the Eclipse Foundation and Oracle have been unable to agree on terms of an agreement for the Eclipse Foundation community to modify the javax package namespace or to use the Java trademarks currently used in Java EE specifications. Instead, Eclipse and Oracle have agreed that the javax package namespace cannot be evolved by the Jakarta EE community. As well, Java trademarks such as the existing specification names cannot be used by Jakarta EE specifications."

Bei der Portierung der Java-EE-Sourcen ist man bei der Eclipse Foundation, nach ersten Gesprächen mit Oracle, zunächst stillschweigend davon ausgegangen, dass bestehende APIs unter dem Namensraum javax weiterverwendet und dort auch im gewissen Rahmen modifiziert werden dürfen. Neue Spezifikationen dagegen sollten unter dem neuen Namensraum jakarta eingeführt werden. Bei einem derartigen Vorgehen wäre eine schrittweise Weiterentwicklung der Plattform bei gleichzeitiger Sicherstellung der Abwärtskompatibilität bestehender Java-EE-Anwendungen problemlos möglich. Eine essenzielle Voraussetzung für die Zukunft des Enterprise-Java-Standards, bedenkt man das seit mittlerweile 20 Jahren gewachsene Ökosystem mit seinen vielen tausend Anwendungen.

Der bisherige Status quo der Verhandlung zwischen der Eclipse Foundation und Oracle aber verbietet genau das. Änderungen an APIs mit dem Namensraum javax sind nicht erlaubt. Finden Änderungen statt, muss das Package umbenannt werden – und auch die zugehörige API. Und als wäre das noch nicht genug, obliegen Spezifikation, die weiterhin auf dem javax-Namensraum basieren, den bisherigen Auflagen von Oracle, die unter anderem das Vorhandensein einer von Oracle lizenzierten Runtime vorsehen: Dazu Milinkovich:

“In addition to the above, any specifications which use the javax namespace will continue to carry the certification and container requirements which Java EE has had in the past. I.e., implementations which claim compliance with any version of the Jakarta EE specifications using the javax namespace must test on and distribute containers which embed certified Java SE implementations licensed by Oracle. These restrictions do not apply to Jakarta EE specifications which do not utilize javax, including future revisions of the platform specifications which eliminate javax.”

Laut Milinkovich haben die Verhandlungen einen Status erreicht, bei dem für beide Seiten das bestmögliche Resultat erzielt wurde. Anders formuliert ist mit weiteren Kompromissen seitens Oracle definitiv nicht zu rechnen.

Wo liegt das Problem?

Aber ist das überhaupt ein Problem? Gehen wir einmal davon aus, dass die Eclipse Foundation, wie im Fall der Portierung von Java EE 8 zu Jakarta 8, zunächst keine Änderung an den bestehenden APIs vornimmt und somit die bestehenden Strukturen – inklusive Spezifikationen und TCKs – beibehalten kann. Bliebe zunächst einmal nur das Problem mit der Runtime. Dies wiederum würde einen dedizierten Hersteller, nämlich Oracle, gegenüber anderen Herstellern bevorzugen, was wiederum gegen die Statuten der Eclipse Foundation verstößt.

Gut, mag sich jetzt der eine oder die andere denken. Man kann in Ausnahmesituationen ja durchaus auch einmal über den eigenen Schatten springen. Schließlich verdankt man Oracle ja den aktuellen Stand der Sourcen. Ganz so einfach ist es allerdings nicht. Für die Eclipse Foundation könnte das punktuelle Aufgeben der bisher vielbeschworenen Herstellerneutralität im schlimmsten Fall bedeuten, dass sie einen Teil ihrer Gemeinnützigkeit und den damit verbundenen Steuervergünstigungen verlieren würde und sich somit nicht mehr von selbst tragen könnte. Für die Organiisation ist es also nicht nur eine Frage von Marken- und Namensrechten, sondern vielmehr eine existenzielle Frage und ein entsprechender Kompromiss mit Oracle somit per Definition nicht gangbar.

Was kommt nach Jakarta EE 8?

Wie aber sähe dann die Alternative aus? Realistisch gesehen bleibt der Eclipse Foundation für alle Versionen nach Jakarta EE 8 nur die Möglichkeit, alle Packages von javax nach jakarta zu portieren. Und das so schnell wie möglich, möchte man nicht noch länger auf eine längst überfällige Weiterentwicklung der Plattform und damit einhergehender Innovationen verzichten müssen. Natürlich müssten auch alle Spezifikationen und die zugehörigen TCKs angepasst beziehungsweise neu geschrieben werden.

Für Projekte, die auf der grünen Wiese starten, wäre das sicherlich kein Problem. Anders dagegen für die vielen, vielen bestehenden Enterprise-Anwendungen, die in den letzten 20 Jahren entstanden sind. Selbst wenn man willens wäre, die notwendigen Refactorings am eigenen Code, inklusive hoffentlich vorhandener Tests, vorzunehmen, setzt dieser mit hoher Wahrscheinlichkeit auf Libraries, Frameworks und proprietären Erweiterungen von Anwendungsservern auf, die noch nicht kompatibel mit dem neuen Standard sind. Das Chaos scheint vorprogrammiert.

Macht es dann überhaupt noch Sinn am Standard festzuhalten? Welchen Mehrwert hätte dieser dann noch? Ein großes Plus wäre nach wie vor, vorausgesetzt alle Application-Server-Hersteller spielen weiter mit, die Herstellerunabhängigkeit. Es wird auch weiterhin unabhängige TCKs geben, welche die Kompatibilität der verschiedenen Implementierungen sicherstellen.

Ein weiteres, nicht zu unterschätzendes Plus stellt der Spezifikationsprozess (JESP) dar. Durch die Beteiligung unterschiedlichster Interessengruppen ist sichergestellt, dass nicht nur durch die Belange eines einzelnen Herstellers die zukünftige Entwicklung des Standards vorangetrieben wird. Ganz im Gegenteil. Nimmt man einmal die jüngste Entwicklung des Eclipse-Foundation-Projekts MicroProfile als Muster, bekommt man einen Eindruck davon, wie schnell und Community-getrieben es zukünftig vorangehen könnte.

Bleibt nach wir vor die Herausforderung der Abwärtskompatibilität. Ein sicherlich unschönes, aber nicht unlösbares Problem, wie David Blevins (Gründer und CEO von Tomitribe) in seinem Blog-Post "Jakarta EE: a new hope [6]" im Abschnitt "Backwards compability is possible" beschreibt. Die Application Server müssten lediglich das tun, was sie heute sowie schon machen und mittels Bytecode-Creation und/oder -Manipulation die alten Java-EE-Sourcen für die neue Wunderwelt Jakarta EE aufbereiten. Blevins:

"For a Jakarta EE implementation to migrate your bytecode from javax to jakarta is ‘more of the same.’ There will be some challenges, but it is ultimately how everything works anyway."

Bleibt zu hoffen, dass David Recht behält und die Application-Server-Hersteller willens sind, diesen Schritt zu gehen. Wenn ja, dann steht der Zukunft von Jakarta EE als Enterprise-Java-Standard nichts im Wege. Wenn nicht, wird Jakarta EE zukünftig lediglich eines von vielen Enteprise-Java-Frameworks sein.


URL dieses Artikels:
http://www.heise.de/-4413537

Links in diesem Artikel:
[1] https://eclipse-foundation.blog/2019/05/03/jakarta-ee-java-trademarks/
[2] https://www.heise.de/meldung/Oracle-will-Java-EE-an-die-Open-Source-Community-uebertragen-3806673.html
[3] https://www.heise.de/meldung/Jakarta-EE-Eclipse-Foundation-uebernimmt-die-Verantwortung-fuer-Enterprise-Java-4030557.html
[4] https://www.heise.de/meldung/Jakarta-EE-Goodbye-JCP-willkommen-EFSP-4193449.html
[5] https://developer.ibm.com/announcements/jakarta-ee-has-landed/
[6] https://www.tomitribe.com/blog/jakarta-ee-a-new-hope/

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 06. Mai 2019 um 08:08

c't uplink 27.2: Fritzbox-Kaufberatung, Breitbild-VR und defekte Falt-Smartphones

zurück zum Artikel

In der jüngsten Folge des c't uplink sprechen wir über Fritzboxen, eine VR-Brille mit besonders großem Sichtfeld und faltbaren Smartphones mit Mängeln.

Bei Problemen mit der Wiedergabe des Videos aktivieren Sie bitte JavaScript

Fritzboxen sind beliebt, es muss aber nicht immer das Top-Modell sein. Dušan Živadinović erklärt uns, worauf man beim Kauf achten sollte, wie Mesh-Netzwerke funktionieren und für wen sie vielleicht die Lösung für das heimische WLAN-Loch sind.

Jan-Keno Janssen hat die Pimax VR 5K ausprobiert. Die chinesische Virtual-Reality-Brille hat nicht nur ein 5K-Display sondern bietet mit 200-Grad Sichtfeld fast doppelt so viel Sichtbreite wie Oculus, Vive und Co. Ob man damit vergisst, dass man gar nicht wirklich durchs Weltall schwebt?

Außerdem sprechen wir über den Note-7-Nachfolger im Geiste: Könnte das faltbare Samsung Galaxy Fold ein ähnliches Schicksal treffen wie das akkugeplagte Note 7 und wegen technischer Probleme nie wirklich auf dem Markt kommen? Die ersten Testgeräte haben als Special-Feature nämlich ausfallende Displays.

Mit dabei: Dušan Živadinović, Johannes Börnsen, Jan-Keno Janssen und Hannes Czerulla

Die komplette Episode 27.2 zum Nachhören und Herunterladen:

Bei Problemen mit der Wiedergabe des Videos aktivieren Sie bitte JavaScript

Die c't 10/2019 [8] gibt's am Kiosk, im Browser [9] und in der c't-App [10] für iOS [11] und Android [12].

Alle früheren Episoden unseres Podcasts findet ihr unter www.ct.de/uplink [13]. ()


URL dieses Artikels:
http://www.heise.de/-4406778

Links in diesem Artikel:
[1] http://ct.de/uplink
[2] http://blog.ct.de/ctuplink/ctuplink.rss
[3] http://blog.ct.de/ctuplink/ctuplinkvideohd.rss
[4] https://itunes.apple.com/de/podcast/ct-uplink/id835717958
[5] https://itunes.apple.com/de/podcast/ct-uplink-video/id927435923?mt=2
[6] https://www.youtube.com/playlist?list=PLUoWfXKEShjdcawz_wBJVqkv0pVIakmSP
[7] https://www.facebook.com/ctuplink
[8] https://www.heise.de/select/ct/2019/10
[9] https://www.heise.de/select/ct
[10] https://www.heise.de/ct/Das-digitale-Abo-1818298.html
[11] https://itunes.apple.com/de/app/ct-magazin/id380266921
[12] https://play.google.com/store/apps/details?id=de.heise.android.ct.magazin
[13] https://www.ct.de/uplink
[14] mailto:mho@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 27. April 2019 um 07:30

Die NUMMI-Fabrik – eine Parabel über Softwareentwicklung

Von heise online

zurück zum Artikel

Softwareentwicklung ist nicht wegen der technischen Herausforderungen schwierig, sondern weil so viele Menschen daran beteiligt sind. Ein Blick über den Tellerrand zeigt, wie andere Branchen mit diesen Herausforderungen umgehen und was sie dabei gelernt haben.

Als Beispiel dient eine Geschichte über eine Autofabrik [1]. General Motors (GM) eröffnete die Fabrik 1962 als Fremont Assembly [2]. Leider erwarb sie sich schnell einen katastrophalen Ruf: Die Arbeiter sollen die schlechtesten in der gesamten US-Automobilindustrie gewesen sein. Alkohol war genauso an der Tagesordnung wie unentschuldigtes Fehlen, sodass manchmal die Produktion gar nicht anlaufen konnte. Ebenso sabotierten die Arbeiter die Produktion. Dem Management war die Perspektive der Arbeiter egal. Und natürlich ging es wie so oft in der Massenproduktion um Menge und nicht um Qualität.

Toyota-Produktionssystem

1984 wurde die gesamte Belegschaft gefeuert. GM und Toyota gründeten in der Fabrik ein Joint Venture. Natürlich musste man Arbeiter einstellen, was schwierig war. Am Ende arbeiteten dann 85 Prozent der alten GM-Belegschaft in der Fabrik. Einige von ihnen schickte Toyota nach Japan, damit sie dort das Toyota-Produktionssystem [3] erlernten. Am Ende erreichte das Werk dieselbe Produktivität und Fehlerzahl wie die Werke von Toyota in Japan und damit deutlich bessere Ergebnisse als GM.

Das Toyota-Produktionssystem orientiert sich an Werten wie kontinuierlicher Verbesserung, Respekt gegenüber Menschen und langfristigem Denken. Im NUMMI-Werk sind die Werte auch direkt umgesetzt worden: Der Fokus lag auf der Arbeit im Team und auf Qualität. Alle Mitarbeiter – egal ob sie im Management oder in der Produktion arbeiteten – trugen dieselbe Uniform, hatten dieselben Parkplätze und eine gemeinsame Cafeteria. Ebenso gab es keine Entlassungen, ein Vorschlagsprogramm und Entscheidungen im Konsens.

Jidōka

Ein wichtiger Teil des Toyota-Produktionssystems ist Jidōka [4]. Es steht für "Autonomation", eine autonome Automation oder auch "intelligente Automation" beziehungsweise. "Automation mit menschlichem Touch". Bei Anomalien stoppt die Maschine. Das Ziel ist keine vollständige Automatisierung. Dann müssten die Maschinen selber mit Anomalien umgehen können. Das ist aber kaum kosteneffizient realisierbar.

Stattdessen identifiziert der Arbeiter das Kernproblem und beseitigt es. Dazu kann er die Produktionslinie stoppen und die Hilfe der Kollegen anfordern. Produktionsstillstand kann erhebliche Kosten verursachen. Natürlich gibt es Maßnahmen, um so etwas zu vermeiden, aber die Möglichkeit zum Stoppen der Produktion zeigt eindeutig, wie wichtig für das Ziel der Qualität ist.

Wie es weiterging ...

1998 hatte GM es trotz des Joint Ventures nur in Ausnahmefällen geschafft, die Ideen des Toyota-Produktionssystems in einem anderen Werk umzusetzen. 2009 beendete GM dann das Joint Venture, und 2010 schloss Toyota schließlich die Fabrik.

Das hört sich zwar wie ein Ende an, aber kurz darauf eröffnete Tesla dort sein Werk und bis heute ist das Werk in der Hand von Tesla. Und so geht von diesem Werk heute die Elektro-Mobilitätsrevolution aus.

… und die Moral der Geschichte

Aus dieser Geschichte lassen sich mehrere Lehren für die Softwareentwicklung ableiten:

  • Basis des Toyota-Produktionsystems ist eine andere Kultur. Sie führt zu einer besseren Qualität, Produktivität und Reduktion von Lagerbeständen. Einige Autohersteller haben versucht, die Qualität direkt zu managen, und haben Ursache und Wirkung verwechselt. Die Kultur führt zum Erfolg des Toyota-Produktionssystems. Das ergibt die bessere Qualität. Für Softwareentwicklungsprozesse wie Agilität oder Continuous Delivery gilt Ähnliches: Wenn sich die Kultur ändert, ergeben sich Vorteile wie Produktivität oder Fehlerfreiheit als Folge. Ein Fokus auf Techniken verstellt diesen Blick oft.
  • Es ist schwierig, eine Kultur auf andere Organisationseinheiten zu übertragen. GM hat es trotz des Joint Venture praktisch nicht geschafft, den Erfolg in den eigenen Fabriken zu kopieren. Aber auf der anderen Seite können Personen, die vorher in einer anderen Kultur gearbeitet haben, eine neue Kultur erlernen und umsetzen. So konnte die NUMMI-Belegschaft sich von einer sehr niedriger Produktivität zu einer ausgesprochen hohen Produktivität weiterentwickeln. Prinzipiell ist es also denkbar, die Kultur eines Software-Teams grundlegend zu ändern und so die Ergebnisse zu verbessern.
  • Jidōka zeigt ein wichtiges Element des Toyota-Produktionssystems. Fehler sollen offensichtlich werden und dann vollständig beseitigt werden. Maßnahmen wie Agilität oder Continuous Delivery zielen darauf ab, möglichst oft und schnell Software und Features zu testen und in Produktion zu bringen. Dadurch werden Fehler schneller offensichtlich, die dann beseitigt werden können. Wenn also Probleme durch den Prozess offensichtlich werden, ist das ein erwartetes Ergebnis und es gibt die Möglichkeit, darauf zu reagieren und so besser zu werden.
  • Gleichzeitig zeigt Jidōka auf, dass eine perfekte Automatisierung als Ziel nicht unbedingt sinnvoll ist. Das gilt auch für Continuous Delivery. Wichtig ist aber, wie man mit Problemen bei der Automatisierung umgeht und die Probleme dann beseitigt.
  • Ebenso verdeutlicht Jidōka, welche positiven Effekte es hat, wenn jeder Mitarbeiter durch passende Maßnahmen an Zielen wie Qualität mitarbeiten kann und dabei zur Not auch die Produktion anhalten kann. Es geht dabei nicht nur darum, dass der Mitarbeiter so effektiver Probleme lösen kann. Sondern das Unternehmen drückt so auch Vertrauen in den Mitarbeiter aus, was sich positiv auf die Motivation niederschlägt. Solche Maßnahmen sind auch in der Softwareentwicklung denkbar.

Die NUMMI-Fabrik ist kein zufällig gewähltes Beispiel. Agile Softwareentwicklung orientiert sich an Lean Production und dem Toyota-Produktionssystem. Die wesentlichen Konzepte hat die Agilität aus diesem Bereich übernommen, sodass sich ein Blick auf Beispiele aus der Produktion lohnen.

tl;dr

Die NUMMI-Fabrik zeigt, dass Kultur entscheidend für den Erfolg eines Unternehmens sein kann, aber diese auch schwer zu ändern ist. Das dort praktizierte Toyota-Produktionssystem ist genauso wie agile Softwareentwicklung im Wesentlichen eine Änderung der Kultur.


URL dieses Artikels:
http://www.heise.de/-4374683

Links in diesem Artikel:
[1] https://en.wikipedia.org/wiki/NUMMI
[2] https://en.wikipedia.org/wiki/Fremont_Assembly
[3] https://de.wikipedia.org/wiki/Toyota-Produktionssystem
[4] https://de.wikipedia.org/wiki/Jid%C5%8Dka

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 15. April 2019 um 08:41

FreshRSS 1.14.2

Von Alkarex

Changelog:

  • Bug fixing (regressions introduced in 1.14.X)
    • Fix PHP 5.5- compatibility #2359
  • Bug fixing (misc.)
    • Fix minor code syntax warning in API #2362
  • Misc.
    • Add Travis check for PHP syntax #2361
  • 08. April 2019 um 23:21

FreshRSS 1.14.1

Von Alkarex

Changelog:

  • Bug fixing (regressions introduced in 1.14.0)
    • Fix load more articles when using ascending order #2314
    • Fix cron in the Ubuntu flavour of the Docker image #2319
    • Fix the use of arrow keyboard keys for shortcuts #2316
    • Fix control+click or middle-click for opening articles in a background tab #2310
    • Fix the naming of the option to unfold categories #2307
    • Fix shortcut problem when using unfolded articles #2328
    • Fix auto-hiding articles #2323
    • Fix scroll functions with Edge #2337
    • Fix drop-down menu warning #2353
    • Fix delay for individual mark-as-read actions #2332
    • Fix scroll functions in Edge #2337
  • Bug fixing (misc.)
    • Fix extensions in Windows #994
    • Fix import of empty articles #2351
    • Fix quote escaping on CLI i18n tools #2355
  • UI
    • Better handling of bad Ajax requests and fast page unload (ask confirmation) #2346
  • I18n
  • Misc.
    • Check JavaScript (jshint) in Travis continuous integration #2315
    • Add PHP 7.3 to Travis #2317
  • 07. April 2019 um 14:30

FreshRSS 1.14.0

Von Alkarex

Changelog:

  • Features
    • Filter actions feature, to auto-mark-as-read based on a search query per feed #2275
    • Improve account change when using the unsafe automatic login #2288
  • UI
    • New themes Ansum and Mapco #2245
    • Rewrite jQuery and keyboard shortcut code as native JavaScript ES6 (except for graphs on the statistics pages) #2234
    • Batch scroll-as-read for better client-side and server-side performance #2199
    • Keyboard-shortcut navigation at end of feed or category continues to the next one #2255
    • Changed jump behaviour after marking articles as read #2206
    • More reactive auto-loading of articles #2268
  • Deployment
    • New default Docker image based on Ubuntu (~3 times faster, but ~2.5 times larger) #2205
      • Using Ubuntu 18.10 with PHP 7.2.15 and Apache 2.4.34
    • Alpine version updated to Alpine 3.9 with PHP 7.2.14 and Apache 2.4.38 #2238
  • Bug fixing
    • Fix feed option for marking modified articles as unread #2200
    • Fix API HTTP Authorization case-sensitivity issue introduced in FreshRSS 1.13.1 #2233
    • Fix breaking warning in Fever API #2239
    • Fix encoding problem in Fever API #2241
    • Fix author semi-colon prefix in Fever API #2281
    • Fix the reading of the environment variable COPY_SYSLOG_TO_STDERR #2260
    • Session fix when form login + HTTP auth are used #2286
    • Fix cli/user-info.php for accounts using a version of the database older than 1.12.0 #2291
  • CLI
    • Better validation of parameters #2046
    • New option --header to cli/user-info.php #2296
  • API
    • Supported by Readably (client for Android using Fever API)
  • I18n
  • Security
    • Reworked the CSRF token interaction with the session in some edge cases #2290
    • Remove deprecated CSP child-src instruction (was already replaced by frame-src) #2250
    • Ensure entry IDs are unique and cannot be set by feeds #2273
  • Misc.
    • Remove HHMV from Travis continuous integration #2249
  • 31. März 2019 um 16:43

Sekiro: Shadows Die Twice – heute, 21 Uhr bei c't zockt im Twitch-Livestream

Von Julius Beineke

zurück zum Artikel

"Sekiro: Shadows Die Twice" entsendet Spieler*innen ins feudale Japan zu Schwertkämpfen, Mystik und Meucheleien. Der knackige Schwierigkeitsgrad treibt auch und besonders Veteranen der Vorgänger in den Wahnsinn – und wir wollen mit! Um 21 Uhr gehts auf unserem Twitch-Channel live ins Getümmel.

Der spirituelle Nachfolger der Dark-Souls- und Bloodborne-Spiele "Sekiro: Shadows Die Twice" ist frisch am 22. März erschienen. Mit Schwert, Heimlichkeit, Wurfsternen, Akrobatik und allerlei Shinobi-Spielereien tritt man gegen Samurai, Kami, Oger, Riesenschlangen und diverse weitere Feinde an – alles vor der fast immer idyllischen Kulisse einer fiktiven japanischen Provinz während der Sengoku-Ära im späten 16. Jahrhundert.

Live-Video von ctzockt auf www.twitch.tv ansehen [1]

Unser c't-zockt-Kollege Julius Beineke nimmt euch live mit in die ersten Stunden des Action-Epos – heute Abend ab 21 Uhr auf unserem offiziellen c't-zockt-Twitch-Channel [2]. Wir wünschen viel Spaß beim Zusehen und Mitfiebern – und hoffen auf eure Unterstützung live im Twitch-Chat.

Sekiro: Shadows Die Twice angespielt (0 Bilder) [3]

[4]

Die Verbindung aus rasanter Action, Schleicheinlagen, Plattforming und ein paar Rollenspielelementen zusammen mit der mystischen, tragischen Story und dem verträumten Setting funktioniert wunderbar, macht Spaß und fordert – und das mit nur ein paar wenigen Mankos. Mehr darüber ist im Sekiro-Review [5] bei Heise Online nachzulesen. ()


URL dieses Artikels:
http://www.heise.de/-4347829

Links in diesem Artikel:
[1] https://www.twitch.tv/ctzockt?tt_content=text_link&tt_medium=live_embed
[2] https://www.twitch.tv/ctzockt
[3] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4347150.html?back=4347829
[4] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4347150.html?back=4347829
[5] https://www.heise.de/meldung/Sekiro-Shadows-Die-Twice-angespielt-Meisterhaftes-Schwertspektakel-4347147.html
[6] mailto:jube@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 25. März 2019 um 16:36

Keine Silver Bullets – außer Continuous Delivery?

Von heise online

zurück zum Artikel

Eigentlich gibt es keine "Silver Bullets". Aber Continuous Delivery verspricht so viele Vorteile, dass es ein solches Silver Bullet sein könnte. Was stimmt also: Gibt es sie doch oder ist Continuous Delivery überbewertet?

Der Ausdruck "Silver Bullet" kommt von einem Paper [1] aus dem Jahr 1986 von Frederick Brooks. Dieser ist Autor des Buchs "The Mythical Man-Month", das über die Entwicklung von IBMs OS/360-Betriebssystem berichtet. Er hat dieses Projekt geleitet. Es hatte ein Budget von 5 Milliarden US-Dollar und wurde in den Sechzigern nur durch die Mondlandung in den Schatten gestellt. Das Buch enthält Erkenntnisse, die auch heute noch wichtig sind – beispielsweise dass ein Projekt zunächst langsamer wird, wenn man mehr Personen mit dem Projekt betraut, weil die Personen sich erst mal einarbeiten müssen.

Silberkugeln

Silberkugeln dienen eigentlich zur Jagd auf Werwölfe. Brooks argumentiert, dass viele IT-Projekte irgendwann zu einem Monster mutieren und wir daher Silberkugeln brauchen. Die gibt es aber nicht: Seiner Meinung nach verspricht keine einzelne Entwicklung in einem Jahrzehnt eine Größenordnung bessere Produktivität, Zuverlässigkeit oder Einfachheit. Eine Größenordnung ist ein Faktor von 10.

Brooks argumentiert, dass die technischen Komplexitätstreiber bereits eliminiert sind. Wenn aber die meiste Komplexität mittlerweile durch die Anforderungen, Designs und Tests entstehen, kann man die Komplexität nicht einfach durch einen einfachen Trick lösen. Vielversprechend findet er das Kaufen, statt irgendwas selbst zu bauen, besserer Umgang mit Anforderungen, das "Züchten" von Software durch inkrementelle Entwicklung und schließlich gute Designer.

Continuous Delivery

Continuous Delivery bezeichnet das kontinuierlich Ausliefern von Software. Es ist klar, dass durch eine höhere Deployment-Frequenz die Zeit abnimmt, bis eine Änderung in Produktion ist. Mittlerweile gibt es eine Studie [2] ("2018 State of DevOps Report"), die weitere Effekte aufzeigt. Sie unterscheidet "Elite Performer", die nach Bedarf mehrmals pro Tag deployen, und "Low Performer", die zwischen einmal pro Woche und einmal pro Monat deployen. Teams mit Quartalsreleases sind also noch nicht einmal "Low Performer.

Elite-Performer erreichen logischerweise höhere Geschwindigkeit, mit denen Änderungen in Produktion gelangen:

  • Die Deployment-Frequenz ist um den Faktor 46 höher.
  • Die Zeit, bis eine Änderung in Produktion geht, ist um den Faktor 2555 geringer.

Aber es gibt auch andere positive Effekte:


  • Die Wahrscheinlichkeit, dass Deployments fehlschlagen, ist siebenfach geringer.
  • 2604fach schnelleres Wiederanlaufen nach dem Ausfall eines Services.
  • 2/3 mehr Arbeitszeit kann für neue Features aufgewendet werden.
  • Halb so viel Arbeitszeit ist für Sicherheitsprobleme oder Defekte aufzuwenden, die von Endbenutzern gemeldet werden.
  • Man braucht nur ein Drittel der Zeit für Kunden-Support.

Also steigen Produktivität und Zuverlässigkeit. Continuous Delivery könnte demnach eine "Silberkugel" sein, obgleich es sie nach Brooks ja nicht geben dürfte. Wie kann dieser Widerspruch geklärt werden?

Doch Silberkugeln?

Eine Erklärung könnte sein, dass Brooks nicht recht hat. Zu beweisen, dass etwas nicht existiert, ist prinzipiell schwierig. Sein Paper nennt keine Belege, sondern gibt im Wesentlichen die Meinung des Autors wieder. Es ist mittlerweile 30 Jahre alt, sodass sich vielleicht mittlerweile etwas geändert hat.

Auf der anderen Seite ist Brooks sehr erfahren und eine der wichtigsten Personen in der Softwareentwicklungsszene. Also kann man das Paper nicht so ohne weiteres ignorieren.

Continuous Delivery – nur ein Hype?

Die genannte Studie könnte auch fehlerhaft sein. Hinter der Studie steht Gene Kim, der unter anderem das DevOps-Handbuch und das Buch über das Phoenix-Projekt geschrieben hat. Beides Bücher, die Continuous Delivery positiv sehen. Ein weiterer Protagonist der Studie ist Jez Humble, einer der Autoren des ersten Continuous-Delivery-Buchs. Es wäre erstaunlich, wenn diese Personen eine Studie schreiben, die zeigt, dass Continuous Delivery doch keine erheblichen Vorteile bringt.

Aber die dritte Autorin im Bunde ist die Wissenschaftlerin Dr. Nicole Forsgren. So kann man sicher sein, dass die Studie einer wissenschaftlichen Überprüfung standhält und entsprechend wissenschaftlicher Standards ausgewertet worden ist. Und schließlich kann die Studie eine große Datenbasis vorweisen: Insgesamt haben 30.000 Personen an ihr teilgenommen. Eine große Datenbasis und eine professionelle Auswertung der Daten führt eigentlich zu aussagekräftigen Ergebnissen.

Beides stimmt?

Ich glaube, dass es gar keinen Widerspruch gibt. Die Studie und Brooks haben beide recht.
Dafür gibt es mehrere Gründe:

  • Das Erhöhen der Deployment-Geschwindigkeit ist keine "einzelne Entwicklung". Durch das Beschleunigen des Deployments müssen Konfigurationsmanagement, Tests, Deployments und die Genehmigung von Änderungen automatisiert werden. Das zeigt die Studie auch auf. Oft gehen die Änderungen bis in die Architektur. Nur kleine, getrennt deploybare Einheiten wie Microservices sind realistisch mehrmals pro Tag deploybar. Höhere Deployment-Geschwindigkeit kann also auf die Herausforderungen hinweisen, die gelöst werden müssen, um noch schneller zu deployen. Aber es ist keine "einzelne Entwicklung", sondern erfordert eine Vielzahl an Maßnahmen.
  • Brooks schließt eine Verbesserung um eine Größenordnung in Produktivität, Zuverlässigkeit oder Einfachheit aus. Die Studie sieht aber "nur" eine Verbesserung von 2/3 bei Produktivität, wenn man die Arbeitszeit für neue Features als Maß dafür nutzt. Bei der Zuverlässigkeit ist es ein Faktor zwei, wenn man die Arbeitszeit betrachtet, die zum Beseitigen von Fehlern benötigt wird. Die Wahrscheinlichkeit, dass ein Deployment zu einem Fehler führt, ist um den Faktor sechs niedriger – aber auch das ist keine Größenordnung.
  • Schließlich setzt Continuous Delivery das von Brooks empfohlene "Züchten" von Software um: Software wird öfter in Produktion gebracht. Daher gehen die Teams in kleineren Schritten vor. Das begünstigt Feedbackzyklen: Ergebnisse aus der Produktion können sofort in die Entwicklung einfließen und so kann das Projekt schrittweise wachsen statt nach einem komplexen Plan fertiggestellt zu werden.

Fazit

Continuous Delivery hat tatsächlich viele deutliche Vorteile. Die Studie zeigt diese klar und sehr gut belegt auf. Das hilft dabei, die Vorteile von Continuous Delivery eindeutig darzustellen. Dennoch ist auch Continuous Delivery wohl nicht das Silver Bullet. Dennoch gehen die Vorteile von Continuous Delivery weit über das schnelle Ausliefern von Software und neuen Features hinaus. Es lohnt sich also, in diesen Bereich zu investieren, selbst wenn nicht schneller Features in Produktion gebracht werden müssen, weil auch Produktivität und Zuverlässigkeit signifikant besser werden.

tl;dr

Silver Bullets sollen Softwarentwicklung um mindestens eine Größenordnung verbessern, aber es gibt leider keine. Continuous Delivery hat dennoch nachweisbare erhebliche Vorteile auch für Zuverlässigkeit und Produktivität.


URL dieses Artikels:
http://www.heise.de/-4341288

Links in diesem Artikel:
[1] http://www.cs.nott.ac.uk/~pszcah/G51ISS/Documents/NoSilverBullet.html
[2] https://puppet.com/resources/whitepaper/state-of-devops-report

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 21. März 2019 um 07:42

Hibernate-Tipps: Entitätseigenschaften mit der @Formula-Annotation berechnen

Von heise online

zurück zum Artikel

Die Hibernate-Tipps-Serie bietet schnelle und einfache Lösungen zu verbreiteten Hibernate-Fragen. Dieses Mal geht es um die Abbildung des Rückgabewerts einer SQL-Funktion auf das Attribut einer Entität.

Frage:

Der Wert eines meiner Entity-Attribute wird durch eine SQL-Funktion berechnet. Wie kann ich das mit Hibernate abbilden?

Lösung:

Hibernates @Formula-Annotation ermöglicht es, ein SQL-Schnipsel bereitzustellen, den Hibernate ausführt, wenn es die Entität aus der Datenbank liest. Der Rückgabewert des SQL-Schnipsel wird dann auf ein schreibgeschütztes Entity-Attribut abgebildet. Dies kann vorteilhaft sein, wenn die Datenbank bereits eine komplexe Funktion bereitstellt, die auf einer großen Datenmenge arbeitet.

Das folgende, vereinfachte Beispiel verwendet die @Formula-Annotation, um das Alter eines Autors zu berechnen. Alternativ könnte dies in diesem Beispiel natürlich auch durch eine Java-Methode erfolgen:

@Entity
public class Author {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column
private LocalDate dateOfBirth;

@Formula(value = “date_part(‘year’, age(dateOfBirth))”)
private int age;

public int getAge() {
return age;
}
}

Wenn Hibernate eine Author-Entität aus der Datenbank holt, fügt es das durch die @Formular-Annotation definierte SQL-Schnipsel zur SQL-Anweisung hinzu:

05:35:15,762 DEBUG [org.hibernate.SQL] – select author0_.id as id1_0_, author0_.dateOfBirth as dateOfBi2_0_, author0_.firstName as firstNam3_0_, author0_.lastName as lastName4_0_, author0_.version as version5_0_, date_part(‘year’, age(author0_.dateOfBirth)) as formula0_ from Author author0_ where author0_.id=1

Zusammenfassung

Die @Formula-Annotation bietet eine einfache Möglichkeit, das Ergebnis eines SQL-Schnipsel auf ein Entity-Attribut abzubilden. Aber es hat auch einige Nachteile, die man beachten sollten:

  • Hibernate führt das SQL-Schnipsel für jede Author-Entität aus, die sie aus der Datenbank geladen wird. Daher ist es wichtig, diese Annotation nur für Attribute zu verwenden, die in allen Anwendungsfällen benötigt werden.
  • Die @Formula-Annotation verwendet ein natives SQL-Schnipsel. Dies kann dies Datenbankportabilität der Anwendung beeinträchtigen.

Hibernate Tips – das Buch

Mehr als 70 solcher Rezepte zu Themen wie einfache und komplexe Mappingdefinitionen, Logging, Unterstützung von Java 8, Caching sowie die statische und dynamische Erzeugung von Abfragen gibt es in meinem Buch "Hibernate Tips: More than 70 solutions to common Hibernate problems". Es ist als Taschenbuch und E-Book auf Amazon und als PDF auf hibernate-tips.com [1] erhältlich.


URL dieses Artikels:
http://www.heise.de/-4329792

Links in diesem Artikel:
[1] http://hibernate-tips.com

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 18. März 2019 um 08:38

Fünf Dinge, die man als Anfänger über JPA wissen sollte

Von heise online

zurück zum Artikel

Gute Kenntnisse über die Java Persistence API (JPA) und ihre Implementierungen sind nach wie vor eine der gefragtesten Fähigkeiten unter Java-Entwicklern. Es ist daher nicht verwunderlich, dass es viele Blogartikel, Bücher und Kurse [1] gibt, die zeigen, wie eine Persistenzschicht mit der JPA-Spezifikation implementiert werden kann.

Aber Neulinge fragen sich wahrscheinlich trotz aller Beliebtheit, warum JPA so oft verwendet wird und was man darüber wissen muss. Daher werfe ich einen Blick auf die fünf wichtigsten Dinge, die man als Entwickler über JPA wissen sollte.

1. Einfache Abbildungen erfordern kaum Annotationen

Beginnen wir mit dem Offensichtlichsten: Die JPA-Spezifikation definiert eine objektrelationale Abbildung zwischen Tabellen in einer relationalen Datenbank und Java-Klassen. Das Tolle daran ist, dass JPA diese Zuordnung sehr einfach macht. Sehr oft muss eine Klasse lediglich mit einer @Entity-Annotation versehen werden. Alle ihre Attribute werden dann automatisch auf gleichnamige Datenbankspalten abgebildet.

Hier ist ein Beispiel für ein solches Basis-Mapping:

@Entity
public class Professor {

@Id
private Long id;

private String firstName;

private String lastName;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public void setId(Long id) {
this.id = id;
}

public Long getId() {
return id;
}
}

Die Professor-Klasse wird durch JPA auf eine Datenbanktabelle mit dem Namen professor und den Spalten id, firstname und lastname abgebildet. Ich erläutere die Abbildung dieser Klasse im Detail in der auf YouTube verfügbaren Beispiellektion meines Kurses "JPA for Beginners [2]":

Und man kann nicht nur einfache Attribute auf Datenbankspalten abbilden, sondern auch Assoziationen zwischen den Entitäten modellieren. Auf diese Weise können die Fremdschlüsselspalten und Beziehungstabellen des Tabellenmodells als Entitätsattribute mit Getter- und Setter-Methoden dargestellt werden. Diese Attribute können dann wie jedes andere Entitätsattribut verwendet werden. Die verwendete JPA-Implementierung stellt dabei sicher, dass die erforderlichen Datensätze entweder während der Initialisierung der Entität oder bei der erstmaligen Verwendung geladen werden.

Das folgende Beispiel zeigt die Abbildung einer typischen Viele-zu-Eins-Beziehung zwischen der professor- und der course-Tabelle. Das Attribut der Professor-Klasse modelliert die Beziehung, und die JPA-Implementierung sorgt dafür, dass die erforderlichen Lese- und Schreiboperationen durchgeführt werden:

@Entity
public class Course {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "course_generator")
@SequenceGenerator(name = "course_generator", sequenceName = "course_seq")
private Long id;

private String name;

private LocalDate startDate;

private LocalDate endDate;

@ManyToOne
private Professor professor;

...
}

2. JPA erfordert eine Implementierung

JPA ist nur eine Spezifikation, die eine Reihe von Schnittstellen und deren Funktionen definiert. Das bedeutet, dass man die Spezifikation zur Implementierung Ihrer Anwendung verwenden kann, aber das zum Ausführen eine Implementierung hinzugefügt werden muss. Zwei bekannte JPA-Implementierungen sind EclipseLink, die Referenzimplementierung der Spezifikation, und Hibernate, die wahrscheinlich beliebteste JPA-Implementierung.

3. JPA führt Abstraktionen und Indirektionen ein

Ich habe zu Beginn dieses Artikels erklärt, dass JPA Java-Klassen auf Datenbanktabellen abbildet und dies sogar Beziehungen zwischen diesen Klassen beinhaltet. Diese Abbildung führt offensichtlich zu einer Abstraktion. Der Abstraktionsgrad zwischen einem einfachen Attribut und einer Datenbankspalte mag eher gering sein, ist aber bei Beziehungen deutlich höher. Die JPA-Implementierung muss dann nicht nur die Typkonvertierung zwischen dem JDBC-Typ der Datenbankspalte und dem Java-Typ des Entitätsattributs durchführen, sondern auch zusätzliche Abfragen verwalten, um die zugehörigen Datensätze abzurufen.

Aus diesem Grund ist es äußerst wichtig, dass jeder Entwickler das Mapping und seine Auswirkungen genau versteht. Andernfalls wird die JPA-Implementierung diese Beziehungen ineffizient behandeln, und die Anwendung wird unter schwerwiegenden Performanzproblemen leiden. Deshalb beschäftige ich mich in vier Lektionen meines "JPA for Beginners Online Training" [3] mit den Abbildungen verschiedener Beziehungstypen [4] und deren, als Fetching bezeichneten Ladeverhalten.

Neben der Abstraktion durch die Attributszuordnungen löst JPA auch die erforderlichen Einfüge-, Aktualisierungs- und Entfernungsoperationen auf Basis eines komplexen Lebenszyklusmodells aus. Das Gute daran ist, dass für diese Operationen keine SQL-Anweisungen geschrieben werden müssen. Aber gleichzeitig verliert man dadurch die Kontrolle über die SQL-Anweisung und den Zeitpunkt ihrer Ausführung.

Die automatische Erstellung und Ausführung von SQL-Anweisungen macht es sehr einfach, die Geschäftslogik zu implementieren, und verbessert die Entwicklerproduktivität. Es macht es aber auch schwierig vorherzusagen, wann welche SQL-Anweisungen ausgeführt wird. Daher ist ein fundiertes Verständnis des Lebenszyklusmodells und dessen Auswirkungen auf die Ausführung von SQL-Anweisungen erforderlich.

4. Man muss trotzdem relationale Tabellenmodelle verstehen

JPA abstrahiert den Datenbankzugriff und verbirgt ihn hinter einer Reihe von Annotationen und Schnittstellen. Das bedeutet aber nicht, dass man die Datenbank ignorieren könnte. Auch wenn man nicht direkt mit auf einem Tabellenmodell arbeitet, müssen dennoch die Möglichkeiten und Grenzen von relationalen Tabellenmodellen berücksichtigt werden. Tut man dies nicht, führt dies früher oder später zu Performanzproblemen [5].

Des Weiteren sollte man darauf achten, dass die Entitäten so ähnlich wie möglich zu den abgebildeten Datenbanktabellen sind. Dadurch wird sichergestellt, dass die JPA-Implementierung ein schnelles und effizientes objektrelationales Mapping zur Verfügung stellen kann.

5. Man muss immer noch SQL lesen können

Es muss außerdem berücksichtigt werden, dass die Datenbank weiterhin SQL-Anweisungen ausführt. Durch die Verwendung von JPA müssen viele dieser Anweisungen nicht mehr selbst geschrieben werden, aber man sollte trotzdem in der Lage sein, dies zu lesen und zu verstehen. Dies ist notwendig, um die Interaktion der JPA-Implementierung mit der Datenbank zu verstehen und eine effiziente Datenbankanbindung zu realisieren.

Um die ausgeführten SQL-Anweisungen überprüfen zu können, müssen diese von der JPA-Implementierung zuerst protokolliert werden. Die erforderliche Konfiguration ist abhängig von der jeweiligen JPA-Implementierung. Im folgenden Beispiel zeige ich eine Konfiguration für Hibernate [6]:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n

log4j.rootLogger=info, stdout
# basic log level for all messages
log4j.logger.org.hibernate=info

# SQL statements and parameters
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type.descriptor.sql=trace

Mit dieser Konfiguration schreibt Hibernate alle ausgeführten SQL INSERT-, UPDATE- und DELETE-Anweisungen in die Logdatei. So kann man genau sehen, wann und welche Anweisungen Hibernate ausgeführt hat.

19:13:35,772 DEBUG [org.hibernate.SQL] - 
select
professor0_.id as id1_1_0_,
professor0_.firstName as firstNam2_1_0_,
professor0_.lastName as lastName3_1_0_
from
Professor professor0_
where
professor0_.id=?
19:13:35,773 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [BIGINT] -[1]
19:13:35,774 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([firstNam2_1_0_] : [VARCHAR]) - [Jane]
19:13:35,774 TRACE [org.hibernate.type.descriptor.sql.BasicExtractor] - extracted value ([lastName3_1_0_] : [VARCHAR]) - [Doe]
19:13:35,775 DEBUG [org.hibernate.SQL] -
update
Course
set
endDate=?,
name=?,
professor_id=?,
startDate=?
where
id=?
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [DATE] - [2019-05-31]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [2] as [VARCHAR] - [Software Development 1]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [3] as [BIGINT] - [1]
19:13:35,776 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [4] as [DATE] - [2018-08-15]
19:13:35,777 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [5] as [BIGINT] - [1]

Mehr zu JPA in meinem Kurs

Auf den ersten Blick erscheint es oft so, als würde man mit JPA nur ein paar wenige Annotationen benötigen um eine vollständige Persistenzschicht zu implementieren. Während der praktischen Umsetzung stellt sich dann aber schnell heraus, dass die Verwendung der Spezifikation deutlich komplexer ist als erwartet und ein gutes Verständnis der grundlegenden Konzept erfordert.

Mit meinem Onlinekurs "JPA for Beginners [7]" biete ich eine einfache und schnelle Möglichkeit diese Kenntnisse zu erlernen. Mit kurzen Videolektionen und dazu passenden Aufgaben erlernen die Teilnehmer innerhalb kurzer Zeit, eine Persistenzschicht auf Basis der JPA-Spezifikation zu erstellen und dabei häufig auftretende Fehler zu vermeiden.

Zur Einführung der zweiten,. überarbeiteten Version des Kurses gibt es diesen noch bis zum 15 März zum reduzierten Preis auf https://thoughts-on-java.org/jpa-for-beginners/ [8].


URL dieses Artikels:
http://www.heise.de/-4329959

Links in diesem Artikel:
[1] https://thoughts-on-java.org/jpa-for-beginners/
[2] https://thoughts-on-java.org/jpa-for-beginners/
[3] https://thoughts-on-java.org/jpa-for-beginners/
[4] https://www.thoughts-on-java.org/ultimate-guide-association-mappings-jpa-hibernate/
[5] http://www.thoughts-on-java.org/tips-to-boost-your-hibernate-performance/
[6] http://www.thoughts-on-java.org/hibernate-logging-guide
[7] https://thoughts-on-java.org/jpa-for-beginners/
[8] https://thoughts-on-java.org/jpa-for-beginners/

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 11. März 2019 um 07:53

c't zockt LIVE ab 17 Uhr: Apex Legends

Von Patrick Bellmer

zurück zum Artikel

Mit Apex Legend versucht auch EA, an den Erfolg von Fortnite und Co. anzuknüpfen. Ab 17 Uhr trifft sich das c’t-zockt-Team im Livestream zum Überlebenskampf.

Spätestens seit dem Start von Playerunknown’s Battlegrounds (PUBG) [1] und Fortnite vor zwei knapp Jahren ist Battle Royale in aller (Spieler-)Munde. Das Prinzip ist schnell erklärt: Dutzende Spieler messen sich in einem großen, sich aber stetig verkleinernden Kampfgebiet und ringen – je nach Spiel – allein oder im Team um den Sieg. EA ergänzt das mit eigenen Ansätzen, um sich von der Konkurrenz abzusetzen. Und das nicht ohne Erfolg: Bereits nach einer Woche konnte man 25 Millionen Spieler melden [2].

Der erste große Unterschied zwischen Apex Legends, PUBG und Fortnite ist die Begrenzung auf Dreierteams sowie die Wahl eines Charakters. Letzteres rückt das Spiel in die Nähe von Blizzards Overwatch; auch dort spielt die Charakterwahl innerhalb eines Teams eine große Rolle. Mit der traditionellen Unterteilung in Charakterklassen nimmt Apex Legends es nicht ganz so genau. Schließlich kann auch die Heilerin ordentlich Schaden austeilen. Aber auch beim Gameplay versucht EA es mit eigenen Akzenten. Wildes durch die Gegend hüpfen wie in Fortnite bringt hier ebenso wenig Erfolg wie minutenlanges Verharren wie in PUBG.

c't zockt LIVE Apex Legends am Donnerstag, 21. Februar 2019 ab 17 Uhr.

Umstellen müssen sich PUBG- und Fortnite-Spieler, wenn es um die Ausrüstung geht. Denn anders als in den beiden bekannten Battle-Royale-Titeln geht Apex Legends vergleichsweise sparsam mit Waffen und sonstigen Gegenständen um. Welchen Stellenwert Teamplay einnimmt, sieht man an der Möglichkeit, gefallene Team-Mitglieder wiederzubeleben.

Apex Legends angespielt (0 Bilder) [3]

[4]

Entwickelt wurde Apex Legends von den Titanfall-Machern Respawn Entertainment. Das weckte bei Fans der Shooter-Reihe zunächst die Hoffnung, dass Mechs und Walljumps essentieller Gameplay-Bestandteil sein werden. Beides fehlt, dennoch ist Bewegung ein wichtiger Faktor im Gefecht. Gleiches gilt für die Spezialfähigkeiten der Charaktere. So kann die Sanitäterin Lifeline eine Heildrohne starten, ein Carepaket anfordern und Teammitglieder schneller wiederbeleben. Bloodhound hingegen übernimmt die Rolle des Aufklärers, der Gegnerspuren erkennt, per Radar den Standort von Gegnern bestimmen und zeitweise schneller laufen kann.

Free-2-Play mit Mikrotransaktionen

Voraussetzung für das Spielen von Apex Legends ist ein EA-Konto. Auf Windows-PCs wird zusätzlich der Origin-Launcher benötigt, Xbox-One- und Playstation-4-Spieler benötigen das jeweilige Online-Abo. Genauso wie Fortnite ist der Titel selbst kostenlos, für die Finanzierung wird auf Mikrotransaktionen und Loot-Boxen zurückgegriffen. Angeboten werden allerdings kosmetische Items, die keine spielerischen Auswirkungen haben. Die meisten davon lassen sich aber auch durch erspielbare In-Game-Währung erwerben. Wie sich das c’t-zockt-Team in Apex Legends schlägt, zeigt sich heute ab 17 Uhr im Livestream auf YouTube [5] und Twitch [6]. ()


URL dieses Artikels:
http://www.heise.de/-4313309

Links in diesem Artikel:
[1] https://www.heise.de/ct/artikel/c-t-zockt-Spiele-Review-Playerunknown-s-Battlegrounds-3796401.html
[2] https://www.heise.de/meldung/25-Millionen-Spieler-probieren-Apex-Legends-aus-4305454.html
[3] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4309239.html?back=4313309
[4] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4309239.html?back=4313309
[5] https://www.youtube.com/watch?v=n9hr4mdWlRM
[6] https://www.twitch.tv/ctzockt
[7] mailto:pbe@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 21. Februar 2019 um 06:30

39 Days To Mars: Charmantes Steampunk-Adventure

Von Liane M. Dubowy

zurück zum Artikel

Im skurrilen 2D-Indie-Adventure "39 Days To Mars" starten Sie mit zwei verschrobenen Forschern des 19. Jahrhunderts und einem dampfbetriebenen Luftschiff auf eine Forschungsreise zum Mars.

Wie auf Pergament gezeichnet wirkt dieses hübsche 2D-Indie-Adventure mit Steampunk-Flair. Tee und Scones sind in "39 Days To Mars" von genauso großer Bedeutung wie die Lösung vieler Rätsel.

Sir Albert Wickes und der ehrenwerte Mr. Clarence Baxter beschließen im Jahr 1876, mit der klapprigen HMS Fearful zum Mars aufzubrechen. Die Forscher sind jedoch alles andere als trainierte Astronauten, daher muss man die beiden schrulligen Engländer mit perfekt zubereitetem Tee und passend belegten Scones bei Laune halten. Das dampfbetriebene Fluggefährt droht derweil ständig auseinanderzufallen.

Am besten spielt sich das skurrile 2D-Koop-Adventure zu zweit, zum Beispiel mit Controller an einem großen Bildschirm. Aber auch mit Tastatur und Maus lässt es sich bedienen. Ist mal kein Spielpartner zur Hand, kann eine vom Spiel per KI gesteuerte Katze einspringen. Weil zum Lösen der meisten Rätsel ein zweites Paar Hände gebraucht wird, muss man dann allerdings beide gleichzeitig steuern – einmal mit der Tastatur und einmal mit der Maus. Das kann ganz schön mühsam sein.

39 Days To Mars (0 Bilder) [1]

[2]

Erfolgreicher Kickstarter

"39 Days To Mars" ist im Jahr 2014 erfolgreich mit einer Kickstarter-Kampagne [3] finanziert worden. Mittlerweile wurde das Spiel von Philip Buchanan in verschiedene Sprachen übersetzt, darunter auch Deutsch. Allerdings gilt das nur für die Sprechblasen, die Stimmen bleiben auf Englisch. Das ist auch gut so, denn ohne den britischen Akzent würde dem Spiel einiges verloren gehen.

Fazit

39 Days To Mars ist kein hektisches Spiel. Es ist mit beruhigender Klaviermusik unterlegt, die beiden Charaktere sind witzig und die Rätsel abwechslungsreich. Allerdings ist die Bedienung ein wenig umständlich und die Zubereitung von Scones und Tee nach Geschmack von Albert und Clarence erfordert viel Geduld.

"39 Days To Mars" ist für Linux, macOS und Windows erhältlich auf Steam [4] (12,50 Euro) und Itch.io [5] (15 US-Dollar, ca. 13,20 Euro, Steam-Key und Download). Für unser Review haben wir die Linux-Version angespielt. Versionen für Xbox One und Nintendo Switch sind in Arbeit. ()


URL dieses Artikels:
http://www.heise.de/-4286929

Links in diesem Artikel:
[1] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4287096.html?back=4286929
[2] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4287096.html?back=4286929
[3] https://www.kickstarter.com/projects/philipbuchanan/39-days-to-mars
[4] https://store.steampowered.com/app/504920/
[5] https://its-anecdotal.itch.io/39-days-to-mars
[6] mailto:lmd@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 31. Januar 2019 um 06:30

14 YouTube-Kanäle die Du 2019 nicht verpassen solltest

Von heise online

zurück zum Artikel

Anfang 2018 stieß der Vorgänger dieses Beitrags [1] auf reges Interesse. Es scheint, dass ich nicht der Einzige bin, der sich gerne gute Vorträge über Java auf YouTube anschaut. Es ist eine der einfachsten und komfortabelsten Möglichkeiten, von einigen der besten unserer Branche zu lernen.

Aus diesem Grund habe ich mich entschieden, eine aktualisierte Version dieses Artikels mit meinen empfohlenen YouTube-Kanälen für 2019 zu veröffentlichen. Hier ist eine unsortierte Liste meiner Lieblingskanäle.

Empfohlene Kanäle im Jahr 2019

1. Java [2]

Der Java-Kanal von Oracle war eine meiner letztjährigen Empfehlungen, und er ist immer noch ein großartiger Kanal für alle, die sich für das Java-Ökosystem interessieren. Hier findest Du Vorträge von der CodeOne sowie vom JVM Language Summit und Interviews mit bekannten Größen aus der Java-Community.

2. Thoughts on Java [3]

Da Du bereits meine empfohlene Liste von YouTube-Kanälen liest, kann ich mir natürlich nicht die Chance entgehen lassen meinen eigenen Kanal zu bewerben. Jede Woche veröffentliche ich zwei neue Videos über JPA, Hibernate und verwandte Persistenztechnologien. Wenn Du Deine Daten in einer relationalen Datenbank speicherst, solltest Du diese Videos nicht verpassen.

3. Docker [4]

Wenn Du Deine Anwendungen in einer zeitgemäßen Umgebung bereitstellst, sind Container inzwischen nicht mehr weg zu denken. Du solltest also mindestens einem Kanal folgen, der sich auf diese Kerntechnologie konzentriert. Für mich ist das der Docker-Kanal mit aufgezeichneten Webinaren und Vorträgen von der DockerCon.

4. Devoxx [5]

Der Devoxx-Kanal ist ideal für alle Konferenzliebhaber. Hier gibt es regelmäßig neue Vorträge von den Devoxx- und Voxxed Days-Konferenzen. Seien wir ehrlich, das Ansehen von aufgezeichneten Konferenzvorträgen von zu Hause oder Deinem Büro ist nicht so gut wie die Teilnahme an der Konferenz. Aber es ist viel bequemer und gibt Dir freien Zugang zu einigen der interessantesten Vorträge.

5. vJUG [6]

Java User Groups bieten eine ideale Möglichkeit, um sich mit gleichgesinnten Entwicklern zu treffen und mehr über die Sprache, populäre Frameworks und Softwareentwicklung im Allgemeinen zu erfahren. Die virtuelle Java User Group (vJUG) ist wahrscheinlich der komfortabelste Weg, um regelmäßig an User Group Meetings teilzunehmen. Das Team überträgt Webinare mit einigen der besten Java-Experten.

6. Nicolai Parlog(CodeFx) [7]

Wenn Du Dich für das Java Module System oder die neuesten Features der Java-Sprache interessierst, kennst Du wahrscheinlich Nicolai und seinen Blog codefx.org [8]. Seit neustem hat er auch einen YouTube-Kanal. In seinen Videos gelingt es ihm komplexe Themen verständlich und unterhaltsam zu erklären.

7. SouJava [9]

Die brasilianische Organisation SouJava bietet auf ihrem Kanal eine Mischung aus Interviews und Webinaren über Java und Jakarta EE.

8. NightHacking [10]

Du hast vielleicht nicht immer die Zeit, Dir ein einstündiges Webinar oder einen Konferenzvortrag anzusehen. In diesen Fällen könnte ein kurzes Interview oder Panel besser passen. Diese findest du auf dem NightHacking-Kanal.

9. SpringDeveloper [11]

Wenn Du mit Spring arbeitest, kennst Du wahrscheinlich bereits den Spring-Developer-Kanal. Das Team von Pivotal veröffentlicht dort viele aufgezeichnete Konferenzvorträge, Webinare und Tutorials über Spring.

10. JetBrainsTV [12]

Du kennst wahrscheinlich JetBrains, das Unternehmen, das für die IntelliJ IDE und die Programmiersprache Kotlin verantwortlich ist. Sie haben auch einen YouTube-Kanal, auf dem sie Vorträge von der KotlinConf, Webinare zu verschiedenen Themen der Softwareentwicklung und Tutorials zu ihren Tools anbieten.

11. Amazon Web Services [13]

Wenn Du Amazon Web Services nutzt oder Dich nur für Cloud-Technologien im Allgemeinen interessierst, solltest Du einen Blick auf den Amazon-Web-Services-Kanal werfen. Ich ignoriere die meisten ihrer Werbe- und Support-Videos, aber ich habe mir bereits einige interessante Vorträge der AWS:reinvent und des AWS Summit gesehen.

12. InfoQ [14]

Der InfoQ-Kanal bietet viele interessante Vorträge der QCon-Konferenzen zu verschiedenen Themen der Architektur und Softwareentwicklung.

13. SebastianDaschner [15]

Sebastian hat in 2018 nur wenige Videos veröffentlicht und ich habe mich gefragt, ob ich seinen Kanal noch in diese Liste aufnehmen sollte. Aber am Ende überzeugten mich die Qualität seiner Inhalte und sein Fokus auf die moderne MicroProfile- und Jakarta EE-Entwicklung. Wenn Du Jakarta EE oder Eclipse MicroProfile verwendest, solltest Du seine Videos nicht verpassen.

14. GOTO Conferences [16]

GOTO Conferences ist eine weitere beliebte Konferenzreihe, die ihre Vorträge aufzeichnet und auf YouTube bereitstellt.

Welche Kanäle schaust Du?

Das waren meine Empfehlungen für 2019. Welche Kanäle hast Du in den letzten Monaten gesehen? Welche kannst Du empfehlen?


URL dieses Artikels:
http://www.heise.de/-4288840

Links in diesem Artikel:
[1] https://www.heise.de/developer/artikel/12-YouTube-Kanaele-die-du-2018-nicht-verpassen-solltest-3937979.html
[2] https://www.youtube.com/user/java
[3] https://www.youtube.com/c/thoughtsonjava
[4] https://www.youtube.com/user/dockerrun
[5] https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg
[6] https://www.youtube.com/user/virtualJUG
[7] https://www.youtube.com/channel/UCngKKOnBxYtLAV8pgUBNDng
[8] http://blog.codefx.org/
[9] https://www.youtube.com/channel/UCH0qj1HFZ9jy0w87YfMSA7w
[10] https://www.youtube.com/channel/UCT0bL2CQIk1eANeXk57mxaA
[11] https://www.youtube.com/user/SpringSourceDev
[12] https://www.youtube.com/user/JetBrainsTV
[13] https://www.youtube.com/user/AmazonWebServices
[14] https://www.youtube.com/user/MarakanaTechTV
[15] https://www.youtube.com/channel/UCG21GE2Go3vkj7mrs675ysA
[16] https://www.youtube.com/user/GotoConferences

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 29. Januar 2019 um 07:30

FreshRSS 1.13.1

Von Alkarex

Changelog:

  • Features
    • Include articles with custom labels during export #2196
    • Export/import articles read/unread state #2226
    • Import FeedBin, and more robust general import #2228
  • Bug fixing
    • Fix missing HTTP X-Forwarded-Prefix in cookie path behind a reverse-proxy #2201
  • Deployment
    • Docker improvements #2202
      • Performance: Hard-include Apache .htaccess to avoid having to scan for changes in those files
      • Performance: Disable unused Apache security check of symlinks
      • Performance: Disable unused Apache modules
      • Add option to mount custom .htaccess for HTTP authentication
      • Docker logs gets PHP syslog messages (e.g. from cron job and when fetching external content)
    • New environment variable COPY_SYSLOG_TO_STDERR or in constants.local.php to copy PHP syslog messages to STDERR #2213
    • New TZ timezone environment variable #2153
    • Run Docker cron job with Apache user instead of root #2208
    • Accept HTTP header X-WebAuth-User for delegated HTTP Authentication #2204
  • Extensions
    • Trigger a freshrss:openArticle JavaScript event #2222
  • API
    • Automatic test of API configuration #2207
    • Performance + compatibility: Use Apache SetEnvIf module if available and fall-back to RewriteRule #2202
  • Security
    • Fixes when HTTP user does not exist in FreshRSS #2204
  • I18n
  • Accessibility
    • Remove alt in logo #2209
  • 26. Januar 2019 um 16:05

c't zockt Spiele-Review: kNOW! – Das immer aktuelle Quiz

Von Julius Beineke

zurück zum Artikel

Beim Brettspiel kNOW! von Ravensburger geht's um aktuelles Wissen. Der Google Assistant macht mit und stellt Fragen und Aufgaben zu Allgemeinwissen und Kreativität – und checkt, ob Antworten hier und jetzt korrekt sind.

Ein Mix aus Trivial Pursuit, Tabu & Co., immer auf aktuellem Stand. Das verspricht das Wissensspiel kNOW! von Ravensburger. Das Brettspiel für drei bis sechs Spielende bringt in den vier Kategorien Wissen, Intuition, Kreativität und Fun insgesamt zwölf verschiedene Quizformen und Minispiele mit.

Grundlagen: Quizzen im Kreis

Im Vergleich zu anderen Quizklassikern sind die rund 1500 Fragen nicht viel. Der Clou: Der Google Assistant ist als Spielhelfer und Quizmaster im Smartphone oder Lautsprecher stets mit dabei. Viele Aufgaben sind so konzipiert, dass die richtige Lösung von Spielzeit und Ort abhängt und sich so mit der Zeit verändern kann. Google löst die Rätsel dann auf.

Viele der Quizaufgaben lassen sich nur mit aktivem Google Assistant spielen, andere auch offline, wenn man möchte. Ein On-/Offline-Symbol markiert die Spielkarten entsprechend. Offline-Fragen sind üblicherweise zeitlos im Vergleich zu den kontextabhängigen. Die korrekten Antworten stehen in diesem Fall direkt mit auf der Karte.

Nacheinander übernehmen Spielende die Quizmaster-Rolle. Er oder sie zieht eine Karte passend zum Feld, auf dem die eigene Spielfigur steht, stellt die Frage oder Aufgabe und interagiert mit dem Google Assistant. Alle anderen versuchen, die Frage am schnellsten oder kreativsten zu beantworten oder bei Minispielen zu punkten und so die eigene Figur mehrere Felder vorwärts zu bewegen – wer das Spielbrett zuerst umrundet hat, gewinnt.

Spiele-Review: kNOW! – Das immer aktuelle Quiz

Abwechslungsreiche Spielkategorien

Das einzige Spiel der Kategorie Wissen ist "Schnellerwisser" – das klassische Quiz: Wer die Antwort weiß, haut schnell auf den beiliegenden Buzzer und antwortet hoffentlich richtig. Hier sind die Fragen oft abhängig von Zeit und Kontext – etwa "In wie vielen Filmen hat Jennifer Lawrence mitgespielt?".

Auf Intuition-Karten sind "Let's Schätz" und "Toptreffer" verortet. Schätzen muss man beispielsweise, wie lange man mit dem Auto vom Spielort nach Ravensburg braucht. Bei "Toptreffer" gibt der Google Assistant ein Wort vor, das die Spielenden mit einem anderen zu einem Begriff ergänzen und im Geheimen notieren müssen. Aus "Baum" wird also etwa "Baumhaus" oder "Baumarkt". Reihum fragt man Google dann nach den Suchmaschinentreffern für den Begriff – wer die meisten Ergebnisse hat, punktet.

Bei "Gute Frage" und "Dreierlei" der Kategorie Kreativität muss man wiederum den Google Assistant dazu bringen, bestimmte Worte auszuspucken. "Gute Frage" ähnelt Tabu – man muss Google eine Frage stellen, die den auf der Karte gesuchten Begriff als Antwort hat, darf diesen selbst jedoch nicht nennen. Bei Dreierlei sind beispielsweise bekannte Songs der Beatles gesucht. Hat man möglichst viele notiert, fragt man Google nach den drei Toptreffern und rückt pro richtiger Antwort ein Feld vor.

Auf Fun-Karten finden sich kurzweilige Minispiele. Bei "Summsalabim" gilt es, gesummte Lieder zu erkennen. Bei "Stolperfalle" muss man dem Assistant Zungenbrecher fehlerfrei nachsprechen, bei "Phrasendrescher" Redewendungen vervollständigen. Bei "Quiz Ungewiss" tippt man auf eine Frage Antwort A, B oder C, bei "Ton für Ton" spielt der Google Assistant zwei Geräusche vor, aus denen man einen gesuchten Begriff erraten muss. Quaken und Streichinstrumente ergeben beispielsweise "Froschkonzert". "Sekunde noch" erfordert Timing und Schnelligkeit, "Nice Dice" eher Würfelglück.

Wie sich Redakteure im Test des Quiz schlagen, zeigt das Video.

Google als Quizmaster

Bei beispielsweise "Quiz Ungewiss" oder "Ton für Ton" spricht man Google als "Professor Know" an – Anweisungen dazu stehen auf den jeweiligen Karten. Besonders bei "Toptreffer" fällt auf, dass der Fundus an Begriffen und Aufgaben, den der Professor zur Verfügung hat, noch recht beschränkt ist.

Ansonsten wird schnell deutlich, dass man besonders bei "Gute Frage" und "Schnellerwisser" etwas Finesse im Umgang mit Sprachassistenten braucht, um dem Google Assistant die gesuchten Begriffe und Antworten aus der Nase zu kitzeln. Unbefriedigend, wenn Google manchmal nur unkommentiert Wikipedia-Seiten ausspuckt.

Ravenburger kNOW! (5 Bilder) [1]

[2]
Um kNOW! zu spielen, braucht man Stift und Zettel, den Google Assistant und gutes Allgemeinwissen. Fragen und andere Aufgaben kommen auf Karten in vier Kategorien daher: Grün für Wissen, Blau für Intuition, Gelb für Kreativität und Rot für Fun. Dann wird um die Wette gequizzt.

Der Google Assistant ist so fehlbar wie Google selbst. So beharrte er im Test darauf, dass der originale "Krieg der Sterne"-Film im Februar 1978 erschienen sei. Dass dies das Release-Datum für Deutschland, nicht die Ersterscheinung für das Ursprungsland USA war, wollte er auch bei gezielteren Fragen – nämlich nach dem Release in den USA – nicht einsehen. Grund dafür dürfte der Standort des verknüpften Gerätes und Google-Kontos sein.

Der Google Home Mini liegt der limitierten Edition von kNOW! bei und ist in diesem Bundle ziemlich preiswert. Es geht allerdings auch einfach mit einem Google-Assistant-fähigen Smartphone. Eine zusätzliche App braucht es dazu nicht – "Professor Know" weiß Bescheid und erklärt auch die Regeln der einzelnen Spiele.

Fazit: Google muss noch lernen

kNOW! zeigt sich als ein kurzweiliges Vergnügen für Familien- oder Partyabende, am besten in größerer Runde. Der Mix aus spaßigen Minispielen und oft knackig schweren Fragen, die sich nur durch tagesaktuelles Allgemeinwissen beantworten lassen, sorgt für Spielspaß.

Wenn Google sich immer mal wieder verschluckt, hemmt das, wenn auch nicht zu schlimm den Spielfluss. Wie gut kNOW! zukünftig noch wird und ob es dem Immer-Aktuell-Anspruch gerecht wird, hängt maßgeblich von den Fähigkeiten des Google Assistant ab. ()

Wie sich Redakteure im Test des Quiz schlagen, zeigt das Video.

URL dieses Artikels:
http://www.heise.de/-4282413

Links in diesem Artikel:
[1] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4278396.html?back=4282413
[2] https://www.heise.de/ct/bilderstrecke/bilderstrecke_4278396.html?back=4282413
[3] mailto:jube@heise.de

Copyright © 2019 Heise Medien

Let's block ads! (Why?)

  • 24. Januar 2019 um 06:30
❌