>> [Sekcio 9] [Pli Vasta]
[Rob Bowden] [Universitato Harvard]
[Ĉi tiu estas CS50.] [CS50.TV]
>> Bone. Esence hodiaŭ ĉio estas ĝis vi uloj demandi kelkajn demandojn.
Mi eble povus vagadi kun kelkaj temoj
por iomete se neniu havas demandojn demandi.
Espereble vi faru. Ĉu iu havas demandojn?
Eble el pasinteco kvizojn, aĵoj vi ne estas komforta kun aktuale.
>> Jes. >> [Studenta] Ĉu vi povas iri super buffer overflow atakojn? >> [Rob] Certe.
La ĉefa ekzemplo efektive povus esti jam ĉi tie.
La ĉefa multe malantaŭ buffer overflow atakoj estas
Ni havas kelkajn buffer, ĉi tie.
Char c - kiu estas nur de amplekso 12 -
sed poste ni volas enmeti ion en tiun buffer
sed ne kontrolanta ekzakte kiom ni volas enmeti.
Tie ĉi ni volas enmeti strlen (trinkejo) en C, sed kiu scias kiel longe trinkejo estas.
Se ĝi estas pli longa ol 12 signoj tiam ĉi tuj dronigos ĉi bufro.
Rigardante tiun foton -
se vi prenos la 61 vi ricevos multe pli familiara kun tiu speco de aranĝo
kaj traktante kun la savita framo montrilon kaj reveno adreso kaj gepatra rutino stako
kaj ĉiuj el tiuj realaj aferoj.
Sed ĉi tie vi nur bezonas scii ke ni havas
tiu malgranda spaco por niaj bufro.
Ĉi tie ni havas c (0) kaj tiam ni havas c, 1, 2, 3, 4, 5 kaj tiel plu.
Sub normalaj cirkonstancoj ni ENIGU buffer kiel por normala.
Se ni enmetitaj 'saluton' ni havus h-e-l-l-o / 0,
kaj tiam simple faskon da malplena spaco.
Por hacker - ho, mi supozas tio estas la ekzemplo.
Por hacker ni preni ion kiel tiu kie
kion ili specife provas fari estas
kutime nuligi la reveno adreso.
Kiam ajn vi nomas funkcio kaj viajn stack frame gets puŝis sur la stako
ke stack frame bezonas scii -
nu, la funkcio kiu estis nomata bezonas scii, kiel reveni al la funkcio kiun li nomis gxin.
Do, se ĉefa alvokoj foo, foo bezonas reveni al la ĉefa,
kaj do tio, kio estas tiu reveno adreso faras.
Sed kion la hacker tuj fari estas
nuligi ĝin per speciala reveno adreso
kie denove - Little Indian - ĝi estas ne simpla sed ĉiu bajto estas malantaŭen.
Tiu reveno adreson tiel for kiel la komputilo estas maltrankviligita
reveni al ĉi tiu adreso estas ekvivalento al reveni al Foo aŭ ĉefa
aux kion ajn funkcio nomita ĝi.
Do ĝi estas tuj revenos al tiu adreso
kio ĝuste tiel okazas al esti ĉi adreso
kiu aŭ kelkfoje kion ili faras ĉi tie estas uzi la reveno adreso
de specifa funkcio kiun oni scias estas jam tie.
Mi ne povas memori kion la funkcio nomiĝas.
Mi rigardos ĝin poste.
>> Jen kion ili faras estas pasante la reveno adreso
al la stako mem, kaj tio estas iom stranga, kie
tie estas ekzemploj de memoro kie -
memoro povas fendi supren enen nur legado, legi-skribi, kaj plenumebla memoro
kie ni vidis nurlega memoro antaux kie -
se mi diras char * s = saluton mi ne povas modifi saluton.
Tio nurlegebla memoro.
Ekzistas ankaux tiu ideo de plenumebla memoro
kie la ruleblan memoro estus la teksto segmento de via kodo.
Rigardante vian kutiman adreson spaco aranĝo -
Mi kredas, ke tuj estos bona bildo -
tio funkcias - kie ni havas niajn stako tien. Ni havas datumojn memoro.
Ignoru tiun esence. Tio estas nia muro.
Kaj tiam ni havas ĉi tie nian ĉefan programon kodo.
Tio estas simila al la loko kie ni metu niajn ĉenoj kiel char * = saluton
kaj tio nur legado.
Sed vi povus ankaŭ marki tiu ĉefa programo kodo kiel plenumebla.
Kaj se vi faras ke aux via mastruma sistemo faras tion korekte
tiam ĉi tio devas esti la sola loko en memoro
ke kodo povas reale ekzekuti
kion signifas tiu ĉi speco de bufro overflow atako ni havas ĉi tie
estus senutila ĉar ĉi provas ekzekuti memoron ĝis ĉi tie en nia stako.
Rimarku la bildoj estas unua.
Ni havas niajn stako kreskis.
Tie la stako kreskas malsupren.
Por CS50 celoj la stako kreskas supren.
>> Eblas moki tiun apartan tipon de bufro overflow
por havi tiujn ruleblan regionojn de la memoro en ne-plenumebla regionoj.
Sed ĝuste tial okazas, ke malofte estas plenumebla memoro markis kiel plenumebla.
Ĝi simple emas esti legi nur-kaj re-write estas la solaj aferoj kiuj estas uzataj,
tial cxi tiu estas ankoraŭ tre efika.
Kaj ĉi tie ni povus meti ajn ni volas.
Ĝi estis ne reale farita kiel Pset en 61 ĉi jaro,
sed se vi rigardas pasintjara oferdonon ĝin aŭ ajna antaŭa jaro
unu Pset estas vi specife supozis enŝovu tien kodo kiu supozas
presi iujn specifajn valoro aŭ resendas valoro kiu estas malsama de
la valoro kiu estas supozita al esti presitaj.
Aŭ eĉ pli lerte, volas vi, por voki aŭ skribi -
tial tiu revenos supren al tie kaj tiam vi havos ekzekuti iuj kodigon tie,
kaj la plej lertaj el superfluas estos tiam revenu al kio tiu reveno adreso kutimis esti.
Do kvankam ni bezonis nuligi ĉi
veni ĉi tien, ni ankoraŭ memoras, ke reveno adreso ie
tiel ke ni povos reveni al ĉefa aŭ kio ajn,
kaj tio estas kvazaŭ ni neniam eĉ rimarkis ke aferoj iris malbone.
Sed tion faris tiel tio estas la kazo kie eble ene de ĉi tie ni gelbroke nia iPhone.
Aĵoj iri kiel normala - kiel ni kuras iun programon kaj aĵoj finos reveninte al
kion ajn ĝi estas supozitaj reveni al, sed intertempe
vi sukcesis detrui la tutan mastruman sistemon.
Vi ne bezonas scii kodo pri buffer superfluas aŭ reale utiligante ĝin.
Vi bezonas scii la bazaj ideoj de tiu estas la buffer tio estas esti superfluis,
kaj ĉi tiu estas la kialo, ke ĝi povas esti superfluis ĉar ni ne kontrolas ĉu
ni estas vere ene de la limoj de ĝi.
>> [Studenta] La solvo por preventi estas ĝuste kontrolanta la limojn?
[Rob] Jes. En tiu kazo la solvo estus
vi povus ĉu diri se strlen de stango estas pli granda ol 12-1 -
ĉar vi bezonas la / 0 je la fino -
aŭ vi povus mane fari por buklo ke nur kopias la unuaj 11 signoj,
aŭ nur io, kie vi estas vere kontrolanta certigi vin ne dronigos ke bufro.
>> Aliaj demandoj? Jes?
[Studenta] Cxu vi parolas pri provas kaj eble io pri programado (inaudibles).
[Rob] Certe.
La efektiva programo -
ni neniam faros vin fari efektivigo de trie en la ekzameno
ĉar tio estus maljusta al tiuj kiuj faris hash tabloj.
Kaj simile ni neniam faros vin praktikigi hash tablo en la ekzameno
ĉar tio estus maljusta al tiuj kiuj faris peras.
Vi devus tamen scias la struct de trie aŭ la struct de hash tablo aŭ kio ajn.
Tio estas fakte vera de omnaspeca datumstrukturo ni vidis.
Ligita lertaj, stacked skews, duumaj arboj -
vi devus povi difini tiujn structs parkere.
A trie - tio signifas, la sola afero kiun vi bezonas fari, estas eble ni donos al vi
iu vorto aŭ ion kaj ni diru konstrui la trie, ke -
Ni donos al vi eble aron de vortoj
kaj ni estas kiel konstrui trie kiu reprezentas ĉi vortaro.
>> Ni faros nian vortaro kato kaj hundo.
La ideo de la trie estas ni komencu per tiu tabelo -
26 fendoj -
kaj en ĉiu fendo la efektiva indekso de la fendo korespondas al la letero ni estas koncernita kun.
Do ĉi tie, se ni provas enmeti katon en nian trie
la unua signo estas 'c' kiu tuj esti 'se estas 0 tiam b estas 1, c 2.'
Ni tuj iras en la dua indico,
kaj ni tuj krei trie for de tiu.
Ni tuj havos 26 fendoj.
Kaj poste ni iras al indekso la duan karakteron de kato.
Tio estas 'a' kiu tuj estos la 0-makulo.
Kaj tio okazas al havi 26 makuloj.
Tiam ni iru al la 't' kaj ni devus ankaŭ havi tiun malsuprenirantan kio estas fakte speco de gravaj
ĉar - ni havas ĝin veni tien. Jen nia trie por 't'.
Diru ĉi estas indekso 't' estas 19.
La grava afero por memori pri tries estas ne eblas simple sekvigi tiujn montriloj.
Vi ankaŭ devas sekvigi, ĉu ĉi tiu estas efektive la fino de vorto.
Do, ene de ĉi tie ni bezonas ia flago kiu diras
bone, tio estas efektive la fino de vorto.
La kialo estas, se ni poste provi enmeti katastrofaj en nia vortaro
kiu havas la sama ekde 3 signoj
sed iras sur plua necesas agnoski, ke cxi tiu estas la fino de vorto.
Aŭ alternative, se ni provu serĉi 'ca' kio eble ne estas vorto
sed ni malsupreniru al tie do ni -
aŭ ĉu ĝi estu c kaj poste ni rigardas a -
ni bezonas agnoski ke kvankam tie estas montrilo venanta el tiu nodo
ĝi ne reprezentas la fino de la vorto.
>> Do, kion signifas tio - kio estis vi intencas diri?
Kion tio signifas nian struct aspektas kiel?
[Studenta] Ĝi estas tabelo de montriloj kiu estas 26 longa kaj tiam bool estis aŭ ne estis.
[Rob] Jes. Do, ni havos struct trie * pointers - tie ni diros [26] en
kaj tiam la punktokomo super tie.
Sed sur la Pset, ni ankaŭ bezonos klarigi apostrofoj,
kio signifis vi bezonis malfacile-kodon kiu apostrofo kun indekso 27 aŭ io.
Sed ĉi tie ni nur zorgas pri 26.
Kaj tiam ni bezonos eble char en aŭ bool - ni nomas ĝin estas vorto.
Tio 2 el la 3 aferoj mi opinias ke vi devus iam bezonos scii pri peras -
konstrui ilin, la struct de ili, kaj la lasta bona estas la rultempa el ili.
>> Kio estas la runtime de trie - aŭ la lookup en trie?
Tie estas kie ni diras ke estas O (k), kie k estas la longeco de la vorto ni okazi al oni rigardas supren;
sed samtempe, ni diru - almenaŭ por Pset 5 Speller, kalkaj - ni diru
la plej longa vorto en la vortaro estas 45 signoj, tial tiu estas esence
la O de 45 kiu estas konstanta tempo.
Do, se estas supera baro sur via plej longa vorto tiam -
aŭ eĉ kiel la angla vortaro - tie estas supera baro sur via plej longa vorto.
Aŭ iu vortaro - estas plej longa baro sur via supra vorto.
Ne gravas kion vi faras estas konstanta tempo,
sed ho de k estas bela ĉar tie vere estas diferenco inter kurado diras
45-karakteron vorto kontre alfabeto kiu havas nur vortojn ĝis 3 signoj.
Alia afero pri tio estas ke la -
oh, ĉar ĝuste diri ke 45 hazarde estas nia plej longa vorto
estas ia stulta ĉar samtempe diru algoritmo estas O de N.
Nu bone, ĉar memoro subtenas nur ĝis 2 ^ 32 bitokoj,
tiam N estas maksimume 4 miliardoj kaj tio estas konstanta tempo, tial je iu punkto
ĝi estas stulta diri ĉi tia afero kie estas supera baro
ke ni povos ĝuste redukti konstantan tempo ĉar ĉio estas konstanta tempo
kiam vi pensas pri tio en tiu vojo.
Sed ni versxajne akceptus ambaŭ el tiuj.
En ajna kazo klarigi cxu ke O (1) signifas ke vi havas superan-barita longeco de vorto;
O (k) signifas via longeco de la vorto -
bone, k signifas longeco de la vorto.
>> Jes. >> [Studenta] Ĉu la bool - ĉar, kiam vi faris vian trie
gxi sxajnis kiel ĝi estis - vi irus katon kaj tiam vi iru al la sekvanta montrilo
kaj tiam vi diru se tio egalas vera - ĉu vi metis tiun veran ĉe kiel kun la t?
[Rob] Ni kredas ke tiu estas la kazo kie multe da ekzemploj vi povas simple provi kaj supreniru kun
simpla kaj / aŭ ekstremaj ekzemploj kaj kion ĝi devus esti, do ni pensu pri la vorto 'a'.
En nia originala trie -
ĉu ni volas meti 1 cxi tie, aux ni volus meti 1 suben ĉi tien.
Mi dirus, ke en la fino ĝi probable estus ĉu / aŭ.
Mi ne povas pensi kialon - aŭ vere vi wouldn't -
la kialo mi ne metis ĝin tie malsupre estas ĉar vi eĉ ne bezonas iri kiu for.
Ni neniam bezonas atribui ĉi trie.
Ni simple metos la 1 ĝis tie.
Tio estas ankoraŭ indikante nula.
Se ni nur tuj havas solan karakteroj
ke ne estas kialo por etendi malsupren al alia trie ĝuste por marki tiun leteron kiel uzata.
Simile, se ni enmetis la 'a' tie malsupre
tiam nepre ĉiuj el tiuj estus nur esti 0, je ĉiuj tempoj.
>> [Studenta] Sed ne ni bezonas komencante trie ke montros al ĉi tiun 'oni'?
[Rob] Ni havas kelkajn tutmondaj aŭ io struct trie * t
kiuj punktoj tie, sed tio estas nur montrilo.
Ĝi ne estas kompleta blovitaj trie ke'S montrante al ĝi.
[Studenta] Okay. Kiel ni atribui la literon 'i'- kun la vorto mi?
[Rob] Lia demando povus respondi tion. Atendu.
Tio estas temo, kie trie en kaj per si -
Mi ne scias la vojon al la Pset estus skribinta ĝin.
La antaŭa struct estis malbona.
Sed ni povus ankaŭ fari struct nodo estas bool - kaj puntero -
tie estas reale plurajn manierojn vi povus skribi ĝin.
Alternative oni trie ne bezonas esti struct.
Ĝi povus eĉ esti trie - typedef nodo * -
nodo [26] Estas trie, kaj ĉi tiu jam ne struct.
Nun tie okazas esti - I'm provas pensi pri la vojo, kiun Pset atendus vin.
[Studenta] Mi tiris supren kiuj recenzo kunsido kaj mi kredas ke ili simple iru -
kiel se vi havas tiam vi iru al la sekva - >> [Rob] Jen kiel ili faras tion?
[Studenta] Kaj poste, se estas vera tie ĝi ne funkcias -
[Rob] Jes. Tio vere funkcias. Ĝi perdas la spaco de -
vi nepre havas tutan alian nivelon de trie, ke vi ne bezonus en la unua loko.
Jen ĝi Fariĝas malbela kun ĉiu -
esence kion mi klopodas fari ĉi tie estas asociita -
anstataŭ esti 26 montriloj al viaj provoj,
ĝi estas la 26 bool montrilon, bool montrilon, bool montrilo, kaj tiel plu.
>> [Studenta] Oni ne povas fari ke 2 arrays? Tabelo de bools kaj tabelo de montriloj?
[Rob] Vi povus sed tiam vi bezonus -
2 arrays de booleans kaj montriloj.
Vi bezonus do konstruu vian tabelo de booleans -
via tabelo de booleans bezonas esti tiel granda, kiel la trie
ĉar ne eblas simple havas 26 booleans.
Ĝi devas kreski per ĉiu ebla -
kiel viaj trie havas pli ol 26 veraj aŭ falsaj eblaj vortoj.
Je tiu punkto ili povas tiel simple esti sola struct ke via trie kreskas malsupren kun.
Ĉi tio ne ŝajnas dekstra ĉar - Kion mi volas ĉi tie?
Do, trie * t -
ĉu vi povas fari typedef (nodo *) [26] trie;
ke estu la sintakso Mi serĉas.
Kaj tiu devas esti simple regula trie.
Mi ne estas certa.
Sed tio estas la maniero ni faris gxin en la recenzo, tiel ke ĝi funkcias perfekte delikata, tro.
En kiu kazo se ĝi estas nur bool estas vorto kaj tiam tabelo de 26
tiam vi devos iri al la sekvanta nivelo.
Mi pensas pri la vojo mi farus tion.
>> Aliaj demandoj?
[Studenta] Ĉu mi povas demandi pri io alia? >> [Rob] Jes.
[Studenta] Ĉu vi povas iri super kio la diferenco estas kaj kiam vi volus uzi jQuery kontre Ajax?
[Rob] Ili estas en si mem tute malsama.
JQuery faras ebligi Ajax. Ĝi faras donu al ni iom pli facila uzo de Ajax.
Sed Ajax venas senditaj per JavaScript. Javascript havas Ajax kapablojn.
Ĉiuj Ajax signifas komparos Mi jam sur la paĝo kaj kiam mi volas -
Kiam mi klakas sur io mi ne bezonos reŝargi la paĝon por elŝuti tiun novan informon.
Mi nur petas ke novaj informoj.
Vi povas rigardi ĝin en Facebook aŭ io.
Inspekti reto.
Shrink ĉi.
Malsupren tie ni vidas ke ni ricevas cxion cxi petoj.
Nun kiam mi klakas sur - Nu, estas faranta Ajax antaux Mi eĉ alklaku nenion.
Sed se mi klakas sur ĉi, tiam ĝi tuj fari amaseton da petoj suben ĉi tien
kio ĝuste farante tiujn petojn - ho, nun estas ĉi tie.
Ni fortigu.
Faru tion denove.
Ni vidas, ke ni ricevas cxion cxi petoj, sed ĉi tiu povus esti ankoraŭ en la procezo de la paĝo ŝarĝo.
Rimarku Facebook farante tiujn konstanta petojn eĉ post la paĝon ŝarĝita.
Kaj se mi alklaku ĉi tie, ĝi faros iun pli petoj pri iuj datumoj
kiu estas en la respondo al la afero mi ĵus alklakis.
Tio estas nur kion Ajax estas. Ĝi permesas vin tiri por datumoj kiuj ne estis elŝutita kun la paĝon origine.
>> JQuery estas apartaj. JQuery estas nur JavaScript biblioteko kiu faras multajn aferojn pli facilaj.
Kun jQuery ĝi estas multe da avantaĝo estas tio ĝuste -
dolaro signo - dolaro signo estas valida variablon en JavaScript.
Do, jQuery - ĉiuj ĝi estas faranta diras kiel var $ = tutan faskon da aĵoj -
kiel iuj grandaj funkcio kun ĉiuj ĉi aĵoj en ĝi -
kaj tiam vi uzas tiun dolaro signo en manieroj kiel
$ ("# Footer"). Stilon ("text-align", "center").
JQuery donas al ni tian sintakson kie estas granda avantaĝo -
Ĝi havas aliajn funkciojn sed kion ni deziras al vi koncentriĝi pri la plej
Estas simple povi elekti elementojn kiel ĉi tio.
En regula, plain-malnova JavaScript vi povas fari tion kiel
dokumento-dot-get elemento por identigo footer-punkto - mi ne scias kion ĝi estas je tiu punkto -
io pri CSS aŭ stilo aŭ io -
sed tiam alternative, diru ni volis elekti por la klaso.
Nun ni estas stiligante ĉio kun klaso piedlinio kun tiu stilo.
Eĉ se ni volis stiligi ajn alineojn.
Do, ĉi selector - povi elekti tion en la dom ŝatas ĉi estas nekredeble konvena
pro tio ke en cxirkauxajxo malnovan JavaScript vi devus fari dokumento-dot-get elementoj de la klaso nomo
aŭ kio ajn ĝi estas, aŭ ĉu mi volis etikedon mi bezonus diri get elementoj laŭ etikedo nomo.
Do, mi bezonas scii la specifaj formoj kiujn mi aliri ĉiom de tiuj aferoj.
La funkcioj estos diferenca dependanta sur ĉu mi uzas klason aux ID
aux etikedon aŭ kio, dum jQuery ĝuste faras tion por mi.
>> [Studenta] Is jQuery tuj esti uzata kiam vi faras komenca stilo de la pagxo?
Aŭ por ŝanĝi la stilo post ĝi estas jam - >> [Rob] Por ŝanĝi ĝin.
[Studenta] Post ĝi estas jam ŝarĝita. >> [Rob] Jes.
Ajna komenca stilo - nu, eĉ la -
Ĝenerale vi uzus tian ŝanĝon.
Vi ne ŝanĝus - tio funkcius perfekte bone.
Sed kutime vi ne ŝanĝus la stilon kiel tiu.
Anstataŭe, vi donus al ĝi novan klason aŭ ion
dum la CSS jam estis difinita por tiu klaso en certa maniero.
Per doni tiujn erojn mi elektu novan klason
Mi apliki la stilojn kiuj jam elŝutis.
[Studenta] Do vi elektas paron el markobutonojn kaj tion, ke vi jam elektitaj
ŝanĝi al nova stilo kaj komenci serĉi malsama. >> [Rob] Jes.
La aliajn aferojn por memori pri -
Nu, estas pluraj funkcioj vi devus memori pri jQuery.
Ni diru ke ni elektu iun kun ID P.
>> [Studenta] Ĉu vi ĉiam devas uzi la funto?
[Rob] Tio signifas ID. Ĝi estas ekvivalento al la CSS, do CSS selectores - ĝi estas inspirita de tio.
Kie en CSS se mi volis stiligi a footer -
aŭ iu kun ID piedlinio -
estus kiel teksto-align: center;
Vi ne bezonas skribi CSS sur la ekzamenon, sed vi devas scii la seleccionadores.
Vi devas scii kion - kion vi bezonas scii kiel legi ĝin.
Sed ni farus neniam -
Vi ne bezonas parkerigi ĉiujn de la malsamaj eblaj stilo aferojn. Aux iu el ili.
>> JQuery tion vi devus memori -
vi devus memori dot-HTML, kaj komuna ŝablono en jQuery - ni re-skribi ĉi.
Komuna ŝablono estas ni $ ("# f"). Html
Se mi metis nur ordinaraj parentezoj tio signifas ricevi la HTML;
dum se mi diros HTML kaj metos kion mi volas ĉi tie - kelkajn ligilo al io -
metante ion ene de la parentezoj nun difinas la HTML.
Tio estas sufiĉe komuna inter faskon de funkcioj.
Ekzistas la sama traktadon kun teksto.
La diferenco inter HTML kaj teksto estas tiu teksto tuj enigi ĉi
kiel laŭvorta malpli-ol, plej granda-ol anstataŭ kiel ankron etikedo.
Kaj tekston tuj estos la sama, se mi ĝuste faru tion.
Ĝi tuj retrovi la tekston de la dokumento - ne la HTML de la dokumento
sed nur la teksto ene de ĉi elemento.
Alia estas se 'f' okazas esti ID por enigo,
tiam hash-f-dot-val - se mi volas fiksi la enigo al io kiel -
diru mi koliziis kun checkbox kaj mi volas fiksi defaŭlta valoro -
dot-val - mi eĉ ne scias - 3 - tiel ke estos aŭtomate enmetas en la teksta kadro 3
sed se Mi diros 3-dot-val, ke estos elsxuti ajn estas nuntempe en la tekstujo por mi.
>> Tio estas utila por formo validigo kie
se Mi nur volis certigi, ke ili efektive plena el ĉiuj aferoj.
Unu maniero fari tion estas, se post mi batis submit ĝi estos neeviteble sendita al iu pagxo de la servilo -
kiel por ni estus PHP - kaj kiu provus prilabori la datumojn kaj ĝi dirus
ili ne plenigu ion ekstere, tiel ke nun alidirektas al alia pagxo kiu diras
vi ne plenigis ĉiun el.
Anstataŭ devi fari tion, en JavaScript / jQuery vi povas nur vidi, ĉu val estas malplena.
Aŭ ĉu val - malplenaj citiloj.
Tio tuj ĝuste - Nun ni povas alarmi ilin ke vi ne plenigis cxi tiun kampon.
Neeviteble vi bezonas fari la PHP-servilo-flanko kontrolado ĉar
vi povas simple malŝalti JavaScript en ĉiuj retumiloj.
Sed JavaScript faras ĝin konvena por tiuj, kiuj ja havas gxin aktivigita,
kaj virtuale naŭdek-naŭ-punkto-io procento de retumiloj havas ĝin nuntempe.
Tre malmultaj homoj turni JavaScript for.
Ĝi estas uzanto oportuneco. Vi devas fari PHP validigo.
Vi devus fari JavaScript validigo.
>> [Studenta] Kion signifas # f aludas tie?
[Rob] Kion signifas # f aludas al?
Estas iu ero en mia dokumento kun ID 'f'.
Ni rigardu - probable Facebook havas multajn ekzemplojn kie se mi venus al elementoj
rigardante tien sub la elementoj etikedon mi vidas ĉi tiun apartan div tio estas esti reliefigis ĝis tie -
aŭ ĉu la tuta paĝo - jes, ĝi estas tie supre. Ĉi tio havas ID pagelet_bluebar.
En konzolo mi supozas ke ili uzas jQuery.
Do, mi povis elekti pagelet_bluebar tiel ke selektas tio, kaj mi faris ion malbonan.
Ni provu - aŭ eble ili ne uzas jQuery kaj ke gravulo mapita al io alia.
Pli bona ekzemplo en io mi scias uzas jQuery -
ankoraŭ rigardante niajn elementoj tie - ni havas ĉi tie klaso egalas navbar.
Tio estas io kun klaso navbar,
tiel ene de nia konzolo ni povas rigardi ĝis la aferon kun klaso navbar.
Ĉi tie ni povas rulumi super ĉi kaj vidas ke estas kion ĉi estas.
Se mi volis fari. Tekston ĉi tiu estas la teksto de tiu, tiel mi vidas agordojn por raporto supre log out
kio estas sub ĉi tie, sed tio estas ankoraŭ teksto ene de tiu HTML-etikedo.
Mi povus agordi la HTML al nur iuj ligilo,
do mi liveris de mia breto. Nun kiu liveris de la kaplinio tute ĝuste tial ĝi estas ligita al YouTube.
>> Kaj cxu ekzistas formo ekzemplon?
Jen formularo.
Mi povas dekstre-klaku kaj inspekti elemento veni al ĝi ĝuste ĉi tie.
Mi vidas ke ĝia ID tekstserĉo
do cxi tie, se mi faras ID teksto serĉo.
Mi alportos sur ĝi kaj mi vidas, ke estas la ĝusta afero mi serĉis.
Se mi volas fari. Val donus al mi tion, kion mi tajpis tie.
Se mi volis fari saluton ĝi ŝanĝos ĝin ĉi tie por saluton - jQuery.
Kompreneble mi povus fari ridindaj kiel document.get elemento por identigo - tekstserĉo -
Mi ecx ne scias kion ĝi estas je tiu punkto - skalara valoro - ne, mi forgesis pri tiu ulo.
Do, jen saluton. Mi ne scias kiel mi starigis gxin egalas ion.
Jes, tiel ke ŝanĝis tion.
Sed vi ne bezonas por uzi ĉi tiuj kaj tre multaj retejoj ĉe tiu punkto uzo jQuery.
Eĉ kiel pri fina projekto - se vi faras reta projekto - la unua afero
Mi rekomendas estas nur inkludante jQuery tiel vi povas ricevi la komforto de cxiuj tiuj funkcioj.
>> [Studenta] Mi kredas ke mi vidis alian manieron por atingi unu elementon uzi dom.
Ĉu vi devas uzi punkton kaj poste konservi mallevigxo?
[Rob] Vi povas fari tion. Mi ne scias se ĝi funkcius bone.
Ĝi estas malfacila por navigi tiu vojo.
Unu ekzemplo estas - mi eĉ ne scias se ni havos neniun formoj -
sed document.forms tuj revenos la listo de formoj kiuj estas sur ĉi tiu paĝo,
do mi povas fari document.forms 0 tuj estos la unua formo.
Dot - Mi ne scias, kion ni nomas tio - do tio ne eĉ havas nomon,
do eble enigoj laboros. N-ro
Mi ecx ne scias kiel akiri je ĉi - get elemento-mi-tag nomo enigo.
Jes, tio donis al mi la eniron, kaj nun mi volas la 0 enigi
kaj mi volas elekti ĝian valoron, tiel ke tuj estos teksto.
Mi devis fini farante get elementoj laŭ etikedo nomo ĉiukaze.
Tie povus esti kelkaj manieron elekti ĝin rekte
tra formo 0, sed la bela afero pri ĉi tiu estas ankoraŭ kiel mi nur devis akiri la etikedoj nomata enigo
kiuj estis infano de tiu formo, alie, se mi nur faras tion rekte antaŭ
tio estus elekti ĉiuj elementoj sur la tuton de la paĝo, en la tuta dokumento
anstataŭ ĝuste tiu formo kaj ĝi probable ne ecx estu la unu mi volas.
Mi ecx ne scias kion oni estas. Mi ne scias.
Mi supozas ke la unua eniro elemento en nia paĝo estas jena iom checkbox.
>> [Studenta] Tiu estas bela nerilataj
kaj eble ia stulta, sed pri la respondo klavo ĝi diras ke PHP -
Mi ne scias ĉu ĝi estas la respondo ŝlosilo aŭ notojn sed diras PHP estas servilo-flanko
kaj JavaScript estas kliento-flanko. Kio estas la diferenco inter la 2?
[Rob] La diferenco inter JavaScript kliento-flanko kaj PHP-servilo-flanko.
Se vi iam auxdis pri oblikvo / uzitaj nodo js antaŭ vi pensus ke
Javascript estas ne nur klienton-flankon sed por CS50 celoj ĝi estas -
aŭ almenaŭ por tiu kvizo la celoj estas.
PHP estas servilo-flanko. Neniu JavaScript.
Kiam vi skribas vian retpaĝon vi skribos PHP sur la servilo.
Vi neniam skribos Ĝavaskripton en la servilo.
Javascript finu getting sendita al la retumilo kie JavaScript kodo ekzekutas.
Kaj la kodo JavaScript bezonas por vivi en la retumilo ĉar alie, kiam mi volas
nur faru omnaspeca JavaScript-y afero kiel alklakante ĉi,
Mi ne reŝargi la paĝon. Tiu estas ĝuste JavaScript re-arangxa aferojn por mi.
Se JavaScript vivis sur la servilo, do mi bezonus neeviteble peti ion
de la servilo por scii, kion fari.
PHP - ne ekzistas tia afero kiel PHP en la foliumilo.
Kiam mi petas paĝo - do ni diras ĉi tie mi petis ĉi aparta paĝo.
Tio signifas, ke tiu tuj peti -
refresxigu - ĝi tuj refreŝigi la paĝon -
tial cxi tiu peto eliras al nia servilo.
Vidu ke vi bezonu reveni ĉi aparta fadeno kun tiu aparta ID,
tial nun, ke tuj estos iuj PHP ke la PHP-interpretilo tuj interpretas ke paĝo
kaj transformi ĝin en nur HTML, CSS, eble JavaScript, kio ajn.
Estas PHP kiu procesas tiun peton kaj rekuperas ĉiuj de la teksto kaj necesajxojn
ke mi fakte serĉas el la datumbazo.
Sed kion lasas la servilo estas simple HTML / JS / CSS.
Ne estas PHP kiu forlasas la servilo pro tio se oni vere faris
tiam la retumilo havus nenian ideon kion fari kun ĝi, ĉar ĝi ne sciis, kion PHP estas.
Sed en la sama penso ĉar JavaScript estas kliento-flanko,
Vi neniam povas aliri MySQL el ĝi.
Ĉar PHP estas servilo-flanko vi aliras MySQL el ĝi.
>> [Studenta] Ĉu vi povas iri super iu el la zorgojn pri sekureco kun kuketoj en HTTP?
[Rob] Tiuj ne estas, kion ni tuj bezonas scii.
Kelkaj el la zorgojn pri sekureco kun kuketoj en HTTP.
La granda demando tie ni vidas tie, ke miaj kuketo estas PHP / identigilo.
Tio estas kiel la universala PHP vian seancon.
Viaj kunsido estas iu kiu ene de PHP neniam devas esti validigitaj
ĉar ĝi estas la servilo kiu havas kompletan kontrolon super la kunsido.
Vi ne povas tusxi gxin.
Sed temas pri tiu ĉi kuketo - ĉi tiu -
kaj mi supozas ke vi povus ensaluti kiel mi nun se vi volas uzi tiun -
sed ĝi estas tiu kuketo ke la - neeviteble vi faras solan peton al la servilo.
La servilo resendas la paĝo. La peto estas farita.
Ĝi ne plu havas neniun ideon, kiu vi estas.
Do, la sekvanta peton vi faru tuj inkluzivi ke kuketo tial ke vi sciu
tio estas la persono kiu faris tiun peton antaŭe.
Tiu estas la sesiaj datenoj kiu asocias kun tiu uzanto.
Tial vi ne devas ensaluti por ĉiuj kaj ĉiu paĝo vi uzas.
La sekureco afero ĉi tie estas, ke tiu kuketo estas sendita el super la retejo.
Ni uzas HTTPS tie, do en tiu kazo, ke signifas, ke ni estas kodi tiun materialon.
Iu ne povas enveni kaj nur sxteli mian biskviton kaj nun la servilon pensos ke ili estas mi.
Sed kun rektaj HTTP ili povas.
Ĝuste kiel ĉi Wireshark / Firesheep stuff ke vi povas nur aŭskulti al ĉiuj de la wi-FIS en la aero
kaj detranĉo kion ajn vi volas, do jes.
>> [Studenta] Ia simila sekureco risko stokante uzantidentigilon s en fosto
ĉar kiu povas esti libere redaktata uzante konzoloj kaj aĵoj.
[Rob] Jes. Tie estas multe da aferoj kie kiel nur ion, kio venas de la uzanto
vi devas validigi.
Ekzistas multaj kazoj kie estus utila por kiel mi intencas fari post.
Bla, bla, bla, bla, bla. Tiam mi batis respondo.
Estus tre utila se la fosto peto inkludis mian ID ĉar
Mi volas asociigi afiŝo kun mi.
Sed mi ne povas fari tion ĉar mi estas liberaj por fari post peto - same kiel permane
supreniru kun mia propra post peto -
kiu uzas vian uzantidentigilon kaj nun ĝi afiŝos kiel vi.
Tio estas kial servilo-flanko mi ne povas fidi post petojn enhavanta la korekta uzantidentigilon.
Tial ĝi devas aparteni en mia sesio.
Do mi rigardu viajn uzantidentigilon en mia kunsido tabelo kaj mi enmetas, ke en mian datumbazon
kiel la uzanto kiu efektive faris ĉi afiŝo.
[Studenta] Kaj ke estas bazita sur via kuketo?
[Rob] Jes. Ĝi uzas la kuketon parigi supren vi kiel la uzanto, kiu faris tiun peton.
Ĝi eltiras la uzantidentigilon de tiu kunsido kaj ke tiam enmetas en la datumbazo
uzante tiu uzantidentigilon.
Ĉi kiel butono - kion tio fakte farante estas -
Mi ne tuj trovis ŝin tie. Ĝi fariĝos Ajax funkcio
Kio estas Ajax funkcio?
Permesu al mi eltrovi kio mia JavaScript estas.
Estis CS50 projekto faras momenton.
Mi ne povas memori kion ĝi estas.
Ajax funkcio - ĉiuj Ajax funkcio faras estas farante Ajax peto al paĝo kun ĉi ID -
kun la ID 22453.
Ĝi ne estas eĉ post peto. Estas get peton, kiun faras ankoraŭ pli facila.
Se mi scius, kion la URL estas - ĝi estas io kiel kiel ĉi / ID = 22453 -
aŭ? ID = 22453 -
do ekkoni ĉi tiun URL ŝatos tion.
Kiuj ne estus tiel multe de problemo, sed estas nekredeble facila skribi buklo
kio estas ĝuste tuj vizitu ĉi URL denove kaj denove, tial vi vidas
Isawyouharvard sendi kun miloj da aĵoj.
Kaj ili inklinas esti CS50-bazitaj Isawyouharvard afiŝoj.
Kjel mi trovi la plej kara?
Ili emas get forigita bela rapide, tro.
Ĉi tio ne estas la plej kara. Tie ni iru.
Tramposos sur la plej ŝatis paĝo - ke estas sufiĉe grava por ĉi tiu momento.
Oh wow. Ili jam forigita iu el tiuj, el tiu ĉi jaro, kiun estis
trompis. Tiuj ĉiuj estas forigita.
Tie neniam estos post tio alvenas ĉi altaj.
Ĉi tiu estis evidente trompis pluiri al la plej ŝatis paĝo.
>> Pli demandojn?
[Studenta] Kion ni scias pri XHTML?
[Rob] Virtuale nenion. Ĝuste kion ĝi estas.
La diferenco inter ĝi kaj HTML estas ke XML estas tre similaj laŭ aspekto
al HTML krom en HTML oni simple devas havi antaŭdifinitaj aro de etikedoj.
Sed kun XML - XML ​​estas nur kiel ĝenerala formato, kie vi povas fari XML dokumento
por kiaj celoj vi deziras.
Do, ekzemple, se mi volis mi povus konstrui XML por la kursoj -
kaj mi vere pensas ke CS50 havas API por ĉi tio.
Mia XML dokumento povus rigardi ion kiel -
kursoj kaj kompreneble mi bezonas iom fino kursoj.
Mi povus havi kurson kaj ĝi povis havi nomon egalas CS50.
Kaj tiam mia fino kurso kaj mi povus meti ene de ĉi tie studentoj,
kaj poste ene de studentoj Mi havas liston de unu studento kies nomo estas ajn.
Mi finos ke lernanto kaj tiel plu.
Mi ĵus hazarde konstruis iun arbitran XML dokumento, sed tio estas valida XML.
XML - ĉio tio estas estas ĉi speco de strukturo kaj la bela afero - la kialo, ke ni eĉ nomas ĝin XML
estas ke ĉi tia afero estas tre facila por analizi.
Ĝi estas tre facila al preni ĉi tiun dokumenton, kaj fari tabelo el ĝi.
Kaj tiel XHTML estas provo ricevi la HTML esti valida XML.
Jam tio aspektas bela similaj al HTML.
Kelkaj el la diferencoj estas HTML vi povas fari tion kiel enigo eble tipo egalas teksto
kiu estas la defaŭlta do mi ne bezonas diri tion.
Malebligita.
>> Estas 2 aferoj en ĉi tie kiuj faras ĉi nevalida XHTML.
La unua afero estas ke cxiuj XML etikedoj bezonas fermon etikedo.
Do, en la kazo de enigo Mi bezonas fari la - kiu direkto oblikvo estas tio?
Ĉi tiu direkto? Tio aspektas erara.
Aliaj direkto.
Mem-fermante etikedo.
La dua afero estas, ke per XML vi bezonas tiajn kiel ŝlosilan valoron paroj.
Ĝi bezonas valoron asociita kun ĝi.
Do, eĉ se malaktivigita en kaj de sin esprimas, kion mi volas -
tiu enigo devus esti malebligita -
ke estas nevalidaj XHTML.
Kion mi vere bezonus por skribi estas malaktivigita egalas handikapita.
Nun ĝi estas valida XHTML.
Kaj tiuj estas nur tiuj malgrandaj diferencoj kiuj transformas la HTML de XML-bazitaj tia afero.
>> [Studenta] XML estas proksimume kiel tiro per viaj propraj X aro kiel kial estas li (inaudibles)
[Rob] La afero de kiel CSV - a CSV vi havas nur valorojn disigitaj per -
nur pensi en kalkultabelo. A CSV estas esence kalkultabelo.
Vi havas eble kolumnoj kaj vi havas faskon da vicoj ke
asociita datumojn kun tiuj kolumnoj sed tio estas ĝi.
XML estas multe pli versátiles en kiuj vi povas - vi havas arbitran hierarkio de datumoj.
Mi povus havi plurajn kursojn kiuj havas multnombraj studentoj en ĝi
kie estus malfacile pensi en kalkultabelo, ke -
nur tiu sola ŝtono - CSV speciale estas kiel nur unu folio -
por ke sola kalkultabelo havante cxiujn CS50, 51, kaj 61 kaj en tiuj, ĉiuj
studentoj rilataj al tiuj epokoj, eble renkonti tempoj kaj ĉiuj tiaj aferoj.
La alia afero estas, ke la etikedo nomoj doni belan nomon al ĉiu el la elementoj
tiel leganta CSV-dosiero povas esti malfacila por provi kaj analizi kion ĝi estas reale vidas.
XML estas multe pli facile legebla por ke tial kiel - supreniru al iu persono, kiu ne
vere scias kia CSV-dosiero estas aŭ ŝatas estas ne programisto aŭ io -
vi povas doni al ili kiel ŝablono por XML-dosiero kaj oni povas sekvi la linioj kaj -
ho, mi supozas enmeti mian nomon ĉi tie.
Ĝi estas multe pli uzebla formato.
CSV havas multajn uzojn sed XML havas malsamajn uzojn.
>> Pli demandojn?
Aliaj demandoj?
[Studenta] De la antaŭaj kvizo - vertikala skalo kontre horizontala grimpita.
[Rob] Vi ne bezonas scii tion. Mi ne kredas ke ni ecx diskutas tion.
Mi konjektas ke estis nur unu-off komento.
Oh. Horizontala kontre vertikala skalo ne estas io, kion vi bezonos scii.
Mi kredas ke la diferenco estas nur kvazaŭ - ho bone, la respondo klavo diros la diferencon.
Vertikala skalo estas simple ŝatas ho, mia komputilo faras malbone. Mi akiros bonan.
Dum horizontala skalo estas ho, mia komputilo estas faranta malbone -
lasu min akiri 20 de ili al la tuta laboro sur la sama tasko.
>> [Studenta] Cxu ni transiros ligillisto manieron fari vostoj. >> [Rob] Certe.
Tio estas pli facila ol la tabelo vojo.
La ligillisto manieron fari vostoj.
Unue, kion signifas nian struct di ligillisto aspekti?
[Studenta] Cxu ni faras ĝin por - >> [Rob] Ni faru lian - yeah.
Mez val; tiam struct nodo * proksima;
do tio, kion ni uzu por la ekzemplo tie ĉi.
Ni efektive tajpi tiun materialon.
Ni faru linked_list.
Nia struct -
Okay. Nun rigardante niajn atendovico ni havas la -
ni simple fari tutmondan atendovico.
Ĝi estos nodo * atendovico, kaj ni havas dequeue funkcio.
Mi supozas ke tio povus ankaŭ renversi vera aŭ malvera - ni faru tion.
Bool dequeue - kaj ni dequeueing - oh. Hmm.
Mez dequeue - kion ni faru pri tio pli frue?
Mez dequeue kaj ni havas bool enqueue kaj ni bezonas enqueue iuj rimedoj vera.
Ni faru enqueue unue.
Ni havas niajn atendovico. Ni volas enmeti ion en la vico.
Kio estas la plej bona maniero por fari tion?
Super ĉi tie niajn atendovico aktuale aspektas kiel ni havas kelkajn tutmonda pointer to start.
Estas nia vico.
Supozante ke ni dequeue per prenante la unuan elementon,
Kien ni iras al volas enmeti niajn nodo por ke vostoj funkcios kiel oni devus?
[Studenta] Je la fino mem. >> [Rob] Jes. Vostoj estas supozitaj esti unua en, unua el.
Kiu signifas ke la nova elemento devas esti enmetita super tie. Okay.
>> Coming reen al kodo,
tio signifas ke ni volas buklo super nia vico.
Ni faras nodon * nuna = atendovico; dum nuna ne egala NULL.
Mi farus - Tute bone, ni faru ĝin aparte.
Unue, kurento = atendovico.
Kion ni faru se aktualan parton kiel NULL?
Ni faros tion 2 manieroj. Unue ĉi vojon.
Kion ni faru se fluo estas NULL?
Ĉu ĉi tiu estas ekvivalento al se atendovico estas NULL?
[Studenta] Oni tuj revenos falsaj. >> [Rob] Ĉu necesas redoni malvera?
Kio okazas kun enmeto io en malplenan listo?
[Studenta] Nenio estas malĝusta kun tio. Pardonon.
[Rob] Jes. Do jen la nur diferenco estas mia tutmonda atendovico estas senditaj al mia nova nodo.
Kaj tiam mi devos fari mian bridoj de se atendovico estas nula.
Reiru falsaj.
Kaj tiam enviciĝi val egalas i; atendovico sekvanta egalas NULL; return true.
Okay. Mi tuj saltas la pafilon ĝuste ĉi tie.
Memoru, kion ni faris tiun lastan fojon
kie oni diris ke estis multe pli facile labori kun nodo ** kun ĉi tia afero.
Do nun aktuala tuj estos & atendovico, kaj irantaj malsupren al tie -
dum aktuala - dum * aktuala ne egala NULL -
do lasu min nur faru aktuala - we'll diskuto pri tio en sekundo.
Nuna proksima. Okay.
Rigardante ĝin en tiu maniero, tio estas ripetanta super ĉiuj miaj pointers ĝis mi atingos nula montrilo.
La nula montrilon tuj estos la montrilon Mi volas anstataŭigi per mia nova nodo.
Rigardante iPad versio -
se mia originala montrilon kaj la ligita listo estas malplena tiam aktuala tuj notas cxi tie.
Tio tuj indikas nula,
tial cxi tiu estas la montrilon mi finas movanta atentigi al iu alia nova nodo.
Dum se la ekzemplo estas ĉi kazo ĝis ĉi tie
tiam aktuala tuj trairi de ĉi tie - mi paneas iomete.
Kie kurento estas supozitaj esti la adreso de nunaj proksima.
Ĉu tio estas kion mi volas? Nuna tiom * nuna gives me nodo.
Sekva trairas al la sekvanta tiu.
Mi aktuale montras ĉi tie.
Ni faru ruĝa - do mi aktuale montras ĉi tie.
Tiam * nuna tuj referenci tiun nodon.
Kaj * nuna sekvanta referencojn tiu nodo, sed tio ne estas kion mi volas.
Mi volas tiun montrilon al tiu nodo.
Do, tio montrilon al ĉi tiu nodo estas ampersand (* aktuala) proksima.
>> Je ĉi tiu punkto en la tempo kiun mi oficiale atingis la nodon, kiun mi volas anstataŭigi.
Ni anstataŭu ĉiujn el tiuj vostoj aktuala - kaj nun ni faris.
Esteblas tajperaroj, sed la ideo estas ke kun insert en ĉi tiu tipo de vojo
estas pli facile labori kun la indikoj kiujn ni ja volas ŝanĝi
Anstataŭ bezonado por sekvigi - bonfartas, estas mia komenco NULL?
Ho tio estas? Do mi bezonus por krei la komenco nodo estos iu specifa
alie mi volas persisti ĝis la sekva afero mi notas al estas NULL,
kaj tiam Mi anstataŭus ke - kion la sekva afero estas - al mia malloc nodo.
Anstataŭ bezonado disigi tiuj kazoj, ĉi tie mi nur pritrakti la kazon de
kio estas la montrilon, kiu estas nula, ke mi ne plu volas esti NULL,
kaj tio faras vivon pli facila krom tiuj devas ĉiuj esti * aktuala nun ĉar -
[Studenta] Ĉu ili ankoraŭ estas la grandeco de vertico?
[Rob] Jes. Mi ankoraŭ mallocing nodo.
[Studenta] Ĉu ĝi tuj estos la grandeco de vertico *?
[Rob] Venante reen al ĉi tie, pensu pri la kazo, se cxi tiu estas nia ligillisto.
Tiu ulo antaŭ ekstere al nula.
Post ke kial buklo, aktualaj poentojn al ĉi tien
ĉar ĉi tiu estas la montrilon, kiu estas nula.
Nun mi volas ŝanĝi ĉi tiun montrilon por montri al nova nodo.
Unue mi malloc tiu nova nodo - tiel malloc grandeco de nodo.
Kaj kiu resendas nodo * kaj nun ŝanĝanta ĉi montrilon konstruas al * nuna egaluloj
tiun novan nodon, kiun mi destinis.
Do, se fluo estas nodo **, tiam * nuna tuj estos nodo *,
kaj se mi mallocing io de la grandeco de vertico tiam ĉi revenas puntero al nodo
tia ĉi estas nodo * - do ambaŭ flankoj ĝuste havi la sama tipo.
Kaj do, se kion mi ĵus asignis estis nula, revenu falsaj;
alie fini metante ilin al kio mi volas ilin esti - krom tiuj bezonas krampoj
ĉar tio ne estas kio la ordo de la aferoj funkcias.
Sen la parentezoj kiu estis interpretita kiel
aktuala-sago-val dereference tio.
Anstataŭe mi volas dereference nuna kiun mi alportas al nodo.
Do mi volas ricevi la valoron rilatan al tiu nodo.
>> [Studenta] Mi pensis sagoj, permesis al vi preteriri, ke mi iru rekte al la valoro.
[Rob] Ili faras. Tio estas, se mi havas - ni diru atendovico estas ekzemplo.
Mi permesis fari queue-sago-val egalas i pro atendovico estas nodo *.
Se tie estis kelkaj belaj sintakso de kiel kuranta-plu sago-val aŭ io
kiuj agis 2 dereferences, tiam tiu estus bone funkcias.
[Studenta] Do la sago estas nur dum 1 dereference. >> [Rob] Jes.
Alikaze mi povus skribi ĉi tiu kiel (** current.val).
Ĝuste kiel mi povus ankaŭ skribi atendovico kiel (* vosto). Val.
Do ni enmetu. Nu, tio estas en atendovico mi supozas.
Dequeue tuj esti signife pli mallonga.
Ni metis void en ĉi tien por tualeto.
Do, dequeue. Kio elemento mi dequeueing?
[Studenta] La unua? >> [Rob] Jes.
Se mia unua estas NULL - revenon - mi ne scias kion ni volas reveni - INT_MAX;
kaj tiam vi devus fari ĉekon por vidi se INT_MAX revenis.
Tio estas la speco de afero, kiun get inc ne alie ni deziras -
ĉu ni povas simple reveni atendovico val? Ĉu tio estas kion ni volas fari?
Dequeue ankaŭ implice forigas la ero de la vico,
do ni unue diru - ni ricevas tmp atentigi al la unua nodo de nia vico.
Nun ni volas antaŭenigi nian atendovico al punkto al la sekva afero en la vico.
Nun ni havas tmp maldekstren. Tmp val estas la afero, ni volas reveni.
Do, val = tmp-> val;
sed antaŭ ol ni redoni ĝin ni devus liberigi tmp kaj revenas val.
La ordo de operacioj tie gravas ke ni bezonas por rabi tmp
antaŭ ol ni movos vosto al la sekva elemento.
Ni bezonos akiri la valoron antaux ni liberigi tmp,
kaj tiam ni povos reveni al la val.
>> [Studenta] Ĉu ni starigis la atendovico enviciĝi poste?
[Rob] Jes. Tio estis krei malbonan buklo / gxi ne funkcius post liberigante ĝi ĉiukaze.
Queue = atendovico-> proksima.
Ni volas antaŭenigi la vosto en la proksimajn elemento ne antaŭeniri la sekva elemento
por kio la elemento aktuale estas.
Stakoj estus signife - kiel eĉ pli facile en tiu dequeue estas ekzakte la sama
ĉar ni desxiras la fronto de la stako.
Fino atendovico estus tre similaj, kie ni volas nur atribui nodon
kaj enmeti en la fronto de la pilo, do ni eĉ ne bezonas al buklo super nenio.
Ni nur enmeti rekte ĉe la fronto.
Ĉu ĉiuj bone sur tio?
>> Bone. Pli demandojn?
[Studenta] Kion gravan tion mi devus teni en la menso de la plej freŝaj prelego?
[Rob] La plej freŝaj prelego.
Vi ne bezonas scii ajn kodo.
Vi devus scii la komunajn ideojn.
Nate duono ne havas ajnan kodo kaj tial tiuj diapozitivoj estas enreta.
Ili estas nur ŝatas rigardi ilin kaj ili havas la gravan ideojn.
Mia duono - sciante pri la ĝenerala ideo de unua oni ne povas fidi nenion.
La fakto, ke kiel eble la procezo de la tradukilo povas esti malbona,
sed ne gravas, ke la fonta kodo aspektas bone.
Ĉar la tradukilo povus esti specife aliigo ŝanĝi la fontkodon
en la procezo de la kompili.
Je la sama tempo nur kiel - mi kredas ke tiuj estas kiel la ĉefaj ideoj de ĝi.
>> [Studenta] Ĉu vi mencias, ke ni ne bezonas scii ion rilate al Firesheep -
aux cxu ni bezonas scii tion?
[Rob] Kun Nate duonon de tio, io, kio Nate ektusxis sur -
kiel Firesheep, Wireshark - mi eĉ ne kredas ke li faris Firesheep detale.
Vi ankaŭ faris ion per tio - cxu gxi estis Firesheep - pasintsemajne?
Ĉu vi tushas sur tio?
[Studenta] Jes, mi opinias ke ni havu - >> [Rob] Jes.
Ni ne donos al vi Firesheep eligo kaj diru interpreti ĉi.
Ĝi estas ĝuste tuj estos - ĝi devus esti demando kiel kio estas Firesheep?
Kio estas uzata por?
[Studenta] Mi pensas ke ĝi nur funkcias en versio 4 de Firefox aux io.
[Rob] Povus esti rompita per nun.
Mi havas nenian ideon.
Ili ne ŝajnas esti malebligata gxin permane,
sed eble tio ne funkcias kun la plej freŝaj Firefox.
[Studenta] Mi fakte provis instali ĝin ĉar ĝi diris ke estus kongrua.
[Rob] Do, mi supozas ke tio ne funkcias kun la plej freŝaj Firefox.
Sed la ideo ankoraŭ staras el kio ĝi signifis por montri.
Estis absurda kiom de la mondo estis ne vivi en HTTPS tiutempe.
Eĉ en la lastaj 2 jaroj aux kio ajn, ĝi estas ankoraŭ - estas drama plibonigo en la
nombro de retejoj kiuj uzas HTTPS.
>> [Studenta] Ĉu ni devas iri sur HTTP?
[Rob] La protokolo pri ĝi? >> [Studenta] Kelkaj aferoj, kiujn ni devus scii.
[Rob] Ĉiuj rajtas. Bazaj aferoj estas ĉio vi povas vidi en via reto langeton.
Kiam mi petas paĝo - revenanta sur la supron de la ĉefaj aĵoj.
Vi povas vidi ĉi tie la peton, ke mi faros.
Chrome okazas formati ĉion bele por ni
kie la peto URL estis jena: peto metodo estis GET,
kaj la statuso kodo estis 200 OK.
Se mi batis view fonto, mi vidas pli rekte, ke -
kaj ĉi tiu estas - ni povus montri al vi ĉu de ĉi tiuj, sed ĝi ne estas tro malfacile interpreti inter ili.
Jen la rekta peto mi faris, do tio signifas, ke mi iris al
apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1.
Kaj la protokolon uzis estis HTTP/1.1 kiu estas virtuale - ĝi ĉiam estos tiom.
Super tie ni uzis GET, do tiu povus ankaŭ esti POST.
Kaj tiam malsuprenirantan - tutan vojon malsupren al respondo titolaj - se ni konsideru, ke fonto,
tio estas kie ni vidas la 200 OK.
Ekkonu la eblaj diversaj statuso kodoj de tiuj.
Mi kredas en la recenzo ni diru kelkajn el tiuj,
do 403, 404 - tiuj tipo de komunaj.
Tio estas la granda ideo de ĝi.
La diferenco nur inter HTTP kaj HTTPS estas ĉi ĉifrado.
>> [Studenta] Cxu vi faris? >> [Rob] Mi kredas ke jes. Nu, Yep.
[Studenta] Cxu vi parolas tre ĝenerale pri kiel ĉifradon verkoj?
Ĉar ni parolis ekzemple kiam kunpremante Huffman dosieroj,
vi scias, kiel malkompaktigi ilin ĉar vi vere sendis la hashtable ene de la dosiero
tiom kiom faras ĉifrado laboro?
Kiel vi scias kiel kodi informo, se vi ne vere sendis la klienton
la ŝlosilo por la - kaj vi povas reale grab tiu klavo de -?
Kiel la ĝenerala procezo funkcias?
[Rob] La ĝenerala procezo de ĉifrado -
ke estas nekredeble detalajn demando mi respondas.
Tie estas mallonga - nu, Tommy kaj mi faris la mallonga.
Bedaŭrinde ĝi estas kiel 26 minutoj, do ĝi ne estas mallonga. Ĝi estas longa.
Sed nia mallonga estis sur RSA kiu estas nur unu ekzemplo de tiuj,
kaj ĉi RSA estas parto de la entuta HTTPS protokolo.
La ideo - RSA estas ekzemplo de publika ŝlosila ĉifriko,
kio signifas, ke vi havas 2 apartajn klavojn.
Vi uzas 1 ŝlosilo por vere kodi aferojn,
kaj vi uzas alian klavon por deĉifri aferojn.
Ĉi tiu ŝlosilo, kiun vi uzos por ĉifri aferoj estas tiu, kiu estas publika.
La retejo povas sendi al vi tiun ĉifrada ŝlosilo.
Ili do sendas al vi, ke ĉifroŝlosilo, kaj kiam vi volas sendi ion reen al ili
Vi uzas tiun ĉifrada ŝlosilo por kodi ĉiujn viajn datumojn kaj sendi ĝin al ili.
Do, ili estas la solaj kun la privata ŝlosilo.
Se ke privata ŝlosilo fariĝis sciata tiam iu povus deĉifri viajn datumojn.
Sed ke privata ŝlosilo - kiu estas matematike rilatajn al la publika ŝlosilo sed vi ne povas
kompreni unu el la alia - tiel ke privata ŝlosilo povas esti uzata por deĉifri la datumojn.
Ĉar ili estas la solaj kun la privata ŝlosilo,
ili estas la solaj, kiuj povas legi la datumojn.
Do eĉ se la publika ŝlosilo estas publika,
Mi uzas la saman - kiam mi iras al Google.com aŭ kio ajn,
ili povintus multnombraj, mi ne konas - sed se mi veturas al Google.com,
Li iras al Google.com, ŝi iras al Google.com--
ni ĉiuj povas uzi la saman publika ŝlosilo por ĉifri niaj propraj informoj tamen ni deziras.
Sed neniu el ni tuj povos eltrovi - tuj povos deĉifri
al siaj informoj, ĉar la publika ŝlosilo estas ne povis deĉifri.
Ĝi nur povas ĉifri.
Kaj ĝi estas amuza / detala math de - kiel faskon da modulo operatoroj kaj exponentials kaj necesajxojn,
ke nur laboras ekstere, ke la privata ŝlosilo estas la sola afero kiu povas
malĉifri la publikan ŝlosilon de ĉifrado vazaro.
Jes. Vidu la RSA mallonga por pliaj detaloj.
[Studenta] Ĉu en la retejo?
[Rob] Jes, mi pensas ke estas ĉe tiu punkto. Aŭ almenaŭ YouTube ligilo al ĝi estis afiŝita.
Ni vidu. Shorts. Mi kredas ke estus estinta semajno 2-rilataj. Jes. RSA.
Kaj ĝi estas - we're ne tuj ludi ĉi - 24 minutoj.
Ĝi estas longa.
>> Pli demandojn?
[Studenta] Ĉu vi povas paroli mallonge pri la bitmasks? >> [Rob] Certe.
Mallonge, la ideo estas simple, ke kiel - >> [Studenta] Kio estas, Rob?
[Rob] Bitmasks. La ideo estas - ni simple diras, ke ni havas iun - we're uzante iu entjero -
_int_ x - do, ni starti ĝin ĉe 0.
Nun, ĉi tiu entjero estas 32 bitoj, kio ajn unuopa 1 el tiuj bitoj povas esti uzata por reprezenti
specifa FLAC.
Tie estas kie, se vi rigardas la mastruma sistemo kodoj, ili uzos ĉi tuta loko
kie eble supren supro ie ili Baldaux-difini -
Ni vidu kelkajn ekzemplojn.
Man-2-malfermita - la malfermita-sistemo alvoko ni povas vidi ĉi tie ke unu el ĝiaj argumentoj estas int flagoj -
kio atendas kiel tiu argumento estas kelkaj el tiuj flagoj.
Ni vidas O_append, O_ASYNC, O_CLOEXEC,
O_CREAT, kaj tiel plu.
O_DIRECT. Tiuj specoj de flagoj estas hash difinita ie.
Kaj ĉiuj el ili estas ekzakte 1 bito.
Do, O_CREAT povus esti hash difinita kiel 1, maldekstruloj sxangxigxo, 4 (1 << 4).
Tio tuj estos la - kiam ajn mi uzas O_CREAT tio estas nur tuj estos -
en duuma 1, 0, 0, 0, kaj la 30-ish nulojn antaŭ ĝi.
Estas nur sola iom aro, kaj tio iom reprezentas tiun flagon.
Kaj tial neniu alia flago tuj estos lasita-moviĝis per 4.
Mi povas reprezenti ĝis 32 flagoj en sola entjero per farado -
x = O_CREAT iom saĝaj aŭ O_DIRECT.
Vi simple prenante ajnan 2 el tiuj flagoj.
Nun x tuj havi 2 bitojn starigis kiuj respondas al la 2 bitojn
de O_CREAT kaj O_DIRECT.
La maniero ke tiam - do tiam ni pasis x en la liberan funkcion,
kaj malferma bezonoj vidi kion flagoj estis efektive starigis.
Do, tio estas kie ĝi tuj fari tion kiel
se (x & O_CREAT) fari ion,
aŭ se (x & O_DIRECT) fari ion alian,
kaj tiam tie povas esti iu flago ke ni ne turnis -
se (x & o_ - Mi ne scias kion la aliaj flagoj estis -
(X & O_RDONLY) - tiu aparta kondiĉo ne tuj estos ekzekutita.
Aux ke bloko da kodo ne tuj estos ekzekutitaj,
sed tiuj 2 estas ĉar tiuj 2 flagoj estis metita.
Kaj rimarki ke en C, neniun valoron, kiu estas ne 0 estas vera.
Do, (x & O_CREAT) estos ĉu 0 aŭ O_CREAT
ĉar O_CREAT nur havas sola iom aro.
Se tio iom estas metita apud, tiam ĉi tuj revenos O_CREAT -
la duuma kie nur tiu bito estas fiksita.
Se tio iom sekva ne estas agordita, tiam ĝi tuj revenos 0, en kiu okazo ni konas la flago ne estis fiksita.
Tiel estas kiel vi uzas bitmasks.
Mi kredas je antaŭan ekzamenon aŭ eble en klaso aŭ io -
vi povas uzi ankaŭ bitmasks presi la duuma de variablo.
Do mi povas uzi - looping super - 1, maldekstruloj sxangxigxo, 0 - kaj poste presi se x & ke -
se x & 1, maldekstra movo: 0 - tiam presi 0 aŭ 1. Aŭ presi 1 else presi 0.
Kaj poste mi iros super ankoraŭfoje - se x & 1, maldekstruloj movo: 2 - do tio signifas, ke la dua iom
de la variablo estas fiksita, do mi presi 1 else Mi presi 0.
Kaj mi kredas ke ni povus efektive volas fari tion en la inversa ordo ĉar
kutime vi volas ke la maldekstra flanko estas la plej alta ordo bitoj
kaj la dekstra flanko estas la plej malalta ordo bitoj, do versxajne buklo 4 int i = 31 ĝis mi trafis 0,
do tiu ĝusta kondiĉo - se x & 1, maldekstruloj sxangxigxo, i; presi 1 else 0.
[Studenta] Dankon.
>> [Rob] Mi pensas ke ni estas el la tempo.
Plu demandoj en la lastaj kelkaj ekster-de-tempo sekundoj?
Ĉiuj pravas. Bonŝancon morgaŭ.
Tiu estis la lasta sekcio, kie apud semajno tuj estu laŭvola.
Mi redonos kvizojn kaj ni povas iri super ili kaj eble iros super aliaj aferoj
vi estis interesitaj en, aŭ definitiva projekto aĵojn, aŭ estontaj CS klasoj aĵoj aŭ - Mi ne scias.
Sed tio estas la lasta materialo plena sekcio.
Ĝis!
(Aplaŭdoj)
>> [CS50.TV]