Εργασίες Σεπτεμβρίου
- Δευτέρα 9 Σεπτεμβρίου 2024 - 4:30 μ.μ. -

Το μάθημα εξετάζεται αποκλειστικά με εργασίες. Κάθε ομάδα μπορεί να είναι μέχρι 3 άτομα. Σε κάθε ομάδα αντιστοιχεί ένας συνδυασμός αλγόριθμου συμπίεσης/κώδικα ανάλογα με το άθροισμα των ΑΜ των μελών της. Σε κάθε περίπτωση η αντιστοίχηση γίνεται σύμφωνα με το άθροισμα των ΑΜ modulo 9, συνεπώς υπάρχουν 9 διαφορετικές τιμές από 0 ως και 8.
Η εργασία παραδίδεται αποκλειστικά μέχρι 30/9 μέσω GUNET.
Γράψτε μια διαδικτυκή εφαρμογή χρησιμοποιώντας socket programming ή ένα RESTful interface σε γλώσσα προγραμματισμού της επιλογής σας η οποία θα πραγματοποιεί τα ακόλουθα:
Ο client δέχεται σαν είσοδο ένα αρχείο για αποστολή και πραγματοποιεί τα ακόλουθα βήματα:
Διαβάζει το αρχείο και το συμπιέζει με τον αντίστοιχο αλγόριθμο συμπίεσης της εκάστοτε ομάδας. Το αποτέλεσμα στην συνέχεια μετατρέπεται σε δυαδική αναπαράσταση και προστίθεται το κατάλληλο padding ώστε να κωδικοποιηθεί αντίστοιχα με τον κατάλληλο κώδικα της κάθε ομάδας. Στο αποτέλεσμα προστίθεται ένα τυχαίο σφάλμα στο Χ% του μήκους του, όπου Χ δίνεται από το χρήστη και μετατρέπεται σε base64. Ο client αποστέλλει δικτυακά στον server ένα JSON με την ακόλουθη πληροφορία:
{
“encoded_message”: “0123456789abcdef”,
“compression_algorithm”: “lz77/lz78/arithmetic/fano-shannon/huffman”,
“encoding”: “linear/cyclic/orthogonal”,
“parameters”:[param_list],
“errors”: n,
“SHA256”: h,
"entropy":e

}
όπου στο parameters η κάθε ομάδα μπορεί να βάλει τη λίστα με τις παραμέτρους που χρειάζεται ο server για να αποκωδικοποιήσει το μήνυμα που έλαβε, π.χ. το πολυώνυμο γεννήτορα.
Ο Server, λαμβάνοντας το μήνυμα χρησιμοποιεί τις παραμέτρους για να αποκωδικοποιήσει το μήνυμα και στην συνέχεια ελέγχει πόσα σφάλματα διόρθωσε και εξάγει στον χρήστη την διαφορά με το “errors” που έλαβε και το αποκωδικοποιημένο μήνυμα. Επιπλέον εμφανίζει το αποτέλεσμα της συνάρτησης κατακερματισμού SHA256 του αποκωδικοποιημένου μηνύματος και το συγκρίνει με το αρχικό καθώς και την εντροπία του τελικού μηνύματος.

  • Για άθροισμα ομάδας 0 mod 9: Αλγόριθμος συμπίεσης Lempel-Ziv 77, Γραμμικός κώδικας
  • Για άθροισμα ομάδας 1 mod 9: Αλγόριθμος συμπίεσης Lempel-Ziv 77, Κυκλικός κώδικας
  • Για άθροισμα ομάδας 2 mod 9: Αλγόριθμος συμπίεσης Lempel-Ziv 78, Ορθογώνιος κώδικας
  • Για άθροισμα ομάδας 3 mod 9: Αλγόριθμος συμπίεσης Lempel-Ziv 78, Κυκλικός κώδικας
  • Για άθροισμα ομάδας 4 mod 9: Αλγόριθμος συμπίεσης αριθμητικός κώδικας, Γραμμικός κώδικας
  • Για άθροισμα ομάδας 5 mod 9: Αλγόριθμος συμπίεσης Fano-Shannon, Κυκλικός κώδικας
  • Για άθροισμα ομάδας 6 mod 9: Αλγόριθμος συμπίεσης Fano-Shannon, Γραμμικός κώδικας
  • Για άθροισμα ομάδας 7 mod 9: Αλγόριθμος συμπίεσης Huffman, Κυκλικός κώδικας
  • Για άθροισμα ομάδας 8 mod 9: Αλγόριθμος συμπίεσης Huffman, Ορθογώνιος κώδικας

Κάθε φορά που ξεκινάει ο client δημιουργεί έναν νέο κώδικα ανίχνευσης και διόρθωσης σφαλμάτων και οι παράμετροί του μεταβιβάζονται στον Server.

Ενδεικτικές βιβλιοθήκες/frameworks σε Python

  • https://flask.palletsprojects.com/en/2.1.x/
  • https://www.sagemath.org/