Skip to content

Latest commit

 

History

History
283 lines (143 loc) · 79.1 KB

GUIDE_gr.md

File metadata and controls

283 lines (143 loc) · 79.1 KB

Ένας οδηγός για το GitHub Code Vault (Αποθήκη κώδικα GitHub)

Εισαγωγή

Αυτό το αρχείο, το GitHub Code Vault, δημιουργήθηκε από το GitHub Archive Program, του οποίου η αποστολή είναι να διατηρήσει λογισμικό ανοιχτού κώδικα για τις μελλοντικές γενιές. Ίσως να το διαβάζετε ένα χρόνο από τώρα, ή χίλια, αλλά έτσι κι αλλιώς, ελπίζουμε ότι το περιεχόμενό του, και ίσως η ίδια η έννοια του ανοιχτού κώδικα, είναι χρήσιμα για εσάς.

Αυτό είναι κυρίως ένα αρχείο λογισμικού. Το λογισμικό είναι μια σειρά εντολών που χρησιμοποιούνται για τον έλεγχο των ενεργειών ενός υπολογιστή. Ένας υπολογιστής είναι μια συσκευή που μπορεί να εκτελεί αυτόματα μαθηματικές συναρτήσεις πολύ πιο γρήγορα από ό, τι ένα ανθρώπινο μυαλό, έχοντας έτσι δυνατότητες πολύ ανώτερες από εμάς. Οι υπολογιστές μας χρησιμοποιούνται για να βοηθήσουν στην εξερεύνηση των μυστικών του σύμπαντος, να συνδέσουν όλη την ανθρωπότητα σε έναν πανταχού παρόντα ιστό πληροφοριών, να χειριστούν σήματα αρκετά γρήγορα για να μεταδώσουν ήχους και να προβάλλουν λεπτομερείς κινούμενες εικόνες σε ηλεκτρικές οθόνες και να ελέγχουν τεράστια ισχυρά μηχανήματα, πράγματα τα οποία υπερβαίνουν τόσο την ικανότητα όσο και την ακρίβεια της ανθρώπινης εργασίας.

Ένας υπολογιστής χωρίς λογισμικό δεν μπορεί να κάνει κανένα από αυτά τα πράγματα. Ένας υπολογιστής είναι ένα εξαιρετικό και θαυμάσιο πράγμα, αλλά χωρίς λογισμικό, όλη η δύναμή του είναι άχρηστη. Ο σκοπός αυτού του αρχείου είναι να σας μεταδώσουμε ό, τι γνωρίζουμε για το λογισμικό.

Το λογισμικό είναι γραμμένο ως πολύπλοκες αλλά αναγνώσιμες από τον άνθρωπο ακολουθίες εντολών, οι διάφορες εκδοχές των οποίων είναι γνωστές ως γλώσσες προγραμματισμού, επειδή μια πλήρης μονάδα λογισμικού ονομάζεται συχνά πρόγραμμα. Αυτά τα προγράμματα στη συνέχεια μετατρέπονται σε δυαδική γλώσσα άσων και μηδενικών που χρησιμοποιούνται από υπολογιστές. Αυτή η διαδικασία είναι γνωστή ως μεταγλώττιση (compiling).

Επειδή το μεταγλωττισμένο λογισμικό είναι πολύ δύσκολο να αποκρυπτογραφηθεί ξανά στην αρχική του μορφή προγράμματος, γνωστό και ως πηγαίος κώδικας, είναι πιθανό για τους χρήστες να διατηρήσουν την αρχική φόρμα μυστική και να διεκδικήσουν ιδιοκτησία. Το λογισμικό ανοιχτού κώδικα δεν είναι διαφορετικό είδος λογισμικού, αλλά έχει διαφορετικό ήθος. Το ήθος ανοιχτού κώδικα απορρίπτει το απόρρητο και την ιδιοκτησία. Τα προγράμματα λογισμικού ανοιχτού κώδικα διατίθενται σε οποιονδήποτε και σε όσους θέλουν να το χρησιμοποιήσουν, χωρίς κόστος, ώστε να μπορούν με τη σειρά τους να βελτιώσουν αυτά τα προγράμματα ή να τα χρησιμοποιήσουν για να δημιουργήσουν κάτι νέο και καλύτερο.

Ένα έργο ανοιχτού κώδικα είναι το συλλογικό έργο μιας αυτοοργανωμένης κοινότητας που μπορεί να αριθμεί χιλιάδες. Η συσσώρευση όλων των έργων λογισμικού ανοιχτού κώδικα που αρχειοθετούνται εδώ είναι έργο μιας κοινότητας πολλών εκατομμυρίων. Ενώ ορισμένα άτομα ενδέχεται να έχουν ειδικά δικαιώματα σε οποιοδήποτε δεδομένο έργο, όπως η δυνατότητα έγκρισης ή απόρριψης προτεινόμενων αλλαγών στην τελευταία επίσημη έκδοση του πηγαίου κώδικα, κανένας δεν το κατέχει ποτέ. Κάθε άτομο έχει κάθε δικαίωμα να λάβει και να χρησιμοποιήσει ένα πλήρες αντίγραφο οποιουδήποτε έργου ανοιχτού κώδικα ανά πάσα στιγμή, χωρίς κόστος ή ποινή. Αυτό είναι γνωστό ως διακλάδωση (forking) ενός έργου.

Όταν πολλά άτομα εργάζονται στον πηγαίο κώδικα ταυτόχρονα, είναι δύσκολο να παρακολουθούνται και να ενσωματώνονται όλες οι αλλαγές τους. Ένα έργο ανοιχτού κώδικα γνωστό ως «Git» είναι αφιερωμένο στην επίλυση αυτού του προβλήματος. Ενσωματώνει ένα πλήρες ιστορικό όλων των προσθηκών και των αλλαγών σε ένα έργο σε μια οντότητα γνωστή ως αποθετήριο Git (Git repository). Αυτό το αρχείο είναι ουσιαστικά ένα αρχείο τέτοιων αποθετηρίων.

Αυτό το αρχείο έχει δημιουργηθεί από μια εταιρεία με την ονομασία "GitHub", η οποία παρέχει μια υπηρεσία που επιτρέπει σε άτομα σε όλο τον κόσμο να αποθηκεύουν τα προγράμματα λογισμικού που έχουν γράψει, να παρακολουθούν τις αλλαγές σε αυτά τα προγράμματα και να συνεργάζονται με άλλους για τη βελτίωση και επέκτασή τους. Η GitHub καθιστά τις υπηρεσίες της διαθέσιμες δωρεάν σε προγραμματιστές δημόσιου λογισμικού ανοιχτού κώδικα. Έχει δεκάδες εκατομμύρια τέτοιους χρήστες.

Αυτό που ακολουθεί είναι μια περιγραφή αυτού που πιστεύουμε ότι θα πρέπει να γνωρίζετε και να έχετε για να αξιοποιήσετε καλύτερα αυτό το αρχείο λογισμικού. Εάν δεν γνωρίζετε ή καταλαβαίνετε μερικά ή οτιδήποτε από αυτά, μην απελπιστείτε! Έχουμε επίσης συμπεριλάβει έναν οδηγό για τον τρόπο εκπλήρωσης αυτών των απαιτήσεων. Εάν για οποιονδήποτε λόγο δεν μπορείτε να τα πετύχετε μόνοι σας, τότε οι απόγονοί σας μπορούν.

Τι χρειάζεστε για να χρησιμοποιήσετε το αρχείο

Κατ 'αρχήν, το μόνο που χρειάζεστε για να αποκτήσετε πρόσβαση στο περιεχόμενο αυτού του αρχείου είναι μια πηγή φωτισμού και κάποιο είδος μεγεθυντικού φακού. Ωστόσο, τα περισσότερα (αν και όχι όλα) από τα δεδομένα τους έχουν συσκευαστεί πολύ σφιχτά σε κυλίνδρους φιλμ σε κωδικοποιημένη και συμπιεσμένη μορφή. Η ανάγνωση, η αποκωδικοποίηση και η αποσυμπίεση αυτών των δεδομένων θα απαιτήσει σημαντική υπολογιστική ισχύ. Θεωρητικά θα μπορούσε να γίνει χωρίς υπολογιστές, αλλά θα ήταν πολύ κουραστικό και δύσκολο.

Προσδοκούμε ότι δεν χρειάζεστε τους ορισμούς μας για λογισμικό, υπολογιστή και άλλους όρους. Φανταζόμαστε ότι έχετε δικούς σας υπολογιστές, πιθανώς πολύ πιο προηγμένους από τους δικούς μας, και ενδεχομένως με ριζικά διαφορετική αρχιτεκτονική. Μόλις καταλάβετε την επισκόπηση και τον παρακάτω οδηγό, θα μπορείτε εύκολα να έχετε πρόσβαση σε όλα τα δεδομένα.

