Όνομα Φοιτητή: Βασίλειος Παντελής
Α.Μ.: Π2011003
Θέμα πτυχιακής: Οπτικοποίηση Δεδομένων στο βιντεοπαιχνίδι Minecraft
Domain: twittercity.org
Παραδοτέο 4
Παραδοτέο 5
Παραδοτέο 6
Παραδοτέο 7
Παραδοτέο 8
Τελικό παραδοτέο
Η παρούσα πτυχιακή εργασία θα ασχοληθεί με την εξόρυξη δεδομένων από το κοινωνικό δίκτυο Twitter, με την σωστή διαχείριση αυτών (φιλτράρισμα, δόμηση και αποθήκευση) και την δημιουργία Minecraft mod (συγγραφή κώδικα που θα τροποποιεί, θα προσθέτει ή/και θα αφαιρεί λειτουργίες του παιχνιδιού). Το όνομα του minecraft mod θα είναι Twitter City και το logo στην ιστοσελίδα της πτυχιακής θα έχει σχέση με αυτήν την ονομασία.
Για την καλή οργάνωση και την εύκολη διαχείριση του πρακτικού μέρους της πτυχιακής θα χωριστεί σε τρία κομμάτια: πρόγραμμα εξόρυξης και διαχείρισης δεδομένων, Minecraft Mod (οπτικοποίηση των δεδομένων) και ιστοσελίδα πτυχιακής.
Το πρόγραμμα για την εξόρυξη των δεδομένων από το Twitter θα χρησιμοποιεί το Search API αναζητώντας tweets με βάση κάποια keywords όπως «χτίζω σπίτι, πόλη κ.α.» (τα παραδείγματα είναι ενδεικτικά και σίγουρα θα τροποποιηθούν κατά την διάρκεια της βελτιστοποίησης ποιότητας και σαφήνειας τον εξορυγμένων tweets). Τα tweets θα αποθηκεύονται σε βάση δεδομένων που θα είναι προσβάσιμη (πιθανόν μέσω ενός Rest API που θα υλοποιηθεί) για να την διαχειριστούν και τα υπόλοιπα κομμάτια της εργασίας.
Συνεχίζοντας, το mod που θα δημιουργηθεί θα έχει σαν κύρια ευθύνη την δημιουργία της πόλης στον κόσμο του Minecraft. Δηλαδή, για κάθε tweet που έχει αποθηκεύσει το πρόγραμμα εξόρυξης δεδομένων από το Twitter ένα block θα χτίζετε στον κόσμο του Minecraft, το οποίο θα "κρατάει" και τις πληροφορίες του Tweet (κείμενο, συγγραφέας, ημερομηνία). Συνδυάζοντας τα blocks θα χτίζονται κατασκευές που θα δημιουργούν μια πόλη. Το mod θα σχεδιαστεί έτσι ώστε να δουλεύει ανεξάρτητα εάν είναι εγκατεστημένο σε Minecraft Server ή Client. Αυτό σημαίνει ότι θα εξαρτάται μόνο από την βάση δεδομένων που θα είναι αποθηκευμένες όλες οι απαραίτητες πληροφορίες για την σωστή λειτουργία του προγράμματος. Στόχος είναι η πόλη να γίνει μέρος του παιχνιδιού και να μην γίνει μεγάλη αλλαγή στην λογική του.
Η ιστοσελίδα της πτυχιακής θα αντιπροσωπεύει την παρουσίαση του mod και των λειτουργιών του και θα απαρτίζεται από χρήσιμο περιεχόμενο όπως είναι documentation, πληροφορίες για το Rest API και σύνδεσμο στο αποθετήριο στο github που θα περιέχει τον κώδικα της πτυχιακής.
Τέλος, η πτυχιακή εργασία θα απαρτίζεται από το γραπτό κομμάτι που θα περιγράφει αναλυτικά κάθε τομέα της.
Σε αυτή την αναφορά θα ασχοληθώ με τα εργαλεία τα οποία θα χρησιμοποιηθούν για την υλοποίηση της πτυχιακής μου εργασίας, πως θα χρησιμοποιηθούν, ποιές θα είναι οι κύριες λειτουργίες που θα την απαρτίζουν και ορισμένα χαρακτηριστικά για τα γραφικά της εργασίας (ιστοσελίδας, mod) και την ροή - λογική της.
Στόχος είναι το mod στο Minecraft που θα δημιουργηθεί σε αυτή την εργασία να ενσωματωθεί στην λογική και στα γραφικά του παιχνιδιού και, σε καμία περίπτωση, να μην περιορίσει τον παίχτη. Κάποια κύρια σημεία που θέλουν ιδιαίτερη προσοχή για να το πετύχουμε αυτό είναι:
Στόχος μου είναι το τελικό αποτέλεσμα να μοιάζει όσο πιο φυσικό γίνεται, όπως για παράδειγμα σε αυτή την φωτογραφία. Η αρχική μου σκέψη ήταν να δημιουργώ τα κτήρια προγραμματιστικά block ανά block, εάν και είναι ο τρόπος που διαχειρίζομαι τις κατασκευές στις προηγούμενες εργασίες μου τον θεώρησα λίγο μη επεκτάσιμο και δύσκολα διαχειρίσιμο. Για αυτό μετά από λίγη έρευνα βρήκα κάποια αρχεία με την ονομασία schematics τα οποία χρησιμοποιούνται από το community του minecraft που ασχολούνται με moding για την ανταλλαγή κτηρίων, σχεδίων ακόμα και ολόκληρους κόσμους. Οπότε σκέφτομαι να προγραμματίσω ένα reader για τέτοια αρχεία που θα περιέχουν κατασκευές όπως σπίτια και ύστερα θα τα χτίζω βάζοντας προγραμματιστικά στην σωστή θέση. Επιπλέον βρήκα αυτό το πρόγραμμα το οποίο μπορεί να μετατρέψει 3D μοντέλα σε "blueprints" για minecraft, όπως θα δείτε παρακάτω, και να τα κάνει export σε .schematic αρχεία.
Ο παραπάνω τρόπος ανοίγει και την πιθανότητα για δυναμική φόρτωση κτηρίων από τους χρήστες αλλά από την άλλη εκφέρει κάποιους τεχνικούς περιορισμούς για αυτό προς το παρόν δεν είναι σίγουρο ότι το mod θα χρησιμοποιεί τέτοια αρχεία για την διαχείριση και το χτίσιμο των κτηρίων.
Για κάθε client, πιο συγκεκριμένα για κάθε world, θα δημιουργείται μια διαφορετική πόλη έτσι ώστε ο χρήστης να έχει την επιλογή να δει μια παραλλαγμένη διαμόρφωσή της ανά δημιουργημένο κόσμο.
Στις παλιότερες εργασίες μου χρησιμοποίησα ένα block που δημιούργησα ο ίδιος και σαν texture είχε μία από τις παρακάτω εικόνες (κάθε σπίτι είχε διαφορετικό χρώμα):
Παρόλα αυτά τα textures δεν φαίνονται αρκετά ωραία όταν τα βλέπεις στο σύνολό τους σε ένα κτήριο και προκαλεί μία αίσθηση μονοτονίας. Στην παρούσα εργασία τα blocks των κτηρίων θα έχουν textures από τα ήδη υπάρχοντα blocks του minecraft όπως Stone, Wood κ.α. Παρακάτω μπορείτε να δείτε τα διαθέσιμα blocks στο Minecraft.
Ως τώρα για την ιστοσελίδα της πτυχιακής έχω δημιουργήσει το logo που θα χρησιμοποιήσω. Πιο κάτω θα επισυνάψω μια φωτογραφία του αλλά με λίγα λόγια χρησιμοποίησα ένα περίγραμμα κτηρίων τα οποία μετά από επεξεργασία στο photoshop το περίγραμμα αποτελείται από pixels όπως και τα γραφικά του Minecraft.
Σε αυτή την αναφορά θα γίνει ανάλυση της δόμησης, των χαρακτηριστικών και της περιγραφής του προγράμματος που θα κάνει εξόρυξη δεδομένων από το Twitter. Επιπλέον, θα παρουσιαστεί ενός αρχικός σχεδιασμός του προγράμματος mod για το Minecraft.
Το πρόγραμμα για την εξόρυξη των δεδομένων ονομάζεται TwitterDataMiner και ο σκοπός της λειτουργίας, περιεκτικά, είναι:
Το πρόγραμμα έχει χωριστεί σε διάφορα κομμάτια το οποίο το καθένα έχει την δική του λειτουργία. Τα σημαντικότερα πακέτα που στα οποία έχουν υλοποιηθεί οι κύριες λειτουργίες είναι τα database, http και searchtwitter.
Το πακέτο database
, όπως προδίδει και η ονομασία του, είναι υπεύθυνο για την αποθήκευση των tweets χρησιμοποιώντας την Data access object design patern για να αποξενωθεί η λογική αποθήκευσης των δεδομένων από την υπόλοιπη εφαρμογή. Οι κύριες λειτουργίες γίνονται στην κλάση StatusDAO.java όπου σε συνεργασία με τις υπόλοιπες κλάσεις του πακέτου εδραιώνουν σύνδεση στην βάση δεδομένων και ύστερα εκτελούν ερωτήματα για την αποθήκευση και την ανάκτηση των δεδομένων από αυτήν.
Το πακέτο http
είναι υπεύθυνο για το χτίσιμο του http request
που θα στείλουμε στο Twitter όπως και για να λάβει την απάντηση και να κρίνει εάν είναι "καλή" ή όχι (NOT_FOUND
, BAD_REQUEST
κ.α. δείτε HttpResponseCode.java). Το http request
που χρειαζόμαστε δημιουργείται και στέλνεται στην κλάση HttpRequest.java η οποία λαμβάνει την απάντηση και την αποθηκεύει σαν στιγμιότυπο της κλάσεις HttpResponse.java το οποίο αναθέτει σε τοπικές μεταβλητές τα απαραίτητα δεδομένα και προσφέρει και μια βοηθητική μέθοδο για την μετατροπή του HttpResponse
σε JSONObject
.
Τέλος το πακέτο searchtwitter
περιέχει το αντικείμενο TwitterSearch.java στο οποίο ορίζονται όλες οι παράμετροι όπως τα keywords που θα γίνουν search, το URL του API κ.α. και αρχικοποιεί την διαδικασία σύνδεσης με το Search API. Αφού μας επιστρέψει μια έγκυρη απάντηση το Twitter την περνάμε στο αντικείμενο SearchResult το οποίο κάνει προσπέλαση τα αποτελέσματα τις απάντησης και αποθηκεύει σε μια λίστα από στιγμιότυπα του αντικειμένου Status.java το οποίο είναι μία κλάση δεδομένων που κάθε ένα στιγμιότυπο της αντιπροσωπεύει ένα Tweet.
Για καλύτερη πληροφόρηση για την διάρκεια ζωής της εφαρμογής γίνονται logging σημαντικές πληροφορίες, σφάλματα και διάφορα δεδομένα για πιο εύκολο Debuging. Επιπλέον έχει δημιουργηθεί το αντικείμενο TwitterException.java, το οποίο κληρονομεί το αντικείμενο Exception της Java, και είναι αρμόδιο για το exception handling που χρειάζεται η εφαρμογή μας. Παρακάτω παρατίθεται ένα διάγραμμα ροής του προγράμματος.
Το mod που θα γραφτεί για το minecraft θα έχει ως τελικό στόχο την δημιουργίας της πόλης. Παρακάτω δίνεται επιγραμματικά η δομή που θα έχει ο κώδικας για τις κύριες εργασίες που θα χρειάζεται να εκτελούνται:
Τα παραπάνω σημεία αφορούν την πιο κύρια δομή του mod τα οποία αυτά με την σειρά τους θα αποτελούνται από ένα μεγάλο πλήθος αντικειμένων και μεθόδων για την επίτευξη του αποτελέσματος που δηλώνουν, αλλά η ανάλυσή τους θα γίνει σε μελλοντικό παραδοτέο.
Το αποθετήριο της εργασίας μου αποτελείτε από δύο κλαδιά (branches), το master και το development. Και τα δύο έχουν ίδια δομή και το master θα περιέχει κώδικα ο οποίος έχει υποβληθεί στα απαραίτητα tests και είναι σταθερός (stable), ενώ στο development κλαδί (branch) θα βρίσκεται ο κώδικας που αναπτύσσεται, κατά την διάρκεια της εργασίας.
Ο κώδικας για το minecraft mod βρίσκεται στον φάκελο TwitterCityMod όπου περιέχει δύο φακέλους, java/org/twittercity/twittercitymod και resources. Ο πρώτος περιέχει το κώδικα του mod ενώ ο δεύτερος όλα τα media που χρειάζεται το mod όπως textures, εικόνες κ.ο.κ.
Σε αυτή την χρονική στιγμή το master κλαδί (branch) περιέχει κώδικα για την εύκολη δημιουργία blocks και items.