Τα Projects μου
Εδώ παρουσιάζονται συνοπτικά κάποια έργα που υλοποιήθηκαν κατά τη φοίτησή μου στο Πανεπιστήμιο. Στα έργα που δημιουργήθηκαν στο πλαίσιο ομαδικής εργασίας αναφέρονται και τα ονόματα των συνεργατών μου. Όπου υπάρχει το σύμβολο σημαίνει ότι το εκάστοτε project έχει αναρτηθεί στον GitHub λογαριασμό μου, και πατώντας πάνω του μεταφέρεστε στο συγκεκριμένο repository.
Πίνακας Περιεχομένων
MiniPython Compiler(2020-2021, Winter)
Μεταγλωττιστής της γλώσσας MiniPython που υλοποιήθηκε σε Java στο πλαίσιο του μαθήματος "Μεταγλωττιστές" ως ομαδική εργασία του 7ου εξαμήνου. Υποστηρίζει λεκτική, συντακτική και σημασιολογική ανάλυση. Για τη λεκτική και τη συντακτική ανάλυση έχουν οριστεί tokens και productions σύμφωνα με το BNF της MiniPython σε ένα αρχείο .grammar, το οποίο περιλαμβάνει επίσης τμήμα για το αφηρημένο συντακτικό δέντρο. Το αρχείο αυτό χρησιμοποιείται από τη βιβλιοθήκη sablecc, η οποία ανιχνεύει λεκτικά και συντακτικά σφάλματα στο source αρχείο που δίνεται ως είσοδος, και παράγει κλάσεις Java για κάθε κόμβο του αφηρημένου συντακτικού δέντρου.
Το αφηρημένο συντακτικό δέντρο στη συνέχεια διατρέχεται για τη σημασιολογική ανάλυση από 2 Visitors. Αρχικά τρέχει ένας Visitor για συμπλήρωση πίνακα συμβόλων και για εμφάνιση σφαλμάτων που αφορούν τη δήλωση μεταβλητών και συναρτήσεων (πχ. χρήση μη δηλωμένης μεταβλητής, επαναδήλωση συνάρτησης κτλ.), και εφόσον δεν εμφανιστούν σφάλματα τρέχει και ο άλλος Visitor. Ο δεύτερος Visitor ελέγχει κατά πόσο είναι ορθή η χρήση ή/και λειτουργία διαφόρων στοιχείων της γλώσσας στο source αρχείο, όπως οι αριθμητικές και λογικές πράξεις, η κλήση συνάρτησης και άλλα.
Ακολουθεί παράδειγμα. Η γραμμή 7 αφαιρείται ώστε να εμφανιστούν και τα σφάλματα που προκύπτουν απ' τον 2ο Visitor.
Παραγόμενα σφάλματα (1ος και 2ος Visitor)
> Starting scan #1. . .
> Line 7: Name b is not defined.
> Scan #1 Completed. Total errors found = 1
> Starting scan #1. . .
> Scan #1 Completed. Total errors found = 0
> Starting scan #2. . .
> Line 1: Add operation must be on numbers only.
> Line 5: Add operation cannot be done on None.
> Line 5: Function foo with 3 arguments is not defined.
> Scan #2 Completed. Total errors found = 3
Source Αρχείο
1| def foo(a,b=2): return a+b
2| def foo(): return None
3| def foo2(): return foo()
4| x = "r"
5| print foo(x,2)+foo2()+foo(1,x,3)
6| #to be removed for 2nd Visitor
7| y = 1 + b
Συνεργάτες: Αθανασίου Λυδία, Σουβατζιδάκη Κωνσταντίνα
Washing Machine Interface(2020-2021, Winter)
Android εφαρμογή που υλοποιήθηκε σε Java στο πλαίσιο του μαθήματος "Αλληλεπίδραση Ανθρώπου-Υπολογιστή" ως ομαδική εργασία του 7ου εξαμήνου. Στόχος της παρούσας εφαρμογής είναι η βελτίωση της αλληλεπίδρασης αρχάριου ή έμπειρου χρήστη με την ήδη υπάρχουσα διεπαφή ενός συγκεκριμένου μοντέλου πλυντηρίου, διαμορφώνοντας κατάλληλα την εμφάνισή της αλλά και αυξάνοντας την ευχρηστία της. Συγκεκριμένα, η διεπαφή επιτρέπει σε χρήστες κάθε επιπέδου να εκκινήσουν μία πλύση αλλά και να την αποθηκεύσουν εφόσον το επιθυμούν για άμεση επαναχρησιμοποίησή της. Επιπλέον, κατά τη λειτουργία του πλυντηρίου αναγράφεται το πρόγραμμα της πλύσης, καθώς και τα στάδια και ο συνολικός χρόνος που απομένουν.
Για το παρόν έργο αναπτύχθηκαν συνολικά 3 κύκλοι του ελικοειδούς μοντέλου. Σε κάθε κύκλο έγινε καταγραφή της κατηγορίας χρηστών - στόχου και των λειτουργιών της εφαρμογής, παρουσίαση των πρωτοτύπων και ανάλυση των αποτελεσμάτων αξιολόγησης των πρωτοτύπων. Ως τρόποι αξιολόγησης χρησιμοποιήθηκαν οι εξής μέθοδοι :
- Επιθεώρηση ευχρηστίας
- Γνωστικό Περιδιάβασμα
- Ομιλούντα Υποκείμενα
- Ερωτηματολόγιο, μέσω Google Forms
- Συνεντεύξεις
Music Streaming Service (2020, Spring)
Android εφαρμογή με χρήση music streaming framework που υλοποιήθηκε σε Java στο πλαίσιο του μαθήματος "Κατανεμημένα Συστήματα" ως ομαδική εργασία του 6ου εξαμήνου. Η παρούσα εφαρμογή αφορά αναπαραγωγή μουσικής σε πραγματικό χρόνο (real-time streaming) ή offline λόγω αδυναμίας σύνδεσης της συσκευής στο Internet, και υποστηρίζει δύο τύπους λειτουργίας, έναν ελεύθερο και έναν επί πληρωμή. Η επί πληρωμή λειτουργία είναι εικονική, δηλαδή δεν έχει υλοποιηθεί διεπαφή συναλλαγής, παρά μόνο η λειτουργικότητα της εφαρμογής εφόσον ο χρήστης έχει εικονικά πληρώσει.
Το music streaming framework τρέχει ανεξέρτητα της εφαρμογής Android και αποτελείται από κόμβους Publisher, Broker, Consumer και Zookeeper. Κάθε κόμβος Publisher αποθηκεύει ένα σύνολο τραγουδιών διαφόρων καλλιτεχνών και επικοινωνεί με κόμβους Brokers. Κάθε κόμβος Broker δέχεται αιτήματα από διάφορους Consumers για τραγούδια, και ζητά τα τραγούδια αυτά απ' τους Publisher κόμβους. Ο κόμβος Zookeeper είναι μοναδικός και ρόλος του είναι ο συγχρονισμός των Broker κόμβων, ώστε κάθε Broker να γνωρίζει ποια αιτήματα να αναλάβει. Καθένας από τους παραπάνω κόμβους μπορεί να τρέχει σε διαφορετικούς υπολογιστές ή στον ίδιο με χρήση διαφορετικών θυρών. Τέλος, κάθε κόμβος Consumer ουσιαστικά αποτελεί την Android εφαρμογή απ' την οποία ο χρήστης επιλέγει απ' τη λίστα διαθέσιμων τραγουδιών αυτό που επιθυμεί να ακούσει. Η επικοινωνία μεταξύ όλων των κόμβων γίνεται με χρήση sockets.
Συνεργάτες: Αθανασίου Λυδία, Σουβατζιδάκη Κωνσταντίνα