final small changes

This commit is contained in:
baldeau 2024-03-22 03:20:50 +01:00
parent 31fd6a413f
commit 05455c7793
11 changed files with 93 additions and 24 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -103,6 +103,17 @@
file = {/Users/fabian/Zotero/storage/Z2MJS6AP/crops.html}
}
@software{CunaristRinf2024,
title = {Cunarist/Rinf},
date = {2024-03-21T21:50:33Z},
origdate = {2023-02-15T14:47:18Z},
url = {https://github.com/cunarist/rinf},
urldate = {2024-03-22},
abstract = {Rust for native business logic, Flutter for flexible and beautiful GUI},
organization = {Cunarist},
keywords = {android,app,cross-platform,dart,ffi,flutter,gui,ios,linux,macos,production-ready,restful-api,rust,web,windows}
}
@online{CustomFlutterEnginec,
title = {Custom {{Flutter Engine Embedders}}},
url = {https://github.com/flutter/flutter/wiki/Custom-Flutter-Engine-Embedders},
@ -910,6 +921,14 @@
file = {/Users/fabian/Zotero/storage/4YEIHLEH/why-gnu-linux.en.html}
}
@online{Riverpod,
title = {Riverpod},
url = {https://riverpod.dev/},
urldate = {2024-03-22},
langid = {english},
file = {/Users/fabian/Zotero/storage/KM39FJQT/riverpod.dev.html}
}
@online{Roadmap,
title = {Roadmap},
url = {https://github.com/flutter/flutter/wiki/Roadmap},
@ -927,6 +946,17 @@
publisher = {Université de Liège, Liège, Belgique}
}
@software{rousseletRrousselGitRiverpod2024,
title = {{{rrousselGit}}/Riverpod},
author = {Rousselet, Remi},
date = {2024-03-21T23:37:31Z},
origdate = {2020-04-16T10:40:29Z},
url = {https://github.com/rrousselGit/riverpod},
urldate = {2024-03-22},
abstract = {A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.},
keywords = {dart,flutter,hacktoberfest,inheritedwidget,provider,riverpod,service-locator,state-management}
}
@online{RpifirmwareAddFirmware,
title = {Rpi-Firmware: Add Firmware for Zero 2w by Classabbyamp · {{Pull Request}} \#39123 · Void-Linux/Void-Packages},
url = {https://github.com/void-linux/void-packages/pull/39123},

Binary file not shown.

View File

@ -2,26 +2,20 @@
\renewcommand{\headrulewidth}{0pt}
\begin{abstract}
Die Integration von Flutter's plattformübergreifenden
UI-Fähigkeiten mit der Anpassungsfähigkeit von Embedded
Linux verspricht die Rationalisierung der Entwicklung
von Benutzeroberflächen (UIs) für eingebettete Systeme.
Diese Arbeit untersucht die Eignung von Flutter in
\subsection*{Abstract}
\noindent
Die Nutzung des quelloffenen Benutzerschnittstellen-Entwicklungs-Kit
Flutter für eingebettete Linux-Systeme ist ein neuer Ansatz, der
die Entwicklung von Benutzeroberflächen für eingebettete Systeme
vereinfachen könnte. Diese Arbeit untersucht deswegen die Eignung von Flutter in
diesem Kontext durch eine Fallstudie: die Entwicklung
einer Demo Anwendung mit Flutter für einen Raspberry
Pi mit einer angepassten eingebetteten Linux Distribution.
Leistungsmesswerte und der Entwicklungsprozess werden bewertet.
Leistungsmesswerte und der Entwicklungsprozess werden dokumentiert.
Die Ergebnisse zeigen, dass Flutter, wenn es angepasst wird,
erfolgreich zur Erstellung von attraktiven und benutzerfreundlichen
eingebetteten Schnittstellen mit wenigen Kompromissen
bei der Leistung genutzt werden kann. \\
Die Arbeit beschäftigt sich im Wesentlichen mit der Entwicklung einer
prototypischen Anwendung mit Flutter für ein eingebettetes Linux System.
Dabei wurde ein Konzept ausgearbeitet, dass zeigt wie Flutter in
eingebetteten Linux Systemen genutzt werden kann und es wurde anhand der
prototypischen Anwendung untersucht, wie gut Flutter für diesen
Verwendungszweck geeignet ist. Es wurden dabei speziell die Embedder
bei der Leistung genutzt werden kann. Es wurden dabei speziell die Embedder
Flutter-Pi und Flutter-Auto genauer untersucht.
\end{abstract}

View File

@ -118,6 +118,28 @@ Für die Demo App ist dies besonders wichtig, da die Anwendung als
Einstiegspunkt so später umstrukturiert werden kann für andere
Anwendungen, die auf der Demo App aufbauen.
## Riverpod
Riverpod ist ein einfaches, aber leistungsstarkes
State-Management-Tool für Flutter. Es wurde entwickelt,
um die Verwaltung des Zustands in Flutter-Anwendungen
zu vereinfachen [@rousseletRrousselGitRiverpod2024]. In dem Projekt wurde
Riverpod genutzt, um die Zustandsverwaltung der Anwendung
zwischen der Prästentations- und Geschäftsschicht zu
verwalten. In der Präsentationsschicht werden die
Provider genutzt, um den Zustand von diesen auszulesen und
in der Geschäftsschicht werden die Provider mithilfe des
Riverpod Generators generiert.
Der Riverpod Generator ist ein Code-Generator, der
mit Riverpod verwendet wird, um die Provider und anderen
Boilerplate-Code automatisch zu generieren. Genutzt wird
der Generator mit der Definition "@riverpod" am Anfang
einer Klasse oder Funktion. Mit dem Paket "_riverpod_annotation_"
werden dabei Hinweise im Code Editor angezeigt, die zeigen,
ob der Code für den Generator korrekt ist oder nicht.
Das Projekt ist so konfiguriert, dass "_riverpod_annotation_"
aktiviert ist. Generierte Dart Dateien enden mit "_.g.dart_".
<!-- eine Klasse pro File, Ausnahmen eng zusammengehörige Klassen
wie zB. Stateful Widgets

View File

@ -450,3 +450,5 @@ Der Fehler tritt wahrscheinlich auf, weil die Anwendung nicht den Einstiegspunkt
in der "_MaterialApp_" richtig neuladen kann. Es ist aber unklar wieso
es nur beim ersten Mal passiert und die Fehlernachricht hilft in diesem
Fall nicht weiter.
# Implementierung der Features {#features}

View File

@ -1,7 +1,3 @@
\pagebreak
# Implementierung der Features {#features}
Im Folgenden wird die Implementierung der
einzelnen Features des Projektes beschrieben. Jedes
Feature beschreibt einen Seitenbereich in der entwickelten Flutter Anwendung.
@ -45,8 +41,6 @@ besteht aus einem einfachen Screen, der
nur den Text "Flutter on Embedded Linux" anzeigt (siehe Abbildung
\ref{homeScreen}).
\pagebreak
\begin{multicols}{2}
\begin{figure}[H]

View File

@ -5,6 +5,8 @@ Raster aus Karten mit den verschiedenen Benchmark Tests,
welche ausgewählt werden können (siehe Abbildung \ref{benchmark}).
Im folgenden wird jeder Benchmark Test genauer beschrieben.
\pagebreak
\begin{multicols}{2}
\begin{figure}[H]
@ -90,6 +92,8 @@ erlaubt es normalen GLSL Shader Code in der Engine zu verwenden, der Code
muss dazu nur manchmal leicht angepasst werden [@googleinc.WritingUsingFragment].
Der Shader Code von Shader Toy musste nur leicht angepasst werden.
\pagebreak
\begin{multicols}{2}
\begin{figure}[H]
@ -129,6 +133,8 @@ Im Test kann man visuell beobachten, ob die Karte flüssig bewegt
werden kann und wie schnell die Tiles aus dem Internet geladen werden können
(siehe Abbildung \ref{benchmarkMap}).
\pagebreak
\begin{multicols}{2}
\begin{figure}[H]

View File

@ -13,8 +13,6 @@ Angeboten, welche explizit unter der CC-Lizenz stehen.
Außerdem soll man mit nicht mehr als 60 Abrufen pro Stunde tätigen,
was für die Testzwecke in dieser Arbeit ausreichend ist [@TagesschauAPIOpenAPIa].
\pagebreak
\Begin{multicols}{2}
\begin{figure}[H]

View File

@ -147,6 +147,17 @@ umzusetzen. Der Einsatz der CustomPainter in Flutter zeigte auch, dass man
falls notwendig in Flutter relativ einfach angepasste komplexere Widgets
erstellen kann wie die Pixel-Matrix für die Ansteuerung der RGB-Matrix.
Mit dem zusätzlichen Testgerät Raspberry Pi Zero 2W konnte gezeigt werden,
dass Flutter auch auf schwächeren Geräten lauffähig ist und die Anwendung
läuft auf diesem Gerät auch weitesgehend flüssig, kam jedoch hin und wieder
an seine Grenzen. Der Leistungsbereich eines Pi Zero 2W scheint hier also im
Bereich der minimalen Anforderungen von Flutter zu liegen. Für Anwendungen
ohne stark aufwendige Animationen und an kleinen Displays mit einer niedrigen
Auflösung ist der Pi Zero 2W durchaus noch gut zur Nutzung geeignet. In der
Programmierung sollte auch besser versucht werden den Verbrauch vom Arbeitsspeicher
gering zu halten und Sicherheitsmaßnahmen treffen, welche verhindern, dass
der Arbeitsspeicher überläuft und die Anwendung abstürzt.
## Zukünftige Verbesserungen und Ideen
### Behebung von Fehlern
@ -174,4 +185,16 @@ Der zusätzliche Wechsel von OpenGL zu Vulkan könnte die
Leistung eventuell auch verbessern, da Vulkan eine modernere
API ist und der Nachfolger von OpenGL ist. [@googleinc.ImpellerRenderingEngine]
### Nutzung von Rust
Mit dem Projekt "_rinf_" (Rust in Flutter) ist es möglich ohne
großen Aufwand Rust Code in Flutter zu nutzen [@CunaristRinf2024]. Rust ist eine
sehr performante Programmiersprache die genutzt werden könnte
um die Leistung von Flutter im eingebetteten Bereich zu verbessern,
indem Funktionen die viel Rechenleistung benötigen in Rust
implementiert werden. Besonders bei leistungsschwachen Geräten
wie dem Raspberry Pi Zero 2W könnte dies die Leistung
verbessern. Die Nutzung von Rinf mit Yocto müsste dazu
getestet werden.
# Schlussfolgerung