[Powered by Google Translate] [Εβδομάδα 9]
[David J. Malan - Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50. - CS50.TV]
Εντάξει. Καλώς ήρθατε και πάλι. Αυτό είναι CS50, και αυτή είναι η αρχή της εβδομάδας 9.
Σήμερα, έχουμε επικεντρωθεί κυρίως στο σχεδιασμό, δεν είναι πλέον στο πλαίσιο του Γ
αλλά στο πλαίσιο της PHP και ένα κομμάτι της SQL και ένα κομμάτι της JavaScript,
ιδιαίτερα προς το τέλος του τόσο PSET 7 και επίσης τελικό έργο σας.
Στην πραγματικότητα, εάν είστε σε εκείνο το σημείο στο τελικό σχέδιο σας
όπου κατά πάσα πιθανότητα από μια ώρα ή έτσι πριν σας τουλάχιστον άρχισαν να δώσει κάποια σκέψη
στο τελικό σχέδιο σας και σκέφτεστε θα θέλατε να συνεργαστεί με 1 ή 2 συμμαθητές,
αν έχετε πρόβλημα σύνδεσης με τα εν λόγω συμμαθητές,
διστάσετε να συμπληρώσετε τη φόρμα στο cs50.net/partners/form.
Είναι απλά σας ρωτά ποιος είσαι, τι είδους έργο σκέφτεστε,
όπου ζείτε μόνο για οργανωτικούς λόγους.
Και στη συνέχεια, αν θέλετε να κρατήσει ένα μάτι για την επόμενη εβδομάδα ή έτσι το URL φύλλο εκεί,
μπορείτε να δείτε στη συνέχεια, ένα read-only έκδοση του Google doc
στην οποία είμαστε συλλογή αυτών των πληροφοριών.
Έτσι, εάν θέλετε να συνεργαστεί με κάποιον, με όλα τα μέσα διστάσετε να φτάσει στους ανθρώπους
μέσω του εν λόγω μηχανισμού.
Αλλά η πλειοψηφία των λαοί κάνουν σόλο δουλειά. Αυτό είναι εντελώς καλά.
Έτσι, δεν αισθάνονται ότι αυτό είναι σε καμία περίπτωση υποχρεωτική.
Την Παρασκευή ήταν μόνο εγώ και μερικοί από την ομάδα εδώ,
άδειο θέατρο ως επί το πλείστον.
Υπήρχαν 3 τουρίστες κάθονται εκεί, έτσι ώστε να ήταν λίγο δύσκολη.
Αυτό που μιλήσαμε ήταν βάσεις δεδομένων και μιλήσαμε για PSET 7 α λίγο.
Και αν δεν συμβεί για να πιάσει ότι στο βίντεο ακριβώς ακόμα, αυτό είναι εντάξει.
Θα προσπαθήσω να καθορίσει οποιουσδήποτε όρους που διαφορετικά θα θεωρήσουμε δεδομένο
βασίζεται σε διάλεξη της Παρασκευής.
>> Σήμερα, όμως, θα πάμε να προσπαθήσουμε να φτάσετε στο σημείο
όχι μόνο να είναι σε θέση να κάνει κάτι σαν PSET 7
αλλά πραγματικά να κατανοήσει τι συμβαίνει κάτω από την κουκούλα,
ιδιαίτερα κάποιες από τις αφαιρέσεις που έχουμε θέσει σε εφαρμογή στο αρχείο functions.php
για να κάνουν τη ζωή σας λίγο πιο εύκολη, αλλά, έτσι ώστε να κατανοήσουν τελικά
έτσι ώστε όταν οι ρόδες βγει σε λίγες εβδομάδες μπορείτε ακόμα να επιβιώσουν
στον πραγματικό κόσμο και να κάνουμε αυτά τα πράγματα χωρίς πλαίσιο CS50 κάτω από σας.
Αυτό $ _SESSION, για όσους από εσάς είναι εξοικειωμένοι
ή που ήδη πιάσει το βίντεο την Παρασκευή, ό, τι δεν ΣΥΝΕΔΡΙΑ ας κάνουμε
σε PHP με βάση web εφαρμογή;
Αυτό είναι ένα superglobal μεταβλητή, που σημαίνει ότι είναι παρόμοιες στο πνεύμα με GET και POST
και μερικοί άλλοι, αλλά τι είναι αυτό το πράγμα χρήσιμο για;
>> Τι είναι ΣΥΝΕΔΡΙΑ χρησιμοποιείται για; Ναι. [Φοιτητής] Σύνδεση μέσα
Συγνώμη; [Φοιτητής] Σύνδεση Σύνδεση μέσα Πράγματι μέσα.
Σε PSET 7 είμαστε χρήση αυτής της superglobal ΣΥΝΕΔΡΙΑ να διευκολυνθεί η καταγραφή μέσα
Και τι είναι ωραίο για αυτό το superglobal είναι ότι πρόκειται για ένα associative array.
Ένας associative array, ανάκληση, είναι απλώς μια σειρά, αλλά δεν είναι πλέον δείκτες των οποίων πρέπει να είναι αριθμοί
σαν 012. Μπορούν να είναι αριθμοί ή μπορούν να είναι ακόμα και χορδές.
Και έτσι αν έχετε βουτήξει σε PSET 7 ακόμα, ίσως θυμάστε ότι είμαστε αποθήκευση ενός κλειδιού ονομάζεται ID
μέσα από αυτό το associative array των οποίων η αξία είναι κάτι σαν 123 -
Όποια και αν είναι η στιγμή είστε συνδεδεμένοι στο όνομα χρήστη είναι.
Το κίνητρο για αυτό είναι ότι ακόμη και μετά ο χρήστης έχει επισκεφθεί localhost
ή στην ιστοσελίδα μου γενικότερα και στη συνέχεια να έχετε συνδεθεί,
ακόμα κι αν δεν κάνετε κλικ σε ένα σύνδεσμο ή να επιστρέψετε στην ιστοσελίδα μου για 5 λεπτά
ή ακόμα και μια ώρα ή ακόμη και μια ημέρα, αλλά αφήνουν παράθυρο του browser τους ανοιχτό,
μέσω αυτής της superglobal μπορώ να θυμόμαστε ότι έχετε εισέλθει
>> Με άλλα λόγια, αυτό μου επιτρέπει να αποθηκεύετε λίγο μακροπρόθεσμα κάτι που θέλω για ένα χρήστη.
Και μπορείτε να σκεφτείτε πραγματικά σαν την ενσάρκωση του ένα καλάθι αγορών.
Μέρη όπως το Amazon προφανώς αφήσει να βάλει τα πράγματα σε ένα καλάθι αγορών,
αλλά HTTP, το πρωτόκολλο, το οποίο τροφοδοτεί το Web, είναι σκάφος άνευ εθνικότητας
με την έννοια ότι όταν επισκέπτεστε μια ιστοσελίδα,
ως επί το πλείστον δεν έχετε κάποια σταθερή σύνδεση με το δίκτυο
μεταξύ του προγράμματος περιήγησης και διακομιστή.
Από τη στιγμή που έχετε κατεβάσει την HTML και τα αρχεία JPEG και τα αρχεία GIF και όλα αυτά,
η σύνδεση πηγαίνει μακριά και έχετε μόνο ένα αντίγραφο της HTML και εταζέρα από το διακομιστή.
Αλλά αν ο διακομιστής θέλει να θυμάται κάτι για σας,
η επιβάρυνση είναι στο διακομιστή για να καταγράψει πραγματικά αυτές τις πληροφορίες.
Και έτσι ο προγραμματιστής που έχει τον έλεγχο του διακομιστή
μπορεί να βάλει τίποτα που θέλετε μέσα από αυτό το superglobal associative array
και θα είναι εκεί την επόμενη φορά που ο χρήστης έρχεται πίσω,
είτε πρόκειται για λεπτά ή ακόμη και μέρες αργότερα, εκτός και αν κλείσετε το παράθυρο του browser τους,
στο οποίο ΣΥΝΕΔΡΙΑ σημείο εξαφανίζεται.
Έτσι είναι εφήμερη αποθήκευση, είναι μη-επίμονο, και είναι γραφτό να πάει μακριά
μόλις ο χρήστης κλείσει browser τους - όχι μόνο ότι καρτέλα, συχνά ολόκληρο το πρόγραμμα περιήγησης,
αυτόν τον τρόπο καταγραφής αποτελεσματικά το χρήστη έξω.
Λοιπόν, πώς είναι αυτό το πράγμα που εφαρμόζεται στην πράξη;
Ας ρίξουμε μια γρήγορη ματιά σε ένα απλό παράδειγμα είδαμε την Παρασκευή.
Για όσους δεν είναι εξοικειωμένοι, ήταν τόσο απλό όσο αυτό.
Αυτή είναι μια ιστοσελίδα με μοναδικό σκοπό στη ζωή είναι να μου πείτε
πόσες φορές έχω επισκεφτεί αυτή τη σελίδα.
Αυτή είναι η πρώτη φορά εδώ τη Δευτέρα ότι θα επισκεφθεί, έτσι ώστε να λέει 0 φορές.
>> Αλλά αν αρχίσω επαναφόρτωση αυτής της σελίδας, λέει 1 φορά, 2, 3, 4, 5,
και αυτό τελικά θα κρατήσει μόνο για καταμέτρηση επάνω, επάνω, επάνω, επάνω, επάνω
για κάθε φορά που πραγματικά κάντε κλικ στο κουμπί Ανανέωση για αυτό.
Λοιπόν, πώς είναι αυτή η εργασία; Επιτρέψτε μου να πάω μέσα από αυτό το αρχείο ονομάζεται counter.php.
Το επάνω μέρος του είναι όλα τα σχόλια μπλε, αλλά το ενδιαφέρον κομμάτι είναι εδώ.
Στις γραμμή 13 καλούμε session_start αυτή τη λειτουργία,
και ότι είναι κυριολεκτικά το μόνο που πρέπει να κάνετε αν θέλετε να έχετε πρόσβαση
σε αυτή την ειδική superglobal ονομάζεται $ _SESSION.
Αυτό καθιστά δυνατή, και θα δούμε σε μια στιγμή πώς είναι ότι όλα είναι δυνατά.
Στη γραμμή 16 ειδοποίηση τι κάνω.
Εάν το κλειδί, που ονομάζεται μετρητής - με άλλα λόγια, η τιμή του δείκτη - "μετρητή"
υπάρχει στο εσωτερικό αυτού του πίνακα ονομάζεται ΣΥΝΕΔΡΙΑ, τότε τι κάνω με αυτό στη γραμμή κάτω;
Ποια είναι η γραμμή 18 κάνει;
>> [Ακούγεται ανταπόκριση των φοιτητών] Τι είναι αυτό; [Φοιτητής] Αποθήκευση του αξία. Καλή.
Είναι αποθήκευση του αξία που είναι σε ΣΥΝΕΔΡΙΑ τώρα σε μια νέα τοπική προσωρινή μεταβλητή,
$ Μετρητή σε όλα τα πεζά γράμματα.
Παρατηρήστε ότι η PHP είναι ήδη είναι λίγο τεμπέλης εδώ.
Προσέξτε δεν έχουμε καμία αναφορά int ή float ή string ή κάτι τέτοιο
επειδή η PHP είναι ασθενώς δακτυλογραφημένα, σύμφωνα με την οποία δεν χρειάζεται να καθορίσετε τον τύπο μιας μεταβλητής,
και σε αυτή την περίπτωση εδώ δεν έχω δηλώσει ακόμα ακόμα.
Είμαι δηλώνοντας ότι μέσα από αυτά τα άγκιστρα και σε αντίθεση με C, αυτό είναι πραγματικά εντάξει.
Δεν έχει σημασία πόσο βαθιά ένθετα δήλωση μιας μεταβλητής στην PHP είναι -
στο εσωτερικό του κηδεμόνα σγουρά, μέσα από σγουρά στήριγμα και τα παρόμοια -
θα εκείνη τη στιγμή υπάρχουν για το υπόλοιπο του προγράμματος,
προς το καλύτερο ή προς το χειρότερο.
Έτσι, γίνεται αμέσως παγκόσμια μόλις την ορίζουν ως κάνουμε εδώ.
>> Διαφορετικά, αν δεν βρίσκω ότι υπάρχει κάτι στο superglobal ΣΥΝΕΔΡΙΑ,
Είμαι προφανώς την προετοιμασία αυτής της μεταβλητής σε αντίθεση με 0,
έτσι απλά υποθέτοντας ο χρήστης δεν ήταν ποτέ εδώ πριν.
Και τότε αυτό βέβαια είναι που αυξάνει τον μετρητή πώς;
Είμαι ενημέρωση την τιμή που είναι μέσα από αυτό το associative array
θέτοντας το ίσο με ό, τι είναι σήμερα μετρητής + 1.
Αν μετακινηθείτε προς τα κάτω εδώ στο HTML της σελίδας, είναι πραγματικά αρκετά απλή.
Το μόνο που έχω στο σώμα αυτής της σελίδας, "Έχετε επισκεφθεί αυτόν τον ιστότοπο έτσι-και-έτσι φορές."
Και αυτό είναι ένα κατασκεύασμα PHP.
Αν το κάνετε <? =, Αυτό είναι ισοδύναμο με την αποτελεσματική λειτουργία τι;
Είναι πραγματικά ισοδυναμεί με κάτι σαν printf, που έχουμε δει πολλές φορές σε C,
αν και όπως ίσως γνωρίζετε ήδη από το spec σε PSET 7,
εκτύπωσης είναι επίσης μια λειτουργία που απλά τυπώνει κάτι, δεν χρησιμοποιεί πραγματικά κωδικούς μορφή,
και μπορείτε να πείτε πραγματικά ηχώ, καθώς και.
Είναι όλα πάντα τόσο ελαφρώς διαφορετική, ακόμη και αν το καθαρό αποτέλεσμα είναι τελικά το ίδιο.
Έτσι η χρήση του το σύμβολο του ίσον είναι ακριβώς το είδος του ένα κομψό τρόπο για να γίνει αυτό
πιο συνοπτικά από ό, τι θα μπορούσε αλλιώς να είναι σε θέση να.
Έτσι, αυτό είναι όλο αυτό το site κάνει. Εκτυπώνει την τιμή του μετρητή.
Πώς είναι όλα αυτά πραγματικά συμβαίνει;
Μπορείτε να ανακαλέσετε μια εβδομάδα ή έτσι πριν αρχίσαμε να ψάχνουμε κάτω από την κουκούλα
πώς μια ιστοσελίδα λειτουργεί με τη χρήση αυτής της καρτέλας Επιθεωρητή.
>> Chrome έχει αυτό τόσο στην έκδοση για Mac, την έκδοση των Windows, ακόμα και την έκδοση του Linux,
και Firefox και Internet Explorer έχουν παρόμοια μηχανισμούς μέσω των οποίων έχετε αυτό το ενσωματωμένο πρόγραμμα εντοπισμού σφαλμάτων
μέσα από τον browser.
Ας ρίξουμε μια ματιά στα παρακάτω.
Έχουμε ένα σωρό καρτέλες εδώ, και υπενθυμίζουν ότι το ένα είναι πιο αριστερό στοιχεία,
και δεν έχει σημασία πόσο godawful η HTML και JavaScript είναι σε μια σελίδα,
Υπενθυμίζω ότι με την καρτέλα Στοιχεία μπορείτε να περιηγηθείτε στην πραγματικότητα το HTML ιεραρχικά
και ωραία και τακτοποιημένα.
Έτσι, εάν προσπαθείτε να μάθετε από μια ιστοσελίδα όπως το Google ή το Facebook
πραγματικά ή οποιοδήποτε δικτυακό τόπο, συνειδητοποιούν ότι είστε πιθανώς καλύτεροι
κοιτάζοντας τον πηγαίο κώδικα με αυτόν τον τρόπο, σε αντίθεση με την προβολή της πρώτης πηγής,
το οποίο μπορεί να είναι ένα χάος, όπως έχουμε δει ειδικά στο χώρο της Google.
Έτσι, αν αντί κάντε κλικ στην καρτέλα Δίκτυο εδώ,
ας δούμε τι συμβαίνει όταν επισκέπτομαι αυτή τη σελίδα.
Καταρχάς, επιτρέψτε μου να σβήσω τη μνήμη cache μου.
Πάω να μπω σε Ρυθμίσεις στο Chrome και στη συνέχεια να πάνε στην Ιστορία
Καταργήστε και στη συνέχεια όλων των δεδομένων περιήγησης.
Μπορεί να χρησιμοποιηθεί για να κάνει αυτό για άλλους σκοπούς, [γέλια]
αλλά όταν πρόκειται για την ανάπτυξη ιστοσελίδων, είναι πραγματικά χρήσιμο -
αν είστε γέλιο ξέρετε. [Γέλια]
Είναι πραγματικά πολύ χρήσιμο κατά την ανάπτυξη ιστοσελίδων, διότι η πραγματικότητα είναι
τα πράγματα όπως τα cookies και τα πράγματα όπως cached αρχεία HTML, JavaScript προσωρινά αποθηκευμένα αρχεία
μπορεί πραγματικά να γίνει ένας μεγάλος πονοκέφαλος, γιατί αν για οποιοδήποτε λόγο
το πρόγραμμα περιήγησης αποφασίζει να cache κάποιο αρχείο και όμως έχετε κάνει αλλαγές σε αυτό το αρχείο στο διακομιστή
αλλά το πρόγραμμα περιήγησης δεν έχει πραγματικά συνειδητοποιήσει ότι το αρχείο έχει αλλάξει
και ως εκ τούτου δεν πραγματικά να επαναλάβετε τη λήψη ακόμα και όταν κάνετε κλικ στο κουμπί Ανανέωση,
ένα από τα πιο αλάνθαστος τρόπους για να βεβαιωθείτε ότι μόνο η βλάβη δεν είναι με τον κωδικό σας,
είναι με τη συμπεριφορά του προγράμματος περιήγησης, είναι να πάει εδώ στο πρόγραμμα περιήγησής σας
και απλώς καθαρίστε όλη την ιστορία, έτσι ώστε δεν υπάρχει καμία σύγχυση.
>> Και στη συνέχεια, αν θέλετε πραγματικά να είναι παρανοϊκός, κλείστε το πρόγραμμα περιήγησης, κάντε επανεκκίνηση,
και στη συνέχεια, βεβαιωθείτε ότι όλα λειτουργούν όπως αναμένεται.
Έτσι, με λίγα λόγια, απαλοιφή της προσωρινής μνήμης είναι καλό όταν κάνουμε ανάπτυξη.
Έτσι, εδώ έχουμε την καρτέλα Δίκτυο.
Εγώ στο παρελθόν είχε επισκεφθεί το χώρο 9 φορές, αλλά επιτρέψτε μου να προχωρήσει τώρα και κάντε κλικ στο κουμπί Ανανέωση.
Και είμαι πίσω στο 0.
Ας δούμε πώς πραγματικά είναι ότι αυτό superglobal ΣΥΝΕΔΡΙΑ έχει τεθεί σε εφαρμογή.
Πάω να κάνετε κλικ στο αιτήσεως 1 HTTP που έγινε,
και αυτό το παράθυρο εντοπισμού σφαλμάτων μου επιτρέπει να δούμε μέσα από αυτό.
Εδώ βλέπω μόνο την απάντηση από το διακομιστή, η οποία δεν είναι ενδιαφέρουσα.
Έχω δει αυτό σε οποιοδήποτε αριθμό τρόπων.
Αλλά αυτό που είναι ενδιαφέρον είναι τεχνικά οι κεφαλίδες.
Αν μετακινηθείτε προς τα κάτω εδώ και να επικεντρωθεί στις επικεφαλίδες και κάντε κλικ στο αίτημα πηγή άποψη,
τι Πάω να δω είναι κυριολεκτικά το αίτημα HTTP
που μόλις πέρασε από το πρόγραμμα περιήγησης μου στο διακομιστή,
GET είναι η λέξη κλειδί και έπειτα / counter.php είναι το όνομα του αρχείου,
HTTP/1.1 ακριβώς είναι η έκδοση του HTTP ότι ο φυλλομετρητής μου χρησιμοποιεί.
Αυτή η γραμμή εδώ είναι μια μικρή υπενθύμιση από το πρόγραμμα περιήγησης στο διακομιστή ποιο είναι το όνομα του διακομιστή είναι
ότι θέλει να μιλήσει.
Και τότε το υπόλοιπο αυτό είναι μερικές φορές ενδιαφέρον, αλλά δεν έχει σημασία αυτή τη στιγμή.
>> Αυτό είναι ακριβώς το είδος του μια περιέργεια.
Αινιγματικές αν και αυτή η σειρά είναι, ανά πάσα στιγμή browser σας επισκέπτεται μια ιστοσελίδα
έχει ενημερώσει τον server τι browser που χρησιμοποιείτε
και τι λειτουργικό σύστημα που χρησιμοποιείτε και ποια έκδοση αυτών.
Έτσι, αν έχετε αναρωτηθεί ποτέ πώς ιστοσελίδες όπως το CNN και εταζέρα
ξέρετε τι τα ποσοστά είναι χρήστες Mac για τους χρήστες του διαδικτύου, PC,
Χρήστες του IE, οι χρήστες Chrome και τα παρόμοια, είναι επειδή όλα τα προγράμματα περιήγησης μας
λένε κάθε ενιαίο δικτυακό τόπο εκεί έξω ό, τι είμαστε.
Δεν περιέχει απαραίτητα προσωπικά στοιχεία,
αλλά το κάνει πείτε στον διακομιστή τι διεύθυνση IP σας είναι και τι πρόγραμμα περιήγησης και το λειτουργικό σύστημα που χρησιμοποιείτε.
Έτσι, αυτό είναι όπου οι πληροφορίες αυτές είναι.
Αλλά τι είναι πιο ενδιαφέρουσα τώρα, όταν πρόκειται για αυτές τις συνεδρίες είναι η κεφαλίδα απόκρισης.
Επιτρέψτε μου να δείτε κάντε κλικ στο κουμπί δίπλα στην πηγή απάντηση.
Αυτό που είναι ενδιαφέρον εδώ είναι μερικά πράγματα.
1, πήραμε πίσω έναν κωδικό κατάστασης 200.
Εμείς ποτέ δεν βλέπουν αυτόν τον κωδικό κατάστασης, διότι αυτό σημαίνει ότι όλα είναι καλά.
Σημαίνει κυριολεκτικά εντάξει σε αντίθεση με κάτι άλλο.
Τι είναι ένας αριθμός που βλέπουμε ορισμένες φορές αυτό είναι κακό; [Φοιτητής] 404.
404, το αρχείο δεν βρέθηκε, 403 ίσως να σκοντάψει επάνω ήδη,
το οποίο είναι απαγορευμένο, το οποίο σημαίνει ότι μπορείτε να ξεχάσει κάτι chmod, κατά πάσα πιθανότητα.
Και υπάρχει ένα σωρό άλλοι.
>> Εδώ κάτω, αυτό είναι λίγο τρελό.
Πραγματικά μόλις έγραψα αυτό το αρχείο λίγα λεπτά πριν από την επικόλληση στο gedit.
Γιατί αυτή τη σελίδα λήγουν το 1981 πριν από πραγματικά υπήρχε Web;
Τι συμβαίνει εκεί;
>> [Ακούγεται ανταπόκριση των φοιτητών] Η σφραγίδα του χρόνου. Αλλά γιατί;
Είναι κάπως αυθαίρετη, αλλά αυτό είναι πραγματικά χρήσιμο.
Αυτό λέει στον browser μου είναι η PHP αρχείο που μόλις ζητηθεί έχει ήδη λήξει.
Στην πραγματικότητα, έληξε πριν από 30 χρόνια.
Αλλά τι σημαίνει αυτό πραγματικά σημαίνει;
Σημαίνει απλά την επόμενη φορά που ο χρήστης επισκέπτεται αυτήν τη σελίδα,
είτε από την επαναφόρτωση ή πληκτρολογώντας τη διεύθυνση URL στη γραμμή διευθύνσεων,
βεβαιωθείτε ότι έχετε πάει και να φέρω ένα νέο αντίγραφο του.
Αυτό είναι το είδος του ένα παράδειγμα του busting cache,
μια ηλίθια λέξη που σημαίνει απλά προσπαθούν να αποθαρρύνουν browsers
από πραγματικά caching HTML που είναι ήδη σταλεί από ένα διακομιστή
έτσι ώστε να μην χτυπήσει κατά λάθος reload και στη συνέχεια να δούμε την ίδια έκδοση του αρχείου.
Θέλετε πραγματικά το διακομιστή να στείλει ένα νέο αντίγραφο.
Έτσι, το γεγονός ότι είναι μόλις 1981 σημαίνει ότι αυτό είναι ό, τι η συσκευή είναι η επιλογή
σαν μια αυθαίρετη ημερομηνία στο παρελθόν.
Αλλά η πραγματική ζουμερά γραμμή είναι τώρα αυτό.
Ακόμη και πριν από 50 είστε πιθανώς αόριστα εξοικειωμένοι με τα cookies.
Από αυτή τη στιγμή, ιδίως μεταξύ εκείνων ή λιγότερο άνετα στο μεταξύ,
τι είναι ένα cookie για την κατανόηση σας τώρα
παρόλο που είμαστε έτοιμοι να κάνουν την κατανόησή σας πιο τεχνικό;
Τι είναι ένα cookie; Ναι.
[Φοιτητής] Πληροφορίες για το χρήστη, όπως και αν έχετε γράψει το όνομα χρήστη ή κάτι τους.
>> Καλή. Είναι πληροφορίες για τον χρήστη, αν έχετε πληκτρολογήσει το όνομα χρήστη τους ήδη.
Τα cookies είναι ένας τρόπος όπου διακομιστές μπορεί να θυμηθεί κάτι για κάποιον χρήστη.
Και αυτό είναι ένα cookie πραγματικά είναι ένα αρχείο κειμένου ή κάποια ακολουθία των bytes
Αυτό είναι που φυτεύτηκαν από τον server στο εσωτερικό του browser σας,
και μέσα από αυτό το αρχείο ή μεταξύ των bytes είναι ένα είδος αναγνώρισης.
Ίσως είναι κυριολεκτικά το όνομα χρήστη σας, αλλά τις περισσότερες φορές είναι κάτι πιο αινιγματικό το μέλλον
σαν αυτό το πράγμα εδώ - bo8dal3ct και ούτω καθεξής - αυτό πραγματικά μεγάλη αλφαριθμητική συμβολοσειρά
Αυτό είναι πραγματικά ακριβώς σημαίνει να είναι ένα μοναδικό αναγνωριστικό για εσάς.
Ή μπορείτε να σκεφτείτε από το ως ένα είδος εικονικής σφραγίδα χέρι.
Αν πάτε σε κάποιο κλαμπ ή ένα πάρκο ψυχαγωγίας, να θυμάστε ότι έχετε πράγματι καταβληθεί
και πάει στο, βάζουν ένα μικρό κόκκινο αυτοκόλλητο στο χέρι σας κάποιου είδους,
και ότι θυμίζει τους ανθρώπους στο μετρητή που έχετε ήδη καταβληθεί
και μπορείτε να έρχονται και να φεύγουν όπως σας παρακαλώ.
Τα cookies είναι λίγο παρόμοια στο πνεύμα με αυτό.
Την πρώτη φορά που επισκέφθηκα την ιστοσελίδα, όπως έκανα ακριβώς μετά την εκκαθάριση της προσωρινής μνήμης μου,
ο web server, η συσκευή σε αυτή την περίπτωση, βάλτε μια σφραγίδα στο χέρι μου
του οποίου το όνομα είναι PHPSESSID, σύνοδος ID,
των οποίων η αξία είναι αυτό πραγματικά μεγάλη αλφαριθμητική συμβολοσειρά.
>> Έτσι, αυτό είναι τώρα το είδος του ζωγραφίζεται στο χέρι μου, έτσι ώστε την επόμενη φορά που χτύπησα reload
ή επισκεφθείτε το χέρι αυτήν τη διεύθυνση URL σε ένα πρόγραμμα περιήγησης,
browser μου με τον ορισμό του HTTP πρόκειται να παρουσιάσει τη σφραγίδα χέρι
ξανά και ξανά και ξανά.
Έτσι, ακόμη και αν ο διακομιστής δεν είναι απαραίτητο ξέρω ποιος είμαι,
ότι τουλάχιστον ξέρω ότι είμαι ο ίδιος χρήστης ή τουλάχιστον, πιο συγκεκριμένα, το ίδιο πρόγραμμα περιήγησης.
Και έτσι αυτό είναι τελικά το πώς η superglobal ΣΥΝΕΔΡΙΑ υλοποιείται.
Ο διακομιστής δεν έχει ιδέα ποιος είσαι, όταν επανεξετάσει μια ιστοσελίδα για τη δεύτερη ή την τρίτη φορά
εκτός αν παρουσιάσει αυτή την σφραγίδα χέρι.
Και μόλις σας παρουσιάζουμε αυτό το χέρι σφραγίδα,
ο web server πηγαίνει κατ 'ουσίαν, σε μια μικρή βάση δεδομένων της δικής του
και ελέγχους, εντάξει, έχω δει μόνο τη σφραγίδα χέρι του χρήστη bo8dal3ct και ούτω καθεξής.
Επιτρέψτε μου να δούμε τι πληροφορίες ο προγραμματιστής έχει αποθηκεύσει
εσωτερικό του superglobal για αυτόν τον χρήστη,
και στη συνέχεια, επιτρέψτε μου να βεβαιωθείτε ότι τα δεδομένα είναι και πάλι μέσα από την ΣΥΝΕΔΡΙΑ superglobal
έτσι ώστε ο προγραμματιστής μπορεί εκ νέου πρόσβαση σε αυτά τα δεδομένα
ακόμη και αν αυτό ορίστηκε μερικά λεπτά ή ώρες πριν.
Έτσι με άλλα λόγια, τα μπισκότα, το οποίο πήρε μια κακή ραπ για κάποιο χρονικό διάστημα
λόγω της ανασφάλειες σε προγράμματα περιήγησης και μπορούν να παραβιάζουν πραγματικά προστασία της ιδιωτικής ζωής μας και όλα αυτά,
έχουν πραγματικά μεγάλη χρησιμότητα διότι χωρίς αυτούς
θα πρέπει να είναι συνεχώς σε σύνδεση σε κάθε σελίδα που επισκέπτεστε Facebook
ή κάθε Gmail e-mail μπορείτε να διαβάσετε αν ο browser δεν έχουν κάποιο τρόπο να θυμόμαστε
ότι έχετε ήδη πιστοποιηθεί.
>> Έτσι, με αυτόν τον τρόπο τα cookies στέλνονται πέρα ​​δώθε πέρα ​​από το σύρμα.
Μια άλλη περιέργεια σχετικά με τα cookies, ειδικά εδώ, είναι ότι αυτό είναι εντελώς σε απλό κείμενο.
Δεν υπάρχει καμία κρυπτογράφηση συμβαίνει εδώ καθόλου,
και μάλιστα είμαι με τη χρήση HTTP αυτή τη στιγμή.
Ένα από τα αγαπημένα μας στιγμές σε CS50, η οποία είναι τώρα πριν 2 χρόνια,
ήταν γύρω από την εποχή ένα εργαλείο που ονομάζεται Firesheep βγήκε.
Αυτό ήταν ένα ελεύθερο κομμάτι του λογισμικού που έγινε από έναν ερευνητή ασφαλείας
ως μια κλήση αφύπνισης για την κοινότητα να πω πόσο atrociously εφαρμογή
ορισμένους μηχανισμούς ελέγχου ταυτότητας στο Διαδίκτυο ήταν.
Έτσι, για κάποιο χρονικό διάστημα, το Facebook ήταν σχεδόν εξ ολοκλήρου μέσω HTTP, HTTPS όχι.
Και ακόμα κι αν δεν έχετε καμία ιδέα για το πώς λειτουργεί το crypto, S είναι ασφαλής
έτσι ώστε να σημαίνει ότι υπάρχει τουλάχιστον κάποια που εμπλέκει και κρυπτογράφηση.
Facebook δεν χρησιμοποιείται για την κρυπτογράφηση ονόματα χρήστη και κωδικούς πρόσβασης,
αλλά μόλις κοίταξε σας σπρώχνει ή τα μηνύματά σας ή τις ζωοτροφές ειδήσεις σας,
όλα αυτά ήταν χωρίς κρυπτογράφηση.
Έτσι ήταν μέχρι το Gmail μόλις ένα χρόνο πριν ή 2.
Κάθε φορά που θα συνδεθείτε, ναι, αυτοί που χρησιμοποιούνται ασφαλή κρυπτογράφηση,
αλλά στη συνέχεια δεν το έκαναν. Και γιατί μπορεί να συμβαίνει αυτό;
Γιατί δεν χρησιμοποιούν μόνο κρυπτογραφία όλη την ώρα σε περιπτώσεις χρήσης, όπως αυτό;
Τι είναι αυτό; Νομίζω ότι άκουσα κάτι. [Φοιτητής] ταχύτητας.
Ταχύτητα, έτσι δεν είναι; Υπάρχουν τρόποι γύρω από αυτό.
Αλλά αν σας ακριβώς το είδος των σκέφτομαι λογικά, αν κάτι κρυπτογράφηση,
που έχετε να κάνετε τουλάχιστον μια λίγη περισσότερη δουλειά.
Σε PSET 2 όταν έχετε εφαρμόσει Καίσαρα ή Vigenere ή ακόμα και Crack,
εκτύπωση μόνο ένα string είναι σχετικά εύκολη.
Η κρυπτογράφηση και στη συνέχεια να εκτυπώσετε μια σειρά ελάχιστα απαιτεί λίγο περισσότερη δουλειά.
>> Για σούπερ δημοφιλείς ιστοσελίδες όπως το Google και το Facebook,
αν έχετε να κάνετε περισσότερη δουλειά για κάθε χρήστη για κάθε ιστοσελίδα που επισκέπτονται,
που διαρκεί μόλις περισσότερο χρόνο CPU.
Και αν χρειάζεστε περισσότερο χρόνο της CPU, μπορεί να χρειαστεί περισσότερους servers,
το οποίο σημαίνει ότι μπορεί να χρειαστεί περισσότερα χρήματα.
Και έτσι για πολλά χρόνια αυτό ακριβώς πραγματικά δεν ήταν βέλτιστων πρακτικών.
Οι άνθρωποι θα χρησιμοποιούν κρυπτογράφηση SSL μόνο όταν χρειάζεται να.
Αλλά αποδείχθηκε, όπως και αυτή με τους συναδέλφους Firesheep γίνει σούπερ σαφής,
όταν παιδιά που βρίσκονται στο Facebook τώρα -
Από περιέργεια, για να δούμε αν θα fess επάνω.
Αν είστε στο Facebook τώρα σε κάποια καρτέλα, ακόμα και αν δεν είναι συνοικοδομήθηκαν,
είναι η διεύθυνση URL HTTP ή HTTPS σας;
[Πολλαπλά τους μαθητές] Σ. S; [Γέλια]
Εντάξει. Κάθε HTTP; Μόλις 1; Εντάξει.
Έτσι, όλοι μας μπορεί να χαράξει Facebook υπόψη το γεγονός ότι ο τύπος αυτήν τη στιγμή.
Για το μεγαλύτερο μέρος αυτό έχει γίνει ενεργοποιημένη από προεπιλογή, τουλάχιστον σε ορισμένες ιστοσελίδες.
Και τα πολυλογώ, αν την κυκλοφορία Ιστού σας δεν είναι κρυπτογραφημένη,
όχι μόνο η HTML πάει μπροστά και πίσω σε όλη την WiFis χωρίς κρυπτογράφηση,
γι 'αυτό τα πράγματα όπως μπισκότα πηγαίνουν πέρα ​​δώθε σε όλο τον αέρα
χωρίς κανενός είδους κρυπτογράφηση.
Έτσι, εάν έχετε μόνο ένα κομμάτι του προγραμματισμού καταλαβαίνω ή λίγο Googling δεξιοτήτων
να βρείτε δωρεάν λογισμικό που το κάνει αυτό, το μόνο που έχετε να κάνετε είναι να καθίσετε σε Starbucks
ή να καθίσετε σε ένα αεροδρόμιο όπου υπάρχει γενικά WiFi χωρίς κρυπτογράφηση
και απλά να παρακολουθήσετε για λέξεις-κλειδιά όπως Set-Cookie: ή PHPSESSID
γιατί αν έχετε την τεχνική καταλαβαίνω για να παρακολουθήσουν μόνο το WiFi
για όλα τα bits που ρέουν σε όλο τον αέρα για αυτό το μοτίβο,
μπορείτε στη συνέχεια να πω ότι PHPSESSID άντρα που συμβαίνει να είναι bo8dal και ούτω καθεξής.
Και πάλι, αν είστε αρκετά τεχνικές γνώσεις ή έχουν το δικαίωμα εργαλείο,
μπορείτε στη συνέχεια να αναμορφώσουν μόνο το δικό του browser σας για να αρχίσει να υποβάλλει την εν λόγω σφραγίδα χέρι
να Facebook.com, και το Facebook πρόκειται ακριβώς να υποθέσουμε ότι είστε ο τύπος
γιατί όλοι ξέρουν δεν είναι ποιος είσαι, αλλά ότι έχετε αυτό το μοναδικό αναγνωριστικό.
Έτσι, αν κλέψει αυτό το μοναδικό αναγνωριστικό και να το παρουσιάσει με τον web server όπως το δικό σας,
είναι ακριβώς πρόκειται να σας δείξω ειδήσεις αυτού του ατόμου
ή του ατόμου μηνύματα ή σπρωξίματα.
>> Και θα ήθελα Google τώρα πώς να ενεργοποιήσετε HTTPS για το Facebook ίσως.
Αλλά είναι πραγματικά τόσο απλό.
Και έτσι το Facebook και το Google και τα παρόμοια έχουν πάρει πραγματικά καλός σε αυτό,
αλλά κρατήστε ένα μάτι έξω όλα τα παραπάνω για κάθε ιστοσελίδες που επισκέπτεστε που δεν χρησιμοποιούν HTTP
και να έχουν κάποιο είδος των ευαίσθητων πληροφοριών σχετικά με αυτές,
είτε πρόκειται για οικονομικές ή προσωπικές ή τα παρόμοια.
Εάν δεν χρησιμοποιείτε αυτό, πολύ πιθανόν να τα cookies, όπως αυτό είναι πολύ εύκολα να κλαπεί
και στη συνέχεια, πλαστά, και αυτό είναι ακριβώς ό, τι έκανε Firesheep.
Εσείς δεν χρειάζεται να είναι ένας προγραμματιστής.
Το μόνο που είχε να κάνει ήταν να έχουν μια σύνδεση στο Internet, κατεβάστε αυτό το δωρεάν εργαλείο,
και τι θα κάνετε είναι να συνδεθείτε και στη συνέχεια θα σας δείξει τα ονόματα του Facebook
από όλους στην Sanders, σε αυτή τη συγκεκριμένη διαδήλωση, γύρω σας
και το μόνο που είχε να κάνει ήταν κάντε κλικ στο όνομά τους και το λογισμικό αυτοματοποιηθεί η διαδικασία
του sniffing αυτό το cookie, παρουσιάζοντάς το στο Facebook ως τη δική σας,
και, voila, εσείς έχετε εισέλθει
Έτσι, αυτό είναι άλλο ένα από εκείνα τα "δεν το κάνετε αυτό" επίσημα.
Αν έχετε δικό σας οικιακό δίκτυο και θέλετε να πειραματιζόμαστε, με όλα τα μέσα,
αλλά αυτό δεν συνειδητοποιούν διασχίσουν τη γραμμή σε ένα πανεπιστημιακό περιβάλλον.
>> Αλλά ο στόχος εδώ είναι πραγματικά να τονίσω όχι πώς να το κάνουμε αυτό
αλλά πώς να υπερασπίσει ενάντια σε αυτά τα είδη των πραγμάτων.
Και η τετριμμένη λύση εδώ, παρόλο που η ίδια είναι εσφαλμένη,
είναι να μειωθεί πραγματικά χρήση των χώρων που δεν χρησιμοποιούν HTTPS συνεχώς.
Έτσι sites όπως το Facebook και η Google έχουν όλο και checkboxes
όπου μπορείτε να επιλέξετε σε αυτό το είδος του πράγματος,
και οι τράπεζες είχαν αυτό εδώ και χρόνια για παρόμοιους λόγους.
Έτσι, μόνο ένα μικρό κομμάτι από ένα παράγοντα φόβο, αν μπορούμε. Αλλά αυτό είναι το με λίγα λόγια.
Αυτό είναι το πώς ένας διακομιστής θυμάται ποιος είσαι.
Και από τη στιγμή που μπορεί να θυμηθεί ποιος είσαι, μπορούν να θυμηθούν τίποτα για σας
ότι ο προγραμματιστής έχει αποθηκεύσει στο εσωτερικό αυτής της ειδικής superglobal ονομάζεται $ _SESSION.
Και για PSET 7 είμαστε χρησιμοποιώντας επιπόλαια απλά να θυμάστε ένα int,
δηλαδή το μοναδικό αναγνωριστικό του χρήστη που έχει συνδεθεί,
έτσι ώστε να γνωρίζουμε που έχουν πάει εκεί πριν.
Οποιεσδήποτε ερωτήσεις σχετικά με τις συνεδρίες τότε ή μπισκότα ή τα παρόμοια;
Firesheep δεν λειτουργεί τόσο καλά πια,
και θα πρέπει να βάλετε τον υπολογιστή σας σε ένα ειδικό promiscuous mode
έτσι είστε πραγματικά να ακούτε για την κυκλοφορία εκτός από τον εαυτό σας.
Έτσι, εάν κάνετε λήψη του παρόντος Firesheep, συνειδητοποιούν ότι δεν είναι τόσο εύκολο
όπως ήταν κάποτε να αποδειχθεί.
Εντάξει. Και δεν το κάνω σε Sanders. Κάν 'το σπίτι.
Βάσεις Δεδομένων.
Ένα από τα πράγματα που κάναμε στην PSET 7 πολύ σκόπιμα
ήταν να σας δώσω ένα δείγμα πίνακα της βάσης δεδομένων για τους χρήστες που έχει μερικά αναγνωριστικά χρήστη,
μερικά ονόματα χρηστών, και μερικές κρυπτογραφημένους κωδικούς πρόσβασης σ 'αυτό.
Και όπως θα δείτε, αν δεν το έχετε κάνει ήδη, εσείς πρόκειται να πρέπει να αλλάξετε τον πίνακα λίγο.
Θα πάμε να πρέπει να προσθέσετε κάποια cache σε κάθε ένα από τους χρήστες σε αυτόν τον πίνακα,
και εσείς πρόκειται να πρέπει να προσθέσετε μια άλλη ιστορία τραπέζι, ένα τραπέζι χαρτοφυλάκια,
ή ίσως το ονομάσουμε κάτι άλλο.
Αλλά από την άποψη του να σκεφτόμαστε πώς να το κάνουμε αυτό, ας ανοίξει αυτό το εργαλείο
οποία χρησιμοποιήσαμε την Παρασκευή, αλλά αν δεν είναι εξοικειωμένοι, η συσκευή έρχεται με ένα εργαλείο
που ονομάζεται phpMyAdmin που συμπτωματικά γραμμένο σε PHP,
αλλά ο σκοπός του στη ζωή, αφού συνδεθείτε εδώ ως jharvard με βαθύ κόκκινο χρώμα,
είναι να μου δώσει ένα φιλικό προς το χρήστη τρόπος για την προβολή και την αλλαγή της βάσης δεδομένων μου.
>> Η βάση δεδομένων που τρέχω στη συσκευή ονομάζεται MySQL.
Αυτό είναι πολύ δημοφιλής, και είναι μια δωρεάν βάση δεδομένων ανοικτού κώδικα που είναι θαυμάσια εύκολο στη χρήση,
με ειδικά μπροστά τελειώνει σαν αυτό.
Αυτό το εργαλείο σας επιτρέπει να κάνω, για παράδειγμα, είναι σακί γύρω τραπέζια.
Επιτρέψτε μου να προχωρήσει και να το κάνουμε αυτό.
Την Παρασκευή έχουμε δημιουργήσει έναν πίνακα που ονομάζεται μαθητές που ήταν εξαιρετικά απλή.
Είχε 3 στήλες - id, όνομα και email - και εγώ το χέρι εισάγεται ένα ζευγάρι των σειρών
όπως ο David και ο Mike στο συγκεκριμένο παράδειγμα.
Ας ρίξουμε αυτό το λίγο περισσότερο, και ας υποθέσουμε ότι θέλουμε να θυμόμαστε περισσότερο
όχι μόνο το όνομα και e-mail για ένα χρήστη.
Επιτρέψτε μου κάντε κλικ εδώ Δομή στην κορυφή.
Και πάλι, η PSET σας καθοδηγεί στα απαραίτητα βήματα εδώ,
οπότε μην ανησυχείτε αν μερικά από αυτό είναι λίγο γρήγορη.
Στη συνέχεια, Πάω να κάνετε κλικ εδώ.
Πάω να προσθέσετε κάποια αριθμός των στηλών μετά από e-mail
επειδή θέλω να προσθέσω κάτι σαν σπίτι.
Ξέχασα να καταγράψει το σπίτι ενός μαθητή.
Επιτρέψτε μου να κάντε κλικ στο κουμπί Μετάβαση, και τώρα έχουμε αυτή τη μορφή, που δυστυχώς είναι λίγο μεγάλη από αριστερά προς τα δεξιά,
αλλά Πάω να καλέσει το όνομα αυτού του σπιτιού τομέα,
και τότε ο τύπος που έχω τώρα να επιλέξουν.
Έτσι, ας ρίξουμε μια σύντομη συζήτηση σχετικά με τους διάφορους τύπους σε MySQL
διότι ενώ η PHP είναι ασθενώς δακτυλογραφημένα και το είδος του παίζει γρήγορα και χαλαρά με τους τύπους,
σε μια βάση δεδομένων ειδικά είναι εξαιρετικά σημαντικό να χρησιμοποιήσετε πραγματικά την πληκτρολόγηση προς όφελός σας
επειδή ένα από τα πράγματα MySQL και άλλες μηχανές βάση δεδομένων μπορεί να κάνει για σας
είναι να εξασφαλίσουμε ότι δεν θα βάλει ψεύτικες δεδομένα στη βάση δεδομένων σας.
Αυτό είναι το είδος του ελέγχου σφαλμάτων ελεύθερη στη διάθεσή σας.
>> Για το σπίτι που προφανώς δεν θέλουν να είναι ένα int, το οποίο είναι ένα 32-bit τιμή σε MySQL.
Κάναμε μιλήσουμε λίγο για την Παρασκευή varchar, που σημαίνει μεταβλητού μήκους char.
Τι είναι αυτό; Αυτό σας δίνει τη δυνατότητα να καθορίσετε ότι θέλετε αυτό να είναι μια σειρά από κάποιου είδους.
Μπορείτε πραγματικά δεν γνωρίζουν εκ των προτέρων πόσο καιρό είναι,
έτσι θα πούμε αυθαίρετα ένα όνομα σπίτι μπορεί να είναι 255 χαρακτήρες,
αλλά θα μπορούσε να πάει με 32, 64 - οποιοδήποτε αριθμό πραγματικά.
Αλλά το πλεονέκτημα της χρήσης ενός varchar σε ένα πεδίο που ονομάζεται char είναι αυτό;
Απλά διαισθητικά αν μετακινηθείτε προς τα κάτω εδώ, παρατηρούμε ότι υπάρχει char και varchar υπάρχει.
Varchar είναι μεταβλητού μήκους char? Char είναι ένα σταθερό μήκος char.
Έτσι, με βάση μόνο τον ορισμό αυτό, τι είναι το πλεονέκτημα ή μειονέκτημα του κάθε ένα από αυτά;
Με άλλα λόγια, ποιος νοιάζεται για τη διάκριση, ή γιατί πρέπει να σας νοιάζει;
>> Ναι. [Φοιτητής] varchar έχει μεγαλύτερη ευελιξία, αλλά καταλαμβάνει περισσότερο χώρο στη μνήμη.
Καλή. Varchar καταλαμβάνει περισσότερο - Ας δούμε. Δεν είμαι σίγουρος αν έχω ακούσει αυτό το δικαίωμα.
Μπορείτε να πείτε ότι για μια ακόμη φορά;
[Φοιτητής] είπα varchar έχει πιθανότατα μεγαλύτερη ευελιξία, αλλά καταλαμβάνει περισσότερο χώρο στη μνήμη.
Ενδιαφέρουσες. Εντάξει. Varchar δίνει πιθανώς έχετε μεγαλύτερη ευελιξία, αλλά καταλαμβάνει περισσότερο χώρο στη μνήμη.
Το τελευταίο δεν είναι απαραίτητα αλήθεια.
Εξαρτάται από το πλαίσιο, αλλά ας επανέλθουμε σε αυτό.
>> [Ακούγεται ανταπόκριση των φοιτητών] Ακριβώς.
Είναι στην πραγματικότητα η υπόθεση ότι θα char συνήθως χρησιμοποιούν περισσότερη μνήμη
επειδή ένας char, όπως σε C, είναι σαν μια σειρά, είναι μια σειρά από χαρακτήρες.
Έτσι, αν σας πω μια χαρα τομέα μήκους 255,
η βάση δεδομένων είναι κυριολεκτικά θα σας δώσει 255 χαρακτήρες.
Και αν το σπίτι καταλήγει να είναι MATHER και 6 χαρακτήρες συνολικά,
σπαταλάτε πάνω από 200 χαρακτήρες.
>> Έτσι, ένα varchar αποτελεσματικά χρησιμοποιεί μόνο όσους χαρακτήρες είναι απαραίτητο
μέχρι ένα ανώτατο ποσό.
Αλλά η τιμή που πληρώνετε είναι πραγματικά επιδόσεις, ενδεχομένως.
Εάν γνωρίζετε εκ των προτέρων ότι όλοι χορδές σας θα είναι 8 χαρακτήρες -
Για παράδειγμα, ας υποθέσουμε ότι χρειάζεστε κωδικούς πρόσβασης μήκους 8 -
η άνω πλευρά του χρησιμοποιώντας ένα char τομέα με την ευκαιρία, αν και όχι συχνά,
είναι να προσδιορίσετε ένα συγκεκριμένο μήκος για κάτι σαν τον κωδικό πρόσβασης
γιατί τώρα η βάση δεδομένων μπορεί να είναι ακόμη πιο έξυπνη.
Αν ξέρει ότι κάθε char τομέα, κάθε χορδή σε μια στήλη είναι το ίδιο μήκος,
μπορείτε να πάρετε πίσω τη λειτουργία της τυχαίας πρόσβασης.
Μπορείτε να ρίξουν μια ματιά στα διάφορα πεδία char πίνακα της βάσης δεδομένων σας
επειδή πιστεύω μιας βάσης δεδομένων ως γραμμές και στήλες.
Έτσι, εάν κάθε μία από τις συμβολοσειρές έχει το ίδιο μήκος,
Γνωρίζατε ότι το πρώτο είναι στο byte 0, η επόμενη θα είναι σε byte των 8
και στη συνέχεια 16 και στη συνέχεια 24 και ούτω καθεξής.
Έτσι, αν όλοι οι χορδές έχουν το ίδιο μήκος, μπορείτε να πηδούν γύρω από πολύ πιο αποτελεσματικά.
Έτσι, αυτό μπορεί να είναι ένα πλεονέκτημα όσον αφορά τις επιδόσεις,
αλλά συνήθως δεν έχουν την πολυτέλεια να γνωρίζει εκ των προτέρων,
έτσι ένα varchar είναι ο τρόπος να πάει.
Εδώ είναι μια άλλη λεπτομέρεια που ακόμα και έτρεξε στο Facebook τελικά.
Ints είναι μεγάλη, και εμείς είδος τους χρησιμοποιήσει από προεπιλογή κάθε φορά που θέλουμε έναν αριθμό,
αλλά αυτό είναι μόνο 32 bit.
>> Και παρόλο Facebook δεν έχει αρκετά 4 δισεκατομμύρια χρήστες τώρα,
υπάρχει σίγουρα κάποιοι άνθρωποι εκεί έξω με πολλαπλούς λογαριασμούς
ή λογαριασμούς που έχουν ανοιχτεί και στη συνέχεια κλείνει,
Facebook και έτσι πιστεύω ότι η ίδια πριν από μερικά χρόνια είχε τη μετάβαση από int
να, όπως εύστοχα αποκαλείται, bigint, το οποίο απέχει μόλις 64 bits αντ 'αυτού.
Έτσι, αυτό είναι πάρα πολύ μια σχεδιαστική απόφαση.
Θα είναι απίστευτα τυχερός αν τελικά το έργο σας μετατρέπει την εκκίνηση,
έχει 4 δισ. ευρώ και 1 χρήστες, ή να δώσει,
περίπτωση κατά την οποία με τη χρήση ints μπορεί να είναι λίγο κοντόφθαλμη.
Αλλά στην πραγματικότητα, οι χρήστες τραπέζι σας είναι πιθανώς πρόστιμο με ints.
Αλλά για κάτι σαν PSET 7, όπως το τραπέζι ιστορία σας,
μπορεί να έχετε χιλιάδες, εκατομμύρια χρήστες, αν εξελιχθεί σε etrade.com.
Έτσι, ενώ μπορεί να μην έχει περισσότερα από 4 δισεκατομμύρια χρήστες,
οι χρήστες έχετε να έχετε περισσότερα από 4 δισεκατομμύρια συναλλαγές το χρόνο -
αγοράζει και πωλεί τα πράγματα και στην ιστορία τους.
Έτσι, αν κάνουμε πρόβλεψη - και πάλι, αυτά είναι καλά να έχουμε προβλήματα, αν έχετε αυτό το πολύ στοιχεία -
αν το κάνετε προβλέπουν τα δεδομένα που υπερβαίνουν το μέγεθος ενός int,
Θα με κάτι σαν bigint είναι μια κατεύθυνση αρκετά συχνά δεν εγκρίθηκε από τους σχεδιαστές
επειδή οι άνθρωποι εικόνα που δεν πρόκειται να είναι ένα πρόβλημα,
αλλά αυτό είναι εύκολο να διαλέξετε κάτι μεγαλύτερο από αυτό.
Δεκαδικός που χρησιμοποιούμε σε PSET 7, το οποίο καθορίζει σταθερή ακρίβεια
ώστε να μπορείτε να αποφύγετε τα ζητήματα που αφορούν άρματα και δίκλινα και reals και τα παρόμοια.
>> Και έπειτα υπάρχει κάποια άλλα πεδία εδώ. Θα κύμα τα χέρια μας σε αυτά σε κάποιο βαθμό.
Αλλά ημερομηνίες, ώρες έχουν όλα ένα καθορισμένο σχήμα, σε MySQL,
και το πλεονέκτημα της αποθήκευσης ημερομηνίες ως ημερομηνίες και όχι varchars
σημαίνει ότι η βάση δεδομένων μπορεί να διαμορφώσετε τους πραγματικά σε διάφορες μορφές,
αν μια μορφή ευρωπαϊκή ή αμερικανική μορφή ή τα παρόμοια - με όποιον τρόπο θέλετε -
πολύ πιο αποτελεσματικά από ό, τι αν ήταν μόνο μερικές γενικές varchar.
Και έπειτα υπάρχει κάποια άλλη δυαδικό, varbinary, σταγόνες.
Αυτά είναι δυαδικό μεγάλα αντικείμενα, και μπορείτε επίσης να αποθηκεύσετε δυαδικά δεδομένα
καθώς και τα γεωμετρικά δεδομένα σε μια βάση δεδομένων.
Αλλά για μας θα συνήθως ενδιαφέρονται για ints και varchars και τα παρόμοια.
Ας τελειώσουμε αυτό το παράδειγμα με το σπίτι.
Σπίτι Πάω να πω αυθαίρετα θα είναι 255 χαρακτήρες.
Στη συνέχεια, η προεπιλεγμένη τιμή που θα μπορούσαμε να το κάνουμε αυτό.
Θα μπορούσαμε από προεπιλογή θέσει ο καθένας στο σπίτι Mather, για παράδειγμα.
Αυτό είναι το πώς θα μπορούσαμε να διευκρινιστεί ότι η βάση δεδομένων
θα πρέπει να διασφαλίζουν ότι κάποιος έχει πάντα αξία. Αλλά εγώ θα το αφήσω αυτό να είναι.
Στην πραγματικότητα, για τους ανθρώπους που ζουν από την πανεπιστημιούπολη και όχι σε ένα σπίτι,
ίσως πραγματικά θέλετε να ορίσετε ότι η προκαθορισμένη τιμή για το σπίτι είναι NULL,
και τότε θα πρέπει να ελέγξετε αυτό το πλαίσιο και τη βάση δεδομένων πει ότι είναι εντάξει αν το σπίτι του χρήστη είναι NULL.
>> Και πάλι, αυτό είναι ένα άλλο αμυντικό μηχανισμό που μπορεί να θέσει σε εφαρμογή
έτσι δεν χρειάζεται καν να το θέσει σε κώδικα PHP σας κατ 'ανάγκην.
Η βάση δεδομένων θα εξασφαλίσει ότι τα πράγματα είναι ή δεν είναι NULL.
Και στη συνέχεια, τέλος, χαρακτηριστικά.
Κανένα από αυτά δεν είναι πραγματικά σχετικό.
Binary, ανυπόγραφο - κανένα από αυτά είναι κατάλληλα για ένα varchar.
Δείκτης.
Ξέρει κανείς ή να θυμηθεί ή να έχουν μια εικασία ως προς το τι είναι ένας δείκτης
για κάτι τέτοιο σπίτι;
Αυτό είναι πάρα πολύ στην πραγματικότητα μια σημαντική και σχετικά εύκολη σχεδιαστική απόφαση.
Για όσους δεν έχουν δει ακόμη, την Παρασκευή μιλήσαμε για λίγο για πρωτεύοντα κλειδιά.
Σε ένα πίνακα βάσης δεδομένων, ένα πρωτεύον κλειδί είναι το πεδίο ή στήλη
που προσδιορίζει μοναδικά γραμμές του πίνακα.
Έτσι, στο σημερινό πίνακα έχουμε ταυτότητες, έχουμε τα ονόματα και email.
Ποια από αυτά είναι ο καλύτερος υποψήφιος για να είναι ένα πρωτεύον κλειδί,
ο ρόλος του οποίου είναι να προσδιορίσει μοναδικά σειρές;
Πιθανώς ID.
Αναμφισβήτητα, θα μπορούσε επίσης να χρησιμοποιήσει ό, τι όμως;
Ίσως θα μπορούσατε να χρησιμοποιήσετε e-mail, γιατί θεωρητικά είναι μοναδική
εκτός εάν οι άνθρωποι μοιράζονται τους λογαριασμούς ηλεκτρονικού ταχυδρομείου.
Αλλά η πραγματικότητα είναι ότι αν χρησιμοποιείτε μια αριθμητική ταυτότητα, όπως 1234,
αυτό είναι μόνο 32 bits, ενώ μια διεύθυνση ηλεκτρονικού ταχυδρομείου μπορεί να είναι αυτό πολλές bytes ή αυτό πολλά bytes.
Έτσι, από την άποψη της αποτελεσματικότητας για μοναδικά αναγνωριστικά,
τείνει να είναι καλή πρακτική να χρησιμοποιούν μόνο ένα int
ακόμη και αν έχετε κάποια σειρά υποψήφιος που θα μπορούσατε να χρησιμοποιήσετε αναμφισβήτητα.
>> Για κάτι σαν σπίτι, αυτό δεν θα πρέπει να είναι ένα πρωτεύον κλειδί
γιατί τότε μόνο 1 άτομο θα μπορούσε να ζήσει σε Mather και 1 άτομο σε Currier και τα παρόμοια.
Ομοίως, αυτό δεν πρέπει να είναι μοναδικό.
Η διαφορά μεταξύ πρωτογενούς και μοναδικό είναι ότι στην περίπτωση του τρέχοντος πίνακα μας,
ID θα είναι η κύρια, αλλά δεν είναι e-mail για την πρωτοβάθμια λόγος που μόλις αναφέραμε -
απόδοση - αλλά θα πρέπει ακόμα να είναι μοναδικό.
Έτσι, μπορείτε να επιβάλουν ακόμα μοναδικότητα χωρίς να κάνει τον ισχυρισμό
ότι πρόκειται για ένα εξαιρετικά σημαντικό πρωτογενή τομέα.
Αλλά αυτό είναι πολύ χρήσιμο: Δείκτης.
Εάν γνωρίζετε εκ των προτέρων για το τελικό σχέδιο σας, για PSET 7, ή σε γενικές γραμμές,
ότι στον τομέα αυτό το σπίτι πρόκειται να είναι κάτι που ψάχνετε σε ένα πολύ
χρησιμοποιώντας την επιλογή λέξεων-κλειδιών ή κάτι άλλο,
τότε μπορείτε να πείτε προληπτικά τη βάση δεδομένων για να κάνει τα μαγικά του
και βεβαιωθείτε ότι δημιουργεί στη μνήμη όλα τα φανταχτερά δομών δεδομένων που είναι αναγκαία
να επισπεύσει αναζητήσεις με βάση το σπίτι.
Ίσως θα χρησιμοποιήσει έναν πίνακα κατακερματισμού, ίσως θα χρησιμοποιήσει μια συνδεδεμένη λίστα.
Στην πραγματικότητα, τείνει να χρησιμοποιήσει ένα δέντρο, συχνά μία δομή που ονομάζεται Β-δέντρο -
δεν είναι ένα δυαδικό δέντρο, αλλά ένα Β-δέντρο - το οποίο είναι ένα πολύ μεγάλο δέντρο
ότι μπορείτε να δείτε σε μια κατηγορία όπως CS124, τα δεδομένα κατηγορίας δομές.
Αλλά με λίγα λόγια, δεν χρειάζεται να ανησυχείτε γι 'αυτό, όταν χρησιμοποιεί το έξυπνο λογισμικό βάσης δεδομένων.
Μπορείτε να πείτε απλά, "Δείκτης αυτό το πεδίο ώστε να μπορώ να ψάξει για πιο αποτελεσματικά."
>> Αν αφήσετε αυτό το off και την προσπάθειά σας να κάνετε αναζήτηση για όλους στη βάση δεδομένων που ζει σε Mather,
θα περιέλθει σε γραμμική αναζήτηση.
Και αν έχετε 6.000 προπτυχιακούς όλα ζουν σε κάποιο σπίτι,
θα πάμε να ψάξει ολόκληρο τον πίνακα για να βρείτε τις Matherites,
ενώ αν πεις Δείκτης, ελπίζω ότι θα είναι κάτι κοντά σε μια λογαριθμική αναζήτηση
να βρείτε αυτά τα είδη των φοιτητών.
Αυτό είναι μόνο ένα ελεύθερο χαρακτηριστικό γνώρισμα για να ενεργοποιήσετε,
ακόμη και αν δεν έρχονται σε μια τιμή περίπου ποσό του χώρου.
Τέλος, auto-increment, αυτό το πεδίο AI,
πράγμα που σημαίνει απλά αν είναι μια int και δεν θέλετε να φροντίζετε τον εαυτό σας να αυξήσετε το
κάθε φορά που υπάρχει ένα νέο χρήστη, ελέγξτε ότι,
και κάθε χρήστης που παίρνει εισαχθεί θα πάρει αυτόματα μια νέα ταυτότητα.
Ας κλικ στο κουμπί Αποθήκευση, και τώρα ας βρούμε σφάλμα με αυτό το σχέδιο.
Αν πάω στο Περιήγηση, ειδοποίηση ότι τόσο ο Mike και το σπίτι μου είναι NULL.
Μπορώ να χρησιμοποιήσω το phpMyAdmin για να επεξεργαστείτε αυτό το χέρι.
Μπορώ να πάω στο εδώ και πληκτρολογήστε Mather και στη συνέχεια πατήστε Enter,
και τώρα παρατηρήσετε το τραπέζι είναι διαφορετικό.
Αλλά παρατηρήσετε θα μπορούσα να κάνω κάτι άλλο επίσης.
ID Δαβίδ είναι 1, έτσι ώστε το phpMyAdmin είναι και πάλι μόνο ένα διοικητικό εργαλείο?
αυτό δεν είναι κάτι που οι χρήστες σας πρόκειται ποτέ να δούμε.
Έτσι, αν κάνω κλικ αντί του SQL καρτέλα επάνω στην κορυφή -
και πάλι, PSET 7 θα σας παρουσιάσουμε περισσότερα από αυτά τα ερωτήματα -
Μπορώ να εκτελέσει αυτόματα την εντολή SQL δομημένη γλώσσα επερωτήσεων
Χρήστες UPDATE SET σπίτι = 'Pfoho' ΟΠΟΥ id = 1.
Αυτά τα ερωτήματα SQL είναι αρκετά ωραία, αρκετά αναγνώσιμο από αριστερά προς τα δεξιά.
Ενημέρωση του πίνακα των χρηστών, που το πεδίο που ονομάζεται σπίτι για να Pfoho
όπου ID του χρήστη είναι 1.
Ή θα μπορούσα να κάνω ακόμη και όπου email = "malan@harvard.edu».
Εφ 'όσον η οποία προσδιορίζει με μοναδικό τρόπο, που θα λειτουργεί τόσο καλά.
Αλλά ID τείνει να είναι υψηλότερες επιδόσεις, οπότε ας το κάνουμε αυτό.
Ας κάνουμε κλικ Go. Εντάξει, lecture.users δεν υπάρχει. Τι είναι το λάθος μου;
Ποια είναι η πραγματικότητα που ονομάζεται πίνακας εδώ;
Λέγεται φοιτητές μόνο και μόνο επειδή αυτό είναι ό, τι κάναμε μέχρι εδώ πάνω αριστερά.
Λέγεται μαθητές και όχι τους χρήστες. Έτσι, κάντε κλικ στο κουμπί Μετάβαση τώρα.
1 σειρά επηρεάζεται. Ερώτημα ολοκληρώθηκε σε 0,01 δευτερόλεπτα.
Αν κάνω κλικ στο κουμπί Αναζήτηση τώρα, τώρα ζει στην Malan Pfoho.
Έτσι, αυτό είναι μια άλλη γεύση του SQL, αλλά η PSET θα σας καθοδηγήσει λίγο περισσότερο από αυτό.
>> Υπάρχει μια ηλίθια απόφαση που έχω ήδη κάνει εδώ.
Θα έλεγα ότι αυτό το σχέδιο είναι ανεπαρκές δεδομένων
επειδή οι περισσότεροι άνθρωποι ήθελα να προσθέσω στο τραπέζι των φοιτητών,
η περισσότεροι από εμάς θα αρχίσουμε να προσθέτουμε, την περισσότερες από τις ΤΡ Αρχίζω την προσθήκη,
θα πάμε να αρχίσουμε να βλέπουμε τι απώλειες θέσεων εργασίας σε αυτόν τον πίνακα;
>> Ναι. [Φοιτητής] Βλέποντας ότι είναι σε φοιτητές, είμαστε με τον ίδιο [δεν ακούγεται]
Το ίδιο - Σωστά, ακριβώς.
Έτσι, αν 400 άτομα ζουν σε Mather, ή να δώσει,
τελικά ο πίνακας αυτός θα έχει 400 σειρές που λένε "Mather," "Mather,"
"Mather," "Mather," "Mather".
Χάνουμε όλων αυτών των bytes, και υπάρχει ένα ζευγάρι των takeaways εκεί.
1, υπάρχει η τρελή περίπτωση γωνία, όπου αν κάποιος πληρώνει πολλά χρήματα
και μετονομάζει Mather, τώρα πρέπει να αλλάξει ολόκληρο τον πίνακα της βάσης δεδομένων μας.
Αυτό δεν πρόκειται να συμβεί συχνά, αν και Pfoho λεγόταν κάποτε Βόρεια Βουλή πριν από 15 χρόνια,
γι 'αυτό που συμβαίνει. Αλλά αυτό δεν είναι όλα ότι συναρπαστικό.
Πιο συναρπαστικό από μια υπόθεση όπως η γωνία του να χρειάζεται να ενημερώσετε τα δεδομένα σε μεγάλες ποσότητες
για μια βάση δεδομένων είναι γιατί είστε αποθήκευση MATHER ξανά και ξανά και ξανά και ξανά;
Αυτό είναι ένα πολύ χαρακτήρες, 6 χαρακτήρες.
Μπορεί να μην το κάνουμε ακόμα καλύτερο από ότι, ειδικά για Pforzheimer;
Σίγουρα μπορούμε να κάνουμε καλύτερα από ότι πολλοί χαρακτήρες.
Γιατί να μην συνδέσει μόνο έναν μοναδικό αναγνωριστικό σε κάθε σπίτι
και να αποθηκεύουν ότι για κάθε χρήστη; Ας προσπαθήσουμε αυτό.
Αντί απλά να χρησιμοποιήσετε τον πίνακα οι μαθητές, επιτρέψτε μου να ανεβαίνουν στη βάση δεδομένων διάλεξη μου εδώ στο πάνω αριστερά.
Σημειώστε εδώ λέει Δημιουργία πίνακα.
Επιτρέψτε μου να δημιουργήσετε έναν νέο πίνακα που ονομάζεται σπίτια.
Ο αριθμός των στηλών πρόκειται να είναι 2. Enter.
Τώρα έχω 2 πεδία.
Πάω να καλέσετε αυτό το όνομα, και αυτό πρόκειται να είναι ένα varchar μήκους 255,
>> αλλά αυτό είναι αρκετά αυθαίρετη. Επιτρέψτε μου να θέσω αυτό εδώ κάτω από την σύμβαση.
Έτσι, τίθεται ένα αναγνωριστικό εδώ. Ας δώσουμε σε κάθε σπίτι ένα μοναδικό αναγνωριστικό.
Ας δώσουμε σε κάθε σπίτι ένα όνομα.
Ας διευκρινιστεί ότι η αναγνωριστικό θα είναι ανυπόγραφο μόνο κατά συνθήκη να χρησιμοποιούν μόνο θετικούς αριθμούς.
Ας πάμε μπροστά και να δώσει σε αυτό μια αυτόματη αύξηση πεδίο για τώρα.
Και χρειαζόμαστε κάτι άλλο;
Ας πάμε μπροστά και κάντε κλικ στο κουμπί Αποθήκευση.
Τώρα έχω ένα δεύτερο πίνακα.
Σημειώστε ως μέρος αυτό είναι το ελαφρώς κρυπτική εντολή SQL
ότι θα έπρεπε να πληκτρολογήσετε με μη αυτόματο τρόπο, εάν δεν χρησιμοποιείτε ένα εργαλείο διαχείρισης όπως το phpMyAdmin.
Έτσι, ένας άλλος λόγος που το χρησιμοποιούμε.
Είναι θαυμάσια χρήσιμο είδος της παιδαγωγικής, επειδή μπορείτε να κάνετε κλικ γύρω από
και να καταλάβω πώς λειτουργούν τα πράγματα απλά με αντιγραφή και επικόλληση phpMyAdmin τι έκανε.
Αλλά η εντολή Δημιουργία πίνακα είναι αυτό που μόλις εκτελεστεί, και εδώ είναι το τραπέζι μου.
Επιτρέψτε μου τώρα να προχωρήσει και η χρήση πρώτων SQL αντί υπεραπλουστεύουμε κάνοντας κλικ στην καρτέλα Εισαγωγή.
Επιτρέψτε μου να μην INSERT INTO σπίτια,
και θα πάω να πω το όνομα του σπιτιού πρόκειται να έχει μια αξία του «Mather».
Αυτό είναι όλο. Αυτή η σύνταξη είναι λίγο πιο αινιγματικό.
Αυτό είναι το όνομα των πεδίων που θέλετε να εισαγάγετε.
Αυτές είναι οι αξίες που θέλουμε να εισαχθεί σε αυτούς τους τομείς. Επιτρέψτε μου να κάντε κλικ στο κουμπί Μετάβαση.
1 εισάγεται σειρά ολοκληρώθηκε σε 0,02 δευτερόλεπτα. Επιτρέψτε μου να κάντε κλικ στο κουμπί Αναζήτηση τώρα.
>> Παρατηρήστε αν κάνω κλικ στο κουμπί Αναζήτηση, υπάρχει Mather, του οποίου η ταυτότητα είναι η αυτοματοποίηση ο αριθμός 1.
Επιτρέψτε μου να κάνω άλλο ένα. Επιτρέψτε μου να πάω στην καρτέλα SQL.
INSERT INTO σπίτια. Το όνομα του σπιτιού πρόκειται να έχει μία τιμή Pfoho και ούτω καθεξής.
Go. Και μπορώ να συνεχίσω να το κάνω αυτό ξανά και ξανά και ξανά.
Ή αν έχετε βαρεθεί με τη χρήση phpMyAdmin, μπορείτε να χρησιμοποιήσετε μόνο την καρτέλα Εισαγωγή
και δεν πρέπει να πληκτρολογήσετε την πρώτη SQL.
Μπορείτε να κτυπήσει ακριβώς έξω πιο γρήγορα από την πληκτρολόγηση, για παράδειγμα, Currier, Enter,
και τώρα αν κλικ στο κουμπί Αναζήτηση, υπάρχει Currier με την ταυτότητα του 3.
Έτσι, αυτό είναι ό, τι εννοούμε με τον όρο auto-increment.
Τώρα, όμως, πρέπει να διορθώσετε κάτι στους μαθητές.
Σε ό, τι οι μαθητές θα πρέπει ο τύπος δεδομένων του πεδίου είναι σπίτι τώρα;
Θα πρέπει να είναι ένα int, έτσι δεν είναι;
Έτσι, ο στόχος εδώ είναι να συνυπολογίσει, αλλιώς γνωστή ως φυσιολογικό, οι πίνακες
έτσι ώστε να μην αποθηκεύουν πληροφορίες πλεονασμό σε οποιοδήποτε από τους πίνακες μου.
Και πάλι, ο δρόμος που ήταν εδώ για πρόκειται να πει Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, η οποία είναι πολύ περιττή
όσον αφορά τη σπατάλη των χαρακτήρων.
Επιτρέψτε μου λοιπόν να προχωρήσει και να το αλλάξετε αυτό, κάνοντας κλικ Δομή,
και επιτρέψτε μου να προχωρήσει και να ελέγξετε έξω από το γήπεδο σπίτι, κάντε κλικ στο κουμπί Αλλαγή,
και τώρα είμαι πρόκειται να αλλάξει αυτό να είναι ένα int.
255 είναι πλέον άνευ αντικειμένου.
Επιτρέψτε μου να προχωρήσει και να πω ότι είναι καλό, αν είναι ακόμα NULL. Αποθήκευση.
Τώρα οι μαθητές πίνακας έχει τροποποιηθεί με επιτυχία,
παρατηρήσετε και πάλι το σπίτι είναι ένα int.
Ως μέρος, αγνοούν τον αριθμό σε παρένθεση, όταν πρόκειται για ints.
>> Αυτό γίνεται για λόγους κληρονομιά.
Πίσω στην ημέρα, όταν δεν έχετε GUIs, θα έπρεπε αντ 'αυτού ένα περιβάλλον γραμμής εντολών,
οι 10 και 11 αντίστοιχα που αναφέρονται πόσοι χαρακτήρες θα πρέπει να δείξει
στο παράθυρο τερματικού για να εμφανιστούν πραγματικά πεδία.
Δεν έχει τίποτα να κάνει με το μήκος κομμάτι του πραγματικού τομέα, έτσι θα αγνοούν ότι για τώρα.
Τώρα πρέπει να πάω σε αυτό το τραπέζι.
Και αν Ντέιβιντ ζει σε Mather, σπίτι δεν πρέπει να είναι 0,
η οποία είναι μια προεπιλεγμένη τιμή int που βρίσκεται πλησιέστερα στην τιμή NULL.
Θα πρέπει να ζουν στο σπίτι 1.
Ας πούμε ότι αυθαίρετα Mike ζει σε Pfoho, ώστε το σπίτι αριθμός 2.
Τώρα τραπέζι μου φαίνεται λίγο πιο αινιγματικό.
Αλλά σκεφτείτε την αποτελεσματικότητα.
Είμαι χρησιμοποιώντας τώρα μόνο 32 bits για τον προσδιορισμό του σπιτιού,
το οποίο σημαίνει ότι υπάρχει μόνο 1 κανονικό ορισμό του σπιτιού μου και Mather Pfoho
και ότι είναι στο τραπέζι σπίτια.
Έτσι, αν θέλω να επανέλθει τώρα αυτούς τους πίνακες, σκεφτείτε το αυτό τον τρόπο.
Εδώ έχω μαθητές μου τραπέζι, και στη δεξιά πλευρά υπάρχει αυτοί οι αριθμοί, 1 και 2.
1 είναι Mather, 2 είναι Pfoho.
Έχουμε τα ίδια νούμερα σε αυτό το άλλο πίνακα, ο οποίος ονομάζεται σπίτια,
1 και 2 και 3 για τα 3 σπίτια.
Αυτό που θέλουμε τώρα να κάνουμε είναι να έχουμε τη δυνατότητα στον κώδικα, PHP και SQL,
να ταξινομήσετε από επανέλθει αυτούς τους πίνακες, όπου και αν αυτοί είναι οι φοιτητές και αυτά είναι τα σπίτια,
θέλουμε να συνδυάσουμε τους με κάποιο τρόπο, έτσι ώστε 1 γραμμές με 1,
2 γραμμές με 2, και έτσι ώστε να μπορούμε να καταλάβουμε πού David
και όπου ο Mike και όπου όλοι οι άλλοι ζει.
Για να γίνει αυτό μπορούμε να εκτελέσουμε ένα ερώτημα SQL, όπως το παρακάτω.
SELECT * FROM μαθητές JOIN Σπίτια -
Και τώρα ποια πεδία θέλουμε να ενταχθούν στην;
Έτσι students.house = houses.id.
>> Μια περίεργη, αλλά αυτό το μέρος σημαίνει δημιουργήσει κυριολεκτικά ένα νέο προσωρινό πίνακα
αυτό είναι το αποτέλεσμα της ένωσης φοιτητών και σπίτια.
Και πώς θέλετε να συνδυάσετε τις άκρες των δαχτύλων μου εδώ;
Ορισμός του πεδίου σπίτι ίση με των σπιτιών των μαθητών πεδίο ID.
Και αν εγώ τώρα κάντε κλικ στο κουμπί Μετάβαση, παίρνω πίσω ακριβώς αυτό που ήλπιζε να.
Ο David είναι σε Mather, ο Mike είναι σε Pfoho, και βλέπω επίσης τα μοναδικά αναγνωριστικά.
Αλλά το θέμα είναι τώρα έχω μια πλήρη πίνακα.
Και έτσι το πακέτο εδώ για PSET 7 ή πραγματικά για το τελικό σχέδιο:
Αν διαπιστώσετε ότι είστε αποθήκευση κάθε κομμάτι των πληροφοριών πλεονασμό,
είτε πρόκειται για ένα σπίτι, ίσως είναι μια πόλη, πολιτεία, και ZIP
Π.Κ. όπου μπορεί συνήθως, αλλά όχι πάντα να χρησιμοποιηθεί ως ένα μοναδικό αναγνωριστικό,
να περάσουν από την άσκηση διανοητικά και στη συνέχεια με κάτι σαν το phpMyAdmin
του factoring από ότι τα κοινά στοιχεία γιατί ειδικά η ιστοσελίδα σας γίνεται πιο καλά χρησιμοποιούνται
και πιο δημοφιλής, αυτό είναι το πώς μπορείτε να βεβαιωθείτε ότι όλα είναι εξαιρετικά γρήγορη,
δίνοντας τη βάση δεδομένων όσες συμβουλές ως προς τη μοναδικότητα του δυνατού.
Αυτό ήταν ένα πολύ.
Οποιεσδήποτε ερωτήσεις; Εντάξει. Ας ρίξουμε μια 5-λεπτά διάλειμμα εκεί και να ανασυνταχθούν.
Εντάξει.
Το ακόλουθο είναι ένα παράδειγμα που χρησιμοποιήθηκε πριν από μερικά χρόνια, όταν πήρα CS161,
το οποίο είναι το λειτουργικό συστήματα κλάσης στο κολέγιο
η οποία είναι γνωστή για την καταπληκτική αλλά ένα τρελό ποσό της εργασίας,
και επικεντρώνεται πραγματικά σε μερικά από τα χαμηλού επιπέδου προβλήματα που προκύπτουν σε λειτουργικά συστήματα
και, επίσης, ακόμη και στον κόσμο των βάσεων δεδομένων.
>> Η ιστορία που ειπώθηκε από τον καθηγητή μου, Margo Seltzer, εκείνη τη χρονιά ήταν ως εξής.
Ας υποθέσουμε ότι έχετε ένα μικρό ψυγείο dorm για εσάς και συγκάτοικός σας
και οι δύο από σας αρέσει πολύ το γάλα.
Έτσι έρχεστε κατ 'οίκον από την τάξη μια μέρα, ο συγκάτοικός σας δεν είναι ακόμα εκεί,
ανοίγετε το ψυγείο, και έχετε συνειδητοποιήσει, "Ω, γαμώτο, είμαστε έξω από το γάλα."
Έτσι, μπορείτε κλείστε το ψυγείο, μπορείτε να περπατήσετε κατά μήκος του δρόμου για να CVS
και να πάρει όλο και περισσότερο σε μεγάλες ουρές για να αγοράσουν λίγο γάλα στο CVS.
Εν τω μεταξύ, ο συγκάτοικός σας έρχεται σπίτι από του ή της κατηγορίας,
έρχεται στο δωμάτιο, ανοίγει το ψυγείο πραγματικά θέλουν λίγο γάλα,
Ανοίγει το ψυγείο και, "Γαμώτο, δεν το γάλα."
Έτσι, αυτός ή αυτή κλείνει το ψυγείο, βόλτες έξω από την πόρτα, και να πηγαίνει για τα ζωικά υποπροϊόντα
ή κάπου αλλού εκτός από το CVS όπου δεν πρόκειται να προσκρούουν μεταξύ τους
για να πάει να πάρει λίγο γάλα.
Φυσικά, λίγα λεπτά αργότερα, οι δύο από σας να πάρετε πίσω στο σπίτι
και τώρα έχετε δύο φορές τόσο πολύ γάλα όπως πραγματικά ήθελε.
Και είναι το γάλα, τώρα πρόκειται να πάει άσχημα, επειδή σας αρέσει το γάλα
αλλά δεν το κάνετε πραγματικά, όπως το γάλα, έτσι και τώρα έχετε πολύ γάλα, έτσι πρόκειται να ξινίσει.
Αυτό είναι ένα απαίσιο, απαίσιο κατάσταση.
Τι θα μπορούσε να λύσει αυτήν την δυσάρεστη κατάσταση, αν ήταν το πρώτο σπίτι συγκάτοικο; Ναι.
[Φοιτητής] Θα πρέπει να έχουν αφήσει ένα σημείωμα. [Γέλια]
Καλή. Θα πρέπει να έχουν αφήσει ένα σημείωμα.
Θα πρέπει να έχετε βάλει ένα Post-it σημείωμα ή σαν να λέμε, "Gone για το γάλα»
και στη συνέχεια ο συγκάτοικός σας εννοιολογικά θα έχουν κλειδωθεί έξω από ότι πραγματικά κάνει.
Ή θα μπορούσατε να πάτε 1 βήμα παραπέρα.
Μπορείτε να κλειδώσετε κυριολεκτικά το ψυγείο με κάποιο είδος του λουκέτου,
και τώρα ο συγκάτοικός σας θα κυριολεκτικά να κλειδωθεί έξω από το ψυγείο.
Αν γενικεύσουμε πίσω τον προγραμματισμό,
μπορείτε να σκεφτείτε σχεδόν από το ψυγείο ως κάποιο είδος της μεταβλητής ή ενός struct,
ένα είδος δοχείου για πληροφορίες.
Το πρόβλημα εδώ είναι βασικά ότι και οι δύο θα είχαν τη δυνατότητα να επιθεωρήσει
ή να διαβάσει την κατάσταση αυτής της δομής δεδομένων,
αλλά το είδαν σε διαφορετικές χρονικές στιγμές και ακόμα δυο σας έκανε μια απόφαση
με βάση την κατάσταση του κόσμου σε αυτές τις διαφορετικές χρονικές στιγμές.
Έτσι θα είχε κλειδώσει το ψυγείο, θα είχατε τουλάχιστον αποφεύγεται ο συγκάτοικός σας
από το να έχουν τη δυνατότητα να επιθεωρήσει την κατάσταση του κόσμου,
έτσι ώστε αυτός ή αυτή δεν θα μπορούσε να κάνει την ίδια απόφαση.
Έτσι, βάσεις δεδομένων, όπως αποδεικνύεται, έχουν αυτό το πρόβλημα συνεχώς.
>> Ας δούμε αν μπορούμε να κατασκευάσουμε ένα σενάριο.
Ας υποθέσουμε ότι είστε ένα είδος κακός και πηγαίνετε στην Bank of America
ή ένα από τα άλλα μέρη της πλατείας που έχουν ένα ζευγάρι ΑΤΜ πλάι πλάι,
και με κάποιο τρόπο θα βρει τον τρόπο να αντιγράψετε μια κάρτα ΑΤΜ - δεν είναι όλα αυτά σκληρά.
Είναι απλά μια μαγνητική ταινία.
Και έτσι ό, τι θέλετε να δοκιμάσετε να κάνετε είναι να παίξετε αυτό το παιχνίδι
σύμφωνα με την οποία βάζετε 1 κάρτα σε 1 μηχανή, μια άλλη κάρτα στην άλλη μηχανή,
και που ουσιαστικά θέλουν να προσπαθήσουν να αποσύρουν τα χρήματα ταυτόχρονα,
επειδή φαντάζομαι ότι η ιστορία έχει ως εξής.
Η μηχανή στα αριστερά παίρνει την κάρτα σας και το PIN σας,
και στη συνέχεια, λέτε, "Δώσε μου $ 100."
Το ΑΤΜ είναι προγραμματισμένος να κάνει πρώτα μια επιλογή στη βάση δεδομένων του ή το ισοδύναμο -
ό, τι είναι βάση δεδομένων που χρησιμοποιεί - για να δείτε αυτός ο χρήστης έχει τουλάχιστον $ 100 στο λογαριασμό του;
Αν ναι, τότε φτύσει τα $ 100 και $ 100 αφαιρέσουμε από την ισορροπία τους.
Αλλά βέβαια, αν υπάρχει πολλαπλές μηχανές εδώ ή πολλαπλούς τρόπους ελέγχου
η κατάσταση αυτού του κόσμου, το θησαυροφυλάκιο της τράπεζας, για να δείτε πόσα χρήματα έχετε,
ας υποθέσουμε ότι μόνο από τύχη τη μηχανή στα αριστερά και η δεξιά
τόσο κάνει αυτή την ερώτηση σε περίπου την ίδια χρονική στιγμή.
>> Και αυτό μπορεί να συμβεί σίγουρα. ΑΤΜ είναι υπολογιστές αυτές τις μέρες.
Έτσι, αν η μηχανή στα αριστερά λέει, "Ναι, έχετε τουλάχιστον $ 100,"
Εν τω μεταξύ, η μηχανή στα δεξιά λέει, "Ναι, έχετε τουλάχιστον $ 100,"
τότε και οι δύο από αυτούς να προχωρήσει μέχρι το τέλος των προγραμμάτων τους και πραγματικά να φτύσει τα $ 100
και να πει, "Προηγουμένως είχατε $ 200."
"Επιτρέψτε μου να ενημερώσετε τη μεταβλητή τώρα είναι $ 100 αριστερά στο λογαριασμό."
Όμως, αν και οι δύο από αυτούς έχουν ελεγχθεί το υπόλοιπο του λογαριασμού σας και διαπιστώθηκε ότι είναι 200 ​​δολάρια
και οι δύο από αυτούς στη συνέχεια, κάντε τα μαθηματικά και να πω 200 έως 100,
οι μηχανές έχουν δυνητικά φτύσει δύο $ 100 λογαριασμούς σε κάθε μηχάνημα,
αλλά έχουν ενημερωθεί μόνο ποσό υπόλοιπο του λογαριασμού σας να είναι $ 100.
Με άλλα λόγια, έχετε πάρει από $ 200, αλλά επειδή επιθεώρησε το κράτος του κόσμου
ταυτόχρονα και στη συνέχεια να κάνει μια απόφαση με βάση την αξία,
δεν μπορεί να κάνει τα μαθηματικά τελικά σωστά.
Έτσι, σε μια κατάσταση πάρα πολύ τράπεζα θέλετε πραγματικά να έχουν κάποιο είδος του lockout
έτσι ώστε το συντομότερο έχετε ελέγξει την κατάσταση κάποιων μεταβλητών
αυτό είναι πολύ σημαντικό, όπως και το υπόλοιπο του λογαριασμού σας,
μην αφήνετε κανέναν να λαμβάνουν αποφάσεις με βάση ότι μέχρι να γίνει αυτό το πράγμα σας,
όπου σε αυτή την περίπτωση είναι το ΑΤΜ στα αριστερά.
Κλείδωμα όλους τους άλλους έξω.
Μπορείτε να επιτύχετε αυτό το αποτέλεσμα πραγματικά σε μια-δυο διαφορετικούς τρόπους.
>> Ο πιο απλός τρόπος με τον MySQL είναι μια γραμμή του SQL που σας δώσαμε
στο σύνολο προδιαγραφών πρόβλημα που μοιάζει ακριβώς με αυτό.
Τοποθετήστε στο τραπέζι - ό, τι λέγεται - μια ταυτότητα, ένα σύμβολο, και μια μετοχή, μια σειρά από μετοχές,
τις ακόλουθες τιμές, για παράδειγμα.
Αν δεν έχετε διαβάσει το spec ακόμα, αυτό είναι ένα παράδειγμα που περιλαμβάνουν πώς πηγαίνετε για
αγορά 10 μετοχών της απόθεμα πενών για τον Πρόεδρο Skroob,
αναγνωριστικό χρήστη του οποίου συμβαίνει να είναι ο αριθμός 7;
Αυτό λέει INSERT INTO τραπέζι το ακόλουθο αναγνωριστικό, το σύμβολο, και τον αριθμό των μετοχών
της 7, «DVN.V ', και 10.
Αλλά - αλλά, αλλά, αλλά - η δεύτερη γραμμή είναι το σημαντικό.
ΓΙΑ διπλό κλειδί μετοχές UPDATE = + ΑΞΙΕΣ μετοχές (μετοχές).
Έτσι, εντελώς αινιγματικά το μέλλον με την πρώτη ματιά.
Αλλά το γεγονός ότι αυτό το ερώτημα SQL, αν και αναδιπλώνεται σε 2 γραμμές,
είναι 1 μεγάλο ερώτημα, αυτό σημαίνει ότι είναι ατομική
με την έννοια ότι αυτό το ερώτημα θα πρέπει είτε να εκτελεστεί όλα μαζί ή καθόλου.
Και με τον ορισμό της MySQL, αυτό είναι το πώς θα εφαρμοστεί αυτό το ερώτημα.
Είναι εξ ορισμού στο εγχειρίδιο σίγουρη εκτελέσει μονομιάς ή καθόλου.
Το κίνητρο γι 'αυτό είναι ως ακολούθως.
Αν σε αυτή την περίπτωση που προσπαθείτε να αγοράσει 10 μετοχές του αποθέματος,
είναι το είδος της ίδιας ιστορίας, όπως το γάλα, είναι το είδος της ίδιας ιστορίας, όπως το ΑΤΜ.
>> Αν δεν κάνετε το λάθος του χρησιμοποιώντας τη σύνταξη
αλλά, αντίθετα, επιλέγοντας από τη βάση δεδομένων για να δείτε πόσες μετοχές του εν λόγω απόθεμα πενών
Πρόεδρος Skroob δεν έχουν, και ας υποθέσουμε ότι έχει 10 μετοχές,
και στη συνέχεια κάποιες κλάσμα του δευτερολέπτου αργότερα, στη συνέχεια, κάνετε μια δήλωση UPDATE,
η οποία είναι μια άλλη δήλωση SQL που λέει να προχωρήσει και να προστεθούν ακόμη 10 μετοχές
σε τρέχουσες 10 του, έτσι ώστε ιδανικά το σύνολο είναι 20,
το πρόβλημα είναι επειδή σε συστήματα βάσεων δεδομένων σήμερα και επειδή σε υπολογιστές σήμερα
έχετε πολλαπλούς επεξεργαστές, πολλαπλούς πυρήνες -
Με άλλα λόγια, οι υπολογιστές μπορούν κυριολεκτικά να κάνει πολλά πράγματα ταυτόχρονα -
δεν υπάρχει καμία εγγύηση ότι SELECT σας και UPDATE σας σε αυτή την περίπτωση
πρόκειται να συμβεί πλάτη με πλάτη.
Έτσι, ένα κακό σενάριο θα ήταν να κάνετε το SELECT
για να δείτε πόσες μετοχές του εν λόγω απόθεμα πενών δεν έχουν Skroob,
και στη συνέχεια, μόλις κατά τύχη ένα άλλο ερώτημα βάσης δεδομένων εκτελείται -
ίσως Skroob του σε άλλο παράθυρο του browser προσπαθεί να αγοράσει 10 μετοχές
σε ένα άλλο παράθυρο εντελώς, μοιάζει πολύ με το ΑΤΜ -
και ας υποθέσουμε ότι ένα άλλο ερώτημα παίρνει στο μεταξύ SELECT και του UPDATE.
Θα μπορούσε να είναι η περίπτωση που Skroob χάνει τώρα κάποια αριθμού των μετοχών
επειδή μια άλλη διαδικασία ελέγχου την κατάσταση του κόσμου του,
ή παίρνει περισσότερες μετοχές από ό, τι θα έπρεπε.
Δεν θα υπεισέλθω σε λεπτομέρειες για το τι ακριβώς αυτές οι συγκεκριμένες γραμμές η ιστορία θα ήταν,
αλλά το θέμα είναι αν θα πρέπει να ελέγξετε την τιμή μεταβλητών και στη συνέχεια να λάβει μια απόφαση,
αν υπάρχει κίνδυνος κάποιος άλλος να κάνει κάτι ανάμεσα σε αυτές τις 2 καταστάσεις,
όπως μπορεί να συμβεί σε συστήματα πολλαπλών επεξεργαστών, σε συστήματα πολλαπλών πυρήνων,
υπολογιστές με την δυνατότητα να κάνετε πολλά πράγματα ταυτόχρονα, κακά πράγματα μπορούν να συμβούν
όπως τραπεζικούς λογαριασμούς που χρεώνεται λανθασμένα, αγοράζοντας δύο φορές περισσότερο γάλα,
ή στην περίπτωση αυτή η λάθος αριθμό μετοχών.
Αλλά υπάρχει ένας ευκολότερος τρόπος για να σκεφτεί για αυτό.
>> Αποδεικνύεται ότι η SQL υποστηρίζει επίσης, εάν ρυθμίσετε το τραπέζι σας σωστά,
κάτι που ονομάζεται συναλλαγών, το οποίο θα έλεγα είναι στην πραγματικότητα ακόμα πιο εύκολο να κατανοήσουν
από αυτό, αλλά δεν είναι ένα 1-επένδυση, γι 'αυτό είναι πραγματικά μια λίγο πιο περίπλοκη.
Υπάρχει κυριολεκτικά μια δήλωση SQL που ονομάζεται ΣΥΝΑΛΛΑΓΗΣ START.
Ακριβώς όπως υπάρχει SELECT, UPDATE, INSERT, DELETE, και JOIN και ένα σωρό άλλοι,
υπάρχουν λέξεις-κλειδιά όπως ΣΥΝΑΛΛΑΓΗΣ START.
Και τι θα κάνουμε στη συνέχεια, στο πλαίσιο της PSET 7 -
δεν χρειάζεται να το κάνετε αυτό για PSET 7? αυτό είναι ρητά παραιτήθηκαν ώστε να μην είναι απαραίτητο,
αλλά για την τελική έργα μπορεί να είναι χρήσιμο -
αν σας καλέσει ένα ερώτημα του ΣΥΝΑΛΛΑΓΗ ΕΝΑΡΞΗ και στη συνέχεια ένα άλλο ερώτημα
και στη συνέχεια ένα άλλο ερώτημα και στη συνέχεια ένα άλλο, ένα άλλο, και άλλο,
αυτά τα ερωτήματα δεν θα εκτελεστεί στην πραγματικότητα μέχρι να καλέσετε το SQL δήλωση COMMIT,
σε ποιο σημείο, είτε πρόκειται για 2 ή 20 δηλώσεις δηλώσεις, όλοι θα πρέπει να εκτελούνται ταυτόχρονα,
πράγμα που σημαίνει κανένας άλλος δεν μπορεί να αγοράσει κατά λάθος πάρα πολύ γάλα ή χρεωστική πάρα πολλά χρήματα
ή να αγοράσετε πάρα πολλές μετοχές, επειδή όλα τα ερωτήματά σας θα εκτελέσει
πλάτη με πλάτη με πλάτη με πλάτη.
Και αυτό είναι εξαιρετικά σημαντικό, ειδικά όταν κάνεις κάτι σαν αυτό.
Αυτό είναι ένα αυθαίρετο παράδειγμα που λέει ας ενημερώσει τον τραπεζικό λογαριασμό
θέτοντας μια ισορροπία ίσο με ισορροπία - $ 1000 όπου ο αριθμός του λογαριασμού είναι 2.
Και τότε η δεύτερη δήλωση είναι τώρα ας καταθέσει ότι $ 1000
σε κάποιον άλλο τραπεζικό λογαριασμό του οποίου ο λογαριασμός αριθμός είναι 1.
>> Με άλλα λόγια, αυτό είναι ένα τέλειο παράδειγμα για το πού θέλετε να βεβαιωθείτε
ότι και οι δύο από αυτές τις δηλώσεις συμβεί ή καθόλου
γιατί αλλιώς ο πελάτης θα πάρει βιδώνεται
και θα πάμε για να πάρει τα χρήματά τους και να μην καταθέσει αλλού,
ή η τράπεζα πρόκειται να πάρει βιδώνεται όπου θα πάμε για να καταθέσετε τα χρήματα
αλλά δεν αφαιρεί στην πραγματικότητα από το λογαριασμό του χρήστη.
Έτσι θέλετε και οι δύο από αυτούς να εκτελούν από κοινού.
Έτσι αρχίζει τις συναλλαγές κόσμου.
Έτσι, αυτό είναι κάτι για να κρατήσει στο πίσω μέρος του μυαλού σας,
όχι τόσο για τους σκοπούς της μόλις ένα τελικό σχέδιο,
αλλά αν θέλετε να λάβει την τελική του έργου σας κάπου,
αν θέλετε να ξεκινήσει κάποια επιχείρηση γύρω από αυτό,
αν θέλετε να λύσετε το πρόβλημα κάποια ομάδα φοιτητών στην πανεπιστημιούπολη
και στην πραγματικότητα έχουν μια ζωντανή, ενεργή ιστοσελίδα, αυτά είναι το είδος της ανεπαίσθητες σφάλματα που μπορεί να προκύψουν
αν δεν σκέφτονται αρκετά μέσα από αυτό μπορεί να συμβεί εάν 2 άτομα
προσπαθούν να έχουν πρόσβαση στο δικτυακό τόπο σας κυριολεκτικά την ίδια χρονική στιγμή,
σύμφωνα με την οποία τα ερωτήματά τους θα μπορούσε να πάρει διαφορετικά συνυφασμένα.
>> Έτοιμο για κάποιο JavaScript, ένα τρέιλερ τους;
Αυτή είναι η τελευταία μας γλώσσα για το εξάμηνο. Εντάξει.
Ευτυχώς, JavaScript φαίνεται πολύ, πολύ, πολύ παρόμοια με τις 2 γλώσσες, C και PHP,
έχουμε κάνει μέχρι τώρα.
Δεν υπάρχει καμία JavaScript στο PSET 7, αλλά αυτό είναι ένα εξαιρετικά χρήσιμο εργαλείο
όταν πρόκειται να κάνει web-based τελικό έργων ή πολύ απλά web προγραμματισμό γενικότερα.
Έτσι, μια γρήγορη επισκόπηση του κάτι που ονομάζεται DOM.
Εδώ είναι μια εξαιρετικά απλή ιστοσελίδα που πραγματικά ακριβώς λέει γειά σου, τον κόσμο
τόσο στον τίτλο και στο σώμα.
Καθώς η οδόντωση έχει προτείνοντας για κάποιο χρονικό διάστημα,
υπάρχει πράγματι μια ιεραρχία σε ιστοσελίδες.
Θα μπορούσα να επιστήσω την ίδια απόσπασμα της HTML, όπως ένα δέντρο,
σκέψης πίσω στις συζητήσεις μας δομών δεδομένων σε C, ως εξής.
Δεν έχω κάποια ιδιαίτερη κόμβο ρίζα ονομάζεται ο κόμβος έγγραφο,
και θα δούμε το ανάλογο σε αυτό JavaScript ακριβώς σε μια στιγμή.
Το πρώτο παιδί και μόνο το παιδί της ότι σε αυτή την περίπτωση είναι η ετικέτα HTML.
Δεν υπάρχει καμία άμεση χαρτογράφηση της doctype.
Αυτό είναι ένα ιδιαίτερο πράγμα, γι 'αυτό θα πρέπει να αγνοούμε αυτό ακριβώς, όταν πρόκειται για αυτό το DOM,
Αυτό το αντικείμενο Document δέντρο μοντέλου.
Σημειώστε ότι η ετικέτα HTML, το οποίο έχω απεικονίζεται αυθαίρετα ως ένα ορθογώνιο,
έχει 2 παιδιά: το κεφάλι και το σώμα.
>> Αυτοί είναι που ομοίως ως ορθογώνια.
Είναι νόημα σχηματικά ότι η κεφαλή είναι στα αριστερά του σώματος.
Το συμπέρασμα είναι ότι το κεφάλι έρχεται πρώτη στο δέντρο.
Έτσι, υπάρχει πραγματικά μια παραγγελία σε ένα δέντρο, όταν θα συντάξει σαν αυτό,
ακόμη και αν τα σχήματα και οτιδήποτε είναι αυθαίρετες.
Επικεφαλής έχει εν τω μεταξύ ένα παιδί που ονομάζεται τίτλο,
και ο τίτλος έχει πραγματικά το παιδί της, το οποίο είναι "γειά σου, τον κόσμο",
Σκοπίμως η οποία επέστησε ως οβάλ εδώ για να κάνει λίγο διαφορετικό από το ορθογώνιο.
Αυτά τα στοιχεία είναι ορθογώνια, ενώ γειά σου, ο κόσμος είναι πραγματικά ένας κόμβος κειμένου.
Έτσι είναι ένας κόμβος στο δέντρο, αλλά αυτό είναι ένα διαφορετικό είδος του κόμβου
γι 'αυτό επέστησε αυθαίρετα διαφορετικά.
Ομοίως, δεν έχει το σώμα ενός παιδιού που ονομάζεται γεια σου, τον κόσμο, καθώς και,
τόσο διαφορετικό κόμβο ακόμα κι αν είναι συμπτωματικά το ίδιο κείμενο,
αλλά έχω που χρησιμοποιούν το ίδιο σχήμα. Έτσι, ποιος νοιάζεται;
Λοιπόν, τι είναι ωραίο για HTML είναι ότι δεν έχουν αυτή την ιεραρχική φύση.
Και τι είναι ωραίο για JavaScript και ιδιαίτερα οι βιβλιοθήκες που είναι ελεύθερα διαθέσιμα
και δημοφιλή, όπως jQuery, μπορείτε να περιηγηθείτε τη δομή δέντρου τόσο εκπληκτικά εύκολο.
Οποιοδήποτε από τα πράγματα που κάναμε σε C με δείκτες και δέντρα διέρχονται αναδρομική ανάκτηση και στους κόμβους
αριστερά προς τα δεξιά παιδί παιδί, ξαφνικά μπορούμε να ταξινομήσουμε από θεωρούμε δεδομένο
όπως είναι εκπληκτικά διαφωτιστική, αν όχι λίγο απογοητευτικό
αλλά δεν είναι σχεδόν ένας αποτελεσματικός τρόπος για να πάει για τον προγραμματισμό.
Και έτσι με αυτά τα υψηλότερα επίπεδα γλώσσες όπως η JavaScript
θα είμαστε σε θέση να περιηγηθείτε αυτό το δέντρο πολύ πιο διαισθητικά.
>> Και πράγματι, η σύνταξη θα είναι αρκετά εξοικειωμένοι.
Αν δεν έχετε δει ποτέ πριν το JavaScript, αυτό είναι μια πολύ ωραία αναφορά
από τα Mozilla λαοί, οι άνθρωποι που κάνουν τον Firefox,
γι 'αυτό μη διστάσετε να περιηγηθείτε ότι όποτε σας βολεύει.
Τι θα βρείτε - και οι διαφάνειες είναι ίδιες με αυτό που χρησιμοποιείται τις προάλλες -
Ομοίως, το κύριο έχει φύγει.
Έτσι, όταν γράφετε ένα πρόγραμμα σε JavaScript, δεν υπάρχει κύρια λειτουργία.
Μπορείτε απλά να αρχίσετε να γράφετε κώδικα.
Αλλά μια βασική διάκριση μεταξύ JavaScript και PHP και C
είναι ότι ενώ PHP C και μέχρι στιγμής έχουν εκτελεστεί πλευρά του διακομιστή
από τη συσκευή στην περίπτωση αυτή ή πιο γενικά από ένα διακομιστή,
JavaScript από τον σχεδιασμό είναι συνήθως εκτελείται από ένα πρόγραμμα περιήγησης.
Με άλλα λόγια, μπορείτε να γράψετε κώδικα JavaScript, καθώς είμαστε έτοιμοι να,
σε έναν διακομιστή στη συσκευή, αλλά θα το περιλάβει μεταξύ σας HTML, CSS μεταξύ σας,
GIFs μεταξύ σας και PNGs σας και σας αρχεία JPEG
έτσι ώστε όταν ο χρήστης επισκέπτεται την ιστοσελίδα σας, αν είστε με τη χρήση JavaScript,
ότι ο κώδικας JavaScript έρχεται από τον server στον browser,
και αυτό είναι το πρόγραμμα περιήγησης που εκτελεί στην πραγματικότητα.
Έτσι, αυτό το νόημα έχει επιπτώσεις ακόμη και για την πνευματική ιδιοκτησία.
Είναι χαζό να σκεφτείτε ακόμη και για την προστασία IP σας όταν πρόκειται για κώδικα JavaScript
επειδή από τη φύση της γλώσσας παίρνει συνήθως εκτελούνται πλευρά του προγράμματος περιήγησης.
>> Μπορείτε να συσκοτίσετε, το οποίο σημαίνει ότι μπορείτε να κάνετε το βλέμμα τρελό και άσχημο
χωρίς κενά, απαίσια ονόματα μεταβλητών, ώστε να είναι πιο δύσκολο για τους ανθρώπους να κλέψει IP σας,
αλλά το κλειδί είναι ότι εκτελείται πλευρά του προγράμματος περιήγησης.
Ακόμα κι αν ως μέρος JavaScript μπορεί να χρησιμοποιηθεί πλευρά του server,
η πιο συνηθισμένη περίπτωση χρήσης αυτή τη στιγμή βρίσκεται ακόμα στο πρόγραμμα περιήγησης.
Και εδώ είναι αυτό που μοιάζει με. Εδώ είναι ένα if-else if-else κατασκευή ακριβώς όπως η C, όπως ακριβώς και PHP.
Εδώ είναι μια Boolean έκφραση όταν "ή" 2 πράγματα μαζί.
Εδώ είναι όταν "και" 2 πράγματα μαζί.
Εδώ είναι μια δήλωση switch, το οποίο είναι παρόμοιο με PHP
δεδομένου ότι μπορείτε να μεταβείτε σε διαφορετικούς τύπους των αξιών.
Loops έχουν ομοίως για βρόχους εδώ, το οποίο είναι δομημένες με τον ίδιο σε ό, τι έχουμε δει μέχρι σήμερα.
Ενώ βρόχους? Έχουμε κάνει, ενώ βρόχοι.
Μεταβλητές, πάντα τόσο ελαφρώς διαφορετική.
Μπορείτε να το κάνετε δηλώνουν μεταβλητές όπως κάνετε σε PHP και C,
αλλά είναι εξίσου JavaScript ασθενώς δακτυλογραφημένα.
Δεν καθορίσετε int ή float ή string ή κάτι τέτοιο συνήθως.
Μπορείτε να καθορίσετε var.
Δεν χρειάζεται να καθορίσετε var, αλλά έχει συνέπειες αν δεν το κάνουν.
Συνήθως, αν παραλείψετε var, μπορείτε να δημιουργήσετε μια τυχαία μεταβλητή παγκόσμια αντί των τοπικών.
Έτσι, επιτρέψτε μου να προτείνω ότι σχεδόν πάντα να πω var και στη συνέχεια το όνομα της μεταβλητής.
Δεν είναι ένας τύπος, είναι ακριβώς για τη μεταβλητή var.
Αυτό θα ήταν ένα παράδειγμα, αν πρόκειται για 123 ή "Hello, world".
Οι πίνακες είναι παρόντες και συντακτικά όμοια με PHP.
Θα πω var αριθμούς και στη συνέχεια μπορώ να χρησιμοποιήσω αγκύλες και πάλι να δηλώσετε μια μεταβλητή
των οποίων ο τύπος είναι σειρά που έχει αυτά τα συγκεκριμένα νούμερα σε αυτό διαχωρίζονται με κόμματα.
Και στη συνέχεια, τέλος, αυτό είναι το μόνο που πραγματικά έχει διαφορετική εμφάνιση.
Υπενθυμίζουμε ότι στην PHP θα είχαμε εφαρμόσει ένα associative array για έναν φοιτητή
όπως Zamyla που να μοιάζει με αυτό, όπου η μεταβλητή ονομάζεται φοιτητής.
Οι αγκύλες σημαίνουν εδώ έρχεται μια σειρά.
>> Το γεγονός ότι δεν είμαι με τη χρήση αριθμητικών δεικτών, αλλά χορδές - id, σπίτι, και το όνομα -
σημαίνει ότι αυτό είναι ένα associative array,
και αυτά τα βέλη με το σύμβολο του ίσον και η γωνία βραχίονα
σημαίνει ότι το κλειδί είναι "id", η τιμή είναι 1?
το κλειδί είναι "σπίτι", η τιμή είναι Winthrop σπίτι?
το κλειδί είναι "όνομα", η τιμή είναι Zamyla Chan.
Έτσι, υπάρχει 3 κλειδιών μέσα από αυτό το associative array, καθένα από τα οποία έχει τη δική του αξία.
Έχουμε δει ότι σε PSET 7, ή σύντομα θα, σε JavaScript ίδια ιδέα,
αλλά πρόκειται να μοιάσει με αυτό.
Έτσι var μαθητή - χωρίς σύμβολο του δολαρίου και δεν αναφέρει τον τύπο, αλλά ακόμα var -
ισούται με και στη συνέχεια ανοίξτε άγκιστρα επειδή σε JavaScript όταν έχετε ζεύγη κλειδιών αξία,
που χρησιμοποιείτε στην πραγματικότητα κάτι που ονομάζεται ένα αντικείμενο.
Και όσοι από εσάς έλαβε APCS ή κάτι παρόμοιο θα μπορούσε να υπενθυμίσει αντικείμενα από την Ιάβα
ή παρόμοιες γλώσσες.
JavaScript δεν είναι Java, πρώτα απ 'όλα.
Ήταν μια σκόπιμη απόφαση χρόνου σχεδιασμού πριν να χτυπήσει από κάτι άλλο που ήταν δημοφιλής,
όνομά του, ακόμα και αν δεν έχει καμία σχέση με την θεμελιώδη ίδια Java.
JavaScript έχει αντικείμενα, και να τους δημιουργούν μέσω του κηδεμόνα σημειογραφία σγουρά.
Αντικείμενα σε JavaScript είναι λίγο πολύ ισοδύναμη με associative arrays στην PHP
όταν πρόκειται για την αποθήκευση δεδομένων στο εσωτερικό τους.
>> Αλλά ακόμη πιο δυναμικά σε JavaScript μπορεί να σας συνδέσει πολύ εύκολα λειτουργίες
μέσα από ένα αντικείμενο, και αν μπορείτε να το κάνετε αυτό σε άλλες γλώσσες,
Είναι αρκετά ένα κοινό πρότυπο, όπως θα δούμε.
Εν ολίγοις, αυτό το αντικείμενο αντιπροσωπεύει ένα μαθητή, ο οποίος είναι ιδιαίτερα Zamyla,
και είναι παρόμοια εννοιολογικά, απλά συντακτικά διαφορετικό από αυτό.
Ας χρησιμοποιήσουμε πραγματικά JavaScript σε ένα αρχείο.
Αποδεικνύεται ότι υπάρχει μια ετικέτα script.
Έχουμε δει μια ετικέτα στυλ και έχουμε δει άλλες ετικέτες HTML.
Η ετικέτα script πραγματικά θα περιέχει κάποιο κώδικα JavaScript.
Επιτρέψτε μου να πάω στη συσκευή, όπου έχουμε κάποια πηγαίο κώδικα προ-made.
Δεν το έχω ακόμα δημοσιεύτηκε στην ιστοσελίδα του, αλλά θα το κάνω μετά το μάθημα.
Ας ανοίξουμε αυτό το ένα, blink.html.
Επιστροφή στη δεκαετία του 1990, υπήρξε κυριολεκτικά μια ετικέτα HTML που ονομάζεται ετικέτα αναβοσβήνουν,
και αυτό ήταν ένα από τα πιο υπέροχα υπερκατανάλωση ετικέτες στο Διαδίκτυο
σύμφωνα με την οποία θα ήθελα να επισκεφθείτε κάποια ιστοσελίδα της δεκαετίας του 1990 στυλ και να αρχίσουμε να βλέπουμε το κείμενο να αναβοσβήνει σας αρέσει αυτό,
τα αποτελέσματα της ετικέτας μαρκήσιο, η οποία είχε το κείμενο πηγαίνει όπως αυτό.
Μία από τις λίγες φορές που ο κόσμος έχει πραγματικά συμφώνησαν σε ένα πρότυπο web,
ο καθένας σε όλους τους τομείς σκότωσε την ετικέτα αναλαμπή πριν από μερικά χρόνια.
Αλλά μπορούμε να το αναστήσει με JavaScript ως μια επίδειξη της δύναμης που έχετε
όταν μπορείτε να γράψετε ένα πρόγραμμα μέσα από μια ιστοσελίδα.
Πρώτα ας προσπεράσουν τη νέα πράγματα και να επικεντρωθεί μόνο στην παλιά.
>> Εδώ είναι η παλιά πράγματα σε αυτό το παράδειγμα.
Έχω μια ετικέτα HTML, μια ετικέτα κεφάλι, και μια ετικέττα τίτλου.
Στη συνέχεια, έχω μια ετικέτα σώμα εδώ με ένα div, το οποίο ανάκληση είναι απλά ένα ορθογώνιο τμήμα της σελίδας
ότι έχω δώσει ένα μοναδικό αναγνωριστικό αυθαίρετα του "χαιρετισμού" να,
ακριβώς έτσι έχω έναν τρόπο μοναδικό που αναφέρεται σε αυτό, το οποίο έχει κάποια πολύ απλό κείμενο:
γειά σου, τον κόσμο.
Τώρα, επιτρέψτε μου να μετακινηθείτε προς τα επάνω προς την κορυφή του αυτό το αρχείο και δείτε τι νέο υπάρχει.
Το πρώτο πράγμα που είναι νέο κορυφαίο up είναι η ετικέτα script,
και στο εσωτερικό της προκήρυξης ετικέτα script έχω δηλώσει μια λειτουργία.
Για να δηλώσετε μια λειτουργία JavaScript, αρκετά παρόμοια με την PHP,
που κυριολεκτικά γράψετε λειτουργία τότε το όνομα της συνάρτησης, παρενθέσεις,
και ίσως κάποια επιχειρήματα και αν χρειαστεί υπάρχει.
Στη συνέχεια, έχω σγουρά κηδεμόνα μου, ως συνήθως, και τώρα έχουμε κάποια ελαφρά νέο κωδικό,
αλλά ας δούμε τι σημαίνει αυτό.
Έτσι var div, αυτό σημαίνει απλά να μου δώσει μια μεταβλητή που ονομάζεται div.
Θα μπορούσα να έχω αυτό που ονομάζεται foo, αλλά ήθελα να αποκαλείται div
για λόγους που θα είναι σαφές σε ένα δευτερόλεπτο.
Στη συνέχεια, βγάζει σε JavaScript - και αυτό είναι ενσωματωμένο κώδικα JavaScript στην ιστοσελίδα μου -
υπάρχει μια ειδική παγκόσμια μεταβλητή του είδους που ονομάζεται έγγραφο.
JavaScript είναι στην πραγματικότητα μια αντικειμενοστραφής γλώσσα.
Δεν θα υπεισέλθω σε λεπτομέρειες σε 50 ως προς το τι σημαίνει αυτό,
αλλά τώρα γνωρίζουμε ότι ένα αντικείμενο είναι λίγο πολύ σαν ένα struct.
Όπως είδαμε τον τρόπο πίσω, όταν σε μία από τις πρώτες πρόβλημα θέτει
όπου βάζουμε πολλές πληροφορίες σε ένα struct,
ομοίως έχει καταγράψει μια ειδική struct που έρχεται με το πρόγραμμα περιήγησης,
έρχεται με οποιαδήποτε ιστοσελίδα. Δεν είναι κάτι που έχω δημιουργήσει.
Μέσα από αυτή τη δομή του εγγράφου, όμως, δεν έχετε μόνο τα δεδομένα
αλλά έχετε επίσης λειτουργίες.
>> Και κάθε φορά που έχετε μια λειτουργία μέσα από μια δομή, μέσα από ένα αντικείμενο,
αυτό λέγεται μέθοδος. Αλλά είναι το ίδιο πράγμα.
Μια μέθοδος είναι μια λειτουργία που τυχαίνει να είναι μέσα από κάτι άλλο.
Έτσι, αυτό σημαίνει ότι αυτή η ειδική καθολική μεταβλητή που ονομάζεται έγγραφο
έχει μια λειτουργία που ονομάζεται getElementById που κάνει κυριολεκτικά ότι.
Θα σας πάρει ένα στοιχείο από το DOM, Document Object Model δέντρο,
των οποίων η ταυτότητα είναι σε αυτή την περίπτωση χαιρετισμό.
Με άλλα λόγια, όλο αυτό το διάστημα που περάσαμε στις δομές δεδομένων μπαίνει στο παιχνίδι εδώ.
Αυτή η εικόνα του DOM που είχαμε πριν από λίγο,
ακόμη και αν η σελίδα είναι λίγο διαφορετική, αν είχα ένα div σε αυτή την εικόνα,
document.getElementById τι θα επιστρέψει σε μένα θα είναι αποτελεσματικά ένας δείκτης
στο ορθογώνιο στο δέντρο, μια αναφορά στο ορθογώνιο στο δέντρο.
Έτσι, αυτό είναι τι σημαίνει πραγματικά να καλέσετε μία από αυτές τις λειτουργίες.
Σε αυτή την περίπτωση και πάλι είναι ένα div. Δεν είναι ένα σώμα ή ένα τίτλο.
Ας δούμε λοιπόν τι θα κάνω στη συνέχεια, με την παρούσα div τώρα που το έχω μέσα από αυτό που ονομάζεται μεταβλητή div.
Αποδεικνύεται με JavaScript έχετε τη δυνατότητα να τσιμπιά το CSS της σελίδας σας δυναμικά.
Μέχρι τώρα, όλα τα CSS έχουμε κάνει, αν και περιορισμένη, είναι τα χαρακτηριστικά στυλ,
ή όπου αλλού έχουμε θέσει CSS;
Ι το είδος της χάλασε το ένα. Στην ετικέτα στυλ στην κορυφή του αρχείου.
Ή τρίτη θέση έχει μέσα;
>> Ένα εξωτερικό αρχείο, κάτι. Css.
Έτσι, αυτές είναι οι 3 θέσεις που έχουμε κάνει μέχρι στιγμής CSS,
αλλά η σύλληψη είναι ότι έχουμε σκληρό κωδικοποιούνται όλα.
Μπορείτε αποφάσισε όπως περιστέρι σε PSET 7, αποφασίσαμε πριν διαλέξεις τι CSS μας θα είναι.
Αλλά αν θέλετε να αλλάξετε το CSS σας, μπορείτε να το κάνετε πραγματικά ότι
Μόλις έχετε μια πραγματική γλώσσα προγραμματισμού.
CSS, HTML - όχι γλώσσες προγραμματισμού. JavaScript είναι.
Έτσι, αποδεικνύεται ότι το συντομότερο έχετε ένα από αυτά τα τετράγωνα από το δέντρο
ονομάζεται DOM, η ίδια έχει κάποια στοιχεία στο εσωτερικό του.
Έτσι, το div που μόλις άρπαξε από το δέντρο έχει τι θα καλέσουμε ένα ακίνητο στο εσωτερικό του
ονομάζεται το στυλ, και η ιδιοκτησία έχει το ίδιο στυλ μια ιδιότητα που ονομάζεται ορατότητα.
Θα ήθελα να ξέρω αυτό μόνο με την αναζήτηση ενός χρήστη εγχειρίδιο του CSS.
Αποδεικνύεται ότι υπάρχει μια προβολή CSS ιδιότητα που κάνει ό, τι λέει.
Κάνει κάτι ορατό ή όχι, ορατή ή όχι.
Και πώς θα γίνει αυτό είναι αυτό.
Ρωτάω προγραμματισμού αν η προβολή αυτού του div κρύβεται,
τι μπορώ να αλλάξω το να; Ορατό.
Αλλιώς, αν η ορατότητα αυτής της σελίδας δεν είναι κρυφό, λογικά θα κάνουν το κρυφό.
Δεν έχω καμία ιδέα γιατί είναι ορατές και κρυφές και δεν είναι ορατά και αόρατα.
Αυτό ήταν μια κακή απόφαση σχεδιασμού κατά μήκος του τρόπου.
Αλλά αυτά είναι πράγματι αντίθετα σε CSS: ορατές και κρυφές.
Όλα αυτά δεν είναι αυτό σημαίνει ότι αλλάζει το CSS του αρχείου μου και να σβήνουν, εντός και εκτός
για αυτή τη συγκεκριμένη div.
Αλλά και πάλι, αυτό είναι μια συνάρτηση που ονομάζεται αναλαμπή. Πότε είναι η λειτουργία που ονομάζεται αναλαμπή;
Αποδεικνύεται ότι υπάρχει μια άλλη ειδική καθολική μεταβλητή που ονομάζεται παράθυρο,
παρόμοια στο πνεύμα με το έγγραφο, αλλά ότι το έγγραφο αναφέρεται στην ιστοσελίδα σας,
όπως το δέντρο DOM, η HTML που αποστέλλονται από το διακομιστή,
παράθυρο αναφέρεται στην χρώμιο γύρω από αυτό, η γραμμή διευθύνσεων, η γραμμή τίτλου,
και όλα αυτά τα πράγματα γύρω από την ιστοσελίδα σας.
>> Και αποδεικνύεται ότι το αντικείμενο παράθυρο έχει μια ειδική λειτουργία στο εσωτερικό του ζητούσε setInterval
ότι κάνει ό, τι λέει.
Θα οριστεί ένα χρονικό διάστημα - σε αυτήν την περίπτωση κάθε 500 χιλιοστά του δευτερολέπτου -
και, ρίξτε μια εικασία, τι προτίθεται να πράξει κάθε 500 χιλιοστά του δευτερολέπτου;
Είναι πρόκειται να εκτελέσει αυτή τη λειτουργία αναβοσβήνει.
Και τι ωραίο εδώ είναι ότι θα μπορούσαμε να είχαμε κάνει αυτό σε C, ακόμη και αν ποτέ δεν κάναμε.
C δεν έχουν κάτι που ονομάζεται δείκτες λειτουργία, όπου μπορείτε να περάσετε λειτουργίες γύρω από
ως επιχειρήματα.
Ομοίως, στο JavaScript να περάσετε το όνομα μιας συνάρτησης σε μια άλλη λειτουργία.
Και παρατηρήσετε τι κάνω. Δεν το κάνω αυτό.
Αν έβαλα παρενθέσεις μετά την αναλαμπή, αυτό θα σήμαινε ότι καλείτε τη λειτουργία αναβοσβήνει.
Αν παραλείψουμε τους, αυτό σημαίνει ότι εδώ είναι η λειτουργία αναλαμπής
έτσι ώστε setInterval να το ονομάσουμε κάθε 500 χιλιοστά του δευτερολέπτου.
Έτσι, το τελικό αποτέλεσμα, φρικτό και αν είναι, είναι ότι αν πάω σε localhost και να πάει να blink.html,
Τώρα έχω αυτό συμβαίνει ξανά και ξανά.
Και αν πραγματικά Ελέγξτε Element, ας δούμε αν μπορούμε να δούμε αυτό.
Επιτρέψτε μου να Επιθεωρήστε Element, επιτρέψτε μου να μετακινηθείτε προς τα κάτω ακριβώς λίγο,
επιτρέψτε μου να επιλέξει στοιχεία πάνω από εδώ, και να παρατηρήσετε το DOM εσωτερικό του επιθεωρητή Chrome.
Είναι κυριολεκτικά αλλάζει πέρα ​​δώθε κάθε 500 χιλιοστά του δευτερολέπτου.
Αν πάμε στο φίλο μας Nate,
αν έχετε αναρωτηθεί ποτέ πώς αυτό λειτουργεί, παρόμοια ιδέα με ένα διάστημα,
αλλά Nate κάνει πραγματικά πολύ αποτελεσματική χρήση του χρώματος στη συγκεκριμένη περίπτωση εδώ.
Έτσι, ό, τι περισσότερο μπορούμε πραγματικά να κάνουμε με αυτό;
Ας ανοίξουμε ένα άλλο παράδειγμα και να δοκιμάσετε κάτι
αυτό είναι προγραμματιστικά ακόμη πιο χρήσιμο από ό, τι να κάνει τα πράγματα αναβοσβήνουν.
Επιτρέψτε μου να πάω σε μορφές κατάλογο μας σήμερα και να πάει σε form0.
Αυτό ήταν το πιο άσχημο δυνατή μορφή που θα μπορούσε να καταλήξει με,
και επιτρέψτε μου να σας δείξω ακριβώς τι μοιάζει σε ένα πρόγραμμα περιήγησης.
>> Επιτρέψτε μου να πάω σε localhost / μορφές, και αυτό είναι form0.
Αυτό είναι ένα εξαιρετικά άσχημο HTML μορφή που έχει μερικά πεδία για το email, τον κωδικό πρόσβασης,
κωδικό πρόσβασης, και στη συνέχεια ένα μικρό κουτάκι για να συμφωνήσει με κάποιους όρους και προϋποθέσεις.
Η σύλληψη είναι αν επισκεφτείτε αυτή τη φόρμα και δεν θέλω να σας δώσω τη διεύθυνση ηλεκτρονικού ταχυδρομείου μου,
Δεν θέλω να συμφωνείτε με τους όρους και τις προϋποθέσεις ίσως, μπορώ να κάντε κλικ στην επιλογή Εγγραφή
και αυτό μου δίνει τη δυνατότητα μέσω ούτως ή άλλως.
Αυτό συμβαίνει για να υποβάλει ένα ηλίθιο αρχείο PHP που ονομάζεται dump.php.
Το μόνο που κάνει είναι να εκτυπώσετε τα περιεχόμενα της $ _GET μόνο για διαγνωστικούς σκοπούς.
Αυτό ήταν ό, τι υποβλήθηκε από τον χρήστη μόλις τώρα.
Αλλά ας υποθέσουμε ότι πραγματικά θέλετε να επικυρώσετε την υποβολή φόρμα του χρήστη.
Επιτρέψτε μου να πάω στην έκδοση 1.
Αυτό είναι form1.html. Φαίνεται αισθητικά εξίσου κακό, αλλά παρατηρήσετε πώς είναι φανταχτερό.
Αν κάνω κλικ στο Εγγραφή χωρίς συνεργασία, έχω φώναξε.
"Πρέπει να δώσετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας."
Εντάξει. Έτσι, επιτρέψτε μου να το δοκιμάσω. Έτσι malan@harvard.edu. Δεν χρειάζεστε έναν κωδικό πρόσβασης.
Εγγραφή. "Πρέπει να δώσετε έναν κωδικό πρόσβασης." Εντάξει.
Γι 'αυτό και θα παρέχει έναν κωδικό πρόσβασης των βυσσινί. Εγγραφή.
"Οι κωδικοί πρόσβασης δεν ταιριάζουν." Έχω τώρα να πληκτρολογήσετε βυσσινί εδώ.
Έκανα κατά λάθος ότι ελέγχεται. Εγγραφή.
"Θα πρέπει να συμφωνήσετε με τους όρους και τις προϋποθέσεις." Εντάξει. Συμφωνώ εκεί. Εγγραφή.
Και τώρα μου δείχνει το διαγνωστικό έξοδο εκεί.
>> Λοιπόν, τι ακριβώς συνέβη;
Είχαμε αυτή την ικανότητα για την επικύρωση υποβολές μορφή.
Στην πραγματικότητα, αν έκανε βουτιά σε PSET 7, υπάρχει μια λειτουργία συγγνώμη
που το καθιστά αρκετά εύκολο να φωνάζω στο χρήστη με ένα μήνυμα στην οθόνη.
Είμαι χρησιμοποιώντας ένα ελαφρώς διαφορετικό μηχανισμό, η λειτουργία ειδοποίησης,
η οποία δεν είναι μια λειτουργία που είναι χαμογέλασε μετά από αυτό κάνει πολύ άσχημο μηνύματα των χρηστών.
Αλλά ας δούμε τι κάνω εδώ.
Αυτό είναι form1.html, και παρατηρώ ότι έχω κάποια αρκετά εξοικειωμένοι σύνταξη:
ετικέτα του σώματος, ετικέτα μορφή, χαρακτηριστικό δράσης, χαρακτηριστικό τρόπο.
Αλλά παρατηρήσετε έχω δώσει μορφή μου ένα μοναδικό αναγνωριστικό για την ευκολία.
Στη συνέχεια, έχω ένα email πεδίο του οποίου ο τύπος είναι το κείμενο,
ένα πεδίο του κωδικού πρόσβασης του οποίου ο τύπος είναι ο κωδικός, το πεδίο επιβεβαίωσης του οποίου ο τύπος είναι ο κωδικός,
και στη συνέχεια ένα πλαίσιο ελέγχου του οποίου το όνομα είναι η συμφωνία πάνω από εδώ, ο τύπος είναι πλαίσιο ελέγχου.
Και μετά έχω ένα κουμπί submit.
Αλλά παρατηρήσετε στην κορυφή ό, τι έχω περισσότερο.
Πρώτον, υπάρχει μία άλλη χρήση της ετικέτας σεναρίου.
Αν έχετε κάποιο κώδικα JavaScript σε άλλο αρχείο, όπως ακριβώς και με CSS μπορείτε να τη συμπεριλάβετε.
Και να το κάνεις αυτό με πηγή το σενάριο, και στη συνέχεια να παρατηρήσετε είμαι συνδέει προφανώς
να googleapis.com σε μια πολύ μεγάλη διαδρομή, αλλά το όνομα του αρχείου του οποίου τελειώνει σε jquery.min
για ελάχιστο. js.
jQuery είναι ένα σούπερ δημοφιλής βιβλιοθήκη για JavaScript που κάνει ακριβώς το JavaScript
όλο και πιο φιλική προς το χρήστη να χρησιμοποιήσει.
Είναι πράγματι γίνει ένα de facto πρότυπο.
Έτσι ακόμα κι αν αυτό που είστε έτοιμος να δείτε δεν είναι καθαρό το JavaScript per se,
είναι μια βιβλιοθήκη στην κορυφή της JavaScript μοιάζει πολύ με την βιβλιοθήκη CS50 είναι ένα στρώμα
στην κορυφή του χαμηλού επιπέδου κώδικα C? η πραγματικότητα είναι σχεδόν όλοι στο Internet που χρησιμοποιεί.
Έτσι, αυτά δεν είναι βοηθητικές ρόδες. Αυτό είναι ακριβώς βέλτιστη πρακτική αυτές τις μέρες.
Τώρα παρατηρήσετε κάτω από αυτό είναι δική μου ετικέτα script, και παρατηρήστε τι έχω κάνει εδώ.
Αποδεικνύεται ότι jQuery κάνει κάτι λίγο φαντασία.
JavaScript έχει σύμβολα δολαρίου, αλλά είναι χωρίς νόημα.
>> Είναι σαν το γράμμα Α ή Β ή Γ.
jQuery έχει υιοθετήσει απλώς τη σύμβαση ή το είδος των τοποθετημένη αξίωση στο γεγονός
ότι θα είναι $ ειδικό σύμβολο τους.
Έτσι, μόλις φορτώσει αυτό το παγκόσμιο αρχείο JavaScript εδώ με την ετικέτα script,
έχετε πρόσβαση σε μια ειδική παγκόσμια μεταβλητή που λέγεται $.
Είναι πιο σωστά ονομάζεται jQuery, αλλά αυτό δεν φαίνεται σχεδόν τόσο προκλητική όσο $.
Αλλά $ δεν έχει ιδιαίτερη σημασία. Στην PHP είχε ιδιαίτερη σημασία.
Θα έπρεπε να το έχετε μπροστά σε μια μεταβλητή.
Αυτό είναι μόνο ένα σέξι πράγμα που πήραν επάνω.
Τι συμβαίνει εδώ;
Παρατηρήστε Είμαι περνώντας στο jQuery λειτουργία καθολική μεταβλητή έγγραφό μου
και τότε είμαι καλώντας. έτοιμος.
Τι jQuery δεν είναι ουσιαστικά σας επιτρέπει να πάρετε κάποια πράγματα βανίλια JavaScript
όπως και το αντικείμενο εγγράφου, το αντικείμενο παράθυρο,
και αν πρέπει να το δώσετε σε jQuery με την λειτουργία -
και πάλι, να είναι σαφής, αυτό είναι μια λειτουργία που ονομάζεται jQuery -
αυτό που κάνει είναι να επιστρέφει σε μια ειδική έκδοση του εγγράφου
η οποία έχει περισσότερες λειτουργίες που σχετίζονται με αυτό.
Έτσι, στις πρώτες JavaScript δεν υπάρχει έτοιμο λειτουργία,
αλλά αν περάσουν έγγραφο με το jQuery λειτουργία πρώτα,
επιστρέφει σε μια ειδική έκδοση του αντικειμένου εγγράφου
που έχει πιο φανταχτερά χαρακτηριστικά.
Και γι 'αυτό οι άνθρωποι αρέσει. Κάνει ακριβώς τα πράγματα πιο εύκολο να κάνουμε, όπως είμαστε για να δούμε.
Έτσι, αυτό που κάνει αυτή τη γραμμή του κώδικα σημαίνει;
Αυτή η γραμμή κώδικα σημαίνει εδώ, όταν το έγγραφο είναι έτοιμο -
Με άλλα λόγια, όταν το πρόγραμμα περιήγησης γίνεται ανάγνωση αυτού του αρχείου πάνω προς τα κάτω -
να προχωρήσει και να εκτελέσει την ακόλουθη λειτουργία.
Αυτό που είναι πραγματικά ενδιαφέρον σε JavaScript - και η PHP έχει αυτό, καθώς και -
είναι ανώνυμη λειτουργίες.
Στο JavaScript μπορείτε να δηλώσετε λειτουργίες που δεν έχουν όνομα, αλλά έχουν ένα σώμα.
Παρατηρήστε τι συμβαίνει εδώ.
>> Πρόκειται για μια λειτουργία που ονομάζεται έτοιμος, και αυτό σημαίνει απλά να κάνετε τα εξής
όταν ολόκληρη η ιστοσελίδα είναι έτοιμη, όταν είναι όλα έχουν διαβάζονται από το διακομιστή.
Τι θέλετε να κάνετε; Θέλω να εκτελέσει ένα κομμάτι του κώδικα.
Παρατηρήστε ότι δεν θέλουμε να εκτελέσει αυτόν τον κώδικα αμέσως.
Αν παραλειφθεί αυτή, αυτό θα σήμαινε να αρχίσει αμέσως την εκτέλεση αυτών των γραμμών του κώδικα.
Αλλά το γεγονός ότι εγώ λέω όχι, όχι, όχι, τυλίξτε το σε μια ανώνυμη συνάρτηση, όπως αυτό
μέσα δεν το εκτελέσει ακόμα? ονομάσουμε τελικά.
Είδαμε πριν από λίγο στο προηγούμενο παράδειγμα φόρμα μας.
Ποια λειτουργία δεν λέμε τελικά, 500 χιλιοστά του δευτερολέπτου αργότερα; Blink.
Έτσι, η ίδια ιδέα.
Και πάλι, ακόμη και αν αυτό φαίνεται λίγο παράξενο, μόλις λάβει τώρα για την πίστη
να δηλώσει ότι μια ανώνυμη συνάρτηση που ονομάζεται τελικά,
μπορείτε να γράψετε απλά λειτουργία () {
Λοιπόν, τι κώδικα θα πάμε να εκτελέσει τελικά; Το παρακάτω.
Αυτό φαίνεται πάρα πολύ λίγο νέο, αλλά αυτό σημαίνει ότι εδώ είναι το jQuery λειτουργία,
και αυτό είναι τώρα μια συντόμευση.
Αυτό το απόσπασμα του κώδικα HTML στο κάτω μέρος της οθόνης βέβαια έχει κάποια αναπαράσταση δέντρων.
Δεν είναι αυτό. Αυτή η σελίδα είναι πιο ενδιαφέρουσα από ό, τι αυτή γειά σου, τον κόσμο παράδειγμα.
Αλλά υπάρχει κάποιο δέντρο που αντιστοιχεί σε αυτό το HTML.
Θα ήταν ένας πόνος στο λαιμό να πρέπει να εφαρμόσει κάποιο είδος αναδρομική συνάρτηση
να ξεκινούν από τον κόμβο ρίζα και στη συνέχεια να βρει τον κόμβο του οποίου είναι η εγγραφή ID.
Έτσι, αυτό που κάνει jQuery εξαιρετικά εύκολο για μας είναι κυριολεκτικά αυτό.
Πήγαινε και φέρε μου ανεξαρτήτως div μορφή ή οτιδήποτε άλλο, όποια και αν είναι HTML στοιχείο
έχει ένα αναγνωριστικό της εγγραφής.
Αυτό είναι ισοδύναμο με document.getElementById («καταχώριση»).
>> Γιατί οι άνθρωποι όπως jQuery;
Επειδή είναι μικρότερη για να πληκτρολογήσετε. Αλλά αυτό είναι το μόνο που είναι. Είναι η ίδια ιδέα.
Φέρε μου την ετικέτα του οποίου είναι η εγγραφή ID.
Και όταν αυτή η ετικέτα, η οποία συμβαίνει να είναι μια μορφή, υποβάλλεται,
να προχωρήσει και να εκτελέσει αυτόν τον κώδικα.
Έτσι, ας ρίξουμε μια ματιά στο πώς τώρα κάνουμε την επικύρωση μορφή.
Η σύνταξη είναι ομολογουμένως αινιγματικό στην αρχή, αλλά τι συμβαίνει;
Αν αυτή η γραμμή του κώδικα είναι αλήθεια, είμαι πρόκειται να φωνάζω στο χρήστη να παράσχει του ή την διεύθυνση ηλεκτρονικού ταχυδρομείου.
Έτσι ποια είναι αυτή η γραμμή του κώδικα;
$ Σημαίνει jQuery. Τώρα παρατηρήσετε αυτό.
Αυτό είναι το είδος του όπως CSS.
Αν έχετε βουτήξει σε CSS ακόμη, θα ξέρετε ότι αυτό σημαίνει ότι το στοιχείο των οποίων είναι η εγγραφή ID.
Ο χώρος σημαίνει βρει ένα παιδί ή έναν απόγονο της εγγραφής του οποίου το όνομα είναι η είσοδος.
Και τότε αυτό το πράγμα σε αγκύλες είναι ένα μικρό φίλτρο.
Και ακόμα κι αν αυτό φαίνεται αινιγματικό, αυτό σημαίνει απλά πηγαίνετε στη φόρμα των οποίων είναι η εγγραφή ID,
πηγαίνετε στο εσωτερικό στοιχείο εισόδου του ότι το όνομα του οποίου είναι e-mail,
και στη συνέχεια να πάρει την αξία του, ανεξάρτητα από την αξία του συμβαίνει να είναι -
asdf αν αυτό είναι το μόνο που μπορώ δακτυλογραφημένες ή malan@harvard.edu αν αυτό είναι ό, τι πληκτρολογείτε.
Έτσι, αν η τιμή του πεδίου e-mail == τίποτα της φόρμας, φωνάζω στο χρήστη.
Αλλιώς, αν η τιμή του πεδίου κωδικού πρόσβασης == τίποτα, φωνάζω στο χρήστη.
>> Αλλιώς, αν η τιμή του πεδίου κωδικού πρόσβασης δεν ισούται με την τιμή του πεδίου επιβεβαίωση,
που ήταν το άλλο στοιχείο φόρμας, φωνάζω στο χρήστη.
Και στη συνέχεια, τέλος - και αυτό έχει πάρα πολύ κάποια νέα σύνταξη της δικής του,
αλλά από τη στιγμή που έχετε δει, είναι τουλάχιστον λίγο πιο λογικό -
αλλιώς, αν η μορφή της οποίας είναι η εγγραφή ID έχει ένα στοιχείο εισόδου του οποίου το όνομα είναι η συμφωνία
και να ελέγχεται, να προχωρήσει και να φωνάζω στο χρήστη.
Γι 'αυτό και εντελώς παραδεχτώ αυτό είναι εντελώς συντριπτική με την πρώτη ματιά.
Είναι μια πολύ νέα σύνταξη. Αλλά όλα jQuery ακολουθεί αυτά τα είδη των προτύπων.
Και ειλικρινά, εγώ δεν γνωρίζουν καν αυτό υπήρχε μέχρι πριν από λίγα λεπτά.
Έψαξα στο Google, «Πώς μπορείτε να ελέγξετε αν ένα κουτάκι ελέγχεται σε jQuery;"
και αυτή είναι η σύνταξη, γιατί υπάρχουν διάφοροι τρόποι για να γίνει αυτό
με τις πραγματικές πρώτες κώδικα JavaScript.
Έτσι, η πρώτη σελίδα του Set Πρόβλημα 7 τονίζει,
PSET 7 είναι πάρα πολύ μια άσκηση στην bootstrapping τον εαυτό σας
όπου έχουμε υπό τον όρο, ελπίζω ένα εννοιολογικό πλαίσιο με το οποίο για την αντιμετώπιση της PSET.
>> Αλλά, όπως συμβαίνει συχνά με το web design, είναι στο χέρι σας πραγματικά να σακί γύρω,
ενσωματώσει τμήματα κώδικα και παραδείγματα από το διαδίκτυο εφ 'όσον τους αναφέρω
σύμφωνα με τους όρους σε αυτό το πρώτο φύλλο,
και να συνειδητοποιήσουν ότι η εκμάθηση HTML, CSS, JavaScript, ακόμη και SQL
είναι πραγματικά γραφτό να γίνει αυτό στο σπίτι άσκηση καθώς αρχίζουμε να λάβει αυτές τις ρόδες μακριά.
Και συνειδητοποιούν ότι υπάρχει πάρα πολύ τόσα πολλά άλλα πράγματα που μπορείτε να κάνετε με ένα πρόγραμμα περιήγησης.
Μέσα από τα περισσότερα από αυτά τα στοιχεία υπάρχουν και άλλα πράγματα που ονομάζονται χειρισμού συμβάντων.
Και ακόμα κι αν εμείς απλά κοίταξε αυτά ονομάζονται onsubmit και onready,
μπορείτε να κάνετε πράγματα όπως onkeydown, onkeyup,
όπως όταν ο χρήστης αγγίζει ένα πλήκτρο, μπορείτε να ακούσετε γι 'αυτό και το κλειδί επάνω.
Το Gmail έχει συντομεύσεις πληκτρολογίου.
Πώς το Google εφαρμόζει τις συντομεύσεις πληκτρολογίου, όπως C για συνθέτουν;
Ακούν για εκδηλώσεις, όπως και αν ονομάζεται, όπως onkeypress ή onkeyup και onkeydown.
Αν έχετε ποτέ κυμαινόταν το ποντίκι σας πάνω από κάποιο μενού
και ξαφνικά, voila, εμφανίζεται ένα μενού ή το γραφικό αλλάζει χρώμα,
πώς θα το κάνουμε αυτό;
Αντί να ακούσουν για onready ή onsubmit, μπορείτε να ακούσετε για onmouseover ή onMouseOut.
>> Έτσι, με λίγα λόγια, με αυτά τα πολύ απλά βασικά που έχουμε αρχίσει να το μηδέν στην επιφάνεια του σήμερα
και θα βουτήξετε σε περαιτέρω για την Τετάρτη, έχετε, όλο και περισσότερο,
εξουσία για να εφαρμόσει τα είδη των πραγμάτων που είστε ήδη εξοικειωμένοι με.
Ας τελειώνει εκεί, και θα συνεχίσουμε αυτή την Τετάρτη.
>> [CS50.TV]