Ωστόσο, είναι πιθανό να έχετε κατώτερους υπολογιστές από τους δικούς μας ή ακόμη και καθόλου υπολογιστές. Σε αυτήν την περίπτωση, έχουμε ετοιμάσει ένα ασυμπίεστο, χωρίς κωδικοποίηση, αναγνώσιμο από τον άνθρωπο κύλινδρο δεδομένων που ονομάζουμε Tech Tree. Το Tech Tree περιέχει πληροφορίες σχετικά με τις θεμελιώδεις τεχνολογίες μας, τους υπολογιστές μας και το λογισμικό μας, με την ελπίδα ότι, με την πάροδο του χρόνου, θα μπορείτε να χρησιμοποιήσετε αυτές τις γνώσεις για να δημιουργήσετε ξανά υπολογιστές που μπορούν να κάνουν χρήση του λογισμικού ανοιχτού κώδικα σε αυτό το αρχείο.

Τι περιέχεται

Το αρχείο είναι τόσο μεγάλο - περίπου 24 τρισεκατομμύρια byte (εξηγείται παρακάτω) - επειδή είναι εξαιρετικά περιεκτικό και δημοκρατικό. Πολλά εκατομμύρια άνθρωποι κάνουν το λογισμικό που γράφουν διαθέσιμο σε όλους. Αυτό το αρχείο περιλαμβάνει ένα στιγμιότυπο - δηλαδή, ένα αντίγραφο, σε μια στιγμή στο χρόνο - όλου του δημόσιου λογισμικού που αναπτύσσουν ενεργά οι χρήστες του GitHub. Αυτό σημαίνει ότι περιλαμβάνει δεκάδες εκατομμύρια ξεχωριστά αποθετήρια. Ελπίζουμε ότι αυτή η ευρεία, δημοκρατική προσέγγιση θα ενδιαφέρει τους ιστορικούς του μέλλοντος.

Τα αποθετήρια που περιλαμβάνονται σε αυτό το αρχείο καθορίστηκαν καθαρά από το τελευταίο commit τους, που σημαίνει την τελευταία φορά που ενημερώθηκαν, και τον αριθμό των αστεριών τους. (Οι χρήστες του GitHub είναι σε θέση να δώσουν ένα αστέρι σε δημόσια αποθετήρια, για να δηλώσουν ότι έχουν ενδιαφέρον ή έχουν σημασία.) Το στιγμιότυπο ξεκίνησε στις 02/02/2020, δηλαδή, τη δεύτερη ημέρα του μήνα Φεβρουαρίου, το έτος 2020 του Γρηγοριανού ημερολογίου, όπως μετράμε τον χρόνο. Τα αποθετήρια που περιλαμβάνονται σε αυτό είναι: όλα τα αποθετήρια με τυχόν commits εντός των προηγούμενων 80 ημερών, όλα τα αποθετήρια με τουλάχιστον ένα αστέρι και οποιαδήποτε commits εντός των προηγούμενων 365 ημερών · και όλα τα αποθετήρια με τουλάχιστον 250 αστέρια, ανεξάρτητα από το πότε ενημερώθηκαν τελευταία φορά.

Φυσικά, δεν είναι όλα αυτά τα αποθετήρια εξίσου σημαντικά όσον αφορά την επιρροή και τα dependencies τους. Το Tech Tree περιλαμβάνει ένα ευρετήριο και μια σύντομη περιγραφή των πιο σημαντικών αποθετηρίων στο αρχείο και απαριθμεί σε ποιό κύλινδρο μπορεί να βρεθεί το καθένα, έτσι ώστε να είναι προσβάσιμα χωρίς να χρειάζεται να περάσετε εκατομμύρια αποθετήρια για να προσδιορίσετε ποια είναι πιο πρακτικά χρήσιμα.

Επισκόπηση του αρχείου

Το αρχείο αποτελείται από 201 κυλίνδρους ταινίας: έναν «οδηγό κύλινδρο» με αναγνώσιμες από τον άνθρωπο πληροφορίες και καθοδήγηση, και 200 κυλίνδρους αρχειοθετημένου λογισμικού. Κάθε κύλινδρος περιλαμβάνει 65.000 μεμονωμένα καρέ. Τα καρέ στην αρχή κάθε κυλίνδρου, και τα καρέ του οδηγού κυλίνδρου, περιλαμβάνουν κείμενο και εικόνες αναγνώσιμες από τον άνθρωπο. Όλα τα άλλα καρέ φιλμ αποτελούνται από ψηφιακά δεδομένα αποθηκευμένα σε οπτική μορφή γνωστή ως κωδικοί QR.

Ψηφιακά δεδομένα σημαίνει δεδομένα που αποθηκεύονται τελικά σε δυαδική μορφή, δηλαδή ως 0 και 1, επειδή οι ίδιοι οι υπολογιστές είναι δυαδικοί - ελέγχονται από ηλεκτρικά σήματα που είναι είτε "on" είτε "off", που αντιστοιχούν σε 1 ή 0. Για αυτό, τα δυαδικά δεδομένα είναι πολύ πιο εύκολο να τα κατανοήσουν οι υπολογιστές από οποιοδήποτε άλλο τύπο δεδομένων.

Τα αναγνώσιμα από τον άνθρωπο μεταδεδομένα που είναι αποθηκευμένα στην αρχή κάθε τροχού περιλαμβάνουν πληροφορίες σχετικά με την ίδια την ταινία, έναν οδηγό για την κωδικοποίηση QR που χρησιμοποιείται, ένα πρόγραμμα λογισμικού για την αποκωδικοποίησή του και ένα ευρετήριο. Το ευρετήριο παραθέτει τον τίτλο, τον αρχικό αριθμό καρέ και το άθροισμα ελέγχου για κάθε αρχείο που είναι αποθηκευμένο σε αυτόν τον κύλινδρο.

Ένα αρχείο είναι μια συνεκτική οντότητα δεδομένων. Το άθροισμα ελέγχου είναι μια μοναδική τιμή από έναν υπολογισμό, γνωστό ως συνάρτηση κατακερματισμού, που εκτελείται σε ολόκληρο το περιεχόμενο ενός αρχείου, για να διασφαλιστεί ότι τα περιεχόμενά του δεν έχουν καταστραφεί ή διαφθαρεί. Η συνάρτηση κατακερματισμού που χρησιμοποιείται στο αρχείο είναι γνωστή ως «SHA-1».

Κάθε κωδικός QR αποτελείται από ένα πεδίο μικροσκοπικών λευκών ή μαύρων τετραγώνων που καταλαμβάνει σχεδόν ολόκληρο το καρέ της ταινίας. Χρησιμοποιούμε κωδικούς QR επειδή είναι πολύ πιο συμπαγής και στιβαροί από το κείμενο που είναι αναγνώσιμο από τον άνθρωπο. Ένας κωδικός QR αποκωδικοποιεί σε δυαδικά δεδομένα, δηλαδή μια σειρά από 1 και 0.

Αυτή η αποκωδικοποίηση είναι μόνο το πρώτο βήμα για τη μετατροπή αυτών των δυαδικών δεδομένων σε σημαντικές πληροφορίες. Είναι συμπιεσμένα δεδομένα για εξοικονόμηση χώρου, παρόμοιο με το πώς μπορεί κανείς να γράψει "128xA" αντί να γράψει το γράμμα Α 128 φορές. Αφού αποκωδικοποιηθεί, πρέπει να αποσυμπιεστεί.

Το αποτέλεσμα μετά την αποσυμπίεση είναι γνωστό ως αρχείο αρχειοθέτησης: ένα μεμονωμένο αρχείο που περιέχει ολόκληρο το περιεχόμενο ενός αποθετηρίου ενός έργου λογισμικού. Τα περισσότερα αποθετήρια περιλαμβάνουν πολλά αρχεία, επομένως αυτό το αρχείο αρχειοθέτησης είναι σαν ένα βιβλίο που περιέχει πολλά ξεχωριστά κεφάλαια ή ένα κουτί που περιέχει πολλά άλλα κουτιά. Είναι γενικά πλεονεκτικό, αν και δεν είναι απολύτως απαραίτητο, να αποσυμπιέσετε το αρχείο αρχειοθέτησης στα αρχεία που περιέχει πριν από την πρόσβαση σε αυτά.

Τέλος, κάθε αρχείο που περιέχεται είναι το δικό του σύνολο δυαδικών δεδομένων, δηλαδή 1 και 0. Κάποιος μπορεί να κατανοήσει τα δεδομένα αν γνωρίζει τη μορφή τους. Για παράδειγμα, στη μορφή γνωστή ως «UTF-8», η πιο κοινή μορφή στο αρχείο, οι άσοι και τα μηδενικά χωρίζονται σε ομάδες των οκτώ, γνωστά ως byte. Το byte 01000001 αντιπροσωπεύει το γράμμα Α. τα τρία bytes 01101001 01101110 01110100 αντιπροσωπεύουν τη λέξη int. και τα δύο bytes 11000011 10000011 αντιπροσωπεύουν το γράμμα Ã (Α με μια ελαφριά προφορά στην κορυφή.)

