HANNAH Blumberg: Hola a tots. Anem a començar només un parell de minuts abans ja que tenim molt de material per passar. Sóc Hannah. Sóc un TF. Maria es va a unir nosaltres en només un parell de minuts. És professora de la secció de la dreta abans. Ensenyo secció dreta després, de manera que anem per mantenir-lo a l'hora i mitja. Així com es veurà aquí, tenim prou alguns temes que han de passar, així que anirem una mica més ràpid. Però si en algun moment diem alguna cosa massa ràpid o no entén, no dubti en interrompre amb preguntes. Volem ser capaços de fer d'això una revisar sessió tan útil per a tots vostès com sigui possible. Impressionant. Així que anem a saltar a la dreta dins amb alguns temes que en realitat molt, molt breument coberta per al qüestionari de 0 en la revisió sessió de prova 0. Així que a partir de llistes enllaçades. Així que segur de tindre alguna coneixements bàsics sobre llistes enllaçades i se senten còmodes fent algunes de les operacions bàsiques. Així que per opinar, vinculat llistes són millors que les matrius perquè poden créixer de forma dinàmica. Així que hem de gran avantatge. Hem vist els usaven en taules hash quan no sé exactament quants coses que voldran per inserir en la nostra estructura de dades. Malauradament, tenim peces de la llista enllaçada tot de memòria, així que no serem necessàriament capaç de fer l'accés constant de temps a qualsevol element de la llista enllaçada. Per tal de trobar una particular, element, ens haver de repetir tot el així des del principi. Així que tenir en compte que la major part del operacions bàsiques són omega d'1. Així inserit és només va a prendre 1. Eliminar va a prendre n ja que han d'anar a buscar a la llista. I la recerca podria prendre, en el pitjor, n. No podem fer alguna cosa com recerca binària en una llista enllaçada Ja que no podem simplement saltar l'atzar per al medi. Fresc. Impressionant. Una mica de piles. Això, de nou, va aparèixer en concurs 0, de manera que ha de ser súper còmode amb ell. Però per a les piles, li demanem que recordar una pila de safates. I va ser primer en entrar, últim a sortir. Així apilem les coses a la pila, i després si estem tractant de prendre alguna cosa off-- que anomenem fent esclatar fora el stack-- venim de la part superior. I si volem posar una mica a la pila, l'anomenem empenyent. Pel que sempre va a estar creixent des del fons com una pila de safates. Impressionant. Hem implementat piles vistos amb les dues llistes enllaçades i matrius. Si està implementant amb matrius, desitja per assegurar-se de no perdre de vista tant la mida i la capacitat. Així mida serà la corrent nombre de coses a la pica, mentre que la capacitat és el nombre total de coses que pot emmagatzemar a la pica. Fresc. Molt similar, tenim cues. En aquest cas, en lloc de pensar una pica de safates, pensa en una línia. Això va ser primer en entrar, primer en sortir. Així que si vostè està fent cua per alguna cosa a la botiga, esperem que la persona per primera vegada en línia serà ajudat a primera. En lloc de dir empenta i pop com ho fem per a la pila, ens limitem a dir enqueue i treure de la cua. I de nou, si vostè és implementar això amb una matriu, hem de seguir la pista de no només la mida i la capacitat, sinó també el cap, que serà el front de la nostra cua. Fresc. Teniu alguna pregunta sobre res d'això? Impressionant. La dreta mòbil endavant. OK, taules hash. Aquí és on comença a aconseguir realment interessant. Així que una taula hash és una implementació d'una matriu associativa. Així que bàsicament el que va passar és que tenim tot això d'entrada, i li donem a un hash funció que diu, OK, aquí és on en el taula hash pertany. Així que la funció hash més simple que hem vist està dient, OK, suposem que volem posar cadenes a la nostra taula hash. I una idea molt simple podia dir, OK, anem a ordenar pel primera lletra de la paraula. Així que vostè pot veure aquí, prenem el plàtan, el sotmetem a una funció hash, i diu, bé, això ha d'anar a l'índex 1. Així podem pensar essencialment en un hash taula com un munt de diferents cubs. I cada un d'aquests cubs va per sostenir el cap d'una llista enllaçada. I en aquesta llista enllaçada és on podem realment posar diferents peces de dades. Així busseig una mica més en una funció hash, aquí està l'exemple que acabo de descrit en el que acaba de dir, OK, pren la primera lletra de la paraula i estem solucionarà el problema en els cubs. Així que, presumiblement, hi haurà 26 cubs, un per cada lletra de l'alfabet. Per què no és això una gran funció hash? El que fa que aquest no ideal? Sí. AUDIÈNCIA: Vas tenir col·lisions. HANNAH Blumberg: Sí, exactament. Vas a haver col·lisions. Així que això és una cosa. I parlarem de com podem arreglar les col·lisions en tan sols uns segons. Un altre problema amb aquest en particular funció hash és que el nostre diferent cubs seran de prou dràsticament diferents mides. Sabem que hi ha molt mes paraules que comencen amb A de X, així que tindrem molt cubs desequilibrades en la nostra taula hash. Fresc. Així que sí, anem a tornar a el punt de col·lisions. Què fem si hi ha una col·lisió? Tenim un parell d'opcions diferents. Així que un, per la qual cosa suposem que estem tractant posar baia a la nostra taula hash. I veiem, oh, volem per dir-ho en l'índex 1, però plàtan ja hi viu. Què farem? Tenim dues opcions principals. El número u és el que podem dir, OK, no hi ha lloc en l'índex 1, però seguirem buscant a través fins que puguem trobar un altre lloc obert. Així que anem a dir, OK, anem a posar-lo en el punt 3. Aquesta és una opció. D'això se'n diu sondeig lineal. I una segona opció està dient, bé, bé, farem cada un d'aquests cubs ser caps de llistes enllaçades. I està bé si hi ha més d'una cosa en una galleda. Només anem a annexar a la part frontal. Així que aquí es pot veure, està bé, quan inserim baia, que acaba de prendre plàtan, tipus de empès sobre una mica i va llançar una baia allà. I això és també totalment bé. Això es coneix com encadenament separat. Vostè pot pensar en això com una mena de una sèrie de caps de llistes enllaçades. Teniu alguna pregunta respecte picada taules, funcions de hash? Impressionant. Els arbres i els intents. Així que un arbre és qualsevol tipus de l'estructura de dades en la qual hi ha una espècie de la jerarquia o algun tipus de classificar als seus diferents objectes. I això es convertirà en súper clar quan veiem un exemple. I vam veure intents, al llarg amb taules hash, en pset5-- que, de nou, joc totalment justa per a aquest quiz-- de dades com un altre estructures que podem emmagatzemar diferents coses. En el cas de diccionari, ens van guardar un munt de paraules. Així que donem una ullada a alguns arbres. Així que aquest és un exemple d'un arbre. Té un tipus d'estructura, que l'estructura jeràrquica, on es pot veure que aquest node 1 a la part superior té algun tipus de rang per sobre de 2 i 3, que estan per sobre de 4, 5, i 6 i 7, que estan per sobre de 8 i 9. Així que això és tot el que volem dir amb un arbre, pel que pot només tipus d'imaginar això en el seu cap. Ara, tenim un parell de arbres més especialitzats. Així que un exemple és un arbre binari. I un arbre binari és, de nou, només serà una estructura de dades amb algun tipus de jerarquia, però cada un dels nodes pot tenir com a màxim dos fills. Aquí és on la paraula binària ve. Així que aquest és un exemple d'un arbre binari. Així que aquesta és una categoria més petita d'arbres. Ara anem a arribar encara més específic i parlar binària trees-- recerca binària arbres, més bé. Així que aquí la idea és no només fa cada node té com a màxim dos fills, però tots els nens a la esquerra seran més petits i tots els nens a la dreta van a ser més gran. Així notar en només nostra arbre binari, hi ha cap relació entre els nombres. Però en la nostra recerca binària arbre, veiem, OK, aquí està 44. I cada número a l'esquerra 44 és més petita i tot a la dreta és més gran. I això val en cada nivell de l'arbre. Així que aquí, aquesta és menor que 22 i això és més gran que 22. I això és arbre binari de cerca. Per què pensem que es diu un arbre de cerca binària? Què algoritme Què et recorda? AUDIÈNCIA: Hi binària. HANNAH Blumberg: Hi binària. Perquè si vostè està buscant un nombre particular en aquest arbre, en cada punt, només pot tocar mig fora de l'arbre, la qual cosa és genial. I perquè ens va a donar una mica que s'assembla molt a la recerca binària. Qualsevol pregunta? Molt bé, fresc. Molt bé, ho intenta. Favorit de tots. Així que aquest és l'exemple que hem vist un munt de classe. I de nou, això és només una altra manera que podem emmagatzemar dades. En el cas de diccionari, de nou, aquest és només va a ser cadenes. Així que anem a veure el que en realitat això s'assembla a un nivell lleugerament inferior. Així que anem a fer una ullada en un node en un trie. I veiem, està bé, no va ser un valor booleà i un node, un punter a un node. I veiem que la Boole es diu is_word. Per tant, bàsicament, això és va correspondre a aquests petits triangles que diu, si vostè ha arribat aquí, que ha trobat una paraula completa. Sabem que "Turing" sobre aquí hi ha una paraula completa, mentre que només T-O-R no és una paraula perquè no veiem aquest petit delta. I aquest petit delta, de nou, correspon a aquesta is_word, aquest is_word booleana. I després tenim una gran varietat dels nens. Així que en cada nivell, tenir un node en particular, i que els punts de node a un conjunt de tot l'alfabet. Així es pot veure, de nou, en aquest picture-- estic seguirà saltant cap enrere i forth-- que aquesta matriu a la part superior té un munt de diferents nodes que surten. Té 26 anys, o 27 si vols per incloure un caràcter addicional. I això ens dóna una manera d'emmagatzemar les nostres dades de manera que es poden mirava que vostè pot mirar cap amunt súper ràpid. Quin és el temps de recerca d'un trie? AUDIÈNCIA: [inaudible]. HANNAH Blumberg: Sí. En teoria, és temps constant. Només va ser de la mida de la paraula que voleu cercar. Fins i tot si afegim un trilió Més paraules per a la nostra trie, no va a portar-nos més temps per determinar si una paraula donada és al trie. Així que això és realment agradable. AUDIÈNCIA: Acabes inicialitzar aquesta matriu? S'ha perdut un punt o dos. Pots parlar això per un segon? HANNAH Blumberg: És clar, és clar. Bona pregunta. La pregunta era, ens tenen una matriu que és va tenir estrelles node com a diferència de node sol, oi? Fresc. Així que aquí el que estem dient és la nostra matriu és simplement serà punters a altres matrius. Així que ha essentially-- quin tipus de se sent com una llista enllaçada d'aquesta manera on cada un d'aquests nens simplement apunt al següent node. I la forma en què nosaltres determinar realment, bé, està bé, hem itera a través d'un sencer paraula, és aquesta paraula al diccionari, acabem de comprovar això is_word. Molt bona pregunta. Sí. AUDIÈNCIA: OK. Llavors, quin era el temps d'execució per al trie? HANNAH Blumberg: És clar. Així que el temps d'execució per a un trie de cerca va a ser la constant de temps. Així que només va a ser el nombre de lletres de la paraula. No és dependent de la mida del diccionari o la mida de l'estructura de dades. Així que aquí està un exemple una mica més simple. En aquest cas, es pot veure que la paraula ratpenat està en el diccionari i vostè té zoom, però no tenir alguna cosa com zoològic. Com podríem fer zoològic? Com ens sumem al nostre zoològic diccionari, al nostre trie? Sí. AUDIÈNCIA: Fer is_word cert per al [inaudible]. HANNAH Blumberg: Good. Llavors diríem Z-O-O, i llavors tindríem que vulgueu comprovar fora d'aquesta caixa també. Gran. Comparem breument intenta front taules hash. Tries són realment grans perquè, com hem dit, que proporcionen les operacions de recerca en temps constant. No obstant això, la gran desavantatge és que són gegantins. Vostè pot obtenir el sentit, fins i tot amb només mirar-lo, que prendrà una enorme quantitat de memòria. Així que van a ser molt més gran que les taules hash, però que van a donar ens temps de cerca molt més ràpid. Així que aquesta és la classe de la seva compensació, el que t'importa, si es tracta de la velocitat o la memòria. Teniu alguna pregunta sobre res d'això, totes les estructures de dades C. Bonic. D'ACORD. Anem a passar a un petit poc de desenvolupament web amb Maria. MARIA ZLATKOVA: Lovely. D'ACORD. HANNAH Blumberg: Vostè pot utilitzar el meu ordinador portàtil. MARIA ZLATKOVA: Niça. D'acord, guai. A mesura que avancem ara al web desenvolupament, parlem una mica sobre el canvi de permisos d'arxius i directoris de manera que pot ser accessible a altres usuaris, per al món, i perquè puguem veure com Bàsicament podem transmetre- quan desenvolupem coses com llocs web que sobretot hem estat fent. Així vam veure la comanda chmod, que és la manera de canvi, bàsicament. Això és una ordre Linux i modifica els permisos d'accés dels objectes del sistema d'arxius. I un objecte del sistema d'arxius és només un directori, un arxiu, res que pugui canviar els permisos de. Així que per veure els permisos d'arxius, teclegem la comanda ls, llista, -l. I quan escrivim això, sol veure alguns permisos aquesta mirada alguna cosa així com aquest davant d'un nom de directori. Així que d es correspon al directori. I després tenim tres tríades que, bàsicament, consulteu els permisos de qualsevol un usuari, un grup, o del món. Els tipus de permisos que podem tenir per aquests tres grups de persones són o bé r per a lectura, w per escriure, i x per executar. I podem tenir les de el grup i el món també. El més complicat és que de vegades quan teclegem la comanda chmod, ens escrigui algun nombre que consistia en tres bits. Així que podríem fer com 777 i que bàsicament a què es refereix el valor afegit de cadascuna d'aquestes tríades perquè r es referiria a 4, w faria es refereixen a 2, i x es referirien a 1, així que quan se sumen, cada un dels nombres s'enfonsaria a un nombre acumulat a un valor acumulat entre 0 i 7. Així també podríem tenir 0 de cap permís en absolut. I que en el fons ens donaria els permisos per a l'usuari, ja sigui el grup, o el món. Té preguntes sobre aquest fins al moment? AUDIÈNCIA: Vostè va dir Read era 4? MARIA ZLATKOVA: Sí. AUDIÈNCIA: [inaudible]. HANNAH Blumberg: Sí. AUDIÈNCIA: I després afegint tots aquells altres ho indiqui el seu número. MARIA ZLATKOVA: Sí. Sí. Aquestes són les grans preguntes. Preciós. A continuació, ens va ficar en HTML i un poc més sobre el desenvolupament web. Així HTML només significa HyperText Markup Language. I aquest és el marge de benefici llenguatge que és una norma que s'usa per a crear pàgines web. Es diu un llenguatge de marques perquè no és en realitat compilat. No diu com algun codi ha ser executat ni res d'això. Simplement delinea i descriu com 1 web pàgina ha de configurar- amb cadascun dels seus elements i com han de mirar cap a l'usuari. Algunes de les etiquetes HTML que ens se'n va anar per dalt són els següents. Tots els nostres documents HTML començar amb el DOCTYPE html. Llavors sempre tenim l'etiqueta html. Tenim un cap i un cos. I és important que HTML té aquest tipus d'estructura imbricada perquè és molt clar. I llavors es fa molt clar quan haurà d'obrir i tancar de fet les etiquetes. I sempre necessitem per tancar etiquetes que hem obert. I aquí tenim alguns dels tipus de les coses per davant que volem tenir. Així tenim, per exemple, el títol de CS50. I després que en realitat pot vincular un full d'estil que defineix la forma en què estil del nostre lloc web. És a dir CSS. Anem a anar-hi en el pròxim parell de diapositives també. Dins del cos, establim algunes classes i els identificadors. I com un recordatori, una vegada més, IDs són únics i classes poden ser assignats a diversos elements. I això només vol dir que podem utilitzar les classes i els identificadors dins d'una altra structures-- així, per exemple, dins dels arxius CSS o l'estil sheets-- per referir-se a elements específics i bàsicament diem que volem que l'estil o dissenyar algun element d'alguna manera en particular. I ens referim a ells per seus identificadors i classes. I també podem fer referència a diferents coses per les etiquetes, així, però identificadors i classes només ens donen una versatilitat i el que específicament ens vulgui consultar. Tan sols un exemple. Podem, de nou, en el termini un arxiu CSS en el qual voleu definir alguns style-- ho colors, fonts, i coses així que-- podem definir l'estil d'un cos. Així que el definiria per tot el cos de l'etiqueta. Però llavors també podem definir un estil per a un #title. I de nou, el hashtag es refereix a la nostra ID i el punt es refereix a la nostra classe. I després pels .info, ens També pot establir alguns atributs. I una altra vegada, quan tornem, vam tenir la nostra classe anomenada informació i el nostre títol ID. I podem veure que ens referim que els #title i .info. AUDIÈNCIA: Diries Etiqueta [? adoptar-? ?] MARIA ZLATKOVA: Ho sento? AUDIÈNCIA: Diries Etiqueta [? adoptar-? ?] MARIA ZLATKOVA: Hashtag significa ID, per la #title es refereix a qualsevol elements tenir aquest ID anomenat títol. I llavors el punt correspon a una classe. Així .info es refereix a aquest element perquè té la informació de classe. Sí. AUDIÈNCIA: Per què has distingir-los en l'HTML? Per què diu certes coses són Identificacions i certes coses són de classe? MARIA ZLATKOVA: Això és només fins usted-- HANNAH Blumberg: Repeteix la pregunta. MARIA ZLATKOVA: Oh, ho sento. Per què ens distingim certs elements com identificacions i altres elements com les classes? Això és només perquè és molt sovint una opció de disseny. Li dóna una gran quantitat de versatilitat en ser capaç de dir vull que aquest article específic tenir aquest ID perquè volen de fer un munt de coses amb ell, i jo només voleu definir un estil, cert estil o color que sigui per a aquest element. I la manera de fer-ho és simplement donant-li un ID. I després si vull tenir un parell de diferents articles que ha de, en lloc de anar i establir their-- en lloc de fer-ho per etiqueta perquè l'etiqueta faria establir la cèl·lula per a tota l'etiqueta per cada vegada que s'usa aquesta etiqueta, pot definir una classe per diversos elements. I després simplement accedir a aquesta classe i dir Vull l'estil d'aquesta classe d'aquesta manera. I de nou, la classe pot haver-hi diversos articles diferents i la identificació ha de ser únic. Grans preguntes. Alguna altra pregunta? OK, impressionant. Un cop més, es tracta de com aquests selectors es fa referència en CSS, amb el hashtag, amb el punt, o sense res per assignant l'estil d'alguna etiqueta, com el cos. I aquí tenim al general sintaxi de com es fa això. Per repetir algunes de les millors pràctiques per a HTML i CSS, tenim que, de nou, a prop de tot les etiquetes HTML que es poden obrir. I el que et recomanem fer per als seus projectes finals, així com per CS50 Finances, és fer Assegureu-vos que tots els de la seva HTML valida. I això es fa amb la W3 Validator. I llavors el que vam fer i el que es recomana fer se separa l'estil, per la qual CSS de HTML marcat. Així que qualsevol cosa que es relaciona amb com la teva pàgina va a veure visualment i com va a ser modificada ha d'anar en un document CSS. I llavors el seu marge de benefici dient com les coses estan en relació entre si és HTML, i que ha d'anar dins de dels documents HTML. Qualsevol pregunta? MHM. AUDIÈNCIA: Què és exactament que està passant amb la validació pàgina quan estem validant el HTML que [inaudible] va crear? MARIA ZLATKOVA: Així que-- penses. Llavors, què està passant amb la validació de la pàgina i ¿per què hem de fer això? Bàsicament, hem de fer això perquè moltes vegades, el seu navegador, si no tanques una etiqueta o alguna cosa així, el teu navegador és encara va a representar una pàgina i encara podria funcionar, però és la millor pràctica per assegurar-se que vostè té, de nou, va tancar totes les seves etiquetes, que tots els seus elements són la forma en què haurien de ser, i, bàsicament, que és pel convencions que vénen predeterminats. És, de nou, només un El que vostè ha ha d'aprendre a fer, en lloc de tenir codi descuidat i coses per l'estil. Sí. Oh, ho sento. Vaig pensar que estava criant la seva mà. AUDIÈNCIA: No, jo era [inaudible]. MARIA ZLATKOVA: OK. AUDIÈNCIA: Gràcies. MARIA ZLATKOVA: Per descomptat, gràcies. Així que de nou, passant de com la informació es transfereix i models de comunicació per transferir informació. TCP / IP. TCP només significa Transmissió Protocol de control i IP es refereix al Protocol d'Internet. I això només es refereix a les dades de forma es lliura. Si tenim algunes dades que necessita lliurat a usted-- pel vostè fa una sol·licitud per a un determinat servidor. Per exemple, quan tractar d'accedir cs50.net, fem una sol·licitud a el servidor CS50 i ens veiem que volem arribar aquest tipus d'informació. I a continuació, es basen en aquest protocol per com es lliura aquesta informació, el servidor proporciona informació de nou a nosaltres, el client. I llavors som capaços de veure la informació de la pàgina i després usar-lo. Llavors Protocol de transferència d'hipertext és només un altre protocol o conjunt de les convencions que defineix com el navegador web i el servidor web ha de comunicar-se. I posar tot això junts, HTTP, de nou, simplement defineix com defineix aquest hipertext pel HTML que hem estat treballant és, com ha de ser lliurat a vostè i qual cosa les dades que es lliura a vostè arriba a tu. I per això, si vostès recordin d'una classe, teníem un munt de peticions i teníem un munt de sintaxi per a aquestes sol·licituds que estem passarà ara. Així que de nou, quan enviem una sol·licitud a un servidor, hem de definir un parell de coses. Així que hem de trobar el tipus de la sol·licitud que estem configurant. I de nou, tenim, per exemple, GET és un tipus de mètode que tenim a la nostra petició. I després HTTP / 1.1 és només el protocol que estem utilitzant actualment. La majoria de les vegades, això va al protocol que estem utilitzant. Així que si vostè té una pregunta igual que en el qüestionari. Això és els convenis que tenim fins ara. Barra invertida es refereix a quin tipus de les coses que estem demanant. Llavors, el nostre amfitrió és, per exemple, en aquest cas, estem tractant d'anar a google.com. Així que aquest és el valor d'un host. Aquest és un tipus de sol·licitud que podrien ser enviats. I llavors un tipus de resposta que podrien ser enviat, de nou, basat en aquest protocol, és més, HTTP / 1.1. Així que aquesta és la versió HTTP de nou. 200 OK és només el codi d'estat. I això bé és només una frase sobre la base que el codi d'estat. I llavors el Content-Type es refereix al tipus que es retorna a vostè que és per a aquesta pàgina web que vostè rep i que el seu navegador pot fer després. I això és text / html. AUDIÈNCIA: Què significa 1.1? MARIA ZLATKOVA: Això és només el Versió de-- oh, què vol dir 1.1? Això és només la versió, l'HTTP versió d'un protocol que estem utilitzant. Molt bona pregunta. Altres preguntes? AUDIÈNCIA: Podries resumir Content-Type molt ràpid? MARIA ZLATKOVA: Perquè és el que el servidor. el tipus d'informació-- ho és tipus de contingut van ser les preguntes. Així que era el tipus de informació que s'obté de tornada des del servidor, el tipus de dades que el navegador pot llavors rendeixes que utilitzeu. AUDIÈNCIA: ¿Això és el que aquest protocol que està dient que fer? MARIA ZLATKOVA: Ho sento? AUDIÈNCIA: És això el que diu el protocol? MARIA ZLATKOVA: El protocol-- AUDIÈNCIA: --¿Què el Content-Type és o què-- MARIA ZLATKOVA: El protocol es basa en-- quin és el protocol que li diu? Això és només la forma que aquesta informació va ser lliurat a vostè, basat de quin tipus de protocol Es va obtenir aquesta informació lliurat de nou a vostè. ¿Això té sentit una mena de? HANNAH Blumberg: Vostè pot pensar en el protocol com A-- Crec que el professor Malan va descriure a la classe com una mena de A-- és com l'equivalent de handshaking humà. Dir, com, hey, sóc una comanda i jo saber manejar HTTP de la versió 1.1. I llavors el servidor diu, oh, bé, hi ha jo-- i tots dos. També sé com tractar amb HTTP / 1.1. I jo vaig a donar fer una còpia d'algun contingut. En aquest cas, es va en ser de tipus text / html. Així que és una espècie de només una forma d'ells per communicating-- MARIA ZLATKOVA: És només confirmant que ets tant seguint el mateix protocol i que tant el client i la manera server-- el navegador i el server-- tipus de saps el que ets parlant i tenen la convenció per al pas de dades. AUDIÈNCIA: Així que el Content-Type parcialment: el text Content-Type / html-- que és una part separada del mateix missatge? O és part de, diguem, 200? Té 200 els dic que o és-- MARIA ZLATKOVA: 200 diu tot ha anat bé. I després el tipus de contingut és una espècie de part separada del mateix missatge, i dient el que jo tornat té aquest tipus de text / html. És simplement donar més informació. Té alguna cosa que afegir? D'ACORD. Alguna altra pregunta sobre això? Impressionant. Així que alguns altres estats HTTP que que vam poder aconseguir, a més de 200 OK, Els que hem vist potser possiblement molts són 403 i 404. Així que 404, si intentaves Accés cosa que no existeix. Així, per exemple, si Conjunts de processadors CS50 Finances, si haguessis estat rendint quote.html i vostè no té aquest arxiu, sinó que havia quote.php, que donaria lloc a un 404 no trobat perquè l'arxiu podria no existir. Per a un 403 prohibit, que es refereix als permisos. Així que si algun arxiu no és llegible pel món, vostè pot ser que aconsegueixi un 403 tornat. Alguns altres que vostè pot ser get-- 301 Mogut permanentment; 302, que es troba; 304, modificat; 400, Sol·licitud Malo; i Error intern del servidor per després 500 i 503, Servei no disponible. Sí. AUDIÈNCIA: Serà que ens espera memoritzar tots aquests estats? MARIA ZLATKOVA: Tindria en el teu full de trucs. [El] AUDIÈNCIA: Estem esperàvem saber el que desencadena cada un? MARIA ZLATKOVA: ¿Ho són? HANNAH Blumberg: Per als que hem executar into-- així que la pregunta era-- MARIA ZLATKOVA: Són esperaven saber el que cada un d'aquests estats codis podria ser desencadenada per? Així que per als que hem fet servir i va córrer cap a, jo diria que sí. Així que hem vist definitivament 200 Acceptar i donat conferències en conjunts de processadors. Hem vist 403, 404. Per altres? HANNAH Blumberg: ho faria diuen 500 sembla un joc just. MARIA ZLATKOVA: 500, si. HANNAH Blumberg: Sí. Només tenen un sentit general del que els causa. I també amb només aquestes noms, pot tipus de com fer una conjectura com al que realment els va causar. Per exemple, moure de manera permanent, probablement l'arxiu s'ha mogut de forma permanent. AUDIÈNCIA: Però en un anterior examen, de manera que hi havia una Com esperes que respondre a això? HANNAH Blumberg: Això valia zero punts. La pregunta sobre 418 a la tetera és tècnicament un estat HTTP, però va valer la pena zero punts. Òbviament, vostè no està S'espera que conèixer-los. AUDIÈNCIA: És un de veritat? HANNAH Blumberg: És un veritable un, però no vol dir res. És només una broma. La gent d'Internet són divertits. MARIA ZLATKOVA: Grans preguntes, nois. Alguna altra pregunta? AUDIÈNCIA: Quin és l'error intern del servidor? MARIA ZLATKOVA: Interna error de servidor només vol dir que ha estat incapaç de comunicar-se amb el servidor per alguna raó. Així que no és necessàriament cosa que té a veure amb el client o alguna cosa per l'estil. Jo no conec cap exemple específic que hem anat a explicar, però si. HANNAH Blumberg: És clar. Així, per exemple, com anem a diu que estava treballant mashup i un servidor de Google va baixar per a alguns raó, un tall d'energia, diguem. Això seria un servidor intern error o algun tipus de-- agrades no obtenir una resposta de tornada. MARIA ZLATKOVA: Sí. És només quan estàs incapaç de comunicar-se amb el servidor per alguna raó perquè d'ella baixant o alguna altra raó. Així que saltar en PHP. PHP, a diferència d'HTML, és un llenguatge de programació. I vam començar a usar-lo perquè és molt útil per al desenvolupament web. Primer fem servir en CS50 Finances. I, bàsicament, ens ajuda a portar junts aquesta marcat, el disseny, i la forma en què realment utilitzem la informació per mostrar les coses en una pàgina web. Així PHP en si vol dir PHP Hypertext Preprocessor, així que és una backnorym recursiva per si mateix. I l'obertura de les etiquetes per a PHP que l'esquerra i fletxes dreta amb els signes d'interrogació i php. Així que ja hem vist un munt d'ell. Ara, només anirem algunes de les coses bàsiques sobre ella. Així que amb PHP, la variable noms comencen amb el signe de dòlar. No especifiquem, de nou, escrigui més d'una variable. Igual que vam fer amb C, no necessitem fer això. Podem fer un munt de diferents coses amb variables. Podem posar-los junts concatenant ells amb la notació de punts, el que no podíem fer en C de nou. Un cop més, tenim una mica més de versatilitat amb PHP en termes de variables. Un cop més, no tenim una funció principal. I PHP s'interpreta en contraposició a compilat, Així que el que vam fer per als arxius de C, no hem de fer això per a PHP. Però més aviat, la forma en que l'idioma s'executa per si mateix, s'interpreta. I després es passen lliurement simplement vol dir que tenim no ha d'especificar una variable tipus i els tipus de variables s'entenen en temps d'execució. AUDIÈNCIA: Però el que va fer dir amb la concatenació de punts? MARIA ZLATKOVA: És clar. Quan volem posar les coses junts-- pel que si teníem alguna variable que tingut el valor de 3 i vam tenir una altra variable que tenia el valor de cadena, podríem posar les variables juntes posant un punt en entre elles i la concatenació d'ells. O podríem crear un anomenat nom de la variable i posar junts per concatenar dues cadenes. Així que si tinguéssim una cadena en doble cotitzacions i ens van posar un punt després que, i després vam tenir una altra cadena, que crearia una cadena per complet. AUDIÈNCIA: OK. MARIA LETÒNIA: Va ser clar? AUDIÈNCIA: Sí. MARIA ZLATKOVA: OK. Sí. AUDIÈNCIA: Quan vostè diu interpretat en lloc de compilat, estàs parlant no ho fa han de ser el més específic quan es tracta de PHP enfront de C? MARIA ZLATKOVA: Quan diem interpretat en oposició a compilat, ¿Què volem dir? Així que això significa que no necessitem arxius executables per executar PHP. Això vol dir que s'executa com va. Això té sentit? Una mica més. HANNAH Blumberg: ¿Així que pot pensar en un intèrpret com un altre programa que és responsable per anar línia per línia en PHP i en realitat executar-lo, en oposició a compilar tot baix a binari. En realitat, no vol dir res sobre com específica que hem de ser. Encara hem de ser precisos, i no ho fem oblidi el seu punt i coma, i assegureu-vos vostè té el seu signe de dòlar, i coses per l'estil. Bona pregunta. MARIA ZLATKOVA: Sí. Així línia per línia, com a diferència amb els arxius de C, hem de fer que tota la final abans que realment podem executar-lo. Aquesta és la principal diferència. Però, de nou, no podem realment ser menys específic. Així matrius en PHP representen en realitat un mapa ordenat. Així que els valors de les matrius associades a les tecles. Les dues maneres de declarar una array, basat en aquesta sintaxi, podem ser més explícita en dir que tenim una matriu i tenim aquest key1 que s'assigna a aquest valor1, valor2 key2 que s'assigna. O simplement podem crear una matriu que conté els valors en si i després les tecles són entesa d'una manera. Per a qualsevol dubte sobre això? Audiència: Quines serien les claus estar en el segon exemple? 0, 1, 2, 3? MARIA ZLATKOVA: Per exemple, és només les claus en això no fan necessàriament fer una diferència. Ells simplement definir com es pot utilitzar els valors dins d'ella. Així que si teníem un foreach bucle en PHP que ho faria ens permet anar a través de tots els valors, podem anar a través de tots els valors, fins i tot si teníem o no havíem definit una tecla específica en el lloc de sintaxi anterior. Així que fins i tot amb aquest tipus de la matriu, que encara podia tenir un bucle foreach que va a través de cada dels valors de la clau en la matriu. Així que la sintaxi d'un foreach llaç, vam començar amb una matriu. Aquesta variable $ arr és la nostra gamma actual que definim a la diapositiva anterior com a valor que va, literalment, a través de cada un dels valors, independentment de si vam tenir una clau o no. I llavors podem fer alguna cosa amb el valor a l'interior del bucle foreach. Així que de nou, si tinguéssim un arsenal com això aquí created-- així que tenim la clau de foo i el valor de bar, la clau de Baz i el valor de qux-- podem tenir un bucle foreach que passa per matriu com a valor clau i després fer alguna cosa amb la clau i / o valor. Però no ho fem sempre necessàriament ha de tenir un foreach bucles que passa a través de la matriu com un mapa clau de valor. Podem passar pel array bucle foreach com a valor. HANNAH Blumberg: I ​​crec que A-- era la seva pregunta, el que és l'índex implícit? AUDIÈNCIA: Una mica. MARIA ZLATKOVA: Oh. HANNAH Blumberg: Sí, sí. Així que, bàsicament, si no s'especifica 1 clau, que serà 01. MARIA ZLATKOVA: Sí. Igual que amb C, és zero indexats si no s'especifica la clau. AUDIÈNCIA: Ho sentim. Podries intentar parlar una mica més fort? Estic tenint una mica de problemes per sentir tot. MARIA ZLATKOVA: ho sento molt. Sí, és clar. Així que és el que vols de mi per repassar de nou? O és esto-- AUDIÈNCIA: Així que en l'anterior si slide-- vostè podria tornar per un segon. MARIA ZLATKOVA: Per descomptat, ho sento. AUDIÈNCIA: Així que el segon array aquí no semblen tenir un valor de clau, una mena de [? causalitat. ?] MARIA ZLATKOVA: Cert, cert. AUDIÈNCIA: Llavors, com funciona això quan vostè diu que és tot o res. Per a mi, això sembla 1 [? foo?] ja. MARIA ZLATKOVA: Sí, sí. Així que de nou, es tracta d'una mapa ordenat en aquest sentit que no s'entenen, per exemple, els índexs aquí es pot entendre com a 0, 1, 2, 3. Un cop més, això és tenir els índexs és el nostre equivalent de tenir tecles mapejades en valors. Així que si la nostra clau va ser 0-- ho sento. HANNAH Blumberg: No, Hi ha apuntar-aquí. En realitat és molt agradable. MARIA ZLATKOVA: Això és genial. D'ACORD. Així que de nou, $ arr 0 seria la clau per al valor 1. 0 seria la clau per al valor 1. AUDIÈNCIA: Ho sento. És invisible. HANNAH Blumberg: Molt bé, no importa. Chalk era una mala idea. Em retracte. Vostè pot pensar en les tecles com mapes 0 al valor 1. MARIA ZLATKOVA: Sí. Així que aquest és 0, és a dir 1, 2, 3. Aquestes poden ser les claus. Vostè pot pensar en ells com-- si. Així que en lloc de tenir claus explícites, són tipus d'entendre com sent els índexs a partir de 0. El guix no va ajudar. Sí. AUDIÈNCIA: Per al bucle foreach, si volíem veure el com el valor, ho faria només índex automàticament a 0? MARIA ZLATKOVA: Sí. Seria anar a través de cada un dels valors. AUDIÈNCIA: [inaudible] com 0 o caldria acaba de fer de 0? MARIA ZLATKOVA: Hauries dir, com a signe de dòlar i després algun nom de variable, el valor. AUDIÈNCIA: [inaudible]. MARIA ZLATKOVA: Ho sento? AUDIÈNCIA: Ho sento, estic tractant de recordar. Com vostè que si vostè pot fer-ho automàticament la indexació és de 0? MARIA ZLATKOVA: Llavors, com ho faries si vostè no té els noms claus específiques? AUDIÈNCIA: Sí. MARIA ZLATKOVA: vostè acaba de define-- només dir-te a tu mateix com un nom. Així que en els seus conjunts de processadors, vostès podrien recordi $ row foreach com $ files, hem creat nosaltres mateixos aquests $ fila dient volem passar per fila com $ files. Tot i que no teníem aquesta $ explícita files definides, poguéssim anar i diuen que això pot ser la clau, i només ha d'anar a través de cada un dels valors. AUDIÈNCIA: Així és el valor d'una variable nova estem creant per emmagatzemar [inaudible]? MARIA ZLATKOVA: Així que no és inherentment una nova variable. És una variable que fa referència a la a l'interior de la matriu a cada un d'ells. HANNAH Blumberg: És un nou nom de la variable. MARIA ZLATKOVA: Sí, és un nou nom de la variable, però no és inherently-- si. És només una nova variable que es pot fer això. Llavors, com fem que vam fer $ Remar com $ files, files era un nou nom de la variable que podria crear en el nostre bucle foreach. No ha de preexistir abans d'això. AUDIÈNCIA: Podria passar pel lògica per a cada un, utilitzant el exemple allà? MARIA ZLATKOVA: MHM. Oh, ho sento. Aquí està l'exemple. És clar. Així que per a cada array-- el això vol dir anar a aquesta matriu com a clau value-- que està passant de passar per aquesta matriu i primer anar a buscar foo, la foo clau i la barra de valor. I després en el segon iteració del bucle for, que passarà i prendre el baz clau i el qux valor. I llavors vostè pot fer alguna cosa amb qualsevol d'ells o tots dos d'ells. AUDIÈNCIA: Així que la idea darrere de que té un punt clau per al valor, ¿Què és el que acaben l'accés? MARIA ZLATKOVA: Quina és la idea i tenir un senyalador clau per valorar? És només una altra convenció, un altre forma de recórrer la matriu i ser capaç d'accedir a qualsevol dels clau o el valor o tots dos i utilitzar-los. AUDIÈNCIA: Quin és el paper de la ordenar que el foreach s'executa en? Així que si haguéssim d'afegir elements a la matriu després, hauria qui seran els primers crida a la matriu foreach, o seria més tard? MARIA ZLATKOVA: Llavors, què és la finalitat que el foreach bucle passa per una sèrie de? Passa a través de la primera element per a l'últim element, fins a l'últim element afegit. Si afegiu elements més tard, ho farien accessed-- ser els primers elements serien ser visitada com la primera elements de la matriu, i després t'agradaria anar a través de cada un els elements com una mena de ordered-- no un ordenat, però la forma en què que s'han posat a la matriu. AUDIÈNCIA: Llavors nous elements s'afegeixen més tard? Així que estan added-- seran el els últims al [? iteració. ?] MARIA ZLATKOVA: Nous elements can-- Bàsicament, quan s'afegeixen nous elements, es van afegir a la final de la matriu? AUDIÈNCIA: Sí. MARIA ZLATKOVA: Crec que si. Sí. I després, amb el seu bucle foreach, després d'afegir nous elements i vostè va a través d'ells, els nous elements faria ser accessed-- el nou element, si és agregat última, seria accedir passat. AUDIÈNCIA: Pots donar un exemple d'alguna cosa que faria [inaudible] amb una mica de valor com [inaudible] o el valor, agrada com et dóna format això? MARIA ZLATKOVA: És clar. Puc donar un exemple del que que faríem amb el valor? Així que el que vostès podrien estar familiaritzats amb és que hem passat per una sèrie i bàsicament imprès cadascun dels elements, per exemple, com a part d'una llista ordenada o alguna cosa d'això. ¿Això té sentit o volem A-- AUDIÈNCIA: Podem imprimir aquests valors fora? MARIA ZLATKOVA: Sí, podríem imprimir i després bàsicament $ valor perquè en aquest valor específic, que seria imprimir el valor dins d'ella. Així que si estàvem en la nostra primera iteració de la mateixa i imprimim $ valor, estaríem imprimint bar. AUDIÈNCIA: Hi ha també són per bucles en PHP o simplement bucles foreach? MARIA ZLATKOVA: No també per bucles en PHP. I la seva lògica és sobretot el mateix que el que vostè ha estat acostumat. AUDIÈNCIA: Pel que el seu valor és nul. MARIA ZLATKOVA: És com el mateix. Sí. AUDIÈNCIA: només vaig a preguntar. Així que quan es declara un matriu, no cal per dir-li el que la mida que va a ser, el que significa que vostè pot simplement afegir i treure elements de [inaudible]. MARIA ZLATKOVA: Sí. Sí. Exactament. Quan declarem una matriu, que no cal dir quina mida és, així que només podem afegir elements en ell més endavant també. Més preguntes? Per tant portant PHP i HTML junts, el que hem seen-- així, Per exemple, en aquest exemple, tenim un formulari HTML que té un camp d'entrada. I el camp d'entrada és anomenar només i llavors té un botó Envia. I quan es prem el Presentar botó, en el nostre fitxer hello.php, perquè el mètode per a la forma és aconseguir, podem accedir al que estigui a nom de per aquesta obtenir la variable global que és-- la sintaxi és $ _GET. I després podem accedir a qualsevol que sigui el entrada de l'usuari a l'interior d'aquesta forma per al nom especificant el nom d'aquest camp. Alguna altra pregunta o qualsevol preguntes sobre aquest exemple específic? AUDIÈNCIA: On és el PHP? MARIA ZLATKOVA: Aquí. Així que aquesta és la nostra etiqueta d'obertura per al PHP. AUDIÈNCIA: Oh, dreta. MARIA ZLATKOVA: Sí. HANNAH Blumberg :? El = és la taquigrafia perquè aquesta és PHP i amb prou feines ressò. AUDIÈNCIA: Oh. MARIA ZLATKOVA: Sí, ho sento. Hi hauria d'haver deixat clar. HANNAH Blumberg: Imprimeix. MARIA ZLATKOVA: És només la funció que ens permet imprimir alguna cosa. Molt bona pregunta. Així going-- si. AUDIÈNCIA: ¿Va a ser bastant una mica de codificació manual de PHP i HTML el qüestionari 1? MARIA ZLATKOVA: No pot ser un bona quantitat d'interpretació de PHP i HTML, no necessàriament com una enorme quantitat de codificació, encara que potser hagi d'escriure una bucle foreach, però, un bucle for. Qualsevol dels bucles que ens cobrir aquí és un joc just. I això és sobre tot això. HANNAH Blumberg: Jo estaria preparat. De la mateixa manera que els demanem que escriure un munt de funcions C en concurs 0, Jo estaria disposat a fer el mateixa en PHP i JavaScript. MARIA ZLATKOVA: Sí. HANNAH Blumberg: Jo diria que 1 poc-- com no estem farà que escriviu un enorme HTML pàgina perquè això és una mica tediós, però és possible que tingui parts. Això és joc totalment just. Com a petita pàgina HTML, totalment just. AUDIÈNCIA: OK. Què tal en JavaScript també? HANNAH Blumberg: Sí. Presa fàcil de JavaScript. MARIA ZLATKOVA: Sí. Això és joc completament just. HANNAH Blumberg: Anem a arribar a la de com 10 minuts. MARIA ZLATKOVA: SQL, de nou, Structured Query Language. Bàsicament ens permet gestionar les dades en una gestió de base de dades relacional sistema. Això significa que només bàsicament que tenim en algun lloc per emmagatzemar algunes dades que podríem voler utilitzar en un lloc web o en alguna altra forma. I després tenim les consultes per obtenir informació de la nostra base de dades, o per inserir informació en ells. Gran part de la ACTUALITZACIÓ ones-- comú, INSERT, SELECT i DELETE. Així que per UPDATE, aquesta és la sintaxi per a l'actualització de dades en una base de dades. L'actualització d'aquesta taula anomenada taula dient SET, podem establir alguns valors en tot files a la igualtat d'alguna cosa més. Així també podem especificar algunes específiques entrades que volem modificar i que pot ser utilitzant WHERE. I podem especificar que només volem modificar algunes files on la casa per, si tinguéssim una taula d'estudiants i tots els estudiants tenien casa, pel que només seria modificar alguns valors on una casa és igual Currier, per exemple. Per INSERT, podem inserir certs valors en una taula. Així INSERT INTO taula, i després els valors, i després entre parèntesi, especifiquem que els valors que voleu inserir. Així INSERT INTO taula, col1 i col2, el valor és val1 i val2. Així que aquesta s'insereix bàsicament una nova fila en una taula que conté els valors 1 i 2 en les columnes 1 i 2. I després anirem un exemple ràpid de com es veu això de la mateixa manera que a la nostra base de dades una mica. Però aquesta consulta final que I Crec que anirem, SELECT, només ens permet per seleccionar dades d'una taula a la possibilitat d'utilitzar-lo després. I la forma en què fem això és que simplement guardar-lo en alguna variable. I llavors podem possiblement utilitzar-lo de nou. Així estrelles SELECT significa seleccionar tot. Això és només una abreviatura per a la selecció de tots. FROM taula WHERE, estem buscant per a algunes condicions específiques, de manera que la columna és igual a alguna cosa, per exemple. Si l'únic que volíem seleccionar tot de la taula, això només selecciona totes les columnes i totes les files d'una taula. I després DELETE FROM taula ON col és igual a alguna cosa, això només elimina alguns fila de la nostra taula on tenim algunes condicions específiques. En aquest cas, les condicions són la columna és igual a alguna cosa. Tan sols un exemple ràpid d'això. Si tenim aquesta taula aquí i nosaltres inserir-lo en una taula, aquests valors, això seria inserir una nova fila. I si tinguéssim increment automàtic, això seria acaba d'incrementar el nostre ID de 0 a 1 a 2. Si seleccionem tots dels estudiants, que simplement retorna tots els camps i totes les files. On any és més gran o igual a 2.016, això seria simplement tornar Hannah i jo. I després si només seleccionem Identificació de l'any i l'any dels estudiants on la casa és Cabot House, que seria, de nou, tornar a Hannah i jo. Llavors, si hem esborrat dels estudiants on nom és igual a Rob, això seria eliminar tota la fila. I després, si ens fixem el nom, estudiants ACTUALITZACIÓ Nom del conjunt és igual a Daven ON casa és igual Cabot House, que va anar a aquestes files i després actualitzar el nom. I després d'uns tipus de dades SQL són CHAR, VARCHAR, INT, i surar. Aquests són joc just. M'agradaria anar una altra vegada i assegureu-vos que sap i tenir-los en el seu full de trucs, el que cada un d'aquests personatges s'han utilitzat per, el que els va utilitzar en els seus conjunts de processadors, i assegureu-vos que vostè està familiaritzat i còmode amb haver de triar de diferents tipus de dades en el conjunt de processadors. Sí. AUDIÈNCIA: Quin va ser emmagatzemada aquesta taula? Sí, on s'emmagatzema aquest quadre? MARIA ZLATKOVA: Bé, en aquest moment, no s'emmagatzema. De totes maneres, on s'emmagatzema aquest quadre? Però pot ser emmagatzemada en una base de dades SQL. AUDIÈNCIA: ¿I on és la base de dades SQL? A l'ordinador, en línia en algun lloc, el servidor? MARIA ZLATKOVA: Pot ser un sèrie de coses diferents. HANNAH Blumberg: Hem interconnectat amb Taules SQL majoria amb phpMyAdmin. Així que el que podíem demanar un servidor emmagatzemar per a nosaltres. Podríem emmagatzemar-los en el nostre propi ordinador. MARIA ZLATKOVA: Això és decisió com vols que ho faci per tu mateix. Però hem estat emmagatzemant ells, com s'esmenta Hannah, en phpMyAdmin, que és en línia. I llavors la forma en què fem servir PHP i SQL, que l'emmagatzemen en alguna variable el que hem preguntat per. Així que si tenim Selecciona-ho tot en la història on user_id és igual a l'identificador de sessió, això seria seleccionar totes les files per a la persona específica que està connectat a partir de la història taula i les ordena en files. Un bon aspecte saber és que la funció de consulta del CS50 protegeix contra etiquetes d'injecció SQL. Això només vol dir que s'assegura l'entrada que s'introdueix és correcte i que la persona que està entrant a l'entrada No està tractant d'entrada d'alguna maliciosa codi o bé caure les nostres taules o esborrar tot dins de la nostra base de dades. Una visió ràpida de la Model Model View Controller, és només una forma d'organitzar i pensant en codi. És més, un paradigma de disseny. El que això significa és que can-- i és una bona pràctica per separar les diferents parts del nostre codi i el que controlar en aquestes tres paradigmes. Així que el nostre punt de vista és el més sovint la nostra plantilles, el nostre disseny, la forma que establim com es veu el nostre codi. Això és sobretot nostres arxius CSS i la forma que definim el disseny del nostre codi, bàsicament. El nostre controlador és sobretot el que que hem estat fent amb els arxius PHP. Així que de nou, en col·laboració amb la informació que tenim i definir com aquest informació s'utilitza, i després passar aquesta informació ja sigui a la vista o el model. I el model, la forma en què hem estat utilitzant és a dir ha estat la nostra base de dades, pel que la nostra informació és emmagatzemat pel que té alguna part per viure, i qualsevol dels codi que es refereix a la forma que obtenim aquesta informació o la manera que actualitzem aquesta informació. Així que en el model MVC, HTTP les sol·licituds s'envien a un servidor web. A continuació, el controlador interpreta la sol·licitud del usuari i després valida l'entrada de l'usuari. És opcional que tenim el controlador comunicar- amb un model, de manera que alguna cosa com la nostra base de dades o alguna altra funcionalitat que transmet informació. I finalment, el controlador passa la informació a la vista de manera que pugui ser rendit i que pot es fan visibles a qualsevol persona l'accés a la pàgina web. Qualsevol pregunta? Impressionant. Així que de nou, el model, la seva funció, de nou, és l'emmagatzematge persistent de la informació, la gestió i organització de les dades. I el que hem vist fins ara és la base de dades MySQL i els arxius de dades que es poden utilitzar. Veure, presentació d'informació a l'usuari, la interfície d'usuari, o interfície d'usuari. I l'exemple d'això és HTML. I llavors podríem tenir PHP mínima. Així que per a un bucle que itera sobre les dades que s'imprimeixen és part de la vista, com es en comparació amb el controlador. I llavors molts dels nostres arxius PHP caure en la categoria de controlador. Simplement maneja peticions dels usuaris i obté informació a partir del model. Saltant en el Document Model d'objectes, això només es refereix a la forma en HTML s'organitzen documents. I estan organitzats en un arbre estructura que té una jerarquia. Així que si tenim accés a [inaudible] la representació del document, podem treballar amb el document, igual que manipulem objectes bàsicament. I per fer això una poc més clara, quan tenim un munt de la nostra diferents etiquetes responen a diferents rutes al nostre arbre. I a continuació, per a aquest exemple, tenir el node de document de partida. Tenim, llavors, el nostre node HTML que es divideix en cap i cos. Head té títol i després títol conté hola, món. I el nostre cos només conté hola, món també. Així que qualsevol pregunta sobre qualsevol dels coses que hem cobert fins ara? I si no, va a Hannah fer-se càrrec amb JavaScript. Impressionant. HANNAH Blumberg: OK, fresc. Si hi ha una cosa que ve amb PHP o HTML, o qualsevol de les coses que Maria cobert, sempre podem fer una pausa. Ho estem fent millor en una altra vegada, tan impressionant. I només per tornar molt ràpid a aquesta, si ens fixem en tots els examen de l'any passat, aquesta sorgeix mateixes: aquí és una mica d'HTML, fan d'aquest diagrama. O aquí està aquest diagrama, fer una mica de HTML, de manera que definitivament practicar això. I llavors aquesta és una GARANTITS pregunta que vostè pot fer-ho bé. Fresc. Així que anem a parlar de JavaScript i com és una mica diferent de llenguatges com PHP i C, els dos idiomes que vam veure abans. Així que el número u, està vagament escrit. Això és com PHP, però a diferència de C. És un llenguatge interpretat. Un cop més, això és com PHP, a diferència de C. I això ens permetrà servei- que funciona molt bé amb les pàgines web. Això permetrà que nosaltres manipulem el contingut i com es veu i el que fa. Anem a veure una mica d'Ajax. Ens permet comunicar-nos de manera asíncrona amb diferents servidors i obtenir informació. I això és el que realment separa JavaScript des de PHP i C és que és del costat del client. Tant PHP i C són normalment del costat del servidor. En la seva major part i gairebé íntegrament el que que hem vist, almenys en aquesta classe, JavaScript actua sobre el costat del client, el que significa que el navegador és en realitat responsable d'executar. I això vol dir que no ho fem necessitat d'interactuar amb el servidor. Pel que significa que pot ser molt més ràpid perquè és en realitat només és Chrome, és Safari, és Firefox, el que utilitzar realment el funcionament del seu JavaScript. AUDIÈNCIA: Què significa asíncrona? HANNAH Blumberg: Ah, el Què significa asíncrona? Molt bona pregunta. Asincrónicamente designa totes així, el contingut en què utilitzem és, OK, ens estan creant una pàgina web i hem d'aconseguir una mica d'informació. Així que amb l'exemple de mashup, alguna informació que pot ser que desitgem és títols dels articles. Ara, could-- un lloc és fer-ho de forma sincrònica i això significa let de parar, anar a buscar l'article, aconseguir l'article de tornada, i després render, però això seria molt lent. Això seria una mala experiència d'usuari perquè vostè acaba d'estar assegut aquí esperant per alguna cosa que respondre. De manera asíncrona que significa anem seguir anant sobre el nostre negoci, la prestació a la pàgina, i li enviarem una petició de Això és una cosa que va a succeir en el fons. Crec que utilitzem l'exemple de conferència de trucar a Rob i dient: Hey, pots veure això per a mi i tornar a mi, en lloc de només em espera al telèfon. Així de forma asíncrona significa que succeeix en el fons de distància de nosaltres en paral · lel. Molt bona pregunta. Alguna cosa més? Gran. Anem a saltar molt més en peticions asíncrones amb Ajax. AUDIÈNCIA: El JavaScript-- ¿d'on ve caure amb el model-vista-controlador? HANNAH Blumberg: Molt bona pregunta. D'on ve la tardor JavaScript amb el model-vista-controlador? Hm. Suposo que pot fall-- pel que no solen agradaria aixafar en què paradigma, però suposo que jo diria, OK, així JavaScript en realitat va a permetre nosaltres per recopilar dades, interpretar les dades, en realitat fer coses significatives amb les dades. D'aquesta manera, és molt similar al de control. Però també ens va a permetre mostrar coses i coses d'impressió. D'aquesta manera, és molt similar a la vista. Sí. Així que és una cosa així com PHP en on pot espècie de ser alhora. Bona pregunta. Alguna cosa més? Molt bé, impressionant. La dreta mòbil endavant. Així que anem a veure un exemple de com podem utilitzar JavaScript en un dels nostres programes web. Així que vaig a considerar aquesta index.html amb un munt d'HTML. I ho vull centrar-se en és aquesta etiqueta script. I això ho diu, està bé, vull córrer alguns JavaScript i aquí és on viu. Viu en hello.js. I molt semblant a CSS, podríem posar JavaScript al HTML. Per què podríem voler separar a terme? Sí. AUDIÈNCIA: més fàcil tornar a escriure? HANNAH Blumberg: Sí. És més fàcil d'utilitzar a través de diferents pàgines web. Manté les coses més net. És només una bona pràctica. Impressionant. Bona resposta. Així que bo, així que això va per ser el nostre index.html. I llavors aquí és la nostra diminut arxiu JavaScript. I tot el que diu és alerta Hola, món. Així que el que succeeix és quan aquesta pàgina renders-- així que si vas a qualsevol lloc web aquest és-- tot el que succeirà es dirà, OK, estic va a executar el codi JavaScript. I el codi JavaScript només diu alerta Hola, món. Així que vaig a aconseguir aquest petit i agradable emergent. Fresc? Això és una cosa així com el nostre primer JavaScript programa, la nostra Hola, món. Vegem una mica més sobre el que la sintaxi de JavaScript sembla. I concretament, anem a comparar a C i PHP, el que hem vist abans. En JavaScript, tindrem var, el nom de la variable, i després el seu valor real. I no especifiquem un tipus, simplement com en PHP, però molt al contrari que en C. Així, per exemple, si volíem per emmagatzemar el valor 50, en C, hauríem de dir, escolta, C, vull un nombre enter, Vaig a dir- I, i el seu valor és 50. En PHP, és una mica més fàcil. Nosaltres diem, escolta, vull una variable crida i i el seu valor és 50. Molt similar, en JavaScript, que dic hey, jo vull una variable anomenada i, el seu valor és 50. Cada vegada que ús posterior I, jo no necessito escriure var. És només que a partir d'aquest moment. De la mateixa manera, en C, on una vegada que diem int i, només ha d'utilitzar i. Fresc? Tot bé. Passant als bucles, afortunadament, aquests gairebé miro exactly-- Crec que són exactament el mateix que el bucles van a semblar en una mena C, on el bucle for va tenir de tres parts-- 1 inicialització, una condició, i una actualització. Un bucle while, es veu exactament el mateix. Ens adonem una condició. I una do while, de nou, exactament de la mateixa. Li donem una condició. Diguem que volia repetir over-- Jo volia fer alguna cosa cinc vegades. En C, podríem escriure per init i és igual a 0. i és menor que 5, i ++. L'única diferència, en JavaScript, en comptes de dir int i és igual a 0, diem var i és igual a 0. Bonic. Aquesta és l'única diferència. Teniu alguna pregunta sobre res d'això? Sí. AUDIÈNCIA: Llavors en PHP, que és el mateix cosa, a excepció sinó com una variable? O era un exemple var? HANNAH Blumberg: Sí. Així que en PHP, que va ser un signe de dòlar. Així que va a $ i és igual 0, $ i és menor que 5, $ i ++. Molt bona pregunta. Ara anem a parlar de declaracions de funcions. En C, quan declarem 1 funció, que li vam donar un nom i li vam donar alguns paràmetres. I al principi, escrivim el tipus. En JavaScript, tot el que has de fer és escriure la funció de paraula clau que diu, hey, JavaScript, Estic a punt de definir una funció. En aquest cas, té nom de suma. I pren dos arguments, x i y. Cal notar que no ens importa sobre els tipus de xi y. I igual que C, tenim aquest retorn de paraules clau, pel que podem fer alguna cosa com return x i y. I ara, una vegada que hem escrit aquesta primera funció, es pot utilitzar en qualsevol suma. I això és totalment bé. Una cosa realment bo de JavaScript que és molt a diferència de C és que les funcions es ser tractats com a valors. Pel que podem fer alguna cosa així aquí on suposo cobreixo aquest up-- Em vaig cobrir la suma var parcialment: i que acabem de dir funció de xi és igual de retorn x més i. Això és el que s'anomenaria una funció anònima. És una funció sense nom. Mentre aquesta funció diu suma, bla, bla, bla, això seria simplement dir funció. Però ara tot i que tinc aquesta funció anònima, aquesta funció és en realitat un valor. Podem tractar-lo com un valor. Així que podem guardar en una variable de la mateixa manera podríem emmagatzemar 50 en una variable. Així que podem dir, OK, vull una variables, es diu suma, i és aquesta funció. Així que aquestes dues coses són en realitat va a fer exactament el mateix, però la sintaxi és una mica diferent i una espècie de nota de la diversió. Sí. AUDIÈNCIA: Pel que podria trucar a un funció que va ser anònima dient: suma suports 2, 5? HANNAH Blumberg: Sí. Vostè pot trucar a aquest anònim funcionen de la mateixa manera. Faries suma (2, 5);. Això seria totalment bé. Si jo no vaig fer suma var és igual funció, si m'acaba d'eliminar esto-- Sé que és a la mà, però pretenc He eliminat esto-- continuació aquesta funció és una espècie de simplement desaparegut. Mai es pot utilitzar de nou perquè vostè no té un nom per a ell. És difícil referir-se a alguna cosa vostè no sap com cridar-ho. Bona pregunta. Sí. AUDIÈNCIA: Es pot fer referència a la suma de altres llocs amb el valor de x més i? HANNAH Blumberg: Pot vostè suma de referència en altres llocs amb el valor de x més i? No estic del tot segur del que vols dir. AUDIÈNCIA: Així que el teu passat semi-anònim funció és la suma és igual a aquest funció anònima, per la qual cosa suma és ara una variable que can-- HANNAH Blumberg: Correcte. Així suma és la variable, però és actually-- així suma és una variable el valor és la funció. Així que és una funció, que és una mena de una cosa estranya per embolicar el seu cap al voltant des que hem estat jugant amb C i no es pot fer això en C. Però ara podem trucar a sumar la mateixa manera que podríem anomenar suma aquí. AUDIÈNCIA: OK. HANNAH Blumberg: Sí. Bona pregunta. Sí. AUDIÈNCIA: ¿Així que no fem servir el prototips en PHP o JavaScript? HANNAH Blumberg: No, no cal utilitzar prototips, especialment en JavaScript. Així que una cosa mala pràctica que sóc dirà que vostè no ha de fer és que vostè no ha d'escriure var i = 50. Es podia començar a fer i = 50. I només faria que una variable global. És molt mala pràctica Mai dic explícitament var i, però és una cosa que pot fer. L'intèrpret no és va a cridar a vostè. Javascript és bastant similar, vostè pot fer el que vulgui. Oh, ho sento. Hi ha dues. En els pantalons de color taronja. Endavant. AUDIÈNCIA: No, tu primer. AUDIÈNCIA: No, jo estava dient Jo no tenia la meva mà. D'ACORD. Així que si anés a cridar aquesta primera vegada, ara resumir, en diem la mateixa manera, X, i, com cada vegada? HANNAH Blumberg: Sí. Així que aquests dos essencialment fer el mateix. AUDIÈNCIA: ¿I quina és l'avantatge de la utilització d'un o altre? HANNAH Blumberg: Cap avantatge de la utilització d'un o l'altre. Només volia mostrar de dos diferents peces de la sintaxi. Moltes vegades en l'anonimat funcions tenen un propòsit és si l'argument a un altre funció ha de ser una funció. I veurem que, en només un segon amb l'Ajax. Així que si això no té cap sentit, deseu-lo a la part posterior del cap. Aquí és on un anònim funció podria ser útil perquè no és realment val la pena donant-li un nom ja que estem just utilitzarà una vegada. Sí. AUDIÈNCIA: Si x i i canvi posterior en endavant, es resumeixen canviar també? HANNAH Blumberg: Si x i el canvi i més endavant, es resumeixen canviar també? Així que això és en realitat jo pensar en alguna cosa que és, de nou, només se sent molt diferent de C. Això no és un valor. No és 5. És només la pròpia funció. Així que tan aviat com vostè li dóna els paràmetres, llavors vostè realment va a calcular un valor. MARIA ZLATKOVA: I llavors vostè pot cridar a la funció i el fan servir per aconseguir una mica de valor. HANNAH Blumberg: Correcte. Exactament. Sí. AUDIÈNCIA: Llavors, si només emmagatzemar-lo en la variable, com var x és igual a quantitat de dos values-- HANNAH Blumberg: Sí. Així que vostè podria fer var sum és igual a la suma de dos valors. Sí. Alguna altra pregunta? Sí. AUDIÈNCIA: Però faria que confondre suma i la suma? Igual que si vostè crida a la seva suma variable Com diria vostè a la suma funció? HANNAH Blumberg: Mm. Mm. Si vostè va fer alguna cosa de la mateixa manera que, la suma és igual a la suma de 2, 5? AUDIÈNCIA: Sí. HANNAH Blumberg: Crec que seria sobreescriure el valor de la suma. Així que una altra interessant El que passa JavaScript és que una sola variable pot prendre en un munt de diferents tipus. Les males pràctiques. Vostè no ha de fer alguna cosa com el que acaba de dir. Però en C, si i és igual a un nombre enter, sabem que mai és va a convertir-se en una cadena. Aquest no és el cas en JavaScript. Sí, bona pregunta. Alguna cosa més? Tot bé. Fer tot just a temps. Mantenir en marxa. Tot bé. Si ens fixem en una matriu en JavaScript, aquí està un exemple ràpid d'una matriu de cadenes. I matrius poden créixer dinàmicament. No tenen una grandària fixa de la mateixa manera que ho fan en C. Podem accedir al elements amb només els claudàtors. Això es veu molt semblant a PHP i molt com C, en el qual podem dir que, en aquest cas, si volia la paraula JavaScript, ho faria no arr claudàtors amb un 0, 1, 2. I llavors, si vostè recorda en C quan volia aconseguir la longitud d'una matriu, que era realment molest. Però en JavaScript, super fàcil. Tot el que fem, .length. Li dóna les longituds. Això és. AUDIÈNCIA: Això és simple. HANNAH Blumberg: Sí, fa la seva vida molt més fàcil. OK, no objeto-- allà. Objectes en JavaScript sensació molt com estructures en C i matrius associatives en PHP. Així que el que hem vist una molt és JSON, que és sinònim de JavaScript Object Notation. I és bàsicament una manera d'estructurar les nostres dades. Així que anem a veure un exemple, probablement el més fàcil. Així que aquí està un exemple d'un objecte que emmagatzema la classe, CS50. I quan dic classe, em refereixo per descomptat, No com-- sí, el curs, CS50. I veuràs que tot en l'objecte va ser continguda entre claus. I vam començar a associar noms de camp o les tecles amb els diferents valors. Així que vostè pot començar a veure com aquest tipus de se sent com una matriu associativa en PHP. Així que anem a associar el camp o el nom de clau, per descomptat, amb la cadena, CS50. Tindrem un instructor. Tindrem TFS. Tindrem el nombre de conjunts de processadors i anem haver gravat. I una cosa fresca a destacar és tot aquestes coses tenen diferents tipus, i això és totalment bé. Està bé per a un objecte, de fet, que probablement l'esperat per a un objecte tenir una combinació de cadenes i números i booleans i arrays i tot el que podria vol tenir dins del seu objecte. I tingui en compte que aquests van a ser els noms o les claus, i llavors només configurar igual amb una mica de còlon. AUDIÈNCIA: Què significa exactament JSON? HANNAH Blumberg: Què exactament què significa JSON? JSON simplement vol dir JavaScript Object Notation. És només una manera de formatar. Sí. És una manera de formatar les nostres dades. En C, és estructures. En PHP, és matrius associatives. En JavaScript, tenim objectes. AUDIÈNCIA: Llavors CS50 és un objecte? HANNAH Blumberg: CS50 és l'objecte en aquest cas. Ara, com fer que realment l'accés aquests camps o canviar aquests camps. Per exemple, suposem que vam decidir que volies un menys pset aquest semestre. En lloc de nou, estem només va a tenir vuit. Com podem canviar això? Oh, de manera equivocada. Hi ha dues maneres en què podem fer això. El número u és amb el punt notació i número dos és amb la notació de claudàtors. Així, per exemple, si volgut canviar o accés el camp de conjunts de processadors al nostre objecte CS50, el que jo faria és CS50.psets, pel que el nom de l'objecte dot el nom del camp o la tecla. Molt similar, és exactament equivalent a fer CS50, i després entre claudàtors, conjunts de processadors. Fresc? Sí. AUDIÈNCIA: Així és JSON tècnicament JavaScript, tot i que en els conjunts de processadors que separar terme [inaudible]? HANNAH Blumberg: És clar. Llavors la pregunta és, són JavaScript i JSON equivalent? Així JSON és notació, bàsicament, la forma en què escrivim un objecte de JavaScript. Així que no són exactament el mateix. Jo diria JavaScript, hi ha són objectes en JavaScript. JSON pren aquests objectes i els imprimeix i els mostra o els emmagatzema d'una manera agradable. Així que JSON no és una programació llenguatge de la forma en què JavaScript està. És només la notació per els nostres objectes en JavaScript. Sí. AUDIÈNCIA: Llavors, què [Inaudible] completar? HANNAH Blumberg: És clar. Així que això en realitat no fa res. Això és només una forma d'accedir. Així que diguem que volíem canviar el nombre de conjunts de problemes 9-8. El que fem és fer alguna cosa com CS50.psets = 8;. Sí, bona pregunta. Això és només per mostrar que la sintaxi. En realitat no fer res útil. Qualsevol pregunta? La dreta mòbil endavant. Així que anem a veure un exemple ràpid de com Treballa JavaScript perquè et vaig dir que fa totes aquestes coses genials i ens permet modificar pàgines web. Anem a veure realment en acció. Així que pren, per exemple, aquest arxiu HTML. I el que vull li permet centrar-se en és aquesta etiqueta particular, que és un botó, amb search_button Identificació. És només a la pàgina. Així que ara anem a veure què en realitat podem fer. Bé, suposem que quan fer clic en aquest botó, volem fer una alert-- ha fet clic al botó. Anem a veure com podem fer això. Així window.onload-- això no és una cosa que has vist a classe, per tant, no es necessita saber per a la prova. Però això bàsicament diu, OK, anomenada aquesta funció quan es carrega la finestra. Així que això és només una mica de codi de configuració. No et preocupis tant per això. El que vull que permet centrar-se en és aquí. Diem searchButton var és igual document.getElementById search_button. Així com vostè pot imaginar, el que això fa és que diu, OK, anar a buscar l'element amb search_button ID. I ara hem de element real i estic va a emmagatzemar en un searchButton variable. I ara podem realment utilitzar aquest element i canviar-lo, o accedir als seus valors, coses així. De fet, podem començar a comprometre amb la pàgina web. Així que aquí vaig a dir, OK, ara que tinc aquest botó, quan es fa clic, cridar a aquesta funció anònima. Així que aquí és on l'anonimat funcions es tornen útils. I què fa la funció? Bé, simplement crida a això funció d'alerta i diu, ha fet clic al botó Cercar. Llavors, què passarà si vaig a on vulgui aquest codi HTML viu i feu clic al botó, Vaig a buscar una mica d'alerta de luxe que diu que ha fet clic al botó. Així que les coses que se centren en aquí-- document.getElementById aconsegueix una HTML particular, element amb l'ID donat. I ara podem establir el que hauria de succeir quan aquest element en particular es fa clic. AUDIÈNCIA: Hem de posar tot això en? HANNAH Blumberg: Ho sento? AUDIÈNCIA: Hem de codificar físicament tot això? HANNAH Blumberg: ¿Hem de codificar físicament tot això? Sí. ¿No és això una mica molest? Es tracta d'una gran quantitat de codi. AUDIÈNCIA: Vostè podria importar alguna cosa. HANNAH Blumberg: Correcte. Podríem fer servir alguna cosa. I en particular: oh, és em diu que he de ensenyar secció. En particular, anem a utilitzar la biblioteca jQuery, perquè això era realment llarg i molt molest i vull ser capaç de simplificar- i fer-lo més curt i més fàcil d'escriure. Així que jQuery és una biblioteca JavaScript. Així que JavaScript està la programació idioma; jQuery és una biblioteca. I fa un munt de coses més fàcils. Fa que canviar i va a través d' un document HTML molt més fàcil. Fa que els esdeveniments de manipulació més fàcil. Això fa més fàcil l'animació i fa més fàcil l'Ajax. Així que anem a saltar en dues de aquestes coses ara mateix. Disculpa'm. Abans de fer-ho, algunes sintaxi bàsica. Això és el que més crida a la biblioteca jQuery sembla. Utilitzem aquest dòlar sign-- cap senyal de connexió a PHP, inconvenient-- simplement el nom d'una selector, punt, i després una acció. Així que anem a veure una mica de exemples concrets d'això. Així que aquesta realitat és la mateixa codi de la diapositiva esdeveniment. Així que aquesta cosa llarga, lleig es converteix en aquesta molt millor, una mica més petit. Així que anem a tractar de descompondre'l. Això diu, OK, jQuery-- aquest dòlar sign-- jQuery, trobar-me la finestra. Així que aquest és el de selecció. Quan es carrega, truqueu a aquesta funció. Així que això és tot per dins. D'ACORD. Fins ara, tot bé? Tot bé. Ara, jQuery, me la trobi cosa amb search_button ID. I el que es fa clic, cridar a aquesta funció. I llavors aquesta funció de exactament de la mateixa. Només fer una mica d'alerta, ha fet clic al botó Cercar. Així que és molt agradable. Realment condensa i simplifica el nostre codi. Com sé que és search_button ID i no com a classe search_button? AUDIÈNCIA: Hashtag? HANNAH Blumberg: Sí. Aquest símbol de hash, és com CSS. Així que recorda, amb CSS, quan volgut seleccionar alguna cosa per ID, hem utilitzat el signe lliura. I quan volíem per seleccionar alguna cosa per classe, utilitzem el punt. Gran. Té sentit? Així que se suposa que jQuery acaba de fer la nostra vida més fàcil. Sí. AUDIÈNCIA: Així que estic una mica confós pel que fa per al funcionament de la funció anònima. Vostè ho nomena aquest anonymouse funció, la funció? Com es diu? HANNAH Blumberg: És clar. Així que la funció és només una paraula clau que diu: Estic a punt de definir una funció. AUDIÈNCIA: Oh, OK. HANNAH Blumberg: OK? I després li passem com argument A-- tirem aquest un-- interior per a la funció de clic. Així que sí, de manera que la funció, aquesta funció anònima, es converteix en un argument real. Així que recordi en JavaScript, que pot tractar funcions com a valors. AUDIÈNCIA: Oh, OK. HANNAH Blumberg: Sí. M'agrada que "oh". Niça. Altres preguntes? Temps? MARIA ZLATKOVA: Good. Bé. HANNAH Blumberg: Awesome. Alguns jQuery útil ràpida. Jo no vaig a anar a través de tots ells. Aquestes diapositives seran amunt en línia una mica més tard, perquè pugui comprovar que fos una mica més tard. Però bàsicament, el general patró es manté en la que diem, OK, bé, jQuery, aquí està la meva selector i llavors aquí és una acció. I vostè pot fer coses com l'accés al valor d'un formulari, accedeix mica d'HTML, control del que succeeix quan l'usuari presenta una forma, coses així. Sí. AUDIÈNCIA: Així que en el examen, necessitarem saber bastant de la documentació de jQuery. Així que atès que copiar / enganxar el jQuery documentació per a la nostra fulla de trucs, On està el límit? Com quants què necessitem saber? HANNAH Blumberg: Molt bona pregunta. La pregunta és essencialment atès que no pot accedir a la documentació de jQuery durant la prova, quant ha de saber? No esperaríem que vinguis amb alguna funció aleatòria que es pot esperar per Google. Les coses que són un blanc legítim són el faria dir només una mica de la sintaxi general, ser capaç de seleccionar i per ID per class-- així com CSS. I llavors les funcions reals si mateixos, que el més probable és que et diuen. Sí. AUDIÈNCIA: Llavors, quan es selecciona per classe significaria punt. HANNAH Blumberg: Sí, exactament. Bé. Quan es selecciona per classe, que va que es esquitxen en lloc del signe lliura. Sí. AUDIÈNCIA: Vols que repassar la diferència entre la selecció per ID i per classe? HANNAH Blumberg: És clar. La diferència entre seleccionar Identificació i seleccionant per classe. Així com va dir Maria a poc abans, hi ha Només hi pot haver un element HTML amb una identificació donada, mentre que la classe, ens permet agrupar un munt de diferents elements junts, així que les coses que es relacionen, però no exactament el mateix. Això respon a la pregunta? Impressionant. Sí. AUDIÈNCIA: Què passa si vostè té múltiples coses que estan en la mateixa classe? HANNAH Blumberg: Què passa si té diverses coses que són la mateixa classe? Així, per exemple, si estem simplement usant JavaScript pur, ens agradaria fer alguna cosa com document.getElementsByClass. I llavors el que realment fa és Retorna una matriu d'elements. I cal qualsevol iterar sobre ells o trobar quin d'ells vol. No va a donar que un sol element. Es va a donar una matriu d'elements. Molt bona pregunta. Alguna cosa més? Impressionant. Així que crec que si estàs familiaritzat amb qualsevol jQuery que has vist al conjunt de processadors, vostè ha de ser bo per anar. Pregunta? Oh, no. Realment he de ensenyar. Relaxeu-vos. Estarà bé. Arribaré. Anem a parlar d'Ajax. Així Ajax serà A-- així, anem a començar amb el que representa. És un acrònim. Significa asíncrona JavaScript i XML. I XML és bàsicament serà [Inaudible] amb un tipus de les nostres dades. Però no hem realment utilitzat XML. En lloc d'això, només ha d'utilitzar JSON. Així que, bàsicament, és algunes data-- asíncron, JavaScript, i dades, en aquest cas, JSON. I el nostre objectiu, com hem esmentat una mica abans, és ser capaç de fer una sol·licitud, ha fer aquesta petició l'hora de la fons, però segueixen fer el que estàvem intenció de fer. I després, quan aquesta informació és llest, llavors anem a incorporar-lo. Així que anem a veure el que aquest en realitat sembla. I això, vostè hauria de ser una mica familiaritzat des pset8, el que vostè acaba de fer a. Així que aquí està una jQuery vàlida funció que podríem volen saber sobre-- aquest signe dòlar. Pel que diu la funció jQuery, .getJson. I què fa aquesta funció és realitza un URL i alguns parameters-- així que crec que en el cas de pset8, era com, la URL era articles.php i la paràmetres ha estat GO = una mica de codi postal. I diu, bé, fer una petició a aquest URL amb els paràmetres donats. I això només passa. Quan acabi, és ja sigui va a completar amb èxit o que va a fallar. Així que aquest és l'equivalent de trucada Rob i li demana que faci alguna cosa. I després, quan torna a trucar, està bé dirà que he acabat o vaig fallar. Així que en el cas que vostè és fet, dius, OK, he acabat. I llavors es crida a aquesta funció. En aquest cas, serà un funció que pren una mica d'informació. El que ens preocupem en general és de dades, les dades que en realitat estàvem vam tornar com a resultat de l'anomenada .getJSON. I vostè pot fer alguna cosa amb ell. Així que en el cas de pset8, exhibim com una llista. Falla serà una funció això es diu si falla la petició per qualsevol raó. I en el cas de pset8, acabem console.log ella. Per a qualsevol dubte sobre això? Sí. AUDIÈNCIA: Podem fer servir la funció theta en lloc de la funció, textStatus, jqHXR. HANNAH Blumberg: És clar. Així que sí, crec que en el conjunt de processadors, que acabem de veure les dades de la funció. Així que és només ell-- sí, a D'acord. Això és el que vam veure en el conjunt de processadors. Això és totalment bé. Aquests són només si volies per treure més informació, aquestes són les coses que vostè podria aconseguir de .getJSON. Bona pregunta. Alguna cosa més? Sí. AUDIÈNCIA: Llavors .getJSON és Ajax? HANNAH Blumberg: OK. Així que aquest és el tipus de part difícil. És una funció jQuery que permet tu per fer trucades asíncrones. I aquestes trucades asíncrones, això és el que hem estat referint com Ajax. Sí. Això em va portar un temps molt llarg per separi quan jo era un estudiant. AUDIÈNCIA: Pots dir això una altra vegada? HANNAH Blumberg: Sí. Puc dir això una altra vegada? Aquesta funció .getJSON, és una funció jQuery. I que va a fer una trucada asincrònica. I aquestes trucades asíncrones, hem es refereix a aquells com l'Ajax. Alguna altra pregunta? Tenim només un parell de minuts per al final. I Maria va acabar amb la seguretat i després ens anem que es tracta només de fer. MARIA ZLATKOVA: Awesome, OK. Així que això és-- només pren un parell de segons per mirar per sobre d'aquest. I això no és una cosa realment gran. I algú pot dir-me per què? Què està passant a foo i podrà poder potencialment resultar en una cosa dolenta, i com es diu? Sí. AUDIÈNCIA: Si l'argument que és aprovada en més de 12 personatges, podria desbordar-se. MARIA ZLATKOVA: Correcte. Perfecte. Com es diu? Vostè acaba d'esmentar que. AUDIÈNCIA: Desbordament de memòria intermèdia. MARIA ZLATKOVA: Sí, buffer overflow. Així que això és una cosa que nosaltres referir-se com desbordament de memòria intermèdia. I veiem que dins de foo, hem definit el nostre buffer, c, amb una mida de 12. No obstant això, en principal, no ho fem comprovar de cap manera en absolut si el argv1-- de manera que va ser el segon argument. No vam comprovar si el mida de la mateixa és apropiada. Així que si teníem un usuari especialment maliciós de posar en un cert argument que era més de 12, i després potencialment més enllà dels límits d'aquesta argument, tenia una mica de codi executable que ell estava tractant de fer una cosa dolenta amb ella; després d'això, el que passaria, anul·laria el retorn direcció de la funció foo, fent que la funció per quan tornar a executar aquest codi. I llavors les coses dolentes poden succeir. Té això sentit per a tothom? I com podem protegir contra això? Alguna suggerència? Bàsicament, a l'interior de potencialment foo, com podem comprovar per assegurar que això no pot passar? AUDIÈNCIA: Si s'excedeix la mida 12, vostè assignar memòria addicional? MARIA ZLATKOVA: Suggeriment és, assignar memòria addicional de la mida excedida. En realitat, podem fer alguna cosa una molt més simple que això. Només podem obtenir la longitud de la cadena l'argument que s'introdueix, comprovar si és menys que o igual a 12-- que és el que volem de ser perquè no volem que excedeixi dels límits del nostre buffer. I després, si no ho fa, ens pot treballar amb l'argument. I després, si ho fa, realment volem a Yello potencialment en l'usuari. Però així és com ho faríem això. Sí. AUDIÈNCIA: Podria vostè explicar ràpida veritable memcpy? MARIA ZLATKOVA: Oh, ho sento. Sí. Memcpy pren ho és-- ho sento, OK. Memcpy pren el que sigui a la barra, el que sigui es passa en foo com l'argument de la línia d'ordres. Així que prendrà argv1. Argv1 es diu bar aquí. Així que prendrà bar i que va a copiar al c. AUDIÈNCIA: OK. MARIA ZLATKOVA: I va copy-- el tercer argument simplement es refereix al molt que va a copiar al c. AUDIÈNCIA: Ah. Així que d'aquest còpia tots de la mateixa a continuació. MARIA ZLATKOVA: Sí, està copiant tot. Sí. En primer lloc, ens assegurem que la barra no és igual a NULL perquè és un punter. Després tenim la longitud de la cadena de la barra. Ens assegurem que és menys d'o igual a 12. I després perquè hem assegurat, podem realitat memcpy i estar segur que això està bé. Qualsevol pregunta? Gran. Tinc dues preguntes de vertader o fals. Pot algú dir-me immediatament si són vertaderes o falses? Sí, és fals. Exactament. Tots dos són falses. Així, utilitzant una sola contrasenya Mai és bona idea perquè si algú sap la seva contrasenya, poden simplement accedir a totes les seves altres comptes. I després icones fan res per garantir la seguretat. Generalment Hem de buscar HTTPS en lloc de HTTP i la URL. I alguns altres tipus de atacs que hem esmentat, que David ha esmentat en donar una conferència, els atacs d'injecció SQL. Ja vam veure que si no-- la Funció de consulta CS50 s'assegura que SQL no poden produir atacs d'injecció. Però si no estàvem usant CS50, Ho van dir ells "en consulta" caldria assegurar-se que el l'entrada de l'usuari no és en realitat alguns SQL consulta que farà que tots els les nostres taules que es retirin o una cosa dolenta ocórrer amb la nostra base de dades. Segrest de sessió és un altre tipus d'atac això succeeix quan algun mal persona utilitza la sessió d'alguna víctima ID per accedir a la informació d'accés. Així, un exemple molt trivial que és com si tenim un ordinador públic, llavors la mala persona obre una sessió i després han galetes que es guarden. I les galetes no canvien per a la sessió. Després tenim la víctima entrar i després iniciar sessió al lloc web. Les galetes no canvien durant un cert període de sessions. I llavors la víctima es registra en la pàgina web i després se'n va. I llavors la persona que es remunta a continuació, pot seguir utilitzant el seu ID de sessió per accedir a la seva informació. Així que això és un exemple de el que podria succeir. I llavors jo no em preocuparia massa sobre el codi ni res específic així que podria causar això, però tenir algun tipus d'idea del que les variables involucrades en aquesta són. I llavors la manipulació de capçalera dades és un altre tipus d'atac que té David ha parlat. I que només es refereix a el que pot passar quan la resposta, l'HTTP resposta dins de la nostra capçalera no està desinfectat adequadament. I qualsevol dels fields-- per exemple, si algú sobreescriu una de la capçalera valors que contenen res més el que han de contain-- i realitat contenir, per exemple, un 200 Acceptar codi d'estat, llavors podrien fer maliciós coses quan no se suposa que. Però jo no em preocuparia massa molt sobre el codi específic que poden implicar que això, només una espècie d'entesa coses d'alt nivell així. Crec que això és tot que hem de cobrir. Increïble. Algú té alguna pregunta sobre qualsevol de les coses que cobrim? Sí. AUDIÈNCIA: Així que una mena de pregunta més logístic. El contingut es va centrar principalment en les coses després de concurs 1? MARIA ZLATKOVA: Així pregunta és, és el contingut centrat principalment en les coses segons qüestionari 1? Per tant el focus està en després de qüestionari 1, amb l'excepció que hem de centrar-nos en les coses en pset5 i moltes de les estructures de dades que cobrim. I no podem dir que estem pot ignorar res abans que pel fet que es basa en ella també. Així que concentra't en això, a més de material de pset5 com incloure enllaços llistes, piles, cues, i tot que Hannah es va acostar. HANNAH Blumberg: Correcte. Sí, ens vam anar totes les coses C al principi, molt ràpidament. Però assegureu-vos de revisar això. Tornar enrere i veure el qüestionari 0 opinió. Un parell notes més logístics, només mentre nosaltres tenim la seva atenció. Tindrem hores d'oficina tant dilluns i dimarts a la nit. Ells van a estar a MD 119. Això és tot en el lloc web, de manera que si vostè no escolta, no es preocupi. MARIA ZLATKOVA 8:30-11:00. HANNAH Blumberg: Sí, de 8:30 a 11:00. Estarem allà. Estarem allà per respondre preguntes. És bastant fred i divertit. Vostès poden fer qualsevol pregunta que té en concurs 1. I prova 1 està en Dimecres, així que bona sort. Si vostè té alguna pregunta, potser venir a parlar amb nosaltres aquí un a un. Fresc. Moltes gràcies. MARIA ZLATKOVA: Moltes gràcies, nois. AUDIÈNCIA: Yay. [Aplaudiments]