Python για μηχανικούς - μάθημα 65.000 τρίψιμο. από Slurm, εκπαίδευση 3 μηνών, Ημερομηνία 15 Ιανουαρίου 2024.
μικροαντικείμενα / / November 27, 2023
Techlead, Μηχανικός Δεδομένων στο Skyeng / ex Slurm, ISPsystem, Grid Dynamics
Sr. Μηχανικός λογισμικού στο Test, Auriga, πρώην ISPsystem
#1: Βασική σύνταξη και δομές Python
Γιατί: η εκμάθηση κατανόησης της λογικής των προγραμμάτων Python, καθώς και η σύνταξη απλών προγραμμάτων, είναι η πιο σημαντική εργασία. "Υπέροχο" αν δεν είστε εξοικειωμένοι με τη σύνταξη της Python.
- Τύποι δεδομένων και μεταβλητές, μεταβλητοί/αμετάβλητοι και απλοί/σύνθετοι τύποι δεδομένων, τεχνικές εντοπισμού σφαλμάτων.
- Δήλωση υπό όρους - λογικοί τελεστές, απλές συνθήκες, ένθετες συνθήκες και αντικατάσταση εντολών διακόπτη.
- Βασικοί βρόχοι - ενώ και για βρόχους, επαναλήπτες, διακοπές βρόχου.
- Λειτουργίες, μέθοδοι συμβολοσειρών, λίστες και λεξικά.
- Δημιουργία και χειρισμός εξαιρέσεων.
Εξάσκηση: ένα σύνολο μικρών μικροεργασιών για κάθε μάθημα.
#2: Βελτιωμένη επάρκεια Python: Βελτιστοποιήσεις και OOP
Γιατί: Ας κατακτήσουμε τα χαρακτηριστικά της Python - σε αυτά οφείλεται το γεγονός ότι είναι τόσο απλό και πρακτικό. Θα αποκαλύψουμε επίσης το νόημα αυτών των τριών γραμμάτων (μιλάμε για OOP) χωρίς ακαδημαϊκή θεωρία και με σαφή σκοπό
- Προηγμένη εργασία με βρόχους - δήλωση απόδοσης και γεννήτριες, πληροφορίες σχετικά με βρόχους στην Python, δήλωση else σε βρόχο, βελτιστοποίηση βρόχων κατανόησης κ.λπ.
- Ειδικοί τύποι δομών: frozendict, defaultdict κ.λπ.
- Βασικές έννοιες OOP: κλάσεις, περιπτώσεις κλάσεων, ενθυλάκωση, κληρονομικότητα και πολυμορφισμός.
- Δημιουργία διαχειριστών περιβάλλοντος για τους τύπους σας: η κατασκευή με.
Εξάσκηση: ένα σύνολο μικρών μικροεργασιών για κάθε μάθημα.
Προηγμένη πρακτική: Έλεγχος χρήσης υπηρεσιών.
Ο ΚΟΤ άρχισε να υποψιάζεται ότι ορισμένες υπηρεσίες δεν χρησιμοποιούνται πλέον από τις ομάδες. Το πρόβλημα είναι ότι η ενότητα για την παρακολούθηση των χρησιμοποιούμενων υπηρεσιών δεν έχει ενημερωθεί τα τελευταία δέκα χρόνια: δεν έχει ενημερωθεί μπορεί να ανεβάσει συγκεντρωτικά δεδομένα και η μορφή των επιστρεφόμενων τιμών δεν αντιστοιχεί σε γενικά αποδεκτές πρότυπα. Έχετε επιλεγεί για να εξαγάγετε τις καταγεγραμμένες μετρήσεις, να τις συγκεντρώνετε ανά τύπο και ομάδα και να παρέχετε αυτές τις πληροφορίες στον ΚΟΤ για μια αρχική αξιολόγηση του εύρους του προβλήματος.
#3: Συνδέσεις δικτύου
Γιατί: Σχεδόν κάθε υπηρεσία διαθέτει διεπαφή για σύνδεση μέσω κάποιου πρωτοκόλλου δικτύου. Και χωρίς σύνδεση, η αλληλεπίδραση είναι αδύνατη. Ευτυχώς, το οικοσύστημα της Python διαθέτει μονάδες πελάτη για σχεδόν οποιοδήποτε πρωτόκολλο.
- Pip πακέτο και εγκατάσταση μονάδων τρίτων.
- Μονάδα Paramiko για εκτέλεση εντολών μέσω ssh.
- Η ενότητα αιτημάτων για την υποβολή αιτημάτων HTTP.
- Επισκόπηση ενοτήτων για εργασία με βάσεις δεδομένων και μεσίτες μηνυμάτων.
Πρακτική. Η ομάδα ανάπτυξης εισάγει μια νέα μεθοδολογία: Εάν επιτρέψετε να εμφανιστεί μια ειδοποίηση, θα λάβετε μια εργασία. Το αναλυτικό υποσύστημα αναζητά μόνο επιλεγμένα σφάλματα και στέλνει μηνύματα σχετικά με αυτά στον μεσίτη μηνυμάτων Kafka. Η αποστολή σας είναι να ολοκληρώσετε τον κύκλο της επιστροφής σφαλμάτων στους προγραμματιστές: ο καταναλωτής σας θα πρέπει να δημιουργήσει αυτόματα εργασίες με την απαιτούμενη περιγραφή και προτεραιότητα στο Trello.
Νο. 4: Εργασία με κείμενο σε διάφορες μορφές
Γιατί: Η σύνδεση στην υπηρεσία είναι μόνο η μισή μάχη. Το άλλο μισό είναι η ανταλλαγή πληροφοριών. Και οι πληροφορίες είναι συχνά ένα σύνολο χαρακτήρων κειμένου σε μια συγκεκριμένη μορφή. Οι μονάδες θα σας βοηθήσουν να αποκωδικοποιήσετε και να κωδικοποιήσετε. Δεν χρειάζεστε όλες τις πληροφορίες; Οι κανονικές εκφράσεις θα σας βοηθήσουν να εξαγάγετε ό, τι είναι σημαντικό και να απορρίψετε τα υπόλοιπα.
- Η ενότητα re και οι κανονικές εκφράσεις.
- Ενότητες για εργασία με δεδομένα σε διαφορετικές μορφές: διαχωρισμένες τιμές, json, yaml, xml.
- Χρήση ορισμάτων γραμμής εντολών: ενότητα argparse.
Εξάσκηση: Δημιουργία πηγής δεδομένων χρήσης υπηρεσίας.
Κατά τον έλεγχο της χρήσης των υπηρεσιών, εντοπίσατε σημαντικές πληροφορίες για την επιχείρηση, ακόμη και ο Διευθύνων Σύμβουλος ενδιαφέρθηκε. Αποφασίστηκε να αναλυθούν τα χαμένα χρήματα και να μην επαναληφθούν τέτοιες καταστάσεις. Για να το κάνετε αυτό, πρέπει να δώσετε στους αναλυτές ένα εργαλείο απόκτησης δεδομένων ώστε να μπορούν να προετοιμάσουν αναφορές. Το πρόβλημα είναι ότι η λειτουργική μονάδα παρακολούθησης επιστρέφει όρια υπηρεσιών για ξεχωριστό αίτημα σε μορφές yaml και οι τιμές για τις υπηρεσίες επιστρέφονται από το σύστημα χρέωσης σε μορφή xml. Είναι απαραίτητο να συνδυαστούν δεδομένα για το τρέχον φορτίο με όρια και τιμές. Το τμήμα αναλυτικών στοιχείων ζήτησε συγκεντρωτικές πληροφορίες σε μορφή JSON με τη δυνατότητα να καθορίσει ένα χρονικό διάστημα και ένα βήμα συγκέντρωσης.
Νο. 5: Αλληλεπίδραση με το λειτουργικό σύστημα
Γιατί: Η σημασία της αλληλεπίδρασης με το λειτουργικό σύστημα δεν χρειάζεται να εξηγηθεί περαιτέρω. Πώς να το συνδέσετε με την Python είναι σε αυτό το μάθημα.
- Ανάγνωση και εγγραφή αρχείων.
- λειτουργική μονάδα - ανάγνωση μεταβλητών περιβάλλοντος, εργασία με καταλόγους και δικαιώματα, εργασία με διεργασίες.
- Η ενότητα υποδιεργασίας για διαδραστική αλληλεπίδραση με διεργασίες.
Πρακτική: αυτόματη παροχή πρόσβασης σε διακομιστές.
Κατά τη διάρκεια της εκστρατείας για την εγκατάλειψη των αχρησιμοποίητων υπηρεσιών, προέκυψε μια περίεργη κατάσταση: ένας διακομιστής παντοπωλείου οι ομάδες έκλεισαν, αλλά η ομάδα υποδομής το χρησιμοποιούσε περιοδικά ως οικοδεσπότη σκαλωσιά. Αποδείχθηκε ότι η ομάδα προϊόντων δεν το χρησιμοποίησε επειδή περιοδικά κάποιος αντικαθιστούσε τις ρυθμίσεις του με τις δικές του. Αποφασίστηκε ότι τώρα ο πόρος θα εκχωρηθεί μόνο σε μέλη μιας ομάδας και η αυτοματοποίηση θα βοηθήσει στην αποφυγή λαθών. Εσείς, ως αυτός που ξεκίνησε αυτό το χάος, πρέπει να γράψετε έναν πράκτορα που θα κάνει περιοδικά δημοσκοπήσεις στο σύστημα διαχείρισης δικαιωμάτων και κάντε αλλαγές στη διαμόρφωση των δικαιωμάτων εντός των εγκατεστημένων υπηρεσιών και, εάν είναι απαραίτητο, δώστε στις υπηρεσίες μια εντολή για εκ νέου ανάγνωση διαμορφώσεις.
Νο. 6: Χειριστής K8S σε Python (ροή ζωντανής κωδικοποίησης)
13 Οκτωβρίου στις 19:00
Γιατί: ας επεκτείνουμε τις δυνατότητες του K8S για να ταιριάζουν στις εργασίες σας.
Νο. 7: Γράφοντας τη δική μας ενότητα για το Ansible
Γιατί: Το Ansible είναι ένα ισχυρό σύστημα διαχείρισης παραμέτρων, και μάλιστα επεκτάσιμο με τις δικές του μονάδες. Τι σύμπτωση που το ίδιο και τα περισσότερα modules είναι γραμμένα σε Python.
- Γράψτε τις δικές σας ενότητες για το Ansible.
Εξάσκηση: σύνταξη ενότητας διαχείρισης δικαιωμάτων.
Πριν από πολύ καιρό, σε έναν πολύ μακρινό γαλαξία, γράψατε ήδη έναν πράκτορα για την έκδοση δικαιωμάτων σε ορισμένες υπηρεσίες. Ήρθε η ώρα να αλλάξετε την έλξη σε ώθηση και η Ansible θα βοηθήσει σε αυτό. Το μόνο που χρειάζεστε είναι μόνο μια ενότητα.
Νο. 8: Δημιουργία και χρήση περιπτώσεων του API σας
Γιατί: Η προετοιμασία κώδικα για ανάπτυξη είναι μία από τις πιο σημαντικές εργασίες. Τα δικά μας σενάρια για αγωγούς σκηνής βοηθούν να γίνει αυτή η διαδικασία πιο ευέλικτη και βολική.
- Δημιουργία REST API στο Flask.
- Δημιουργία του δικού σας εξαγωγέα prometheus με το Prometheus Python Client and Flask.
Πρακτική: μεταφόρτωση δεδομένων σε σύστημα παρακολούθησης τρίτου μέρους.
Το κόστος του αχρησιμοποίητου εξοπλισμού ξεπέρασε ακόμη και τις απαισιόδοξες προβλέψεις. Τώρα η ομάδα μηχανικών έχει έναν άλλο τομέα ευθύνης - την παρακολούθηση των αχρησιμοποίητων υπηρεσιών. Για να το κάνετε αυτό, πρέπει να κάνετε περιοδική δημοσκόπηση του συστήματος χρέωσης μέσω του σεναρίου σας και να μεταβιβάζετε τα δεδομένα στον Prometheus. Η μορφή των ληφθέντων δεδομένων εξακολουθεί να μην είναι κατάλληλη. Πρέπει να εφαρμόσετε έναν σύνδεσμο. Και ταυτόχρονα γράψτε ένα τελικό σημείο, ώστε το τμήμα αναλυτικών στοιχείων να έχει πάντα στη διάθεσή του ενημερωμένες πληροφορίες σε μορφή JSON.
Συνεδρία AMA + άτυπη συνάντηση με ομιλητές του μαθήματος
28 Οκτωβρίου στις 19:00
Συναντιόμαστε για να συζητήσουμε τις ανησυχίες των συμμετεχόντων.
#9: Δοκιμή του API της εφαρμογής σας
Γιατί: Μερικές φορές είναι καλύτερο να μην υπάρχει κωδικός παρά κωδικός που είναι ασταθής. Για να μην φοβάστε να σπάσετε τον κωδικό σας, πρέπει να γράψετε δοκιμές.
- Τύποι δοκιμών: μονάδα, ενοποίηση και από άκρο σε άκρο.
- Επισκόπηση της ενότητας pyhamcrest και των αντιστοιχιστών της.
- Αρχιτεκτονική και δυνατότητες του pytest.
- Χρήση pytest και pyhamcrest για τη σύνταξη μοναδιαίων δοκιμών.
Εξάσκηση: σύνταξη τεστ χρησιμοποιώντας pytest και pyhamcrest για το API σας.
Νο. 10: Αλληλεπίδραση με συστήματα CVS και DevOps
- Χρήση λειτουργικών μονάδων τρίτων χρησιμοποιώντας το παράδειγμα ενσωμάτωσης σε αγωγούς Gitlab.
- Χρησιμοποιώντας το pygit για να λάβετε πληροφορίες σχετικά με αλλαγές κώδικα.
Εξάσκηση: δημιουργία αρχείου καταγραφής αλλαγών από δεσμεύσεις.
Στην ομάδα μηχανικών άρεσαν τόσο πολύ οι λύσεις σας που εμπνεύστηκαν από αυτές και άρχισαν να γράφουν τις δικές τους. Αλλά οι άνθρωποι πάντα ξεχνούν να γράψουν περιγραφές για κυκλοφορίες. Για να επιτευχθεί αυτό, η ομάδα αποφάσισε να εφαρμόσει συμβάσεις δέσμευσης και να δημιουργήσει αρχεία καταγραφής αλλαγών απευθείας από τις δεσμεύσεις όταν συγχώνευση του κλάδου dev με τον κλάδο έκδοσης και εάν το όνομα του commit δεν συμμορφώνεται με τις συμβάσεις commit, μην επιτρέψετε το αίτημα συγχώνευσης μέχρι συγχώνευση.
#11: Chatops με το Errbot στην Python
Γιατί: Τα κύρια επιχειρηματικά προβλήματα δεν είναι η απόδοση της εφαρμογής ή ακόμη και τα σφάλματα που εμφανίζονται στον κώδικα. Τα πιο σοβαρά προβλήματα προκύπτουν όταν η επικοινωνία των εργαζομένων είναι αναποτελεσματική. Το Chatops είναι ένας τρόπος για να λυθεί αυτό το πρόβλημα.
- Έννοια Chatops: ποια προβλήματα λύνει το Chatops;
- Πλαίσιο Errbot: εγκατάσταση, δημιουργία βασικού προτύπου προσθήκης, διαμόρφωση και εκκίνηση.
- Πλαίσιο Errbot: δημιουργία της δικής σας προσθήκης για Chatops με διάφορες επιλογές για την επεξεργασία μηνυμάτων.
Τελικό έργο
Αναθεώρηση προθεσμίας και προστασία για τους ενδιαφερόμενους
Μετά το μάθημα, θα έχετε ένα έργο στο Git: μπορείτε να αυτοματοποιήσετε την εργασία σας ή να κάνετε μία από τις προτεινόμενες επιλογές.
Το ολοκληρωμένο έργο μπορεί να χρησιμοποιηθεί ως θήκη χαρτοφυλακίου και να εμφανίζεται κατά την υποβολή αίτησης για εργασία.