Αυτή η διαδικασία αρχειοθέτησης δεδομένων, δυαδικά αρχεία που είναι συσκευασμένα σε αρχεία αρχειοθέτησης τα οποία πρώτα συμπιέστηκαν και στη συνέχεια κωδικοποιήθηκαν με QR, είναι προφανώς περίπλοκη σε σύγκριση με την απλή συγγραφή κειμένου που είναι αναγνώσιμο από τον άνθρωπο. Η διαδικασία κατάργησης αρχειοθέτησης που πρέπει να περάσετε -- QR σε συμπιεσμένο δυαδικό αρχείο, συμπιεσμένο σε ασυμπίεστο, αρχειοθέτηση του αρχείου σε πολλά αρχεία, αρχεία κειμένου σε αναγνώσιμο από τον άνθρωπο κείμενο -- είναι εξίσου περίπλοκο. Αυτό συμβαίνει επειδή αυτή η πολυπλοκότητα μας επιτρέπει να αποθηκεύουμε πολύ περισσότερα δεδομένα, από ό, τι με έναν σχετικά εύκολα αναγνώσιμο τρόπο από τον υπολογιστή.

Εάν αυτή η πολυπλοκότητα είναι δύσκολη και δαπανηρή για εσάς, ζητούμε συγγνώμη, αλλά προσδοκούμε ότι, εάν συμβαίνει αυτό, αυτός ο οδηγός και το αναγνώσιμο από τον άνθρωπο Tech Tree θα αναιρέσει αυτήν την πολυπλοκότητα, και ίσως είναι πιο χρήσιμο για εσάς από τα περιεχόμενα του αρχείου, τουλάχιστον έως ότου οι υπολογιστές σας προχωρήσουν αρκετά ώστε να είναι εύκολο να αντιμετωπιστεί η πολυπλοκότητα των δεδομένων του αρχείου.

Αρχεία (Files), Κατάλογοι (Directories), Αποθετήρια (Repositories) και Μορφές Δεδομένων (Data Formats)

Μπορεί να είναι χρήσιμο να συζητήσουμε πώς είναι λογικά διαιρεμένο το αρχείο. Συγκεκριμένα, μια συζήτηση για τα αρχεία, τους καταλόγους και τις μορφές δεδομένων είναι πιθανό να είναι χρήσιμη.

Ένα αρχείο είναι μια συλλογή δεδομένων, ομαδοποιημένων σε μια συνεκτική οντότητα με ένα μόνο όνομα: σκεφτείτε τα δεδομένα ως άμμο και ένα αρχείο ως ένα είδος σάκου που μπορεί να χωρέσει άμμο και μόνο άμμο. Ένας κατάλογος είναι μια συλλογή αρχείων: σκεφτείτε το ως ένα είδος σάκου που μπορεί να χωρέσει μόνο άλλους σάκους. Μετά από αυτήν τη μεταφορά, κάθε αποθετήριο αποτελείται από έναν εξωτερικό κατάλογο, γνωστό ως ριζικός κατάλογος (root directory), ο οποίος περιέχει έναν αριθμό αρχείων ή / και έναν αριθμό καταλόγων. Κάθε κατάλογος μπορεί, με τη σειρά του, να περιέχει και αρχεία και καταλόγους.

Αυτή η δομή προτιμάται επειδή τα αρχεία που είναι οργανωμένα σε ομάδες είναι πιο εύκολα διαχερίσιμα από μια συλλογή αρχείων. Το αναγνωριστικό ενός συγκεκριμένου αρχείου στον εξωτερικό κατάλογο αποτελείται από τα ονόματα όλων των καταλόγων που το περιέχουν, ξεκινώντας από τη ρίζα (root), ακολουθούμενο από το δικό τους όνομα, με ένα χαρακτήρα '/' μεταξύ κάθε ονόματος. Για παράδειγμα, ένα αρχείο με το όνομα README.md στον ριζικό κατάλογο θα αναγνωριστεί ως /README.md και ένα αρχείο που θα αναγνωρίζεται ως /public/www/index.html θα είναι το αρχείο index.html στον κατάλογο "www", μέσα στον κατάλογο "pulic", μέσα στον ριζικό κατάλογο.

Κάθε αποθετήριο με τη σειρά του έχει δύο ονόματα, χωρισμένα από ένα διαχωριστικό, το οποίο είναι ο χαρακτήρας '_'. (Ιστορικά ήταν '/' ή κάθετο, αλλά αυτό χρησιμοποιείται επίσης για να υποδείξει έναν κατάλογο, οπότε χρησιμοποιούμε το _ για λόγους σαφήνειας.) Το πρώτο όνομα είναι ο λογαριασμός GitHub που κατέχει αυτό το αποθετήριο. Το δεύτερο είναι το όνομα του αποθετηρίου. Ο συνδυασμός χώρου αποθήκευσης και αναγνωριστικών αρχείων μπορεί να χρησιμοποιηθεί για τον μοναδικό προσδιορισμό ενός μεμονωμένου αρχείου. Για παράδειγμα, το αρχείο "package.json" στον κατάλογο "web" στο αποθετήριο "ykarma" εντός του λογαριασμού GitHub "rezendi" θα μπορούσε να αναγνωριστεί μοναδικά ως /web/package.json στο rezendi_ykarma, εντός του αρχείου.

Διαφορετικά είδη αρχείων έχουν διαφορετικούς σκοπούς. Το GitHub αποτελείται σε μεγάλο βαθμό από αρχεία κειμένου, δηλαδή αρχεία των οποίων τα δεδομένα προορίζονται να αντιπροσωπεύουν γραπτή γλώσσα. Τα περισσότερα λογισμικά είναι γραμμένα σε αρχεία κειμένου που περιέχουν πολύ δομημένο κείμενο γνωστό ως πηγαίος κώδικας. Ένα ειδικό πρόγραμμα γνωστό ως μεταγλωττιστής μετατρέπει αυτόν τον αναγνώσιμο από τον άνθρωπο πηγαίο κώδικα σε αναγνώσιμες από υπολογιστή οδηγίες γνωστές ως μεταγλωττισμένος κώδικας (compiled code) ή κώδικας μηχανής (machine code).

Αρχεία που δεν είναι αρχεία κειμένου, όπως αρχεία που αντιπροσωπεύουν οπτικές εικόνες ή περιέχουν μεταγλωττισμένο κώδικα, αναφέρονται συχνά ως δυαδικά αρχεία. Αυτός είναι, δυστυχώς, ένας παραπλανητικός όρος, καθώς και τα αρχεία κειμένου είναι τελικά και 1 και 0. Θα αναφερθούμε σε αρχεία που δεν είναι αρχεία κειμένου ως 'αρχεία χωρίς κείμενο'.

Υπάρχουν πολλοί τρόποι για την αναπαράσταση γραπτής ανθρώπινης γλώσσας με χρήση άσων και μηδενικών. Για ιστορικούς λόγους, ο περισσότερος πηγαίος κώδικας γράφτηκε αρχικά σε αυτό που είναι γνωστό ως Λατινικό κείμενο. Το Λατινικό κείμενο έχει 26 βασικούς χαρακτήρες που χρησιμοποιούνται για την αναπαράσταση λέξεων που μπορούν να εκφραστούν, καθένας από τους οποίους έχει δύο μορφές, κεφαλαία και πεζά. Έχει επίσης 10 ψηφία για να αντιπροσωπεύει τους αριθμούς. Το Λατινικό κείμενο, μαζί με διάφορα άλλα σχετικά σύμβολα που χρησιμοποιούνται για την ένδειξη δομής και άλλων εννοιών, κωδικοποιείται σε 1 και 0 σε μορφή γνωστή ως «ASCII», η οποία μπορεί να αντιπροσωπεύει 128 διαφορετικούς χαρακτήρες και για ιστορικούς λόγους κυριαρχούσε στα περισσότερα λογισμικά για πολλά χρόνια .

Ωστόσο, το Λατινικό κείμενο είναι μόνο ένα μικρό υποσύνολο των πολλών τρόπων με τους οποίους οι άνθρωποι εκφράζονται σε γραπτή γλώσσα. Για να υποστηρίξει άλλα και άλλα κείμενα, ενώ επιτρέπει επίσης σε όλο το λογισμικό που είχε γραφτεί να χρησιμοποιεί ASCII να συνεχίσει να λειτουργεί χωρίς αλλαγές (μια έννοια γνωστή ως 'backwards compatibility' ), εισήχθη μια άλλη μορφή δεδομένων γνωστή ως «UTF-8».

Το ASCII παραμένει η πιο κοινή μορφή πηγαίου κώδικα. Κάθε κύλινδρος αυτού του αρχείου περιλαμβάνει έναν οδηγό για χαρακτήρες ASCII. Το ASCII είναι ένα υποσύνολο του UTF-8, δηλαδή, όλες οι κωδικοποιήσεις ASCII είναι επίσης κωδικοποιήσεις UTF-8. Ο οδηγός κύλινδρος περιέχει επιπλέον μια προδιαγραφή όλων των χαρακτήρων UTF-8. Σχεδόν όλα τα αρχεία κειμένου σε αυτό το αρχείο πρέπει να κωδικοποιούνται ως UTF-8.

