diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png b/assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png new file mode 100644 index 0000000..8ade85e Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png b/assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png new file mode 100644 index 0000000..fbd2cab Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png b/assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png new file mode 100644 index 0000000..d5e273e Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png b/assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png new file mode 100644 index 0000000..71c491d Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png b/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png new file mode 100644 index 0000000..04d4255 Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png b/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png new file mode 100644 index 0000000..2d3c295 Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png differ diff --git a/assets/figures/chapter-4/4.4.architecture-architecture-overview.png b/assets/figures/chapter-4/4.4.architecture-architecture-overview.png new file mode 100644 index 0000000..8c193f5 Binary files /dev/null and b/assets/figures/chapter-4/4.4.architecture-architecture-overview.png differ diff --git a/chapters/4.application-implementation/4.4.implementation-architecture.tex b/chapters/4.application-implementation/4.4.implementation-architecture.tex index 5a993d7..fc6b6b2 100644 --- a/chapters/4.application-implementation/4.4.implementation-architecture.tex +++ b/chapters/4.application-implementation/4.4.implementation-architecture.tex @@ -44,9 +44,14 @@ \label{table:4-4-software-units-summary} \end{table} -Τα αρθρώματα και οι υπηρεσίες θα περιγραφούν σε μεγαλύτερη ανάλυση στα επόμενα κεφάλαια. Στο παρακάτω διάγραμμα (διάγραμμα ) φαίνεται η συνολική αρχιτεκτονική του συστήματος. +Τα αρθρώματα και οι υπηρεσίες θα περιγραφούν σε μεγαλύτερη ανάλυση στα επόμενα κεφάλαια. Στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-architecture-overview}) φαίνεται η συνολική αρχιτεκτονική του συστήματος. -% todo: add architecture diagram +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{assets/figures/chapter-4/4.4.architecture-architecture-overview.png} + \caption{Διάγραμμα αρχιτεκτονικής συστήματος} + \label{figure:4-4-architecture-overview} +\end{figure} % ===== ===== % Common software units @@ -102,7 +107,7 @@ \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η εφαρμογή Concordia (Concordia Application) εκθέτει τις γραφικές διεπαφές μέσω των οποίων αλληλεπιδρούν οι χρήστες με το σύστημα. Αποτελεί τον δίαυλο επικοινωνίας του τελικού χρήστη με το blockchain και με τη βάση OrbitDB. Μέσω της εφαρμογής Concordia οι χρήστες μπορούν να: +Η εφαρμογή Concordia (Concordia Application) εκθέτει τις γραφικές διεπαφές μέσω των οποίων αλληλεπιδρούν οι χρήστες με το σύστημα. Αποτελεί τον δίαυλο επικοινωνίας του τελικού χρήστη με το blockchain και με τη βάση OrbitDB. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο σχήμα \ref{figure:4-4-concordia-application-architecture}. Μέσω της εφαρμογής Concordia οι χρήστες μπορούν να: \begin{itemize} \item περιηγηθούν και διαβάσουν το περιεχόμενο της πλατφόρμας @@ -125,6 +130,13 @@ Χρησιμοποιείται η βιβλιοθήκη React για την οργάνωση και ανάπτυξη των συνθετικών τμημάτων (components) του γραφικού περιβάλλοντος. Για το γραφικό περιβάλλον γίνεται χρήση του framework της Semantic UI. Χρησιμοποιείται η βιβλιοθήκη Redux για τη διαχείριση κατάστασης της εφαρμογής (state management), % todo: find a better greek translation καθώς και η βιβλιοθήκη Redux-Saga για τη διαχείριση ασύγχρονων παράπλευρων ενεργειών (side-effects) σε ένα σύστημα βασισμένο σε συμβάντα (event-based). Άλλες βιβλιοθήκες χρησιμοποιούνται για διάφορα μέρη της υπηρεσίας, ενώ χρησιμοποιούνται επίσης τα αρθρώματα που περιγράφηκαν προηγουμένως για την επίτευξη διαφορετικών στόχων. Ο πλήρης κατάλογος των βιβλιοθηκών και αρθρωμάτων μπορεί να βρεθεί στον κώδικα της υπηρεσίας στο παράρτημα. % todo: add reference to the appendix containing the code or a link to it in the repo +\begin{figure}[H] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.2.concordia-application-architecture.png} + \caption{Αρχιτεκτονική υπηρεσίας Concordia Application} + \label{figure:4-4-concordia-application-architecture} +\end{figure} + Για τη λειτουργία της υπηρεσία Concordia Application είναι απαραίτητα τα αντικείμενα (artifacts) που προκύπτουν από τη μεταγλώττιση των contracts και τη μεταφόρτωση/δημοσίευσή τους στο blockchain. Για την εισαγωγή των artifacts στην υπηρεσία έχουν αναπτυχθεί δύο μέθοδοι. Η πρώτη μέθοδος είναι η μεταγλώττιση και μεταφόρτωση των contracts πριν την παραγωγή του πακέτου λογισμικού της υπηρεσίας για τελική χρήση (production build). Με αυτό τον τρόπο η υπηρεσία θα έχει πρόσβαση στα artifacts μέσω της βιβλιοθήκης που παράγεται από το άρθρωμα concordia-contracts. Αυτή η μέθοδος έχει το μειονέκτημα ότι το τελικό πακέτο λογισμικού (production build) ``δένεται'' με όποια συγκεκριμένη έκδοση των contracts είναι διαθέσιμη κατά τη δημιουργία του πακέτου. Αυτό σημαίνει ότι σε ενδεχόμενη ενημέρωση των contracts πρέπει αναγκαστικά να δημιουργηθεί και νέα έκδοση του πακέτου λογισμικού της υπηρεσίας Concordia Application. @@ -144,7 +156,14 @@ \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts που αναλύθηκε σε προηγούμενο κεφάλαιο (κεφάλαιο \ref{subsection:4-4-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contracts και έπειτα τα μεταφορτώνει στο blockchain το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifacts σε αποθετήριο Concordia Contracts Provider. +Η υπηρεσία αυτή αποτελείται από ένα εκτελέσιμο πρόγραμμα γραμμής εντολών βασισμένο στο άρθρωμα concordia-contracts που αναλύθηκε σε προηγούμενο κεφάλαιο (κεφάλαιο \ref{subsection:4-4-software-units}). Το πρόγραμμα, κατά την εκτέλεσή του, μεταγλωττίζει τα contracts και έπειτα τα μεταφορτώνει στο blockchain το οποίο είναι ορισμένο με χρήση μεταβλητών περιβάλλοντος. Τέλος, αν οι κατάλληλες μεταβλητές περιβάλλοντος είναι ορισμένες, το πρόγραμμα μεταφορτώνει τα τελικά artifacts σε αποθετήριο Concordia Contracts Provider. Η αρχιτεκτονική της υπηρεσίας φαίνεται στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-concordia-contracts-migrator-architecture}). + +\begin{figure}[H] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.3.concordia-contracts-migrator-architecture.png} + \caption{Αρχιτεκτονική υπηρεσίας Concordia Contracts Migrator} + \label{figure:4-4-concordia-contracts-migrator-architecture} +\end{figure} \vspace{0.5cm} \textbf{Διανομή} @@ -159,7 +178,14 @@ \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application) η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη στη γλώσσα προγραμματισμού Javascript. +Η υπηρεσία καρφιτσώματος περιεχομένου (Concordia Pinner) αποτελεί μία εφαρμογή τερματικού (temrinal application/cmd application) η οποία στοχεύει στο καρφίτσωμα (pinning) του περιεχομένου που αποθηκεύεται στο IPFS μέσω της βάσης OrbitDB. Η υπηρεσία είναι γραμμένη στη γλώσσα προγραμματισμού Javascript. Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-4-concordia-pinner-architecture}. + +\begin{figure}[H] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.4.concordia-pinner-architecture.png} + \caption{Αρχιτεκτονική υπηρεσίας Concordia Pinner} + \label{figure:4-4-concordia-pinner-architecture} +\end{figure} Η υπηρεσία αυτή υλοποιήθηκε για να εγγυηθεί η διαθεσιμότητα του περιεχομένου του συστήματος που αποθηκεύεται στο IPFS (τίτλοι θεμάτων, περιεχόμενο μηνυμάτων και άλλα). Λόγω του τρόπου λειτουργίας % todo: insert reference του IPFS, το περιεχόμενο που αναρτούν οι χρήστες πρέπει να καρφιτσώνεται από άλλους χρήστες ή αυτόνομες εφαρμογές, όπως η υπηρεσία Concordia Pinner, ώστε να είναι διαθέσιμο. Αν το περιεχόμενο δεν καρφιτσωθεί, τότε θα είναι διαθέσιμο στους υπόλοιπους χρήστες μόνο από τον/την δημιουργό, έτσι αν αυτός/αυτή δεν είναι ενεργός/ενεργή στο δίκτυο, το περιεχόμενο θα είναι αδύνατο να βρεθεί. @@ -179,7 +205,14 @@ \vspace{0.5cm} \textbf{Περιγραφή - Στόχοι υπηρεσίας} -Η υπηρεσία Contracts Provider αποτελεί μία βοηθητική υπηρεσία η οποία υλοποιεί ένα απλό αποθετήριο για τα contract artifacts. Είναι γραμμένη σε Javascript και διαθέτει δύο HTTP \textenglish{endpoints}, ένα για τη μεταφόρτωση (upload) των artifacts προς την υπηρεσία και ένα για τη λήψη (download) από την υπηρεσία. Η υπηρεσία υποστηρίζει επίσης την επισύναψη ετικετών στα artifacts, όπως η έκδοση (version) ή το κλαδί ανάπτυξης (branch, για παράδειγμα \textenglish{master/develop}). +Η υπηρεσία Contracts Provider αποτελεί μία βοηθητική υπηρεσία η οποία υλοποιεί ένα απλό αποθετήριο για τα contract artifacts. Είναι γραμμένη σε Javascript και διαθέτει δύο HTTP \textenglish{endpoints}, ένα για τη μεταφόρτωση (upload) των artifacts προς την υπηρεσία και ένα για τη λήψη (download) από την υπηρεσία. Η υπηρεσία υποστηρίζει επίσης την επισύναψη ετικετών στα artifacts, όπως η έκδοση (version) ή το κλαδί ανάπτυξης (branch, για παράδειγμα \textenglish{master/develop}). Η αρχιτεκτονική της υπηρεσίας φαίνεται το σχήμα \ref{figure:4-4-concordia-contracts-provider-architecture}. + +\begin{figure}[H] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.5.concordia-contracts-provider-architecture.png} + \caption{Αρχιτεκτονική υπηρεσίας Concordia Contracts Provider} + \label{figure:4-4-concordia-contracts-provider-architecture} +\end{figure} Η υπηρεσία χρησιμοποιείται σε μία προσπάθεια αποσύνδεσης της βασικής εφαρμογής που υλοποιεί η υπηρεσία Concordia Application από μία συγκεκριμένη έκδοση των contracts. Οι λόγοι που αυτό είναι επιθυμητό αναπτύχθηκαν στην περιγραφή της υπηρεσίας Concordia \textenglish{Application} (κεφάλαιο \ref{subsection:4-4-concordia-application-service}). Ωστόσο, η υπηρεσία Contracts Provider αποτελεί σημείο κεντροποίησης του συστήματος, για το λόγο αυτό θεωρείται προσωρινή λύση η οποία θα μπορούσε να αντικατασταθεί από αποκεντρωτικές λύσεις όπως η μεταφόρτωση των artifacts στο IPFS και ο διαμοιρασμός τους από εκεί. @@ -225,11 +258,11 @@ Στο μοντέλο των μικροϋπηρεσιών, βασικό χαρακτηριστικό είναι η επικοινωνία των ξεχωριστών υπηρεσιών και η ανταλλαγή μηνυμάτων για την επίτευξη των λειτουργικοτήτων του συστήματος. Σε αυτό το κεφάλαιο θα αναλυθεί ο τρόπος με τον οποίο οι μικροϋπηρεσίες επικοινωνούν μεταξύ τους καθώς και η φύση και το περιεχόμενο των μηνυμάτων που ανταλλάσουν. -Στο παρακάτω διάγραμμα (διάγραμμα \ref{figure:4-4-communications-graph}) φαίνεται ο γράφος που οπτικοποιεί τα κανάλια επικοινωνίας μεταξύ των μικροϋπηρεσιών, καθώς και τα κανάλια επικοινωνίας των μικροϋπηρεσιών με το blockchain. +Στο παρακάτω σχήμα (σχήμα \ref{figure:4-4-communications-graph}) φαίνεται ο γράφος που οπτικοποιεί τα κανάλια επικοινωνίας μεταξύ των μικροϋπηρεσιών, καθώς και τα κανάλια επικοινωνίας των μικροϋπηρεσιών με το blockchain. \begin{figure}[H] \centering - \includegraphics[width=15cm]{assets/figures/chapter-4/4.4.communications-diagram.png} + \includegraphics[width=\textwidth]{assets/figures/chapter-4/4.4.communications-diagram.png} \caption{Γράφος οπτικοποίησης των καναλιών επικοινωνίας των μικροϋπηρεσιών} \label{figure:4-4-communications-graph} \end{figure} @@ -253,16 +286,30 @@ % ===== ===== \subsection{Ροή πληροφορίας} \label{subsection:4-4-data-flow} -Στο κεφάλαιο αυτό θα αναλυθεί η ροή της πληροφορίας στο σύστημα. Λόγω των πολλαπλών υπηρεσιών, της κατάτμησης την πληροφορίας και των διαφορετικών σημείων αποθήκευσης της η ροή της πληροφορίας στο σύστημα ακολουθεί ένα σχετικά περίπλοκο μονοπάτι (σε σχέση με κλασσικές μονολιθικές, κεντροποιημένες εφαρμογές). +Στο κεφάλαιο αυτό θα αναλυθεί η ροή της πληροφορίας στο σύστημα. Λόγω των πολλαπλών υπηρεσιών, της κατάτμησης την πληροφορίας και των διαφορετικών σημείων αποθήκευσης της, η ροή της πληροφορίας στο σύστημα ακολουθεί ένα σχετικά περίπλοκο μονοπάτι (σε σχέση με κλασσικές, μονολιθικές, κεντροποιημένες εφαρμογές). -Αρχικά θα γίνει αναφορά στη διαδικασία αποθήκευση των νέων πληροφοριών. Η μοναδική πηγή χρήσιμων δεδομένων στο σύστημα είναι οι χρήστες και κατ' επέκταση η υπηρεσία Concordia Application, εφόσον είναι η μοναδική υπηρεσία με την οποία αυτοί αλληλεπιδρούν. Τα δεδομένα που δημιουργούν οι χρήστες (πληροφορίες χρηστών, τίτλοι θεμάτων και περιεχόμενο μηνυμάτων) κατατμήζονται πριν αποθηκευτούν. Η πληροφορία που εισάγεται στο σύστημα κατατμήζεται σε δύο μέρη. Στο blockchain αποθηκεύεται ένας δείκτης προς τα δεδομένα, ενώ τα πραγματικά δεδομένα αποθηκεύονται στη βάση OrbitDB. Ο δείκτης εκτός από την άμεση χρησιμότητα στην εύρεση των δεδομένων, παρέχει και την έμμεση λειτουργικότητα της δημιουργίας απαραίτητων μεταδομένων όπως ο αριθμός των θεμάτων στο σύστημα ή των μηνυμάτων σε ένα θέμα. +Αρχικά θα γίνει αναφορά στη διαδικασία αποθήκευσης των νέων πληροφοριών. Η μοναδική πηγή χρήσιμων δεδομένων στο σύστημα είναι οι χρήστες και κατ' επέκταση η υπηρεσία Concordia Application, εφόσον είναι η μοναδική υπηρεσία με την οποία αυτοί αλληλεπιδρούν. Τα δεδομένα που δημιουργούν οι χρήστες (πληροφορίες χρηστών, τίτλοι θεμάτων και περιεχόμενο μηνυμάτων) κατατμήζονται πριν αποθηκευτούν. Η πληροφορία που εισάγεται στο σύστημα κατατμήζεται σε δύο μέρη. Στο blockchain αποθηκεύεται ένας δείκτης προς τα δεδομένα, ενώ τα πραγματικά δεδομένα αποθηκεύονται στη βάση OrbitDB. Ο δείκτης εκτός από την άμεση χρησιμότητα στην εύρεση των δεδομένων, παρέχει και την έμμεση λειτουργικότητα της δημιουργίας απαραίτητων μεταδομένων όπως ο αριθμός των θεμάτων στο σύστημα ή των μηνυμάτων σε ένα θέμα. Από την πλευρά της εύρεση των πληροφοριών στο σύστημα, η ροή είναι ως εξής. Αρχικά, είναι απαραίτητη η αναζήτηση στο blockchain για την εύρεση του δείκτη προς τα δεδομένα. Έπειτα, τα δεδομένα μπορούν να ανακτηθούν μέσω του IPFS από τον εκάστοτε χρήστη ή από κάποιον Pinner. -Στα παρακάτω σχήματα (σχήμα και σχήμα ) φαίνονται τα διαγράμματα ροή πληροφορία τόσο για την εισαγωγή εγγραφών στο σύστημα όσο και για την ανάκτηση. +Στα παρακάτω σχήματα (σχήμα \ref{figure:4-4-data-flow-insert} και σχήμα \ref{figure:4-4-data-flow-read}) φαίνονται τα διαγράμματα ροής πληροφορίας τόσο για την εισαγωγή εγγραφών στο σύστημα όσο και για την ανάκτηση. + +\begin{figure}[h] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-insert.png} + \caption{Διάγραμμα ακολουθίας δημιουργίας θέματος} + \label{figure:4-4-data-flow-insert} +\end{figure} + +\begin{figure}[h] + \centering + \includegraphics[width=.7\textwidth]{assets/figures/chapter-4/4.4.architecture-4.4.9.data-flow-read.png} + \caption{Διάγραμμα ακολουθίας εύρεσης και ανάκτησης θέματος} + \label{figure:4-4-data-flow-read} +\end{figure} Τέλος, παρακάτω δίνεται ένα παράδειγμα εισαγωγής πληροφορίας στο σύστημα και έπειτα ανάκτησης της ίδιας πληροφορίας. -Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι η τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο την διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. +Έστω, χρήστης που δημιουργεί νέο θέμα. Τα δεδομένα που παράγονται είναι ο τίτλος του θέματος και το περιεχόμενο του πρώτου μηνύματος. Μεταδεδομένα της δημιουργίας είναι η διεύθυνση του/της δημιουργού του θέματος. Για την αποθήκευση του θέματος στο σύστημα δημιουργείται πρώτα συναλλαγή στο blockchain ώστε να δημιουργηθεί μία νέα εγγραφή στον πίνακα των θεμάτων. Η εγγραφή αυτή δεν περιέχει τίποτα παρά μόνο την διεύθυνση του/της δημιουργού χρήστη. Αν η συναλλαγή είναι επιτυχής, θα επιστραφεί ο αύξων αριθμός του νέου θέματος. Έπειτα, στην προσωπική βάση OrbitDB του/της χρήστη και στον πίνακα των θεμάτων θα προστεθεί εγγραφή με αναγνωριστικό τον αύξων αριθμό του θέματος όπου θα αποθηκευτούν τα δεδομένα του τίτλου και πρώτου μηνύματος. Έστω, χρήστης που επιθυμεί να διαβάσει το προηγούμενο μήνυμα. Αρχικά, πρέπει να διαβαστεί ο πίνακας θεμάτων από το blockchain. Έπειτα, εφόσον το θέμα βρεθεί και ο αύξων αριθμός του είναι γνωστός, πρέπει να διαβαστούν από το blockchain τα μεταδομένα του θέματος και συγκεκριμένα η διεύθυνση του/της δημιουργού. Τέλος, μέσω του IPFS πρέπει να γίνει αντιγραφή της προσωπικής βάση του/της δημιουργού και να αναζητηθεί στον πίνακα θεμάτων το θέμα με αναγνωριστικό τον αύξων αριθμό που βρέθηκε προηγουμένως. Αν το θέμα βρεθεί στην βάση, το περιεχόμενο της εγγραφής θα είναι τα δεδομένα του θέματος. diff --git a/thesis.pdf b/thesis.pdf index 9b57ddd..305c707 100644 Binary files a/thesis.pdf and b/thesis.pdf differ