X-Ploration: Data Mining und Sentimentanalyse mit Hugging Face

Autor: Oguzhan-Burak Bozkurt


Durch den kontinuierlichen und raschen Fortschritt in jüngster Zeit auf den Gebieten von Big Data und KI-Technologien sind heutzutage insbesondere Teilbereiche des Informationsmanagements gefragter als je zuvor. Die Rolle des Informationsmanagers und Data Scientists besteht darin, Methoden zur Erfassung und Verarbeitung von Informationen aus unterschiedlichen Datenquellen anzuwenden. Zudem ist er befähigt, Entscheidungen darüber zu treffen, welche Verarbeitungsprozesse zur gezielten Knowledge Discovery aus umfangreichen Datensätzen geeignet sind. Hierbei kommt Data Mining ins Spiel, eine Methode, die die systematische Extraktion relevanter Informationen und Erkenntnisse aus großen Datenmengen umfasst.

In diesem Blogbeitrag werden wir tiefer in das Thema eintauchen und uns einem von vielen Verfahren des Data Mining, genauer der Sentimentanalyse im Text Mining, praxisnah annähern. Dabei bin ich der Ansicht, dass ein tieferes Verständnis erreicht wird, wenn das theoretisch Gelernte eigenständig umgesetzt werden kann, anstatt lediglich neue Buzzwörter kennenzulernen. Ziel ist eine Sentimentanalyse zu Beiträgen auf der Social Media Plattform X (ehemals Twitter) mit Verfahren aus dem Machine Learning bzw. einem passenden Modell aus Hugging Face umzusetzen.