Τα αρχεία χωρίς κείμενο περιλαμβάνουν αρχεία που προορίζονται να αντιπροσωπεύουν εικόνες και μορφοποιημένα έγγραφα. Μια ευρέως χρησιμοποιούμενη σύμβαση είναι τα ονόματα αρχείων να τελειώνουν με "." ακολουθούμενο από ένα επίθημα που δείχνει τον τύπο αρχείου. Για παράδειγμα, ένα όνομα αρχείου που τελειώνει με .jpg είναι πιθανώς ένα αρχείο εικόνας JPEG. Αυτό που τελειώνει με .PNG είναι πιθανότατα ένα αρχείο εικόνας Γραφικού Φορητού Δικτύου (Portable Network Graphic image) και ένα που τελειώνει με .pdf ένα αρχείο Portable Document Format.

Δεν υπάρχει ένα επίθημα που να υποδεικνύει αρχεία κειμένου. Αντίθετα, για τον πηγαίο κώδικα, το επίθημα είναι πιο πιθανό να υποδεικνύει σε ποια γλώσσα προγραμματισμού ή σήμανσης είναι γραμμένος ο κώδικας. Οι γλώσσες προγραμματισμού και σήμανσης θα περιγραφούν με περισσότερες λεπτομέρειες παρακάτω.

Πώς να εξαγάγετε τα περιεχόμενα του αρχείου

Εδώ θα παρέχουμε μια επισκόπηση του τρόπου αποσυσκευασίας ενός συγκεκριμένου αρχειοθετημένου αποθετηρίου στα διάφορα αρχεία του. Και πάλι, αυτή η διαδικασία αποτελείται από:

  1. Προσδιορισμός του συγκεκριμένου κυλίνδρου και καρέ στα οποία αρχειοθετούνται τα δεδομένα του αποθετηρίου.

  2. Αποκωδικοποίηση από τους κωδικούς QR, τα πεδία των μαύρων, λευκών και γκρίζων εικονοστοιχείων σε αυτά τα καρέ, σε ένα δυαδικό αρχείο, μια ακολουθία (τουλάχιστον χιλιάδων, και συχνά εκατομμυρίων) 1 και 0.

  3. Αποσυμπίεση του δυαδικού αρχείου σε ένα μεγαλύτερο, μη συμπιεσμένο αρχείο αρχειοθέτησης.

  4. Αποσυσκευασία του αρχείου αρχειοθέτησης στα υποαρχεία που περιέχει. Σημειώστε ωστόσο ότι τα δεδομένα αρχειοθέτησης είναι γενικά κατανοητά, αν και ακατάστατα, ακόμη και αν αυτό το βήμα παραλείπεται.

  5. Τέλος, η μετατροπή καθενός από αυτά τα δευτερεύοντα αρχεία -- οι ίδιες ακολουθίες 1 και 0 που μπορεί να κυμαίνονται από αρκετά μικρά έως πολύ μεγάλα -- σε γραπτούς χαρακτήρες, εάν είναι αρχεία κειμένου.

Προσδιορισμός του συγκεκριμένου κυλίνδρου και καρέ στα οποία αρχειοθετούνται τα δεδομένα του αποθετηρίου.

Κάθε κύλινδρος της ταινίας ξεκινά με ένα άδειο φιλμ και στη συνέχεια το Zero Reference Frame, το οποίο αποτελείται από ένα συμπαγές μαύρο ορθογώνιο σε μια γωνία ενός κατά τα άλλα άδειου καρέ. Το επόμενο καρέ που είναι αναγνώσιμο από τον άνθρωπο είναι το πλαίσιο ελέγχου (Control Frame), με πληροφορίες σχετικά με τον κύλινδρο. Ακολουθεί ο πίνακας περιεχομένων, ο οποίος με τη σειρά του περιλαμβάνει μια λίστα αρχείων δεδομένων χρήστη (User Data Files).

Κάθε αποθετήριο σε αυτόν τον κύλινδρο είναι ένα από αυτά τα αρχεία δεδομένων χρήστη. Η λίστα περιλαμβάνει ένα μοναδικό αναγνωριστικό, ένα αναγνωριστικό αρχείου και ένα όνομα για καθένα από αυτά τα αρχεία. Για παράδειγμα, το αποθετήριο CPython του λογαριασμού Python ενδέχεται να έχει το αναγνωριστικό αρχείου ως 12345 και το όνομα να αναφέρεται ως python_cpython.tar.

Ακολουθώντας τη λίστα των αρχείων δεδομένων χρήστη είναι μια λίστα με τις τοποθεσίες ψηφιακών δεδομένων (Digital Data Locations). Αυτή η λίστα περιλαμβάνει το αναγνωριστικό αρχείου, ένα καρέ έναρξης, ένα byte έναρξης, ένα καρέ λήξης και ένα byte λήξης. Έτσι, χρησιμοποιώντας το υποθετικό παράδειγμα CPython, το στοιχείο σε αυτήν τη λίστα με το αναγνωριστικό 12345 μπορεί να έχει ένα αρχικό καρέ 054321, ένα byte έναρξης 03210321, ένα τελικό καρέ 054545 και ένα τελικό byte 12321232.

Αυτό σημαίνει, για να λάβετε τα δεδομένα του CPython: Μεταβείτε στο πλαίσιο 54321 αυτού του κυλίνδρου της ταινίας. Αποκωδικοποιήστε όλα τα καρέ από το αρχικό πλαίσιο, 54321, στο τελικό πλαίσιο, 54545, σε δυαδικές τιμές, με τα μέσα που περιγράφονται παρακάτω. Αυτό θα σας δώσει 225 κομμάτια δεδομένων από 54321 έως 54545, τα οποία θα ξεκινήσουν με ένα σύνολο κενών κομματιών χωρίς δεδομένα. Απορρίψτε τα πρώτα 3210320 byte στο πρώτο μη κενό κομμάτι δεδομένων. Προσθέστε όλα τα "μεσαία" κομμάτια δεδομένων, με τη σειρά. Τέλος, προσαρτήστε τα πρώτα 12321232 byte από το τελευταίο κομμάτι δεδομένων, 54545. Τώρα έχετε συγκεντρώσει το πλήρες αποθετήριο CPython, ως ένα συμπιεσμένο αρχείο αρχειοθέτησης.

Αποκωδικοποίηση από τους κωδικούς QR σε ένα δυαδικό αρχείο

Οι λεπτομέρειες σχετικά με τον τρόπο αποκωδικοποίησης των καρέ φιλμ σε δυαδικά δεδομένα βρίσκονται στις αναγνώσιμες από τον άνθρωπο πληροφορίες αναπαράστασης (Representation Information) που βρίσκονται ακολουθώντας τον Πίνακα Περιεχομένων στην αρχή κάθε κυλίνδρου της ταινίας στο αρχείο. Αυτές οι πληροφορίες βρίσκονται σε κάθε κύλινδρο, έτσι ώστε, ακόμη και αν ένας μεμονωμένος κύλινδρος διαχωρστεί από το αρχείο, θα είναι ακόμα δυνατό να αποκρυπτογραφηθεί το περιεχόμενό του. Αυτές οι πληροφορίες αναπαράστασης περιλαμβάνουν, με την ακόλουθη σειρά:

  1. Έναν οδηγό για το GitHub Archive Program (αυτό το έγγραφο)

  2. Περιγραφικό ευρετήριο GitHub, μια λίστα και σύντομη περιγραφή όλων των αποθετηρίων σε αυτόν τον κύλινδρο

  3. Περιγραφή πληροφοριών αναπαράστασης

  4. Ψηφιακή διατήρηση και τρόπος ανάκτησης δεδομένων, μια επισκόπηση των λεπτομερειών ανάκτησης δεδομένων

  5. Περιγραφή μέσου αποθήκευσης

  6. Τεχνολογία ανάκτησης δεδομένων

  7. Γενική δομή κυλίνδρων συντήρησης (μορφή κυλίνδρου)

  8. Γενική περιγραφή μορφής 4K Frame

  9. Περιγραφή βιβλιοθήκης αποκωδικοποίησης (για τους κωδικούς QR)

  10. Πηγαίος κώδικας βιβλιοθήκης αποκωδικοποίησης

  11. Προδιαγραφή μορφής δεδομένων ASCII

  12. Προδιαγραφή γλώσσας προγραμματισμού C

  13. Πηγαίος κώδικας αρχείου TAR

  14. Πηγαίος κώδικας PDF

  15. Προδιαγραφή μορφής αρχείου XZ (για συμπίεση / αποσυμπίεση, που περιγράφεται παρακάτω)

