Εισαγωγή καινοτομιών στον Πανελλήνιο Διαγωνισμό Εκπαιδευτικής Ρομποτικής | Αναστάσιος Λαδιάς
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Βελτίωση Τεχνικών Επαναχρησιμοποίησης Κώδικα από Αποθήκες Λογισμικού με χρήση Τεχνικών Ανάπτυξης Λογισμικού Οδηγούμενης από Ελέγχους και Τεχνικών Μετασχηματισμού Κώδικα
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...ISSEL
Σήμερα, η ανάπτυξη της τεχνολογίας και η αξιοποίηση της σε όλους τους τομείς της ζωής του ανθρώπου, δημιουργεί την ανάγκη για λογισμικό που είναι έυκολα προσαρμόσιμο, ευπαρουσίαστο, επιλύει πολλούς τύπους προβλημάτων, είναι οικονομικό και αξιόπιστο. Η Μοντελοστραφής Μηχανική (MDE), δηλαδή η ανάπτυξη λογισμικού που στηρίζεται σε μοντέλα, η αυτόματη παραγωγή κώδικα με βάση αυτά τα μοντέλα, η δυνατότητα γραφικής απεικόνισης του λογισμικού σε συνδυασμό με τις τεχνικές του Αυτοματοποιημένου Ελέγχου Συμπερασμών (Automated Reasoning) καλύπτουν ανά περίπτωση τις παραπάνω ανάγκες. Στην παρούσα διπλωματική εργασία, έγινε αξιοποίηση όλων των παραπάνω τεχνικών για την κατασκευή ενός ολοκληρωμένου εργαλείου, στην πλατφόρμα του Eclipse, με στόχο την κάλυψη των προαναφερθέντων αναγκών. Πιο συγκεκριμένα στα πλαίσια της Μοντελοστραφούς Μηχανικής (MDE) κατασκευάστηκε ένα μέτα-μοντέλο που αποτελεί τον πηρύνα του συστήματος και ενσωματώνει όρους από το πεδίο του Λογισμού. Στη συνέχεια, πάνω σε αυτό δημιουργήθηκε μια γραφική διεπαφή, στο περιβάλλον του Sirius, που δίνει την δυνατότητα στον ενδιαφερόμενο να καταγράψει, με γραφικό τρόπο, το μοντέλο που επιθυμεί. Η καταγραφή του μοντέλου γίνεται με την μορφή εξισώσεων σωστά διατυπωμένων στα πρότυπα της Κατηγορηματικής Λογικής Πρώτης Τάξης (FOL). Από αυτό το μοντέλο ύστερα, παράγεται αυτόματα κώδικας Java, ο οποίος αξιοποιώντας συναρτήσεις και αντικείμενα της βιβλιοθήκης TweetyProject, διαμορφώνεται κατάλληλα ώστε να αποτελεί έγκυρη είσοδο για τον built-in prover της ίδιας βιβλιοθήκης που μπορεί να πραγματοποιεί λογικούς ελέγχους στα πρότυπα του Αυτοματοποιημένου Ελέγχου Συμπερασμών. Μερικές ακόμα βοηθητικές συναρτήσεις σε Java, ολοκληρώνουν το εργαλείο της διπλωματικής. Όλα τα παραπάνω καθιστούν, το σύστημα που αναπτύχθηκε σε αυτή την διπλωματική, ικανό να χρησιμοποιηθεί από διάφορους υπάρχοντες μηχανισμούς αυτόματης παραγωγής συστημάτων, προκειμένου να ελέγξουν την εγκυρότητα των υπό σχεδίαση συστημάτων, δίχως κάποιος να απαιτείται να υλοποιήσει λογισμικό που κάνει λογικούς συμπερασμούς.
Design and Implementation of a Mechanism that automates the generation of Sof...ISSEL
Today, the development of technology and its utilization in all areas of human life, creates the need for software that is easily customizable, presentable, solves many types of problems, is economical and reliable. Model-Driven Engineering (MDE), ie software development based on models, the automatic production of code based on these models, the ability to graphically display the software, in combination with the techniques of Automated Reasoning meet the above needs. In the current diploma thesis, in order to meet the aforementioned needs, all the above techniques were utilized for the construction of a complete software tool, on the Eclipse platform. More specifically, in the framework of Model-Driven Engineering (MDE), a meta model was constructed which constitutes the core of the system and incorporates terms from the field of Logic. Expanding on this, a graphical interface was created, in the Sirius environment, which allows the interested party to construct, in a graphic way, the model he wants. The construction of the model is done in the form of equations, correctly formulated in the standards of First Order Logic (FOL). From this model, Java code is automatically generated, which utilizing functions and objects of the TweetyProject library, is properly configured to be a valid input for the built-in prover of the same library, that can perform logical tests in the standards of Automated Logic. Some more functions written in Java, complete the software tool of this diploma thesis. All of the above, constitute the software tool developed in this diploma, capable of being used by various mechanisms that automatically produce systems, in order to check the validity of the systems under design, without the need to implement additional software that draws logical conclusions.
Εφαρµογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα µε στόχο τ...ISSEL
Στη σημερινή εποχή, η ραγδαία ανάπτυξη της τεχνολογίας, έχει οδηγήσει και στη γρήγορη ανάπτυξη έργων λογισµικού πολλών γραμμών κώδικα, τα οποία έχουν επηρεάσει πολλές πτυχές της καθημερινής µας ζωής. Η αναγνωσιμότητας του κώδικα, αποτελεί χρήσιμο ποιοτικό χαρακτηριστικό ενός έργου λογισµικού. Μάλιστα, έρευνες έχουν δείξει ότι επηρεάζει το έργο τόσο κατά το στάδιο ανάπτυξής του όσο και κατά τη διάρκεια συντήρησης του έργου. Για τον σκοπό αυτό, έχουν αναπτυχθεί διάφορα μοντέλα αναγνωσιμότητας κώδικα. Κάθε ένα από αυτά τα μοντέλα βασίζεται σε διαφορετικά χαρακτηριστικά, αναλύοντας πτυχές όπως η δομή του κώδικα, η όψη του κώδικα, αλλά και το περιεχόµενο. Στην παρούσα διπλωματική εργασία, επιχειρούμε, βασιζόμενοι στα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, να αναλύσουμε περαιτέρω την έννοια της αναγνωσιμότητας. Αναλύθηκαν commits χρηστών από την πλατφόρμα GitHub, τα οποία είναι συνδεδεμένα µε την αναγνωσιμότητα του κώδικα, µε βάση κάποια από τα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας. Αρχικός στόχος ήταν µε βάση τα δεδοµένα που προέκυψαν από αυτά τα commits των προγραμματιστών να διερευνηθεί εάν τα commits, τα οποία ισχυρίζονται τη βελτίωση της αναγνωσιμότητας πράγματι τη βελτιώνουν, καθώς και ποιες αλλαγές ή συνδυασμός αυτών είναι υπεύθυνες για τη βελτίωση ή µη της αναγνωσιμότητας. Ένας δεύτερος στόχος, ο οποίος µας απασχόλησε ήταν εάν θα µπορούσαμε µέσα από τις διαφορές των χαρακτηριστικών του κώδικα πριν και µετά το commit να καταλάβουμε ποια μοντέλα αναγνωσιμότητας είναι ικανά να κατηγοριοποιήσουν ποιες αλλαγές έχουν πραγματοποιηθεί στον κώδικα, καθώς και να προτείνουμε ένα πιο αποδοτικό μοντέλο. Και στα δύο παραπάνω ερωτήματα για την ανάπτυξη των μοντέλων χρησιμοποιήθηκαν μετρικές από διαφορετικά μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, τα οποία συγκρίθηκαν ως προς την απόδοσή τους.
Μιχάλης Σφακάκης (Εθνικό Κέντρο Τεκμηρίωσης): "Συλλογικοί Κατάλογοι & Διαδίκτυο"
Στο πλαίσιο της υλοποίησης του έργου "Συλλογικός Κατάλογος Δημοσίων Βιβλιοθηκών" πραγματοποιήθηκε η ημερίδα με θέμα:
¨Συνεργασίες λαϊκών βιβλιοθηκών
Εργαλεία, πρότυπα και συλλογικοί κατάλογοι"
Λιβαδειά, Συνεδριακό Κέντρο Κρύας - 24 Νοεμβρίου 2006
Ανάπτυξη συστήματος ιεραρχικής ομαδοποίησης και διαχείρισης κειμένων για αποκ...ISSEL
Η ανάκτηση πληροφορίας ανέκαθεν ήταν μια πλέον σημαντική πτυχή κάθε διεργασίας και δεδομένης της ταχείας αύξησης της απαίτησης γρήγορης και εύστοχης παροχής και ανάκτησης πληροφοριών, δεν είναι τίποτα παρά φυσικό να γίνεται συλλογική προσπάθεια προς την βελτιστοποίηση αυτής της διαδικασίας με οποιαδήποτε μέσα είναι διαθέσιμα, όπως η Τεχνητή Νοημοσύνη. Με αυτό τον τρόπο θα μπορεί ένας υπολογιστής να “εκπαιδευτεί” και να βοηθάει στο έργο αυτό, αντί να είναι μονάχα ένα εργαλείο για μαθηματικά πιθανοτήτων και στατιστική. Σε μία εποχή όπου τα πάντα είναι καθοδηγούμενα από την πληροφορία και τα δεδομένα, η ανάγκη για δομημένα δεδομένα και ορθή ανάκτηση πληροφορίας είναι τουλάχιστον επιτακτική. Η δομή και η οργάνωση στα δεδομένα διευκολύνει την λήψη αποφάσεων και μέσω αυτού επιβεβαιώνεται πάντα η σημασία και η συνεισφορά της τεχνητής νοημοσύνης και των μοντέλων μηχανικής μάθησης. Η εφαρμογή και η υλοποίηση μεθόδων και τεχνικών βαθιάς μάθησης μπορεί σταδιακά μπορεί να βοηθήσει στην απαλλαγή μας από την εξάρτηση από λέξεις κλειδιά και να οδεύσουμε προς την διδασκαλία της σημασιολογικής κατανόησης της φυσικής γλώσσας από τους υπολογιστές. Σε αυτό μπορεί να συνεισφέρει εν μέρει από ένα πλήρως αυτόνομο σύστημα ικανό να οργανώνει, να διαχειρίζεται και να ταξινομεί έγγραφα σημασιολογικά, με ελάχιστη εκπαίδευση. Η αξιοποίηση των δυνατοτήτων και της πολυχρηστικότητας της μάθησης και ταξινόμησης μηδενικών και λίγων βολών, καθώς και των σύγχρονων τεχνικών θεματικής μοντελοποίησης, μπορεί κανείς να αναπτύξει μια εφαρμογή που ως είσοδο λαμβάνει ακατέργαστα μη επισημειωμένα ή επεξεργασμένα δεδομένα και να επιστρέφει μια πλήρως λειτουργική εφαρμογή ερωτοαπαντήσεων. Στην προσπάθεια μεγιστοποίησης της πολυχρηστικότητας του εν λόγω συστήματος, η παρούσα διπλωματική εργασία ερευνεί και αξιολογεί την βιωσιμότητα ενός συστήματος τέτοιας φύσεως. Δεδομένου ότι ο τελικός σκοπός είναι η δομημένη πληροφορία και η αποτελεσματική ανάκτηση της, θα εξεταστεί η υπόθεση της αποκεντρωμένης προσέγγισης, καθώς μειώνονται σημαντικά οι απαιτήσεις υπολογιστικής ισχύος και αποθηκευτικού χώρου. Μέσω δοκιμών και πειραμάτων τα παραγόμενα δεδομένα φαίνεται να υποστηρίζουν την υπόθεση υπέρ ενός τέτοιου συστήματος, και δυνητικά με διάφορα πλεονεκτήματα υπέρ ενός αντίστοιχου αλλά ενιαίου συστήματος.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...ISSEL
Τις τελευταίες δεκαετίες, τα έργα λογισµικού γίνονται όλο και µεγαλύτερα, χρησιµότερα και διεισδύουν σε όλο και περισσότερες πτυχές του ανθρώπινου ϐίου. Κατά την ανάπτυξη και τη συντήρηση λογισµικού, οι προγραµµατιστές σπαταλούν µεγάλο µέρος του χρόνου τους στον εντοπισµό και τη διόρθωση σφαλµάτων. Τα εργαλεία στατικής ανάλυσης κώδικα αυτοµατοποιούν τη διαδικασία εντοπισµού των σφαλµάτων. Η χρήση τους, ωστόσο, παραµένει περιορισµένη, καθώς η κατανόηση και η διόρθωση σφαλµάτων παραµένουν ευθύνες των προγραµµατιστών. Τα τελευταία χρόνια, πραγµατοποιούνται έρευνες για την εξόρυξη προτύπων διόρθωσης τέτοιων σφαλµάτων άλλα και την ανάπτυξη συστηµάτων αυτοµατοποιηµένης διόρθωσης σφαλµάτων. Οι πρώτες στοχεύουν στην κατανόηση του τρόπου που οι προγραµµατιστές αντιµετωπίζουν τέτοια προβλήµατα, και πολλές ϕορές τα αποτελέσµατα τους αποτελούν ϐάση για τις δεύτερες. Η παρούσα διπλωµατική, στοχεύει στην εξόρυξη χρήσιµων προτύπων διόρ ϑωσης σφαλµάτων για σφάλµατα που ανήκουν στους κανόνες του εργαλείου στατικής ανάλυσης PMD. Αρχικά, µέσω κατάλληλων ερωτηµάτων στο API του Github, αναζητο ύνται commits που αφορούν διορθώσεις τέτοιων σφαλµάτων και λαµβάνονται οι εκδόσεις των αρχείων πριν και µετά των αλλαγών των commits. Στη συνέχεια, µέσω εκτέλεσης του PMD στις δύο εκδόσεις, εντοπίζονται οι επιµέρους διορθώσεις και δηµιουργείται κα τάλληλο σύνολο δεδοµένων, αποτελούµενο αποκλειστικά από διορθώσεις σφαλµάτων, κανόνων του PMD. Οι επιµέρους διορθώσεις αναλύονται και µε αξιοποίηση της αναπα ϱάστασης κώδικα srcML και του αλγορίθµου απόστασης επεξεργασίας δέντρου Gumtree, είναι εφικτή η εξαγωγή µιας ακολουθίας όρων που είναι αντιπροσωπευτικοί για κάθε διόρθωση. ΄Ετσι, µε εύρεση του µήκους της µέγιστης κοινής υπακολουθίας µεταξύ δύο διορθώσεων, είναι εφικτή η ανάπτυξη ενός µοντέλου οµοιότητας για τις διορθώσεις συνολικά και κατ΄ επέκταση, η οµαδοποίηση τους και η εξαγωγή προτύπων διόρθω σης. Πραγµατοποιήθηκαν δύο διαφορετικά πειράµατα οµαδοποίησης : στο ένα αξιοποιήθηκε ο αλγόριθµος K-medoids και στο άλλο ο DBSCAN. Και στα δύο πειράµα τα, άλλα ιδιαίτερα σε αυτό µε τον DBSCAN, σχεδόν κάθε εξαγόµενη οµάδα αποτελείται κυρίως από διορθώσεις σφαλµάτων ενός κανόνα του PMD. Παράλληλα, µε τον υπο λογισµό του αριθµού των commits και των αποθετηρίων από τα οποία προέρχονται οι διορθώσεις κάθε οµάδας - προτύπου, ϕανερώνεται ότι οι περισσότερες οµάδες προκύπτουν από διορθώσεις προερχόµενες από µεγάλο αριθµό commits και αποθετηρίων. ΄Ετσι αντανακλούν τον τρόπο που αρκετοί προγραµµατιστές ϑα αντιµετώπιζαν παρόµοια προβλήµατα. Συνεπώς, τα εξαγόµενα πρότυπα ϑα µπορούσαν να αποτελέσουν αφετη ϱία για κάποιον µηχανισµό αυτοµατοποιηµένης διόρθωσης σφαλµάτων, ϐασιζόµενο στο PMD για τον εντοπισµό τους.
Applying Data Mining Techniques to Extract Fix Patterns for Static Analysis V...ISSEL
Contemporary Software products are getting larger and more complex. Dur ing the processes of software development and maintenance, developers spend a significant amount of their work time on detecting and fixing bugs. Static Analysis Tools automate the process of bug detection. Their application, however, is lim ited as the process of understanding and fixing of bugs, remains part of developer’s responsibilities. Lately, several research approaches aspire to extract useful bug fix patterns, or to automate the bug fixing process. The first approaches focus on understanding how developers face similar problems and frequently they serve as groundwork for systems for automated bug fixing. Our research aims at the extraction of useful bug fix patterns, for bugs that trigger the rules of the static analysis tool PMD. Initially, by querying the Github API, we search for commits that correspond to fixes of these categories of bugs. Both the before and after the commit versions of the commits’ files are downloaded. Then, by executing PMD on the two versions of each file, individual fixes are detected and a proper dataset is crafted. The dataset comprises fixes of bugs detectable from rules of PMD. The fixes are analyzed, and by utilizing srcML code representation and tree edit distance algorithm Gumtree, a representative sequence is extracted from each fix. Afterwards, by utilizing the metric of longest common subsequence between two sequences of two fixes, we develop a similarity scheme for the dataset’s fixes. This similarity scheme, operates as the base for the clustering of fixes and pattern extraction. In order to cluster the fixes, two separate experiments were conducted, one with K-medoids and one with the DBSCAN algorithm. In both experiments, but mostly with the DBSCAN algorithm, almost each cluster groups mostly bug fixes of a certain PMD rule. Alongside, by computing the number of commits and repositories from which the fixes of each cluster come from, it becomes obvious, that most of the clusters arise from fixes coming from a large number of commits and repositories. Thus, the extracted patterns correspond to the way in which similar problems are faced, by a number of different developers. Consequently, our extracted patterns, can be utilized as groundwork for an automated bug fixing system, where PMD will serve for bug detection.
Applying Data Mining Techniques on Software Repositories to Extract Design an...ISSEL
Close collaboration between software developers is considered essential in order to build innovative software projects. For this reason, there are several online program-hosting platforms, which enable their users to watch each other’s changes, recommendations and comments towards the improvement and evolution of code. These platforms also control different versions of the software code so that the developer can revert to previous ones if desired. All the modifications performed at a given time by a member of the software development team are bundled in a commit, where the main reasons behind them are also recorded. As a consequence, it goes without saying that these series of changes include a lot of useful information about the way a software project evolves. Applying data mining techniques on public software repositories and the data we discussed above could unveil some common bug fixes, systematic edits, frequent types of changes in a project’s architecture and frequently-used design patterns either known or unknown ones. An extensive bibliographic research in this domain reveals that the majority of scientific efforts has focused on bug fixes and systematic edits ignoring some more coarse-grained (high-level) code evolution or design patterns. In this context, this dissertation tries to extract the relationships between the classes of an object-oriented program, while also seeking to monitor the way they evolve over time. To achieve these goals, this diploma thesis adapts a Relationship Extractor tool based on the Abstract Syntax Trees analysis of some of the most popular software projects in Github web platform. After analyzing and processing those syntax trees, useful information is extracted concerning the operation, the abstraction level as well as the inheritance of classes. This information is then modeled as graphs (with classes as nodes and the connections between them as edges). These steps are not only executed for the latest version of a project, but also in each and every commit with a view to extracting the difference in relationships between the versions of a project before and after the specific commit. Finally, gSpan, which is a frequent-subgraph mining algorithm, is applied, in order to detect code design and evolution patterns used by the software community worldwide.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...ISSEL
Η στενή συνεργασία μεταξύ των προγραμματιστών για την ανάπτυξη καινοτόμων έργων λογισμικού κρίνεται απαραίτητη. Για αυτόν τον λόγο, υπάρχουν αρκετές διαδικτυακές πλατφόρμες φιλοξενίας προγραμμάτων, οι οποίες δίνουν τη δυνατότητα στους χρήστες τους να παρακολουθεί ο ένας τις αλλαγές, τις προτάσεις και τις παρατηρήσεις του άλλου για την εξέλιξη και τη βελτίωση του κώδικα. Επιπλέον, οι πλατφόρμες αυτές ελέγχουν τις διαφορετικές εκδόσεις του κώδικα ενός έργου, ώστε ο προγραμματιστής να μπορεί να ανατρέξει σε οποιαδήποτε από αυτές, εάν το επιθυμεί. Όλες οι τροποποιήσεις, οι οποίες διενεργούνται από ένα πρόσωπο της ομάδας ανάπτυξης λογισμικού σε μία δεδομένη χρονική στιγμή, συγκεντρώνονται σε ένα commit, όπου καταγράφονται μάλιστα όλοι οι λόγοι πίσω από αυτές. Έτσι, γίνεται κατανοητό ότι τέτοιες συλλογές αλλαγών εμπεριέχουν πολλές χρήσιμες πληροφορίες για τον τρόπο με τον οποίο εξελίσσεται ένα έργο λογισμικού. Η εφαρμογή τεχνικών του κλάδου της εξόρυξης δεδομένων στις δημόσιες αποθήκες λογισμικού και σε όλα τα δεδομένα που αναφέρθηκαν παραπάνω θα μπορούσε να φέρει στο φως ορισμένες συχνές διορθώσεις σφαλμάτων, συστηματικές τροποποιήσεις, επαναλαμβανόμενους τύπους αλλαγών στην αρχιτεκτονική, καθώς και κάποια ευρέως χρησιμοποιούμενα σχεδιαστικά πρότυπα, γνωστά ή μη. Μία εκτενής βιβλιογραφική έρευνα σε αυτόν τον τομέα αποκαλύπτει ότι οι περισσότερες προσπάθειες επιστημόνων έχουν στραφεί στις διορθώσεις σφαλμάτων και στις συστηματικές τροποποιήσεις, με αποτέλεσμα να έχουν αγνοηθεί κάποια λιγότερο λεπτομερή, δηλαδή πιο υψηλού επιπέδου (high level) μοτίβα εξέλιξης ή συγγραφής κώδικα. Στο πλαίσιο αυτό, η παρούσα διπλωματική εργασία προσπαθεί να ανακαλύψει τις σχέσεις ανάμεσα στις διάφορες κλάσεις ενός προγράμματος, αλλά και να παρακολουθήσει τον τρόπο με τον οποίο αυτές αλλάζουν στο πέρασμα του χρόνου. Για να επιτευχθούν οι παραπάνω στόχοι, προσαρμόζεται ένα εργαλείο εξαγωγής σχέσεων (Relationships Extractor), η λειτουργία του οποίου βασίζεται στην ανάλυση των Αφηρημένων Συντακτικών Δέντρων (Abstract Syntax Trees) που αφορούν τους κώδικες μερικών από τα πιο δημοφιλή έργα λογισμικού της διαδικτυακής πλατφόρμας του Github. Αφού αναλυθούν και επεξεργαστούν αυτά τα συντακτικά δέντρα, εξάγονται πληροφορίες για τη λειτουργία των κλάσεων, την αφαιρετικότητά τους και την κληρονομικότητα, οι οποίες στη συνέχεια μοντελοποιούνται σε γράφους (με τις κλάσεις ως κόμβους και τις συνδέσεις τους ως ακμές). Αφού λοιπόν ολοκληρωθούν οι παραπάνω ενέργειες για την τελική μορφή του εκάστοτε προγράμματος, η ίδια σειρά ενεργειών ακολουθείται και για κάθε στιγμιότυπό του, εξάγοντας τη διαφορά ως προς τις σχέσεις ανάμεσα στην έκδοσή του πριν και μετά από κάθε commit ξεχωριστά. Τέλος, εφαρμόζοντας τον αλγόριθμο gSpan (graph-based Substructure pattern mining), έναν αλγόριθμο αναζήτησης συχνών πογράφων σε ένα σύνολο γράφων, ανιχνεύονται ορισμένα ευρέως χρησιμοποιούμενα από την παγκόσμια προγραμματιστική κοινότητα, μοτίβα σχεδίασης και εξέλιξης λογισμικού.
Επανοργάνωση πηγαίου κώδικα από γράφους εξαρτήσεων οντοτήτων µε βάση παραδείγ...ISSEL
Με την ολοένα και αυξανόµενη ενσωµάτωση του λογισµικού σε κοινωνικές δοµές όπως η εκπαίδευση και η υγεία, η γρήγορη συντήρηση (π.χ. αποσφαλµάτωση) µεγάλων έργων λογισµικού γίνεται όλο και πιο σηµαντική. Για αυτό το σκοπό, καθίσταται αναγκαία η κοινοτική οργάνωση του πηγαίου κώδικα σε οµάδες οντοτήτων (π.χ. µεθόδων σε κλάσεις, κλάσεων σε πακέτα, πακέτων σε ϐιβλιοθήκες), έτσι ώστε να διευκολύνεται η κατανόηση και πλοήγηση µεταξύ υλοποιηµένων λειτουργιών. Αν οι οντότητες οργανωθούν σε γράφους των οποίων οι ακµές αντικατοπτρίζουν τις εξαρτήσεις τους, υπάρχουν κοινά αποδεκτές αρχές της τεχνολογίας λογισµικου για το τι συνιστά καλή ποιοτικά οργάνωση του πηγαίου κώδι κα, όπως η υψηλή συνεκτικότητα εντός οµάδων οντοτήτων και η χαλαρή συνδεσιµότητα µε οντότητες άλλων οµάδων. Σε αυτή τη διπλωµατική, εξετάζεται το πρόβληµα της αυτοµατο ποιηµένης επανοργάνωσης οντοτήτων πηγαίου κώδικα ώστε να ϐελτιστοποιηθούν µετρικές που ποσοτικοποιούν αρχές ποιοτικής κοινοτικής οργάνωσης. Για να το πετύχουµε αυτό, χρησιµοποιούµε µεθόδους εξόρυξης κοινοτικής πληροφορίας από γράφους εξαρτήσεων ο ντοτήτων. Η κύρια υπόθεσή µας είναι η τρέχουσα ιεραρχική οργάνωση του κώδικα περιέχει ψήγµατα της ϐέλτιστης οργάνωσης και τη χρησιµοποιούµε ως µια προσεγγιστική πρώτη εκτίµηση την οποία και προσπαθούµε να ϐελτιώσουµε µε ϕίλτρα γράφων. Αυτή η ηµιε πιβλεπόµενη µέθοδος συγκρίνεται µε υπάρχουσες πρακτικές άπληστης ϐελτιστοποίησης της αρχικής εκτίµησης και µη επιβλεπόµενης γενετικής ϐελτιστοποίησης των κοινοτήτων στους γράφους εξαρτήσεων οντοτήτων 10 δηµοφιλών έργων λογισµικού. Βρίσκουµε ότι, δεδοµένης µια ¨στρευλωµένης¨ οργάνωσης, η προσέγγισή µας επιτρέπει την ακριβέστερη εξόρυξη των κοινοτήτων που ορίστηκαν από τους προγραµµατιστές των έργων. Επιπρο σθέτως, ολοκληρώνεται σε σχεδόν γραµµικούς χρόνους εκτέλεσης σε σχέση με τον αριθµό των εξαρτήσεων που επιτρέπουν την εφαρµογή της σε μεγάλα έργα λογισµικού.
Source code remodularization based on component dependency graphsISSEL
With the increasing integration of software in social structures, such as education and health, maintenance (e.g. debugging) of large software projects is becoming increasingly important. To this end, it is necessary to organize the source code into communities of artifacts (e.g. methods in classes, classes in packages, packages in libraries) to fa cilitate understandability and ease-of-navigation across implemented functionalities. If artifacts are organized into graphs whose edges reflect their dependencies, there ex ist commonly accepted software engineering principles of what constitutes high-quality source code organization, such as high connectivity of artifacts within groups and loose connectivity with artifacts of other groups. In this dissertation, we tackle the problem of automated reorganization of source code entities to optimize measures quantifying source code community organization quality. To this end, we apply community ex traction methods on dependency graphs. Our main hypothesis is that the existing hierarchical organization of source code comprises fragments of the optimal organiza tion and thus we use it as a first approximation that we refine with graph filters. This type of semi-supervised technique is compared to existing greedy optimization and un supervised genetic optimization approaches across 10 popular software projects. We find that, given a permutation of the ideal organization provided by developers, our approach derives the community organization closest to the ideal one. Additionally, it runs in near-linear times with respect to the number of dependencies that enable its application on dependency graphs of large projects.
Εισήγηση του Αναστάσιου Λαδιά, σχεδιαστή του «CodeAthon: Βελτιώστε το παιχνίδι και παίξτε», ενός μη διαγωνιστικού hackathon για μαθητές 8-16 ετών, το οποίο χρησιμοποιεί το προγραμματιστικό περιβάλλον Scratch και υλοποιείται στο πλαίσιο του Europe Code Week 2018.
Η εισήγηση πραγματοποιήθηκε στο πλαίσιο των συναντήσεων κατάρτισης με τους εκπαιδευτικούς των συμμετέχουσων ομάδων, στο πλαίσιο του CodeAthon 2018.
Το CodeAthon διοργανώνεται από τους οργανισμούς STEM Education και WRO Hellas με στρατηγικό συνεργάτη την COSMOTE και έχει σχεδιαστεί για να πραγματοποιηθεί ταυτόχρονα σε τέσσερις πόλεις της Ελλάδας στις 18, 19 & 20 Οκτωβρίου 2018. Συνδιοργανωτές του CodeAthon είναι ο Δήμος Τρικκαίων, η OTE Academy, το ACT – American College of Thessaloniki και το Ελληνικό Ανοικτό Πανεπιστήμιο.
Στο CodeAthon μπορούν να συμμετάσχουν μαθητές 8-16 ετών, σχηματίζοντας ομάδες 2-3 ατόμων. Οι ομάδες μπορούν να προέρχονται από όλη την Ελλάδα αλλά για τη συμμετοχή τους, θα πρέπει να μπορούν να ταξιδέψουν σε μία από τις εξής πόλεις: Αθήνα – Θεσσαλονίκη – Τρίκαλα – Πάτρα. Σκοπός του CodeAthon είναι να παροτρύνει τους μαθητές να αποκτήσουν μία δημιουργική στάση απέναντι στον προγραμματισμό, αναπτύσσοντας παράλληλα τις προγραμματιστικές τους δεξιότητες και μαθαίνοντας να εργάζονται ομαδικά.
Το θέμα;
Ένα…ημιτελές παιχνίδι που ζητά να τελειοποιηθεί!
Τον Σεπτέμβριο 2018, δηλαδή ένα μήνα πριν από το CodeAthon, στις συμμετέχουσες ομάδες θα αποσταλούν ο κώδικας Scratch και το ΚωδικΌραμα ενός παιχνδιού με τηλεχειριζόμενα εικονικά ρομποτικά οχήματα. Το παιχνίδι όμως θα είναι ημιτελές! Οι ομάδες καλούνται να σκεφτούν τρόπους για να το ολοκληρώσουν και να το μετατρέψουν σε μία διασκεδαστική παιγνιώδη εμπειρία.
Την ημέρα διεξαγωγής του CodeAthon, τον Οκτώβριο 2018, οι ομάδες θα έχουν στη διάθεσή τους 4 ώρες για να εμπλουτίσουν το παιχνίδι. Για να το κάνουν αυτό, οι ομάδες μπορούν είτε να εφαρμόσουν τις ιδέες που σκέφτηκαν κατά τον μήνα της προετοιμασίας, είτε να αυτοσχεδιάσουν επί τόπου, με την καθοδήγηση των συνεργατών του STEM Education που θα τους δίνουν συγκεκριμένα προβλήματα προς επίλυση (πχ. πρόσθετες συμπεριφορές που θα βασίζονται σε συμβάντα, ανάπτυξη «οδικών βοηθημάτων», χειρισμός των εικονικών οχημάτων με εξωτερικά χειριστήρια, κατασκευή εικονικών οργάνων μέτρησης, δημιουργία ηχητικού interface, παραγωγή cel animation κ.ά.).
Θα αναδειχθούν νικητές;
Ναι, το παιχνίδι και η μάθηση!
Το CodeAthon δεν έχει διαγωνιστικό χαρακτήρα. Ο σκοπός του είναι καθαρά εκπαιδευτικός και ψυχαγωγικός. Κατά τη διάρκεια του CodeAthon θα παρουσιαστούν ζωντανά τα παιχνίδια ορισμένων από τις ομάδες, κατόπιν σχετικής κλήρωσης. Αντίστοιχα, μετά από την ολοκλήρωση του CodeAthon, τα έργα όλων των ομάδων θα αναρτηθούν δημόσια (μαζί με την περιγραφή και τον κώδικά τους, καθώς επίσης με τα στοιχεία των μελών της ομάδας, εφόσον τα μέλη της το επιθυμούν) και θα αποτελέσουν τμήματα ενός αποθετηρίου με ανοικτή πρόσβαση για όλους.
Η ιστορία, ο χαρακτήρας και η εξέλιξη του Πανελλήνιου Διαγωνισμού Εκπαιδευτικ...WROHellas
Η ιστορία, ο χαρακτήρας και η εξέλιξη του Πανελλήνιου Διαγωνισμού Εκπαιδευτικής Ρομποτικής Δημοτικού - Η διαδικασία των κρίσεων | Απόστολος Αμπαριώτης
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
More Related Content
Similar to Εισαγωγή καινοτομιών στον Πανελλήνιο Διαγωνισμό Εκπαιδευτικής Ρομποτικής | Αναστάσιος Λαδιάς | WRO Teacher Camp 2018
Βελτίωση Τεχνικών Επαναχρησιμοποίησης Κώδικα από Αποθήκες Λογισμικού με χρήση Τεχνικών Ανάπτυξης Λογισμικού Οδηγούμενης από Ελέγχους και Τεχνικών Μετασχηματισμού Κώδικα
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...ISSEL
Σήμερα, η ανάπτυξη της τεχνολογίας και η αξιοποίηση της σε όλους τους τομείς της ζωής του ανθρώπου, δημιουργεί την ανάγκη για λογισμικό που είναι έυκολα προσαρμόσιμο, ευπαρουσίαστο, επιλύει πολλούς τύπους προβλημάτων, είναι οικονομικό και αξιόπιστο. Η Μοντελοστραφής Μηχανική (MDE), δηλαδή η ανάπτυξη λογισμικού που στηρίζεται σε μοντέλα, η αυτόματη παραγωγή κώδικα με βάση αυτά τα μοντέλα, η δυνατότητα γραφικής απεικόνισης του λογισμικού σε συνδυασμό με τις τεχνικές του Αυτοματοποιημένου Ελέγχου Συμπερασμών (Automated Reasoning) καλύπτουν ανά περίπτωση τις παραπάνω ανάγκες. Στην παρούσα διπλωματική εργασία, έγινε αξιοποίηση όλων των παραπάνω τεχνικών για την κατασκευή ενός ολοκληρωμένου εργαλείου, στην πλατφόρμα του Eclipse, με στόχο την κάλυψη των προαναφερθέντων αναγκών. Πιο συγκεκριμένα στα πλαίσια της Μοντελοστραφούς Μηχανικής (MDE) κατασκευάστηκε ένα μέτα-μοντέλο που αποτελεί τον πηρύνα του συστήματος και ενσωματώνει όρους από το πεδίο του Λογισμού. Στη συνέχεια, πάνω σε αυτό δημιουργήθηκε μια γραφική διεπαφή, στο περιβάλλον του Sirius, που δίνει την δυνατότητα στον ενδιαφερόμενο να καταγράψει, με γραφικό τρόπο, το μοντέλο που επιθυμεί. Η καταγραφή του μοντέλου γίνεται με την μορφή εξισώσεων σωστά διατυπωμένων στα πρότυπα της Κατηγορηματικής Λογικής Πρώτης Τάξης (FOL). Από αυτό το μοντέλο ύστερα, παράγεται αυτόματα κώδικας Java, ο οποίος αξιοποιώντας συναρτήσεις και αντικείμενα της βιβλιοθήκης TweetyProject, διαμορφώνεται κατάλληλα ώστε να αποτελεί έγκυρη είσοδο για τον built-in prover της ίδιας βιβλιοθήκης που μπορεί να πραγματοποιεί λογικούς ελέγχους στα πρότυπα του Αυτοματοποιημένου Ελέγχου Συμπερασμών. Μερικές ακόμα βοηθητικές συναρτήσεις σε Java, ολοκληρώνουν το εργαλείο της διπλωματικής. Όλα τα παραπάνω καθιστούν, το σύστημα που αναπτύχθηκε σε αυτή την διπλωματική, ικανό να χρησιμοποιηθεί από διάφορους υπάρχοντες μηχανισμούς αυτόματης παραγωγής συστημάτων, προκειμένου να ελέγξουν την εγκυρότητα των υπό σχεδίαση συστημάτων, δίχως κάποιος να απαιτείται να υλοποιήσει λογισμικό που κάνει λογικούς συμπερασμούς.
Design and Implementation of a Mechanism that automates the generation of Sof...ISSEL
Today, the development of technology and its utilization in all areas of human life, creates the need for software that is easily customizable, presentable, solves many types of problems, is economical and reliable. Model-Driven Engineering (MDE), ie software development based on models, the automatic production of code based on these models, the ability to graphically display the software, in combination with the techniques of Automated Reasoning meet the above needs. In the current diploma thesis, in order to meet the aforementioned needs, all the above techniques were utilized for the construction of a complete software tool, on the Eclipse platform. More specifically, in the framework of Model-Driven Engineering (MDE), a meta model was constructed which constitutes the core of the system and incorporates terms from the field of Logic. Expanding on this, a graphical interface was created, in the Sirius environment, which allows the interested party to construct, in a graphic way, the model he wants. The construction of the model is done in the form of equations, correctly formulated in the standards of First Order Logic (FOL). From this model, Java code is automatically generated, which utilizing functions and objects of the TweetyProject library, is properly configured to be a valid input for the built-in prover of the same library, that can perform logical tests in the standards of Automated Logic. Some more functions written in Java, complete the software tool of this diploma thesis. All of the above, constitute the software tool developed in this diploma, capable of being used by various mechanisms that automatically produce systems, in order to check the validity of the systems under design, without the need to implement additional software that draws logical conclusions.
Εφαρµογή Τεχνικών Μηχανικής Μάθησης για την Ανάλυση Αλλαγών Κώδικα µε στόχο τ...ISSEL
Στη σημερινή εποχή, η ραγδαία ανάπτυξη της τεχνολογίας, έχει οδηγήσει και στη γρήγορη ανάπτυξη έργων λογισµικού πολλών γραμμών κώδικα, τα οποία έχουν επηρεάσει πολλές πτυχές της καθημερινής µας ζωής. Η αναγνωσιμότητας του κώδικα, αποτελεί χρήσιμο ποιοτικό χαρακτηριστικό ενός έργου λογισµικού. Μάλιστα, έρευνες έχουν δείξει ότι επηρεάζει το έργο τόσο κατά το στάδιο ανάπτυξής του όσο και κατά τη διάρκεια συντήρησης του έργου. Για τον σκοπό αυτό, έχουν αναπτυχθεί διάφορα μοντέλα αναγνωσιμότητας κώδικα. Κάθε ένα από αυτά τα μοντέλα βασίζεται σε διαφορετικά χαρακτηριστικά, αναλύοντας πτυχές όπως η δομή του κώδικα, η όψη του κώδικα, αλλά και το περιεχόµενο. Στην παρούσα διπλωματική εργασία, επιχειρούμε, βασιζόμενοι στα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, να αναλύσουμε περαιτέρω την έννοια της αναγνωσιμότητας. Αναλύθηκαν commits χρηστών από την πλατφόρμα GitHub, τα οποία είναι συνδεδεμένα µε την αναγνωσιμότητα του κώδικα, µε βάση κάποια από τα ήδη υπάρχοντα μοντέλα αξιολόγησης αναγνωσιμότητας. Αρχικός στόχος ήταν µε βάση τα δεδοµένα που προέκυψαν από αυτά τα commits των προγραμματιστών να διερευνηθεί εάν τα commits, τα οποία ισχυρίζονται τη βελτίωση της αναγνωσιμότητας πράγματι τη βελτιώνουν, καθώς και ποιες αλλαγές ή συνδυασμός αυτών είναι υπεύθυνες για τη βελτίωση ή µη της αναγνωσιμότητας. Ένας δεύτερος στόχος, ο οποίος µας απασχόλησε ήταν εάν θα µπορούσαμε µέσα από τις διαφορές των χαρακτηριστικών του κώδικα πριν και µετά το commit να καταλάβουμε ποια μοντέλα αναγνωσιμότητας είναι ικανά να κατηγοριοποιήσουν ποιες αλλαγές έχουν πραγματοποιηθεί στον κώδικα, καθώς και να προτείνουμε ένα πιο αποδοτικό μοντέλο. Και στα δύο παραπάνω ερωτήματα για την ανάπτυξη των μοντέλων χρησιμοποιήθηκαν μετρικές από διαφορετικά μοντέλα αξιολόγησης αναγνωσιμότητας κώδικα, τα οποία συγκρίθηκαν ως προς την απόδοσή τους.
Μιχάλης Σφακάκης (Εθνικό Κέντρο Τεκμηρίωσης): "Συλλογικοί Κατάλογοι & Διαδίκτυο"
Στο πλαίσιο της υλοποίησης του έργου "Συλλογικός Κατάλογος Δημοσίων Βιβλιοθηκών" πραγματοποιήθηκε η ημερίδα με θέμα:
¨Συνεργασίες λαϊκών βιβλιοθηκών
Εργαλεία, πρότυπα και συλλογικοί κατάλογοι"
Λιβαδειά, Συνεδριακό Κέντρο Κρύας - 24 Νοεμβρίου 2006
Ανάπτυξη συστήματος ιεραρχικής ομαδοποίησης και διαχείρισης κειμένων για αποκ...ISSEL
Η ανάκτηση πληροφορίας ανέκαθεν ήταν μια πλέον σημαντική πτυχή κάθε διεργασίας και δεδομένης της ταχείας αύξησης της απαίτησης γρήγορης και εύστοχης παροχής και ανάκτησης πληροφοριών, δεν είναι τίποτα παρά φυσικό να γίνεται συλλογική προσπάθεια προς την βελτιστοποίηση αυτής της διαδικασίας με οποιαδήποτε μέσα είναι διαθέσιμα, όπως η Τεχνητή Νοημοσύνη. Με αυτό τον τρόπο θα μπορεί ένας υπολογιστής να “εκπαιδευτεί” και να βοηθάει στο έργο αυτό, αντί να είναι μονάχα ένα εργαλείο για μαθηματικά πιθανοτήτων και στατιστική. Σε μία εποχή όπου τα πάντα είναι καθοδηγούμενα από την πληροφορία και τα δεδομένα, η ανάγκη για δομημένα δεδομένα και ορθή ανάκτηση πληροφορίας είναι τουλάχιστον επιτακτική. Η δομή και η οργάνωση στα δεδομένα διευκολύνει την λήψη αποφάσεων και μέσω αυτού επιβεβαιώνεται πάντα η σημασία και η συνεισφορά της τεχνητής νοημοσύνης και των μοντέλων μηχανικής μάθησης. Η εφαρμογή και η υλοποίηση μεθόδων και τεχνικών βαθιάς μάθησης μπορεί σταδιακά μπορεί να βοηθήσει στην απαλλαγή μας από την εξάρτηση από λέξεις κλειδιά και να οδεύσουμε προς την διδασκαλία της σημασιολογικής κατανόησης της φυσικής γλώσσας από τους υπολογιστές. Σε αυτό μπορεί να συνεισφέρει εν μέρει από ένα πλήρως αυτόνομο σύστημα ικανό να οργανώνει, να διαχειρίζεται και να ταξινομεί έγγραφα σημασιολογικά, με ελάχιστη εκπαίδευση. Η αξιοποίηση των δυνατοτήτων και της πολυχρηστικότητας της μάθησης και ταξινόμησης μηδενικών και λίγων βολών, καθώς και των σύγχρονων τεχνικών θεματικής μοντελοποίησης, μπορεί κανείς να αναπτύξει μια εφαρμογή που ως είσοδο λαμβάνει ακατέργαστα μη επισημειωμένα ή επεξεργασμένα δεδομένα και να επιστρέφει μια πλήρως λειτουργική εφαρμογή ερωτοαπαντήσεων. Στην προσπάθεια μεγιστοποίησης της πολυχρηστικότητας του εν λόγω συστήματος, η παρούσα διπλωματική εργασία ερευνεί και αξιολογεί την βιωσιμότητα ενός συστήματος τέτοιας φύσεως. Δεδομένου ότι ο τελικός σκοπός είναι η δομημένη πληροφορία και η αποτελεσματική ανάκτηση της, θα εξεταστεί η υπόθεση της αποκεντρωμένης προσέγγισης, καθώς μειώνονται σημαντικά οι απαιτήσεις υπολογιστικής ισχύος και αποθηκευτικού χώρου. Μέσω δοκιμών και πειραμάτων τα παραγόμενα δεδομένα φαίνεται να υποστηρίζουν την υπόθεση υπέρ ενός τέτοιου συστήματος, και δυνητικά με διάφορα πλεονεκτήματα υπέρ ενός αντίστοιχου αλλά ενιαίου συστήματος.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων για την Εξαγωγή Προτύπων Διόρθωσης σε Σφ...ISSEL
Τις τελευταίες δεκαετίες, τα έργα λογισµικού γίνονται όλο και µεγαλύτερα, χρησιµότερα και διεισδύουν σε όλο και περισσότερες πτυχές του ανθρώπινου ϐίου. Κατά την ανάπτυξη και τη συντήρηση λογισµικού, οι προγραµµατιστές σπαταλούν µεγάλο µέρος του χρόνου τους στον εντοπισµό και τη διόρθωση σφαλµάτων. Τα εργαλεία στατικής ανάλυσης κώδικα αυτοµατοποιούν τη διαδικασία εντοπισµού των σφαλµάτων. Η χρήση τους, ωστόσο, παραµένει περιορισµένη, καθώς η κατανόηση και η διόρθωση σφαλµάτων παραµένουν ευθύνες των προγραµµατιστών. Τα τελευταία χρόνια, πραγµατοποιούνται έρευνες για την εξόρυξη προτύπων διόρθωσης τέτοιων σφαλµάτων άλλα και την ανάπτυξη συστηµάτων αυτοµατοποιηµένης διόρθωσης σφαλµάτων. Οι πρώτες στοχεύουν στην κατανόηση του τρόπου που οι προγραµµατιστές αντιµετωπίζουν τέτοια προβλήµατα, και πολλές ϕορές τα αποτελέσµατα τους αποτελούν ϐάση για τις δεύτερες. Η παρούσα διπλωµατική, στοχεύει στην εξόρυξη χρήσιµων προτύπων διόρ ϑωσης σφαλµάτων για σφάλµατα που ανήκουν στους κανόνες του εργαλείου στατικής ανάλυσης PMD. Αρχικά, µέσω κατάλληλων ερωτηµάτων στο API του Github, αναζητο ύνται commits που αφορούν διορθώσεις τέτοιων σφαλµάτων και λαµβάνονται οι εκδόσεις των αρχείων πριν και µετά των αλλαγών των commits. Στη συνέχεια, µέσω εκτέλεσης του PMD στις δύο εκδόσεις, εντοπίζονται οι επιµέρους διορθώσεις και δηµιουργείται κα τάλληλο σύνολο δεδοµένων, αποτελούµενο αποκλειστικά από διορθώσεις σφαλµάτων, κανόνων του PMD. Οι επιµέρους διορθώσεις αναλύονται και µε αξιοποίηση της αναπα ϱάστασης κώδικα srcML και του αλγορίθµου απόστασης επεξεργασίας δέντρου Gumtree, είναι εφικτή η εξαγωγή µιας ακολουθίας όρων που είναι αντιπροσωπευτικοί για κάθε διόρθωση. ΄Ετσι, µε εύρεση του µήκους της µέγιστης κοινής υπακολουθίας µεταξύ δύο διορθώσεων, είναι εφικτή η ανάπτυξη ενός µοντέλου οµοιότητας για τις διορθώσεις συνολικά και κατ΄ επέκταση, η οµαδοποίηση τους και η εξαγωγή προτύπων διόρθω σης. Πραγµατοποιήθηκαν δύο διαφορετικά πειράµατα οµαδοποίησης : στο ένα αξιοποιήθηκε ο αλγόριθµος K-medoids και στο άλλο ο DBSCAN. Και στα δύο πειράµα τα, άλλα ιδιαίτερα σε αυτό µε τον DBSCAN, σχεδόν κάθε εξαγόµενη οµάδα αποτελείται κυρίως από διορθώσεις σφαλµάτων ενός κανόνα του PMD. Παράλληλα, µε τον υπο λογισµό του αριθµού των commits και των αποθετηρίων από τα οποία προέρχονται οι διορθώσεις κάθε οµάδας - προτύπου, ϕανερώνεται ότι οι περισσότερες οµάδες προκύπτουν από διορθώσεις προερχόµενες από µεγάλο αριθµό commits και αποθετηρίων. ΄Ετσι αντανακλούν τον τρόπο που αρκετοί προγραµµατιστές ϑα αντιµετώπιζαν παρόµοια προβλήµατα. Συνεπώς, τα εξαγόµενα πρότυπα ϑα µπορούσαν να αποτελέσουν αφετη ϱία για κάποιον µηχανισµό αυτοµατοποιηµένης διόρθωσης σφαλµάτων, ϐασιζόµενο στο PMD για τον εντοπισµό τους.
Applying Data Mining Techniques to Extract Fix Patterns for Static Analysis V...ISSEL
Contemporary Software products are getting larger and more complex. Dur ing the processes of software development and maintenance, developers spend a significant amount of their work time on detecting and fixing bugs. Static Analysis Tools automate the process of bug detection. Their application, however, is lim ited as the process of understanding and fixing of bugs, remains part of developer’s responsibilities. Lately, several research approaches aspire to extract useful bug fix patterns, or to automate the bug fixing process. The first approaches focus on understanding how developers face similar problems and frequently they serve as groundwork for systems for automated bug fixing. Our research aims at the extraction of useful bug fix patterns, for bugs that trigger the rules of the static analysis tool PMD. Initially, by querying the Github API, we search for commits that correspond to fixes of these categories of bugs. Both the before and after the commit versions of the commits’ files are downloaded. Then, by executing PMD on the two versions of each file, individual fixes are detected and a proper dataset is crafted. The dataset comprises fixes of bugs detectable from rules of PMD. The fixes are analyzed, and by utilizing srcML code representation and tree edit distance algorithm Gumtree, a representative sequence is extracted from each fix. Afterwards, by utilizing the metric of longest common subsequence between two sequences of two fixes, we develop a similarity scheme for the dataset’s fixes. This similarity scheme, operates as the base for the clustering of fixes and pattern extraction. In order to cluster the fixes, two separate experiments were conducted, one with K-medoids and one with the DBSCAN algorithm. In both experiments, but mostly with the DBSCAN algorithm, almost each cluster groups mostly bug fixes of a certain PMD rule. Alongside, by computing the number of commits and repositories from which the fixes of each cluster come from, it becomes obvious, that most of the clusters arise from fixes coming from a large number of commits and repositories. Thus, the extracted patterns correspond to the way in which similar problems are faced, by a number of different developers. Consequently, our extracted patterns, can be utilized as groundwork for an automated bug fixing system, where PMD will serve for bug detection.
Applying Data Mining Techniques on Software Repositories to Extract Design an...ISSEL
Close collaboration between software developers is considered essential in order to build innovative software projects. For this reason, there are several online program-hosting platforms, which enable their users to watch each other’s changes, recommendations and comments towards the improvement and evolution of code. These platforms also control different versions of the software code so that the developer can revert to previous ones if desired. All the modifications performed at a given time by a member of the software development team are bundled in a commit, where the main reasons behind them are also recorded. As a consequence, it goes without saying that these series of changes include a lot of useful information about the way a software project evolves. Applying data mining techniques on public software repositories and the data we discussed above could unveil some common bug fixes, systematic edits, frequent types of changes in a project’s architecture and frequently-used design patterns either known or unknown ones. An extensive bibliographic research in this domain reveals that the majority of scientific efforts has focused on bug fixes and systematic edits ignoring some more coarse-grained (high-level) code evolution or design patterns. In this context, this dissertation tries to extract the relationships between the classes of an object-oriented program, while also seeking to monitor the way they evolve over time. To achieve these goals, this diploma thesis adapts a Relationship Extractor tool based on the Abstract Syntax Trees analysis of some of the most popular software projects in Github web platform. After analyzing and processing those syntax trees, useful information is extracted concerning the operation, the abstraction level as well as the inheritance of classes. This information is then modeled as graphs (with classes as nodes and the connections between them as edges). These steps are not only executed for the latest version of a project, but also in each and every commit with a view to extracting the difference in relationships between the versions of a project before and after the specific commit. Finally, gSpan, which is a frequent-subgraph mining algorithm, is applied, in order to detect code design and evolution patterns used by the software community worldwide.
Εφαρμογή Τεχνικών Εξόρυξης Δεδομένων σε Αποθήκες Λογισμικού με σκοπό την Εξα...ISSEL
Η στενή συνεργασία μεταξύ των προγραμματιστών για την ανάπτυξη καινοτόμων έργων λογισμικού κρίνεται απαραίτητη. Για αυτόν τον λόγο, υπάρχουν αρκετές διαδικτυακές πλατφόρμες φιλοξενίας προγραμμάτων, οι οποίες δίνουν τη δυνατότητα στους χρήστες τους να παρακολουθεί ο ένας τις αλλαγές, τις προτάσεις και τις παρατηρήσεις του άλλου για την εξέλιξη και τη βελτίωση του κώδικα. Επιπλέον, οι πλατφόρμες αυτές ελέγχουν τις διαφορετικές εκδόσεις του κώδικα ενός έργου, ώστε ο προγραμματιστής να μπορεί να ανατρέξει σε οποιαδήποτε από αυτές, εάν το επιθυμεί. Όλες οι τροποποιήσεις, οι οποίες διενεργούνται από ένα πρόσωπο της ομάδας ανάπτυξης λογισμικού σε μία δεδομένη χρονική στιγμή, συγκεντρώνονται σε ένα commit, όπου καταγράφονται μάλιστα όλοι οι λόγοι πίσω από αυτές. Έτσι, γίνεται κατανοητό ότι τέτοιες συλλογές αλλαγών εμπεριέχουν πολλές χρήσιμες πληροφορίες για τον τρόπο με τον οποίο εξελίσσεται ένα έργο λογισμικού. Η εφαρμογή τεχνικών του κλάδου της εξόρυξης δεδομένων στις δημόσιες αποθήκες λογισμικού και σε όλα τα δεδομένα που αναφέρθηκαν παραπάνω θα μπορούσε να φέρει στο φως ορισμένες συχνές διορθώσεις σφαλμάτων, συστηματικές τροποποιήσεις, επαναλαμβανόμενους τύπους αλλαγών στην αρχιτεκτονική, καθώς και κάποια ευρέως χρησιμοποιούμενα σχεδιαστικά πρότυπα, γνωστά ή μη. Μία εκτενής βιβλιογραφική έρευνα σε αυτόν τον τομέα αποκαλύπτει ότι οι περισσότερες προσπάθειες επιστημόνων έχουν στραφεί στις διορθώσεις σφαλμάτων και στις συστηματικές τροποποιήσεις, με αποτέλεσμα να έχουν αγνοηθεί κάποια λιγότερο λεπτομερή, δηλαδή πιο υψηλού επιπέδου (high level) μοτίβα εξέλιξης ή συγγραφής κώδικα. Στο πλαίσιο αυτό, η παρούσα διπλωματική εργασία προσπαθεί να ανακαλύψει τις σχέσεις ανάμεσα στις διάφορες κλάσεις ενός προγράμματος, αλλά και να παρακολουθήσει τον τρόπο με τον οποίο αυτές αλλάζουν στο πέρασμα του χρόνου. Για να επιτευχθούν οι παραπάνω στόχοι, προσαρμόζεται ένα εργαλείο εξαγωγής σχέσεων (Relationships Extractor), η λειτουργία του οποίου βασίζεται στην ανάλυση των Αφηρημένων Συντακτικών Δέντρων (Abstract Syntax Trees) που αφορούν τους κώδικες μερικών από τα πιο δημοφιλή έργα λογισμικού της διαδικτυακής πλατφόρμας του Github. Αφού αναλυθούν και επεξεργαστούν αυτά τα συντακτικά δέντρα, εξάγονται πληροφορίες για τη λειτουργία των κλάσεων, την αφαιρετικότητά τους και την κληρονομικότητα, οι οποίες στη συνέχεια μοντελοποιούνται σε γράφους (με τις κλάσεις ως κόμβους και τις συνδέσεις τους ως ακμές). Αφού λοιπόν ολοκληρωθούν οι παραπάνω ενέργειες για την τελική μορφή του εκάστοτε προγράμματος, η ίδια σειρά ενεργειών ακολουθείται και για κάθε στιγμιότυπό του, εξάγοντας τη διαφορά ως προς τις σχέσεις ανάμεσα στην έκδοσή του πριν και μετά από κάθε commit ξεχωριστά. Τέλος, εφαρμόζοντας τον αλγόριθμο gSpan (graph-based Substructure pattern mining), έναν αλγόριθμο αναζήτησης συχνών πογράφων σε ένα σύνολο γράφων, ανιχνεύονται ορισμένα ευρέως χρησιμοποιούμενα από την παγκόσμια προγραμματιστική κοινότητα, μοτίβα σχεδίασης και εξέλιξης λογισμικού.
Επανοργάνωση πηγαίου κώδικα από γράφους εξαρτήσεων οντοτήτων µε βάση παραδείγ...ISSEL
Με την ολοένα και αυξανόµενη ενσωµάτωση του λογισµικού σε κοινωνικές δοµές όπως η εκπαίδευση και η υγεία, η γρήγορη συντήρηση (π.χ. αποσφαλµάτωση) µεγάλων έργων λογισµικού γίνεται όλο και πιο σηµαντική. Για αυτό το σκοπό, καθίσταται αναγκαία η κοινοτική οργάνωση του πηγαίου κώδικα σε οµάδες οντοτήτων (π.χ. µεθόδων σε κλάσεις, κλάσεων σε πακέτα, πακέτων σε ϐιβλιοθήκες), έτσι ώστε να διευκολύνεται η κατανόηση και πλοήγηση µεταξύ υλοποιηµένων λειτουργιών. Αν οι οντότητες οργανωθούν σε γράφους των οποίων οι ακµές αντικατοπτρίζουν τις εξαρτήσεις τους, υπάρχουν κοινά αποδεκτές αρχές της τεχνολογίας λογισµικου για το τι συνιστά καλή ποιοτικά οργάνωση του πηγαίου κώδι κα, όπως η υψηλή συνεκτικότητα εντός οµάδων οντοτήτων και η χαλαρή συνδεσιµότητα µε οντότητες άλλων οµάδων. Σε αυτή τη διπλωµατική, εξετάζεται το πρόβληµα της αυτοµατο ποιηµένης επανοργάνωσης οντοτήτων πηγαίου κώδικα ώστε να ϐελτιστοποιηθούν µετρικές που ποσοτικοποιούν αρχές ποιοτικής κοινοτικής οργάνωσης. Για να το πετύχουµε αυτό, χρησιµοποιούµε µεθόδους εξόρυξης κοινοτικής πληροφορίας από γράφους εξαρτήσεων ο ντοτήτων. Η κύρια υπόθεσή µας είναι η τρέχουσα ιεραρχική οργάνωση του κώδικα περιέχει ψήγµατα της ϐέλτιστης οργάνωσης και τη χρησιµοποιούµε ως µια προσεγγιστική πρώτη εκτίµηση την οποία και προσπαθούµε να ϐελτιώσουµε µε ϕίλτρα γράφων. Αυτή η ηµιε πιβλεπόµενη µέθοδος συγκρίνεται µε υπάρχουσες πρακτικές άπληστης ϐελτιστοποίησης της αρχικής εκτίµησης και µη επιβλεπόµενης γενετικής ϐελτιστοποίησης των κοινοτήτων στους γράφους εξαρτήσεων οντοτήτων 10 δηµοφιλών έργων λογισµικού. Βρίσκουµε ότι, δεδοµένης µια ¨στρευλωµένης¨ οργάνωσης, η προσέγγισή µας επιτρέπει την ακριβέστερη εξόρυξη των κοινοτήτων που ορίστηκαν από τους προγραµµατιστές των έργων. Επιπρο σθέτως, ολοκληρώνεται σε σχεδόν γραµµικούς χρόνους εκτέλεσης σε σχέση με τον αριθµό των εξαρτήσεων που επιτρέπουν την εφαρµογή της σε μεγάλα έργα λογισµικού.
Source code remodularization based on component dependency graphsISSEL
With the increasing integration of software in social structures, such as education and health, maintenance (e.g. debugging) of large software projects is becoming increasingly important. To this end, it is necessary to organize the source code into communities of artifacts (e.g. methods in classes, classes in packages, packages in libraries) to fa cilitate understandability and ease-of-navigation across implemented functionalities. If artifacts are organized into graphs whose edges reflect their dependencies, there ex ist commonly accepted software engineering principles of what constitutes high-quality source code organization, such as high connectivity of artifacts within groups and loose connectivity with artifacts of other groups. In this dissertation, we tackle the problem of automated reorganization of source code entities to optimize measures quantifying source code community organization quality. To this end, we apply community ex traction methods on dependency graphs. Our main hypothesis is that the existing hierarchical organization of source code comprises fragments of the optimal organiza tion and thus we use it as a first approximation that we refine with graph filters. This type of semi-supervised technique is compared to existing greedy optimization and un supervised genetic optimization approaches across 10 popular software projects. We find that, given a permutation of the ideal organization provided by developers, our approach derives the community organization closest to the ideal one. Additionally, it runs in near-linear times with respect to the number of dependencies that enable its application on dependency graphs of large projects.
Similar to Εισαγωγή καινοτομιών στον Πανελλήνιο Διαγωνισμό Εκπαιδευτικής Ρομποτικής | Αναστάσιος Λαδιάς | WRO Teacher Camp 2018 (20)
Εισήγηση του Αναστάσιου Λαδιά, σχεδιαστή του «CodeAthon: Βελτιώστε το παιχνίδι και παίξτε», ενός μη διαγωνιστικού hackathon για μαθητές 8-16 ετών, το οποίο χρησιμοποιεί το προγραμματιστικό περιβάλλον Scratch και υλοποιείται στο πλαίσιο του Europe Code Week 2018.
Η εισήγηση πραγματοποιήθηκε στο πλαίσιο των συναντήσεων κατάρτισης με τους εκπαιδευτικούς των συμμετέχουσων ομάδων, στο πλαίσιο του CodeAthon 2018.
Το CodeAthon διοργανώνεται από τους οργανισμούς STEM Education και WRO Hellas με στρατηγικό συνεργάτη την COSMOTE και έχει σχεδιαστεί για να πραγματοποιηθεί ταυτόχρονα σε τέσσερις πόλεις της Ελλάδας στις 18, 19 & 20 Οκτωβρίου 2018. Συνδιοργανωτές του CodeAthon είναι ο Δήμος Τρικκαίων, η OTE Academy, το ACT – American College of Thessaloniki και το Ελληνικό Ανοικτό Πανεπιστήμιο.
Στο CodeAthon μπορούν να συμμετάσχουν μαθητές 8-16 ετών, σχηματίζοντας ομάδες 2-3 ατόμων. Οι ομάδες μπορούν να προέρχονται από όλη την Ελλάδα αλλά για τη συμμετοχή τους, θα πρέπει να μπορούν να ταξιδέψουν σε μία από τις εξής πόλεις: Αθήνα – Θεσσαλονίκη – Τρίκαλα – Πάτρα. Σκοπός του CodeAthon είναι να παροτρύνει τους μαθητές να αποκτήσουν μία δημιουργική στάση απέναντι στον προγραμματισμό, αναπτύσσοντας παράλληλα τις προγραμματιστικές τους δεξιότητες και μαθαίνοντας να εργάζονται ομαδικά.
Το θέμα;
Ένα…ημιτελές παιχνίδι που ζητά να τελειοποιηθεί!
Τον Σεπτέμβριο 2018, δηλαδή ένα μήνα πριν από το CodeAthon, στις συμμετέχουσες ομάδες θα αποσταλούν ο κώδικας Scratch και το ΚωδικΌραμα ενός παιχνδιού με τηλεχειριζόμενα εικονικά ρομποτικά οχήματα. Το παιχνίδι όμως θα είναι ημιτελές! Οι ομάδες καλούνται να σκεφτούν τρόπους για να το ολοκληρώσουν και να το μετατρέψουν σε μία διασκεδαστική παιγνιώδη εμπειρία.
Την ημέρα διεξαγωγής του CodeAthon, τον Οκτώβριο 2018, οι ομάδες θα έχουν στη διάθεσή τους 4 ώρες για να εμπλουτίσουν το παιχνίδι. Για να το κάνουν αυτό, οι ομάδες μπορούν είτε να εφαρμόσουν τις ιδέες που σκέφτηκαν κατά τον μήνα της προετοιμασίας, είτε να αυτοσχεδιάσουν επί τόπου, με την καθοδήγηση των συνεργατών του STEM Education που θα τους δίνουν συγκεκριμένα προβλήματα προς επίλυση (πχ. πρόσθετες συμπεριφορές που θα βασίζονται σε συμβάντα, ανάπτυξη «οδικών βοηθημάτων», χειρισμός των εικονικών οχημάτων με εξωτερικά χειριστήρια, κατασκευή εικονικών οργάνων μέτρησης, δημιουργία ηχητικού interface, παραγωγή cel animation κ.ά.).
Θα αναδειχθούν νικητές;
Ναι, το παιχνίδι και η μάθηση!
Το CodeAthon δεν έχει διαγωνιστικό χαρακτήρα. Ο σκοπός του είναι καθαρά εκπαιδευτικός και ψυχαγωγικός. Κατά τη διάρκεια του CodeAthon θα παρουσιαστούν ζωντανά τα παιχνίδια ορισμένων από τις ομάδες, κατόπιν σχετικής κλήρωσης. Αντίστοιχα, μετά από την ολοκλήρωση του CodeAthon, τα έργα όλων των ομάδων θα αναρτηθούν δημόσια (μαζί με την περιγραφή και τον κώδικά τους, καθώς επίσης με τα στοιχεία των μελών της ομάδας, εφόσον τα μέλη της το επιθυμούν) και θα αποτελέσουν τμήματα ενός αποθετηρίου με ανοικτή πρόσβαση για όλους.
Η ιστορία, ο χαρακτήρας και η εξέλιξη του Πανελλήνιου Διαγωνισμού Εκπαιδευτικ...WROHellas
Η ιστορία, ο χαρακτήρας και η εξέλιξη του Πανελλήνιου Διαγωνισμού Εκπαιδευτικής Ρομποτικής Δημοτικού - Η διαδικασία των κρίσεων | Απόστολος Αμπαριώτης
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Ο διαγωνισμός ποδοσφαίρου στην Ολυμπιάδα Εκπαιδευτικής Ρομποτικής | Αθανάσιος...WROHellas
Ο διαγωνισμός ποδοσφαίρου στην Ολυμπιάδα Εκπαιδευτικής Ρομποτικής | Αθανάσιος Μπαλαφούτης
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Ο διαγωνισμός ποδοσφαίρου στο Δημοτικό | Αθανάσιος Μπαλαφούτης | WRO Teacher ...WROHellas
Ο διαγωνισμός ποδοσφαίρου στο Δημοτικό | Αθανάσιος Μπαλαφούτης
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Το χτίσιμο ενός MOOC για την επιμόρφωση εκπαιδευτικών στον Προγραμματισμό | Α...WROHellas
Το χτίσιμο ενός MOOC για την επιμόρφωση εκπαιδευτικών στον Προγραμματισμό | Αναστάσιος Λαδιάς
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Open playground – Wired communications. Επικοινωνία EV3 με open hardware (ard...WROHellas
Open playground – Wired communications. Επικοινωνία EV3 με open hardware (arduino etc) | Παναγιώτης Βέρρας
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Open playground – Firmware and programming. Από τα block περιβάλλοντα (EV3-G,...WROHellas
Open playground – Firmware and programming. Από τα block περιβάλλοντα (EV3-G, scratch etc) σε συγγραφή κώδικα | Παναγιώτης Βέρρας
Στο πλαίσιο του WRO Teacher Camp 2018 που προσφέρθηκε δωρεάν σε εκπαιδευτικούς όλων των βαθμίδων από τον WRO Hellas την περίοδο 7-9 Σεπτεμβρίου 2018
Ο ρόλος των κριτών των αγώνων στην ανάδειξη των παιδαγωγικων πλεονεκτημάτων τ...WROHellas
Ο ρόλος των κριτών των αγώνων στην ανάδειξη των παιδαγωγικων πλεονεκτημάτων της Εκπαιδευτικής Ρομποτικής | Νικόλαος Σαζακλίδης | Θερινό Σχολείο Εκπαιδευτικής Ρομποτικής WRO Hellas 2017
7. Εισαγωγή
Η οπτική γωνία μας είναι η διδακτική.
Μας ενδιαφέρει να αναδυθούν
οι πτυχές του προγραμματισμού
που τον αναδεικνύουν
ως εργαλείο ανάπτυξης
της συγκλίνουσας και αποκλίνουσας σκέψης
των μαθητών.
7
8. Εισαγωγή
Η τεχνική επίλυσης προβλήματος
με την μέθοδο "διαίρει και βασίλευε"
που αναλύει και συνθέτει ένα πρόβλημα
σε επιμέρους πιο εύκολα διαχειρίσιμα
υποπροβλήματα
είναι καθοριστικής σημασίας
για την ανάπτυξη αλγοριθμικής σκέψης
στους μαθητές.
8
9. Εισαγωγή
Σε αυτό το πλαίσιο η τμηματοποίηση είναι ο
φορέας για την αναλυτική και συνθετική σκέψη.
9
11. Η τμηματοποίηση ανά αντικείμενο
Στον object based προγραμματισμό
η τμηματοποίηση είναι ενδογενής.
O κώδικας είναι στο εσωτερικό των αντικειμένων
11
12. Η τμηματοποίηση ανά κατάσταση
Χρησιμοποιώντας το μοντέλο
«Αυτόματο Πεπερασμένων Καταστάσεων»
μπορούμε να περάσουμε σε ένα
επόμενο στάδιο τμηματοποίησης
που εκμεταλλεύεται τις "καταστάσεις"
στις οποίες μεταπίπτει το πρόγραμμα
κατά την εκτέλεσή του.
12
13. Η τμηματοποίηση ανά κατάσταση
Στο Scratch 2 η συμπεριφορά ενός αντικειμένου
σε συγκεκριμένη κατάσταση
περιγράφεται
από κώδικες
που
ονομάζονται
σενάρια.
13
14. Η τμηματοποίηση ανά κατάσταση
Στο Scratch τα σενάρια δηλώνονται
με μια εντολή-καπελάκι από το μενού "Συμβάντα"
και από κάτω
κρέμεται
ο κώδικας.
(ίδια
κατάσταση
ίδιο
καπελάκι).
14
15. Η τμηματοποίηση ανά κατάσταση
Έτσι μπορούμε να έχουμε
όλο τον κώδικα
ενός αντικειμένου
να βρίσκεται σε μια
και μοναδική κατάσταση…
15
16. Η τμηματοποίηση ανά κατάσταση
Έτσι μπορούμε να έχουμε
όλο τον κώδικα
ενός αντικειμένου
να βρίσκεται σε μια
και μοναδική κατάσταση…
ή σε περισσότερες καταστάσεις…
16
17. Η τμηματοποίηση ανά κατάσταση
Μπορεί να υπάρχουν (και να τρέχουν ταυτόχρονα)
περισσότερα του ενός σενάρια
εντός μιας κατάστασης.
17
21. Τμηματοποίηση στο κελί κωδικΟράματος
Όλα τα σενάρια - τμήματα κώδικα που βρίσκονται
στο εσωτερικό των κελιών που αντιστοιχούν στην
ίδια κατάσταση εκτελούνται παράλληλα.
21
22. Τμηματοποίηση στο κελί κωδικΟράματος
Σε μεγάλα προγράμματα είναι ανάγκη να
αποσυμφορηθεί ο κώδικας.
Αυτό μπορεί να επιτευχθεί σε ένα βαθμό με την
εφαρμογή
της αρχής διαχωρισμού των αρμοδιοτήτων
με την οποία μπορεί να γίνει η ομαδοποίηση των
τμημάτων των κωδίκων ανάλογα με το σκοπό που
εξυπηρετούν…
22
23. Τμηματοποίηση στο κελί κωδικΟράματος
…π.χ. κώδικες για τη σχεδίαση της διεπαφής,
της ηχητικής διεπαφής,
για την καθεαυτή αλγοριθμική εργασία,
κώδικες που μπορούν να οργανώνονται σε
πολυεπίπεδα κωδικΟράματα,
στα οποία κάθε επίπεδο
θα εξυπηρετεί
διαφορετικού σκοπού
κώδικες.
23
24. Η τμηματοποίηση εντός σεναρίου
Η τμηματοποίηση του κώδικα
μπορεί να συνεχιστεί περαιτέρω
εντός ενός σεναρίου…
χρησιμοποιώντας
διαδικασίες.
24
25. Η τμηματοποίηση εντός σεναρίου
Η τμηματοποίηση του κώδικα
μπορεί να συνεχιστεί περαιτέρω
εντός ενός σεναρίου…
χρησιμοποιώντας
διαδικασίες.
25
26. Η τμηματοποίηση εντός σεναρίου
Ο ενιαίος
κώδικας σπάει
σε επιμέρους
αρθρώματα
με διαδικασίες.
26
27. Η τμηματοποίηση εντός σεναρίου
Σε ένα πρώτο βαθμό τμηματο-
ποίησης προκύπτει μια σειριακή
και αβαθής αρχιτεκτονική όπως
Αυτή του σχήματος
ενώ σε ένα δεύτερο επίπεδο
προκύπτει αυτή
του επόμενου σχήματος.
27
29. Η τμηματοποίηση εντός σεναρίου
Μια περαιτέρω τμηματοποίηση αναδεικνύει την
ιεραρχία της δενδροειδούς δομής
29
30. Η τμηματοποίηση εντός σεναρίου
Αξίζει να υπενθυμιστεί ότι οι τελευταίοι κώδικες
μπορεί να είναι
απλοϊκές μορφές κωδικΟραμάτων προγραμμάτων
που διαθέτουν
ένα αντικείμενο,
σε μια κατάσταση,
με ένα μοναδικό κελί…
30
32. Η τμηματοποίηση εντός σεναρίου
Σε αυτό μπορεί να εφαρμοστεί η τμηματοποίηση
με χρήση διαδικασιών και
να αναδειχθεί ο δομημένος προγραμματισμός
με τον οποίο επιτυγχάνεται επιπλέον
η απόκρυψη των λεπτομερειών των κατωτέρων
επιπέδων
λόγω της αφαίρεσης που παρατηρείται
στις ανώτερες δομές της ιεραρχίας.
32
33. Η τμηματοποίηση εντός σεναρίου
Ανάλογες με τις προηγούμενες
δενδροειδείς δομές
μπορούν να προκύψουν και
με την τμηματοποίηση του κώδικα
που γίνεται με τη χρήση μηνυμάτων…
33
35. Η τμηματοποίηση εντός σεναρίου
Ο βαθμός "κοκκοποίησης"
που μπορεί να φτάσει αυτή η συνεχής διεργασία
τμηματοποίησης,
σταματάει όταν τα απλούστερα αρθρώματα
στα οποία καταλήγει
αποτελούν μια λογική οντότητα.
35
36. Η τμηματοποίηση εντός σεναρίου
Η ευελιξία που πρέπει να χαρακτηρίζει μια
διαδικασία επιτυγχάνεται με την
παραμετροποίησή της (πολυεργαλείο).
36
37. Η τμηματοποίηση εντός σεναρίου
Αυτοσχέδια οργάνωση των διαδικασιών
σε “βιβλιοθήκες διαδικασιών"
(προστιθέμενη αξία στον προγραμματισμό).
37
48. Πρόγραμμα = αλγόριθμος + δεδομένα
Η επίλυση ενός πραγματικού προβλήματος
(με ή χωρίς υπολογιστή) συνίσταται
στη δημιουργία ενός μοντέλου / προγράμματος
στο οποίο με αφαιρετικό τρόπο
αναπαριστάνεται η πραγματικότητα
με ένα σύνολο δεδομένων
τα οποία υφίστανται επεξεργασία
με συγκεκριμένους αλγορίθμους.
48
51. Πρόγραμμα = αλγόριθμος + δεδομένα
Σύμφωνα με τον Niklaus Wirth
το πρόγραμμα είναι αλγόριθμος συν δεδομένα
που συνεπάγεται ότι
"Δεδομένα = Πρόγραμμα - Αλγόριθμος",
δηλαδή αν σε ένα πρόγραμμα αφαιρέσουμε ότι
εκφράζει τον αλγόριθμο τότε ότι μείνει είναι τα
δεδομένα.
51
52. Πρόγραμμα = αλγόριθμος + δεδομένα
Σύμφωνα με τον Niklaus Wirth
το πρόγραμμα είναι αλγόριθμος συν δεδομένα
που συνεπάγεται ότι
Δεδομένα = Πρόγραμμα - Αλγόριθμος,
δηλαδή αν σε ένα πρόγραμμα αφαιρέσουμε ότι
εκφράζει τον αλγόριθμο τότε ότι μείνει είναι τα
δεδομένα.
52
53. Πρόγραμμα = αλγόριθμος + δεδομένα
Σύμφωνα με τον Niklaus Wirth
το πρόγραμμα είναι αλγόριθμος συν δεδομένα
που συνεπάγεται ότι
Δεδομένα = Πρόγραμμα - Αλγόριθμος,
δηλαδή αν σε ένα πρόγραμμα αφαιρέσουμε ότι
εκφράζει τον αλγόριθμο τότε ότι μείνει είναι τα
δεδομένα.
53
56. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
Wirth:
"Το πώς θα αναπαραστήσουμε τα δεδομένα είναι
συχνά ένα πολύ δύσκολο πρόβλημα...
Η επιλογή αυτή πρέπει πάντα να γίνεται
λαμβάνοντας υπόψη την επεξεργασία που
πρόκειται να υποστούν τα δεδομένα..."
56
57. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
Για παράδειγμα στο πρόγραμμα της ταξινόμησης
τριών αριθμών,
ο αλγόριθμος (η επεξεργασία που θα υποστούν τα
δεδομένα)
είναι εντελώς διαφορετικός
αν αυτοί αναπαρασταθούν ως διακριτές
μεταβλητές (α, β, γ)
από το αν αναπαρασταθούν ως στοιχεία μιας
δομής δεδομένων…
57
59. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
Στην πρώτη περίπτωση το πλήθος των εντολών του
κυρίου σώματος του προγράμματος (οι εντολές
επιλογής "Εάν") είναι ανάλογο του n! όπου n το
πλήθος των προς ταξινόμηση δεδομένων, ενώ στη
δεύτερη περίπτωση το πλήθος των εντολών του
προγράμματος είναι σταθερό και ανεξάρτητο του
πλήθους των προς ταξινόμηση δεδομένων.
Αξίζει να παρατηρηθεί ότι για την ταξινόμηση
τεσσάρων διακριτών μεταβλητών θα χρειαστούν 24
εντολές επιλογής (4!), ενώ για πέντε μεταβλητές θα
χρειαστούν 120 εντολές επιλογής (5!), κ.ο.κ.
59
60. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
Ο Wirth όταν γράφει
«...το έργο της σύνθεσης πράξεων θεωρείται συχνά
η καρδιά στην τέχνη του προγραμματισμού.
Ωστόσο, θα γίνει φανερό ότι η σωστή σύνθεση
δεδομένων είναι εξίσου θεμελιώδης και
ουσιαστική»…
θεωρεί ότι η "ποιότητα" ενός αλγορίθμου
σχετίζεται και με τον τρόπο αναπαράστασης των
δεδομένων που χρησιμοποιούνται και αυτό γίνεται
φανερό από το προηγούμενο παράδειγμα με την
60
61. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
…δηλαδή θεωρεί ότι
η "ποιότητα" ενός αλγορίθμου σχετίζεται και με τον
τρόπο αναπαράστασης των δεδομένων που
χρησιμοποιούνται
και αυτό γίνεται φανερό από το προηγούμενο
παράδειγμα με την ποιοτική μετάλλαξη που
υφίσταται ο αλγόριθμος όταν αντί για απλά
δεδομένα χρησιμοποιηθεί δομή δεδομένων.
61
65. Αντ(συν)αγωνισμός αλγόριθμου-δεδομένων
Είναι ακριβώς αυτή η μετάβαση στην
αναπαράσταση των δεδομένων
από αριθμητικές τιμές σε μεταβλητές
που του επιτρέπει να δημιουργήσει
τον κομψό (αναδρομικό) αλγόριθμο
που είναι ανεξάρτητος από το πλήθος των
δεδομένων.
65
66. Η υποβάθμιση του ρόλου των δεδομένων
Παρά το ότι ο Wirth προτείνει την ισότιμη
αντιμετώπιση της αλγοριθμικής με τα δεδομένα,
όπως φαίνεται από έρευνα στην οποία ζητήθηκε
από έλληνες εκπαιδευτικούς πληροφορικής να
κατατάξουν σε σειρά προτεραιότητας έντεκα
κριτήρια αξιολόγησης ενός κώδικα οπτικού
προγραμματισμού, το κριτήριο της αναπαράστασης
των δεδομένων κατετάγη προτελευταίο,
αναδεικνύοντας την υποβάθμιση του ρόλου των
δεδομένων στον προγραμματισμό στην αντίληψη
των εκπαιδευτικών.
66
67. Η υποβάθμιση του ρόλου των δεδομένων
Επειδή κάθε γλώσσα προγραμματισμού έχει
αναπτυχθεί για να επιτελέσει διαφορετικούς
σκοπούς, υπάρχουν διαφοροποιήσεις ακόμα και
στην ποσότητα των μεταβλητών που μπορούν να
δημιουργήσουν.
67
68. Η υποβάθμιση του ρόλου των δεδομένων
Μια εξήγηση για αυτή την υποτίμηση στο ρόλο
των δεδομένων στη βιβλιογραφία, στα
Προγράμματα Σπουδών και στη διδασκαλία του
προγραμματισμού Η/Υ ίσως να οφείλεται στην
προαναφερθείσα γνώμη που έχουν οι
εκπαιδευτικοί πληροφορικής οι οποίοι και
εμπλέκονται άμεσα ή έμμεσα στη διδασκαλία του
προγραμματισμού, στη σύνθεση των
Προγραμμάτων Σπουδών και στη συγγραφή των
αντίστοιχων βιβλίων.
68
69. Αναπαράσταση δεδομένων και κωδικΌραμα
Η προαναφερθείσα υποβάθμιση του ρόλου των
δεδομένων έναντι του αλγορίθμου διαπιστώνεται
και στο κωδικΌραμα…
69
71. Αναπαράσταση δεδομένων και κωδικΌραμα
Το κωδικΌραμα στις πρώτες μορφές του δίνει
έμφαση σχεδόν αποκλειστικά στον αλγόριθμο ενώ
σε κάποιες από τις τελευταίες εκδόσεις του κάνουν
την εμφάνισή τους τα δεδομένα.
71
72. Αναπαράσταση δεδομένων και κωδικΌραμα
Παρά το γεγονός αυτό και στο κωδικΌραμα
διαπιστώνεται η ετεροβαρής αντιμετώπιση των
δεδομένων έναντι του αλγορίθμου.
72
73. Πίνακας Ταυτοποίησης των Δεδομένων
Η ευαναγνωσιμότητα του προγράμματος (και των
κωδικΟραμάτων)
υποβοηθείται από την υιοθέτηση των συμβάσεων
του ευανάγνωστου προγραμματισμού
με τη χρήση σταθερών αντί τιμών,
τη χρήση αντικειμένων αντί χρωμάτων,
την εννοιολογική ονοματολογία των δεδομένων
(προτεινόμενη η «τυποποίηση της καμήλας»)
σε δεδομένα, αντικείμενα, ενδυμασίες…
73
74. Πίνακας Ταυτοποίησης των Δεδομένων
Ένα από τα ερωτήματα που τίθενται είναι το
"Τι τύπου είναι τα δεδομένα ή ως τι τύπου
χρησιμοποιούνται;"
Το Scratch υποστηρίζει δύο τύπους δεδομένων,
τις μεταβλητές (απλά - μεμονωμένα δεδομένα)
και τις λίστες (ως δομές δεδομένων).
74
75. Πίνακας Ταυτοποίησης των Δεδομένων
Τα απλά δεδομένα μπορεί να είναι:
τιμές (αριθμητικές, λογικές, string) ή
μεταβλητές αντίστοιχων τύπων…
75
77. Πίνακας Ταυτοποίησης των Δεδομένων
Ειδικά για τις αριθμητικού τύπου μεταβλητές αυτές
μπορεί να παίζουν ρόλους
"μετρητών",
"αθροιστών",
"σημαιών πολλαπλών θέσεων" ή
προσωρινών αποθηκευτικών χώρων μνήμης
77
78. Πίνακας Ταυτοποίησης των Δεδομένων
Αν και η χρησιμοποίηση απλών τιμών ως
δεδομένων εκ πρώτης όψεως φαίνεται ότι κάνει
απλούστερο το πρόγραμμα έναντι εκείνου με τις
μεταβλητές…
78
79. Πίνακας Ταυτοποίησης των Δεδομένων
…όμως η χρήση μεταβλητών κάνει το πρόγραμμα
πιο ευέλικτο, προσαρμόσιμο και ευανάγνωστο.
Συνεπώς συνιστάται η χρήση μεταβλητών έναντι
απλών τιμών…
79
80. Πίνακας Ταυτοποίησης των Δεδομένων
Ένα παράδειγμα που συνηγορεί στην ευελιξία,
προσαρμοστικότητα και ευαναγνωσιμότητα του
προγράμματος είναι αυτό στο οποίο
ο έλεγχος τερματισμού γίνεται αφενός με βάση το
χρώμα (σε ρόλο τιμής δεδομένου) ενός σημείου
του σκηνικού
και αφετέρου με τη δημιουργία διακριτού
αντικειμένου τερματισμού (σε ρόλο μεταβλητής
δεδομένου)…
80
82. Πίνακας Ταυτοποίησης των Δεδομένων
Από το προηγούμενο
…φαίνεται ότι
τα ίδια τα αντικείμενα μπορούν
να θεωρηθούν και ως φορείς δεδομένων
(ή ως υποκατάστατα δεδομένων
ή ακόμα και ως δεδομένα).
82
83. Πίνακας Ταυτοποίησης των Δεδομένων
Εκτός των αντικειμένων και οι κλώνοι τους είναι
φορείς δεδομένων.
Στο επόμενο πρόγραμμα οι δύο κλώνοι που
δημιουργούνται διαφοροποιούνται ως προς την
ενδυμασία, το μέγεθος, τη φωτεινότητα αλλά και
τις καρτεσιανές συντεταγμένες των θέσεών τους.
83
85. Πίνακας Ταυτοποίησης των Δεδομένων
Τα στοιχεία μιας λίστας στο Scratch μπορεί να
είναι:
τιμές (και κάθε θέση της λίστας να λειτουργεί όπως
μια μεταβλητή) ή
να είναι άλλες λίστες.
Όμως σημασία έχει τι αναπαριστά αυτή η δόμηση
των δεδομένων.
Για παράδειγμα μια λίστα με αριθμητικές τιμές θα
μπορούσε να αναπαριστά:
85
86. Πίνακας Ταυτοποίησης των Δεδομένων
…τις τιμές της εξέλιξης ενός φαινομένου που να
αποθηκεύονται στη λίστα από κάποιον αισθητήρα…
86
87. Πίνακας Ταυτοποίησης των Δεδομένων
…ή να αποθηκεύει τις νότες ενός τραγουδιού που
θα μπορούσαν ως δεδομένα να διαμοιράζονται και
να επαναχρησιμοποιούνται όταν εκτελείται από
πολλά διαφορετικά μουσικά όργανα ταυτόχρονα…
87
90. Πίνακας Ταυτοποίησης των Δεδομένων
…Αυτά όμως θα μπορούσαν να αναπαρασταθούν
και ως look-up tables ή dictionaries (όπως στην
Python) που να υλοποιούνται με μια λίστα
"πλήθος" που στοιχεία της να είναι (τριμελείς)
λίστες "νόμισμα", το διαχωριστικό και το πλήθος.
90
91. Πίνακας Ταυτοποίησης των Δεδομένων
Εδώ πρέπει να επισημανθεί ότι στις
προαναφερθείσες λίστες όλα τα στοιχεία τους είναι
του ιδίου τύπου με εξαίρεση τις τριμελείς λίστες
που έχουν ανόμοιου τύπου στοιχεία (αριθμοί και
χαρακτήρας ",").
91
92. Πίνακας Ταυτοποίησης των Δεδομένων
βιντεοσκόπηση της κίνηση ενός εικονικού ρομπότ
record as list.sb2
92
93. Πίνακας Ταυτοποίησης των Δεδομένων
Επίσης χρησιμοποιώντας τις λίστες με ανόμοιου
τύπου δεδομένα
μπορεί να υλοποιηθούν δομές δεδομένων με
ποικίλους τρόπους πρόσβασης στα δεδομένα τους
όπως
οι ουρές/fifo,
οι στοίβες/lifo,
τα δένδρα και
οι γράφοι.
93
94. Πίνακας Ταυτοποίησης των Δεδομένων
Ένα παράδειγμα υλοποίησης μιας δομής στοίβας
με προσπέλαση lifo υλοποιημένης με λίστα ως
"λογικής εγγραφής" φαίνεται στο επόμενο
πρόγραμμα.
94
95. Πίνακας Ταυτοποίησης των Δεδομένων
Ένας άλλος παράγοντας που πρέπει να εξεταστεί
είναι η "εμβέλεια των δεδομένων".
Στο Scratch κατά τη δήλωση μιας μεταβλητής
καθορίζεται αν η ύπαρξή της θα περιορίζεται ως
τοπική μεταβλητή στο εσωτερικό του αντικειμένου
ή θα είναι μια καθολική μεταβλητή στην οποία θα
μπορούν να έχουν πρόσβαση οι κώδικες από όλα
τα αντικείμενα του προγράμματος.
95
97. Πίνακας Ταυτοποίησης των Δεδομένων
Ένα θέμα που τίθεται είναι
η πατρότητα των δεδομένων
που ορίζονται από τον προγραμματιστή.
Ενώ δεν τίθεται θέμα για την πατρότητα των
τοπικών μεταβλητών,
οι καθολικές μεταβλητές μετά τη δημιουργία τους
(η δημιουργία τους γίνεται στο περιβάλλον ενός
αντικειμένου ή του υποβάθρου)
αποτελούν κοινό κτήμα όλων των αντικειμένων.
97
98. Πίνακας Ταυτοποίησης των Δεδομένων
Επιπλέον μια μεταβλητή μπορεί να "ζει" ως
παράμετρος τιμής αποκλειστικά στο εσωτερικό
μιας διαδικασίας χωρίς να υπάρχει άλλος τρόπος
προσπέλασης σε αυτή από κώδικες που είναι εκτός
της διαδικασίας. Στο προηγούμενο παράδειγμα με
τα πορτοκαλί βέλη παρουσιάζεται η διαδρομή που
κάνει η τιμή της μεταβλητής "τόση".
98
99. Πίνακας Ταυτοποίησης των Δεδομένων
Τέλος εκτός από
τα δεδομένα που ορίζει ο προγραμματιστής
υπάρχουν και τα δεδομένα του συστήματος.
99
100. Πίνακας Ταυτοποίησης των Δεδομένων
Τα δεδομένα του συστήματος έχουν να κάνουν με
τις συντεταγμένες του πλέγματος της σκηνής, με τις
ενδυμασίες και τις ιδιότητες των όψεων των
αντικειμένων (χρώμα, φωτεινότητα, εξαφάνιση,
κυρτότητα, περιστροφή, εικονοστοιχειοποίηση,
ψηφιδωτό), τους ήχους (ένταση, ρυθμός, μουσικό
όργανο)…
100
101. Πίνακας Ταυτοποίησης των Δεδομένων
…την πένα (χρώμα, μέγεθος, σκιά), τους
αισθητήρες (ύπαρξη συμβάντων αλληλεπίδρασης
με όρια, ποντίκι, πληκτρολόγιο, άλλα αντικείμενα,
χρώματα, την ένταση του μικροφώνου και
οποιαδήποτε σήματα από περιφερειακές συσκευές
π.χ. arduino), τη γεννήτρια τυχαίων αριθμών κ.λπ.).
101
102. Πίνακας Ταυτοποίησης των Δεδομένων
Στο Scratch στην κίνηση των αντικειμένων (η θέση
και ο προσανατολισμός τους)
μπορεί να είναι τα χρησιμοποιούμενα δεδομένα
"σχετικά" ή "απόλυτα".
102
103. Πίνακας Ταυτοποίησης των Δεδομένων
Για λόγους πληρότητας θα πρέπει να γίνει
η διάκριση των δεδομένων όσον αφορά το χώρο
της μνήμης που καταλαμβάνουν:
σε δεδομένα σε στατικής φύσεως (σταθερός χώρος
μνήμης για όλη τη διάρκεια της εκτέλεσης του
προγράμματος) και
σε δεδομένα δυναμικής φύσεως όπως οι λίστες
που το μέγεθός τους αυξομειώνεται κατά τη
διάρκεια της εκτέλεσης του προγράμματος.
103
104. Πίνακας Ταυτοποίησης των Δεδομένων
Ολοκληρώνοντας όλα τα προηγούμενα σχετικά με
το προφίλ ενός δεδομένου κάποιου προγράμματος
και κωδικοποιώντας τα σε ένα πίνακα
ΠιΤαΔε.xlsx
είναι πλέον δυνατόν να αποτυπωθεί
η αναπαράσταση και
ο ρόλος ενός εκάστου δεδομένου.
104
105. Πίνακας Ταυτοποίησης των Δεδομένων
Ολοκληρώνοντας όλα τα προηγούμενα σχετικά με
το προφίλ ενός δεδομένου κάποιου προγράμματος
και κωδικοποιώντας τα σε ένα πίνακα
ΠιΤαΔε.xlsx
είναι πλέον δυνατόν να αποτυπωθεί
η αναπαράσταση και
ο ρόλος ενός εκάστου δεδομένου.
105
109. Εισαγωγή καινοτομιών
στον Πανελλήνιο Διαγωνισμό
Εκπαιδευτικής Ρομποτικής
WRO Teacher Camp 2018
8 Σεπτεμβρίου 2018, Αγία Παρασκευή
Τάσος Λαδιάς
ladiastas@gmail.com
Ευχαριστώ
για την προσοχή
και την υπομονή σας
Editor's Notes
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.
Δεν θα επικαλεστώ το γεγονός ότι το Scratch διδάσκεται σε πρωτοετείς φοιτητές σε διάφορα Πανεπιστήμια.