1 00:00:00,000 --> 00:00:09,780 >> [Παίζει μουσική] 2 00:00:09,780 --> 00:00:11,150 >> ZAMYLA CHAN: Ας αντιμετωπίσουμε ανακάμψει. 3 00:00:11,150 --> 00:00:14,030 Ανάκτηση είναι ίσως το αγαπημένο μου PSET, και κυρίως γιατί πιστεύω ότι είναι 4 00:00:14,030 --> 00:00:15,650 πραγματικά, πραγματικά δροσερό. 5 00:00:15,650 --> 00:00:19,040 Βασικά, σας δίνεται μια μνήμη αρχείο κάρτα στην οποία 6 00:00:19,040 --> 00:00:20,900 Οι φωτογραφίες έχουν διαγραφεί. 7 00:00:20,900 --> 00:00:23,650 Αλλά αυτό που πρόκειται να κάνουμε είναι να ανακτήσει όλα αυτά. 8 00:00:23,650 --> 00:00:24,250 >> OK. 9 00:00:24,250 --> 00:00:28,230 Έτσι, είναι πραγματικά συναρπαστικό, αλλά ίσως λίγο εκφοβιστικό, επειδή είστε 10 00:00:28,230 --> 00:00:32,430 δίνεται ένα άδειο αρχείο C και θα πρέπει να συμπληρώσετε in 11 00:00:32,430 --> 00:00:36,250 Εντάξει, ας σπάσει αυτό σε διαχειρίσιμα τμήματα. 12 00:00:36,250 --> 00:00:38,160 Θα θέλετε να ανοίξετε το αρχείων της κάρτας μνήμης. 13 00:00:38,160 --> 00:00:39,900 Αυτό φαίνεται αρκετά απλό. 14 00:00:39,900 --> 00:00:43,030 Στη συνέχεια, βρείτε την αρχή μιας εικόνας JPG. 15 00:00:43,030 --> 00:00:46,740 Όλα τα αρχεία σε αυτή τη μνήμη κάρτα πρόκειται να είναι JPGs. 16 00:00:46,740 --> 00:00:50,840 Στη συνέχεια, τη στιγμή που θα βρείτε την αρχή, θα πάμε να ανοίξει ένα νέο JPG, ότι 17 00:00:50,840 --> 00:00:57,610 είναι, όπως, να δημιουργήσετε ένα JPG, και να γράψει 512 byte κάθε φορά μέχρι ένα νέο JPG είναι 18 00:00:57,610 --> 00:01:02,930 βρέθηκε, και τελειώνει το πρόγραμμα, τη στιγμή που εντοπίσετε το τέλος του αρχείου. 19 00:01:02,930 --> 00:01:06,400 >> Έτσι, τα πρώτα βήματα πρώτη είναι να ανοίξετε το αρχείο της κάρτας μνήμης. 20 00:01:06,400 --> 00:01:09,850 Αλλά ξέρετε ήδη αυτό, και υπάρχει ένα αρχείο λειτουργία I / O που πρόκειται να 21 00:01:09,850 --> 00:01:12,030 να αποδειχθεί πολύ χρήσιμο. 22 00:01:12,030 --> 00:01:12,820 OK. 23 00:01:12,820 --> 00:01:14,760 Λοιπόν, τι είναι JPGs; 24 00:01:14,760 --> 00:01:16,330 Επειδή χρειαζόμαστε στην αρχή αυτή. 25 00:01:16,330 --> 00:01:21,310 Λοιπόν, JPGs, ακριβώς όπως χάρτες bit, είναι μόνο ακολουθίες από bytes. 26 00:01:21,310 --> 00:01:30,660 Ευτυχώς, κάθε JPG ξεκινά είτε με 0xff, 0xd8, 0xff, 0xE0, μία αλληλουχία 27 00:01:30,660 --> 00:01:33,610 των bytes, ή άλλο ακολουθία των bytes. 28 00:01:33,610 --> 00:01:37,250 >> Έτσι, αυτά τα τέσσερα bytes δείχνουν η αρχή μιας JPG. 29 00:01:37,250 --> 00:01:40,780 Κανένας, εκτός από αυτές τις δύο συνδυασμοί τεσσάρων bytes. 30 00:01:40,780 --> 00:01:44,840 Και ευτυχώς για μας, ένα άλλο γεγονός ότι μπορούν να επωφεληθούν από είναι ότι κάθε 31 00:01:44,840 --> 00:01:48,550 JPG αποθηκεύεται side-by-side στην κάρτα μνήμης. 32 00:01:48,550 --> 00:01:52,210 Έχω εκπροσώπησε την δομή ενός κάρτα μνήμης σχηματικά σε αυτό 33 00:01:52,210 --> 00:01:53,310 σύρετε εδώ. 34 00:01:53,310 --> 00:01:59,270 Εδώ, κάθε πλατεία, κάθε ορθογώνιο, αντιπροσωπεύει 512 bytes, και αρχίζει 35 00:01:59,270 --> 00:02:01,750 με γκρι στο ότι εμείς δεν κάνουμε πραγματικά έχουν JPG. 36 00:02:01,750 --> 00:02:05,700 >> Στη συνέχεια, όμως τελικά χτύπησε την ένα μπλοκ με ένα αστέρι. 37 00:02:05,700 --> 00:02:10,940 Αυτό σημαίνει ότι τα τέσσερα πρώτα bytes έξω από αυτούς 512 είναι ένα από τα δύο 38 00:02:10,940 --> 00:02:13,230 ξεκινώντας ακολουθίες της JPG. 39 00:02:13,230 --> 00:02:17,340 Και πάμε από εκεί, και στη συνέχεια μία φορά ένα JPG τελειώνει, αρχίζει η άλλη. 40 00:02:17,340 --> 00:02:20,990 Δεν έχουμε ποτέ πια γκρίζο χώρο στο ενδιάμεσο. 41 00:02:20,990 --> 00:02:25,550 >> Αλλά πώς μπορούμε να διαβάσει πραγματικά αυτό, και διαβάστε τις 512 bytes έτσι ώστε να μπορούμε να κάνουμε 42 00:02:25,550 --> 00:02:27,500 η σύγκριση την πρώτη θέση; 43 00:02:27,500 --> 00:02:33,470 Λοιπόν, ας πάμε πίσω στο fread, η οποία παίρνει στο struct που θα περιέχει 44 00:02:33,470 --> 00:02:34,470 τα bytes που διαβάζετε. 45 00:02:34,470 --> 00:02:36,570 Έτσι θα πάμε να θέσει εκείνες εκεί - 46 00:02:36,570 --> 00:02:42,192 το μέγεθος, τον αριθμό και, στη συνέχεια inpointer ότι είστε ανάγνωση από. 47 00:02:42,192 --> 00:02:49,900 Τώρα, θέλουμε να διαβάσει 512 σε έναν χρόνο, και θέλουμε να αποθηκεύσουμε αυτή σε ένα ρυθμιστικό, 48 00:02:49,900 --> 00:02:50,700 Πάω να το ονομάσουμε. 49 00:02:50,700 --> 00:02:54,100 >> Βασικά, θα πάμε να κρατήσει σε αυτά τα 512 bytes και να κάνει 50 00:02:54,100 --> 00:02:55,500 πράγματα με αυτό, έτσι δεν είναι; 51 00:02:55,500 --> 00:02:58,260 Είμαστε είτε πρόκειται να συγκρίνει το πρώτο τέσσερα bytes, ή θα πάμε να 52 00:02:58,260 --> 00:02:59,830 διαβάστε το, εντάξει; 53 00:02:59,830 --> 00:03:05,050 Έτσι, τότε ο δείκτης δεδομένα στη συνέχεια θα χρησιμεύσει ως ρυθμιστικό σας, και η 54 00:03:05,050 --> 00:03:07,745 inpointer, καλά, αυτό ακριβώς πρόκειται να είναι κάρτα μνήμης σας. 55 00:03:07,745 --> 00:03:09,500 >> Back to our σχηματική κάρτα μνήμης. 56 00:03:09,500 --> 00:03:14,690 Εμείς πάμε για να διαβάσει 512 byte σε μια στιγμή, αποθήκευση κάθε μπλοκ 512-byte 57 00:03:14,690 --> 00:03:19,190 σε ένα buffer, κρατώντας επάνω σε αυτούς που buffer, αυτά τα 512 bytes, μέχρι να μάθουμε 58 00:03:19,190 --> 00:03:22,000 ακριβώς τι να τους κάνουμε. 59 00:03:22,000 --> 00:03:25,960 Έτσι, η αρχή δεν είναι τίποτα, έτσι θα διαβάσει το ρυθμιστικό, το συγκρίνετε, και 60 00:03:25,960 --> 00:03:28,160 δεν θα χρειαστεί να κάνετε τίποτα με αυτό. 61 00:03:28,160 --> 00:03:32,030 Και τότε, χτύπησε τελικά ένα αστέρι μπλοκ, πράγμα που σημαίνει ότι έχουμε 62 00:03:32,030 --> 00:03:33,630 βρέθηκε για πρώτη φορά μας JPG. 63 00:03:33,630 --> 00:03:36,560 Έτσι, το ρυθμιστικό κατέχει τώρα bytes από την εν λόγω JPG. 64 00:03:36,560 --> 00:03:40,220 >> Την επόμενη φορά 512 bytes, επειδή είναι και όχι ένα εμπόδιο αστέρι, είναι επίσης 65 00:03:40,220 --> 00:03:41,740 μέρος αυτής JPG. 66 00:03:41,740 --> 00:03:47,630 Και JPGs είναι συνεχείς από εκεί μέσα, μέχρι να χτυπήσει το επόμενο JPG. 67 00:03:47,630 --> 00:03:51,880 Και στη συνέχεια το ρυθμιστικό διάλυμα, στη συνέχεια, κατέχει 512 bytes για το συγκεκριμένο JPG, και 68 00:03:51,880 --> 00:03:53,580 ούτω καθεξής, και ούτω καθεξής. 69 00:03:53,580 --> 00:03:54,250 OK. 70 00:03:54,250 --> 00:03:58,980 >> Έτσι, τη στιγμή που θα χτυπήσει το πρώτο αστέρι μπλοκ, η πρώτη JPG, πώς το κάνεις 71 00:03:58,980 --> 00:04:01,910 στην πραγματικότητα, καλά, να το ανοίξετε; 72 00:04:01,910 --> 00:04:04,990 Ας κάνουμε μια νέα JPG. 73 00:04:04,990 --> 00:04:08,846 Τα ονόματα των αρχείων για JPG πρόκειται να να είναι στη μορφή, τον αριθμό, τον αριθμό, 74 00:04:08,846 --> 00:04:13,830 number.jpg, δεδομένου ότι είναι το όνομά του σε η σειρά με την οποία βρίσκονται, 75 00:04:13,830 --> 00:04:14,780 ξεκινώντας από 0. 76 00:04:14,780 --> 00:04:19,890 >> Έτσι, το πρώτο που θα JPG θα βρείτε 000.jpg. 77 00:04:19,890 --> 00:04:26,560 Έτσι, ίσως μια καλή ιδέα να παρακολουθείτε πόσα JPGs έχετε βρει μέχρι τώρα. 78 00:04:26,560 --> 00:04:27,610 Έτσι, αυτό είναι το όνομα του αρχείου. 79 00:04:27,610 --> 00:04:29,660 Αλλά πώς κάνετε πραγματικά αυτό; 80 00:04:29,660 --> 00:04:34,310 Λοιπόν, θα πάμε να χρησιμοποιήσετε ένα λειτουργία που ονομάζεται sprintf. 81 00:04:34,310 --> 00:04:38,260 Ένα μικρό κομμάτι παρόμοιο με printf, όπου μπορείτε να χρησιμοποιήσετε σύμβολα κράτησης θέσης για έγχορδα, 82 00:04:38,260 --> 00:04:42,420 εκτός στην περίπτωση αυτή, sprintf θα εκτυπώσει το αρχείο έξω στην τρέχουσα 83 00:04:42,420 --> 00:04:45,550 κατάλογο, όχι μέσα στο τερματικό. 84 00:04:45,550 --> 00:04:46,120 >> OK. 85 00:04:46,120 --> 00:04:49,950 Έτσι, εδώ βλέπουμε ότι έχουμε τον τίτλο, μια χαρα πίνακα που θα αποθηκεύει το 86 00:04:49,950 --> 00:04:55,120 προκύπτουσα σειρά, και περνάμε στην τον τίτλο του πραγματικού συμβολοσειράς με 87 00:04:55,120 --> 00:04:58,720 κράτησης θέσης, όπως και εμείς απλά έχουμε μάθει να κάνει με την printf. 88 00:04:58,720 --> 00:05:05,530 Αλλά αυτός ο κώδικας που έχω εδώ θα δώσει 2.jpg, δεν 002.jpg. 89 00:05:05,530 --> 00:05:09,920 Έτσι, θα αφήσω σε εσάς να μάθετε πώς να τροποποιήσετε το σύμβολο κράτησης θέσης για να κάνει το 90 00:05:09,920 --> 00:05:11,920 σωστό όνομα. 91 00:05:11,920 --> 00:05:12,610 >> OK. 92 00:05:12,610 --> 00:05:17,390 Έτσι, αφού έχετε sprintf'd τότε μπορείτε να ανοίξετε το αρχείο, επειδή υπάρχει σε 93 00:05:17,390 --> 00:05:22,690 σας κατάλογο, με fopen, χρησιμοποιώντας το τίτλο, και στη συνέχεια, ανεξάρτητα από τον τρόπο που θέλετε 94 00:05:22,690 --> 00:05:25,140 να ανοίξετε το αρχείο μέσα 95 00:05:25,140 --> 00:05:30,260 Έτσι, τώρα που έχουμε ανοίξει ένα νέο αρχείο JPG, τώρα μπορούμε να γράψουμε 512 bytes σε ένα 96 00:05:30,260 --> 00:05:33,320 ώρα, μέχρι να βρεθεί μια νέα JPG. 97 00:05:33,320 --> 00:05:36,640 Έτσι, ας ρίξουμε μια άλλη ματιά κατά τη σύνταξη του fwrite. 98 00:05:36,640 --> 00:05:40,060 >> Ξέρω ότι δείχνω αυτήν τη διαφάνεια α πολλά, αλλά θέλω μόνο να βεβαιωθείτε ότι 99 00:05:40,060 --> 00:05:43,530 εσείς δεν παίρνουν πάρα πολύ σύγχυση, επειδή Ξέρω ότι είναι πολύ εύκολο να 100 00:05:43,530 --> 00:05:47,000 ανακατεύουμε μέχρι το πρώτο και το τελευταίο επιχείρημα, ειδικότερα. 101 00:05:47,000 --> 00:05:54,390 Αλλά να θυμάστε ότι είστε γραπτώς από buffer σας σε εικόνες από το αρχείο. 102 00:05:54,390 --> 00:05:59,250 >> Τώρα που ξέρετε πώς η εγγραφή 512 bytes στο αρχείο JPG σας ότι έχετε 103 00:05:59,250 --> 00:06:03,230 δημιουργήθηκε, καλά, θέλουμε να το σταματήσουμε αυτό διαδικασία από τη στιγμή που έχουμε φτάσει στο τέλος της 104 00:06:03,230 --> 00:06:06,720 κάρτα μας, γιατί δεν θα υπάρξει οποιεσδήποτε άλλες εικόνες για να βρεθεί. 105 00:06:06,720 --> 00:06:10,760 Οπότε ας πάμε πίσω στο fread για μια ακόμη φορά, το υπόσχομαι. 106 00:06:10,760 --> 00:06:15,600 fread επιστρέφει το πλήθος των στοιχείων του μεγέθους, μέγεθος, ήσαν έτοιμοι με επιτυχία. 107 00:06:15,600 --> 00:06:19,440 Ιδανικά, αυτό θα είναι ό, τι θα περάσει για τον αριθμό, έτσι δεν είναι; 108 00:06:19,440 --> 00:06:24,140 Επειδή είστε προσπαθεί να διαβάσει τον αριθμό των στοιχείων του μεγέθους, το μέγεθος. 109 00:06:24,140 --> 00:06:29,380 Αλλά αν fread δεν είναι σε θέση να διαβάσει ότι αριθμό των στοιχείων, τότε θα επιστρέψει 110 00:06:29,380 --> 00:06:32,530 ό αριθμός διάβασε. 111 00:06:32,530 --> 00:06:36,310 >> Τώρα, ένα σημαντικό πράγμα που πρέπει να σημειωθεί είναι ότι εάν χρησιμοποιείτε ένα άλλο αρχείο I / O 112 00:06:36,310 --> 00:06:43,860 λειτουργούν σαν fgetc, θα επιστρέψει επίσης πόσα στοιχεία το διαβάσετε με επιτυχία. 113 00:06:43,860 --> 00:06:48,000 Τι είναι χρήσιμο για αυτή τη λειτουργία είναι ότι εάν χρησιμοποιείτε τις λειτουργίες μέσα από ένα 114 00:06:48,000 --> 00:06:53,190 κατάσταση, θα εκτελέσει η ίδια, ενώ καθορισμού του εν λόγω κατάσταση, η οποία είναι 115 00:06:53,190 --> 00:06:54,340 μόνο πραγματικά χρήσιμο. 116 00:06:54,340 --> 00:07:00,440 Έτσι, αν έχετε αυτό προϋποθέσεις, ας πούμε, αν fread buffer, sizeof DOG, 2, 117 00:07:00,440 --> 00:07:04,870 δείκτη, ισούται ισούται με 1, η σημαίνει ότι θα ήθελα να διαβάσετε 118 00:07:04,870 --> 00:07:06,540 2 σκύλοι κατά τον χρόνο. 119 00:07:06,540 --> 00:07:13,490 Αλλά αν fread επιστρέφει 1 αντί του 2 ως Αναμένεται, αυτό σημαίνει ότι υπάρχουν 2 120 00:07:13,490 --> 00:07:16,480 σκύλοι αριστερά στο αρχείο μου, αλλά 1. 121 00:07:16,480 --> 00:07:22,450 Αλλά αν επιστρέψει 2, τότε έχω ακόμα αυτά τα 2 σκυλιά στο εσωτερικό του ρυθμιστικού μου. 122 00:07:22,450 --> 00:07:26,280 >> Έτσι τώρα που σας δίνει μια αίσθηση για το πώς να ελέγξτε για το τέλος του αρχείου, αλλά 123 00:07:26,280 --> 00:07:28,940 ας περάσουν τώρα τη λογική. 124 00:07:28,940 --> 00:07:32,460 Πώς μπορούμε πραγματικά κομμάτι όλων από αυτά τα στοιχεία μαζί; 125 00:07:32,460 --> 00:07:36,880 Μόλις χτυπήσει το πρώτο μας JPG, δεδομένου γνωρίζουμε ότι JPGs αποθηκεύονται 126 00:07:36,880 --> 00:07:40,910 συνεχόμενα, θα πρέπει να γράφει μέχρι φτάνουμε στο τέλος του αρχείου της κάρτας. 127 00:07:40,910 --> 00:07:43,950 Αλλά δεν θέλετε να γράψετε τίποτα μέχρι τότε. 128 00:07:43,950 --> 00:07:48,710 Γι 'αυτό έχει σημασία, όχι μόνο ότι είμαστε στο η αρχή μιας νέας JPG, αλλά αν 129 00:07:48,710 --> 00:07:50,655 έχουμε ήδη βρει ένα αρχείο JPG ή όχι. 130 00:07:50,655 --> 00:07:55,390 >> Αν Είναι η αρχή μιας νέας JPG, θα θέλετε να κλείσετε το τρέχον αρχείο JPG μας, αν 131 00:07:55,390 --> 00:07:59,110 έχουμε μία ανοικτή και ανοικτή ένα νέο να γράψετε στο. 132 00:07:59,110 --> 00:08:03,340 Αν δεν είναι η αρχή της νέας JPG, όμως, θα συνεχίσουμε το ίδιο αρχείο JPG 133 00:08:03,340 --> 00:08:05,910 ανοίξετε και να γράψετε σε αυτό. 134 00:08:05,910 --> 00:08:10,100 Θα γράψω ρυθμιστικό μας σε οποιαδήποτε JPG αρχείο έχουμε ανοιχτά, με την προϋπόθεση ότι 135 00:08:10,100 --> 00:08:12,120 έχουμε μία ανοικτή, φυσικά. 136 00:08:12,120 --> 00:08:16,190 Αν δεν έχουμε βρει την πρώτη μας JPG όμως, δεν γράφουμε τίποτα. 137 00:08:16,190 --> 00:08:20,290 Και αυτή η διαδικασία συνεχίζεται μέχρι να φτάσει στο τέλος του αρχείου της κάρτας. 138 00:08:20,290 --> 00:08:23,410 >> Και τέλος, θα θελήσετε να κάνετε βεβαιωθείτε ότι έχετε οποιαδήποτε fclose 139 00:08:23,410 --> 00:08:25,800 αρχεία που έχετε fopened. 140 00:08:25,800 --> 00:08:28,360 Μόλις είστε άνετοι με το έννοιες, ρίξτε μια ματιά σε μερικά 141 00:08:28,360 --> 00:08:30,840 ψευδοκώδικα, που έχω περιλαμβάνονται εδώ. 142 00:08:30,840 --> 00:08:34,830 Κατ 'αρχάς, θέλετε να ανοίξετε το αρχείο της κάρτας, και στη συνέχεια επαναλάβετε την ακόλουθη διαδικασία 143 00:08:34,830 --> 00:08:37,144 μέχρι να έχετε φτάσει το άκρο της κάρτας. 144 00:08:37,144 --> 00:08:40,880 Θέλετε να διαβάσετε 512 bytes σε ένα ρυθμιστικό διάλυμα. 145 00:08:40,880 --> 00:08:43,934 Χρησιμοποιώντας αυτό το ρυθμιστικό, θα θελήσετε να ελέγξετε αν είστε στην αρχή ενός 146 00:08:43,934 --> 00:08:45,300 νέα JPG ή όχι. 147 00:08:45,300 --> 00:08:48,400 Και η απάντηση στο ερώτημα αυτό θα επηρεάζουν τη διαχείριση των αρχείων σας - 148 00:08:48,400 --> 00:08:51,940 το οποίο τα αρχεία που ανοίγετε, η οποία αυτά που δεν μπορείτε να κλείσετε. 149 00:08:51,940 --> 00:08:55,220 >> Στη συνέχεια, έχετε ήδη βρει ένα JPG; 150 00:08:55,220 --> 00:08:57,740 Πώς έχετε διατηρώντας παρακολουθείτε αυτό; 151 00:08:57,740 --> 00:09:01,735 Στη συνέχεια, ανάλογα με αυτό, είτε θα γράφουν στην τρέχουσα JPG που θα 152 00:09:01,735 --> 00:09:07,090 έχουν ανοικτές, ή να μην το γράψω καθόλου, επειδή δεν έχετε βρει ένα JPG ακόμα. 153 00:09:07,090 --> 00:09:10,870 Τέλος, αφού έχετε φτάσει στο τέλος της το αρχείο, θα θελήσετε να κλείσετε τυχόν 154 00:09:10,870 --> 00:09:12,590 υπόλοιπα αρχεία που έχετε ανοίξει. 155 00:09:12,590 --> 00:09:14,590 Θέλουμε να είναι τακτοποιημένο εδώ. 156 00:09:14,590 --> 00:09:18,790 >> Και με αυτό, έχετε ανακτηθεί το σύνολο των τα αρχεία που λείπουν από αυτήν τη μνήμη 157 00:09:18,790 --> 00:09:21,620 κάρτα, η οποία είναι ένα καταπληκτικό κατόρθωμα. 158 00:09:21,620 --> 00:09:23,430 Έτσι εαυτό σας ελαφρύ κτύπημα στην πλάτη. 159 00:09:23,430 --> 00:09:27,560 Αλλά, υπάρχει ένα ακόμη στοιχείο που πρέπει να η PSET, που είναι ο διαγωνισμός. 160 00:09:27,560 --> 00:09:30,920 Θα διαπιστώσετε ότι όλες οι εικόνες ότι έχετε ανακτηθεί είναι στην πραγματικότητα 161 00:09:30,920 --> 00:09:32,820 φωτογραφίες από το προσωπικό του CS50. 162 00:09:32,820 --> 00:09:38,500 Έτσι, εάν είστε στην πανεπιστημιούπολη ή κάπου κοντά, τότε μπορείτε να τραβήξετε φωτογραφίες με 163 00:09:38,500 --> 00:09:42,600 το προσωπικό, καθώς και το τμήμα που έχει η περισσότερες φωτογραφίες με τα μέλη του προσωπικού 164 00:09:42,600 --> 00:09:46,940 από τα ανακτημένα αρχεία τους θα πάρετε ένα φοβερό βραβείο. 165 00:09:46,940 --> 00:09:50,650 Με αυτό, τότε έχετε τελειώσει η PSET ανακάμψει. 166 00:09:50,650 --> 00:09:53,600 Το όνομά μου είναι Zamyla, και αυτό είναι CS50. 167 00:09:53,600 --> 00:10:01,835