Το έκτο από αυτά τα στοιχεία, το έγγραφο Τεχνολογίας Ανάκτησης Δεδομένων, περιγράφει τις απαιτήσεις και τις διαδικασίες για τη χρήση ενός σαρωτή για τη λήψη δεδομένων σε ένα ψηφιακά κωδικοποιημένο πλαίσιο ταινίας και τη μετατροπή του σε μορφή επιδεκτική ανάλυσης υπολογιστή. Το όγδοο από αυτά, η περιγραφή της μορφής Generic 4K Frame, παρέχει τις τεχνικές πληροφορίες, συμπεριλαμβανομένου του πηγαίου κώδικα, που απαιτείται για έναν υπολογιστή να λάβει μια τέτοια σαρωμένη εικόνα και να τη μετατρέψει σε δυαδικά δεδομένα.

Είναι θεωρητικά δυνατό, κατ 'αρχήν, να μετατραπεί ένα αποθετήριο από δεδομένα κωδικοποιημένα με QR σε δυαδικά δεδομένα χωρίς τη χρήση υπολογιστή. Ωστόσο, θα ήταν εξαιρετικά δύσκολο και πιθανότατα θα απαιτούσε μεγάλη προσπάθεια από μια καλά οργανωμένη κοινότητα για πολλές εβδομάδες, αν όχι μήνες ή χρόνια. Δεδομένου ότι τα περιεχόμενα των αποθετηρίων είναι λογισμικό που προορίζεται να εκτελεστεί σε υπολογιστή, η χρήση τους ελλείψει υπολογιστή θα ήταν στην ελάχιστη δυνατή.

Σε περίπτωση που οι κληρονόμοι αυτού του αρχείου δεν διαθέτουν υπολογιστές, θα πρέπει να διατηρήσουν το αρχείο ολόκληρο και ασφαλές μέχρι να το κάνουν. Ένας σκοπός του, αναγνώσιμου από τον άνθρωπο, Tech Tree είναι να συμβάλει στην επιτάχυνση της ανάπτυξης τεχνολογιών και υπολογιστών σε περίπτωση τέτοιας πιθανότητας. (Ο άλλος σκοπός του είναι να κωδικοποιήσει την τεχνολογία μας και την ανάπτυξή της για μελλοντικούς ιστορικούς.)

Αποσυσκευασία του αρχείου αρχειοθέτησης στα υποαρχεία που περιέχει

Το δυαδικό αρχείο για κάθε αποθετήριο είναι σε μορφή γνωστή ως TAR, για το Tape Archive. Ένα αρχείο TAR αποτελείται ουσιαστικά από την ομαδοποίηση ενός αριθμού αρχείων, συνδέοντας το τέλος του ενός με την αρχή του επόμενου, όπως η συγκόλληση μεμονωμένων κομματιών χαρτιού σε ένα πάπυρο. Ένα αρχείο TAR μπορεί να περιλαμβάνει οποιονδήποτε αριθμό αρχείων, οποιουδήποτε μεγέθους, χωρισμένο σε οποιονδήποτε αριθμό καταλόγων και υποκαταλόγων.

Κάθε υποαρχείο μέσα σε ένα αρχείο TAR αντικατοπτρίζεται από μια εγγραφή κεφαλίδας 512 byte, η οποία ενεργεί όπως η ταινία στην μεταφορά με τον πάπυρο. Αυτή η εγγραφή κεφαλίδας περιέχει πληροφορίες σχετικά με το αρχείο, όπως το όνομα και το μέγεθός του. Το τέλος του αρχείου υποδεικνύεται από τουλάχιστον δύο συνεχόμενα μπλοκ 512-byte.

Επειδή τα αρχεία TAR είναι ουσιαστικά μόνο συλλογές αρχείων με εγγραφές κειμένου μεταξύ τους, εάν ένα αρχείο TAR περιέχει όλα τα αρχεία κειμένου, μπορεί να αντιμετωπιστεί και το ίδιο ως ένα αρχείο κειμένου. Εάν περιέχει ένα μείγμα, μπορεί να αντιμετωπιστεί ως ένα αρχείο κειμένου που περιέχει ένα μείγμα δομημένου, ουσιαστικού κειμένου (τα συστατικά αρχεία κειμένου) και ακατανόητης ασυναρτησίας (τα συστατικά αρχεία χωρίς κείμενο.)

Είναι δυνατό να τοποθετήσετε αρχεία TAR μέσα σε αρχεία TAR, ένα κοντέινερ μέσα σε άλλο. Έτσι αποθηκεύονται τα περισσότερα από τα αρχειοθετημένα δεδομένα μας. Για οποιοδήποτε αποθετήριο, το εξωτερικό αρχείο TAR θα περιέχει τουλάχιστον:

  • ένα μη συμπιεσμένο αρχείο μεταδεδομένων που ονομάζεται META, το οποίο περιλαμβάνει το όνομα χώρου αποθήκευσης, το όνομα λογαριασμού, την περιγραφή, τη γλώσσα, τον αριθμό αστεριών και τον αριθμό των διακλαδώσεων
  • ένα συμπιεσμένο αρχείο (δείτε παρακάτω) με το όνομα COMMITS, το οποίο περιλαμβάνει αρχείο καταγραφής των αλλαγών που έγιναν στο αποθετήριο με την πάροδο του χρόνου
  • ένα αρχείο με το όνομα repo.tar.xz, ένα συμπιεσμένο αρχείο TAR που περιέχει το πραγματικό περιεχόμενο του αποθετηρίου

Άλλα μεταδεδομένα, όπως σελίδες wiki, σελίδες gh, ζητήματα (issues) και αιτήματα έλξης (pull requests), μπορεί επίσης να περιλαμβάνονται ως ξεχωριστά συμπιεσμένα αρχεία.

Συγκεκριμένες λεπτομέρειες για τα αρχεία TAR και το λογισμικό για την κωδικοποίηση και την αποκωδικοποίησή τους, μπορείτε να βρείτε στις Πληροφορίες αναπαράστασης σε κάθε κύλινδρο του αρχείου.

Αποσυμπίεση συμπιεσμένων αρχείων σε αναγνώσιμα, μη συμπιεσμένα αρχεία

Προκειμένου να συμπεριληφθούν όσο το δυνατόν περισσότερα αποθετήρια και όσο το δυνατόν περισσότερα δεδομένα, τα περισσότερα από τα δεδομένα έχουν συμπιεστεί. Συμπίεση σημαίνει χρήση μικρού όγκου δεδομένων για την αναπαράσταση μεγαλύτερης ποσότητας, με χρήση προτύπων και επανάληψη σε αυτό το μεγαλύτερο ποσό. Για παράδειγμα, αντί να γράφετε τον χαρακτήρα a εννέα φορές στη σειρά, θα μπορούσε απλώς να γράψει το συμπιεσμένο κείμενο 9a, εάν κάποιος ήταν σίγουρος ότι ο αναγνώστης θα καταλάβαινε ότι το 9a σήμαινε το ασυμπίεστο κείμενο aaaaaaaaa.

Οι αποτελεσματικοί αλγόριθμοι συμπίεσης είναι πολύ πιο περίπλοκοι από αυτό, αλλά ισχύει η ίδια αρχή. Αυτό το αρχείο χρησιμοποιεί ένα πρόγραμμα συμπίεσης γνωστό ως «XZ», το οποίο με τη σειρά του χρησιμοποιεί έναν αλγόριθμο γνωστό ως «LZMA». Το δεύτερο αρχείο δεδομένων σε κάθε κύλινδρο περιέχει τον πηγαίο κώδικα και την τεκμηρίωση για το XZ σε ένα μη συμπιεσμένο αρχείο αρχειοθέτησης TAR, που περιγράφεται παρακάτω. (Το πρώτο αρχείο δεδομένων περιέχει την Οικουμενική Διακήρυξη Ανθρωπίνων Δικαιωμάτων σε κάθε διαθέσιμη γραπτή ανθρώπινη γλώσσα.)

Το LZMA συνδυάζει αυτό που είναι γνωστό ως αλγόριθμος «LZ77» και «κωδικοποίηση εύρους». Το LZ77 αντικαθιστά επαναλαμβανόμενα δεδομένα με αναφορές σε προηγούμενες εμφανίσεις αυτών των δεδομένων. Για παράδειγμα, για υπερβολική απλοποίηση, εάν μια φράση 80-byte εμφανίζεται δύο φορές, με διάστημα 400 bytes, τη δεύτερη φορά, ο αλγόριθμος συμπυκνώνει ουσιαστικά τα δεδομένα λέγοντας "επανάληψη 80 byte από 400 bytes πριν". Η κωδικοποίηση εύρους μετατρέπει ουσιαστικά ένα ολόκληρο μήνυμα σε έναν πολύ μεγάλο αριθμό, ο οποίος με τη σειρά του μπορεί να κωδικοποιηθεί.

