diff --git a/assets/figures/chapter-2/2.1.hash-functions-1.png b/assets/figures/chapter-2/2.1.hash-functions-1.png index d651fc4..054149a 100644 Binary files a/assets/figures/chapter-2/2.1.hash-functions-1.png and b/assets/figures/chapter-2/2.1.hash-functions-1.png differ diff --git a/assets/figures/chapter-2/2.1.hash-functions-2.png b/assets/figures/chapter-2/2.1.hash-functions-2.png index 84d3cc2..281ecb1 100644 Binary files a/assets/figures/chapter-2/2.1.hash-functions-2.png and b/assets/figures/chapter-2/2.1.hash-functions-2.png differ diff --git a/assets/figures/chapter-2/2.4.p2p-networks.png b/assets/figures/chapter-2/2.4.p2p-networks.png new file mode 100644 index 0000000..56d511b Binary files /dev/null and b/assets/figures/chapter-2/2.4.p2p-networks.png differ diff --git a/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png b/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png index 45c172d..00cb691 100644 Binary files a/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png and b/assets/figures/chapter-3/3.8.implementation-methodology-specification-sprints.png differ diff --git a/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png b/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png deleted file mode 100644 index 04d4255..0000000 Binary files a/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png and /dev/null differ diff --git a/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png b/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png deleted file mode 100644 index 2d3c295..0000000 Binary files a/assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png and /dev/null differ diff --git a/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png b/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png index 2e7fb89..46131c1 100644 Binary files a/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png and b/assets/figures/chapter-4/4.6.design-implementation-differences-sprints.png differ diff --git a/bibliography/references.bib b/bibliography/references.bib index 13f7847..866c56e 100644 --- a/bibliography/references.bib +++ b/bibliography/references.bib @@ -95,11 +95,6 @@ title = {IPFS documentation}, url = {https://docs.ipfs.io/} } -@misc{2.7-merkle-dags-proto-school, - title = {Merkle DAGs: Structuring Data for the Distributed Web}, - author = {ProtoSchool}, - url = {https://proto.school/merkle-dags/} -} @online{4.1-github-flow, title = {Understanding the GitHub flow}, author = {GitHub Guides}, diff --git a/chapters/0.preamble/0.1.summary.tex b/chapters/0.preamble/0.1.summary.tex index 5229d2f..9867fc4 100644 --- a/chapters/0.preamble/0.1.summary.tex +++ b/chapters/0.preamble/0.1.summary.tex @@ -4,7 +4,7 @@ Τις τελευταίες δεκαετίες, η ραγδαία ανάπτυξη του διαδικτύου μετέβαλε ριζικά τις ανθρώπινες κοινωνίες, μέσω μίας πληθώρας ψηφιακών εφαρμογών, οι οποίες, στη συντριπτική τους πλειοψηφία, προσφέρονται από παρόχους υπηρεσιών υπολογιστικού νέφους, ακολουθώντας την αρχιτεκτονική πελάτη-εξυπηρετητή. -Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτα απ' όλα, ο χρήστης καλείται να εμπιστευθεί τα προσωπικά του δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. +Μολονότι αυτό το μοντέλο υλοποίησης έχει αποδειχθεί ιδιαίτερα λειτουργικό και έχει βελτιωθεί αξιοσημείωτα ανά τα χρόνια, η συγκεντρωτική του λογική συνοδεύεται από μία σειρά προβλημάτων. Πρώτον, οι χρήστες καλούνται να εμπιστευθούν τα προσωπικά τους δεδομένα σε μία εξωτερική οντότητα. Εκείνη, διατηρώντας τον πλήρη έλεγχο επί αυτών, αποκτάει τη δυνατότητα να τα επεξεργάζεται, να τα διαμοιράζεται και να τα λογοκρίνει, είτε για να εξυπηρετήσει τα συμφέροντά της, είτε για να συμμορφωθεί με άλλες αρχές που της ασκούν εξουσία. Επιπλέον, απουσιάζει η εγγύηση της διαθεσιμότητας των δεδομένων, καθώς, ανά πάσα στιγμή, ο εξυπηρετητής μπορεί να αποσυνδεθεί για αόριστο χρονικό διάστημα και λόγω ποικίλων αιτιών, όπως κάποιας κυβερνοεπίθεσης ή κάποιας φυσικής καταστροφής. Αυτοί είναι μερικοί βασικοί λόγοι που συνετέλεσαν στην ταχεία ανάπτυξη ενός συνόλου καινοτόμων λογισμικών ανοιχτού κώδικα, τα οποία βασίζονται σε τεχνολογίες όπως το blockchain και τα δίκτυα ομότιμων κόμβων. Τα παραπάνω, αν και βρίσκονται σε σχετικά πρώιμο στάδιο, αποτελούν ήδη ισχυρά εργαλεία δημιουργίας κατανεμημένων και αποκεντρωμένων εφαρμογών. @@ -12,6 +12,6 @@ η οποία, αξιοποιώντας τεχνολογίες αποκέντρωσης, αφενός θα επιστρέφει την κυριότητα των προσωπικών δεδομένων στον χρήστη, αφετέρου θα παρέχει τη δυνατότητα διενέργειας διαφανών δημοκρατικών ψηφοφοριών. Αυτά μέσα σε ένα πλαίσιο ανθεκτικό, τόσο σε σφάλματα και επιθέσεις, όσο και σε απόπειρες λογοκρισίας και παραποίησης. -Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τα Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο. +Η αναπτυχθείσα πιλοτική εφαρμογή "Concordia" προσεγγίζει τον παραπάνω στόχο συνδυάζοντας τις τεχνολογίες Ethereum και IPFS, ώστε να ορίσει έναν αποκεντρωμένο ψηφιακό χώρο, τόσο σε αρχιτεκτονικό όσο και πολιτικό επίπεδο. \\[2\baselineskip] \textbf{Λέξεις-Κλειδιά}: Αποκεντροποίηση, Ethereum, Blockchain, Έξυπνο Συμβόλαιο, Αποκεντρωμένη Εφαρμογή, IPFS, OrbitDB, React, Redux, Jenkins \ No newline at end of file diff --git a/chapters/0.preamble/0.2.abstract.tex b/chapters/0.preamble/0.2.abstract.tex index bf9ce10..8c48414 100644 --- a/chapters/0.preamble/0.2.abstract.tex +++ b/chapters/0.preamble/0.2.abstract.tex @@ -1,16 +1,15 @@ \chapter*{Abstract} \addcontentsline{toc}{chapter}{Abstract} -\textenglish{In recent decades, the rapid growth of the internet has radically changed human -societies, through a plethora of digital applications, the vast majority of which are offered by cloud computing service providers, following the client-server architecture. +\textenglish{In recent decades, the rapid growth of the internet has radically changed society, through a plethora of digital applications, the vast majority of which are offered by cloud computing service providers, following the client-server architecture. -Although this implementation model has proven to be highly functional and has improved significantly over the years, its centralized logic is accompanied by a number of problems. First of all, the user is required to trust his personal data to an external entity. Maintaining full control over them, the latter gains the ability to process, share and censor them, either to serve its own interests or to comply with other authorities in power. Furthermore, there is no guarantee of data availability, as, at any time, the server can be disconnected indefinitely and for a variety of reasons, such as a cyber attack or a natural disaster. +Although this implementation model has proven to be highly functional and has improved significantly over the years, its centralized logic is accompanied by a number of problems. Firstly, users are required to trust their personal data to an external entity. Maintaining full control over them, the latter gains the ability to process, share and censor them, either to serve its own interests or to comply with other authorities in power. Furthermore, there is no guarantee of data availability, as, at any time, the server can be disconnected indefinitely and for a variety of reasons, such as a cyber attack or a natural disaster. -These are some of the key factors that have led to the rapid development of a wide range of innovating open source software, that are based on technologies such as blockchain and peer-to-peer networks. The aforementioned, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications. +These are some of the key factors that have led to the rapid development of a wide range of innovating open source software, that are based on technologies such as blockchain and peer-to-peer networks. The aforementioned technologies, although at a relatively early stage, are already powerful tools for creating distributed and decentralized applications. The goal of this thesis is the implementation of an autonomous social platform, which, by utilizing decentralization technologies, on the one hand will return the ownership of the data to the end user, on the other hand will provide transparent democratic voting processes. These in a context resistant to both faults and attacks, as well as attempts at censorship and falsification. The developed proof of concept application "Concordia" approaches the above goal by combining Ethereum and IPFS, in order to define a digital space, that is decentralized both at architectural and political level. \\[2\baselineskip] -\textbf {Keywords}: Decentralization, Ethereum, Blockchain, Smart Contract, Decentralized Application, IPFS, OrbitDB, React, Redux, Jenkins} \ No newline at end of file +\textbf {Keywords}: Decentralization, Ethereum, Blockchain, Smart Contract, Decentralized Application, IPFS, OrbitDB, React, Redux, Jenkins} diff --git a/chapters/1.introduction/1.0.introduction.tex b/chapters/1.introduction/1.0.introduction.tex index 523db09..c427bf1 100644 --- a/chapters/1.introduction/1.0.introduction.tex +++ b/chapters/1.introduction/1.0.introduction.tex @@ -5,4 +5,5 @@ \input{chapters/1.introduction/1.3.problem-definition} \input{chapters/1.introduction/1.4.thesis-goal} \input{chapters/1.introduction/1.5.methodology} -\input{chapters/1.introduction/1.6.document-structure} \ No newline at end of file +\input{chapters/1.introduction/1.6.typography} +\input{chapters/1.introduction/1.7.document-structure} \ No newline at end of file diff --git a/chapters/1.introduction/1.6.typography.tex b/chapters/1.introduction/1.6.typography.tex new file mode 100644 index 0000000..855ad31 --- /dev/null +++ b/chapters/1.introduction/1.6.typography.tex @@ -0,0 +1,9 @@ +\section{Τυπογραφικές παραδοχές} \label{section:1-6-typography} + +Το παρόν έγγραφο αποτυπώνεται με τη γραμματοσειρά Linux Libertine O\footnote{\url{https://libertine-fonts.org/}}, ενώ για τα κομμάτια κώδικα χρησιμοποιείται η Hack\footnote{\url{https://sourcefoundry.org/hack/}}. Το μέγεθος του κυρίως κειμένου είναι 12pt και το διάστιχό του είναι επαυξημένο του προκαθορισμένου κατά το ήμισυ για άνεση κατά την ανάγνωση. + +Καταβάλλεται η μέγιστη δυνατή προσπάθεια για τη χρήση ελληνικών όρων, όπου αυτό είναι εφικτό, με τους αντίστοιχους αγγλικούς να τους συνοδεύουν σε ακόλουθες παρενθέσεις. Τα εισαγωγικά που χρησιμοποιούνται είναι τα διπλά γωνιώδη (« »), τόσο για ελληνικούς, όσο και για ξενόγλωσσους χαρακτηρισμούς. + +Επίσης, αριθμούνται επί της συνολικής έκτασης της εργασίας οι λεζάντες των σχημάτων και των πινάκων, οι υποσημειώσεις και οι βιβλιογραφικές αναφορές, με τις τελευταίες να παρατίθενται στο τέλος του εγγράφου. + +Τέλος, επισημαίνεται ότι η συγγραφή της αναφοράς πραγματοποιήθηκε στο ηλεκτρονικό τυπογραφικό σύστημα \LaTeX. Ο πηγαίος της κώδικας μπορεί να βρεθεί στο αντίστοιχο αποθετήριο κώδικα της διπλωματικής εργασίας\footnote{\url{https://gitlab.com/ecentrics/thesis-report}.}. diff --git a/chapters/1.introduction/1.6.document-structure.tex b/chapters/1.introduction/1.7.document-structure.tex similarity index 75% rename from chapters/1.introduction/1.6.document-structure.tex rename to chapters/1.introduction/1.7.document-structure.tex index adad267..46dd5c9 100644 --- a/chapters/1.introduction/1.6.document-structure.tex +++ b/chapters/1.introduction/1.7.document-structure.tex @@ -1,4 +1,4 @@ -\section{Οργάνωση κεφαλαίων}\label{section:1-6-document-structure} +\section{Οργάνωση κεφαλαίων}\label{section:1-7-document-structure} Η παρούσα διπλωματική εργασία οργανώνεται σε κεφάλαια, ενότητες και υποενότητες, όπως αυτά διατυπώνονται στα \hyperref[toc]{Περιεχόμενα}. Πιο συγκεκριμένα: @@ -8,5 +8,7 @@ \item Στο \hyperref[chapter:3-application-design]{\textbf{Κεφάλαιο 3}} αναλύεται η διαδικασία της σχεδίασης της εφαρμογής. \item Στο \hyperref[chapter:4-application-implementation]{\textbf{Κεφάλαιο 4}} περιγράφεται η διαδικασία υλοποίησης της πιλοτικής εφαρμογής Concordia. \item Στο \hyperref[chapter:5-conclusions-open-areas]{\textbf{Κεφάλαιο 5}} παρουσιάζονται τα συμπεράσματα της εργασίας (\ref{section:5-1-conclusions}), καθώς και διάφορες πιθανές μελλοντικές επεκτάσεις (\ref{section:5-2-open-areas}). - \item Τέλος, το \hyperref[{screenshots-appendix}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής. + \item Το \hyperref[{appendix-a}]{\textbf{Παράρτημα Αʹ}} περιέχει στιγμιότυπα οθόνης της υλοποιημένης εφαρμογής. + \item Το \hyperref[{appendix-b}]{\textbf{Παράρτημα Βʹ}} περιλαμβάνει πίνακες με στατιστικά του αναπτυχθέντα κώδικα. + \item Τέλος, παρατίθενται οι \textbf{βιβλιογραφικές αναφορές} που χρησιμοποιήθηκαν στο κείμενο. \end{itemize} diff --git a/chapters/2.theoretical-background/2.1.hash-functions.tex b/chapters/2.theoretical-background/2.1.hash-functions.tex index 8b6580a..2fe779c 100644 --- a/chapters/2.theoretical-background/2.1.hash-functions.tex +++ b/chapters/2.theoretical-background/2.1.hash-functions.tex @@ -4,7 +4,7 @@ \begin{figure}[H] \centering - \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-1.png} + \includegraphics[width=.9\textwidth]{assets/figures/chapter-2/2.1.hash-functions-1.png} \caption{Λειτουργία συνάρτησης κατακερματισμού} \end{figure} @@ -19,7 +19,7 @@ \begin{figure}[H] \centering - \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.1.hash-functions-2.png} + \includegraphics[width=.9\textwidth]{assets/figures/chapter-2/2.1.hash-functions-2.png} \caption{Παράδειγμα λειτουργίας συνάρτησης κατακερματισμού} \end{figure} diff --git a/chapters/2.theoretical-background/2.3.merkle-trees.tex b/chapters/2.theoretical-background/2.3.merkle-trees.tex index 7067877..7bd5087 100644 --- a/chapters/2.theoretical-background/2.3.merkle-trees.tex +++ b/chapters/2.theoretical-background/2.3.merkle-trees.tex @@ -6,7 +6,7 @@ \begin{figure}[H] \centering - \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.3.merkle-tree.png} + \includegraphics[width=.85\textwidth]{assets/figures/chapter-2/2.3.merkle-tree.png} \caption{Παράδειγμα δυαδικού δένδρου Merkle} \end{figure} diff --git a/chapters/2.theoretical-background/2.4.p2p-networks.tex b/chapters/2.theoretical-background/2.4.p2p-networks.tex index aa6610e..d9100ce 100644 --- a/chapters/2.theoretical-background/2.4.p2p-networks.tex +++ b/chapters/2.theoretical-background/2.4.p2p-networks.tex @@ -1,6 +1,12 @@ \section{Δίκτυα Ομότιμων Κόμβων} \label{section:2-4-p2p-networks} -Τα δίκτυα ομότιμων κόμβων ή Peer-to-Peer (P2P) networks αποτελούν μία κατανεμημένη αρχιτεκτονική δικτύων, οι συμμετέχοντες (κόμβοι) της οποίας μοιράζονται ένα τμήμα των πόρων τους, με στόχο την παροχή κάποιας υπηρεσίας (π.χ. τον διαμοιρασμό περιεχομένου). Εν αντιθέσει με συγκεντρωτικά δίκτυα τύπου client/server, οι κόμβοι (nodes) έχουν απευθείας πρόσβαση στους πόρους, χωρίς τη διαμεσολάβηση ενδιάμεσων οντοτήτων. Οι συμμετέχοντες ενός τέτοιου δικτύου είναι, δηλαδή, ταυτόχρονα, τόσο πάροχοι, όσο και αιτούντες των πόρων και της παρεχόμενης υπηρεσίας.\cite{2.4-p2p-networking} +Τα δίκτυα ομότιμων κόμβων ή Peer-to-Peer (P2P) networks αποτελούν μία κατανεμημένη αρχιτεκτονική δικτύων, οι συμμετέχοντες (κόμβοι) της οποίας μοιράζονται ένα τμήμα των πόρων τους, με στόχο την παροχή κάποιας υπηρεσίας (π.χ. τον διαμοιρασμό περιεχομένου). Εν αντιθέσει με συγκεντρωτικά δίκτυα τύπου client-server, οι κόμβοι (nodes) έχουν απευθείας πρόσβαση στους πόρους, χωρίς τη διαμεσολάβηση ενδιάμεσων οντοτήτων. Οι συμμετέχοντες ενός τέτοιου δικτύου είναι, δηλαδή, ταυτόχρονα, τόσο πάροχοι, όσο και αιτούντες των πόρων και της παρεχόμενης υπηρεσίας.\cite{2.4-p2p-networking} + +\begin{figure}[H] + \centering + \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.4.p2p-networks} + \caption{Αρχιτεκτονικές δικτύων client-server και P2P} +\end{figure} Τα P2P networks μπορούν να χωριστούν σε δύο κατηγορίες: diff --git a/chapters/2.theoretical-background/2.5.blockchain.tex b/chapters/2.theoretical-background/2.5.blockchain.tex index 7b95c1d..9ebdf92 100644 --- a/chapters/2.theoretical-background/2.5.blockchain.tex +++ b/chapters/2.theoretical-background/2.5.blockchain.tex @@ -1,6 +1,6 @@ \section{Blockchain} \label{section:2-5-blockchain} -Το blockchain αποτελεί μία διανεμημένη δημόσια σειρά δεδομένων, που διατηρεί έναν αμετάβλητο ως προς το ιστορικό του κατάλογο (immutable ledger) ψηφιακών συναλλαγών (digital transactions) ενός αγαθού (asset), π.χ. ενός νομίσματος (currency ή token). Περιγράφηκε για πρώτη φορά το 2008 από ένα άτομο (ή μία ομάδα ανθρώπων) γνωστό ως Satoshi Nakamoto, αποτελώντας τη βάση του κρυπτονομίσματος (cryptocurrency) Bitcoin.\cite{2.5-bitcoin} +Το blockchain αποτελεί μία διανεμημένη δημόσια σειρά δεδομένων, που διατηρεί έναν αμετάβλητο ως προς το ιστορικό του κατάλογο (immutable ledger) ψηφιακών συναλλαγών (digital transactions) ενός αγαθού (asset), π.χ. ενός νομίσματος (currency ή token). Περιγράφηκε για πρώτη φορά το 2008 από ένα άτομο (ή μία ομάδα ανθρώπων) με το ψευδώνυμο Satoshi Nakamoto, αποτελώντας τη βάση του κρυπτονομίσματος (cryptocurrency) Bitcoin.\cite{2.5-bitcoin} Δομικό στοιχείο του blockchain είναι το μπλοκ (block), το οποίο περιέχει μία ομάδα έγκυρων συναλλαγών που έχουν κατακερματιστεί και κωδικοποιηθεί σε ένα δένδρο Merkle, το hash του προηγούμενου μπλοκ και μερικά ακόμα μεταδεδομένα (π.χ. nonce, timestamp). Έτσι, κάθε νέο μπλοκ "δείχνει" στο προηγούμενό του μέσω του hash, επιβεβαιώνοντας την ακεραιότητά του, με τα διαδεχόμενα μπλοκ να σχηματίζουν τελικά μία αλυσίδα, μέχρι το αρχικό μπλοκ, το οποίο είναι γνωστό ως το μπλοκ γένεσης (genesis block).\cite{2.5-blockchain} diff --git a/chapters/2.theoretical-background/2.7.ipfs.tex b/chapters/2.theoretical-background/2.7.ipfs.tex index 5e986bb..cfc225e 100644 --- a/chapters/2.theoretical-background/2.7.ipfs.tex +++ b/chapters/2.theoretical-background/2.7.ipfs.tex @@ -13,8 +13,9 @@ \begin{enumitemcenteredfigure} \includegraphics[width=.95\textwidth]{assets/figures/chapter-2/2.7.merkle-dag.png} - \caption{Merkle DAG\cite{2.7-merkle-dags-proto-school}} + \caption[Παράδειγμα Merkle DAG]{Παράδειγμα Merkle DAG\footnotemark} \end{enumitemcenteredfigure} + \footnotetext{\url{https://proto.school/merkle-dags/}} Στο παραπάνω Merkle DAG τα baf...i αποτελούν τα CID των αρχείων και των φακέλων. Το δένδρο δημιουργείται από κάτω προς τα πάνω, υπολογίζοντας κάθε φορά τα κατάλληλα hashes/CIDs. Σε περίπτωση που το περιεχόμενο ενός κόμβου αλλάξει, τότε αλλάζει τόσο το CID του, όσο και τα CIDs όλων των προγόνων του. \item \textbf{Ανακάλυψη περιεχομένου μέσω κατανεμημένων πινάκων κατακερματισμού (\textenglish{Distributed Hash Tables ή DHTs})}. Ο DHT είναι ένα κατανεμημένο σύστημα για την αντιστοίχιση κλειδιών σε τιμές. Στο IPFS αποτελεί το θεμελιώδες συστατικό του συστήματος δρομολόγησης περιεχομένου και λειτουργεί ως διασταύρωση μεταξύ καταλόγου και συστήματος πλοήγησης. Πρακτικά πρόκειται για ένα πίνακα που αποθηκεύει ποιος έχει ποια δεδομένα και, μέσω του οποίου, ο χρήστης βρίσκει τον peer που έχει αποθηκευμένο το επιθυμητό περιεχόμενο. diff --git a/chapters/3.application-design/3.0.application-design.tex b/chapters/3.application-design/3.0.application-design.tex index 99d3dcd..2704833 100644 --- a/chapters/3.application-design/3.0.application-design.tex +++ b/chapters/3.application-design/3.0.application-design.tex @@ -1,5 +1,7 @@ \chapter{Σχεδίαση εφαρμογής}\label{chapter:3-application-design} +Σε αυτό το κεφάλαιο περιγράφεται η διαδικασία σχεδίασης της εφαρμογής Concordia, από τη σύλληψη της ιδέας και την επιλογή της τεχνολογικής στοίβας, μέχρι τον ορισμό της αρχιτεκτονικής της και τον διαχωρισμό του προγραμματιστικού έργου σε sprints. + \input{chapters/3.application-design/3.1.idea-conception} \input{chapters/3.application-design/3.2.technology-stack} \input{chapters/3.application-design/3.3.design-methodology} diff --git a/chapters/3.application-design/3.1.idea-conception.tex b/chapters/3.application-design/3.1.idea-conception.tex index c265945..d32098c 100644 --- a/chapters/3.application-design/3.1.idea-conception.tex +++ b/chapters/3.application-design/3.1.idea-conception.tex @@ -1,11 +1,9 @@ \section{Σύλληψη της ιδέας} \label{section:3-1-idea-conception} -Η σύλληψη της ιδέας για τη δημιουργία της εφαρμογής της παρούσας διπλωματικής εργασίας είχε ως εφαλτήριο την αναγνώριση ενός διδιάστατου προβλήματος. +Η σύλληψη της ιδέας για τη δημιουργία της εφαρμογής της παρούσας διπλωματικής εργασίας έχει ως εφαλτήριο την αναγνώριση ενός διδιάστατου προβλήματος. Η πρώτη διάσταση εστιάζει στον χώρο των μέσων κοινωνικής δικτύωσης. Εκεί παρατηρείται αδιαμφισβήτητη επικράτηση πλατφορμών επικοινωνίας συγκεντρωτικής μορφής (π.χ. Facebook, Twitter, Instagram), ενώ προσπάθειες δημιουργίας αντίστοιχων αποκεντρωτικών εφαρμογών βρίσκονται σε πρώιμα στάδια, τόσο ανάπτυξης, όσο και υιοθέτησης από το ευρύ κοινό. Όπως αναλύθηκε και στην ενότητα \ref{section:1-3-problem-definition}, η τρέχουσα αυτή κατάσταση θέτει αξιοσημείωτα προβλήματα τεχνικής φύσεως (έλλειψη ασφάλειας και διαθεσιμότητας) και, κυρίως, πολιτικής (έλλειψη εμπιστοσύνης, εγγύησης της αυθεντικότητας των δεδομένων και της ελευθερίας του λόγου). Η δεύτερη διάσταση εστιάζει στον χώρο της ψηφιακής δημοκρατίας (digital democracy). Συγκεκριμένα, παρατηρείται έλλειψη εργαλείων, ικανών να παρέχουν τη δυνατότητα διενέργειας αυθεντικών δημοκρατικών διαδικασιών. Ψηφοφορίες και αυτοδιαχείριση εντός συστημάτων κεντροποιημένης λογικής αδυνατούν, για αρχιτεκτονικούς λόγους, να εξασφαλίσουν τις απαραίτητες θεμελιώδεις ιδιότητες τέτοιων διαδικασιών, δηλαδή της ανωνυμίας και της επαληθευσιμότητας. -Βάσει των παραπάνω, γεννήθηκε η ιδέα δημιουργίας μίας εφαρμογής, η οποία, μέσω ενός προτεινόμενου συνδυασμού αποκεντρωτικών τεχνολογιών, να ορίσει έναν ψηφιακό χώρο που θα έρθει αντιμέτωπος με τα παραπάνω. Έτσι, κεντρικός στόχος της πιλοτικής εφαρμογής Concordia, είναι να αποτελέσει μία αυτόνομη κοινωνική πλατφόρμα, που θα κατοχυρώνει στους χρήστες της ελευθερία του λόγου και πλήρη κυριότητα επί των δεδομένων τους. Επιπλέον, θα παρέχει τη δυνατότητα διενέργειας αυθεντικών, ανώνυμων ψηφοφοριών, κάτι που θα την καθιστά ένα αξιόπιστο δημοκρατικό βήμα για τη λήψη αποφάσεων εντός των αυτοδιαχειριζόμενων κοινοτήτων της. - -\newpage \ No newline at end of file +Αυτές οι παρατηρήσεις αποτέλεσαν την έμπνευση για τη δημιουργία μίας εφαρμογής, η οποία, μέσω ενός προτεινόμενου συνδυασμού αποκεντρωτικών τεχνολογιών, να ορίσει έναν ψηφιακό χώρο που θα έρθει αντιμέτωπος με το παραπάνω πρόβλημα. Έτσι, κεντρικός στόχος της πιλοτικής εφαρμογής Concordia, είναι να αποτελέσει μία αυτόνομη κοινωνική πλατφόρμα, που θα κατοχυρώνει στους χρήστες της ελευθερία του λόγου και πλήρη κυριότητα επί των δεδομένων τους. Επιπλέον, θα παρέχει τη δυνατότητα διενέργειας αυθεντικών, ανώνυμων ψηφοφοριών, κάτι που θα την καθιστά ένα αξιόπιστο δημοκρατικό βήμα για τη λήψη αποφάσεων εντός των αυτοδιαχειριζόμενων κοινοτήτων της. diff --git a/chapters/3.application-design/3.4.user-categories.tex b/chapters/3.application-design/3.4.user-categories.tex index 1244bee..37d04c4 100644 --- a/chapters/3.application-design/3.4.user-categories.tex +++ b/chapters/3.application-design/3.4.user-categories.tex @@ -28,11 +28,11 @@ \begin{center} \begin{tabularx}{\textwidth}{p{2.3cm} X X X X X X X X X} \toprule - \multirow{7}{2.3cm}{Κατηγορία χρήστη} &\multicolumn{9}{c}{Δικαιώματα} \\ [0.5ex] + \multirow{7}{2.3cm}{\textbf{Κατηγορία χρήστη}} &\multicolumn{9}{c}{\textbf{Δικαιώματα}} \\ [0.5ex] & \spheading{70}{6em}{Προβολή θεμάτων} & \spheading{70}{8em}{Προβολή μηνυμάτων} & \spheading{70}{8em}{Προβολή ψηφοφοριών} & \spheading{70}{8em}{Προβολή ψήφων μηνυμάτων} & \spheading{70}{8em}{Δημιουργία θεμάτων} & \spheading{70}{8em}{Δημιουργία μηνυμάτων} & \spheading{70}{8em}{Δημιουργία ψηφοφοριών} & \spheading{70}{8em}{Ψήφιση σε ψηφοφορίες} & \spheading{70}{8em}{Ψήφιση μηνυμάτων} \\ [0.5ex] \midrule - Επισκέπτες & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} & \textcolor{red}{\faIcon{times}} \\ [0.5ex] - Εγγεγραμμένα μέλη & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}} & \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \textcolor{OliveGreen}{\faIcon{check}} \\ [0.5ex] + Επισκέπτες & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} & \ \textcolor{red}{\faIcon{times}} \\ [0.5ex] + Εγγεγραμμένα μέλη & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}} & \ \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \ \textcolor{OliveGreen}{\faIcon{check}}\tnote{*} & \ \textcolor{OliveGreen}{\faIcon{check}} \\ [0.5ex] \bottomrule \end{tabularx} \begin{tablenotes} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex b/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex index e7b29d3..2c7cdfc 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.1.use-case-sign-up.tex @@ -19,15 +19,15 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί εγγραφή. & Το σύστημα εμφανίζει την φόρμα ``Εγγραφή Χρήστη''. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί εγγραφή. & Το σύστημα εμφανίζει την φόρμα "Εγγραφή Χρήστη". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο χρήστη στο blockchain. \\ [0.5ex] \midrule 3 & - & Το σύστημα δημιουργεί τις προσωπικές βάσεις βάσεις δεδομένων OrbitDb του χρήστη. \\ [0.5ex] \midrule - 4 & - & Το σύστημα εμφανίζει την φόρμα ``Πληροφορίες Χρήστη''. \\ [0.5ex] + 4 & - & Το σύστημα εμφανίζει την φόρμα "Πληροφορίες Χρήστη". \\ [0.5ex] \midrule - 5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex] + 5 & Ο χρήστης συμπληρώνει τις προσωπικές του πληροφορίες και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει τις πληροφορίες χρήστη στην προσωπική του βάση OrbitDb. \\ [0.5ex] } {Το σύστημα μεταβαίνει στην αρχική σελίδα της εφαρμογής.} {Σενάριο χρήσης 1 - Βασική ροή} @@ -57,10 +57,10 @@ \useCaseAlternateFlowTable {2} -{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} +{Ο χρήστης πατάει το κουμπί "Άκυρο".} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} { - 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. + 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 1 - Εναλλακτική ροή 2} @@ -68,10 +68,10 @@ \useCaseAlternateFlowTable {3} -{Ο χρήστης πατάει το κουμπί ``Παράληψη''.} -{Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει ``Παράληψη'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} +{Ο χρήστης πατάει το κουμπί "Παράληψη".} +{Εφόσον ο χρήστης στη γραμμή 5 της Βασικής Ροής επιλέξει "Παράληψη" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} { - 1 & Ο χρήστης πατάει το κουμπί ``Παράληψη'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. + 1 & Ο χρήστης πατάει το κουμπί "Παράληψη" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 1 - Εναλλακτική ροή 3} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex b/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex index 6e9923f..dca19dd 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.10.use-case-create-community.tex @@ -19,9 +19,9 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Κοινότητας''. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέας κοινότητας. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Κοινότητας". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί νέα κοινότητα στο blockchain. \\ [0.5ex] } {Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} {Σενάριο χρήσης 10 - Βασική ροή} @@ -41,11 +41,11 @@ \useCaseAlternateFlowTable {1} {Ο χρήστης ορίζει εξωτερικό contract για την κοινότητα.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Συμβολαίου'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Σύνδεση Συμβολαίου''.} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Προσθήκη Συμβολαίου" το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας "Σύνδεση Συμβολαίου".} { - 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Κοινότητας'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Σύνδεση Συμβολαίου''. \\ [0.5ex] + 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα "Δημιουργία Κοινότητας", πατάει το κουμπί "Προσθήκη ψηφοφορίας" & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας "Σύνδεση Συμβολαίου". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα δημιουργεί την νέα κοινότητα στο blockchain και την συνδέει με το εξωτερικό contract. \\ [0.5ex] } {Το σύστημα μεταβαίνει στην σελίδα της νέας κοινότητας.} {Σενάριο χρήσης 10 - Εναλλακτική ροή 1} @@ -60,10 +60,10 @@ \useCaseAlternateFlowTable {2} -{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} +{Ο χρήστης πατάει το κουμπί "Άκυρο".} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} { - 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. + 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 10 - Εναλλακτική ροή 2} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex b/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex index 45ebb3e..ea4f012 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.3.use-case-create-topic.tex @@ -19,9 +19,9 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Θέματος''. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου θέματος. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Θέματος". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο θέμα στο blockchain. \\ [0.5ex] \midrule 3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] } @@ -43,11 +43,11 @@ \useCaseAlternateFlowTable {1} {Ο χρήστης δημιουργεί ψηφοφορία.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Προσθήκη Ψηφοφορίας'' το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''.} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Προσθήκη Ψηφοφορίας" το σύστημα ανανεώνει την σελίδα προσθέτοντας τα επιπλέον πεδία της φόρμας "Δημιουργία Ψηφοφορίας".} { - 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα ``Δημιουργία Θέματος'', πατάει το κουμπί ``Προσθήκη ψηφοφορίας'' & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας ``Δημιουργία Ψηφοφορίας''. \\ [0.5ex] + 1 & Ο χρήστης, αφού συμπληρώσει τη φόρμα "Δημιουργία Θέματος", πατάει το κουμπί "Προσθήκη ψηφοφορίας" & Το σύστημα ανανεώνει τη σελίδα με τα πεδία της φόρμας "Δημιουργία Ψηφοφορίας". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει το νέο θέμα καθώς και τη νέα ψηφοφορία στο blockchain. \\ [0.5ex] \midrule 3 & - & Το σύστημα εισάγει τις πληροφορίες του θέματος και της ψηφοφορίας στις προσωπικές βάσεις OrbitDb του χρήστη. } @@ -64,10 +64,10 @@ \useCaseAlternateFlowTable {2} -{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} +{Ο χρήστης πατάει το κουμπί "Άκυρο".} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής ή στη γραμμή 2 της Εναλλακτικής Ροής 1 επιλέξει "Άκυρο" το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής.} { - 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. + 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στην αρχική σελίδα της εφαρμογής. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 3 - Εναλλακτική ροή 2} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex b/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex index f491fe4..7cc3822 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.5.use-case-create-post.tex @@ -19,9 +19,9 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Δημιουργία Μηνύματος''. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί δημιουργίας νέου μηνύματος. & Το σύστημα εμφανίζει την φόρμα "Δημιουργία Μηνύματος". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέο μήνυμα στο blockchain. \\ [0.5ex] \midrule 3 & - & Το σύστημα εισάγει τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] } @@ -42,10 +42,10 @@ \useCaseAlternateFlowTable {1} -{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.} +{Ο χρήστης πατάει το κουμπί "Άκυρο".} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στη σελίδα του θέματος.} { - 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος. + 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στη σελίδα του θέματος. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 5 - Εναλλακτική ροή 1} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex b/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex index a492342..10f755d 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.6.use-case-modify-post.tex @@ -19,9 +19,9 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα ``Τροποποίηση Μηνύματος''. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί τροποποίησης του μηνύματος. & Το σύστημα εμφανίζει την φόρμα "Τροποποίηση Μηνύματος". \\ [0.5ex] \midrule - 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί ``Υποβολή''. & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] + 2 & Ο χρήστης συμπληρώνει τα πεδία και πατάει το κουμπί "Υποβολή". & Το σύστημα τροποποιεί τις πληροφορίες του μηνύματος στην προσωπική βάση OrbitDb του χρήστη. \\ [0.5ex] } {Το σύστημα παραμένει στη σελίδα του θέματος εμφανίζοντας το τροποποιημένο μήνυμα.} {Σενάριο χρήσης 6 - Βασική ροή} @@ -40,10 +40,10 @@ \useCaseAlternateFlowTable {1} -{Ο χρήστης πατάει το κουμπί ``Άκυρο''.} -{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει ``Άκυρο'' το σύστημα επιστρέφει στη σελίδα του θέματος.} +{Ο χρήστης πατάει το κουμπί "Άκυρο".} +{Εφόσον ο χρήστης στη γραμμή 2 της Βασικής Ροής επιλέξει "Άκυρο" το σύστημα επιστρέφει στη σελίδα του θέματος.} { - 1 & Ο χρήστης πατάει το κουμπί ``Άκυρο'' & Το σύστημα επιστρέφει στη σελίδα του θέματος. + 1 & Ο χρήστης πατάει το κουμπί "Άκυρο" & Το σύστημα επιστρέφει στη σελίδα του θέματος. } {Το σενάριο χρήσης τερματίζεται.} {Σενάριο χρήσης 6 - Εναλλακτική ροή 1} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex b/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex index c6dce44..b1ac462 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.7.use-case-vote-in-poll.tex @@ -19,7 +19,7 @@ \useCaseBaseFlowTable { - 1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί ``Υποβολή''. & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex] + 1 & Ο χρήστης πατάει το κουμπί της επιλογής που επιθυμεί να ψηφίσει και πατάει το κουμπί "Υποβολή". & Το σύστημα εισάγει νέα ψήφο στο blockchain. \\ [0.5ex] } {Το σύστημα ανανεώνει τις πληροφορίες της ψηφοφορίας.} {Σενάριο χρήσης 7 - Βασική ροή} diff --git a/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex b/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex index 352574e..70f7484 100644 --- a/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex +++ b/chapters/3.application-design/3.6.use-cases/3.6.9.delete-local-data.tex @@ -19,9 +19,9 @@ \useCaseBaseFlowTable { - 1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα ``Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων''. \\ [0.5ex] + 1 & Ο επισκέπτης πατάει το κουμπί διαγραφής των τοπικών δεδομένων. & Το σύστημα εμφανίζει την φόρμα "Επιβεβαίωση Διαγραφής Τοπικών Δεδομένων". \\ [0.5ex] \midrule - 2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί ``Υποβολή''. & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex] + 2 & Ο επισκέπτης συμπληρώνει το πεδίο και πατάει το κουμπί "Υποβολή". & Το σύστημα διαγράφει όλες τις τοπικές βάσεις OrbitDb που χρησιμοποιούνται από την εφαρμογή. \\ [0.5ex] } {Το σύστημα παραμένει πραγματοποιεί ανανέωση της σελίδας.} {Σενάριο χρήσης 9 - Βασική ροή} diff --git a/chapters/3.application-design/3.7.architecture-design.tex b/chapters/3.application-design/3.7.architecture-design.tex index 1efc160..9d8d9b1 100644 --- a/chapters/3.application-design/3.7.architecture-design.tex +++ b/chapters/3.application-design/3.7.architecture-design.tex @@ -6,7 +6,7 @@ \begin{figure}[H] \centering - \includegraphics[width=.75\textwidth]{assets/figures/chapter-3/3.7.architecture-design} + \includegraphics[width=\textwidth]{assets/figures/chapter-3/3.7.architecture-design} \caption{Αρχιτεκτονική του συστήματος (στάδιο σχεδίασης)} \end{figure} diff --git a/chapters/3.application-design/3.8.implementation-methodology-specification.tex b/chapters/3.application-design/3.8.implementation-methodology-specification.tex index 2292d31..c2c01f1 100644 --- a/chapters/3.application-design/3.8.implementation-methodology-specification.tex +++ b/chapters/3.application-design/3.8.implementation-methodology-specification.tex @@ -1,4 +1,8 @@ -\section{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός} \label{section:3-8-implementation-methodology-specification} +\section[Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός]{Προδιαγραφή μεθόδου υλοποίησης και χρονοπρογραμματισμός% + \sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός}} +\sectionmark{Προδ. μεθόδου υλοποίησης \& χρονοπρογραμματισμός} + +\label{section:3-8-implementation-methodology-specification} Κατά τον χρονοπρογραμματισμό ακολουθήθηκαν οι τακτικές που ορίζει το Scrum. Το συνολικό προγραμματιστικό έργο χωρίστηκε σε επιμέρους, διακριτούς στόχους και κάθε στόχος αντιστοιχήθηκε σε ένα Sprint. Τα Sprints αποτελούνται από επιμέρους διαχωρισμό της εργασίας σε epic tasks. Σε αυτό το στάδιο χρονοπρογραμματισμού δεν έγινε αναλυτικότερη περιγραφή των επιμέρους tasks, κάθε epic χωρίστηκε σε tasks κατά το αρχικό στάδιο της υλοποίησης του. @@ -16,5 +20,3 @@ \caption{Διαχωρισμός σε sprints} \label{figure:3.8.implementation-methodology-specification-sprints} \end{figure} - -%TODO: add tasks for serve (front and contracts) thru IPFS, upgradability diff --git a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex index 3cffc8a..cbd965b 100644 --- a/chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex +++ b/chapters/4.application-implementation/4.3.implementation-architecture/4.3.9.data-flow.tex @@ -8,20 +8,20 @@ Τέλος, παρακάτω δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και έπειτα ανάκτησης της ίδιας πληροφορίας. -Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία. +Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο τη διεύθυνση του δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Στο σχήμα \ref{figure:4-3-data-flow-insert} παρουσιάζεται γραφικά η διαδικασία. \begin{figure}[H] \centering - \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-insert.png} + \input{tikz/chapter-3/3-6-use-case-create-topic-sequence-diagram} \caption{Διάγραμμα ακολουθίας δημιουργίας θέματος} \label{figure:4-3-data-flow-insert} \end{figure} -Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο μήνυμα. Αρχικά, πρέπει να διαβαστεί ο πίνακας θεμάτων από το blockchain. Η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του κάθε θέματος, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Έπειτα, εφόσον το θέμα βρεθεί και ο αύξων αριθμός του είναι γνωστός, πρέπει να διαβαστούν από το blockchain τα μεταδομένα των μηνυμάτων του θέματος και συγκεκριμένα η διευθύνσεις των δημιουργών τους. Τέλος, μέσω του IPFS πρέπει να γίνει αντιγραφή των προσωπικών βάσεων των δημιουργών του κάθε μηνύματος και να αναζητηθούν σε αυτές τα εκάστοτε μηνύματα. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα. +Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο θέμα. Αρχικά, πρέπει να διαβαστούν τα μεταδεδομένα του συγκεκριμένου θέματος από το blockchain. Έπειτα, διαβάζονται από το blockchain οι αύξοντες αριθμοί των μηνυμάτων που έχουν δημοσιευτεί στο θέμα αυτό. Σε μία τελευταία ανάκτηση από το blockchain διαβάζονται τα μεταδομένα του κάθε μηνύματος. Έπειτα, η πληροφορία αυτή εμπλουτίζεται από τα δεδομένα του θέματος και των μηνυμάτων, τα οποία ανακτώνται από τις προσωπικές βάσεις Orbit κάθε χρήστη. Στο σχήμα \ref{figure:4-3-data-flow-read} φαίνεται το διάγραμμα ροής της πληροφορίας κατά την ανάκτηση πληροφοριών από το σύστημα. \begin{figure}[H] \centering - \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.3.architecture-4.3.9.data-flow-read.png} + \input{tikz/chapter-3/3-6-use-case-fetch-topic-sequence-diagram} \caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος} \label{figure:4-3-data-flow-read} -\end{figure} \ No newline at end of file +\end{figure} diff --git a/chapters/4.application-implementation/4.5.implemented-parts.tex b/chapters/4.application-implementation/4.5.implemented-parts.tex index 22c7298..aa47ac8 100644 --- a/chapters/4.application-implementation/4.5.implemented-parts.tex +++ b/chapters/4.application-implementation/4.5.implemented-parts.tex @@ -16,7 +16,7 @@ \item Η διαγραφή των τοπικών δεδομένων, όπως περιγράφεται στη \ref{srs:functional-srs-delete-local-data} και στο σενάριο χρήσης \ref{subsection:3-6-use-case-delete-local-data}. \end{itemize} -Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλον για τα πλαίσια ενός PoC. Στο παράρτημα \ref{screenshots-appendix} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών. +Τα παραπάνω αντιστοιχούν σε 11 ολοκληρωμένες από τις 13 προδιαγεγραμμένες ΛΑ ή πλήρωση 84.6\%, ποσοστό που θεωρείται από τους συγγραφείς επαρκές για την εξαγωγή συμπερασμάτων για τον χώρο των DApps και υπερβάλλον για τα πλαίσια ενός PoC. Στο παράρτημα \ref{appendix-a} παρατίθενται τα στιγμιότυπα οθόνης των υλοποιημένων χαρακτηριστικών. Το χαρακτηριστικό το οποία παραλήφθηκε είναι η δημιουργία κοινοτήτων και ο ορισμός εξωτερικών contracts για τα tokens τους, όπως περιγράφονται στις \ref{srs:functional-srs-create-communities} \& \ref{srs:functional-srs-assign-community-contract} και στο σενάριο χρήσης \ref{subsection:3-10-use-case-create-community}. diff --git a/chapters/5.conclusions-open-areas/5.1.conclusions.tex b/chapters/5.conclusions-open-areas/5.1.conclusions.tex index 7a6df34..fd11da5 100644 --- a/chapters/5.conclusions-open-areas/5.1.conclusions.tex +++ b/chapters/5.conclusions-open-areas/5.1.conclusions.tex @@ -1,8 +1,8 @@ \section{Συμπεράσματα}\label{section:5-1-conclusions} -Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}. +Συνοψίζοντας, μέσω της ανάπτυξης της πιλοτικής εφαρμογής Concordia γίνεται φανερό ότι είναι εφικτή η υλοποίηση μίας πλήρως αποκεντρωμένης κοινωνικής πλατφόρμας, η οποία να εκπληρώνει τον στόχο που τέθηκε στην \hyperref[section:1-4-thesis-goal]{ενότητα 1.4}, σύμφωνα πάντα με τον σχεδιασμό του \hyperref[chapter:3-application-design]{κεφαλαίου 3}. -Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένα πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες. +Μέσω της αρχιτεκτονικής αποκέντρωσης των τριών επιπέδων της τεχνολογικής στοίβας (βλ. \hyperref[section:3-2-technology-stack]{ενότητα 3.2}), δημιουργείται ένας πολιτικά αποκεντρωμένος ψηφιακός χώρος, ο οποίος κατοχυρώνει την ελευθερία του λόγου των συμμετεχόντων και παρέχει παντοδύναμες αυθεντικές δημοκρατικές διαδικασίες. Ωστόσο, θα πρέπει να επισημανθεί ότι η εφαρμογή χαρακτηρίζεται από ορισμένα μειονεκτήματα, τα οποία σχετίζονται, κυρίως, με την πρώιμη κατάσταση ανάπτυξης των επιλεγμένων τεχνολογιών: @@ -17,4 +17,4 @@ \item Στο Data tier, το IPFS και η OrbitDB αποτελούν επίσης ιδιαίτερα καινοτόμα λογισμικά και δε θεωρούνται ακόμα production-ready. Αυτό έχει ως αποτέλεσμα να εισάγουν με τη σειρά τους διάφορα προβλήματα, τα οποία σχετίζονται κυρίως με την εύρεση των peers (το οποίο βασίζεται προσωρινά σε signalling servers\footnote{Βλ. και \url{https://github.com/libp2p/js-libp2p/issues/385}.}) και το replication των δεδομένων. \end{itemize} -Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση. +Τέλος, τονίζεται πως, παρ' όλες τις τρέχουσες δυσκολίες, οι προγραμματιστικές κοινότητες των παραπάνω τεχνολογιών εργάζονται αδιάκοπα για τη βελτίωση τους, ενώ παρόμοια εναλλακτικά project μπορούν ανά πάσα στιγμή να αντικαταστήσουν αυτά που επιλέχθηκαν στην τρέχουσα υλοποίηση της τεχνολογικής στοίβας. diff --git a/chapters/appendix/screenshots-appendix.tex b/chapters/appendix/appendix-a.tex similarity index 61% rename from chapters/appendix/screenshots-appendix.tex rename to chapters/appendix/appendix-a.tex index 3cca814..4579b47 100644 --- a/chapters/appendix/screenshots-appendix.tex +++ b/chapters/appendix/appendix-a.tex @@ -1,4 +1,4 @@ -\chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{screenshots-appendix} +\chapter*{Παράρτημα Αʹ\\[20pt]Στιγμιότυπα οθόνης πλατφόρμας}\label{appendix-a} \addcontentsline{toc}{section}{Αʹ Στιγμιότυπα οθόνης πλατφόρμας} % TODO: add screenshots of application \ No newline at end of file diff --git a/chapters/appendix/appendix-b.tex b/chapters/appendix/appendix-b.tex new file mode 100644 index 0000000..509fb06 --- /dev/null +++ b/chapters/appendix/appendix-b.tex @@ -0,0 +1,56 @@ +\chapter*{Παράρτημα Βʹ\\[20pt]Στατιστικά κώδικα}\label{appendix-b} +\addcontentsline{toc}{section}{Βʹ Στατιστικά κώδικα} + +\captionsetup{labelformat=AppendixBTables} +\setcounter{table}{0} + +Στο παρόν παράρτημα παρατίθενται πίνακες με στατιστικά στοιχεία του κώδικα της εφαρμογής Concordia, καθώς και των υλοποιημένων βιβλιοθηκών. Συγκεκριμένα, πραγματοποιήθηκε καταμέτρηση των αρχείων και των γραμμών κώδικα μέσω του προγραμμάτος cloc\footnote{\url{https://github.com/AlDanial/cloc}}, διαδικασία στην οποία αγνοήθηκαν αυτόματα configuration και auto-generated αρχεία (π.χ. yarn.lock, .gitignore). + +\begin{center} + \codestatstable{Concordia}{https://gitlab.com/ecentrics/concordia} + { + JSX & 54 & 510 & 14 & 4491 \\ + JavaScript & 81 & 302 & 84 & 2035 \\ + Groovy & 1 & 76 & 32 & 673 \\ + Solidity & 5 & 142 & 20 & 553 \\ + CSS & 26 & 87 & 8 & 426 \\ + JSON & 10 & 0 & 0 & 352 \\ + Markdown & 7 & 157 & 0 & 352 \\ + Dockerfile & 5 & 68 & 51 & 128 \\ + Bourne Shell & 9 & 27 & 10 & 117 \\ + make & 1 & 10 & 8 & 77 \\ + YAML & 1 & 3 & 0 & 30 \\ + SVG & 6 & 0 & 0 & 25 \\ + HTML & 1 & 3 & 23 & 16 \\ + diff & 1 & 0 & 8 & 7 \\ + \hline + \textbf{Σύνολο} & 208 & 1385 & 258 & 9282 \\ + } + + \codestatstable{drizzle}{https://gitlab.com/ecentrics/drizzle} + { + JavaScript & 36 & 281 & 137 & 1448 \\ + JSON & 1 & 0 & 0 & 16 \\ + Markdown & 1 & 2 & 0 & 4 \\ + \hline + \textbf{Σύνολο} & 38 & 283 & 137 & 1468 \\ + } + + \codestatstable{breeze}{https://gitlab.com/ecentrics/breeze} + { + JavaScript & 16 & 105 & 56 & 583 \\ + JSON & 1 & 0 & 0 & 17 \\ + Markdown & 1 & 2 & 0 & 4 \\ + \hline + \textbf{Σύνολο} & 18 & 107 & 56 & 604 \\ + } + + \codestatstable{eth-identity-provider}{https://gitlab.com/ecentrics/eth-identity-provider} + { + JavaScript & 4 & 36 & 23 & 211 \\ + JSON & 1 & 0 & 0 & 13 \\ + Markdown & 1 & 2 & 0 & 4 \\ + \hline + \textbf{Σύνολο} & 6 & 38 & 23 & 228 \\ + } +\end{center} \ No newline at end of file diff --git a/chapters/appendix/appendix.tex b/chapters/appendix/appendix.tex index ab50121..11844d9 100644 --- a/chapters/appendix/appendix.tex +++ b/chapters/appendix/appendix.tex @@ -1 +1,2 @@ -\input{chapters/appendix/screenshots-appendix} +\input{chapters/appendix/appendix-a} +\input{chapters/appendix/appendix-b} \ No newline at end of file diff --git a/custom-commands/appendix-code-stats.tex b/custom-commands/appendix-code-stats.tex new file mode 100644 index 0000000..f08a5ac --- /dev/null +++ b/custom-commands/appendix-code-stats.tex @@ -0,0 +1,19 @@ +\newcommand{\codestatstable}[3]{ + \begin{table}[H] + \centering + \rowcolors{3}{}{gray2} + \begin{tabular}{ |l|r|r|r|r| } + \hline + \rowcolor{gray1} + \multicolumn{5}{|c|}{\large{\textbf{#1}}} \\ + \rowcolor{gray1} + \multicolumn{5}{|c|}{\small{\url{#2}}} \\ + \hline + \textbf{Γλώσσα} & \textbf{Αρχεία} & \textbf{Κενές γραμμές} & \textbf{Σχόλια} & \textbf{Κώδικας} \\ + \hline + #3 + \hline + \end{tabular} + \caption{#1 - στατιστικά κώδικα} + \end{table} +} \ No newline at end of file diff --git a/misc/packages.tex b/misc/packages.tex index 1dfb418..4e915a2 100644 --- a/misc/packages.tex +++ b/misc/packages.tex @@ -4,7 +4,7 @@ \usepackage[subpreambles=true]{standalone} % Paper size and margins -\usepackage{geometry} +\usepackage[a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm]{geometry} % --- Languages & Fonts --- \usepackage{polyglossia} @@ -19,10 +19,13 @@ \usepackage{custom-packages/greek-enumerate} % Greek enumeration for ordered item lists \usepackage{float} % For \begin{figure}[H] \usepackage[font={footnotesize, it}]{caption} % For captions under figures +\DeclareCaptionLabelFormat{AppendixBTables}{Πίνακας B.#2} \usepackage{tabularx} % Support for break lines inside table cells \usepackage{multirow, booktabs} % Useful table styling commands \usepackage[flushleft]{threeparttable} % Table footnotes -\usepackage[dvipsnames]{xcolor} % Text colors +\usepackage[dvipsnames, table]{xcolor} % Text colors +\definecolor{gray1}{gray}{0.85} +\definecolor{gray2}{gray}{0.9} \usepackage{minted} % Source code highlighting (make sure to add -shell-escape flag!) \usepackage [autostyle]{csquotes} \usepackage{tcolorbox} % Colored boxes @@ -31,7 +34,15 @@ \usepackage{appendix} % Appendix helpers \usepackage[onehalfspacing]{setspace} -% --- TikZ and UML diagrams +% --- fancyhdr --- + +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhead[L]{\nouppercase{\rightmark}} +\fancyhead[R]{\nouppercase{\leftmark}} +\setlength{\headheight}{15pt} + +% --- TikZ and UML diagrams --- \usepackage{pgf-umlsd} % --- Bibliography --- @@ -47,6 +58,7 @@ \input{custom-commands/use-case-commands} \input{custom-commands/custom-spheading} \input{custom-commands/appendix-overrides} +\input{custom-commands/appendix-code-stats} % --- Custom styles --- \renewcommand{\arraystretch}{1.2} % Streches the table row height so text is not crammed between the lines diff --git a/thesis.pdf b/thesis.pdf index 71b0165..446fc78 100644 Binary files a/thesis.pdf and b/thesis.pdf differ diff --git a/thesis.tex b/thesis.tex index 5960d31..3790b29 100644 --- a/thesis.tex +++ b/thesis.tex @@ -6,9 +6,6 @@ % Sets up the bib files \input{bibliography/bib-setup} -% Paper size and margins -\geometry{a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm} - % Make title page \input{misc/title-page}