1 00:00:00,000 --> 00:00:02,750 >> [Sekcio 9] [Pli Vasta] 2 00:00:02,750 --> 00:00:04,750 [Rob Bowden] [Universitato Harvard] 3 00:00:04,750 --> 00:00:06,750 [Ĉi tiu estas CS50.] [CS50.TV] 4 00:00:06,750 --> 00:00:12,130 >> Bone. Esence hodiaŭ ĉio estas ĝis vi uloj demandi kelkajn demandojn. 5 00:00:12,130 --> 00:00:15,070 Mi eble povus vagadi kun kelkaj temoj 6 00:00:15,070 --> 00:00:17,570 por iomete se neniu havas demandojn demandi. 7 00:00:17,570 --> 00:00:20,660 Espereble vi faru. Ĉu iu havas demandojn? 8 00:00:20,660 --> 00:00:25,220 Eble el pasinteco kvizojn, aĵoj vi ne estas komforta kun aktuale. 9 00:00:34,630 --> 00:00:37,850 >> Jes. >> [Studenta] Ĉu vi povas iri super buffer overflow atakojn? >> [Rob] Certe. 10 00:00:37,850 --> 00:00:45,530 La ĉefa ekzemplo efektive povus esti jam ĉi tie. 11 00:00:45,530 --> 00:00:48,720 La ĉefa multe malantaŭ buffer overflow atakoj estas 12 00:00:48,720 --> 00:00:51,540 Ni havas kelkajn buffer, ĉi tie. 13 00:00:51,540 --> 00:00:54,110 Char c - kiu estas nur de amplekso 12 - 14 00:00:54,110 --> 00:00:57,580 sed poste ni volas enmeti ion en tiun buffer 15 00:00:57,580 --> 00:01:00,050 sed ne kontrolanta ekzakte kiom ni volas enmeti. 16 00:01:00,050 --> 00:01:06,740 Tie ĉi ni volas enmeti strlen (trinkejo) en C, sed kiu scias kiel longe trinkejo estas. 17 00:01:06,740 --> 00:01:11,970 Se ĝi estas pli longa ol 12 signoj tiam ĉi tuj dronigos ĉi bufro. 18 00:01:11,970 --> 00:01:15,830 Rigardante tiun foton - 19 00:01:15,830 --> 00:01:20,840 se vi prenos la 61 vi ricevos multe pli familiara kun tiu speco de aranĝo 20 00:01:20,840 --> 00:01:25,760 kaj traktante kun la savita framo montrilon kaj reveno adreso kaj gepatra rutino stako 21 00:01:25,760 --> 00:01:27,760 kaj ĉiuj el tiuj realaj aferoj. 22 00:01:27,760 --> 00:01:31,340 Sed ĉi tie vi nur bezonas scii ke ni havas 23 00:01:31,340 --> 00:01:35,990 tiu malgranda spaco por niaj bufro. 24 00:01:35,990 --> 00:01:39,480 Ĉi tie ni havas c (0) kaj tiam ni havas c, 1, 2, 3, 4, 5 kaj tiel plu. 25 00:01:39,480 --> 00:01:44,810 Sub normalaj cirkonstancoj ni ENIGU buffer kiel por normala. 26 00:01:44,810 --> 00:01:50,480 Se ni enmetitaj 'saluton' ni havus h-e-l-l-o / 0, 27 00:01:50,480 --> 00:01:52,900 kaj tiam simple faskon da malplena spaco. 28 00:01:52,900 --> 00:01:57,910 Por hacker - ho, mi supozas tio estas la ekzemplo. 29 00:01:57,910 --> 00:02:02,470 Por hacker ni preni ion kiel tiu kie 30 00:02:02,470 --> 00:02:04,760 kion ili specife provas fari estas 31 00:02:04,760 --> 00:02:07,890 kutime nuligi la reveno adreso. 32 00:02:07,890 --> 00:02:12,510 Kiam ajn vi nomas funkcio kaj viajn stack frame gets puŝis sur la stako 33 00:02:12,510 --> 00:02:14,690 ke stack frame bezonas scii - 34 00:02:14,690 --> 00:02:21,020 nu, la funkcio kiu estis nomata bezonas scii, kiel reveni al la funkcio kiun li nomis gxin. 35 00:02:21,020 --> 00:02:23,780 Do, se ĉefa alvokoj foo, foo bezonas reveni al la ĉefa, 36 00:02:23,780 --> 00:02:26,300 kaj do tio, kio estas tiu reveno adreso faras. 37 00:02:26,300 --> 00:02:28,800 Sed kion la hacker tuj fari estas 38 00:02:28,800 --> 00:02:30,820 nuligi ĝin per speciala reveno adreso 39 00:02:30,820 --> 00:02:40,090 kie denove - Little Indian - ĝi estas ne simpla sed ĉiu bajto estas malantaŭen. 40 00:02:40,090 --> 00:02:47,300 Tiu reveno adreson tiel for kiel la komputilo estas maltrankviligita 41 00:02:47,300 --> 00:02:51,390 reveni al ĉi tiu adreso estas ekvivalento al reveni al Foo aŭ ĉefa 42 00:02:51,390 --> 00:02:53,850 aux kion ajn funkcio nomita ĝi. 43 00:02:53,850 --> 00:02:54,800 Do ĝi estas tuj revenos al tiu adreso 44 00:02:54,800 --> 00:02:58,130 kio ĝuste tiel okazas al esti ĉi adreso 45 00:02:58,130 --> 00:03:04,740 kiu aŭ kelkfoje kion ili faras ĉi tie estas uzi la reveno adreso 46 00:03:04,740 --> 00:03:09,150 de specifa funkcio kiun oni scias estas jam tie. 47 00:03:09,150 --> 00:03:12,630 Mi ne povas memori kion la funkcio nomiĝas. 48 00:03:12,630 --> 00:03:14,630 Mi rigardos ĝin poste. 49 00:03:14,630 --> 00:03:17,570 >> Jen kion ili faras estas pasante la reveno adreso 50 00:03:17,570 --> 00:03:26,310 al la stako mem, kaj tio estas iom stranga, kie 51 00:03:26,310 --> 00:03:29,530 tie estas ekzemploj de memoro kie - 52 00:03:29,530 --> 00:03:34,350 memoro povas fendi supren enen nur legado, legi-skribi, kaj plenumebla memoro 53 00:03:34,350 --> 00:03:38,710 kie ni vidis nurlega memoro antaux kie - 54 00:03:38,710 --> 00:03:43,960 se mi diras char * s = saluton mi ne povas modifi saluton. 55 00:03:43,960 --> 00:03:46,200 Tio nurlegebla memoro. 56 00:03:46,200 --> 00:03:49,570 Ekzistas ankaux tiu ideo de plenumebla memoro 57 00:03:49,570 --> 00:03:53,870 kie la ruleblan memoro estus la teksto segmento de via kodo. 58 00:03:53,870 --> 00:03:57,350 Rigardante vian kutiman adreson spaco aranĝo - 59 00:03:57,350 --> 00:04:03,090 Mi kredas, ke tuj estos bona bildo - 60 00:04:08,200 --> 00:04:12,170 tio funkcias - kie ni havas niajn stako tien. Ni havas datumojn memoro. 61 00:04:12,170 --> 00:04:16,360 Ignoru tiun esence. Tio estas nia muro. 62 00:04:16,360 --> 00:04:18,810 Kaj tiam ni havas ĉi tie nian ĉefan programon kodo. 63 00:04:18,810 --> 00:04:27,480 Tio estas simila al la loko kie ni metu niajn ĉenoj kiel char * = saluton 64 00:04:27,480 --> 00:04:29,730 kaj tio nur legado. 65 00:04:29,730 --> 00:04:33,590 Sed vi povus ankaŭ marki tiu ĉefa programo kodo kiel plenumebla. 66 00:04:33,590 --> 00:04:37,950 Kaj se vi faras ke aux via mastruma sistemo faras tion korekte 67 00:04:37,950 --> 00:04:40,910 tiam ĉi tio devas esti la sola loko en memoro 68 00:04:40,910 --> 00:04:44,830 ke kodo povas reale ekzekuti 69 00:04:44,830 --> 00:04:48,550 kion signifas tiu ĉi speco de bufro overflow atako ni havas ĉi tie 70 00:04:48,550 --> 00:04:53,800 estus senutila ĉar ĉi provas ekzekuti memoron ĝis ĉi tie en nia stako. 71 00:04:53,800 --> 00:04:57,230 Rimarku la bildoj estas unua. 72 00:04:57,230 --> 00:04:59,270 Ni havas niajn stako kreskis. 73 00:04:59,270 --> 00:05:01,270 Tie la stako kreskas malsupren. 74 00:05:01,270 --> 00:05:03,270 Por CS50 celoj la stako kreskas supren. 75 00:05:03,270 --> 00:05:09,520 >> Eblas moki tiun apartan tipon de bufro overflow 76 00:05:09,520 --> 00:05:15,110 por havi tiujn ruleblan regionojn de la memoro en ne-plenumebla regionoj. 77 00:05:15,110 --> 00:05:21,420 Sed ĝuste tial okazas, ke malofte estas plenumebla memoro markis kiel plenumebla. 78 00:05:21,420 --> 00:05:26,520 Ĝi simple emas esti legi nur-kaj re-write estas la solaj aferoj kiuj estas uzataj, 79 00:05:26,520 --> 00:05:28,990 tial cxi tiu estas ankoraŭ tre efika. 80 00:05:28,990 --> 00:05:31,950 Kaj ĉi tie ni povus meti ajn ni volas. 81 00:05:31,950 --> 00:05:35,020 Ĝi estis ne reale farita kiel Pset en 61 ĉi jaro, 82 00:05:35,020 --> 00:05:38,400 sed se vi rigardas pasintjara oferdonon ĝin aŭ ajna antaŭa jaro 83 00:05:38,400 --> 00:05:44,110 unu Pset estas vi specife supozis enŝovu tien kodo kiu supozas 84 00:05:44,110 --> 00:05:48,960 presi iujn specifajn valoro aŭ resendas valoro kiu estas malsama de 85 00:05:48,960 --> 00:05:51,400 la valoro kiu estas supozita al esti presitaj. 86 00:05:51,400 --> 00:05:57,770 Aŭ eĉ pli lerte, volas vi, por voki aŭ skribi - 87 00:05:57,770 --> 00:06:03,320 tial tiu revenos supren al tie kaj tiam vi havos ekzekuti iuj kodigon tie, 88 00:06:03,320 --> 00:06:09,720 kaj la plej lertaj el superfluas estos tiam revenu al kio tiu reveno adreso kutimis esti. 89 00:06:09,720 --> 00:06:11,970 Do kvankam ni bezonis nuligi ĉi 90 00:06:11,970 --> 00:06:16,720 veni ĉi tien, ni ankoraŭ memoras, ke reveno adreso ie 91 00:06:16,720 --> 00:06:18,890 tiel ke ni povos reveni al ĉefa aŭ kio ajn, 92 00:06:18,890 --> 00:06:23,800 kaj tio estas kvazaŭ ni neniam eĉ rimarkis ke aferoj iris malbone. 93 00:06:23,800 --> 00:06:30,100 Sed tion faris tiel tio estas la kazo kie eble ene de ĉi tie ni gelbroke nia iPhone. 94 00:06:30,100 --> 00:06:35,670 Aĵoj iri kiel normala - kiel ni kuras iun programon kaj aĵoj finos reveninte al 95 00:06:35,670 --> 00:06:38,540 kion ajn ĝi estas supozitaj reveni al, sed intertempe 96 00:06:38,540 --> 00:06:41,820 vi sukcesis detrui la tutan mastruman sistemon. 97 00:06:41,820 --> 00:06:50,950 Vi ne bezonas scii kodo pri buffer superfluas aŭ reale utiligante ĝin. 98 00:06:50,950 --> 00:06:58,060 Vi bezonas scii la bazaj ideoj de tiu estas la buffer tio estas esti superfluis, 99 00:06:58,060 --> 00:07:02,010 kaj ĉi tiu estas la kialo, ke ĝi povas esti superfluis ĉar ni ne kontrolas ĉu 100 00:07:02,010 --> 00:07:06,110 ni estas vere ene de la limoj de ĝi. 101 00:07:06,110 --> 00:07:09,880 >> [Studenta] La solvo por preventi estas ĝuste kontrolanta la limojn? 102 00:07:09,880 --> 00:07:13,600 [Rob] Jes. En tiu kazo la solvo estus 103 00:07:13,600 --> 00:07:20,850 vi povus ĉu diri se strlen de stango estas pli granda ol 12-1 - 104 00:07:20,850 --> 00:07:24,970 ĉar vi bezonas la / 0 je la fino - 105 00:07:24,970 --> 00:07:34,090 aŭ vi povus mane fari por buklo ke nur kopias la unuaj 11 signoj, 106 00:07:34,090 --> 00:07:39,710 aŭ nur io, kie vi estas vere kontrolanta certigi vin ne dronigos ke bufro. 107 00:07:45,580 --> 00:07:49,050 >> Aliaj demandoj? Jes? 108 00:07:49,050 --> 00:07:52,760 [Studenta] Cxu vi parolas pri provas kaj eble io pri programado (inaudibles). 109 00:07:52,760 --> 00:07:58,720 [Rob] Certe. 110 00:07:58,720 --> 00:08:03,500 La efektiva programo - 111 00:08:03,500 --> 00:08:08,190 ni neniam faros vin fari efektivigo de trie en la ekzameno 112 00:08:08,190 --> 00:08:12,840 ĉar tio estus maljusta al tiuj kiuj faris hash tabloj. 113 00:08:12,840 --> 00:08:16,030 Kaj simile ni neniam faros vin praktikigi hash tablo en la ekzameno 114 00:08:16,030 --> 00:08:18,560 ĉar tio estus maljusta al tiuj kiuj faris peras. 115 00:08:18,560 --> 00:08:25,220 Vi devus tamen scias la struct de trie aŭ la struct de hash tablo aŭ kio ajn. 116 00:08:25,220 --> 00:08:30,230 Tio estas fakte vera de omnaspeca datumstrukturo ni vidis. 117 00:08:30,230 --> 00:08:33,559 Ligita lertaj, stacked skews, duumaj arboj - 118 00:08:33,559 --> 00:08:38,190 vi devus povi difini tiujn structs parkere. 119 00:08:38,190 --> 00:08:44,810 A trie - tio signifas, la sola afero kiun vi bezonas fari, estas eble ni donos al vi 120 00:08:44,810 --> 00:08:50,070 iu vorto aŭ ion kaj ni diru konstrui la trie, ke - 121 00:08:50,070 --> 00:08:52,870 Ni donos al vi eble aron de vortoj 122 00:08:52,870 --> 00:08:56,280 kaj ni estas kiel konstrui trie kiu reprezentas ĉi vortaro. 123 00:08:56,280 --> 00:09:05,980 >> Ni faros nian vortaro kato kaj hundo. 124 00:09:05,980 --> 00:09:10,790 La ideo de la trie estas ni komencu per tiu tabelo - 125 00:09:10,790 --> 00:09:16,510 26 fendoj - 126 00:09:16,510 --> 00:09:24,490 kaj en ĉiu fendo la efektiva indekso de la fendo korespondas al la letero ni estas koncernita kun. 127 00:09:24,490 --> 00:09:28,560 Do ĉi tie, se ni provas enmeti katon en nian trie 128 00:09:28,560 --> 00:09:35,360 la unua signo estas 'c' kiu tuj esti 'se estas 0 tiam b estas 1, c 2.' 129 00:09:35,360 --> 00:09:38,090 Ni tuj iras en la dua indico, 130 00:09:38,090 --> 00:09:41,100 kaj ni tuj krei trie for de tiu. 131 00:09:41,100 --> 00:09:47,080 Ni tuj havos 26 fendoj. 132 00:09:47,080 --> 00:09:51,140 Kaj poste ni iras al indekso la duan karakteron de kato. 133 00:09:51,140 --> 00:09:53,340 Tio estas 'a' kiu tuj estos la 0-makulo. 134 00:09:53,340 --> 00:09:56,960 Kaj tio okazas al havi 26 makuloj. 135 00:09:56,960 --> 00:10:05,650 Tiam ni iru al la 't' kaj ni devus ankaŭ havi tiun malsuprenirantan kio estas fakte speco de gravaj 136 00:10:05,650 --> 00:10:13,990 ĉar - ni havas ĝin veni tien. Jen nia trie por 't'. 137 00:10:13,990 --> 00:10:23,370 Diru ĉi estas indekso 't' estas 19. 138 00:10:23,370 --> 00:10:31,020 La grava afero por memori pri tries estas ne eblas simple sekvigi tiujn montriloj. 139 00:10:31,020 --> 00:10:35,470 Vi ankaŭ devas sekvigi, ĉu ĉi tiu estas efektive la fino de vorto. 140 00:10:35,470 --> 00:10:38,570 Do, ene de ĉi tie ni bezonas ia flago kiu diras 141 00:10:38,570 --> 00:10:41,520 bone, tio estas efektive la fino de vorto. 142 00:10:41,520 --> 00:10:46,830 La kialo estas, se ni poste provi enmeti katastrofaj en nia vortaro 143 00:10:46,830 --> 00:10:49,930 kiu havas la sama ekde 3 signoj 144 00:10:49,930 --> 00:10:57,250 sed iras sur plua necesas agnoski, ke cxi tiu estas la fino de vorto. 145 00:10:57,250 --> 00:11:01,330 Aŭ alternative, se ni provu serĉi 'ca' kio eble ne estas vorto 146 00:11:01,330 --> 00:11:06,100 sed ni malsupreniru al tie do ni - 147 00:11:06,100 --> 00:11:10,270 aŭ ĉu ĝi estu c kaj poste ni rigardas a - 148 00:11:10,270 --> 00:11:13,940 ni bezonas agnoski ke kvankam tie estas montrilo venanta el tiu nodo 149 00:11:13,940 --> 00:11:15,940 ĝi ne reprezentas la fino de la vorto. 150 00:11:15,940 --> 00:11:19,430 >> Do, kion signifas tio - kio estis vi intencas diri? 151 00:11:19,430 --> 00:11:22,760 Kion tio signifas nian struct aspektas kiel? 152 00:11:22,760 --> 00:11:25,760 [Studenta] Ĝi estas tabelo de montriloj kiu estas 26 longa kaj tiam bool estis aŭ ne estis. 153 00:11:25,760 --> 00:11:47,430 [Rob] Jes. Do, ni havos struct trie * pointers - tie ni diros [26] en 154 00:11:47,430 --> 00:11:49,590 kaj tiam la punktokomo super tie. 155 00:11:49,590 --> 00:11:53,210 Sed sur la Pset, ni ankaŭ bezonos klarigi apostrofoj, 156 00:11:53,210 --> 00:11:58,170 kio signifis vi bezonis malfacile-kodon kiu apostrofo kun indekso 27 aŭ io. 157 00:11:58,170 --> 00:12:00,440 Sed ĉi tie ni nur zorgas pri 26. 158 00:12:00,440 --> 00:12:11,830 Kaj tiam ni bezonos eble char en aŭ bool - ni nomas ĝin estas vorto. 159 00:12:11,830 --> 00:12:18,120 Tio 2 el la 3 aferoj mi opinias ke vi devus iam bezonos scii pri peras - 160 00:12:18,120 --> 00:12:24,370 konstrui ilin, la struct de ili, kaj la lasta bona estas la rultempa el ili. 161 00:12:24,370 --> 00:12:28,250 >> Kio estas la runtime de trie - aŭ la lookup en trie? 162 00:12:28,250 --> 00:12:47,500 Tie estas kie ni diras ke estas O (k), kie k estas la longeco de la vorto ni okazi al oni rigardas supren; 163 00:12:47,500 --> 00:12:53,850 sed samtempe, ni diru - almenaŭ por Pset 5 Speller, kalkaj - ni diru 164 00:12:53,850 --> 00:12:59,470 la plej longa vorto en la vortaro estas 45 signoj, tial tiu estas esence 165 00:12:59,470 --> 00:13:04,900 la O de 45 kiu estas konstanta tempo. 166 00:13:04,900 --> 00:13:09,660 Do, se estas supera baro sur via plej longa vorto tiam - 167 00:13:09,660 --> 00:13:15,130 aŭ eĉ kiel la angla vortaro - tie estas supera baro sur via plej longa vorto. 168 00:13:15,130 --> 00:13:19,970 Aŭ iu vortaro - estas plej longa baro sur via supra vorto. 169 00:13:19,970 --> 00:13:25,480 Ne gravas kion vi faras estas konstanta tempo, 170 00:13:25,480 --> 00:13:33,810 sed ho de k estas bela ĉar tie vere estas diferenco inter kurado diras 171 00:13:33,810 --> 00:13:40,120 45-karakteron vorto kontre alfabeto kiu havas nur vortojn ĝis 3 signoj. 172 00:13:40,120 --> 00:13:52,870 Alia afero pri tio estas ke la - 173 00:13:52,870 --> 00:13:57,520 oh, ĉar ĝuste diri ke 45 hazarde estas nia plej longa vorto 174 00:13:57,520 --> 00:14:02,330 estas ia stulta ĉar samtempe diru algoritmo estas O de N. 175 00:14:02,330 --> 00:14:06,510 Nu bone, ĉar memoro subtenas nur ĝis 2 ^ 32 bitokoj, 176 00:14:06,510 --> 00:14:11,770 tiam N estas maksimume 4 miliardoj kaj tio estas konstanta tempo, tial je iu punkto 177 00:14:11,770 --> 00:14:14,870 ĝi estas stulta diri ĉi tia afero kie estas supera baro 178 00:14:14,870 --> 00:14:19,540 ke ni povos ĝuste redukti konstantan tempo ĉar ĉio estas konstanta tempo 179 00:14:19,540 --> 00:14:22,320 kiam vi pensas pri tio en tiu vojo. 180 00:14:22,320 --> 00:14:25,470 Sed ni versxajne akceptus ambaŭ el tiuj. 181 00:14:25,470 --> 00:14:31,780 En ajna kazo klarigi cxu ke O (1) signifas ke vi havas superan-barita longeco de vorto; 182 00:14:31,780 --> 00:14:34,070 O (k) signifas via longeco de la vorto - 183 00:14:34,070 --> 00:14:40,900 bone, k signifas longeco de la vorto. 184 00:14:44,060 --> 00:14:47,280 >> Jes. >> [Studenta] Ĉu la bool - ĉar, kiam vi faris vian trie 185 00:14:47,280 --> 00:14:53,220 gxi sxajnis kiel ĝi estis - vi irus katon kaj tiam vi iru al la sekvanta montrilo 186 00:14:53,220 --> 00:14:59,860 kaj tiam vi diru se tio egalas vera - ĉu vi metis tiun veran ĉe kiel kun la t? 187 00:14:59,860 --> 00:15:06,560 [Rob] Ni kredas ke tiu estas la kazo kie multe da ekzemploj vi povas simple provi kaj supreniru kun 188 00:15:06,560 --> 00:15:12,310 simpla kaj / aŭ ekstremaj ekzemploj kaj kion ĝi devus esti, do ni pensu pri la vorto 'a'. 189 00:15:12,310 --> 00:15:21,320 En nia originala trie - 190 00:15:21,320 --> 00:15:35,510 ĉu ni volas meti 1 cxi tie, aux ni volus meti 1 suben ĉi tien. 191 00:15:35,510 --> 00:15:41,350 Mi dirus, ke en la fino ĝi probable estus ĉu / aŭ. 192 00:15:41,350 --> 00:15:46,000 Mi ne povas pensi kialon - aŭ vere vi wouldn't - 193 00:15:46,000 --> 00:15:51,060 la kialo mi ne metis ĝin tie malsupre estas ĉar vi eĉ ne bezonas iri kiu for. 194 00:15:51,060 --> 00:15:55,820 Ni neniam bezonas atribui ĉi trie. 195 00:15:55,820 --> 00:15:57,950 Ni simple metos la 1 ĝis tie. 196 00:15:57,950 --> 00:16:03,310 Tio estas ankoraŭ indikante nula. 197 00:16:03,310 --> 00:16:09,430 Se ni nur tuj havas solan karakteroj 198 00:16:09,430 --> 00:16:17,220 ke ne estas kialo por etendi malsupren al alia trie ĝuste por marki tiun leteron kiel uzata. 199 00:16:17,220 --> 00:16:21,260 Simile, se ni enmetis la 'a' tie malsupre 200 00:16:21,260 --> 00:16:27,860 tiam nepre ĉiuj el tiuj estus nur esti 0, je ĉiuj tempoj. 201 00:16:27,860 --> 00:16:36,060 >> [Studenta] Sed ne ni bezonas komencante trie ke montros al ĉi tiun 'oni'? 202 00:16:36,060 --> 00:16:43,570 [Rob] Ni havas kelkajn tutmondaj aŭ io struct trie * t 203 00:16:43,570 --> 00:16:47,270 kiuj punktoj tie, sed tio estas nur montrilo. 204 00:16:47,270 --> 00:16:51,500 Ĝi ne estas kompleta blovitaj trie ke'S montrante al ĝi. 205 00:16:51,500 --> 00:17:02,000 [Studenta] Okay. Kiel ni atribui la literon 'i'- kun la vorto mi? 206 00:17:02,000 --> 00:17:06,380 [Rob] Lia demando povus respondi tion. Atendu. 207 00:17:06,380 --> 00:17:15,060 Tio estas temo, kie trie en kaj per si - 208 00:17:15,060 --> 00:17:17,880 Mi ne scias la vojon al la Pset estus skribinta ĝin. 209 00:17:17,880 --> 00:17:19,880 La antaŭa struct estis malbona. 210 00:17:19,880 --> 00:17:41,690 Sed ni povus ankaŭ fari struct nodo estas bool - kaj puntero - 211 00:17:41,690 --> 00:17:46,500 tie estas reale plurajn manierojn vi povus skribi ĝin. 212 00:17:46,500 --> 00:18:01,800 Alternative oni trie ne bezonas esti struct. 213 00:18:01,800 --> 00:18:21,250 Ĝi povus eĉ esti trie - typedef nodo * - 214 00:18:21,250 --> 00:18:34,760 nodo [26] Estas trie, kaj ĉi tiu jam ne struct. 215 00:18:34,760 --> 00:18:44,270 Nun tie okazas esti - I'm provas pensi pri la vojo, kiun Pset atendus vin. 216 00:18:44,270 --> 00:18:47,650 [Studenta] Mi tiris supren kiuj recenzo kunsido kaj mi kredas ke ili simple iru - 217 00:18:47,650 --> 00:18:50,670 kiel se vi havas tiam vi iru al la sekva - >> [Rob] Jen kiel ili faras tion? 218 00:18:50,670 --> 00:18:53,750 [Studenta] Kaj poste, se estas vera tie ĝi ne funkcias - 219 00:18:53,750 --> 00:18:58,710 [Rob] Jes. Tio vere funkcias. Ĝi perdas la spaco de - 220 00:18:58,710 --> 00:19:03,910 vi nepre havas tutan alian nivelon de trie, ke vi ne bezonus en la unua loko. 221 00:19:03,910 --> 00:19:08,410 Jen ĝi Fariĝas malbela kun ĉiu - 222 00:19:08,410 --> 00:19:11,530 esence kion mi klopodas fari ĉi tie estas asociita - 223 00:19:11,530 --> 00:19:15,000 anstataŭ esti 26 montriloj al viaj provoj, 224 00:19:15,000 --> 00:19:20,810 ĝi estas la 26 bool montrilon, bool montrilon, bool montrilo, kaj tiel plu. 225 00:19:28,940 --> 00:19:34,410 >> [Studenta] Oni ne povas fari ke 2 arrays? Tabelo de bools kaj tabelo de montriloj? 226 00:19:34,410 --> 00:19:38,060 [Rob] Vi povus sed tiam vi bezonus - 227 00:19:38,060 --> 00:19:41,500 2 arrays de booleans kaj montriloj. 228 00:19:41,500 --> 00:19:47,340 Vi bezonus do konstruu vian tabelo de booleans - 229 00:19:47,340 --> 00:19:51,240 via tabelo de booleans bezonas esti tiel granda, kiel la trie 230 00:19:51,240 --> 00:19:53,200 ĉar ne eblas simple havas 26 booleans. 231 00:19:53,200 --> 00:19:57,010 Ĝi devas kreski per ĉiu ebla - 232 00:19:57,010 --> 00:20:03,240 kiel viaj trie havas pli ol 26 veraj aŭ falsaj eblaj vortoj. 233 00:20:03,240 --> 00:20:08,240 Je tiu punkto ili povas tiel simple esti sola struct ke via trie kreskas malsupren kun. 234 00:20:08,240 --> 00:20:15,210 Ĉi tio ne ŝajnas dekstra ĉar - Kion mi volas ĉi tie? 235 00:20:15,210 --> 00:20:23,640 Do, trie * t - 236 00:20:23,640 --> 00:20:30,200 ĉu vi povas fari typedef (nodo *) [26] trie; 237 00:20:30,200 --> 00:20:33,090 ke estu la sintakso Mi serĉas. 238 00:20:36,740 --> 00:20:41,450 Kaj tiu devas esti simple regula trie. 239 00:20:44,900 --> 00:20:47,440 Mi ne estas certa. 240 00:20:47,440 --> 00:20:54,850 Sed tio estas la maniero ni faris gxin en la recenzo, tiel ke ĝi funkcias perfekte delikata, tro. 241 00:20:54,850 --> 00:20:57,850 En kiu kazo se ĝi estas nur bool estas vorto kaj tiam tabelo de 26 242 00:20:57,850 --> 00:21:01,750 tiam vi devos iri al la sekvanta nivelo. 243 00:21:01,750 --> 00:21:05,420 Mi pensas pri la vojo mi farus tion. 244 00:21:07,500 --> 00:21:09,550 >> Aliaj demandoj? 245 00:21:09,550 --> 00:21:12,540 [Studenta] Ĉu mi povas demandi pri io alia? >> [Rob] Jes. 246 00:21:12,540 --> 00:21:19,040 [Studenta] Ĉu vi povas iri super kio la diferenco estas kaj kiam vi volus uzi jQuery kontre Ajax? 247 00:21:19,040 --> 00:21:24,550 [Rob] Ili estas en si mem tute malsama. 248 00:21:24,550 --> 00:21:32,720 JQuery faras ebligi Ajax. Ĝi faras donu al ni iom pli facila uzo de Ajax. 249 00:21:32,720 --> 00:21:38,480 Sed Ajax venas senditaj per JavaScript. Javascript havas Ajax kapablojn. 250 00:21:38,480 --> 00:21:47,490 Ĉiuj Ajax signifas komparos Mi jam sur la paĝo kaj kiam mi volas - 251 00:21:47,490 --> 00:21:52,820 Kiam mi klakas sur io mi ne bezonos reŝargi la paĝon por elŝuti tiun novan informon. 252 00:21:52,820 --> 00:21:55,020 Mi nur petas ke novaj informoj. 253 00:21:55,020 --> 00:22:01,220 Vi povas rigardi ĝin en Facebook aŭ io. 254 00:22:01,220 --> 00:22:05,580 Inspekti reto. 255 00:22:05,580 --> 00:22:07,460 Shrink ĉi. 256 00:22:12,070 --> 00:22:14,940 Malsupren tie ni vidas ke ni ricevas cxion cxi petoj. 257 00:22:14,940 --> 00:22:18,990 Nun kiam mi klakas sur - Nu, estas faranta Ajax antaux Mi eĉ alklaku nenion. 258 00:22:18,990 --> 00:22:24,140 Sed se mi klakas sur ĉi, tiam ĝi tuj fari amaseton da petoj suben ĉi tien 259 00:22:24,140 --> 00:22:33,530 kio ĝuste farante tiujn petojn - ho, nun estas ĉi tie. 260 00:22:33,530 --> 00:22:36,590 Ni fortigu. 261 00:22:36,590 --> 00:22:38,580 Faru tion denove. 262 00:22:38,580 --> 00:22:42,090 Ni vidas, ke ni ricevas cxion cxi petoj, sed ĉi tiu povus esti ankoraŭ en la procezo de la paĝo ŝarĝo. 263 00:22:42,090 --> 00:22:47,400 Rimarku Facebook farante tiujn konstanta petojn eĉ post la paĝon ŝarĝita. 264 00:22:47,400 --> 00:22:51,470 Kaj se mi alklaku ĉi tie, ĝi faros iun pli petoj pri iuj datumoj 265 00:22:51,470 --> 00:22:54,990 kiu estas en la respondo al la afero mi ĵus alklakis. 266 00:22:54,990 --> 00:23:04,660 Tio estas nur kion Ajax estas. Ĝi permesas vin tiri por datumoj kiuj ne estis elŝutita kun la paĝon origine. 267 00:23:04,660 --> 00:23:12,050 >> JQuery estas apartaj. JQuery estas nur JavaScript biblioteko kiu faras multajn aferojn pli facilaj. 268 00:23:12,050 --> 00:23:28,660 Kun jQuery ĝi estas multe da avantaĝo estas tio ĝuste - 269 00:23:28,660 --> 00:23:34,030 dolaro signo - dolaro signo estas valida variablon en JavaScript. 270 00:23:34,030 --> 00:23:43,460 Do, jQuery - ĉiuj ĝi estas faranta diras kiel var $ = tutan faskon da aĵoj - 271 00:23:43,460 --> 00:23:46,690 kiel iuj grandaj funkcio kun ĉiuj ĉi aĵoj en ĝi - 272 00:23:46,690 --> 00:23:52,650 kaj tiam vi uzas tiun dolaro signo en manieroj kiel 273 00:23:52,650 --> 00:24:23,940 $ ("# Footer"). Stilon ("text-align", "center"). 274 00:24:23,940 --> 00:24:32,330 JQuery donas al ni tian sintakson kie estas granda avantaĝo - 275 00:24:32,330 --> 00:24:35,650 Ĝi havas aliajn funkciojn sed kion ni deziras al vi koncentriĝi pri la plej 276 00:24:35,650 --> 00:24:38,760 Estas simple povi elekti elementojn kiel ĉi tio. 277 00:24:38,760 --> 00:24:42,780 En regula, plain-malnova JavaScript vi povas fari tion kiel 278 00:24:42,780 --> 00:24:50,490 dokumento-dot-get elemento por identigo footer-punkto - mi ne scias kion ĝi estas je tiu punkto - 279 00:24:50,490 --> 00:24:52,790 io pri CSS aŭ stilo aŭ io - 280 00:24:52,790 --> 00:24:58,930 sed tiam alternative, diru ni volis elekti por la klaso. 281 00:24:58,930 --> 00:25:06,330 Nun ni estas stiligante ĉio kun klaso piedlinio kun tiu stilo. 282 00:25:06,330 --> 00:25:16,070 Eĉ se ni volis stiligi ajn alineojn. 283 00:25:16,070 --> 00:25:22,000 Do, ĉi selector - povi elekti tion en la dom ŝatas ĉi estas nekredeble konvena 284 00:25:22,000 --> 00:25:29,420 pro tio ke en cxirkauxajxo malnovan JavaScript vi devus fari dokumento-dot-get elementoj de la klaso nomo 285 00:25:29,420 --> 00:25:34,260 aŭ kio ajn ĝi estas, aŭ ĉu mi volis etikedon mi bezonus diri get elementoj laŭ etikedo nomo. 286 00:25:34,260 --> 00:25:37,530 Do, mi bezonas scii la specifaj formoj kiujn mi aliri ĉiom de tiuj aferoj. 287 00:25:37,530 --> 00:25:40,810 La funkcioj estos diferenca dependanta sur ĉu mi uzas klason aux ID 288 00:25:40,810 --> 00:25:46,420 aux etikedon aŭ kio, dum jQuery ĝuste faras tion por mi. 289 00:25:46,420 --> 00:25:53,120 >> [Studenta] Is jQuery tuj esti uzata kiam vi faras komenca stilo de la pagxo? 290 00:25:53,120 --> 00:25:56,570 Aŭ por ŝanĝi la stilo post ĝi estas jam - >> [Rob] Por ŝanĝi ĝin. 291 00:25:56,570 --> 00:25:58,440 [Studenta] Post ĝi estas jam ŝarĝita. >> [Rob] Jes. 292 00:25:58,440 --> 00:26:07,020 Ajna komenca stilo - nu, eĉ la - 293 00:26:07,020 --> 00:26:09,970 Ĝenerale vi uzus tian ŝanĝon. 294 00:26:09,970 --> 00:26:14,330 Vi ne ŝanĝus - tio funkcius perfekte bone. 295 00:26:14,330 --> 00:26:17,720 Sed kutime vi ne ŝanĝus la stilon kiel tiu. 296 00:26:17,720 --> 00:26:20,610 Anstataŭe, vi donus al ĝi novan klason aŭ ion 297 00:26:20,610 --> 00:26:24,650 dum la CSS jam estis difinita por tiu klaso en certa maniero. 298 00:26:24,650 --> 00:26:28,920 Per doni tiujn erojn mi elektu novan klason 299 00:26:28,920 --> 00:26:32,200 Mi apliki la stilojn kiuj jam elŝutis. 300 00:26:32,200 --> 00:26:36,720 [Studenta] Do vi elektas paron el markobutonojn kaj tion, ke vi jam elektitaj 301 00:26:36,720 --> 00:26:41,820 ŝanĝi al nova stilo kaj komenci serĉi malsama. >> [Rob] Jes. 302 00:26:41,820 --> 00:26:45,490 La aliajn aferojn por memori pri - 303 00:26:45,490 --> 00:26:48,350 Nu, estas pluraj funkcioj vi devus memori pri jQuery. 304 00:26:48,350 --> 00:26:55,570 Ni diru ke ni elektu iun kun ID P. 305 00:26:55,570 --> 00:27:00,500 >> [Studenta] Ĉu vi ĉiam devas uzi la funto? 306 00:27:00,500 --> 00:27:09,600 [Rob] Tio signifas ID. Ĝi estas ekvivalento al la CSS, do CSS selectores - ĝi estas inspirita de tio. 307 00:27:09,600 --> 00:27:12,410 Kie en CSS se mi volis stiligi a footer - 308 00:27:12,410 --> 00:27:16,950 aŭ iu kun ID piedlinio - 309 00:27:16,950 --> 00:27:23,490 estus kiel teksto-align: center; 310 00:27:23,490 --> 00:27:28,820 Vi ne bezonas skribi CSS sur la ekzamenon, sed vi devas scii la seleccionadores. 311 00:27:28,820 --> 00:27:34,280 Vi devas scii kion - kion vi bezonas scii kiel legi ĝin. 312 00:27:34,280 --> 00:27:36,000 Sed ni farus neniam - 313 00:27:36,000 --> 00:27:42,390 Vi ne bezonas parkerigi ĉiujn de la malsamaj eblaj stilo aferojn. Aux iu el ili. 314 00:27:42,390 --> 00:27:50,020 >> JQuery tion vi devus memori - 315 00:27:50,020 --> 00:27:58,380 vi devus memori dot-HTML, kaj komuna ŝablono en jQuery - ni re-skribi ĉi. 316 00:27:58,380 --> 00:28:09,640 Komuna ŝablono estas ni $ ("# f"). Html 317 00:28:09,640 --> 00:28:15,650 Se mi metis nur ordinaraj parentezoj tio signifas ricevi la HTML; 318 00:28:15,650 --> 00:28:23,870 dum se mi diros HTML kaj metos kion mi volas ĉi tie - kelkajn ligilo al io - 319 00:28:23,870 --> 00:28:30,410 metante ion ene de la parentezoj nun difinas la HTML. 320 00:28:30,410 --> 00:28:33,760 Tio estas sufiĉe komuna inter faskon de funkcioj. 321 00:28:33,760 --> 00:28:38,360 Ekzistas la sama traktadon kun teksto. 322 00:28:38,360 --> 00:28:41,720 La diferenco inter HTML kaj teksto estas tiu teksto tuj enigi ĉi 323 00:28:41,720 --> 00:28:46,350 kiel laŭvorta malpli-ol, plej granda-ol anstataŭ kiel ankron etikedo. 324 00:28:46,350 --> 00:28:53,000 Kaj tekston tuj estos la sama, se mi ĝuste faru tion. 325 00:28:53,000 --> 00:28:55,760 Ĝi tuj retrovi la tekston de la dokumento - ne la HTML de la dokumento 326 00:28:55,760 --> 00:29:01,810 sed nur la teksto ene de ĉi elemento. 327 00:29:01,810 --> 00:29:08,430 Alia estas se 'f' okazas esti ID por enigo, 328 00:29:08,430 --> 00:29:14,250 tiam hash-f-dot-val - se mi volas fiksi la enigo al io kiel - 329 00:29:14,250 --> 00:29:17,900 diru mi koliziis kun checkbox kaj mi volas fiksi defaŭlta valoro - 330 00:29:17,900 --> 00:29:26,070 dot-val - mi eĉ ne scias - 3 - tiel ke estos aŭtomate enmetas en la teksta kadro 3 331 00:29:26,070 --> 00:29:35,980 sed se Mi diros 3-dot-val, ke estos elsxuti ajn estas nuntempe en la tekstujo por mi. 332 00:29:35,980 --> 00:29:39,690 >> Tio estas utila por formo validigo kie 333 00:29:39,690 --> 00:29:48,030 se Mi nur volis certigi, ke ili efektive plena el ĉiuj aferoj. 334 00:29:48,030 --> 00:29:54,710 Unu maniero fari tion estas, se post mi batis submit ĝi estos neeviteble sendita al iu pagxo de la servilo - 335 00:29:54,710 --> 00:30:00,190 kiel por ni estus PHP - kaj kiu provus prilabori la datumojn kaj ĝi dirus 336 00:30:00,190 --> 00:30:03,030 ili ne plenigu ion ekstere, tiel ke nun alidirektas al alia pagxo kiu diras 337 00:30:03,030 --> 00:30:05,050 vi ne plenigis ĉiun el. 338 00:30:05,050 --> 00:30:11,650 Anstataŭ devi fari tion, en JavaScript / jQuery vi povas nur vidi, ĉu val estas malplena. 339 00:30:11,650 --> 00:30:17,270 Aŭ ĉu val - malplenaj citiloj. 340 00:30:17,270 --> 00:30:23,120 Tio tuj ĝuste - Nun ni povas alarmi ilin ke vi ne plenigis cxi tiun kampon. 341 00:30:23,120 --> 00:30:26,990 Neeviteble vi bezonas fari la PHP-servilo-flanko kontrolado ĉar 342 00:30:26,990 --> 00:30:31,210 vi povas simple malŝalti JavaScript en ĉiuj retumiloj. 343 00:30:31,210 --> 00:30:36,180 Sed JavaScript faras ĝin konvena por tiuj, kiuj ja havas gxin aktivigita, 344 00:30:36,180 --> 00:30:42,940 kaj virtuale naŭdek-naŭ-punkto-io procento de retumiloj havas ĝin nuntempe. 345 00:30:42,940 --> 00:30:46,630 Tre malmultaj homoj turni JavaScript for. 346 00:30:46,630 --> 00:30:52,850 Ĝi estas uzanto oportuneco. Vi devas fari PHP validigo. 347 00:30:52,850 --> 00:30:55,990 Vi devus fari JavaScript validigo. 348 00:30:55,990 --> 00:30:57,950 >> [Studenta] Kion signifas # f aludas tie? 349 00:30:57,950 --> 00:31:00,020 [Rob] Kion signifas # f aludas al? 350 00:31:00,020 --> 00:31:04,350 Estas iu ero en mia dokumento kun ID 'f'. 351 00:31:04,350 --> 00:31:09,850 Ni rigardu - probable Facebook havas multajn ekzemplojn kie se mi venus al elementoj 352 00:31:09,850 --> 00:31:17,820 rigardante tien sub la elementoj etikedon mi vidas ĉi tiun apartan div tio estas esti reliefigis ĝis tie - 353 00:31:17,820 --> 00:31:22,670 aŭ ĉu la tuta paĝo - jes, ĝi estas tie supre. Ĉi tio havas ID pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 En konzolo mi supozas ke ili uzas jQuery. 355 00:31:26,730 --> 00:31:40,030 Do, mi povis elekti pagelet_bluebar tiel ke selektas tio, kaj mi faris ion malbonan. 356 00:31:46,470 --> 00:31:52,250 Ni provu - aŭ eble ili ne uzas jQuery kaj ke gravulo mapita al io alia. 357 00:31:52,250 --> 00:32:04,970 Pli bona ekzemplo en io mi scias uzas jQuery - 358 00:32:04,970 --> 00:32:10,600 ankoraŭ rigardante niajn elementoj tie - ni havas ĉi tie klaso egalas navbar. 359 00:32:10,600 --> 00:32:12,330 Tio estas io kun klaso navbar, 360 00:32:12,330 --> 00:32:19,180 tiel ene de nia konzolo ni povas rigardi ĝis la aferon kun klaso navbar. 361 00:32:19,180 --> 00:32:21,770 Ĉi tie ni povas rulumi super ĉi kaj vidas ke estas kion ĉi estas. 362 00:32:21,770 --> 00:32:29,850 Se mi volis fari. Tekston ĉi tiu estas la teksto de tiu, tiel mi vidas agordojn por raporto supre log out 363 00:32:29,850 --> 00:32:35,760 kio estas sub ĉi tie, sed tio estas ankoraŭ teksto ene de tiu HTML-etikedo. 364 00:32:35,760 --> 00:32:52,230 Mi povus agordi la HTML al nur iuj ligilo, 365 00:32:52,230 --> 00:32:56,550 do mi liveris de mia breto. Nun kiu liveris de la kaplinio tute ĝuste tial ĝi estas ligita al YouTube. 366 00:32:56,550 --> 00:32:59,630 >> Kaj cxu ekzistas formo ekzemplon? 367 00:32:59,630 --> 00:33:01,940 Jen formularo. 368 00:33:01,940 --> 00:33:05,830 Mi povas dekstre-klaku kaj inspekti elemento veni al ĝi ĝuste ĉi tie. 369 00:33:05,830 --> 00:33:08,460 Mi vidas ke ĝia ID tekstserĉo 370 00:33:08,460 --> 00:33:16,910 do cxi tie, se mi faras ID teksto serĉo. 371 00:33:16,910 --> 00:33:23,190 Mi alportos sur ĝi kaj mi vidas, ke estas la ĝusta afero mi serĉis. 372 00:33:23,190 --> 00:33:27,670 Se mi volas fari. Val donus al mi tion, kion mi tajpis tie. 373 00:33:27,670 --> 00:33:36,010 Se mi volis fari saluton ĝi ŝanĝos ĝin ĉi tie por saluton - jQuery. 374 00:33:36,010 --> 00:33:45,780 Kompreneble mi povus fari ridindaj kiel document.get elemento por identigo - tekstserĉo - 375 00:33:45,780 --> 00:33:54,000 Mi ecx ne scias kion ĝi estas je tiu punkto - skalara valoro - ne, mi forgesis pri tiu ulo. 376 00:33:54,000 --> 00:33:59,110 Do, jen saluton. Mi ne scias kiel mi starigis gxin egalas ion. 377 00:33:59,110 --> 00:34:00,930 Jes, tiel ke ŝanĝis tion. 378 00:34:00,930 --> 00:34:07,510 Sed vi ne bezonas por uzi ĉi tiuj kaj tre multaj retejoj ĉe tiu punkto uzo jQuery. 379 00:34:07,510 --> 00:34:13,050 Eĉ kiel pri fina projekto - se vi faras reta projekto - la unua afero 380 00:34:13,050 --> 00:34:20,030 Mi rekomendas estas nur inkludante jQuery tiel vi povas ricevi la komforto de cxiuj tiuj funkcioj. 381 00:34:22,580 --> 00:34:27,750 >> [Studenta] Mi kredas ke mi vidis alian manieron por atingi unu elementon uzi dom. 382 00:34:27,750 --> 00:34:32,520 Ĉu vi devas uzi punkton kaj poste konservi mallevigxo? 383 00:34:32,520 --> 00:34:36,630 [Rob] Vi povas fari tion. Mi ne scias se ĝi funkcius bone. 384 00:34:36,630 --> 00:34:38,900 Ĝi estas malfacila por navigi tiu vojo. 385 00:34:38,900 --> 00:34:43,179 Unu ekzemplo estas - mi eĉ ne scias se ni havos neniun formoj - 386 00:34:43,179 --> 00:34:48,940 sed document.forms tuj revenos la listo de formoj kiuj estas sur ĉi tiu paĝo, 387 00:34:48,940 --> 00:34:55,070 do mi povas fari document.forms 0 tuj estos la unua formo. 388 00:34:55,070 --> 00:35:03,070 Dot - Mi ne scias, kion ni nomas tio - do tio ne eĉ havas nomon, 389 00:35:03,070 --> 00:35:08,050 do eble enigoj laboros. N-ro 390 00:35:08,050 --> 00:35:11,050 Mi ecx ne scias kiel akiri je ĉi - get elemento-mi-tag nomo enigo. 391 00:35:11,050 --> 00:35:23,630 Jes, tio donis al mi la eniron, kaj nun mi volas la 0 enigi 392 00:35:23,630 --> 00:35:31,320 kaj mi volas elekti ĝian valoron, tiel ke tuj estos teksto. 393 00:35:31,320 --> 00:35:33,890 Mi devis fini farante get elementoj laŭ etikedo nomo ĉiukaze. 394 00:35:33,890 --> 00:35:36,210 Tie povus esti kelkaj manieron elekti ĝin rekte 395 00:35:36,210 --> 00:35:43,480 tra formo 0, sed la bela afero pri ĉi tiu estas ankoraŭ kiel mi nur devis akiri la etikedoj nomata enigo 396 00:35:43,480 --> 00:35:49,880 kiuj estis infano de tiu formo, alie, se mi nur faras tion rekte antaŭ 397 00:35:49,880 --> 00:35:56,680 tio estus elekti ĉiuj elementoj sur la tuton de la paĝo, en la tuta dokumento 398 00:35:56,680 --> 00:36:00,580 anstataŭ ĝuste tiu formo kaj ĝi probable ne ecx estu la unu mi volas. 399 00:36:00,580 --> 00:36:06,180 Mi ecx ne scias kion oni estas. Mi ne scias. 400 00:36:06,180 --> 00:36:13,450 Mi supozas ke la unua eniro elemento en nia paĝo estas jena iom checkbox. 401 00:36:13,450 --> 00:36:20,450 >> [Studenta] Tiu estas bela nerilataj 402 00:36:20,450 --> 00:36:27,420 kaj eble ia stulta, sed pri la respondo klavo ĝi diras ke PHP - 403 00:36:27,420 --> 00:36:35,660 Mi ne scias ĉu ĝi estas la respondo ŝlosilo aŭ notojn sed diras PHP estas servilo-flanko 404 00:36:35,660 --> 00:36:39,590 kaj JavaScript estas kliento-flanko. Kio estas la diferenco inter la 2? 405 00:36:39,590 --> 00:36:45,550 [Rob] La diferenco inter JavaScript kliento-flanko kaj PHP-servilo-flanko. 406 00:36:45,550 --> 00:36:51,890 Se vi iam auxdis pri oblikvo / uzitaj nodo js antaŭ vi pensus ke 407 00:36:51,890 --> 00:36:56,280 Javascript estas ne nur klienton-flankon sed por CS50 celoj ĝi estas - 408 00:36:56,280 --> 00:36:59,340 aŭ almenaŭ por tiu kvizo la celoj estas. 409 00:36:59,340 --> 00:37:03,800 PHP estas servilo-flanko. Neniu JavaScript. 410 00:37:03,800 --> 00:37:08,700 Kiam vi skribas vian retpaĝon vi skribos PHP sur la servilo. 411 00:37:08,700 --> 00:37:11,670 Vi neniam skribos Ĝavaskripton en la servilo. 412 00:37:11,670 --> 00:37:17,190 Javascript finu getting sendita al la retumilo kie JavaScript kodo ekzekutas. 413 00:37:17,190 --> 00:37:22,250 Kaj la kodo JavaScript bezonas por vivi en la retumilo ĉar alie, kiam mi volas 414 00:37:22,250 --> 00:37:25,830 nur faru omnaspeca JavaScript-y afero kiel alklakante ĉi, 415 00:37:25,830 --> 00:37:31,720 Mi ne reŝargi la paĝon. Tiu estas ĝuste JavaScript re-arangxa aferojn por mi. 416 00:37:31,720 --> 00:37:36,490 Se JavaScript vivis sur la servilo, do mi bezonus neeviteble peti ion 417 00:37:36,490 --> 00:37:39,490 de la servilo por scii, kion fari. 418 00:37:39,490 --> 00:37:45,380 PHP - ne ekzistas tia afero kiel PHP en la foliumilo. 419 00:37:45,380 --> 00:37:52,090 Kiam mi petas paĝo - do ni diras ĉi tie mi petis ĉi aparta paĝo. 420 00:37:52,090 --> 00:37:57,270 Tio signifas, ke tiu tuj peti - 421 00:37:57,270 --> 00:38:04,270 refresxigu - ĝi tuj refreŝigi la paĝon - 422 00:38:04,270 --> 00:38:07,210 tial cxi tiu peto eliras al nia servilo. 423 00:38:07,210 --> 00:38:13,190 Vidu ke vi bezonu reveni ĉi aparta fadeno kun tiu aparta ID, 424 00:38:13,190 --> 00:38:23,740 tial nun, ke tuj estos iuj PHP ke la PHP-interpretilo tuj interpretas ke paĝo 425 00:38:23,740 --> 00:38:28,680 kaj transformi ĝin en nur HTML, CSS, eble JavaScript, kio ajn. 426 00:38:28,680 --> 00:38:36,930 Estas PHP kiu procesas tiun peton kaj rekuperas ĉiuj de la teksto kaj necesajxojn 427 00:38:36,930 --> 00:38:39,170 ke mi fakte serĉas el la datumbazo. 428 00:38:39,170 --> 00:38:44,750 Sed kion lasas la servilo estas simple HTML / JS / CSS. 429 00:38:44,750 --> 00:38:48,630 Ne estas PHP kiu forlasas la servilo pro tio se oni vere faris 430 00:38:48,630 --> 00:38:53,890 tiam la retumilo havus nenian ideon kion fari kun ĝi, ĉar ĝi ne sciis, kion PHP estas. 431 00:38:53,890 --> 00:39:00,250 Sed en la sama penso ĉar JavaScript estas kliento-flanko, 432 00:39:00,250 --> 00:39:02,250 Vi neniam povas aliri MySQL el ĝi. 433 00:39:02,250 --> 00:39:07,430 Ĉar PHP estas servilo-flanko vi aliras MySQL el ĝi. 434 00:39:07,430 --> 00:39:12,880 >> [Studenta] Ĉu vi povas iri super iu el la zorgojn pri sekureco kun kuketoj en HTTP? 435 00:39:12,880 --> 00:39:18,390 [Rob] Tiuj ne estas, kion ni tuj bezonas scii. 436 00:39:18,390 --> 00:39:24,500 Kelkaj el la zorgojn pri sekureco kun kuketoj en HTTP. 437 00:39:24,500 --> 00:39:28,550 La granda demando tie ni vidas tie, ke miaj kuketo estas PHP / identigilo. 438 00:39:28,550 --> 00:39:33,560 Tio estas kiel la universala PHP vian seancon. 439 00:39:33,560 --> 00:39:39,550 Viaj kunsido estas iu kiu ene de PHP neniam devas esti validigitaj 440 00:39:39,550 --> 00:39:45,690 ĉar ĝi estas la servilo kiu havas kompletan kontrolon super la kunsido. 441 00:39:45,690 --> 00:39:47,690 Vi ne povas tusxi gxin. 442 00:39:47,690 --> 00:39:53,120 Sed temas pri tiu ĉi kuketo - ĉi tiu - 443 00:39:53,120 --> 00:39:57,500 kaj mi supozas ke vi povus ensaluti kiel mi nun se vi volas uzi tiun - 444 00:39:57,500 --> 00:40:06,610 sed ĝi estas tiu kuketo ke la - neeviteble vi faras solan peton al la servilo. 445 00:40:06,610 --> 00:40:09,890 La servilo resendas la paĝo. La peto estas farita. 446 00:40:09,890 --> 00:40:12,580 Ĝi ne plu havas neniun ideon, kiu vi estas. 447 00:40:12,580 --> 00:40:17,230 Do, la sekvanta peton vi faru tuj inkluzivi ke kuketo tial ke vi sciu 448 00:40:17,230 --> 00:40:19,810 tio estas la persono kiu faris tiun peton antaŭe. 449 00:40:19,810 --> 00:40:23,830 Tiu estas la sesiaj datenoj kiu asocias kun tiu uzanto. 450 00:40:23,830 --> 00:40:28,210 Tial vi ne devas ensaluti por ĉiuj kaj ĉiu paĝo vi uzas. 451 00:40:28,210 --> 00:40:33,380 La sekureco afero ĉi tie estas, ke tiu kuketo estas sendita el super la retejo. 452 00:40:33,380 --> 00:40:41,490 Ni uzas HTTPS tie, do en tiu kazo, ke signifas, ke ni estas kodi tiun materialon. 453 00:40:41,490 --> 00:40:49,870 Iu ne povas enveni kaj nur sxteli mian biskviton kaj nun la servilon pensos ke ili estas mi. 454 00:40:49,870 --> 00:40:52,060 Sed kun rektaj HTTP ili povas. 455 00:40:52,060 --> 00:40:57,650 Ĝuste kiel ĉi Wireshark / Firesheep stuff ke vi povas nur aŭskulti al ĉiuj de la wi-FIS en la aero 456 00:40:57,650 --> 00:41:01,380 kaj detranĉo kion ajn vi volas, do jes. 457 00:41:01,380 --> 00:41:12,430 >> [Studenta] Ia simila sekureco risko stokante uzantidentigilon s en fosto 458 00:41:12,430 --> 00:41:16,860 ĉar kiu povas esti libere redaktata uzante konzoloj kaj aĵoj. 459 00:41:16,860 --> 00:41:23,410 [Rob] Jes. Tie estas multe da aferoj kie kiel nur ion, kio venas de la uzanto 460 00:41:23,410 --> 00:41:26,940 vi devas validigi. 461 00:41:26,940 --> 00:41:37,650 Ekzistas multaj kazoj kie estus utila por kiel mi intencas fari post. 462 00:41:37,650 --> 00:41:39,650 Bla, bla, bla, bla, bla. Tiam mi batis respondo. 463 00:41:39,650 --> 00:41:44,540 Estus tre utila se la fosto peto inkludis mian ID ĉar 464 00:41:44,540 --> 00:41:48,610  Mi volas asociigi afiŝo kun mi. 465 00:41:48,610 --> 00:41:54,820 Sed mi ne povas fari tion ĉar mi estas liberaj por fari post peto - same kiel permane 466 00:41:54,820 --> 00:41:57,820 supreniru kun mia propra post peto - 467 00:41:57,820 --> 00:42:00,960 kiu uzas vian uzantidentigilon kaj nun ĝi afiŝos kiel vi. 468 00:42:00,960 --> 00:42:07,440 Tio estas kial servilo-flanko mi ne povas fidi post petojn enhavanta la korekta uzantidentigilon. 469 00:42:07,440 --> 00:42:09,720 Tial ĝi devas aparteni en mia sesio. 470 00:42:09,720 --> 00:42:15,140 Do mi rigardu viajn uzantidentigilon en mia kunsido tabelo kaj mi enmetas, ke en mian datumbazon 471 00:42:15,140 --> 00:42:17,580 kiel la uzanto kiu efektive faris ĉi afiŝo. 472 00:42:17,580 --> 00:42:19,580 [Studenta] Kaj ke estas bazita sur via kuketo? 473 00:42:19,580 --> 00:42:24,690 [Rob] Jes. Ĝi uzas la kuketon parigi supren vi kiel la uzanto, kiu faris tiun peton. 474 00:42:24,690 --> 00:42:30,570 Ĝi eltiras la uzantidentigilon de tiu kunsido kaj ke tiam enmetas en la datumbazo 475 00:42:30,570 --> 00:42:32,960 uzante tiu uzantidentigilon. 476 00:42:32,960 --> 00:42:40,330 Ĉi kiel butono - kion tio fakte farante estas - 477 00:42:40,330 --> 00:42:43,810 Mi ne tuj trovis ŝin tie. Ĝi fariĝos Ajax funkcio 478 00:42:43,810 --> 00:42:46,780 Kio estas Ajax funkcio? 479 00:42:46,780 --> 00:42:55,500 Permesu al mi eltrovi kio mia JavaScript estas. 480 00:42:55,500 --> 00:42:59,710 Estis CS50 projekto faras momenton. 481 00:42:59,710 --> 00:43:02,880 Mi ne povas memori kion ĝi estas. 482 00:43:02,880 --> 00:43:12,530 Ajax funkcio - ĉiuj Ajax funkcio faras estas farante Ajax peto al paĝo kun ĉi ID - 483 00:43:12,530 --> 00:43:15,810 kun la ID 22453. 484 00:43:15,810 --> 00:43:20,180 Ĝi ne estas eĉ post peto. Estas get peton, kiun faras ankoraŭ pli facila. 485 00:43:20,180 --> 00:43:27,860 Se mi scius, kion la URL estas - ĝi estas io kiel kiel ĉi / ID = 22453 - 486 00:43:27,860 --> 00:43:33,290 aŭ? ID = 22453 - 487 00:43:33,290 --> 00:43:40,290 do ekkoni ĉi tiun URL ŝatos tion. 488 00:43:40,290 --> 00:43:44,600 Kiuj ne estus tiel multe de problemo, sed estas nekredeble facila skribi buklo 489 00:43:44,600 --> 00:43:48,500 kio estas ĝuste tuj vizitu ĉi URL denove kaj denove, tial vi vidas 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard sendi kun miloj da aĵoj. 491 00:43:51,180 --> 00:43:56,960 Kaj ili inklinas esti CS50-bazitaj Isawyouharvard afiŝoj. 492 00:43:56,960 --> 00:44:01,200 Kjel mi trovi la plej kara? 493 00:44:01,200 --> 00:44:03,720 Ili emas get forigita bela rapide, tro. 494 00:44:03,720 --> 00:44:06,490 Ĉi tio ne estas la plej kara. Tie ni iru. 495 00:44:06,490 --> 00:44:13,400 Tramposos sur la plej ŝatis paĝo - ke estas sufiĉe grava por ĉi tiu momento. 496 00:44:13,400 --> 00:44:21,230 Oh wow. Ili jam forigita iu el tiuj, el tiu ĉi jaro, kiun estis 497 00:44:21,230 --> 00:44:25,590 trompis. Tiuj ĉiuj estas forigita. 498 00:44:25,590 --> 00:44:28,680 Tie neniam estos post tio alvenas ĉi altaj. 499 00:44:28,680 --> 00:44:32,860 Ĉi tiu estis evidente trompis pluiri al la plej ŝatis paĝo. 500 00:44:36,570 --> 00:44:39,310 >> Pli demandojn? 501 00:44:39,310 --> 00:44:46,050 [Studenta] Kion ni scias pri XHTML? 502 00:44:46,050 --> 00:44:49,710 [Rob] Virtuale nenion. Ĝuste kion ĝi estas. 503 00:44:49,710 --> 00:44:59,220 La diferenco inter ĝi kaj HTML estas ke XML estas tre similaj laŭ aspekto 504 00:44:59,220 --> 00:45:09,080 al HTML krom en HTML oni simple devas havi antaŭdifinitaj aro de etikedoj. 505 00:45:09,080 --> 00:45:15,380 Sed kun XML - XML ​​estas nur kiel ĝenerala formato, kie vi povas fari XML dokumento 506 00:45:15,380 --> 00:45:17,580 por kiaj celoj vi deziras. 507 00:45:17,580 --> 00:45:25,950 Do, ekzemple, se mi volis mi povus konstrui XML por la kursoj - 508 00:45:25,950 --> 00:45:28,860 kaj mi vere pensas ke CS50 havas API por ĉi tio. 509 00:45:28,860 --> 00:45:31,590 Mia XML dokumento povus rigardi ion kiel - 510 00:45:31,590 --> 00:45:39,330 kursoj kaj kompreneble mi bezonas iom fino kursoj. 511 00:45:39,330 --> 00:45:48,920 Mi povus havi kurson kaj ĝi povis havi nomon egalas CS50. 512 00:45:48,920 --> 00:45:58,080 Kaj tiam mia fino kurso kaj mi povus meti ene de ĉi tie studentoj, 513 00:45:58,080 --> 00:46:07,010 kaj poste ene de studentoj Mi havas liston de unu studento kies nomo estas ajn. 514 00:46:07,010 --> 00:46:10,180 Mi finos ke lernanto kaj tiel plu. 515 00:46:10,180 --> 00:46:16,070 Mi ĵus hazarde konstruis iun arbitran XML dokumento, sed tio estas valida XML. 516 00:46:16,070 --> 00:46:23,700 XML - ĉio tio estas estas ĉi speco de strukturo kaj la bela afero - la kialo, ke ni eĉ nomas ĝin XML 517 00:46:23,700 --> 00:46:26,820 estas ke ĉi tia afero estas tre facila por analizi. 518 00:46:26,820 --> 00:46:32,580 Ĝi estas tre facila al preni ĉi tiun dokumenton, kaj fari tabelo el ĝi. 519 00:46:32,580 --> 00:46:39,370 Kaj tiel XHTML estas provo ricevi la HTML esti valida XML. 520 00:46:39,370 --> 00:46:42,580 Jam tio aspektas bela similaj al HTML. 521 00:46:42,580 --> 00:46:52,160 Kelkaj el la diferencoj estas HTML vi povas fari tion kiel enigo eble tipo egalas teksto 522 00:46:52,160 --> 00:46:55,550 kiu estas la defaŭlta do mi ne bezonas diri tion. 523 00:46:55,550 --> 00:47:00,010 Malebligita. 524 00:47:00,010 --> 00:47:05,160 >> Estas 2 aferoj en ĉi tie kiuj faras ĉi nevalida XHTML. 525 00:47:05,160 --> 00:47:08,750 La unua afero estas ke cxiuj XML etikedoj bezonas fermon etikedo. 526 00:47:08,750 --> 00:47:13,040 Do, en la kazo de enigo Mi bezonas fari la - kiu direkto oblikvo estas tio? 527 00:47:13,040 --> 00:47:15,060 Ĉi tiu direkto? Tio aspektas erara. 528 00:47:15,060 --> 00:47:19,380 Aliaj direkto. 529 00:47:19,380 --> 00:47:21,960 Mem-fermante etikedo. 530 00:47:21,960 --> 00:47:29,560 La dua afero estas, ke per XML vi bezonas tiajn kiel ŝlosilan valoron paroj. 531 00:47:29,560 --> 00:47:32,130 Ĝi bezonas valoron asociita kun ĝi. 532 00:47:32,130 --> 00:47:35,050 Do, eĉ se malaktivigita en kaj de sin esprimas, kion mi volas - 533 00:47:35,050 --> 00:47:37,110 tiu enigo devus esti malebligita - 534 00:47:37,110 --> 00:47:39,110 ke estas nevalidaj XHTML. 535 00:47:39,110 --> 00:47:47,110 Kion mi vere bezonus por skribi estas malaktivigita egalas handikapita. 536 00:47:47,110 --> 00:47:49,620 Nun ĝi estas valida XHTML. 537 00:47:49,620 --> 00:47:54,850 Kaj tiuj estas nur tiuj malgrandaj diferencoj kiuj transformas la HTML de XML-bazitaj tia afero. 538 00:47:54,850 --> 00:48:04,880 >> [Studenta] XML estas proksimume kiel tiro per viaj propraj X aro kiel kial estas li (inaudibles) 539 00:48:04,880 --> 00:48:19,450 [Rob] La afero de kiel CSV - a CSV vi havas nur valorojn disigitaj per - 540 00:48:19,450 --> 00:48:23,550 nur pensi en kalkultabelo. A CSV estas esence kalkultabelo. 541 00:48:23,550 --> 00:48:26,720 Vi havas eble kolumnoj kaj vi havas faskon da vicoj ke 542 00:48:26,720 --> 00:48:29,600 asociita datumojn kun tiuj kolumnoj sed tio estas ĝi. 543 00:48:29,600 --> 00:48:38,310 XML estas multe pli versátiles en kiuj vi povas - vi havas arbitran hierarkio de datumoj. 544 00:48:38,310 --> 00:48:43,200 Mi povus havi plurajn kursojn kiuj havas multnombraj studentoj en ĝi 545 00:48:43,200 --> 00:48:45,460 kie estus malfacile pensi en kalkultabelo, ke - 546 00:48:45,460 --> 00:48:51,010 nur tiu sola ŝtono - CSV speciale estas kiel nur unu folio - 547 00:48:51,010 --> 00:48:58,760 por ke sola kalkultabelo havante cxiujn CS50, 51, kaj 61 kaj en tiuj, ĉiuj 548 00:48:58,760 --> 00:49:03,230 studentoj rilataj al tiuj epokoj, eble renkonti tempoj kaj ĉiuj tiaj aferoj. 549 00:49:03,230 --> 00:49:09,140 La alia afero estas, ke la etikedo nomoj doni belan nomon al ĉiu el la elementoj 550 00:49:09,140 --> 00:49:13,140 tiel leganta CSV-dosiero povas esti malfacila por provi kaj analizi kion ĝi estas reale vidas. 551 00:49:13,140 --> 00:49:20,130 XML estas multe pli facile legebla por ke tial kiel - supreniru al iu persono, kiu ne 552 00:49:20,130 --> 00:49:26,380 vere scias kia CSV-dosiero estas aŭ ŝatas estas ne programisto aŭ io - 553 00:49:26,380 --> 00:49:30,640 vi povas doni al ili kiel ŝablono por XML-dosiero kaj oni povas sekvi la linioj kaj - 554 00:49:30,640 --> 00:49:33,590 ho, mi supozas enmeti mian nomon ĉi tie. 555 00:49:33,590 --> 00:49:37,440 Ĝi estas multe pli uzebla formato. 556 00:49:37,440 --> 00:49:42,440 CSV havas multajn uzojn sed XML havas malsamajn uzojn. 557 00:49:46,050 --> 00:49:49,680 >> Pli demandojn? 558 00:49:49,680 --> 00:49:51,900 Aliaj demandoj? 559 00:49:56,410 --> 00:50:00,520 [Studenta] De la antaŭaj kvizo - vertikala skalo kontre horizontala grimpita. 560 00:50:00,520 --> 00:50:04,660 [Rob] Vi ne bezonas scii tion. Mi ne kredas ke ni ecx diskutas tion. 561 00:50:04,660 --> 00:50:07,340 Mi konjektas ke estis nur unu-off komento. 562 00:50:07,340 --> 00:50:12,660 Oh. Horizontala kontre vertikala skalo ne estas io, kion vi bezonos scii. 563 00:50:12,660 --> 00:50:18,570 Mi kredas ke la diferenco estas nur kvazaŭ - ho bone, la respondo klavo diros la diferencon. 564 00:50:18,570 --> 00:50:26,030 Vertikala skalo estas simple ŝatas ho, mia komputilo faras malbone. Mi akiros bonan. 565 00:50:26,030 --> 00:50:29,150 Dum horizontala skalo estas ho, mia komputilo estas faranta malbone - 566 00:50:29,150 --> 00:50:33,360 lasu min akiri 20 de ili al la tuta laboro sur la sama tasko. 567 00:50:40,300 --> 00:50:45,520 >> [Studenta] Cxu ni transiros ligillisto manieron fari vostoj. >> [Rob] Certe. 568 00:50:45,520 --> 00:50:50,000 Tio estas pli facila ol la tabelo vojo. 569 00:50:50,000 --> 00:50:53,140 La ligillisto manieron fari vostoj. 570 00:50:53,140 --> 00:50:58,350 Unue, kion signifas nian struct di ligillisto aspekti? 571 00:50:58,350 --> 00:51:17,060 [Studenta] Cxu ni faras ĝin por - >> [Rob] Ni faru lian - yeah. 572 00:51:17,060 --> 00:51:30,000 Mez val; tiam struct nodo * proksima; 573 00:51:30,000 --> 00:51:34,560 do tio, kion ni uzu por la ekzemplo tie ĉi. 574 00:51:34,560 --> 00:51:37,660 Ni efektive tajpi tiun materialon. 575 00:51:40,030 --> 00:51:49,600 Ni faru linked_list. 576 00:51:51,750 --> 00:51:53,750 Nia struct - 577 00:52:05,360 --> 00:52:13,060 Okay. Nun rigardante niajn atendovico ni havas la - 578 00:52:13,060 --> 00:52:16,090 ni simple fari tutmondan atendovico. 579 00:52:16,090 --> 00:52:23,130 Ĝi estos nodo * atendovico, kaj ni havas dequeue funkcio. 580 00:52:23,130 --> 00:52:28,330 Mi supozas ke tio povus ankaŭ renversi vera aŭ malvera - ni faru tion. 581 00:52:28,330 --> 00:52:38,690 Bool dequeue - kaj ni dequeueing - oh. Hmm. 582 00:52:38,690 --> 00:52:45,200 Mez dequeue - kion ni faru pri tio pli frue? 583 00:52:45,200 --> 00:52:54,340 Mez dequeue kaj ni havas bool enqueue kaj ni bezonas enqueue iuj rimedoj vera. 584 00:52:54,340 --> 00:53:01,360 Ni faru enqueue unue. 585 00:53:01,360 --> 00:53:06,520 Ni havas niajn atendovico. Ni volas enmeti ion en la vico. 586 00:53:06,520 --> 00:53:12,720 Kio estas la plej bona maniero por fari tion? 587 00:53:12,720 --> 00:53:20,270 Super ĉi tie niajn atendovico aktuale aspektas kiel ni havas kelkajn tutmonda pointer to start. 588 00:53:20,270 --> 00:53:24,910 Estas nia vico. 589 00:53:24,910 --> 00:53:30,350 Supozante ke ni dequeue per prenante la unuan elementon, 590 00:53:30,350 --> 00:53:36,570 Kien ni iras al volas enmeti niajn nodo por ke vostoj funkcios kiel oni devus? 591 00:53:36,570 --> 00:53:43,440 [Studenta] Je la fino mem. >> [Rob] Jes. Vostoj estas supozitaj esti unua en, unua el. 592 00:53:43,440 --> 00:53:48,030 Kiu signifas ke la nova elemento devas esti enmetita super tie. Okay. 593 00:53:48,030 --> 00:53:53,220 >> Coming reen al kodo, 594 00:53:53,220 --> 00:53:59,760 tio signifas ke ni volas buklo super nia vico. 595 00:53:59,760 --> 00:54:10,210 Ni faras nodon * nuna = atendovico; dum nuna ne egala NULL. 596 00:54:10,210 --> 00:54:16,960 Mi farus - Tute bone, ni faru ĝin aparte. 597 00:54:16,960 --> 00:54:20,460 Unue, kurento = atendovico. 598 00:54:20,460 --> 00:54:24,660 Kion ni faru se aktualan parton kiel NULL? 599 00:54:24,660 --> 00:54:28,410 Ni faros tion 2 manieroj. Unue ĉi vojon. 600 00:54:28,410 --> 00:54:31,450 Kion ni faru se fluo estas NULL? 601 00:54:31,450 --> 00:54:34,850 Ĉu ĉi tiu estas ekvivalento al se atendovico estas NULL? 602 00:54:38,550 --> 00:54:43,960 [Studenta] Oni tuj revenos falsaj. >> [Rob] Ĉu necesas redoni malvera? 603 00:54:43,960 --> 00:54:47,120 Kio okazas kun enmeto io en malplenan listo? 604 00:54:47,120 --> 00:54:49,080 [Studenta] Nenio estas malĝusta kun tio. Pardonon. 605 00:54:49,080 --> 00:54:55,980 [Rob] Jes. Do jen la nur diferenco estas mia tutmonda atendovico estas senditaj al mia nova nodo. 606 00:54:57,840 --> 00:55:02,880 Kaj tiam mi devos fari mian bridoj de se atendovico estas nula. 607 00:55:02,880 --> 00:55:05,960 Reiru falsaj. 608 00:55:05,960 --> 00:55:20,910 Kaj tiam enviciĝi val egalas i; atendovico sekvanta egalas NULL; return true. 609 00:55:20,910 --> 00:55:25,890 Okay. Mi tuj saltas la pafilon ĝuste ĉi tie. 610 00:55:25,890 --> 00:55:29,570 Memoru, kion ni faris tiun lastan fojon 611 00:55:29,570 --> 00:55:35,660 kie oni diris ke estis multe pli facile labori kun nodo ** kun ĉi tia afero. 612 00:55:35,660 --> 00:55:43,880 Do nun aktuala tuj estos & atendovico, kaj irantaj malsupren al tie - 613 00:55:43,880 --> 00:55:53,010 dum aktuala - dum * aktuala ne egala NULL - 614 00:55:53,010 --> 00:55:58,230 do lasu min nur faru aktuala - we'll diskuto pri tio en sekundo. 615 00:55:58,230 --> 00:56:00,860 Nuna proksima. Okay. 616 00:56:00,860 --> 00:56:12,910 Rigardante ĝin en tiu maniero, tio estas ripetanta super ĉiuj miaj pointers ĝis mi atingos nula montrilo. 617 00:56:12,910 --> 00:56:17,710 La nula montrilon tuj estos la montrilon Mi volas anstataŭigi per mia nova nodo. 618 00:56:17,710 --> 00:56:21,910 Rigardante iPad versio - 619 00:56:21,910 --> 00:56:27,800 se mia originala montrilon kaj la ligita listo estas malplena tiam aktuala tuj notas cxi tie. 620 00:56:27,800 --> 00:56:29,630 Tio tuj indikas nula, 621 00:56:29,630 --> 00:56:34,440 tial cxi tiu estas la montrilon mi finas movanta atentigi al iu alia nova nodo. 622 00:56:34,440 --> 00:56:38,150 Dum se la ekzemplo estas ĉi kazo ĝis ĉi tie 623 00:56:38,150 --> 00:56:42,720 tiam aktuala tuj trairi de ĉi tie - mi paneas iomete. 624 00:56:42,720 --> 00:56:50,700 Kie kurento estas supozitaj esti la adreso de nunaj proksima. 625 00:56:50,700 --> 00:57:00,200 Ĉu tio estas kion mi volas? Nuna tiom * nuna gives me nodo. 626 00:57:00,200 --> 00:57:04,440 Sekva trairas al la sekvanta tiu. 627 00:57:04,440 --> 00:57:10,700 Mi aktuale montras ĉi tie. 628 00:57:10,700 --> 00:57:13,720 Ni faru ruĝa - do mi aktuale montras ĉi tie. 629 00:57:13,720 --> 00:57:19,710 Tiam * nuna tuj referenci tiun nodon. 630 00:57:19,710 --> 00:57:25,080 Kaj * nuna sekvanta referencojn tiu nodo, sed tio ne estas kion mi volas. 631 00:57:25,080 --> 00:57:27,700 Mi volas tiun montrilon al tiu nodo. 632 00:57:27,700 --> 00:57:40,530 Do, tio montrilon al ĉi tiu nodo estas ampersand (* aktuala) proksima. 633 00:57:47,660 --> 00:57:54,360 >> Je ĉi tiu punkto en la tempo kiun mi oficiale atingis la nodon, kiun mi volas anstataŭigi. 634 00:57:54,360 --> 00:58:13,770 Ni anstataŭu ĉiujn el tiuj vostoj aktuala - kaj nun ni faris. 635 00:58:13,770 --> 00:58:21,760 Esteblas tajperaroj, sed la ideo estas ke kun insert en ĉi tiu tipo de vojo 636 00:58:21,760 --> 00:58:28,130 estas pli facile labori kun la indikoj kiujn ni ja volas ŝanĝi 637 00:58:28,130 --> 00:58:32,780 Anstataŭ bezonado por sekvigi - bonfartas, estas mia komenco NULL? 638 00:58:32,780 --> 00:58:36,430 Ho tio estas? Do mi bezonus por krei la komenco nodo estos iu specifa 639 00:58:36,430 --> 00:58:40,310 alie mi volas persisti ĝis la sekva afero mi notas al estas NULL, 640 00:58:40,310 --> 00:58:46,740 kaj tiam Mi anstataŭus ke - kion la sekva afero estas - al mia malloc nodo. 641 00:58:46,740 --> 00:58:50,740 Anstataŭ bezonado disigi tiuj kazoj, ĉi tie mi nur pritrakti la kazon de 642 00:58:50,740 --> 00:58:54,990 kio estas la montrilon, kiu estas nula, ke mi ne plu volas esti NULL, 643 00:58:54,990 --> 00:59:01,820 kaj tio faras vivon pli facila krom tiuj devas ĉiuj esti * aktuala nun ĉar - 644 00:59:01,820 --> 00:59:05,460 [Studenta] Ĉu ili ankoraŭ estas la grandeco de vertico? 645 00:59:05,460 --> 00:59:10,480 [Rob] Jes. Mi ankoraŭ mallocing nodo. 646 00:59:10,480 --> 00:59:12,980 [Studenta] Ĉu ĝi tuj estos la grandeco de vertico *? 647 00:59:12,980 --> 00:59:20,990 [Rob] Venante reen al ĉi tie, pensu pri la kazo, se cxi tiu estas nia ligillisto. 648 00:59:28,330 --> 00:59:33,190 Tiu ulo antaŭ ekstere al nula. 649 00:59:33,190 --> 00:59:36,950 Post ke kial buklo, aktualaj poentojn al ĉi tien 650 00:59:36,950 --> 00:59:41,510 ĉar ĉi tiu estas la montrilon, kiu estas nula. 651 00:59:41,510 --> 00:59:50,380 Nun mi volas ŝanĝi ĉi tiun montrilon por montri al nova nodo. 652 00:59:50,380 --> 00:59:58,390 Unue mi malloc tiu nova nodo - tiel malloc grandeco de nodo. 653 00:59:58,390 --> 01:00:11,070 Kaj kiu resendas nodo * kaj nun ŝanĝanta ĉi montrilon konstruas al * nuna egaluloj 654 01:00:11,070 --> 01:00:15,780 tiun novan nodon, kiun mi destinis. 655 01:00:15,780 --> 01:00:26,490 Do, se fluo estas nodo **, tiam * nuna tuj estos nodo *, 656 01:00:26,490 --> 01:00:32,540 kaj se mi mallocing io de la grandeco de vertico tiam ĉi revenas puntero al nodo 657 01:00:32,540 --> 01:00:39,630 tia ĉi estas nodo * - do ambaŭ flankoj ĝuste havi la sama tipo. 658 01:00:39,630 --> 01:00:46,610 Kaj do, se kion mi ĵus asignis estis nula, revenu falsaj; 659 01:00:46,610 --> 01:00:54,750 alie fini metante ilin al kio mi volas ilin esti - krom tiuj bezonas krampoj 660 01:00:54,750 --> 01:00:57,730 ĉar tio ne estas kio la ordo de la aferoj funkcias. 661 01:00:57,730 --> 01:00:59,690 Sen la parentezoj kiu estis interpretita kiel 662 01:00:59,690 --> 01:01:03,010 aktuala-sago-val dereference tio. 663 01:01:03,010 --> 01:01:07,010 Anstataŭe mi volas dereference nuna kiun mi alportas al nodo. 664 01:01:07,010 --> 01:01:10,620 Do mi volas ricevi la valoron rilatan al tiu nodo. 665 01:01:10,620 --> 01:01:17,670 >> [Studenta] Mi pensis sagoj, permesis al vi preteriri, ke mi iru rekte al la valoro. 666 01:01:17,670 --> 01:01:22,640 [Rob] Ili faras. Tio estas, se mi havas - ni diru atendovico estas ekzemplo. 667 01:01:22,640 --> 01:01:28,400 Mi permesis fari queue-sago-val egalas i pro atendovico estas nodo *. 668 01:01:28,400 --> 01:01:39,160 Se tie estis kelkaj belaj sintakso de kiel kuranta-plu sago-val aŭ io 669 01:01:39,160 --> 01:01:42,540 kiuj agis 2 dereferences, tiam tiu estus bone funkcias. 670 01:01:42,540 --> 01:01:44,790 [Studenta] Do la sago estas nur dum 1 dereference. >> [Rob] Jes. 671 01:01:44,790 --> 01:01:53,590 Alikaze mi povus skribi ĉi tiu kiel (** current.val). 672 01:01:53,590 --> 01:02:02,490 Ĝuste kiel mi povus ankaŭ skribi atendovico kiel (* vosto). Val. 673 01:02:04,430 --> 01:02:09,250 Do ni enmetu. Nu, tio estas en atendovico mi supozas. 674 01:02:09,250 --> 01:02:12,030 Dequeue tuj esti signife pli mallonga. 675 01:02:12,030 --> 01:02:18,280 Ni metis void en ĉi tien por tualeto. 676 01:02:18,280 --> 01:02:22,820 Do, dequeue. Kio elemento mi dequeueing? 677 01:02:22,820 --> 01:02:24,820 [Studenta] La unua? >> [Rob] Jes. 678 01:02:24,820 --> 01:02:32,880 Se mia unua estas NULL - revenon - mi ne scias kion ni volas reveni - INT_MAX; 679 01:02:32,880 --> 01:02:37,580 kaj tiam vi devus fari ĉekon por vidi se INT_MAX revenis. 680 01:02:37,580 --> 01:02:44,090 Tio estas la speco de afero, kiun get inc ne alie ni deziras - 681 01:02:44,090 --> 01:02:54,610 ĉu ni povas simple reveni atendovico val? Ĉu tio estas kion ni volas fari? 682 01:02:54,610 --> 01:02:58,010 Dequeue ankaŭ implice forigas la ero de la vico, 683 01:02:58,010 --> 01:03:10,840 do ni unue diru - ni ricevas tmp atentigi al la unua nodo de nia vico. 684 01:03:10,840 --> 01:03:15,510 Nun ni volas antaŭenigi nian atendovico al punkto al la sekva afero en la vico. 685 01:03:15,510 --> 01:03:21,450 Nun ni havas tmp maldekstren. Tmp val estas la afero, ni volas reveni. 686 01:03:21,450 --> 01:03:24,180 Do, val = tmp-> val; 687 01:03:24,180 --> 01:03:31,190 sed antaŭ ol ni redoni ĝin ni devus liberigi tmp kaj revenas val. 688 01:03:31,190 --> 01:03:36,350 La ordo de operacioj tie gravas ke ni bezonas por rabi tmp 689 01:03:36,350 --> 01:03:40,520 antaŭ ol ni movos vosto al la sekva elemento. 690 01:03:40,520 --> 01:03:44,860 Ni bezonos akiri la valoron antaux ni liberigi tmp, 691 01:03:44,860 --> 01:03:48,710 kaj tiam ni povos reveni al la val. 692 01:03:48,710 --> 01:03:50,680 >> [Studenta] Ĉu ni starigis la atendovico enviciĝi poste? 693 01:03:50,680 --> 01:03:57,800 [Rob] Jes. Tio estis krei malbonan buklo / gxi ne funkcius post liberigante ĝi ĉiukaze. 694 01:03:57,800 --> 01:03:59,900 Queue = atendovico-> proksima. 695 01:03:59,900 --> 01:04:03,230 Ni volas antaŭenigi la vosto en la proksimajn elemento ne antaŭeniri la sekva elemento 696 01:04:03,230 --> 01:04:08,170 por kio la elemento aktuale estas. 697 01:04:08,170 --> 01:04:17,660 Stakoj estus signife - kiel eĉ pli facile en tiu dequeue estas ekzakte la sama 698 01:04:17,660 --> 01:04:20,190 ĉar ni desxiras la fronto de la stako. 699 01:04:20,190 --> 01:04:24,030 Fino atendovico estus tre similaj, kie ni volas nur atribui nodon 700 01:04:24,030 --> 01:04:27,670 kaj enmeti en la fronto de la pilo, do ni eĉ ne bezonas al buklo super nenio. 701 01:04:27,670 --> 01:04:31,420 Ni nur enmeti rekte ĉe la fronto. 702 01:04:42,500 --> 01:04:44,640 Ĉu ĉiuj bone sur tio? 703 01:04:44,640 --> 01:04:49,760 >> Bone. Pli demandojn? 704 01:04:49,760 --> 01:04:56,570 [Studenta] Kion gravan tion mi devus teni en la menso de la plej freŝaj prelego? 705 01:04:56,570 --> 01:04:58,730 [Rob] La plej freŝaj prelego. 706 01:04:58,730 --> 01:05:01,620 Vi ne bezonas scii ajn kodo. 707 01:05:01,620 --> 01:05:07,590 Vi devus scii la komunajn ideojn. 708 01:05:07,590 --> 01:05:11,650 Nate duono ne havas ajnan kodo kaj tial tiuj diapozitivoj estas enreta. 709 01:05:11,650 --> 01:05:15,220 Ili estas nur ŝatas rigardi ilin kaj ili havas la gravan ideojn. 710 01:05:15,220 --> 01:05:28,630 Mia duono - sciante pri la ĝenerala ideo de unua oni ne povas fidi nenion. 711 01:05:28,630 --> 01:05:38,070 La fakto, ke kiel eble la procezo de la tradukilo povas esti malbona, 712 01:05:38,070 --> 01:05:40,870 sed ne gravas, ke la fonta kodo aspektas bone. 713 01:05:40,870 --> 01:05:46,390 Ĉar la tradukilo povus esti specife aliigo ŝanĝi la fontkodon 714 01:05:46,390 --> 01:05:50,860  en la procezo de la kompili. 715 01:05:50,860 --> 01:05:58,140 Je la sama tempo nur kiel - mi kredas ke tiuj estas kiel la ĉefaj ideoj de ĝi. 716 01:05:59,560 --> 01:06:09,030 >> [Studenta] Ĉu vi mencias, ke ni ne bezonas scii ion rilate al Firesheep - 717 01:06:09,030 --> 01:06:13,110 aux cxu ni bezonas scii tion? 718 01:06:13,110 --> 01:06:18,360 [Rob] Kun Nate duonon de tio, io, kio Nate ektusxis sur - 719 01:06:18,360 --> 01:06:22,760 kiel Firesheep, Wireshark - mi eĉ ne kredas ke li faris Firesheep detale. 720 01:06:22,760 --> 01:06:28,620 Vi ankaŭ faris ion per tio - cxu gxi estis Firesheep - pasintsemajne? 721 01:06:28,620 --> 01:06:31,110 Ĉu vi tushas sur tio? 722 01:06:31,110 --> 01:06:34,060 [Studenta] Jes, mi opinias ke ni havu - >> [Rob] Jes. 723 01:06:34,060 --> 01:06:40,880 Ni ne donos al vi Firesheep eligo kaj diru interpreti ĉi. 724 01:06:40,880 --> 01:06:44,960 Ĝi estas ĝuste tuj estos - ĝi devus esti demando kiel kio estas Firesheep? 725 01:06:44,960 --> 01:06:47,290 Kio estas uzata por? 726 01:06:47,290 --> 01:06:52,120 [Studenta] Mi pensas ke ĝi nur funkcias en versio 4 de Firefox aux io. 727 01:06:52,120 --> 01:06:55,320 [Rob] Povus esti rompita per nun. 728 01:07:11,430 --> 01:07:14,070 Mi havas nenian ideon. 729 01:07:14,070 --> 01:07:18,330 Ili ne ŝajnas esti malebligata gxin permane, 730 01:07:18,330 --> 01:07:21,210 sed eble tio ne funkcias kun la plej freŝaj Firefox. 731 01:07:21,210 --> 01:07:24,790 [Studenta] Mi fakte provis instali ĝin ĉar ĝi diris ke estus kongrua. 732 01:07:24,790 --> 01:07:28,880 [Rob] Do, mi supozas ke tio ne funkcias kun la plej freŝaj Firefox. 733 01:07:28,880 --> 01:07:32,360 Sed la ideo ankoraŭ staras el kio ĝi signifis por montri. 734 01:07:32,360 --> 01:07:39,430 Estis absurda kiom de la mondo estis ne vivi en HTTPS tiutempe. 735 01:07:39,430 --> 01:07:43,820 Eĉ en la lastaj 2 jaroj aux kio ajn, ĝi estas ankoraŭ - estas drama plibonigo en la 736 01:07:43,820 --> 01:07:47,210 nombro de retejoj kiuj uzas HTTPS. 737 01:07:49,920 --> 01:07:52,580 >> [Studenta] Ĉu ni devas iri sur HTTP? 738 01:07:52,580 --> 01:07:58,050 [Rob] La protokolo pri ĝi? >> [Studenta] Kelkaj aferoj, kiujn ni devus scii. 739 01:07:58,050 --> 01:08:06,220 [Rob] Ĉiuj rajtas. Bazaj aferoj estas ĉio vi povas vidi en via reto langeton. 740 01:08:06,220 --> 01:08:12,160 Kiam mi petas paĝo - revenanta sur la supron de la ĉefaj aĵoj. 741 01:08:12,160 --> 01:08:16,090 Vi povas vidi ĉi tie la peton, ke mi faros. 742 01:08:16,090 --> 01:08:19,220 Chrome okazas formati ĉion bele por ni 743 01:08:19,220 --> 01:08:21,970 kie la peto URL estis jena: peto metodo estis GET, 744 01:08:21,970 --> 01:08:24,800 kaj la statuso kodo estis 200 OK. 745 01:08:24,800 --> 01:08:28,279 Se mi batis view fonto, mi vidas pli rekte, ke - 746 01:08:28,279 --> 01:08:35,680 kaj ĉi tiu estas - ni povus montri al vi ĉu de ĉi tiuj, sed ĝi ne estas tro malfacile interpreti inter ili. 747 01:08:35,680 --> 01:08:41,729 Jen la rekta peto mi faris, do tio signifas, ke mi iris al 748 01:08:41,729 --> 01:08:48,160 apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1. 749 01:08:48,160 --> 01:08:57,569 Kaj la protokolon uzis estis HTTP/1.1 kiu estas virtuale - ĝi ĉiam estos tiom. 750 01:08:57,569 --> 01:09:01,490 Super tie ni uzis GET, do tiu povus ankaŭ esti POST. 751 01:09:01,490 --> 01:09:04,660 Kaj tiam malsuprenirantan - tutan vojon malsupren al respondo titolaj - se ni konsideru, ke fonto, 752 01:09:04,660 --> 01:09:07,740 tio estas kie ni vidas la 200 OK. 753 01:09:07,740 --> 01:09:11,069 Ekkonu la eblaj diversaj statuso kodoj de tiuj. 754 01:09:11,069 --> 01:09:15,520 Mi kredas en la recenzo ni diru kelkajn el tiuj, 755 01:09:15,520 --> 01:09:20,640 do 403, 404 - tiuj tipo de komunaj. 756 01:09:20,640 --> 01:09:26,810 Tio estas la granda ideo de ĝi. 757 01:09:29,990 --> 01:09:35,120 La diferenco nur inter HTTP kaj HTTPS estas ĉi ĉifrado. 758 01:09:35,120 --> 01:09:42,319 >> [Studenta] Cxu vi faris? >> [Rob] Mi kredas ke jes. Nu, Yep. 759 01:09:42,319 --> 01:09:46,470 [Studenta] Cxu vi parolas tre ĝenerale pri kiel ĉifradon verkoj? 760 01:09:46,470 --> 01:09:49,920 Ĉar ni parolis ekzemple kiam kunpremante Huffman dosieroj, 761 01:09:49,920 --> 01:09:54,890 vi scias, kiel malkompaktigi ilin ĉar vi vere sendis la hashtable ene de la dosiero 762 01:09:54,890 --> 01:09:56,950 tiom kiom faras ĉifrado laboro? 763 01:09:56,950 --> 01:10:00,830 Kiel vi scias kiel kodi informo, se vi ne vere sendis la klienton 764 01:10:00,830 --> 01:10:05,740 la ŝlosilo por la - kaj vi povas reale grab tiu klavo de -? 765 01:10:05,740 --> 01:10:07,740 Kiel la ĝenerala procezo funkcias? 766 01:10:07,740 --> 01:10:09,870 [Rob] La ĝenerala procezo de ĉifrado - 767 01:10:09,870 --> 01:10:15,590 ke estas nekredeble detalajn demando mi respondas. 768 01:10:15,590 --> 01:10:21,490 Tie estas mallonga - nu, Tommy kaj mi faris la mallonga. 769 01:10:21,490 --> 01:10:26,060 Bedaŭrinde ĝi estas kiel 26 minutoj, do ĝi ne estas mallonga. Ĝi estas longa. 770 01:10:26,060 --> 01:10:31,530 Sed nia mallonga estis sur RSA kiu estas nur unu ekzemplo de tiuj, 771 01:10:31,530 --> 01:10:40,420 kaj ĉi RSA estas parto de la entuta HTTPS protokolo. 772 01:10:40,420 --> 01:10:46,060 La ideo - RSA estas ekzemplo de publika ŝlosila ĉifriko, 773 01:10:46,060 --> 01:10:49,690 kio signifas, ke vi havas 2 apartajn klavojn. 774 01:10:49,690 --> 01:10:51,690 Vi uzas 1 ŝlosilo por vere kodi aferojn, 775 01:10:51,690 --> 01:10:54,410 kaj vi uzas alian klavon por deĉifri aferojn. 776 01:10:54,410 --> 01:10:58,360 Ĉi tiu ŝlosilo, kiun vi uzos por ĉifri aferoj estas tiu, kiu estas publika. 777 01:10:58,360 --> 01:11:03,500 La retejo povas sendi al vi tiun ĉifrada ŝlosilo. 778 01:11:03,500 --> 01:11:08,280 Ili do sendas al vi, ke ĉifroŝlosilo, kaj kiam vi volas sendi ion reen al ili 779 01:11:08,280 --> 01:11:13,550 Vi uzas tiun ĉifrada ŝlosilo por kodi ĉiujn viajn datumojn kaj sendi ĝin al ili. 780 01:11:13,550 --> 01:11:16,110 Do, ili estas la solaj kun la privata ŝlosilo. 781 01:11:16,110 --> 01:11:22,630 Se ke privata ŝlosilo fariĝis sciata tiam iu povus deĉifri viajn datumojn. 782 01:11:22,630 --> 01:11:27,980 Sed ke privata ŝlosilo - kiu estas matematike rilatajn al la publika ŝlosilo sed vi ne povas 783 01:11:27,980 --> 01:11:33,640 kompreni unu el la alia - tiel ke privata ŝlosilo povas esti uzata por deĉifri la datumojn. 784 01:11:33,640 --> 01:11:36,630 Ĉar ili estas la solaj kun la privata ŝlosilo, 785 01:11:36,630 --> 01:11:38,920 ili estas la solaj, kiuj povas legi la datumojn. 786 01:11:38,920 --> 01:11:44,170 Do eĉ se la publika ŝlosilo estas publika, 787 01:11:44,170 --> 01:11:47,660 Mi uzas la saman - kiam mi iras al Google.com aŭ kio ajn, 788 01:11:47,660 --> 01:11:50,010 ili povintus multnombraj, mi ne konas - sed se mi veturas al Google.com, 789 01:11:50,010 --> 01:11:54,770 Li iras al Google.com, ŝi iras al Google.com-- 790 01:11:54,770 --> 01:11:59,250 ni ĉiuj povas uzi la saman publika ŝlosilo por ĉifri niaj propraj informoj tamen ni deziras. 791 01:11:59,250 --> 01:12:04,010 Sed neniu el ni tuj povos eltrovi - tuj povos deĉifri 792 01:12:04,010 --> 01:12:09,940 al siaj informoj, ĉar la publika ŝlosilo estas ne povis deĉifri. 793 01:12:09,940 --> 01:12:13,050 Ĝi nur povas ĉifri. 794 01:12:13,050 --> 01:12:23,250 Kaj ĝi estas amuza / detala math de - kiel faskon da modulo operatoroj kaj exponentials kaj necesajxojn, 795 01:12:23,250 --> 01:12:28,890 ke nur laboras ekstere, ke la privata ŝlosilo estas la sola afero kiu povas 796 01:12:28,890 --> 01:12:33,620 malĉifri la publikan ŝlosilon de ĉifrado vazaro. 797 01:12:33,620 --> 01:12:38,020 Jes. Vidu la RSA mallonga por pliaj detaloj. 798 01:12:38,020 --> 01:12:41,880 [Studenta] Ĉu en la retejo? 799 01:12:41,880 --> 01:12:46,210 [Rob] Jes, mi pensas ke estas ĉe tiu punkto. Aŭ almenaŭ YouTube ligilo al ĝi estis afiŝita. 800 01:12:51,330 --> 01:12:57,190 Ni vidu. Shorts. Mi kredas ke estus estinta semajno 2-rilataj. Jes. RSA. 801 01:12:57,190 --> 01:13:03,780 Kaj ĝi estas - we're ne tuj ludi ĉi - 24 minutoj. 802 01:13:03,780 --> 01:13:05,780 Ĝi estas longa. 803 01:13:07,740 --> 01:13:09,740 >> Pli demandojn? 804 01:13:09,740 --> 01:13:14,770 [Studenta] Ĉu vi povas paroli mallonge pri la bitmasks? >> [Rob] Certe. 805 01:13:14,770 --> 01:13:23,090 Mallonge, la ideo estas simple, ke kiel - >> [Studenta] Kio estas, Rob? 806 01:13:23,090 --> 01:13:32,760 [Rob] Bitmasks. La ideo estas - ni simple diras, ke ni havas iun - we're uzante iu entjero - 807 01:13:32,760 --> 01:13:41,490 _int_ x - do, ni starti ĝin ĉe 0. 808 01:13:41,490 --> 01:13:47,900 Nun, ĉi tiu entjero estas 32 bitoj, kio ajn unuopa 1 el tiuj bitoj povas esti uzata por reprezenti 809 01:13:47,900 --> 01:13:50,600 specifa FLAC. 810 01:13:50,600 --> 01:13:56,210 Tie estas kie, se vi rigardas la mastruma sistemo kodoj, ili uzos ĉi tuta loko 811 01:13:56,210 --> 01:14:03,900 kie eble supren supro ie ili Baldaux-difini - 812 01:14:03,900 --> 01:14:09,020 Ni vidu kelkajn ekzemplojn. 813 01:14:09,020 --> 01:14:22,720 Man-2-malfermita - la malfermita-sistemo alvoko ni povas vidi ĉi tie ke unu el ĝiaj argumentoj estas int flagoj - 814 01:14:22,720 --> 01:14:29,120 kio atendas kiel tiu argumento estas kelkaj el tiuj flagoj. 815 01:14:29,120 --> 01:14:33,030 Ni vidas O_append, O_ASYNC, O_CLOEXEC, 816 01:14:33,030 --> 01:14:37,130 O_CREAT, kaj tiel plu. 817 01:14:37,130 --> 01:14:45,260 O_DIRECT. Tiuj specoj de flagoj estas hash difinita ie. 818 01:14:45,260 --> 01:14:47,260 Kaj ĉiuj el ili estas ekzakte 1 bito. 819 01:14:47,260 --> 01:14:57,600 Do, O_CREAT povus esti hash difinita kiel 1, maldekstruloj sxangxigxo, 4 (1 << 4). 820 01:14:57,600 --> 01:15:02,280 Tio tuj estos la - kiam ajn mi uzas O_CREAT tio estas nur tuj estos - 821 01:15:02,280 --> 01:15:09,350 en duuma 1, 0, 0, 0, kaj la 30-ish nulojn antaŭ ĝi. 822 01:15:09,350 --> 01:15:13,930 Estas nur sola iom aro, kaj tio iom reprezentas tiun flagon. 823 01:15:13,930 --> 01:15:18,160 Kaj tial neniu alia flago tuj estos lasita-moviĝis per 4. 824 01:15:18,160 --> 01:15:30,390 Mi povas reprezenti ĝis 32 flagoj en sola entjero per farado - 825 01:15:30,390 --> 01:15:40,850 x = O_CREAT iom saĝaj aŭ O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 Vi simple prenante ajnan 2 el tiuj flagoj. 827 01:15:43,640 --> 01:15:48,600 Nun x tuj havi 2 bitojn starigis kiuj respondas al la 2 bitojn 828 01:15:48,600 --> 01:15:53,490 de O_CREAT kaj O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 La maniero ke tiam - do tiam ni pasis x en la liberan funkcion, 830 01:15:58,740 --> 01:16:02,950 kaj malferma bezonoj vidi kion flagoj estis efektive starigis. 831 01:16:02,950 --> 01:16:06,480 Do, tio estas kie ĝi tuj fari tion kiel 832 01:16:06,480 --> 01:16:19,340 se (x & O_CREAT) fari ion, 833 01:16:19,340 --> 01:16:27,110 aŭ se (x & O_DIRECT) fari ion alian, 834 01:16:27,110 --> 01:16:30,300 kaj tiam tie povas esti iu flago ke ni ne turnis - 835 01:16:30,300 --> 01:16:35,730 se (x & o_ - Mi ne scias kion la aliaj flagoj estis - 836 01:16:35,730 --> 01:16:42,140 (X & O_RDONLY) - tiu aparta kondiĉo ne tuj estos ekzekutita. 837 01:16:42,140 --> 01:16:44,030 Aux ke bloko da kodo ne tuj estos ekzekutitaj, 838 01:16:44,030 --> 01:16:48,030 sed tiuj 2 estas ĉar tiuj 2 flagoj estis metita. 839 01:16:48,030 --> 01:16:57,400 Kaj rimarki ke en C, neniun valoron, kiu estas ne 0 estas vera. 840 01:16:57,400 --> 01:17:05,020 Do, (x & O_CREAT) estos ĉu 0 aŭ O_CREAT 841 01:17:05,020 --> 01:17:07,990 ĉar O_CREAT nur havas sola iom aro. 842 01:17:07,990 --> 01:17:12,800 Se tio iom estas metita apud, tiam ĉi tuj revenos O_CREAT - 843 01:17:12,800 --> 01:17:16,640 la duuma kie nur tiu bito estas fiksita. 844 01:17:16,640 --> 01:17:23,400 Se tio iom sekva ne estas agordita, tiam ĝi tuj revenos 0, en kiu okazo ni konas la flago ne estis fiksita. 845 01:17:23,400 --> 01:17:25,400 Tiel estas kiel vi uzas bitmasks. 846 01:17:25,400 --> 01:17:29,050 Mi kredas je antaŭan ekzamenon aŭ eble en klaso aŭ io - 847 01:17:29,050 --> 01:17:35,150 vi povas uzi ankaŭ bitmasks presi la duuma de variablo. 848 01:17:35,150 --> 01:17:46,250 Do mi povas uzi - looping super - 1, maldekstruloj sxangxigxo, 0 - kaj poste presi se x & ke - 849 01:17:46,250 --> 01:17:52,570 se x & 1, maldekstra movo: 0 - tiam presi 0 aŭ 1. Aŭ presi 1 else presi 0. 850 01:17:52,570 --> 01:18:00,620 Kaj poste mi iros super ankoraŭfoje - se x & 1, maldekstruloj movo: 2 - do tio signifas, ke la dua iom 851 01:18:00,620 --> 01:18:04,450 de la variablo estas fiksita, do mi presi 1 else Mi presi 0. 852 01:18:04,450 --> 01:18:06,860 Kaj mi kredas ke ni povus efektive volas fari tion en la inversa ordo ĉar 853 01:18:06,860 --> 01:18:10,120 kutime vi volas ke la maldekstra flanko estas la plej alta ordo bitoj 854 01:18:10,120 --> 01:18:24,510 kaj la dekstra flanko estas la plej malalta ordo bitoj, do versxajne buklo 4 int i = 31 ĝis mi trafis 0, 855 01:18:24,510 --> 01:18:32,320 do tiu ĝusta kondiĉo - se x & 1, maldekstruloj sxangxigxo, i; presi 1 else 0. 856 01:18:32,320 --> 01:18:34,320 [Studenta] Dankon. 857 01:18:36,280 --> 01:18:38,550 >> [Rob] Mi pensas ke ni estas el la tempo. 858 01:18:38,550 --> 01:18:42,840 Plu demandoj en la lastaj kelkaj ekster-de-tempo sekundoj? 859 01:18:42,840 --> 01:18:47,710 Ĉiuj pravas. Bonŝancon morgaŭ. 860 01:18:47,710 --> 01:18:54,780 Tiu estis la lasta sekcio, kie apud semajno tuj estu laŭvola. 861 01:18:54,780 --> 01:19:03,770 Mi redonos kvizojn kaj ni povas iri super ili kaj eble iros super aliaj aferoj 862 01:19:03,770 --> 01:19:09,230 vi estis interesitaj en, aŭ definitiva projekto aĵojn, aŭ estontaj CS klasoj aĵoj aŭ - Mi ne scias. 863 01:19:09,230 --> 01:19:12,070 Sed tio estas la lasta materialo plena sekcio. 864 01:19:12,070 --> 01:19:15,070 Ĝis! 865 01:19:15,070 --> 01:19:20,970 (Aplaŭdoj) 866 01:19:22,250 --> 01:19:24,420 >> [CS50.TV]