Τα συγκεκριμένα βήματα του αλγορίθμου που θα χρησιμοποιηθούν για την αποσυμπίεση των δεδομένων περιγράφονται από τον πηγαίο κώδικα XZ που περιέχεται στο δεύτερο αρχείο δεδομένων σε κάθε κύλινδρο. Αν και θεωρητικά είναι δυνατόν να αποσυμπιεστεί με το χέρι, και πάλι, αυτή θα ήταν μια εξαιρετικά εντατική διαδικασία χρόνου και εργασίας. Στην πράξη, απαιτείται ένας λειτουργικός υπολογιστής.

Μετατροπή κάθε μεμονωμένου αρχείου σε γραπτούς χαρακτήρες

Η ανθρωπότητα έχει χρησιμοποιήσει πολλούς γραπτούς χαρακτήρες εδώ και χιλιετίες. Η κωδικοποίηση που χρησιμοποιείται για την αναπαράσταση αυτών των χαρακτήρων ως 1 και 0 σε αυτό το αρχείο είναι γνωστή ως «UTF-8». Ένας μοναδικός χαρακτήρας UTF-8, δηλαδή ένα μόνο γραπτό σύμβολο, μπορεί να καταλαμβάνει από 1 έως 4 byte δυαδικών δεδομένων.

Για ιστορικούς λόγους, επειδή χρησιμοποιήθηκαν ευρύτερα στην εποχή και στην περιοχή όπου και όταν ξεκίνησε η ανάπτυξη λογισμικού, μια ομάδα χαρακτήρων (και εννοιών) γνωστών ως «ASCII» κωδικοποιείται αποτελεσματικότερα, σε 1 byte ανά χαρακτήρα. Οτιδήποτε δεν είναι ASCII κωδικοποιείται ως 2 ή περισσότερα byte ανά χαρακτήρα. Τα περισσότερα από τα αρχεία κειμένου σε αυτό το αρχείο είναι ASCII, αλλά ένας σημαντικός αριθμός απο αυτά δεν είναι. Πολλά περισσότερα θα είναι κυρίως ASCII με περιστασιακούς χαρακτήρες εκτός ASCII.

Οι λεπτομερείς προδιαγραφές του ASCII βρίσκονται στις Πληροφορίες Αναπαράστασης σε κάθε κύλινδρο του αρχείου. Οι λεπτομερείς προδιαγραφές του UTF-8 βρίσκονται στον οδηγό κύλινδρο. Το πρώτο αρχείο δεδομένων σε κάθε κύλινδρο του αρχείου θα περιέχει το κείμενο της Οικουμενικής Διακήρυξης των Ανθρωπίνων Δικαιωμάτων σε κάθε διαθέσιμη γραπτή ανθρώπινη γλώσσα. Αυτό θα χρησιμεύσει τόσο ως εργαλείο μετάφρασης όσο και ως παράδειγμα των ASCII και UTF-8.

Είδη αρχείων

Υπάρχουν πολλά διαφορετικά είδη αρχείων κειμένου, που δημιουργήθηκαν για διαφορετικούς λόγους. Το κύριο είδος εδώ, ο λόγος που υπάρχει αυτό το αρχείο, είναι ο πηγαίος κώδικας. Ο πηγαίος κώδικας είναι ένα πολύ πυκνό, εξαιρετικά δομημένο κείμενο, στο οποίο σύμβολα όπως "{" και ";" έχουν μεγάλη σημασία.

Το βασικό πράγμα για τον πηγαίο κώδικα είναι ότι είναι γραμμένο για ανάγνωση από μεταγλωττιστές. Δεδομένου ότι οι μεταγλωττιστές είναι λογισμικό, ένας άλλος τρόπος διατύπωσης είναι ότι ο πηγαίος κώδικας γράφεται για ανάγνωση από υπολογιστές. Ο καλός κώδικας γράφεται επίσης έτσι ώστε άλλοι άνθρωποι, εάν είναι ειδικευμένοι και εκπαιδευμένοι στον τομέα του λογισμικού, να μπορούν να τον καταλάβουν. Είναι όμως σωστός μόνο εάν ένας μεταγλωττιστής μπορεί να τον καταλάβει.

Αυτός ο μεταγλωττιστής, με τη σειρά του, μέσω περίπλοκων ακολουθιών που περιγράφονται στο Tech Tree, θα μετατρέψει τον πηγαίο κώδικα σε ακολουθίες άσων και μηδενικών που θα κάνουν τον υπολογιστή να εκτελεί τις λειτουργίες και τις δραστηριότητες που περιγράφονται από τον κώδικα. Για να πάρουμε ένα πολύ απλό παράδειγμα, τη γραμμή κώδικα

for (int i=0; i<5; i++) { }

θα μετατραπεί από τον μεταγλωττιστή σε μια σειρά δυαδικών οδηγιών που τροφοδοτούνται στον υπολογιστή, οι οποίες θα προκαλέσουν ένα μικρό μέρος του υπολογιστή, που ονομάζεται μητρώο, να ορίσει την τιμή του σε 0 και, στη συνέχεια, να αυξήσει την τιμή σε 1, 2, 3, και στη συνέχεια 4. (Αυτό δεν προορίζεται ως παράδειγμα χρήσιμου κώδικα · είναι απλώς μια απεικόνιση της πολυεπίπεδης διαδικασίας μετατροπής του πηγαίου κώδικα σε λογισμικό που εκτελείται.)

Άλλα είδη αρχείων κειμένου, όπως JSON, XML και HTML, χρησιμοποιούνται για την αποθήκευση δεδομένων (σε αντίθεση με τις εντολές) για υπολογιστές. Γενικά, είναι επίσης αναγνώσιμα από τον άνθρωπο, αν και οι δομημένες μορφές τους καθιστούν δυσκολότερη την ανάγνωση από το λιγότερο δομημένο κείμενο αφήγησης όπως αυτό το αρχείο.

Τα περισσότερα άλλα είδη αρχείων κειμένου προορίζονται να διαβαστούν τελικά από τους ανθρώπους. Μερικά είναι απλό, κυρίως μη δομημένο κείμενο, όπως αυτό το αρχείο που διαβάζετε αυτήν τη στιγμή. Ένα είδος που θα συναντήσετε ευρέως στο αρχείο είναι το Markdown, που υποδηλώνεται από την επέκταση .md σε ένα αρχείο, το οποίο είναι ένα είδος ενδιάμεσης φόρμας που προορίζεται να είναι αναγνώσιμο από τους ανθρώπους στην αρχική τους μορφή και ταυτόχρονα δομημένο έτσι ώστε οι υπολογιστές μπορούν να τις μορφοποιήσουν σε πιο ελκυστικές και χρήσιμες διατάξεις. Τα περισσότερα αποθετήρια σε αυτό το αρχείο έχουν ένα αρχείο Markdown README.md, το οποίο προορίζεται γενικά ως μια αρχική εισαγωγή στο αποθετήριο, περιγράφοντας τι είναι, γιατί υπάρχει και πώς να το χρησιμοποιήσετε.

Μια σύντομη επισκόπηση των πιο συνηθισμένων μορφών αρχείων χωρίς κείμενο μπορεί επίσης να είναι χρήσιμη. Ο μεταγλωτισμένος κώδικας δεν είναι κείμενο. Τα αρχεία JPG και PNG κωδικοποιούν εικόνες σε ψηφιακή μορφή και ήχο κωδικοποίησης MP3 και WAV. Τα αρχεία PDF κωδικοποιούν έγγραφα με ακριβή, τέλεια μορφοποίηση. Τα αρχεία ZIP και TAR, όπως αναφέρθηκε προηγουμένως, είναι αρχεία κοντέινερ τα οποία με τη σειρά τους μπορεί να περιλαμβάνουν ένα ή πολλά άλλα αρχεία.

Ανθρώπινες γλώσσες και γλώσσες προγραμματισμού

Ανθρώπινες γλώσσες

Υπάρχουν χιλιάδες γραπτές γλώσσες που χρησιμοποιούνται από την ανθρωπότητα σήμερα, και ακόμη περισσότερες ομιλούμενες γλώσσες. Οι περισσότερες από αυτές χρησιμοποιούνται μόνο από σχετικά μικρούς πληθυσμούς, αλλά υπάρχουν τουλάχιστον είκοσι γλώσσες που χρησιμοποιούνται ως πρώτη ή δεύτερη γλώσσα από τουλάχιστον 60 εκατομμύρια άτομα.

Οι πιο διαδεδομένες γλώσσες στον κόσμο είναι Αγγλικά και Κινέζικα. Για ιστορικούς λόγους, για πολλά χρόνια η περισσότερη ανάπτυξη λογισμικού έγινε στα αγγλόφωνα έθνη, οπότε για λίγο, τα αγγλικά έγιναν η προεπιλεγμένη γλώσσα του λογισμικού. Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν αγγλικές λέξεις στη σύνταξή τους. Είναι η γλώσσα στην οποία γράφτηκε για πρώτη φορά αυτός ο οδηγός για το αρχείο.