Ihr könnt euch in die Hintergründe einlesen oder direkt zum Coden überspringen.

  • Einführung: Data Mining ⛏️
  • ML-Based Text Mining 🤖
  • In my feelings mit Hugging Face 🤗
  • Let’s build! Sentimentanalyse mit Python 🐍

  • Einführung: Data Mining ⛏️

    Data Mining umfasst die Extraktion von relevanten Informationen und Erkenntnissen aus umfangreichen Datensammlungen. Ähnlich wird auch der Begriff „Knowledge Discovery in Databases“ (KDD) verwendet. Die Hauptaufgabe besteht darin, Verhaltensmuster und Prognosen aus den Daten zu identifizieren, um darauf basierend Trends zu erkennen und angemessen darauf zu reagieren. Dieser analytische Prozess des Data Mining erfolgt mithilfe von computergestützten Methoden, deren Wurzeln in den Bereichen Mathematik, Informatik und insbesondere Statistik liegen. Data Mining kann als Teilprozess innerhalb des umfassenden Datenanalyseprozesses verstanden werden, der folgendermaßen strukturiert ist:

  • Datenbereinigung (Exkludierung von irrelevanten Daten)
  • Datenintegration (Zusammenführen mehrerer Datenquellen)
  • Datenselektion (Auswahl relevanter Daten aus einer Datenbank)
  • Datentransformation (Aufbereitung/Konsolidierung der Daten in eine für das Data Mining passende Form)
  • Data Mining (Prozess gestützt von intelligenten Methoden zum Extrahieren von Daten-/Verhaltensmustern)
  • Pattern Evaluation (Identifikation interessanter Muster und Messwerte)
  • Knowledge Presentation (Präsentieren von mined knowledge durch Visualisierung und andere Repräsenationstechniken)
  • Data Mining als Teilprozess der Knowledge Discovery / Jiawei Han, Data Mining: Concepts and Techniques (2006)

    Die Data Mining Verfahren dienen dazu, den Datenbestand zu beschreiben und zukünftige Entwicklungen vorherzusagen. Hierbei kommen Klassifikations- und Regressionsmethoden aus dem statistischen Bereich zum Einsatz. Zuvor ist es jedoch notwendig, die Zielvariable festzulegen, die Daten aufzubereiten und Modelle zu erstellen. Die gebräuchlichen Methoden ermöglichen die Analyse spezifischer Kriterien wie Ausreißer- und Clusteranalyse, die Verallgemeinerung von Datensätzen, die Klassifizierung von Daten und die Untersuchung von Datenabhängigkeiten.

    Zusätzlich zu den herkömmlichen statistischen Methoden können auch Deep Learning-Algorithmen verwendet werden. Hierbei werden Modelle aus dem Bereich des Machine Learning unter Anwendung von überwachtem (bei gelabelten Daten) oder unüberwachtem (bei nicht gelabelten Daten) Lernen eingesetzt, um die Zielvariablen möglichst präzise vorherzusagen. Eine wesentliche Voraussetzung für das Vorhersagemodell ist ein Trainingsdatensatz mit bereits definierten Zielvariablen, auf den das Modell anschließend trainiert wird.


    ML-Based Text Mining 🤖

    Ein Teilbereich des Data Mining, der auch maßgeblich maschinelles Lernen einbezieht, ist das Text Mining. Hierbei zielt das Text Mining darauf ab, unstrukturierte Daten aus Texten, wie beispielsweise in sozialen Netzwerken veröffentlichte Inhalte, Kundenbewertungen auf Online-Marktplätzen oder lokal gespeicherte Textdateien, in strukturierte Daten umzuwandeln. Für das Text Mining dienen oft Datenquellen, die nicht direkt zugänglich sind, weshalb Daten über APIs oder Web-Scraping beschafft werden. Im darauf folgenden Schritt werden Merkmale (Features) gebildet und die Daten vorverarbeitet. Hierbei erfolgt die Analyse der Texte mithilfe von natürlicher Sprachverarbeitung (Natural Language Processing – NLP) unter Berücksichtigung von Eigenschaften wie Wortfrequenz, Satzlänge und Sprache.

    Maschinelles Lernen für Datenvorverarbeitung

    Die Vorverarbeitung der Daten wird durch Techniken des maschinellen Lernens ermöglicht, zu denen Folgendes gehört:

  • Tokenisierung: Hierbei werden die Texte in kleinere Einheiten wie Wörter oder Satzteile, sogenannte Tokens, aufgespalten. Das erleichtert die spätere Analyse und Verarbeitung.
  • Stoppwortentfernung: Häufige Wörter wie „und“, „oder“ oder „aber“, die wenig spezifische Informationen liefern, werden entfernt, um die Datenmenge zu reduzieren und die Analyse effizienter zu gestalten.
  • Wortstamm- oder Lemmatisierung: Die Formen von Wörtern werden auf ihre Grundformen zurückgeführt, um verschiedene Variationen eines Wortes zu einer einzigen Form zu konsolidieren. Zum Beispiel werden „läuft“, „lief“ und „gelaufen“ auf „laufen“ reduziert.
  • Entfernen von Sonderzeichen und Zahlen: Nicht-textuelle Zeichen wie Satzzeichen, Symbole und Zahlen können entfernt werden, um die Texte auf die reinen sprachlichen Elemente zu fokussieren.
  • Niedrige Frequenzfilterung: Seltene Wörter, die in vielen Texten nur selten vorkommen, können entfernt werden, um Rauschen zu reduzieren und die Analyse zu verbessern.
  • Wortvektorenbildung: Durch Techniken wie Word Embeddings können Wörter in numerische Vektoren umgewandelt werden, wodurch maschinelles Lernen und Analyseverfahren angewendet werden können.
  • Named Entity Recognition (NER): Diese Technik identifiziert in Texten genannte Entitäten wie Personen, Orte und Organisationen, was zur Identifizierung wichtiger Informationen beiträgt.
  • Sentimentanalyse: Diese Methode bewertet den emotionalen Ton eines Textes, indem sie versucht, positive, negative oder neutrale Stimmungen zu erkennen.
  • Textklassifikation: Mithilfe von Trainingsdaten werden Algorithmen trainiert, um Texte automatisch in vordefinierte Kategorien oder Klassen einzuteilen.
  • Topic Modeling: Diese Methode extrahiert automatisch Themen aus Texten, indem sie gemeinsame Wörter und Konzepte gruppiert.
  • Insgesamt kann der Text Mining-Prozess als Teil einer breiteren Datenanalyse oder Wissensentdeckung verstanden werden, bei dem die vorverarbeiteten Textdaten als Ausgangspunkt für weitere Schritte dienen.

    The effort of using machines to mimic the human mind has always struck me as rather silly. I would rather use them to mimic something better.

    Edsger Wybe Dijkstra

    In unserem nächsten Abschnitt werden wir auf die Sentimentanalyse eingehen und schrittweise demonstrieren, wie sie mit Hilfe von Modellen auf Hugging Face für Beiträge auf der Plattform X (ehemalig Twitter) durchgeführt werden kann.


    In my feelings mit Hugging Face 🤗

    Das 2016 gegründete Unternehmen Hugging Face mit Sitz in New York City ist eine Data Science und Machine Learning Plattform. Ähnlich wie GitHub ist Hugging Face gleichzeitig ein Open Source Hub für AI-Experten und -Enthusiasten. Der Einsatz von Huggin Face ist es, KI-Modelle durch Open Source Infrastruktur und Repositories für die breite Maße zugänglicher zu machen. Populär ist die Plattform unter anderem für seine hauseigene Open Source Bibliothek Transformers, die auf ML-Frameworks wie PyTorch, TensorFlow und JAX aufbauend verschiedene vortrainierte Modelle aus den Bereichen NLP, Computer Vision, Audio und Multimodale anhand von APIs zur Verfügung stellt.

    Drake Meme by me

    Für die Sentimentanalyse stehen uns über 200 Modelle auf der Plattform zur Verfügung. Wir werden im folgenden eine einfache Sentimentanalyse unter Verwendung von Transformers und Python durchführen. Unsere KI soll am Ende Ton, Gefühl und Stimmung eines Social Media Posts erkennen können.

    Viel Spaß beim Bauen! 🦾


    Let’s build! Sentimentanalyse mit Python 🐍

    Zunächst brauchen wir Daten aus X/Twitter. Da im Anschluss auf die neuen Richtlinien die Twitter API jedoch extrem eingeschränkt wurde (rate limits, kostenspielige read Berechtigung) und es nun auch viele Scraping-Methoden getroffen hat, werden wir bereits vorhandene Daten aus Kaggle verwenden.

    1. Datenbereitstellung: Kaggle

    Wir entscheiden uns für einen Datensatz, der sich für eine Sentimentanalyse eignet. Da wir mit einem Text-Mining Modell in Transformers arbeiten werden, welches NLP verwendet um das Sentiment eines Textes zuordnen zu können, sollten wir uns für einen Datensatz entscheiden, in dem sich Texte für unsere Zielvariable (das Sentiment) befinden.

    Hier kann ein Datensatz aus Kaggle verwendet werden, in dem über 80 Tausend englische Tweets über das Thema „Crypto“ in dem Zeitraum vom 28.08.2022 – 29.08.2022 gesammelt wurde: 🐦 🪙 💸 Crypto Tweets | 80k in English | Aug 2022 🐦 🪙 💸

    Wir laden das Archiv herunter und entpacken die crypto-query-tweets.csv in unseren Projektordner.

    2. Zielsetzung und Datenvorverarbeitung: Python + Pandas

    Wir wollen in einer überschaubaren Anzahl an Tweets das jeweilige Sentiment zuordnen. Dazu schauen wir uns den Datensatz aus der CSV Datei genauer an. Uns interessieren dabei besonders Tweets von verifizierten Usern. Mit der Pandas Bibliothekt läss sich der Datensatz in Dataframes laden und nach bestimmten kriterien filtern.

    wir installieren zunächst per pip-install die gewünschte Bibliothek und importieren diese in unsere Codebase.

    pip install pandas

    Anschließends lesen wir die CSV-Datei ein und filtern entsprechend unseren Wünschen den Datensatz und geben diesen als Dataframe aus.

    import pandas as pd
    
    # CSV Datei lesen
    csv_file_path = "crypto-query-tweets.csv"
    df = pd.read_csv(csv_file_path, usecols=['date_time', 'username', 'verified', 'tweet_text'])
    
    # Filter anwenden um nur verifizierte User zu erhalten
    filtered_df = df[df['verified'] == True]
    
    # Printe Dataframe
    print(filtered_df)

    Wir erhalten folgende Ausgabe von 695 Zeilen und 4 Spalten:

           date_time                     username        verified    tweet_text
    19     2022-08-29 11:44:47+00:00     RR2Capital      True  #Ethereum (ETH)\n\nEthereum is currently the s...24     2022-08-29 11:44:45+00:00     RR2Capital      True  #Bitcoin (BTC)\n\nThe world’s first and larges...
    25     2022-08-29 11:44:43+00:00     RR2Capital      True  TOP 10 TRENDING CRYPTO COINS FOR 2023\n \nWe h...
    146    2022-08-29 11:42:39+00:00   ELLEmagazine      True  A Weekend in the Woods With Crypto’s Cool Kids...
    155    2022-08-29 11:42:32+00:00     sofizamolo      True          Shill me your favorite #crypto project👇🏻🤩
    ...                          ...            ...       ...                                                ...
    79383  2022-08-28 12:36:34+00:00  hernanlafalce      True  @VerseOort My proposal is as good as your proj...
    79813  2022-08-28 12:30:15+00:00   NEARProtocol      True  💫NEARCON Speaker Announcement💫\n\nWe're bringi...
    79846  2022-08-28 12:30:00+00:00            lcx      True  🚀@LCX enables project teams to focus on produc...
    79919  2022-08-28 12:28:56+00:00    iSocialFanz      True  Friday.. Heading to Columbus Ohio for a Web 3....
    79995  2022-08-28 12:27:46+00:00  BloombergAsia      True  Bitcoin appeared stuck around $20,000 on Sunda...
    
    [695 rows x 4 columns]

    3. Twitter-roBERTa-base for Sentiment Analysis + TweetEval

    Nun können wir mit Hugging Face Transformers eine vortrainiertes Modell verwenden, um allen Tweets entsprechende Sentiment Scores zuzuweisen. Wir nehmen hierfür das Modell Twitter-roBERTa-base for Sentiment Analysis, welches mit über 50 Millionen Tweets trainiert wurde und auf das TweetEval Benchmark für Tweet-Klassifizierung aufbaut. Weitere Infos unter dieser BibTex entry:

    @inproceedings{barbieri-etal-2020-tweeteval,
        title = "{T}weet{E}val: Unified Benchmark and Comparative Evaluation for Tweet Classification",
        author = "Barbieri, Francesco  and
          Camacho-Collados, Jose  and
          Espinosa Anke, Luis  and
          Neves, Leonardo",
        booktitle = "Findings of the Association for Computational Linguistics: EMNLP 2020",
        month = nov,
        year = "2020",
        address = "Online",
        publisher = "Association for Computational Linguistics",
        url = "https://aclanthology.org/2020.findings-emnlp.148",
        doi = "10.18653/v1/2020.findings-emnlp.148",
        pages = "1644--1650"
    }

    Wir installieren alle für den weiteren Verlauf benötigten Bibliotheken.

    pip install transformers numpy scipy

    Die Transformers Bibliothekt erlaubt uns den Zugriff auf das benötigte Modell für die Sentimentanalyse. Mit scipy softmax und numpy werden wir die Sentiment Scores ausgeben mit Werten zwischen 0.0 und 1.0, die folgendermaßen für alle 3 Labels ausgegeben werden:

    Labels: 0 -> Negative; 1 -> Neutral; 2 -> Positive

    Importieren der Bibliotheken:

    from transformers import AutoModelForSequenceClassification
    from transformers import AutoTokenizer
    import numpy as np
    from scipy.special import softmax
    import csv
    import urllib.request

    Wir schreiben eine Methode zum vorverarbeiten des Texts. Hier sollen später Usernamen und Links aussortiert werden. Außerdem vergeben wir das gewünschte Modell mit dem gewünschten Task (’sentiment‘) in eine vorgesehene Variable und laden einen AutoTokenizer ein, um später eine einfach Eingabe-Enkodierung zu generieren.

    # Vorverarbeitung des texts 
    def preprocess(text):
        new_text = []
     
     
        for t in text.split(" "):
            t = '@user' if t.startswith('@') and len(t) > 1 else t
            t = 'http' if t.startswith('http') else t
            new_text.append(t)
        return " ".join(new_text)
    
    
    task='sentiment'
    MODEL = f"cardiffnlp/twitter-roberta-base-{task}"
    
    tokenizer = AutoTokenizer.from_pretrained(MODEL)
    

    Als nächstes laden wir das Label Mapping aus TweetEval für das zugeordnete Task ’sentiment‘ herunter. Das Modell für die Sequenzklassifizierung kann nun gespeichert und in der ‚model‘ Variable hinterlegt werden.

    # download label mapping
    labels=[]
    mapping_link = f"https://raw.githubusercontent.com/cardiffnlp/tweeteval/main/datasets/{task}/mapping.txt"
    with urllib.request.urlopen(mapping_link) as f:
        html = f.read().decode('utf-8').split("\n")
        csvreader = csv.reader(html, delimiter='\t')
    labels = [row[1] for row in csvreader if len(row) > 1]
    
    # Modell laden
    model = AutoModelForSequenceClassification.from_pretrained(MODEL)
    model.save_pretrained(MODEL)
    

    Im nächsten Schritt schreiben wir zwei Methoden, die dabei helfen sollen zeilenweise Tweet-Texte zu enkodieren und ein Sentiment Score zu vergeben. In einem Array sentiment_results legen wir alle Labels und entsprechende Scores ab.

    # Sentiment Scores für alle Tweets erhalten
    def get_sentiment(text):
        text = preprocess(text)
        encoded_input = tokenizer(text, return_tensors='pt')
        output = model(**encoded_input)
        scores = output.logits[0].detach().numpy()
        scores = softmax(scores)
        return scores
    
    # Sentimentanalyse für jede Zeile im Datensatz anwenden
    def analyze_sentiment(row):
        scores = get_sentiment(row['tweet_text'])
        ranking = np.argsort(scores)
        ranking = ranking[::-1]
        sentiment_results = []
        for i in range(scores.shape[0]):
            l = labels[ranking[i]]
            s = scores[ranking[i]]
            sentiment_results.append((l, np.round(float(s), 4)))
        return sentiment_results

    Zum Schluss wir das Dataframe um unser Ergebnis erweitert. Hierzu erstellen wir eine neue Spalte ’sentiment‘ und fügen mit der apply-Funktion die Ergebnisse aus unserer vorherigen Methode analyze_sentiement hinzu. Am Ende geben wir unser neues Dataframe in der Konsole aus.

    # Ergebnisse in neue Spalte "sentiment" speichern
    filtered_df['sentiment'] = filtered_df.apply(analyze_sentiment, axis=1)
    
    # Ausgabe des neuen DataFrames
    print(filtered_df)

    Wir erhalten ein neues Dataframe mit einer weiteren Spalte in der das Label und die Sentiment-Scores festgehalten werden! 🤗🚀

    Den gesamten Code könnt ihr euch auch auf meinem GitHub Profil ansehen oder klonen.


    Referenzen

    Han, Jiawei (2006). Data Mining: Concepts and Techniques, Simon Fraser University.

    Barbieri, F., Camacho-Collados, J., Espinosa Anke, L., & Neves, L. (2020). Tweet Eval: Unified Benchmark and Comparative Evaluation for Tweet Classification. In Findings of the Association for Computational Linguistics: EMNLP 2020, S. 1644-1650. https://aclanthology.org/2020.findings-emnlp.148.

    Hugging Face Transformers: https://huggingface.co/docs/transformers/index. Zuletzt aktualisiert am 27.08.2023.

    Kaggle Dataset: Leonel do Nascimento, Tiago; „Crypto Tweets | 80k in ENG | Aug 2022 „: https://www.kaggle.com/datasets/tleonel/crypto-tweets-80k-in-eng-aug-2022. (CC0 Public Domain Lizens), zuletzt aktualisiert am 27.08.2023.

    Wartena, Christian & Koraljka Golub (2021). Evaluierung von Verschlagwortung im Kontext des Information Retrievals. In Qualität in der Inhaltserschließung, 70:325–48. Bibliotheks- und Informationspraxis. De Gruyter, 2021. https://doi.org/10.1515/9783110691597.


    Ist Python die Programmiersprache der Zukunft?

    Autor*innen: Ömer Topcu und Anela Iljijazi

    Python ist eine Programmiersprache, deren wichtigstes Merkmal die Einfachheit ist. Sie wird von einer aktiven Community auf der ganzen Welt entwickelt. Programmiersprachen sind für sich genommen vielfältig einsetzbar und werden gerade im Bereich der künstlichen Intelligenz häufig eingesetzt. Python hat Zukunft und hat sich dieses Jahr erneut vor Java auf Platz 2 der meistgenutzten Sprachen festgesetzt.

    Python ist eine weit verbreitete Programmiersprache, welche von Guido van Rossum entwickelt und 1991 veröffentlicht wurde. Sie wird für Webentwicklung, Softwareentwicklung, Mathematik und Systemskripting verwendet und wurde mit dem Ziel einer guten Lesbarkeit von Programmen entwickelt . Ursprünglich wurde sie als Unterrichtssprache in der höheren Bildung und Ausbildung verwendet. Zudem ist sie plattformunabhängig und kann auf Mac, Windows und anderen Betriebssystemen ausgeführt werden.

    Was kann man mit Python machen?

    Python kann verwendet werden, um Webanwendungen auf dem Server zu erstellen. Darüber hinaus kann Python mit Software verwendet werden, um Workflows zu erstellen. Python kann Dateien lesen und ändern und sich mit Datenbanksystemen verbinden. Es wird häufig verwendet, um große Datenmengen zu verarbeiten und komplexe mathematische Berechnungen durchzuführen.

    Warum Python verwenden?

    Python ist plattformübergreifend und das bedeutet, dass es auf verschiedenen Plattformen, wie Windows, Mac usw. ausgeführt werden kann. Es hat eine einfache Grammatik, welche der englischen ähnelt. Seine Syntax ermöglicht es Entwicklern, Programme in weniger Zeilen zu schreiben. Python bietet auch Rapid Prototyping an. Python läuft also auf einem Interpretersystem, was bedeutet, dass Code ausgeführt werden kann, sobald er geschrieben ist. Diese Programmiersprache ist sehr flexibel und kann prozedural, objektorientiert oder funktional angegangen werden.

    Historik:

    Die Programmiersprache Python wurde Anfang der 1990er Jahre vom Niederländer Guido van Rossum am Centrum voor Wiskunde en Informatica (CWI) in Amsterdam entwickelt. Guido van Rossum lernte Programmieren während seines Mathematikstudiums an der Universität Amsterdam, denn er arbeitete dort als Wissenschaftler und entwickelte später eine neue Programmiersprache, um Basic zu ersetzen. Dies ist notwendig, da Wissenschaftler in der Lage sein müssen, sich selbst zu programmieren. Python begann als Skriptsprache für das verteilte Betriebssystem Amoeba. Python wurde als Nachfolger der ABC-Lehrsprache entwickelt und sollte auf dem verteilten Betriebssystem Amoeba laufen. Guido van Rossum war auch an der Entwicklung der ABC-Sprache beteiligt und somit fließen seine Erfahrungen mit ABC also auch in Python ein. Er bezeichnet sich selbst als Nerd und Computerfreak. Van Rossum, der 2019 in den Ruhestand ging, aber 2021 zu seinem derzeitigen Arbeitgeber Microsoft zurückkehrte, sagte:

    Ich habe mich entschieden, zu meinen Wurzeln zurückzukehren.“ (Vgl. Guido vaan Rossum)

    Abbildung 3, Python Entwickler, Guido van Rossum

    Vorteile von Python:

    • Python ist kostenlos und kann für viele Betriebssysteme heruntergeladen werden
    • Python ist sehr schnell und einfach zu erlernen
    • Python ist eine sehr vielfältige Programmiersprache 
    • wird ständig weiterentwickelt und aktualisiert
    • Der Python-Code gilt als besonders gut lesbar, was mit dem vorgegebenen strukturierten Programmierstil zusammenhängt 
    • Sie wird von viele große Firmen wie Google, Dropbox, Mozilla genutzt
    • Große Community 
    • Es kommt mit weniger Code als andere Programmiersprachen zu gleichen Ergebnissen

    Nachteile von Python:

    • Python ist im Vergleich  zu anderen Programmiersprachen langsam 
    • Python wird zurzeit in 2 Versionen eingesetzt (Python2 und Python3)
    • Mit Python lassen sich auch Spiele programmieren

    Anwendungsbereiche:

    Python wird in vielen Bereichen in unserem Leben angewendet. Die bekanntesten Bereiche sind Webentwicklung, Spielentwicklung, Data Science und Machine Learning. 

    1. Webentwicklung

    Python unterstützt plattformübergreifende Betriebssysteme, was das Erstellen von Anwendungen erleichtert. Weltbekannte Anwendungen wie Drop oder YouTube verwenden Python, um gut zu funktionieren. Python wird für die Webentwicklung verwendet, dazu wird es vereinfacht und schnell, Webanwendungen zu erstellen. Aber wie ist das möglich? Pythons Framework zum Erstellen von Anwendungen macht dies möglich. Es gibt ein System zum Erstellen dieser Frameworks und eine Reihe von Bibliotheken, die verwendet werden können, um Protokolle wie HTTPS, FTP, SSL zu integrieren, um beispielsweise E-Mails zu verarbeiten. Die beliebtesten Frameworks sind Pyramid und Flask. 

    2. Spielentwicklung

    Python wird für interaktive Spiele verwendet. Es gibt Bibliotheken wie PySoy, eine 3D-Game-Engine, die Python 3 unterstützt, oder PyGame, eine Bibliothek, welche die Funktionalität bereitstellt. Populäre Spiele wie Online, Vega Strike, Civilization-IV wurden mit Python erstellt.

    3. Data Science

    Daten sind Geld, denn sie können Ihre Gewinne steigern, wenn Sie wissen, wie Sie relevante Informationen extrahieren, die Ihnen helfen, Ihr Risiko besser zu kalkulieren. Sie können Daten analysieren, verschiedene Operationen durchführen und notwendige Informationen extrahieren. Pandas oder NumPy (Bibliotheken) helfen dir dabei.

    Mit Datenbanken wie Seaborn und Matplotlib können Sie Daten visualisieren.

    4. Machine Learning

    Wir entwickeln Algorithmen, die Computer selbst lernen lassen. Wir sind diejenigen, die sich darum kümmern. Python unterstützt diese Branche durch viele vorhandene Bibliotheken wie NumPy und Pandas.

    Lernen Sie Algorithmen, verwenden Sie Bibliotheken und Sie haben eine Lösung für KI-Probleme. Ganz einfach. Wenn Sie jedoch den harten Weg gehen möchten, können Sie den Code selbst entwerfen, wenn er eine bessere Lösung bietet.

    Was sind Funktionen in Python?

    Eine Funktion ist ein erstellter Programmcode, der aus dem „top-down“-Ablauf eines Programms entnommen wird und ausschließlich aufgerufen werden muss oder kann, denn dadurch können wir diese Funktionen bei Bedarf öfter aufrufen und so sauberen Code mit weniger Fehlerquellen schreiben.

    Also vergeben wir unserer Funktion einen Namen, den wir an jeder Stelle in unserem Python-Programm aufrufen können.

    Um es am besten zu verstehen schauen sie sich das Video unten an: 

    Link zum Video: https://www.youtube.com/watch?v=mgA-Ytr32Ys

    Jetzt habe ich dich genug mit Informationen bombardiert. Die einzige Frage, die beantwortet werden sollte ist doch nur, ist Python unsere Zukunft ?.

    Ist Python die Programmiersprache der Zukunft?

    Der Entwickler Guido van Rossum äußert sich zum Thema, ob Python sich künftig weiterentwickeln wird:

    „Ich glaube, Python wird weiter wachsen“ (vgl. Stolens)

    „Die größten Entwicklungen erwarte ich in den Python Bibliotheken – hier sehen wir sehr viele Ergänzungen. Was den Gebrauch von Python im Unterricht betrifft, hoffe ich, Schüler nehmen die Programmiersprache als einfach und spannend wahr und werden ermutigt, sie auch außerhalb der Schule anzuwenden. Ich
    hoffe, es sind nicht nur irgendwelche einmaligen Projekte, sondern dass sie die Sprache weiter aktiv verwenden. Es wäre toll, wenn sie nach ihrem Abschluss eine Zukunft in einem MINT-Fach starten würden und sie ihr Python-Basiswissen dann für ihre eigene Forschung verwenden könnten!“ (vgl. Stolens)

    Stolens (2020): https://www.t3deutschland.de/de/t3-europe/edublogs/interview-guido-rossum (Abruf: 31.01.2022)

    Die Forschung basiert auf Anfragen nach Tutorials zum Erlernen von Programmiersprachen. Google Trends stellt die Basis der Erkenntnisse dar und dient der Ermittlung der Beliebtheit der entsprechenden Programmiersprache. Laut der Statistik der PYPL befindet sich Python auf Platz 1 der meist gesuchten Programmiersprachen. Der prozentuale Abstand zum zweitplatzierten Java ist hier mit rund 10 % sogar noch größer und somit kam JavaScript auf den dritten Platz.

    Abbildung 4, Statistik aus PYPL

    Das Potential von Python ist da, denn Python hat gute Zukunftsaussichten und könnte daher die Programmiersprache der Zukunft werden.

    Über die Autoren:

    Anela Iljijazi: Anela Iljijazi studiert im 3. Semester Informationsmanagement. Sie absolviert das Studium an der Hochschule Hannover Fakultät III. Die Autorin wurde in Hannover geboren. Sie ist 20 Jahre alt. Neben ihrem Studium ist sie Kellnerin im Cheers Hannover.

    Ömer Topcu: Ömer Topcu studiert im 3. Semester Informationsmanagement. Er absolviert das Studium an der Hochschule Hannover Fakultät III. Der Autor wurde in Hannover geboren und ist 20 Jahre alt. Er arbeitet in seiner Freizeit im Einzelhandel.

    Quellenverzeichnis:

    • lerneprogrammieren (2022): Wofür wird Python verwendet? 10 Aufgaben und Anwendungsbereiche. URL: https://lerneprogrammieren.de/python-anwendungsbereiche/ (Abruf: 30.01.23)
    • PYPL (2023): PYPL PopularitY of Programming Language. URL: https://pypl.github.io/PYPL.html (Abruf: 30.01.23)
    • Stolens (2020): Die Python Power – erklärt von Python-Erfinder Guido van Rossum. URL: https//www.t3deutschland.de/de/t3-europe/edublogs/interview-guido-rossum (Abruf: 31.01.2023)
    • Morpheus (2015): Python Tutorial #12 – Funktionen. URL: https://youtu.be/mgA-Ytr32Ys (Abruf: 30.01.2023)
    • Abbildung 2, Programmieren mit Python (2022). URL https://fobizz.com/programmieren-mit-python-ganz-ohne-vorkenntnisse/
    • Sebastian Grüner (2021), Golem, Python-Gründer will doppelte Geschwindigkeit für die Sprachen, URL: https://www.golem.de/news/guido-van-rossum-python-gruender-will-doppelte-geschwindigkeit-fuer-die-sprache-2105-156491.html (Abruf 30.01.2023)
    • Koen Stulens (2020), t3deutschland, Die Python Power, URL: https://www.t3deutschland.de/de/t3-europe/edublogs/interview-guido-rossum(Abruf 30.01.2023)
    • Steemit (2018) Python für Anfänger #1, URL: https://steemit.com/deutsch/@rilc0n/python-fuer-anfaenger-1-einfuehrung-vor-und-nachteile(Abruf 30.01.2023)
    • Python, URL: https://www.python.org/ (Abruf 30.01.2023)

    Art empowered through digital transformation

    Authors: Linh Nguyen and Shion Kimu


    © Free image on Pixabay

    Did you ever wonder how fictional animated movies and arts are produced?

    With constant development of digital technologies, we are more and more mesmerized by their capabilities. Pictures and paintings are not no longer created only by colors and brushes anymore. Now they are being created by lines of code, design software, and touch panels. In this blog, we are going to walk through several products of virtual reality and 3D printing, which are expanding opportunities for artists and expanding their audience. We will also discuss the impact of digital transformation on the marketing world and potential implications for the future.

    Contents

    1. What is digital transformation ?
    2. The wide variety of digital arts
    3. Digital technology is a new powerful marketing tool
    4. Conclusion
    5. List of references

    1. What is digital transformation ?

    © Free image on Pixabay

    The term digital transformation is known as the integration of digital technology across all functions of an organization, and it significantly alters how you do business and provide value to consumers.  Digital transformation in art refers to the use of technology to change the way art is created, shared and experienced. This can include the use of digital tools such as computer software and mobile apps to create digital art, online platforms to share and sell art, and virtual and augmented reality experiences to view art in new ways. The goal of digital transformation in art is to make art more accessible, interactive, and engaging for people, and to open up new possibilities for artists to create and share their work.

    2. The wide variety of digital arts

    When it comes to exhibitions, museums, ballet, and opera, there are also new art experiences that are influenced by digital art. It is a promising technique that has been utilized to create these experiences, virtual reality. For instance is the Van Gogh museum in Atelier des Lumières. Situated in the romantic city of Paris, visitors get a chance to experience a different world of arts, where they are surrounded by a Van Gogh painting. With the help of enormous videos and light projections, art lovers can walk through the picture and other major works by varying artists here.

    © Eric Spiller, Image via Culturespaces (CC BY 2.0)

    Taking the digital art to another level is the movie „Avatar 2“ which was lately released. It is considered one of the most complex and ambitious films ever made with a lot of technological advancements and innovations that are now widely used in the film industry. The movie Avatar was made using a combination of cutting-edge technology and traditional filmmaking techniques.

    © Neytiri Zoe Behind The Scenes Film Avatar Speceffekty Avatar, Image via @ de.pinterest.com

    Techniques to bring the film’s alien world of Pandora to life, according to The film’s director, James Cameron

    1. Performance Capture: Actors‘ movements and facial expressions were captured using motion capture technology and then translated onto computer-generated characters.
    2. Virtual Cameras: Cameron used virtual cameras to pre-visualize the film’s scenes and plan out the camera work before filming.
    3. Computer-Generated Imagery (CGI): The film’s alien creatures, landscapes, and environments were created using CGI and rendered using powerful computers.
    4. Motion-Control Photography: Cameron used motion-control photography to capture the live-action elements of the film, such as the human characters.
    5. 3D Filming: The film was shot in 3D, which added depth and immersion to the film’s visuals.
    6. Special Effects: The film’s many special effects, including explosions and flying creatures, were created using a combination of practical effects and CGI.

    Moving on to the game industry, this field is also known for utilizing the advanced technologies to generate games. For instance, „Horizon Forbidden West“ is a highly-anticipated video game developed by Guerrilla Games for the PlayStation 5. The game is made using a combination of cutting-edge technology and extensive game development processes. The development process likely involves multiple stages, including:

    © captured on PS5
    1. Concept and Design: The game’s creators come up with the overall concept and design for the game, including the game’s story, characters, and world.
    2. Pre-Production: The team creates a detailed plan for the game’s development, including the game’s systems, mechanics, and features.
    3. Art and Asset Creation: Artists and designers create the game’s characters, environments, and other assets using 3D modeling and animation software.
    4. Programming: The game’s systems and mechanics are programmed using various game development tools and programming languages.
    5. Testing and Debugging: The game is thoroughly tested and debugged to ensure it runs smoothly and is free of bugs.
    6. Release: The game is released to the public and may continue to receive updates and support post-launch.

    3. Digital technology is a new powerful marketing tool (3D visualization)

    ©️ Hapticmedia

    How KENZO increased sales with 3D visualization

    KENZO Paris is a French luxury fashion house established in 1970 by Japanese designer Kenzo Takada. The company is utilizing 3D visualization to improve the presentation of its products and online experiences to customers. This technology offers a detailed and interactive portrayal of the products. It also includes all the important elements required to effectively advertise them, such as lighting, textures, angles, and color shades.

    ©️ Hapticmedia

    The use of 3D visualization is widespread across various industries, including e-commerce, media and advertising, 3D animation and printing, design, and architecture. This is due to the belief that 3D visualization is more effective for attracting and engaging customers. It’s because the human brain processes visuals much faster than text and 80% of the information we process is visual.

    Marketers believe that using this technology in their marketing strategies is the key to success, as it allows customers to customize the product according to their preferences and lifestyle. It is estimated that 25-30% of consumers have a high level of interest in purchasing custom-made products.

    Why can 3D visualization do?

    3D visualization enables customers to preview items from a 360° angle, interact with it, and make changes if necessary. Customers can now choose their preferred design, color, material, accessories, and even personalize the product with engraving or messages. With just a few clicks, they can order and pay for their customized product.

    Another benefit of 3D visualization is its ability to streamline the purchasing process. Once the customer is satisfied, they can order and pay in just a few clicks. This type of technology is particularly useful in the fashion industry, where customers often struggle with sizing and fit. By offering a detailed and interactive preview of the product, 3D visualization technology helps customers to make informed purchasing decisions and reduces the risk of returns and dissatisfaction.

    The marketing efforts of KENZO Paris is a smart move that will likely result in increased sales and customer engagement. As consumers continue to demand more personalized and interactive shopping experiences, companies that invest in this type of technology will have a competitive advantage. KENZO Paris is setting the standard for innovative and effective marketing in the fashion industry.

    The latest 3D visualization trend for E-Commerce platform

    1. Interactive Product Demonstrations: 3D visualization is allowing e-commerce companies to provide customers with interactive product demonstrations, allowing them to explore products from every angle, zoom in to see details and even virtually try on items like clothing or jewelry.
    2. Virtual Reality (VR) and Augmented Reality (AR) experiences: These technologies allow customers to experience products in a more immersive way, through either a fully-realized virtual environment or by overlaying digital information on the physical world.
    3. Customizable Products: With 3D visualization, customers can now co-design products that better fit their needs and preferences, choosing designs, colors, materials, accessories, and personalizing products with engravings or messages.
    4. 360° Product View: 3D visualization provides customers with a 360° view of products, enabling them to see the product from all angles and helping to build trust and confidence in their purchasing decision.

    4. Conclusion

    In conclusion, digital transformation has had a significant impact on the art world. The advent of digital tools and technology has opened up new possibilities for artists, allowing them to create and share their work in ways that were previously impossible. Digital art has also enabled greater access to art education and resources, making it more inclusive and democratizing the art world.

    With the help of digital tools, artists can reach a wider audience and create art that is interactive, immersive and dynamic. Digital art also has the potential to extend the shelf-life of artworks, making it more accessible to future generations. However, it’s important to note that digital transformation also has its downsides, such as dependence on technology, limited lifespan and limited originality. As digital art continues to grow in popularity, it will be important to strike a balance between utilizing the benefits of digital technology while also preserving the tradition, essence and value of art. Artists and art institutions must adapt to digital transformation by embracing the opportunities it provides, while also being mindful of its limitations and potential challenges.

    About the author:

    Linh Nguyen studies Informationsmanagement in her third semester with the main focus on marketing, media and communication. She is also a template developer for the KKH insurance company with the head office in Hannover, Germany.

    Shion Kimu is in his third semester majoring in the Informationsmanagement. His main focus is Web Science and IT. Currently he is working as a web developer for Activelaw Company in Hannover, Germany.

    Literature

    apviz (2021): How 3D marketing can help raise your conversion rates. Available on https://apviz.io/blog/3d-marketing/ [Accessed on 01.01.2023]

    Explore France (2019): Van Gogh im Atelier des Lumières in Paris. Available on https://www.france.fr/de/jetzt-frankreich/van-gogh-im-atelier-des-lumieres-in-paris. [Accessed on 25.12.2022]

    Hapticmedia (2022): 3D configurator for KENZO sneakers. Available on https://hapticmedia.com/3d-configurator-shoes/ [Accessed on 31.01.2023]

    Impakter (2017): Digital technology is transforming the art world. Available on https://impakter.com/digital-technology-transforming-art-world/. [Accessed on 01.12.2023]

    Playstation (2022): Horizon Forbidden West. Available on https://playstation.com/en-us/games/horizon-forbidden-west/

    Popular Mechanics (2010); How James Cameron’s Innovative New 3D Tech Created Avatar. Available on https://popularmechanics.com/culture/movies/a5067/4339455/

    Screenrant (2010): The Making of James Cameron’s ‚Avatar‘. Available on https://screenrant.com/avatar-james-cameron-documentary/

    The Drum (2018): Ads We Like: Kenzo turns Rousseau’s ‘Le Rêve’ into a 3D digital jungle. Available on https://www.thedrum.com/news/2018/10/17/ads-we-kenzo-turns-rousseau-s-le-r-ve-3d-digital-jungle [Accessed on 10.01.2023]

    Stricken und Programmieren: von 1 links/1 rechts zu 1010

    Autorin: Lena-Marie Hoppe


    Crafting meets Coding

    Wenn Stricken und Programmieren im selben Satz erwähnt werden, dann meist zur Verbildlichung von Gegensätzen: Tradition trifft auf Moderne, analog trifft auf digital, belächelnswertes DIY-Hobby trifft auf zukunftsorientierten Skill. Es mag widersprüchlich erscheinen, doch die Jahrhunderte alte Handarbeitstechnik und Programmiersprachen haben mehr gemein, als es auf den ersten Blick vermuten lässt. Jemand sitzt stundenlang vor unzähligen Zeilen mit kryptisch anmutenden Kürzeln, oft bis tief in die Nacht hinein und an einem bestimmten Punkt stellt sich das Gefühl ein, die Arbeit einfach nur noch in die Ecke pfeffern zu wollen. Dieses Gefühl kennen sowohl Programmierer:innen als auch Strickende.

    Die binäre Basis

    So groß wie die Vielfalt an Programmiersprachen ist, so groß ist auch die Vielfalt an Stricktechniken und Mustern – wahrscheinlich sogar größer. Beiden ist jedoch gemein, dass sie sich jeweils auf zwei Grundbausteine zurückführen lassen: Einsen und Nullen bzw. rechte und linke Maschen. An dieser Stelle soll kein Stricktutorial folgen, doch die grundlegenden Strickbegriffe sollten für ein besseres Verständnis bekannt sein.

    Eine Strickschrift ist die grafische Repräsentation eines Strickmusters mit Hilfe eines Kästchenrasters und Symbolen für die verschiedenen Maschenarten. Der binäre „Übersetzung“ ist im Vergleich komplexer.

    Strickarbeiten können in Reihen oder Runden angefertigt werden. Die Strickrichtung verläuft dabei von rechts nach links. Eine Reihe oder Runde besteht aus Maschen, die während der Arbeit auf der Stricknadel liegen. Rechte Maschen bilden oft die Vorderseite des Gestricks und sehen aus wie „V“s. Sie bilden eine glatte Oberfläche. Linke Maschen erzeugen dagegen kleine Knötchen, wenn sie einzeln auftauchen, bzw. eine Wellenstruktur in der Fläche.

    Außer rechten und linken Maschen gibt es noch viele weitere Techniken, etwa Ab- und Zunahmen, um das Gestrick zu formen oder dekorative Elemente wie Zöpfe, Umschläge oder tiefer gestochene Maschen. Sie alle beruhen jedoch auf den rechten und linken Maschen, mit denen sich komplette Strickstücke inklusive komplexer Strukturmuster stricken lassen.

    Genau dieses Strukturmuster mit binärer Basis sind es, die das Stricken zum perfekten Nachrichtenmedium gemacht haben, lange bevor es ausgefeilte digitale Chiffrier- und Dechriffiertechnologien gab. Selbstverständlich war der Wollpullover mit Noppenmuster nicht der Vorläufer der E-Mail. Besonders in Kriegszeiten hat das Stricken jedoch eine wichtige Rolle beim verschlüsselten Sammeln und Weitergeben von Informationen gespielt.

    Steganografie: gestrickte Geheimbotschaften

    Eine ältere Dame sitzt am Fenster und strickt. Von ihrem Platz hat sie einen guten Blick auf die Züge, die nicht weit von ihrem Haus entfernt vorbeifahren. Eigentlich eine idyllische Vorstellung, wenn es sich dabei nicht um Kriegsgerät der deutschen Besatzer und eine französische Spionin während des Ersten Weltkrieges handeln würde. Als Spion gilt es unauffällig zu sein, keine Aufmerksamkeit zu erregen. Doch das Stricken ist nicht nur Teil der Tarnung. Die Strickware selbst kann zur geheimen Botschaft werden, indem ein Code in die Maschen eingebaut wird. Diese Form der Steganografie, die verborgene Übermittlung von Informationen, kam sowohl im Ersten als auch im Zweiten Weltkrieg zum Einsatz.

    „Drop one for a troup train, purl one for an artillery train“ – so lautet es in der BBC-Dokumentation MI6: A Century in the Shadows, also eine Masche fallen lassen für einen Truppenzug, eine linke Masche stricken für einen Artilleriezug. Man kann davon ausgehen, dass statt „drop one“ hier eher ein Umschlag gemeint ist, der zwar ein Loch erzeugt, aber das Gestrick nicht weiter auflöst. Den Militärhistorikern sei an dieser Stelle ihre Strickunkenntnis verziehen. Wie gut, dass die richtige Spionagearbeit den älteren Damen überlassen wurde …

    Eine noch naheliegendere Form der Informationsübermittlung mittels Gestrick ist der Einbau von Morsebotschaften. Die erhabene Struktur der linken Maschen ist ideal, um mit ihnen Strich- und Punktkombinationen nachzubilden. Für das ungeübte Auge wirken sie dabei lediglich wie ein Strukturmuster, besonders, wenn der eigentliche Code durch andere Musterelemente kaschiert wird.

    Es ist jedoch nicht nur das Gestrick an sich, das als steganografisches Medium genutzt werden kann. Der Mix aus Kürzeln und Ziffern bietet sich gerade dafür an, verschlüsselte Informationen darin zu verstecken. Aus diesem Grund haben sowohl die USA (im Zweiten Weltkrieg) als auch Großbritannien (im Ersten Weltkrieg) den Auslandsversand von Strickanleitungen verboten. Die durch Abkürzungen bestimmte Form von Strickanleitungen lassen sie für Außenstehende nahezu unverständlich wirken – ganz so wie Programmcode … 

    Consider to contribute: International Conference on Education Technology Management (ICETM 2022)


    The 5th International Conference on Education Technology Management (ICETM 2022)
     will be held in Lincoln, United Kingdom, during December 16-18, 2022.

    The conference has added online attendance / presentation for participants in case of you cannot attend the conference.

    Call For Papers ICETM2022

    The submission deadline is still open until Oct. 15, 2022.

    Please consider to contribute.

    Student contributions are welcome.

    Was ist Flask?

    Was ist Flask?

    Autor: Esben Christian Pedersen


    Inhalt

    Was ist Flask überhaupt?

    Flask ist ein WSGI Micro-Framework für Webapplikationen. Ursprünglich wurde Flask als Aprilscherz von Armin Ronacher im Jahr 2010 entwickelt. Auf Grund steigender Beliebtheit unter den Usern, gründete Armin Ronacher die „The Pallets Project“-Sammlung von Open Source Code Bibliotheken. Diese Sammlung dient nun als Organisation hinter Flask und weiteren Bibliotheken wie Werkzeug und Jinja, um die Flask aufgebaut ist. Dabei stützt sich Flask nur auf die nötigsten Komponenten die für die Webentwicklung benötigt werden ( routing, request handling, session). Alle anderen Komponenten müssen dementsprechende entweder selbst entwickelt oder über zusätzliche Pakete hinzugefügt werden.[1]

    Was Flask so außergewöhnlich macht ist der simple Einstieg und die Effizienz im Zusammenspiel mit anderen Python Bibliotheken. Was dem Entwickler erlaubt Web-Applikationen mit Flask im größeren Stil zu entwickeln und auszubauen, ohne dem Entwickler etwas aufzuzwingen. Da die „The Pallets Project“-Sammlung sich einer großen Unterstützer Community erfreut, gibt es viele Erweiterungsmöglichkeiten welche die Funktionalität erhöhen und Flask äußerst flexibel werden lässt.[2]

    Wie das Micro-Framwork Flask funktioniert soll in den folgenden Teilen dieses Beitrags deutlich werden. Sei es die simple installation, oder die einfach Handhabung.


    Installation

    Wie einfach es ist mit Flask eine Web-Applikation mit Flask zu erstellen soll in den folgenden Abschnitten deutlich werden.

    Des Weiteren bietet es sich an beim Entwickeln einer Flask Web-Applikation eine virtuelle Entwicklungsumgebung wie Pythons hauseigene virtualenv zu verwenden um Projektabhängigkeiten und Bibliotheken für jedes Projekt entsprechend zu verwalten. Außerdem ermöglicht die virtualenv eine schnelle und einfach Portierung bzw. ein schnelles unkompliziertes Deployment einer Applikation.

    Wie Pythons virtuelle Entwicklungsumgebung funktioniert ist hier näher beschrieben „virtualenv“.

    Um Flask zu installieren kann man einfach „pip“ benutzen. Dies ist der Package Installer für Python:

    $ pip install Flask

    So einfach lässt sich Flask installieren mit seinen benötigten Paketen installieren.[3]

    Hello World!

    Wie einfach das erstellen einer Web Applikation mit Python und Flask ist soll an einem simplen „Hello World“ Beispiel verdeutlicht werden. Dazu wird die Datei „app.py“ angelegt. Diese lässt sich einfach mit einem Texteditor öffnen und bearbeiten (z.B. PyCharm oder VS Code).

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return "Hello World!"
    
    if __name__ == '__main___':
        app.run()

    Zur Erklärung: In Zeile 1 importieren wir Flask und in initieren in Zeile 3 eine neue Instanz der Flask-Klasse und weisen sie der Variable „app“ zu. In Zeile 5 wird ein „Decorator“ benutzt um die Route/View „/“ der View-Funktion „index()“ zuzuweisen. Also einfach gesagt: Wird die Seite „/“ des Servers im Browser angefragt, so führt dieser die View-Funktion aus die den Content „Hello World!“ bereitstellt.[4]

    Der letzt Abschnitt des Codes startet den Server sobald die Datei für den Interpreter aufgerufen wird. Wenn alles richtig installiert ist sollte nun folgender output zu sehen sein:

    (webapp) $ py app.py
     * Serving Flask app "app" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    Die im Code erstellte Seite „/“ mit der „index()“-Funktion lässt sich einfach über den Webbrowser öffnen. Dazu lediglich in der Adresszeile des Browser auf „http://localhost:5000/“ oder „http://127.0.0.1:5000/“ aufrufen. Die aufgerufene Seite sollte nun „Hello World!“ in der linken oberen Ecke zeigen.

    Routing and Views

    Routing bezeichnet das auflösen und händeln von URLs. Dabei soll beim aufrufen einer URL der korrekte Inhalt im Browser dargestellt werden. Bei Flask wird dies mit dem Route- „Decorator“ eine Funktion an eine URL gebunden um ihren Content nach dem Aufrufen der URL bereitzustellen. Das folgende Bild soll den Ablauf der URL Auflösung und dem damit verbunden bereitstellen von Content verdeutlichen.[5]

    Im vorangegangenen Hello World Beispiel wird dies in Zeile 5 und 6 gemacht. Nach dem aufrufen der URL „http://localhost:5000/“ sollte in der Konsole/der Shell folgendes zu sehen sein:

    (webapp) $ py app.py
     * Serving Flask app "app" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [29/Jan/2021 11:56:33] "GET / HTTP/1.1" 200 –

    Es ist zu sehen das der Browser eine Anfrage für die „/“-Route an den Server stellt. Dieser verarbeitet die Anfrage entsprechend der mit der Route verbundenen View-Funktion „index()“. Im Anschluss sendet der Server http-status: 200 (OK) und rendert „Hello World!“.

    In der Konsole stehen sämtliche Anfragen und http-status codes die vom Flask-Server verarbeitet werden.

    Routen und http-Methoden:

    Der „Decorator“ kann ein weiteres Argument annehmen. Dieses Argument ist eine Liste mit den für den „Decorator“ erlaubten http-Methoden.

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route(„/users/“, methods=['GET', 'POST'])
    def users():
        # Routr Logic #
    

    Somit lassen sich Routen in der Nutzung bestimmter http-Methoden einschränken. Ist jedoch keine Liste angegeben so ist die „GET“-Methode als Standard festgelegt.

    Mithilfe der „Decorator“ lassen sich auch dynamische und variable Regeln für Routen festlegen, da statische Routen eine Website stark einschränken können. So lässt sich im folgenden Beispiel eine Profilseite für registrierte User anlegen oder gepostete Artikel/Beiträge bekommen eine eigene URL basierend auf dem Datum an dem sie Online gestellt worden und ihrem Titel.

    Dabei geben die „<>“ an ob es sich um eine Variable handelt. So lassen sich Routen dynamisch generieren. Zusätzlich lässt sich der Variablen-Typ angeben der verarbeitet werden soll „<datatype:variablename>“. Folgende Variablentypen sind für Routen vorgesehen und möglich:

    • string: Akzeptiert Text ohne „/“.
    • int: Akzeptiert ganze Zahlen (integers).
    • float: akzeptiert numerische Werte die einen Dezimalpunkt enthalten.
    • path: Akzeptiert Text mit „/“ (Pfadangaben)

    Dynamische Routen können dementsprechend im Gegensatz zu statischen Routen Parameter entgegennehmen und verarbeiten. Somit ließe sich auch eine API mit Flask umsetzen um Daten für User zugänglicher und nutzbarer zu machen oder einen erhöhten Automatisierungsgrad für Datenabfragen zu ermöglichen. Um dies deutlich zu machen dienen die folgenden Beispiele:[6]

    from flask import Flask, escape
    
    app = Flask(__name__)
    
    @app.route(„/users/<username>“)
    def profile(username):
        return f'<h1>Welcome { escape(username) }</h1>'
    
    Return „randomuser“ nach Browseranfrage
    from flask import Flask, escape
    
    app = Flask(__name__)
    
    @app.route(„/article/<int:year>/<int:month>/<title>“)
    def article(year, month, title):
        month_dict = {
            "1": "January",
            "2": "February",
            "3": "March",
            "4": "April",
            "5": "May",
            "6": "June",
            "7": "July",
            "8": "August",
            "9": "September",
            "10": "October",
            "11": "November",
            "12": "December"
            }
        return f'<h1>"{ escape(title) }" from { escape(month_dict[str(month)]) } { escape(year) }</h1>'
    
    Return Date and Title nach Browseranfrage

    So einfach diese Beispiele sind, so geben sie doch einen deutlichen Ausblick auf die Möglichkeiten, welche sich mit Flask bieten. Welche Unternehmen Flask in ihrer Entwicklung benutzen kann hier eingesehen werden.

    Die Template Engine

    Wie werden jetzt aus statischen HTML-Dateien dynamische Websiten mit Flask? Ganz einfach, mit Hilfe der eingebauten Template Engine Jinja. Jinja ist eine vielseitige und einfache Templete Engine mit der sich unter anderem auch dynamische HTML-Inhalte erstellen lassen. Sie basiert dabei auf der „Django“ Template Engine bietet jedoch viel mehr Möglichkeiten wie volle „unicode“ Unterstützung und „automatic escaping“ für mehr Sicherheit in Webanwendungen. Zusätzlich lassen sich die gängisten verwendeten Codeblöcke der html-templates immer wieder verwenden und vielseitig einsetzen. Dabei verwendet die Template Engine Variablen, Ablauflogiken und Anweisungen um im Template verwendete Ausdrücke mit Inhalt zu füllen.[7]

    Funktionsweise Template Engine Jinja

    Um das ganze noch mehr zu veranschaulichen dient der folgende Beispiel Code mit der angegeben Projektstruktur:

    |-- app.py
    |-- static
    |   `-- css
    |       `-- main.css
    -- templates
        |-- about.html
        |-- index.html
        |-- layout.html
        `-- page1.html
    <!DOCTYPE html>
    <html lang="en">
    
      <head>
        <!-- meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <!-- Title: -->
        <title>Flask App</title>
        <link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
      </head>
        <!-- Start of body -->
      <body>
        <header>
          <h1>Flask Web App</h1>
        </header>
        <div class="navbar">
          <strong><ul class="navmenu">
            <li><a href="{{ url_for('home') }}">Home</a></li>
            <li><a href="{{ url_for('page1') }}">Page 1</a></li>
            <li><a href="{{ url_for('about') }}">About</a></li>
          </ul></strong>
        </div>
        <content>
          <div class="container">
            <!-- At this place the child templates get rendered by Flask -->
            {% block content %}
            {% endblock %}
          </div>
        </content>
      </body>
    </html>
    {% extends "layout.html" %}
    
    {% block content %}
    <br>
    <br>
    <h1> Welcome to the Flask Web App</h1>
    <br>
    <br>
    {% endblock %}
    {% extends "layout.html" %}
    
    {% block content %}
    <br>
    <br>
    <h1> Page 1 example</h1>
    <br>
    <br>
    {% endblock %}
    {% extends "layout.html" %}
    
    {% block content %}
    <br>
    <h2> About this Web App:</h2>
    <br>
    <h3> This App was build using Flask</h3>
    {% endblock %}
    /* main.css file containing the styling information for the flask webapp */
    
    body {
        margin: 10;
        padding: 5;
        font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
        color: #444;
    }
    
    /* Header */
    
    header {
        background-color: lightblue;
        height: 40px;
        width: 100%;
        opacity: .9;
        margin-bottom: 10px;
    }
    
    header h1 {
        margin: 0;
        font-size: 1.7em;
        color: black;
        text-transform: uppercase;
        float: left;
    }
    
    /* Body content */
    
    .container {
        width: 100%;
        margin: 15;
    }
    
    /* navbar */
    
    .navbar {
        margin: 5px;
        padding: 5px;
        border: 5px;
    
    }
    
    .navmenu {
        float: left;
        margin-top: 8px;
        margin-bottom: 8px;
        padding: 5px;
    }
    
    .navmenu li {
        display: inline;
    }
    
    
    
    .navmenu li a {
        color:slategray;
        text-decoration: none;
    }
    from flask import Flask, escape, render_template
    
    app = Flask(__name__)
    
    # Routes and Views:
    
    @app.route("/")
    def home():
        return render_template('index.html')
    
    @app.route("/about/")
    def about():
        return render_template('about.html')
    
    @app.route("/page1/")
    def page1():
        return render_template('page1.html')
    
    # run flask server:
    if __name__ == '__main__':
        app.run()

    Wird der Server nun gestartet und im Browser die einzelnen Seiten der Applikation aufgerufen werden die html-templates für die entsprechende Seite gerendert.

    Die Möglichkeiten zum nutzen von Templates sind schier endlos für Flask und bieten viel Raum für eigene Ideen und Umsetzungsmöglichkeiten in der Webentwicklung.

    Fazit

    Flask ist eine tolle Möglichkeit zum Einstieg in die Webentwicklung und bietet vielseitige Umsetzungsmöglichkeiten für Applikation, Websites oder APIs. Zudem ist es einfach zu lernen. Die dahinter stehende Community, die Umfangreiche Dokumentation, die Möglichkeit jedes Python Package miteinzubeziehen und die Masse an Tutorials bieten viel Raum um sich, Flask und die eigene App zu entwickeln/weiterzuentwickeln. Ohne das Flask dabei den Entwickelnden Rahmenbedingungen aufzwingt. Zusätzlich ist Lernkurve recht klein und der Entwickler wächst schnell in die Anforderungen und Möglichkeiten hinein.

    1. Stender, Daniel (2017): Tropfen um Tropfen. In: Entwickler Magazin, Jg. 2017, H. 6. Online unter: https://kiosk.entwickler.de/entwickler-magazin/entwickler-magazin-6-2017/tropfen-um-tropfen/ [Abruf am 10.01.2021]
    2. Stender, Daniel (2017): Tropfen um Tropfen. In: Entwickler Magazin, Jg. 2017, H. 6. Online unter: https://kiosk.entwickler.de/entwickler-magazin/entwickler-magazin-6-2017/tropfen-um-tropfen/ [Abruf am 10.01.2021]
    3. The Pallets Project (2020): Installation. Online unter https://flask.palletsprojects.com/en/1.1.x/installation/ [Abruf am 04.01.2021]
    4. The Pallets Project (2020): A minimal application. Online unter https://flask.palletsprojects.com/en/1.1.x/quickstart/#a-minimal-application [Abruf am 04.01.2021]
    5. The Pallets Project (2020): Routing. Online unter https://flask.palletsprojects.com/en/1.1.x/quickstart/#routing [Abruf am 04.01.2021]
    6. The Pallets Project (2020): Variable Rules. Online unter: https://flask.palletsprojects.com/en/1.1.x/quickstart/#variable-rules [Abruf am 04.01.2021]
    7. The Pallets Project (2020): Templating. Online unter: https://flask.palletsprojects.com/en/1.1.x/templating/ [Abruf am 04.01.2021]

    Alle Codebeispiele sind selbst erarbeitet und getestet.


    Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Content Management (Wintersemester 2020/21, Prof. Dr.-Ing. Steinberg) entstanden.

    Die besten Beiträge stellen wir Euch hier in den nächsten Wochen nach und nach vor.

    Der Computer für alle

    Autor: Nils Dille


    Computer waren früher ernsthafte Geräte für ernsthafte Arbeit und demnach auch nicht sehr einfach zu bedienen oder zugänglich.6 Der 1981 erschienen IBM 5150 startete bei einem umgerechneten Preis von ca. 4.400$ und kam dabei nicht mal mit einem Diskettenlaufwerk. Laden und Speichern von Programmen und Daten war so nur über Audiokassetten möglich. Eine sehr langsame und schmerzhafte Erfahrung. Warum man also als Privatperson einen Computer kaufen sollte war fragwürdig. Die rein Textbasierte Interaktion mit dem Gerät schreckte ebenfalls ab und nur technisch versierte Menschen könnten mit einem solchen Gerät etwas anfangen.11

    Was ist also mit dem Rest der Menschen?

    Ein neuer Weg

    1984 kam eine andere Idee des Computers auf dem Markt. Es sollte ein freundliches Haushaltsgerät sein. Leicht zu bedienen und günstig. Dabei aber leistungsfähiger als andere Rechner. Ein Computer der Informationen ausspuckt wie ein Toaster geröstetes Brot.4 Die Rede ist von dem Macintosh von Apple. Der erste erschwingliche Heimcomputer mit grafischer Benutzeroberfläche und einem Zeigegerät namens Maus.

    Anstatt Textbefehle einzugeben, konnte man nun einfach auf Ordner und Dateien zeigen, um sie zu öffnen oder zu verschieben. Textdokumente sahen auf dem Bildschirm so aus wie aus dem Ausdruck. Jalousie-Menüs machten die Arbeit einfacher.12 Alles Dinge die man heute von allen Computern kennt. Sie wurden auf dem PC allerdings erst ein Jahrzehnt später zum Standard.7 Der erste Mac war allerdings kein Erfolg. Schlicht zu teuer war er und nicht genug Software war auf dem Markt. 499$ war der Preis den Steve Jobs angedacht hatte. Daraus wurden dann aber 2.495$.12

    Besser als ein Notebook, besser als ein Smartphone?

    Was ist also aus der Idee des Informationstoasters geworden? Die Welt brauchte wohl noch ein bisschen. Apple probierte es 2010 nochmal mit einer ähnlichen Idee und diesmal mit einem Preis von 499$. Die Rede ist vom iPad. Ein Gerät, das bei seiner Vorstellung im Publikum für Verwirrung gesorgt hat. Die doch sehr zurückhalten Reaktion sind den Zuschauern deutlich anzuhören.2

    Von der Presse wird die Daseinsberechtigung eines solchen Gerätes in Frage gestellt. Es sei doch nur ein großes iPhone ohne Telefon und ohne Computer kann man das Ding ja auch nicht einrichten.8 Für wen soll das also gut sein? Das iPad entspricht den ursprünglichen Ambitionen des Macintoshs besser als dieser es jemals konnte. „If you know how to point, you already know how to use it. “, so hieß es in einem Werbespot für den Mac von damals.5 Beim iPad kann man jetzt direkt auf den Bildschirm zeigen und braucht keine Maus mehr.

    Tablet Computer Front
    Das iPad von vorn
    Tablet Computer hinten
    Und einmal von hinten. Ganz schön wuchtig aus heutiger Sicht.

    Die Idee
    Tablet Computer existierten schon lange als Idee in den Köpfen von Sci-Fi Autoren. Eines der ersten Auftritte im Kino hatte das Tablet in Stanly Kubriks 2001: Odyssee im Weltraum aus dem Jahr 1968. Hier wurde ein Tablet verwendet, um einen Videoanruf vom Raumschiff Odyssee zur Erde herzustellen.14 Das iPad hat den Tablet PC nicht erfunden und es gab eine mannigfaltige Auswahl solcher gerate in den 90ern und 2000ern. So auch den Dauphin DTR-1 von 1993. DTR steht hierbei für Desktop-Replacement. Ausgestattet mit Windows 3.1 for Pen Computing und einem Intel 386 Prozessor im inneren stand der Arbeit nichts im Wege. Bis auch das häufig schmelzende Netzteil vielleicht. Das hat mich jedenfalls bisher abgehalten.13 Desktop Arbeitsumgebungen in Tablet Form zu pressen ist wohl ein anderer Grund. Es bedarf einer grundlegen neuen Bedienung, um eine Vernünftige Nutzererfahrung zu schaffen. Und das Internet fehlte damals auch noch.

    Meine Erfahrung

    Mein Vater kaufte das iPad direkt als es in Deutschland auf den Markt kam. Es übte eine eigenartige Faszination auf mich aus. Das iPad träumte großer als der Macintosh es sich jemals vorstellen konnte. Alles wollte alles sein und das zeigte sich auch. Ein Webbrowser, eine E-Mail-Maschine und Unterhaltungsgerät, aber auch so einige etwas absurdere Einsatzwecke waren angedacht. So kann man vom Sperrbildschirm aus eine Diashow starten und das Gerät zusammen mit dem Dock als digitalen Bilderrahmen verwenden. Mit dem eingebauten Line-Out im Dock kann man sein iPad mit der Stereoanlage verbinden und es so als Musikspieler verwenden. Mit dem AV-Kabel lässt sich das iPad auch an den Fernseher anschließen, um seine Verwandten mit Urlaubsfotos zu langweilen. Importieren kann man die Fotos mithilfe des 30-Pin-Dockconnenctor auf USB oder SD-Karten Adapters. Und wer längere Texte schreiben will, kann einfach eine Bluetooth Tastatur koppeln.

    Tablet Computer Bilderrahmen
    Der Digitale Bilderrahmen Modus. Wer braucht da noch echte Fotos…

    All dieses Zubehör war in üblicher Apple Manier natürlich nicht mitenthalten, aber mein Vater hat sich alles gleich dazu bestellt. Es sollte sein neuer Heimcomputer sein und auch sein einziger. Das ist etwas was sich bis heute nicht geändert hat. Das iPad ist nicht mehr das gleiche, er ist jetzt bei seinem dritten, aber er hat traditionellen Computern den Rücken gekehrt. Größtenteils weil sie teurer und klobiger sind, aber vor allem weil sie schwieriger zu bedienen sind. Das ist etwas was mir schon so manches Mal aufgefallen ist. Wenn ich meine Eltern meinen Laptop vorsetze, um Ihnen etwas zu zeigen, kommt es häufig vor, dass sie den Finger heben und versuchen auf dem Display zu tippen. Das bringt nur Fingerabdrücke auf den Bildschirm, zeigt aber wie natürlich Touch-Bedienung geworden ist.

    Der Computer ist tot, lange lebe der Computer!

    Mobile Endgeräte machen den größten Teil des Internetverkehres aus. Klassische Computerumgebungen werden mehr und mehr zu einem Nischenmarkt für Entwickler und Professionelle.3, 10 Man hört selten am Esstisch jemanden davon reden, wie er seinen Arbeitsspeicher erweitert hat und nun endlich das neue Betriebssystem installieren kann. Oder wie man die Wärmeleitpaste seiner CPU erneuert hat, um die Temperatur im Betrieb zu senken. Die meisten wollen ein Gerät, das einfach funktioniert und das tut was es soll. Ohne irgendwelche Erweiterungen oder Instandhaltung. Und das ist genau das was Tablets bieten. Man kann und muss sich um nichts kümmern. Das Gerät an sich steht im Hintergrund und der Content im Vordergrund. Das beeinflusst dann auch unseren Umgang mit den Inhalten.

    Ein prominentes Beispiel dafür ist der Tod des Flash Players von Adobe. Lange Zeit ein unverzichtbares Werkzeug bei der Erstellung von Webinhalten, ist dieses Jahr endgültig von Adobe eingestellt worden. Ab den 01.02.2021 ist sogar das reine Ausführen des Programms von seitens Adobe blockiert, wenn es noch auf dem Rechner installiert ist.1 Ein Grund für den Untergang von Flash war zu keinem kleinen Teil die sture Verweigerung Flash auf iOS Geräte zu bringen. Steve Jobs hatte seine Gründe damals in einem offenen Brief geäußert.9 Wenn Websites heutzutage keine mobile Version aufweisen, können sie als kaputt und nutzlos betrachtet werden. Ob es einem gefällt oder nicht, wir leben in der Zeit nach dem Computer.

    Literaturverzeichnis

    1 Abobe (2021): Allgemeine Informationen zur Produkteinstellung von Adobe Flash Player. Zuletzt aktualisiert am 13.01.2021. Online unter https://www.adobe.com/de/products/flashplayer/end-of-life.html [Abruf am 29.01.2021]

    2 Ben Hollberg (2010): Introducing iPad. Video publiziert am 29.01.2010 aus YouTube. Online unter https://youtu.be/qxWEpp206lg [Abruf am 30.01.2020]

    3 BroadbandSearch (2021): Mobile Vs. Desktop Internet Usage (Latest 2020 Data) Online unter https://www.broadbandsearch.net/blog/mobile-desktop-internet-usage-statistics [Abruf am 28.02.2021]

    4 Dernbach, Christoph (o.J.): The History of the Apple Macintosh. Online unter https://www.mac-history.net/top/2020-02-10/the-history-of-the-apple-macintosh [Abruf am 29.01.2021]

    5 epicyoutubevideos (2015): Old macintosh ads (1984-85). Video publiziert am 11.08.2015 auf YouTube. Online unter https://youtu.be/JkU3WCSGSw4 [Abruf am 29.01.2021]

    6 Hoffman, Cris (2014): PCs Before Windows: What Using MS-DOS Was Actually Like. Zuletzt aktualisiert am 11.05.2014. Online unter https://www.howtogeek.com/188980/pcs-before-windows-what-using-ms-dos-was-actually-like/ [Abruf am 29.01.2021]

    7 Long, Tony (2011): Aug. 24, 1995: Say Hello to Windows 95. Zuletzt aktualisiert am 24.08.2014. Online unter https://www.wired.com/2011/08/0824windows-95/ [Abruf am 29.01.2021]

    8 Seeger, Andreas (2010): iPad im Test: Keiner braucht das iPad, alle wollen es. Zuletzt aktualisiert am 11.05.2010. Online unter https://www.areamobile.de/iPad-3G-Tablet-273566/Tests/iPad-im-Test-Keiner-braucht-das-iPad-alle-wollen-es-1329423/ [Abruf am 29.01.2021]

    9 Shankland, Stephen (2010): Steve Jobs‘ letter explaining Apple’s Flash distaste. Apple’s CEO doesn’t like Flash. Here’s the full memo explaining why the company is keeping Adobe Systems‘ software off the iPhone and iPad. Zuletzt aktualisiert am 29.04.2010. Online unter https://www.cnet.com/news/steve-jobs-letter-explaining-apples-flash-distaste/ [Abruf am 29.01.2021]

    10 StatCounter (o.J.): Operating System Market Share Worldwide – December 2020. Online unter https://gs.statcounter.com/os-market-share [Abruf am 29.01.2021]

    11 Steve’s Old Computer Museum (2020a): IBM Personal Computer (PC). Zuletzt aktualisiert am 08.05.2016. Online unter http://oldcomputers.net/ibm5150.html [Abruf am 28.01.2021]

    12 Steve’s Old Computer Museum (2020b): Apple Macintosh. Zuletzt aktualisiert am 08.05.2016. Online unter http://oldcomputers.net/macintosh.html [Abruf am 28.01.2021]

    13 Steve’s Old Computer Museum (2020a): Dauphin DTR-1. Zuletzt aktualisiert am 08.05.2016. Online unter http://oldcomputers.net/dauphin-dtr-1.html [Abruf am 29.01.2021]

    14 Wigley, Samuel (2019): Did Stanley Kubrick invent the iPad?. Zuletzt aktualisiert am 12.05.2019. Online unter https://www2.bfi.org.uk/news-opinion/news-bfi/features/did-stanley-kubrick-invent-ipad [Abruf am 29.01.2021]


    Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Content Management (Wintersemester 2020/21, Prof. Dr.-Ing. Steinberg) entstanden.

    Die besten Beiträge stellen wir Euch hier in den nächsten Wochen nach und nach vor.

    Forty in 49: Ein Spiel für Gedächtnis und räumliches Vorstellungsvermögen

    Beitragsbild forty in 49 - ein Spiel für das Gedächtnis und das räumliche Vorstellungsvermögen

    Autor: Jannis Fortmann

    Link zum Spiel
    Zip Datei zum Download

    Inhalt

    Von Anfang an war es mein Plan, ein simples und optisch ansprechendes kleines Spiel zu designen, bei dem Animationen sinnvoll zum Einsatz kommen.

    Nach ein paar verworfenen Ideen entschied ich mich für diese Variante, bei der die räumliche Wahrnehmung und das Gedächtnis des Spielers auf die Probe gestellt wird. Das Konzept des Spiels ist angelehnt an einen Intelligenztest für Schimpansen, bei dem deren Arbeitsgedächtnis getestet wird. Bei diesem werden aufeinanderfolgende Zahlen auf einem Bildschirm abgebildet, diese zahlen müssen dann in der richtigen Reihenfolge gedrückt werden. Nachdem die erste Zahl gedrückt wurde, werden alle anderen hinter identisch aussehenden Feldern versteckt.

    Mein Spiel „forty in 49“ funktioniert nach einem ähnlichen Prinzip. Anstatt einer bestimmten Reihenfolge geht es hierbei aber um die Position der Felder. In einem Raster sind 7×7 Felder angeordnet,. Zu Beginn des Spiels verschwinden 40 der 49 Felder für wenige Sekunden. Der Spieler muss sich die Position der übrigen 9 Felder (Bomben) merken und diese vermeiden. Das Ziel ist es, möglichst viele der 40 Felder anzuklicken. Klickt man auf eine Bombe, ist das Spiel vorbei.

    Animationen

    Die Animationen erfüllen sowohl funktionale als visuelle Zwecke.

    Um die Orientierung zu vereinfachen, werden Felder größer und ändern ihre Farbe, wenn der Mauszeiger darüber hovert. Wird ein Feld angeklickt, wird es entweder grün und verschwindet in einer rotierenden Animation, oder es wird rot und dreht sich langsam um 180° um die y-Achse und um 45° um die z-Achse. Dadurch wird dem Spieler visuell verdeutlicht, ob er richtig lag. Um das Ganze auditiv zu unterstützen, gibt es für den Klick auf die zwei Arten von Feldern jeweils einen Soundeffekt.

    Ist das Spiel vorbei (alle richtigen Felder oder eine Bombe wurden geklickt), erscheint eine Karte mit der Punktzahl. Sie bewegt sich von unten nach oben und landet mittig über dem Spielfeld. Außerdem gibt es natürlich die fade-out/fade-in Animation am Anfang, ohne die das Spiel überhaupt nicht möglich wäre.


    Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Entwicklung von Multimediasystemen (Sommersemester 2021, Amy Linh Hoang,  Prof. Dr.-Ing. Steinberg) entstanden. Verwendete Techniken sind HTML5, CSS3 und JavaScript. Die besten Tutorials stellen wir Euch hier in den nächsten Wochen nach und nach vor.

    Tutorial: Ein Tag mit Bobby

    Beitragsbild Tutorial zur Animation: Ein Tag mit Bobby

    Autor*in: Julia Solohub 


    Animation anschauen

    Quellcode (Zip-Archiv zum Download)

    Dieser Beitrag ist ein Tutorial zu der Animation „Ein Tag mit Bobby“ bei dem auf die Details zum Code, Inhalt, Besonderheiten, das Konzept und Schwierigkeiten eingegangen wird. Die Bilder dienen zur Veranschaulichung und Nachvollziehbarkeit und sind anklickbar, sodass man diese in Vollbildmodus und besserer Auflösung betrachten kann.

    Inhaltsverzeichnis

    Das Konzept

    Die Animation ist ein Storytelling, bei dem der User mit Hilfe von Buttonklicks durch die einzelnen Szenen geleitet wird.  Dieser begleitet den Hauptcharakter Bobby durch den Tag und führt verschiedene Anweisungen durch, die Bobby in der Sprechblase gibt. Diese können durch einen Buttonklick realisiert werden. Sobald der User auf einen Button klickt, wird entweder die Szene gewechselt oder ein visueller Effekt erzeugt.

    Das Ziel ist es mit dem User eine Interaktion zu starten, wobei dieser den Ablauf der Animation lenkt. Der User wird zu Beginn auch direkt von Bobby mit dem Namen angesprochen und aufgefordert mit ihm den Tag zu verbringen.

    Die Idee eine Animation mit Hund(en) zu erstellen, kommt von der persönlichen Liebe zu Tieren und insbesondere zu Hunden. Die kindliche und amüsante Darstellung soll den User animieren und erfreuen. Die Hintergrundmusik sorgt für eine zusätzliche entspannte Atmosphäre, die die Stimmung der Animation unterstützt. Der User kann sich somit entspannen, zurücklehnen und die Animation genießen.

    Aufbau

    Die Animation ist in vier Szenen aufgeteilt:

    1. Start-Szene (div class=“ story_start_scene“)
    2. Bobby im Wohnzimmer (div-class= „dog_in_livingroom_scene“)
    3. Bobby im Park (div class=“background_image_park_day“)
    4. Schluss-Szene bei der Bobby im Park nachts ist (div class=“dog_in_park_night“)

    Start Szene

    Bei der Start Szene sieht man den schlafenden Bobby auf einem Teppich ohne jeglichen Hintergrund, das sich zu den restlichen Szenen unterscheidet. Der Grund dafür ist, dass man zum einen den beweglichen und farbwechselnden Hintergrund auf sich wirken lassen kann und zum anderen sollte es schlicht gehalten werden, damit der Wechsel zu den Hauptszenen spannender gestaltet wird. Zudem soll der Fokus zu Beginn auf dem Hauptcharakter liegen. Mit dem Buttonklick auf „Aufwecken“ startet die ganze Animation.

    Start Szene

    Zweite Szene

    In der zweiten Szene befindet sich Bobby im Wohnzimmer, wo er zuvor auf dem Teppich geschlafen hat. Der User hat ihn aufgeweckt und nun fragt Bobby ihn nach seinem Namen. Die Abfrage passiert zwischen der ersten und der zweiten Szene, die mit Hilfe von JavaScript erzeugt wurde. Je nachdem welchen Namen der User eingibt, erscheint dieser in dem Begrüßungstext in der Sprechblase. Hier wird der User aufgefordert die Anweisungen von Bobby durchzuführen. In dieser Szene soll der User mit Bobby in den Park gehen.

    Zweite Szene
    Zweite Szene

    Dritte Szene

    Die dritte Szene spielt sich im Park tagsüber ab in den mehrere Aktionen passieren. Zu Beginn sieht man den Park, in dem sich ein Grill und Bobby befinden. Bobby weist darauf hin, dass es vom Grill sehr gut riecht und er gerne einen Hot Dog haben möchte. Dieser Bitte kann der User nachgehen, indem er auf den langsam erscheinenden Button „Hot Dog geben“ klicken kann. Sobald dies gemacht wurde, erscheint ein animierter Hot Dog, der vom Grill aus zu Bobby in einer 360 Grad Drehung geworfen wird. Daraufhin bedankt sich Bobby und gibt den nächsten Hinweis, dass er seinen Freund Bello sieht und mit ihm Ball spielen möchte.

    Dritte Szene
    Dritte Szene

    Auch hier kann der User der Anweisung nachgehen, indem er auf den nächsterscheinenden Button „Mit Bello spielen“ klickt. Hier erfolgt die nächste Animation, bei der sich Bello und Bobby den Ball zu werfen. Dabei springen beide versetzt hoch und werfen den Ball mit ihrem Kopf einander zu. Nun erscheint der fünfte Button „Weiter“, der den User darauf hinweist, dass danach die nächste Szene erscheint.

    Vierte Szene

    Vierte Szene
    Vierte Szene

    Die vierte und letzte Szene findet in dem selben Park statt. Jedoch ist es schon spät geworden und Bobby ist müde. Er macht vor Freude Rückwärtssaltos und bedankt sich für den großartigen Tag, den er mit dem User erlebt hat. Auch hier weist Bobby daraufhin, dass er müde und erschöpft ist. Hier ist es Zeit sich von Bobby zu verabschieden und ihm eine Gute Nacht zu wünschen.

    Letzte Szene
    Letzte Szene

    Mit dem Buttonklick kann man dies tun, wobei das Bild von Bobby in den ursprünglich schlafenden Zustand zurückgebracht wird. Es taucht ein Eyecatcher auf, der zoomt und sich hin und her in verschiedene Winkel dreht. Dies ist der Abschluss der Animation, der durch den animierten Text „Gute Nacht, Bobby“ kenntlich gemacht wird. Der letzte Button unterscheidet sich in der Erscheinungsweise von allen anderen, denn dieser macht auf sich Aufmerksam, indem sich dieser hin und her bewegt und dabei vertikal spiegelt. Der Grund für diese Erscheinungsweise ist das Aufmerksam machen, dass ab hier keine neue Szene erscheint, sondern alles nochmal vom Anfang beginnt. Somit ermöglicht dieser Button die Animation nochmal neu zu starten

    Der Code

    Für die Animationen wurden HTML5, CSS3 sowie JavaScript und jQuery benutzt. HTML5 wurde für das Grundgerüst und Aufbau, CSS3 für die Animation sowie das Styling und JavaScript bzw. jQuery für das Auslösen/Verstecken verschiedener Animationsobjekte benutzt.

    Allgemeine Einstellungen

    In der ID „animation_start“ in HTML5 spielt sich die gesamte Animation ab. Die jeweiligen Szenen sind in einzelne div-classes unterteilt in denen die dazugehörigen Objekte enthalten sind. Die div-classes sind nach den Szenarien benannt, das das Erkennen der Inhalte vereinfacht.

    <div id="animation_start"class="whole_animation"> <!--ID der gesamten Animation-->
          <div class="story_start_scene"><!--Erste Szene: Startbildschrim-->
             <img src="sleeping_dog.png" id="sleep"/>
             <img src="carpet.png" id="carpet"/>
           </div>
        
           <div class="dog_in_livingroom_scene"> <!---Zweite Szene: Bobby im Wohnzimmer Szene samt Begrüßung-->
              <div class="living_room_background">
                <img src="room.png" class="backgroundimage_livingroom" style="visibility: hidden;"/>
               </div> 
               <div class="dog_character">
                 <img src="standing_dog.png" id="hello_dog" style="visibility: hidden;"/>
                 <img src="sprechblase.png" id="speak1" style="visibility: hidden;"/> 
                 <p id="welcome_text" style="visibility: hidden;">Hallo! Ich bin Bobby. Lass uns den Tag zusammen verbringen.</p>
               </div>
           </div>
    
           <div class="dog_in_park_day"> <!--Dritte Szene: Bobby im Park Szene mit dazugehörigen Objekten-->
               <div class="background_image_park_day">
                 <img src="meadow_at_day.png" class="backgroundimage_park_day" style="visibility: hidden;"/>        
               </div>
               <div class="park_items">
                 <img src="grill.png" id="bbq" style="visibility: hidden;"/>
                 <img src="food.png" id="hot_dog" style="visibility: hidden;"/>
                 <img src="standing_dog2.png" id="dog_at_park" style="visibility: hidden;"/>
                 <img src="sprechblase2.png" id="speak2" style="visibility: hidden;"/>
                 <p id="hot_dog_text" style="visibility: hidden;">Das riecht aber toll! Kannst du mir einen Hot Dog geben?</p>
                 <p id="thank_you_hot_dog_text" style="visibility: hidden;">Danke! Ouh Schau! Da ist Bello. Ich möchte mit ihm Ball spielen.</p>
                 <img src="playing_dog_brown.png" id="bello" style="visibility: hidden;"/>
                 <img src="playing_dog_grey.png" id="bobby" style= "visibility: hidden;"/>
                 <img src="ball.png" id="toy" style="visibility: hidden;"/>    
               </div> 
           </div>
    
           <div class="dog_in_park_night"><!--Abschlussszene: Bobby im Park nachts.--> 
               <div class="background_image_park_night">
                 <img src="meadow_at_night.png" id="backgroundimage2" style="visibility: hidden;"/> 
                 <img src="dog_by_night.png" id="night_dog" style="visibility: hidden;"/>
                 <img src="sprechblase3.png" id="speak4" style="visibility: hidden;"/>
                 <img src="sleeping_dog2.png" id="tired" style="visibility: hidden;"/>  
                 <p id="thank_you_for_the_day" style="visibility: hidden;">Danke dir für den schönen Tag! Ich bin jetzt aber müde.</p>
                 <p id="good_night_bobby" style="visibility: hidden;">Gute Nacht, Bobby</p>
               </div>
           </div>
     </div><!--Ende der "animation_start"-->

    In der aside-class wurden alle Buttons und der Titel der der Animation eingetragen, da diese Inhalte sich immer an der selben Position befinden.

    <body>
      <!--Alle Elemente sind auf "visibility:hidden" gesetzt, die über JavaScript aktiviert werden, wenn man auf einen Button klickt-->
      <script src="animation_functions.js"></script> <!--Einbindung der JavaScript Datei-->
      <aside class="title_and_buttons"> <!--Übergreifende Class für alle Buttons und Titel der Animation (h1) damit die Position die selbe bleibt-->
        <h1> Ein Tag mit Bobby</h1>
        <button id="button_aufwecken">
           <a class="button_1">Aufwecken</a>
        </button>
        <button id="button_park" style="visibility: hidden;">
          <a class="button_2">Lass uns in den Park gehen</a>
       </button>
       <button id="button_hot_dog" style="visibility: hidden;">
          <a class="button_3">Hot Dog geben </a>
        </button>
        <button id="button_play" style="visibility: hidden;">
          <a class="button_4">Mit Bello spielen</a>
        </button>
        <button id="button_next" style="visibility: hidden;">
         <a class="button_5">Weiter</a>
       </button>
       <button id="button_good_night" style="visibility: hidden;">
         <a class="button_6">Gute Nacht!</a>
      </button>
       <button id="button_reload" style="visibility: hidden;">
         <a class="button_7">Neustart</a>
     </button>
    </aside> 
    

    Auffallend im Code ist, dass alle Objekte nicht sichtbar sind (visibility: hidden). Diese werden zu dem Zeitpunkt wann die jeweiligen Objekte zu sehen sein sollen mit Hilfe von jQuery sichtbar gemacht. Die allgemeine Position aller Elemente ist in der ID „animation“ sowie dessen class „whole_animation“ zu sehen. So entsteht ein Rahmen für die verschiedenen Bilder, das die Zentrierung der Szenen möglich macht. Die gewählte Größe und Position erstellt eine Box, wo sich die Animation abspielt. Dies soll ein Gefühl erzeugen, als würde man in einem Kino vor einer Leinwand sitzen.

    #animation { /*Ausrichtung der gesamten Animation*/
      align-items: center;
      min-height: 100%;
      position: absolute;
    }
    
    .whole_animation {
      max-width: 900px;
      margin: 0em auto 0;
      text-align: center;
      max-height:800px;  
      overflow: hidden;
    }
      
    .title_and_buttons { /*Ausrichtung aller Buttons und der h1*/
      max-width: 900px;
      text-align: center;
      margin: 1em auto; 
      padding:1px;
    }
       
    h1 {
      color: white;
      font-size: 1.7rem;
    }

    Im Body ist die Animation des ineinanderfließenden Hintergrundes zu sehen. Die keyframes bringen diese Animation zum Laufen. Zunächst muss man drei Farben definieren, die man in dem Übergang haben möchte. Des Weiteren war es wichtig die Dauer und Länge zu definieren. In diesem Fall sollte der gesamte Übergang 13 Sekunden dauern und unbegrenzt durchlaufen.

    body {
      font-family: "Comic sans MS"; 
      background-size: cover; 
      justify-content:center;
      background-position: center;
      background: -webkit-linear-gradient(132deg, #FC415A, #591BC5, #4a8ead); 
      background-size: 400% 400%;
      align-items: center;
      min-height: 100%;
      overflow:hidden;
      -webkit-animation: moving_background 13s ease infinite;
      animation: moving_background 13s ease infinite;
    }
    
    @-webkit-keyframes moving_background {  /*Animation des Backgrounds, der in Dauerschleife die Farben wechselt*/
      0% {
          background-position: 0% 50%;
      }
      50% {
          background-position: 100% 50%; /*Inspired by https://www.sliderrevolution.com/resources/css-animated-background/*/
      }
      100% {
          background-position: 0% 50%;
      }
    }
    

    Die Buttons

    Die Buttons haben wie schon zuvor erwähnt den funktionalen Zweck den User durch die Szenen zu geleiten und verschiedene Animationen hervorzurufen. Somit sind diese essenziel für das Abspielen der Animation. Aus diesem Grund werden diese oberhalb der Animationsbox dargestellt, damit die Aufmerksamkeit des Users zu den bestimmten Zeitpunkten darauf gelenkt wird.

    Die Buttons haben alle den selben Stil, jedoch haben alle verschiedene Dauer und Art und Weise der Animation. Daher wurde jeder einzelne Button in CSS3 angelegt. Das Aussehen der Buttons ist Oval und hat drei Farbverläufe, das in zarten und hellen Farben gehalten ist, um mit dem Hintergrund zu harmonieren. Beim Hovern erfolgt ein Spiegeleffekt bei dem die Farben von rechts nach links ineinander laufen. Durch das bewegte Gelb wir ein Relief- bzw. Spiegeleffekt erzeugt. Die transition ermöglicht dies.

    #button_aufwecken { /*Design und Animation der Buttons. Alle haben die gleiche Einstellung nur andere Animationsangaben. Daher jeden Button einzeln angelegt, anstatt die zusammenzufassen*/
      border-radius: 50%;
      align-items: center;
      font-size: 15px;
      display: flex;
      margin: auto;
      background-image: linear-gradient(135deg, #ee9ca7 0%, #fbed96 51%, #ee9ca7 100%);  /*Inspired by https://blog.avada.io/css/button-hover-effects/*/
      background-size: 200% auto;
      box-shadow: #a05a9c 0px 0px 5px;
      -webkit-animation: push_buttom 3s infinite;
      animation: push_button 3s infinite;
      outline: none;
    }
    
    
    @-webkit-keyframes push_button {                       /*Inspired by https://css-tricks.com/css-animation-libraries/*/
      0% {
        box-shadow: 0px 0px 4px rgb(255,250,250);
      }
              
      
      50% {
        box-shadow: 0px 0px 23px rgb(255,250,250);
      
      }
      100% {
        box-shadow: 0px 0px 12px rgb(255,250,250);
      }
    }
    
    @keyframes push_button {                       
    0% {
      box-shadow: 0px 0px 4px rgb(255,250,250);
    }
            
    
    50% {
      box-shadow: 0px 0px 23px rgb(255,250,250);
    
    }
    100% {
      box-shadow: 0px 0px 12px rgb(255,250,250);
     }
    } 
    
    #button_aufwecken:hover {
      background-position: right center;
      transition: all 0.5s ease-out;
      }
          
    .button_1{
      flex: 1 auto;
      margin:5px;
      padding:10px 25px;
      text-align:center;
      transition: all 0.5s ease-out;
      cursor:pointer;
      background-size: 200% auto;
      font-family: "Comic sans MS";
    }

    Animierte Objekte

    Alle benutzen Bilder, bis auf die Hintergrundbilder der Szenen, haben einen funktionalen Zweck. Alle Bilder sind PNG Dateien und von Pixabay. Durch die position: relativ war es einfach alle Objekte in einer Szene zu platzieren. Ausgerichtet und an den gewünschten Platz gebracht wurde mit bottom, top, left, right und margin.  Keyframes erzeugen die Animationen der Objekte. Die nachfolgenden Abschnitte beschreiben die einzelnen animierten Objekte.

    Text in Sprechblase

    Der sprechende Text, den Bobby in der Sprechblase sagt zoomt rein und raus und wechselt dabei zwischen drei Farben. So sollte die Aufmerksamkeit auf den Text gelenkt werden, damit der User den Anweisungen folgen kann. Dazu wird die animation-timing-function auf ease gesetzt. Zudem soll der Zoomeffekt in Dauerschleife ablaufen. Daher der Wert infinite. Durch scale() konnte die Größe der Transformation des Textes eingerichtet werden. Color sorgt für den Farbverlauf, der sich über die verschiedenen Sequenzen (0%, 50%, 100%) ändert.

    #welcome_text { /*Annimation für Text in der Sprechblase. Wird in jeder Szene eingesetzt*/
      position: relative;
      bottom: 392px;
      left: 475px;
      z-index: 4;
      font-size: 10px;
      box-sizing: border-box;  
      overflow: hidden;
      border-width: 20px;
      border: 1px hidden;
      width: 135px;
    
      -webkit-animation: typing_hello 1.5s ease infinite; 
      -webkit-animation-delay: 0s;
      -webkit-animation-play-state: paused;
      -webkit-animation-fill-mode: forwards;
    
      animation: typing_hello 1.5s ease infinite;
      animation-delay: 0s;
      animation-fill-mode: forwards;
      animation-play-state: paused;     
    }
    
      @-webkit-keyframes typing_hello {
       0% {
        transform: 
           scale(0.7, 0.7);
           color:rgb(116, 9, 107)
      }
       50% {
        transform: 
           scale(0.9, 0.9);
           color:rgb(85, 25, 134)
      }
       100% {
        transform: 
          scale(0.7, 0.7);
          color:rgb(73, 41, 214)
      }
    }

    Fliegender Hot Dog

    Für die Animation des fliegenden Hot Dogs wurden in den keyframes die Werte translateX(), translateY() und rotate() verwendet. Die beiden ersten Werte sorgen für die Verschiebung auf der X- und Y-Aschse, wobei ein negativer translateY() Wert das Objekt nach oben versetzt. Daher ist bei 50%, das der höchste Punkt der Flugbahn sein soll, ein negativer Wert von -80px. rotate() sorgt für die Rotation des Objektes. Hierbei müssen Gradzahlen eingetragen werden.

    #hot_dog { /*Animation des fliegenden Hot-Dogs*/
      width: 47px;
      z-index: 2;
      position: relative;
      bottom: 300px;
      right: 225px;
    
      -webkit-animation-name: flying_hot_dog;
      -webkit-animation-duration: 2s;
      -webkit-animation-timing-function: linear;
      -webkit-animation-fill-mode: forwards;
      -webkit-animation-delay: 0s;
      -webkit-animation-iteration-count: 1;
      -webkit-animation-play-state: paused;
      
      animation-name: flying_hot_dog; 
      animation-duration: 2s;
      animation-fill-mode:forwards;
      animation-delay: 0s;
      animation-timing-function: linear;
      animation-iteration-count: 1;
      animation-play-state: paused;
    }
     
      @-webkit-keyframes flying_hot_dog {
        from  { transform: translateX(0px) translateY(20px)  rotate(0deg) }
        50%   { transform: translateX(220px) translateY(-80px) rotate(180deg) }
        to    { transform: translateX(440px) translateY(95px)rotate(360deg) }
      }
    
      @keyframes flying_hot_dog {
        from  { transform: translateX(0px) translateY(20px)  rotate(0deg) }
        50%   { transform: translateX(220px) translateY(-80px) rotate(180deg) }
        to    { transform: translateX(440px) translateY(95px)rotate(360deg) }
      }

    Bello und Bobby beim Ballspielen

    Die Animation der zwei spielenden Hunde war am schwierigsten zu gestalten, da hier der Zeitfaktor eine große Rolle spielt, damit alles synchron abläuft. Zunächst die Gestaltung der beiden springenden Hunde. Hierbei muss man die Sequenzen (0%-100%) der bottom-Wert ändern. Je größer der Wert, desto höher steigen die Objekte auf. Die ease-out Eigenschaft sorgt dafür, dass das Ende der Sequenz langsamer abläuft. So kommt der fließende Sprung zustande. Beide Hunde haben die selben Animationseigenschaften. Der Unterschied liegt im animation-delay. Bello fängt eine Sekunde später an zu springen als Bobby. So entsteht der abwechselnde Sprung.

    #bello { /*Ab hier folgt die Animation der zwei mit dem Ball spielenden Hunde*/
      width: 90px;
      z-index: 3;
      position: relative;
      bottom: 430px;
    
      -webkit-animation: move_bello 2s infinite;
      -webkit-animation-delay: 1s;
    
      animation: move_bello 2s infinite;
      animation-delay: 1s;
    }
    
    @-webkit-keyframes move_bello {
      from { bottom: 477px; animation-timing-function: ease-out; }
      50% { bottom: 570px; animation-timing-function: ease-out; }
       to { bottom: 477px; }
    }
    
    @keyframes move_bello {
      from { bottom: 477px; animation-timing-function: ease-out; }
      50% { bottom: 570px; animation-timing-function: ease-out; }
       to { bottom: 477px; }
    }
    
    #bobby {
      width: 90px;
      z-index: 3;
      position: relative;
      left: 200px;
      bottom: 430px;
    
      -webkit-animation: move_bobby 2s infinite;
      animation: move_bobby 2s infinite;;
    }
    
    @-webkit-keyframes move_bobby {
      from {  bottom: 477px; animation-timing-function: ease-out; }
        50% { bottom: 570px; animation-timing-function: ease-out; }
         to { bottom: 477px; }
    }

    Die Animation des Balls wurde nach dem selben Konzept wie die des Hot Dogs gestaltet. Hier bestand die Schwierigkeit mit der Positionierung und der Dauer des fliegenden Balls. Es musste alles auf die beiden springenden Hunde angepasst werden, sodass der Effekt eines Kopfballs entsteht.

    Saltomachender Bobby

    In der letzten Szene macht Bobby ein Rückwärtssalto. Dieser Effekt wurde mit den gleichen Eigenschaften wie bei dem fliegenden Hot Dog und Ball animiert. Da der Charakter sich auf einer Stelle bewegt und nur hochspringt und dreht, bleibt der translateX()vWert bei 0px. Dem entsprechend muss der translateY() und rotate() angepasst werden.

    #night_dog {
      width: 80px;
      position: relative;
      right: 380px;
      bottom: 1039px;
      -webkit-animation: salto_dog 2s infinite;
      -webkit-animation-timing-function: linear;
      animation: salto_dog 2s infinite;
      animation-timing-function: linear;
    }
    
    @-webkit-keyframes salto_dog {  /*Animation von Bobby, der eine Rückwärtsrolle macht*/
      from  { transform: translateX(0px) translateY(0px)  rotate(0deg) }
      50%   { transform: translateX(0px) translateY(-80px) rotate(-180deg) }
      to    { transform: translateX(0px) translateY(0px)rotate(-360deg) }
    }
    

    Buttons

    #button_reload {
    border-radius: 50%;
    align-items: center;
    font-size: 15px;
    display: flex;
    margin: auto;
    background-image: linear-gradient(135deg, #ee9ca7 0%, #fbed96 51%, #ee9ca7 100%); /*https://blog.avada.io/css/button-hover-effects/*/
    background-size: 200% auto;
    box-shadow: #a05a9c 0px 0px 5px; 
    margin-top: -50px;
    }
    
    #button_reload {
    -webkit-animation-name: button_load;
    -webkit-animation-duration: 3s;
    -webkit-animation-timing-function: linear;
    -webkit-animation-fill-mode: forwards;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-play-state: paused;
    -webkit-animation-direction: alternate-reverse;
    
    animation-name: button_load; 
    animation-duration: 3s;
    animation-timing-function: linear;
    animation-fill-mode: forwards;
    animation-iteration-count:infinite;
    animation-play-state: paused;
    animation-direction: alternate-reverse;
    }
    
    @-webkit-keyframes button_load {
      from  { transform: translateX(-20px) scaleX(1.0)}
      to    { transform: translateX(20px) scaleX(-1.0)}
    } 

    Die Buttons wurden im vorherigen Kapitel schon beschrieben. Nun wird näher auf die animierenden Effekte eingegangen. Der Effekt des Einblendens wurde durch die opacity Eigenschaft erzeugt, der von 0 auf 1 steigt und durch die animation-duration in die Länge gezogen wird. Der erste und letzte Button haben jedoch ein paar zusätzliche Effekte. Beim ersten Button „Aufwecken“ leuchtet der Button-Hintergrund in Weiß. Durch den versetzten box-shadow und der Dauerschleife (infinite) wird das pulsierende Leuchten erzeugt (siehe Bild ). Der letzte Button „Neustart“ dreht und bewegt sich von links nach rechts und rückwärtsrum, während sich dieser vertikal spiegelt. Die animation-direction: alternate-reverse gibt an, dass die Animation sich vor- und zurückspielen soll. Animation-timing-function sorgt für den linearen. also gleichbleibenden/flüssigen Ablauf. translateX() sorgt dafür, dass sich der Button von links nach rechts bewegt. scaleX() hingegen sorgt für die Spiegelung, wobei der negative Wert die Spiegelung an der X-Achse erzeugt.

    Gute Nacht, Bobby Schrift

    Der Abschließende Text „Gute Nacht, Bobby“ wurde mit einer Zoom-, Leucht- und Rotations-Funktion gestaltet. Wie schon zuvor erwähnt erzeugt scale() den Zoomeffekt. Für das Textleuchten ist text-shadow zuständig. rotate() sorgt für die Drehung des Textes. Der Unterschied bei dieser Textanimation liegt in der animation-timing-function. Hierbei setzt man cubic-bezier () ein um, einen Verzerrungseffekt zu erstellen.

    #good_night_bobby{ /*Verabschiedung durch "Gute Nacht" Text Animation*/
      position: relative;
      bottom: 1500px;
      font-size: 30px;
      color: white;
      -webkit-animation: push_good_night 3s infinite;
      animation: push_good_night 3s infinite;
      animation-timing-function: cubic-bezier(.1,0,.7,1);
      outline: none;
    }
    
      @-webkit-keyframes push_good_night {
       0% {
        transform: scale(1);
        text-shadow: 2px 3px 6px rgb(3, 246, 255);
      }
       20% {
        transform: scale(1.1) rotate(2deg);
      }                                                  
       40% {
        transform: scale(.97);
      }
       50% {
        text-shadow: 6px 6px 8px rgb(19, 236, 184);
     }
       60% {
        transform: scale(.99) rotate(-2deg);
     }
       80% {
        transform: scale(1.05);
     }
       100% {
        transform: scale(1);
        text-shadow: 2px 3px 6px rgb(135, 222, 241);
     }
     }
    
      @keyframes push_good_night {
       0% {
        transform: scale(1);
        text-shadow: 2px 3px 6px rgb(3, 246, 255);
      }
       20% {
       transform: scale(1.1) rotate(2deg);
      }                                                  
       40% {
       transform: scale(.97);
      }
       50% {
       text-shadow: 6px 6px 8px rgb(19, 236, 184);
    }
       60% {
       transform: scale(.99) rotate(-2deg);
    }
       80% {
       transform: scale(1.05);
    }
       100% {
       transform: scale(1);
       text-shadow: 2px 3px 6px rgb(135, 222, 241);
    }
    }

    JavaScript/jQuery

    var name = "Snoopy" /*Variable für die Namensabfrage für die Begrüßung von Bobby*/
    
    $(document).ready(function(){
    /*Funktion, bei der bei einem Buttonklick bestimmte Objekte sichtbar oder ausgeblendet werden*/
    $("#button_aufwecken").on("click", function() {  /*Button "Aufwecken"*/
        $(".story_start_scene").css({"visibility": "hidden"});
        $(".backgroundimage_livingroom").css({"visibility": "visible"}); 
        $("#hello_dog").css({"visibility": "visible"});
        $("#speak1").css({"visibility": "visible"});
        $("#button_park").css({"visibility": "visible"});
        $("#button_aufwecken").css({"visibility": "hidden"})
        $("#welcome_text").css({"visibility": "visible"});
        $("#name_text").css({"visibility": "visible"});
        $("form").css({"visibility": "visible"});
        
        $("#button_park").css({"-webkit-animation-play-state": "running"}); /*Animationen, die pausiert werden, werden hierbei zum Abspielen gebracht*/
        $("#welcome_text").css({"-webkit-animation-play-state": "running"});
    
        name = prompt("Bitte gib deinen Namen ein", "Snoopy");     /*Namensabfrage. Inspired by https://www.w3schools.com/jsref/met_win_prompt.asp*/
        console.log(name);
    
        if (name != null) {                                                                    
            document.getElementById("welcome_text").innerHTML =
            "Hallo " + name + "! Ich bin Bobby. Lass uns den Tag zusammen verbringen.";
          }
    
    });

    Um die Übergänge zwischen den einzelnen Szenen und Animationen möglich zu machen, wurde jQuery eingesetzt. Durch den Buttonklick werden Objekte, die in HTML5 auf „hidden“ gesetzt sind, sichtbar gemacht. Dafür nutzt man die $(„#button“).on(„click“, function() {}}); . Diese zeigt welche Objekte beim Buttonklick gezeigt werden und welche verschwinden sollen. Die Namensabfrage zwischen der ersten und der zweiten Szene erfolgte über JavaScript mit der promt() Methode.

    Bobby JS
    Bobby JS

    Hierbei wurde eine Variable erstellt, das einen default Wert liefert, der in der promp() Abfrage und if-loop eingefügt ist. Es öffnet sich ein Pop-up Fenster bei dem die Aufforderung „Bitte gib deinen Namen ein“ und dem default Wert „Snoopy“ steht. Diese wurden zuvor definiert. Wenn der User seinen Namen eintippt, nimmt die p id=“welcome_text“ diesen entgegen und Bobby begrüßt den User mit „Hallo [Username]! Ich bin Bobby. Lass und den Tag zusammen verbringen“. Falls das Eingabefeld leer bleibt, begrüßt Bobby den User mit dem Namen null. Durch diese Funktion wird eine Bindung zum User aufgebaut.

    Die Animationen, die mit Hilfe von transitions und keyframes in CSS3 erstellt wurden, wurden bei webkit-animation-play-state auf paused gesetzt. Der Grund dafür ist, dass bestimmte Funktionen wie animation-delay oder animation-duration ab der Start Szene anfangen zu zählen. Das war aber nicht die Intention. Es sollten alle Abläufe erst nach einem Buttonklick starten. So war das Problem z.B. bei dem zweiten Button „Lass und in den Park gehen“. Dieser wird nach 3 Sekunden eingeblendet. Wäre -webkit-animation-play-state auf running gesetzt, so hätte das Einblenden des Buttons nach 3 Sekunden nicht funktioniert, wenn man sich länger als 3 Sekunden in der Start Szene befunden hätte. Der Button wäre dann beim Szenenwechsel schon da und der Einblende Effekt wäre nicht sichtbar. Damit die einzelnen Animationen erst beim Buttonklick abspielen, muss man diese über jQuery bei -webkit-animation-play-state auf running setzen.

    $("#hot_dog_text").css({"-webkit-animation-play-state": "running"});
    $("#button_hot_dog").css({"-webkit-animation-play-state": "running"});

    Besonderheiten

    Eine Besonderheit ist die im Hintergrund eingesetzte Musik, um die Animation spannender zu gestalten und den User in eine angenehme Stimmung zu versetzen. Des Weiteren wurden so gut wie alle benutzen Objekte animiert. Es wurde versucht jedes Animationselement individuell zu gestalten, um verschiedene visuelle Effekte zu erzeugen. Die letzte Besonderheit ist, dass der letzte Button einen Neustart der Animation ermöglicht, falls man erneut das Story Telling durchspielen möchte.

    Schwierigkeiten

    Beim Erstellen der Animation traten zwei Probleme auf.

    1. Der animierte Sprechtext sollte ursprünglich abgetippt werden. Dafür wurde die step() Methode verwendet. Leider konnte ein Zeilenumbruch für die Animation nicht erstellt werden, da ansonsten der „abgetippte Text“ nicht korrekt funktioniert hat wie er es sollte. Dieser hätte in die Sprechblase passen müssen. Daher wurde eine alternative Darstellung des Textes eingebaut.
    2. Die Hintergrundmusik wird manchmal in Google Chrome nicht abgespielt. Daher wird empfohlen sich die Animation in Microsoft Edge anzuschauen.

    Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Entwicklung von Multimediasystemen (Sommersemester 2021, Amy Linh Hoang,  Prof. Dr.-Ing. Steinberg) entstanden. Verwendete Techniken sind HTML5, CSS3 und JavaScript. Die besten Tutorials stellen wir Euch hier in den nächsten Wochen nach und nach vor.

    Tutorial: Prototype erstellen mit Figma – So funktioniert’s!

    Beitragsbild

    Autor*in: Anna Selitski und Anna-Lisa Voigt


    User Experience Scala
    Von einer very bad zu einer exzellenten User Experience ©Olivier Le Moal – stock.adobe.com

    Einen Prototype in dem Designertool Figma zu erstellen ist eine sehr schnelle und einfache Sache. Vielleicht kennst du auch die Bezeichnung Klickdummy für Prototype. Wenn du mal Screens für eine App oder eine Webseite erstellst, kannst du einfach mit einem Klickdummy die User Experience und die User Journey darstellen.  Aber wie funktioniert das Erstellen von einem Prototype mit Figma? Und was sind Figma und die User Journey überhaupt? Das und weitere spannende Informationen zu diesem Thema zeigen wir dir in dem folgenden Beitrag!

    Dieser Beitrag im Überblick:

    Eine Einführung zu Figma

    Fangen wir erst einmal mit Figma an. Figma ist ein Web-basiertes Programm, welches zum Designen von Screens für eine App oder Webseite gedacht ist. Vielleicht kennst du auch das Tool Sketch. Dort kannst du auch leicht und unkompliziert Designs erstellen, jedoch spätestens wenn man zu zweit an einem Projekt arbeitet, kann man sich dort schnell in die Quere kommen. Figma hingegen ermöglicht dir das Designen von Screens mit vier oder mehr Händen! Du fragst dich wie das gehen soll? In Figma können mehrere Designer gleichzeitig an ihrem eigenen Gerät und an derselben Datei arbeiten, ohne sich dabei zu stören.

    Fünf Gründe für Figma[1]

    Fünf Gründe für Figma - Prototype erstellen
    Das sind die wichtigsten fünf Gründe für Figma. ©Song_about_summer – stock.adobe.com

    1. Das Interface von Figma:
      Wer mit Figma arbeitet merkt schnell, dass das Interface dieses Tools von Designern für Designer entwickelt wurde. Aber auch für Anfänger ist das Bedienen der Software, nach ein paar Stunden Einarbeitung, kein großes Problem mehr. Die zahlreichen Shortcuts sind unserer Meinung nach unbezahlbar! Shortcuts? Das sind unzählige Tastenkombinationen für verschiedene Werkzeuge. Somit bleiben dir Klicks und Zeit erspart!
    2. Schnell zum Ergebnis mit wenig Aufwand:
      Wie schon erwähnt ist Figma ein nutzerfreundliches Tool und du kannst den Umgang mit dem Programm schnell lernen. Aber kennst du das Problem, wenn du in einer großen Gruppe arbeitest und du immer alles hin und her schicken musst, um auf dem aktuellsten Stand zu bleiben? Und dann musst du auf das Dokument deines Gruppenmitglieds warten, um mit deiner Arbeit anfangen zu können. Tja, bei Figma kommt sich bei einer Gruppenarbeit keiner mehr in die Quere, denn jeder kann an seinem Gerät in der gemeinsamen Datei arbeiten! Wir finden das großartig, denn so kann jeder die Schritte des anderen verfolgen und dementsprechend seine Arbeit anpassen. Somit musst du nicht mehr auf die anderen warten, bis du mit deiner Aufgabe anfangen kannst.
    3. Verknüpfungen:
      Jetzt fragst du dich sicherlich was Figma nicht kann? Figma ist ein Tool für die interaktive Gestaltung von Screens, hat aber auch seine Schwächen. Diese umgeht Figma mit Verknüpfungen zu anderen Tools, wie Sketch oder Photoshop. So kannst du ganz leicht Funktionen von anderen Programmen über Figma verwenden.
    4. Für jeden und zu jeder Zeit verfügbar:
      Du verspürst mitten in der Nacht den Drang, an deinen Screens weiterzuarbeiten, aber dein Gerät liegt auf der Arbeit? Mit Figma kannst zu jederzeit und überall auf deine Dateien zugreifen, solange du einen Internetzugang und deine Zugangsdaten hast.
    5. Immer aktuell sein:
      Das lästige Problem mit der Aktualität der Dateien ist mit Figma Geschichte. Kein ständiges Fragen mehr, welche Version die aktuellste ist, denn es gibt nur noch die eine Version, die online ist! Auch das selbstständige Speichern von Figma erleichtert deine Arbeit und Ergebnisse können nicht mehr verloren gehen. Perfekt, oder?!

    Prototype, User Journey – Was genau ist das?

    Ein Klickdummy wird für ein Projekt erarbeitet
    Du kannst einen Prototype erstellen, um die Funktionen und den Sinn von Interaktionsmodulen deiner zukünftigen App zu zeigen.  ©artursfoto – stock.adobe.com

    Einen Prototype benötigst du dann, wenn du Funktionen und Sinn von bestimmten Buttons und Interaktionsmodulen zeigen möchtest. Du kannst einen Klickdummy auch für die Darstellung der User Journey, also der Weg, den der Nutzer in deiner App oder auf deiner Webseite beschreiten soll, zeigen[2].
    Sowas ist dann nützlich, wenn du zum Beispiel die Screens  deinem Auftraggeber vorstellen möchtest. Mit einem Klickdummy kann sich der Auftraggeber besser vorstellen, welche Funktionen ein Button auslöst, wenn der Nutzer darauf klickt. Außerdem ist so ein Prototype auch dann sinnvoll, wenn du deine Logik der User Experience überprüfen möchtest. Denn es kann schon mal vorkommen, dass man zum Beispiel vergisst, einen Zurück-Button einzubauen und der Nutzer nicht mehr den Weg nach Hause – also zur Home Seite – findet.

    Tutorial: Wie erstelle ich einen Prototype in Figma?

    Jetzt fragst du dich wie das gehen soll? Kein Problem, zu Beginn musst du dafür die Figma Datei öffnen. Wenn  du dort noch keine Screens angelegt hast, machst du das jetzt erst einmal.  Du wirst die Screens benötigen, welche du anschließend miteinander zu einem Prototype verbinden möchtest.

    Schritt 1:

    Hast du die Screenshots angelegt? Falls du mit ja antwortest, klickst du einfach oben rechts auf das Symbol Prototype. Du weißt nicht genau wo? Siehst du den orangen Pfeil im Screenshot? Er zeigt dir genau den Bereich, den du auswählen solltest. Der Prototype Bereich öffnet sich anschließend nach der Auswahl rechts in Figma (Schritt 1).

    Prototype erstellen
    Schritt 1: Klicke oben rechts auf Prototype (zum Vergrößern anklicken) ©Voigt; Selitski

    Schritt 2:

    Jetzt klickst du  auf das gewünschte Objekt, also die Stelle, wo der Nutzer hinklicken wird (Schritt 2).

    Prototype erstellen über Figma
    Schritt 2: Wähle das gewünschte Objekt aus (zum Vergrößern anklicken) ©Voigt; Selitski

    Schritt 3:

    Nun siehst du um das ausgewählte Objekt herum den Umriss eines blauen Vierecks. Klicke auf den Punkt, der sich auf der rechten Kante des Vierecks befindet und halte dabei deine Maustaste gedrückt. Ziehe nun deine Maus auf den nächsten Screen, der danach angezeigt werden soll. Jetzt kannst du einen blauen Pfeil sehen, der von dem ausgewählten Objekt auf den nächsten Screen zeigt (Schritt 3).

    Prototype erstellen
    Schritt 3: Der blaue Pfeil zeigt auf den nächsten Screen Kalender. Jetzt sind die Screens miteinander verbunden (zum Vergrößern anklicken) ©Voigt; Selitski

    In dem von uns dargestellten Beispiel, wählten wir die App Kalender von dem Screen Startscreen aus. Die Kalenderapp soll sich nun bei einem Klick oder Touch mit dem Finger öffnen, dies zeigt jetzt der blaue Pfeil, welcher auf den nächsten Screen Kalender zeigt.

    Auf diese Art und Weise kannst du nun weitere Screens mit den vorherigen verbinden und so die User Journey des Nutzers in deiner App oder Webseite darstellen. Genauso kannst du ganz schnell und einfach einen Prototype in Figma erstellen!

    Schritt 4:

    Pass dabei auf, dass du die richtigen Objekte mit den richtigen Screens zusammenführst. Sodass der Prototype die richtige, und von dir gewünschte, Reihenfolge anzeigt. Um die richtige Reihenfolge zu kontrollieren, kannst du dich an den blauen Pfeilen orientieren (Schritt 4).

    Prototype erstellen
    Schritt 4: Kontrolliere die Reihenfolge deines Prototypes anhand der blauen Pfeile (zum Vergrößern anklicken) ©Voigt; Selitski

    In unserem Beispiel zeigen wir dir, dass wir vom Startscreen anfangen und auf das App-Symbol des Kalenders drücken. Daraufhin öffnet sich der Kalender, jetzt wollen wir einen Kalendereintrag hinzufügen. Dafür drücken wir auf das runde Plus-Icon und der Kalendereintrag öffnet sich.

    Schritt 5:

    Wenn du alle Schritte erfolgreich erledigt hast und die Pfeile soweit stimmen, ist es an der Zeit, den Klickdummy zu starten. Dafür klickst du einfach oben links, bei dem ersten Screen, auf das blaue Viereck mit dem weißen Dreieck (Schritt 5).

    Prototype erstellen - Schritt 5
    Schritt 5:  Klick nun oben links auf das blaue Viereck (zum Vergrößern anklicken) ©Voigt; Selitski

    Daraufhin öffnet sich in einer neuen Datei der, von dir erstellte, Prototype. Jetzt kannst du auf die Objekte klicken, die du zuvor ausgewählt hast. Wenn daraufhin der nächste angezeigte Screen der Richtige ist, stimmt deine User Journey überein und der Prototype ist bereit für die Vorstellung bei deinem Auftraggeber!

    Prototype erstellen – Alle Schritte auf einem Blick

    1. Klicke auf Prototype oben rechts bei den Werkzeugtools.
    2. Wähle das gewünschte Objekt, welches du in dem Prototype anklicken möchtest.
    3. Klicke auf den Punkt innerhalb des blauen Vierecks und ziehe diesen zum gewünschten Screen.
    4. Wiederhole jetzt die gleichen Schritte (Schritt 2) für die nächsten Screens.
    5. Klicke oben rechts auf den Pfeil, um den Prototype zu starten.

    Etwas hat nicht geklappt, oder hast du vielleicht einen Schritt vergessen? Keine Panik! Im folgenden Video Prototype / Klickdummy über Figma erstellen zeigen wir dir, die einzelnen Schritte per Desktopaufnahme.

    Das Prototype-Testing mit Figma Mirror

    Du kannst den Klickdummy und die User Journey auch mit der App Figma Mirror testen. Dies bringt dir den Vorteil, dass du deine erstellten Screens auch auf deinem Smartphone sehen kannst. So kannst du das Look and Feel deiner Screens auf deinem Smartphone bekommen. Auch die Größe von deinen Objekten und Texten kannst du so überprüfen.

    Dafür brauchst du nur Figma Mirror aus dem Play Store oder dem App Store auf dein Smartphone/Tablet herunterladen. Anschließend meldest du dich mit deinen gewohnten Daten aus Figma an. Zu guter Letzt klickst du in deiner Arbeitsmappe auf den Startscreen deines Prototypes, dieser wird dir nun auf deinem Smartphone angezeigt. Jetzt kannst du auf deine ausgewählten Objekte tippen und so überprüfen, ob der darauffolgende Screen der Gewünschte ist und ob die User Journey mit der gezeigten Reihenfolge übereinstimmt.

    Ein Tipp von uns: Wenn du die User Journey von einer App darstellen möchtest, nimm am besten dafür dein Smartphone. Möchtest du  dir aber eine Webseite anschauen, welche noch nicht responsiv ist, verwende dafür lieber die App auf einem Tablet.

    Viel Erfolg!

    great user experience
    Mit einer exzellenten User Experience hast du auch zufriedene Nutzer ©blacksalmon – stock.adobe.com

    Wir hoffen, dass wir dir mit der Anleitung für die Erstellung eines Prototypes mit Figma helfen konnten und du damit deine User Journey darstellen kannst!


    Quellen

    Auf die [Hochzahl] klicken, um zum zugehörigen Absatz zurückzukehren.

    1 Vgl. Ornella (2018): Designen mit vier Händen: 5 Gründe warum du Figma brauchst. Online unter https://www.dieproduktmacher.com/blog/designen-mit-vier-haenden-5-gruende-warum-du-figma-brauchst [Abruf am 06.06.2020]

    2 Vgl. usability.de (o. J.): User Experience ganzheitlich verstehen und optimieren. Online unter https://www.usability.de/leistungen/methoden/user-journey-mapping.html [Abruf am 06.06.2020]


    Dieser Beitrag ist im Studiengang Informationsmanagement an der Hochschule Hannover im Rahmen des Kurses Content Management (Sommersemester 2020, Andre Kreutzmann) entstanden.

    Die besten Tutorials stellen wir Euch hier in den nächsten Wochen nach und nach vor.