Δεν είναι εγγυημένο ότι οι κληρονόμοι αυτού του αρχείου θα γνωρίζουν Αγγλικά, αν και φαίνεται σαν μια ιδιαίτερα πιθανή γλώσσα για να διαρκέσει επ 'αόριστον. Σε περίπτωση που κάποια καθοδήγηση σε άλλες γλώσσες είναι χρήσιμη, συμπεριλαμβάνουμε τις περισσότερες από 500 διαθέσιμες μεταφράσεις της Οικουμενικής Διακήρυξης των Ανθρωπίνων Δικαιωμάτων ως ένα μη συμπιεσμένο αρχείο UTF-8 στην αρχή κάθε τροχού, καθώς και εντός του Tech Tree. Αυτή η δήλωση είναι ένας κατάλογος των δικαιωμάτων και ελευθεριών κάθε μεμονωμένου ανθρώπου στην εποχή μας, που δεν πρέπει ποτέ να αφαιρεθούν.

Γλώσσες προγραμματισμού

Οι γλώσσες προγραμματισμού είναι αυτές που χρησιμοποιούνται από τον άνθρωπο για τη μετάδοση οδηγιών σε υπολογιστές. Είναι οι γλώσσες στις οποίες εκφράζεται το λογισμικό. Άλλοι (εκπαιδευμένοι) άνθρωποι θα πρέπει επίσης να μπορούν να διαβάζουν το λογισμικό που είναι γραμμένο σε γλώσσες προγραμματισμού, αλλά αυτός είναι ένας δευτερεύων στόχος.

Μια γλώσσα προγραμματισμού είναι ένα σύνολο προκαθορισμένων στοιχείων, τα περισσότερα από τα οποία είναι λέξεις, τα οποία μπορούν να διευθετηθούν με δομημένο τρόπο ώστε να καθοδηγήσουν έναν υπολογιστή να εκτελέσει την καθορισμένη ενέργεια με τον καθορισμένο τρόπο. Μια συλλογή τέτοιων οδηγιών είναι γνωστή ως πρόγραμμα ή ως πηγαίος κώδικας. Ο πηγαίος κώδικας είναι ουσιαστικά λογισμικό σε παγωμένη, γραπτή μορφή.

Τα προγράμματα χωρίζονται γενικά σε διακριτά βήματα, γνωστά ως δηλώσεις, τα οποία με τη σειρά τους ομαδοποιούνται σε συλλογές γνωστές ως συναρτήσεις. Ένα ολόκληρο πρόγραμμα μπορεί να περιέχεται σε ένα μόνο αρχείο ή μπορεί να εξαπλωθεί σε χιλιάδες.

Υπάρχουν εκατοντάδες διαφορετικές γλώσσες προγραμματισμού, διασκορπισμένες σε πολλές διαφορετικές μορφές, προσεγγίσεις και φιλοσοφίες. Μερικά συγκεντρώνονται σε ξεχωριστά δυαδικά αρχεία, τα οποία στη συνέχεια εκτελούνται. Ορισμένες, γνωστές ως "διερμηνευμένες" γλώσσες, καταρτίζονται αποτελεσματικά και εκτελούνται ταυτόχρονα, χωρίς ενδιάμεσο στάδιο. Οι περισσότερες σύγχρονες γλώσσες προγραμματισμού περιλαμβάνουν βιβλιοθήκες προ-γραπτών λειτουργιών και τέτοιες βιβλιοθήκες μπορεί να είναι πολύ ογκώδεις και περίπλοκες. Μερικές από τις πιο δημοφιλείς γλώσσες προγραμματισμού σήμερα περιλαμβάνουν:

  • C, μία από τις παλαιότερες και ταχύτερες, πιο καθολικές και πιο ισχυρές γλώσσες, απλή με κάποιους τρόπους αλλά αρκετά περιορισμένη σε άλλους, και όχι πάντα διαισθητική, ευανάγνωστη ή εύκολη στην εκμάθηση.

  • C++, μια πιο περίπλοκη, αφηρημένη και ισχυρή εξέλιξη της C.

  • C#, μια περαιτέρω εξέλιξη που δεν συντάχθηκε σε δυαδικό κώδικα μηχανής αλλά σε ερμηνευμένο "χρόνο εκτέλεσης"

  • Java, η οποία είναι παρόμοια με την C# (αλλά προγενέστερη). Είναι ίσως η πιο ευρέως χρησιμοποιούμενη γλώσσα σήμερα.

  • JavaScript, σε αντίθεση με την Java παρά την ομοιότητα στο όνομα (και επίσης γνωστή ως «ECMAScript»), είναι μια γλώσσα που χρησιμοποιήθηκε αρχικά εξ ολοκλήρου σε ένα πρόγραμμα περιήγησης ιστού, δηλαδή ένα πρόγραμμα που συλλέγει, ερμηνεύει και εμφανίζει δεδομένα από έναν απομακρυσμένο υπολογιστή γνωστό ως διακομιστή διαδικτύου (Server). Σήμερα, ωστόσο, χρησιμοποιείται ευρέως και σε αυτούς τους διακομιστές.

  • TypeScript, μια μορφή JavaScript με αυστηρότερους κανόνες, έτσι ώστε τα σφάλματα, γνωστά και ως bugs, είναι λιγότερο πιθανό να βρουν το δρόμο τους σε προγράμματα.

  • Python, μια κομψή γλώσσα δημοφιλής μεταξύ των επιστημόνων, είναι ισχυρή καθώς και μια καλή πρώτη γλώσσα.

  • Ruby, μια διαισθητική γλώσσα της οποίας οι δηλώσεις διαβάζονται συχνά σαν γραπτά Αγγλικά.

  • Go, μια απλή, ισχυρή γλώσσα που υπερέχει ειδικά σε παραλληλισμένα προγράμματα, δηλαδή προγράμματα γραμμένα έτσι ώστε πολλές λειτουργίες να εκτελούνται ανεξάρτητα ταυτόχρονα.

  • Swift, μια νέα γλώσσα που χρησιμοποιείται για να προγραμματισμό εφαρμογών τηλεφώνων και άλλων συσκευών που χρησιμοποιούνται από ένα δισεκατομμύριο άτομα.

  • Rust, προοριζόταν σαν αντικατάσταση της C, η οποίο καθιστά επικίνδυνα σφάλματα πολύ λιγότερο πιθανά.

  • PHP, μια απλή γλώσσα που χρησιμοποιείται για διακομιστές διαδικτύου.

  • Lisp, μια πολύ παλιά γλώσσα με μια θεμελιωδώς διαφορετική προσέγγιση στον προγραμματισμό.

  • SQL, ένα πολύ διαφορετικό είδος γλώσσας που χρησιμοποιείται για τη λήψη δεδομένων από δομημένες και πολύ αποδοτικές αποθήκες δεδομένων γνωστών ως βάσεις δεδομένων.

  • Assembler (ή assembly), μια πολύ κρυφή, περιορισμένη, αλλά γρήγορη και ισχυρή οικογένεια γλωσσών όπου υπάρχει άμεση σχέση μεταξύ των δομών γλώσσας και του κώδικα μηχανής του εν λόγω υπολογιστή. Μπορεί να θεωρηθεί half-compiled κώδικας.

Ανάπτυξη (Development), Εξαρτήσεις (Dependencies) και Ανοιχτός Κώδικας (Open Source)

Ανάπτυξη

Η διαδικασία λήψης ενός απλού πηγαίου κώδικα και μετατροπής του σε ηλεκτρικές παρορμήσεις σε έναν υπολογιστή είναι εξαιρετικά περίπλοκη. Αντιμετωπίζουμε αυτήν την πολυπλοκότητα χρησιμοποιώντας στρώματα αφαίρεσης. Μια αφαίρεση γνωστή ως σύνολο εντολών επιτρέπει την έξοδο κώδικα του μηχανήματος από έναν μόνο μεταγλωττιστή για χρήση σε πολλά διαφορετικά είδη υπολογιστών. Ένας συντάκτης του πηγαίου κώδικα συνήθως δεν χρειάζεται να γνωρίζει ή να νοιάζεται τι είδους υπολογιστής, ή ακόμα και ποιο σύνολο εντολών, θα χρησιμοποιηθεί για την εκτέλεση αυτού του κώδικα. αυτό αφαιρείται από τον μεταγλωττιστή.

Το σύγχρονο λογισμικό είναι, με τη σειρά του, πολύ πιο περίπλοκο από ένα άτομο που εργάζεται σε ένα μόνο πρόγραμμα για έναν μόνο υπολογιστή. Αποτελείται από πολλά άτομα που εργάζονται σε πολλά αρχεία σε ένα έργο ταυτόχρονα, συχνά χρησιμοποιώντας πολλές γλώσσες προγραμματισμού. Επιπλέον, κάθε έργο εξαρτάται από άλλα, ξεχωριστά, αυτόνομα έργα ως εργαλεία ή / και συστατικά. Το να λειτουργούν όλα αυτά τα κινούμενα μέρη κομψά και αποτελεσματικά είναι η πρόκληση της σύγχρονης ανάπτυξης λογισμικού.

Όταν πολλοί συντάκτες πηγαίου κώδικα, γνωστοί και ως προγραμματιστές λογισμικού, εργάζονται σε ένα μόνο έργο, ο καθένας έχει τον δικό του υπολογιστή και ένα αντίγραφο ολόκληρου του έργου στον υπολογιστή τους. Εάν κάποιος κάνει αλλαγές, τότε ο καθένας έχει διαφορετική έκδοση του ίδιου έργου. Η διαδικασία συνδυασμού πολλαπλών εκδόσεων ενός έργου είναι γνωστή ως έλεγχος έκδοσης (version control). Διαχειρίζεται από λογισμικό ελέγχου έκδοσης. Σε αυτό το αρχείο, από λογισμικό που ονομάζεται Git, απο το οποίο ονομάζεται το ίδιο το GitHub. Κάθε αποθετήριο σε αυτό το αρχείο είναι ένα αποθετήριο Git.

Το Git μπορεί να συγχωνεύσει αυτόματα διαφορετικές εκδόσεις λογισμικού σε μια συνεκτική μορφή με ελάχιστη ανθρώπινη παρέμβαση. Το Git διατηρεί επίσης ένα πλήρες ιστορικό που σας επιτρέπει να επιστρέψετε σε μια προηγούμενη έκδοση όπως και όταν χρειαστεί. Ωστόσο, για να εξοικονομήσετε χώρο, τα αποθετήρια αυτού του αρχείου γενικά δεν περιλαμβάνουν ιστορικά Git.

Όταν πολλοί προγραμματιστές λαμβάνουν ταυτόχρονα ένα έργο σε πολλές διαφορετικές διαδρομές, αυτό είναι γνωστό ως διακλάδωση ενός έργου και αυτά τα μονοπάτια είναι γνωστά ως κλάδοι (branches). Ο συμφωνημένος κύριος κλάδος ενός έργου είναι γνωστός ως κορμός, ή ο κύριος κλάδος (master branch). Το Git παρέχει μια δυνατότητα που μπορούν να χρησιμοποιήσουν οι προγραμματιστές για να συνοψίσουν τις διαφορές μεταξύ των δύο κλάδων και να προτείνουν την ένταξή τους στα άλλα. Αυτό είναι γνωστό ως αίτημα έλξης (pull request). Η σύγχρονη ανάπτυξη λογισμικού συνίσταται σε μεγάλο βαθμό στη διακλάδωση ενός έργου, τη σύνταξη ή την επεξεργασία του λογισμικού στον κλάδο σας και, όταν τελειώσετε, την υποβολή ενός αιτήματος έλξης για την επανενσωμάτωση της εργασίας σας στον κύριο κλάδο.

Εξαρτήσεις

Ουσιαστικά κάθε γλώσσα προγραμματισμού υποστηρίζει το να χτίζεις πάνω στην εργασία άλλων. Χωρίς να ξαναχρησιμοποιούμε τη δουλειά των άλλων, κάθε έργο θα ήταν πολύ πιο δύσκολο και πολύ πιο αργό, και λίγα έργα θα μπορούσαν ποτέ έχουν ουσιαστική χρήση στον πραγματικό κόσμο.

Εάν το έργο Α πρέπει να συμπεριλάβει το έργο Β προκειμένου το Α να κάνει τη δουλειά του, τότε το Α είναι γνωστό ως εξαρτώμενο από το έργο Β και το Β είναι γνωστό ως εξάρτηση του έργου Α. Το Α μπορεί να έχει πολλές εξαρτήσεις, κάθε μία από τις οποίες μπορεί να έχει πολλές τις δικές τους εξαρτήσεις και ούτω καθεξής. Επιπλέον, κάθε εξάρτηση αφορά μια συγκεκριμένη έκδοση ή μια σειρά εκδόσεων ενός συγκεκριμένου έργου. Η πλήρης εξειδίκευση όλων των πολλαπλών επιπέδων εξαρτήσεων ενός έργου είναι γνωστή ως το δέντρο εξάρτησής του (dependency tree).

Γενικά, οι εξαρτήσεις αναλύονται σε αρχεία πηγαίου κώδικα, συνήθως στην κορυφή, και κάθε φορά που ο μεταγλωττιστής ή ο διερμηνέας βρίσκει εξάρτηση, το αναζητά σε ένα σύνολο προκαθορισμένων καταλόγων. Επειδή το δέντρο εξάρτησης για ένα έργο μπορεί να είναι πολύ περίπλοκο, μερικές φορές αναγράφεται στο σύνολό του σε ένα μόνο αρχείο μέσα σε ένα έργο γνωστό ως λίστα πακέτων. Για παράδειγμα, τα έργα Ruby μπορεί να έχουν ένα Gemfile για αυτόν τον σκοπό και τα έργα JavaScript ενδέχεται να έχουν ένα αρχείο package.json. Αυτό επιτρέπει σε ένα είδος εργαλείου γνωστό ως λογισμικό διαχείρισης πακέτων να πάρει όλες τις εξαρτήσεις για ένα έργο ταυτόχρονα, από έναν ή περισσότερους διακομιστές διαδικτύου.

Στην περίπτωση αυτού του αρχείου, είναι πιθανό ότι οι εξαρτήσεις για κάθε δεδομένο έργο υπάρχουν αλλού στο αρχείο. Για να βρείτε μια εξάρτηση στο αρχείο, πρέπει πρώτα να ανακαλύψετε το όνομα της εξάρτησης στον πηγαίο κώδικα ή στη λίστα πακέτων, των οποίων οι ακριβείς λεπτομέρειες ποικίλλουν ανάλογα με τη γλώσσα και το πλαίσιο και, στη συνέχεια, χρησιμοποιήστε το κύριο ευρετήριο στον κύλινδρο οδηγού, ή, ελλείψει αυτού, τα ευρετήρια στο μπροστινό μέρος κάθε κυλίνδρου, για να προσδιορίσουν σε ποιον κύλινδρο και πλαίσιο(α) μπορεί να βρεθεί το εν λόγω αποθετήριο.

Λογισιμικό Ανοιχτού Κώδικα

Δεδομένου ότι η εκτέλεση ενός προγράμματος σε υπολογιστή απαιτεί μόνο τον μεταγλωττισμένο κώδικα μηχανής, είναι δυνατό να διανεμηθεί, διατηρώντας παράλληλα τον πηγαίο κώδικα μυστικό. Αυτό είναι γνωστό ως μοντέλο κλειστής πηγής. Τις πρώτες μέρες της πληροφορικής, ο πηγαίος κώδικας διανέμεται συνήθως μαζί με τον κώδικα μηχανής, αλλά στη συνέχεια, καθώς το λογισμικό έγινε κερδοφόρα βιομηχανία, το μοντέλο κλειστής πηγής έγινε πιο κοινό.

Από τότε είναι γνωστό ότι η δημοσιοποίηση του πηγαίου κώδικα, για οποιονδήποτε που μπορεί να τον αντιγράψει, να τον διακλαδώσει και να τον βελτιώσει, είναι μια πολύ πιο αποτελεσματική προσέγγιση για την ανάπτυξη λογισμικού. Περισσότερα άτομα που μπορούν να διαβάσουν τον πηγαίο κώδικα ενός έργου σημαίνει περισσότερα άτομα να προσδιορίσουν πιθανές ανάγκες και χρήσιμες νέες δυνατότητες, περισσότερα άτομα που κατανοούν το έργο αρκετά για να συνεισφέρουν σε αυτό, περισσότερα άτομα που ενδέχεται να εντοπίσουν σφάλματα και να υποβάλουν διορθώσεις και περισσότερα άτομα για να δοκιμάσουν και να επαληθεύσουν οτι αυτός ο νέος κώδικας λειτουργεί.

Γενικά, η κλειστή πηγή οδηγεί σε μικρότερες, κατακερματισμένες κοινότητες που αγωνίζονται να βρουν και να υιοθετήσουν νέες και καλύτερες ιδέες. Ο ανοιχτός κώδικας οδηγεί σε μεγάλες, αλληλοσυνδεόμενες κοινότητες, καθεμία από τις οποίες βοηθά τα έργα του άλλου να αναπτυχθούν, να ευδοκιμήσουν και να επιτύχουν. Χρησιμοποιούν το έργο του άλλου ως εξαρτήσεις ή / και επαναχρησιμοποιώντας τον κώδικα τους, και να μαθαίνουν ο ένας από τον άλλο. Το λογισμικό ανοιχτού κώδικα είναι ένα σετ εργαλείων για τη συλλογική χρήση όλης της ανθρωπότητας, και όσο περισσότερα και καλύτερα εργαλεία έχουμε, τόσο πιο γρήγορα και καλύτερα μπορούμε να προχωρήσουμε ως είδος.