[MUZIKO Ludante] DAVID Malan: Jen CS50, kaj tiu estas la komenco de semajno ok. Kaj ni estas tiel ekscitita bonvenigi reen, granda surprizo, CS50 propra Rajmondo Galvan, multpromesa altranga kiu estis elspezanta la pasintaj pluraj monatoj ekde julio en LA, en Hollywood, laŭvorte laboras pri novega TV spektaklo nomita Kolonio, la kreinto de kiu estas fakte Harvard aluno mem. Kaj tial ni estas tre ekscitita vidi ĉi debuto sur la usona reto ĉi januaro. Do resti agordita por tiu, kaj por pli Ramon por la semajnoj veni. Sciu do nun, ke la fino estas proksima. Kaj kion tio signifas estas ke tie ne ĉiuj ke multe restas de CS50, malĝoja diri. Ni havas nur tri problemo aroj left-- ekzistas problemo aro six-- kiu estas en viaj manoj nun aŭ baldaŭ estos, pro postaj ĉi week-- celas transponti niaj mondoj de la komandlinio, kie Ni pasigis la plimulton de nia tempo uzante C, kaj la mondo de ttt programado. Nu, vi vidos multajn ideojn pruntita de la komandlinio laboron, sed ankaŭ multe da novaj kaj interesaj ideoj ke ankaŭ tuj estos germane por moveblaj aplikoj kaj por teknologio, pli ĝenerale, kun kiu vi uloj estas ĉiuj familiara nuntempe sur tekkomputiloj kaj poŝtelefonoj kaj similaj. Do vi devos apliki ne retpaĝo aŭ retejo per, sed reala retservilo. Vi skribos la reston de retservilo skribita en C, kies celo en la vivo estas ricevi HTTP petojn, tiuj virtuala kovertoj ni interparolas turninte kaj reale respondi ĉu kun iu statika content-- kiel skalara HTML dosiero, aŭ punkto JPEG aŭ ajna alia nombro de dosieroj, aŭ eĉ PHP dosieron per via retejo servilo tuj interpretas ke PHP kodo kaj kraĉis la rezultoj. Nun, ni havigis vin kun tre iom de kadro por it-- ja la distribuo kodo por tiu problemo starigis ses estas super 1,000 liniojn longa, Multaj de kiuj estas komentoj, esti fair-- sed tiu estas vere signifis esti ŝanco akiri viajn manojn malpurajn plonĝado en sufiĉe granda projekto ke ni tre specife skulptitaj el pecoj de vi, tiel ke vere kiam vi eliras CS50 kaj eniri la realan mondon de programado kaj volas dabble en ajna nombro de projektoj, vi havos multe pli granda komforto elŝutanta iuj fonto kodo, iu malfermita fonto projekti sur la araneaĵo, kaj subnaĝado en kaj farante ŝanĝoj kiujn vi decidos. Problemo starigis sep tuj estos ĉirkaŭ farante vian propran ttt-bazita apliko kiu prenas dinamika enigo kaj produktas dinamikan eligo en la formo de etrade.com-simila retejo. Kaj problemo starigis ok enfokusigos sur ankoraŭ alia lingvo nomata Ĝavoskripto. Dume, la fina projekto estas sur la horizonto. La tn antaŭ-propono ŝuldiĝas semajno ekde hodiaŭ. Antaŭ- proposal-- po la specifo, kiu estas sur CS50 website-- Estas bela hazardaj ŝanco por vi sendi belan konciza retpoŝto al via instruado ulo nur sciigi lin aŭ ŝi pri kio vi pensas, al uzi li aŭ ŝi kiel skatolo de resono. Kaj havas prudenton check-- ĉu vi pensas pri mordi ekstere tro multe aŭ eble tro eta, aŭ eble vi ne havas ideon ajn kaj volas engaĝiĝi en konversacio. Poste estas propono kaj statuso raporto, la tn CS50 hackathon tie en Kembriĝo por Harvard kaj Yale studentoj egale. La fina projekto efektivigo estas poste pro. Kaj tiam CS50 Foiro ĉi tie, en Cambridge, egale en New Haven. Do la propono, rigardu la retejo por tiuj detaloj. Sed pli excitingly ankaŭ estas ŝanco akiri viajn manojn malpuraj, kaj pensojn malferma al tute faskon da temoj kaj iloj kaj teknikojn kiuj estas helpaj al la kurso kerno Syllabus, sed tamen rilata. Kaj ankaŭ mirinda tretante ŝtonoj por faranta vere malvarmeta fina projektoj iri bone preter materialon ni kovrita formale en problemo aroj aŭ en prelego. Do iri al CS50 la retejon por la tutan nomliston de seminarioj. Se vi ne registriĝu tamen, tio estas bone. Iru antaŭen kaj subskribi ankoraŭ kaj ni sekvaĵo kun viva alfluanta ligilo, la tago kaj tempo estas sur la retejo. Kaj ĉiu estos registrita kaj metita rete se vi ne povas fari la aparta tagoj kaj tempoj. Kiel al kio kuŝas antaŭen thereafter-- bone, kompreneble, estas la CS50 hackathon. Tiu foto, revokon, de Semajno nulo prenita proksimume 4 AM unu vesperon en jaroj pasinteco. La CS50 Foiro, kiu denove okazos en ambaŭ urboj. Kaj tiam, nur por planti la semon, eĉ se ni ankoraŭ havas monaton plie restigis semestro, se vi ŝatus aliĝi CS50 propra instruado personaro, kaj vi volas komenci pensante pri fariĝanta CA, aŭ instruado ulo, sciu ke Ni komencos parolante pli sur tiu poste tiu semestro. Sed bildigis ĉi tie estas plejparto de la ĉijara teamo. Kaj do, PHP-- kaj mi estis tiel malĝoja lasta semajno ke [? Allyse?] Afable iris al la peno akiri ni tiuj mirindaj teatrorekvizitoj ke mi ne fini uzante, tiel ĝi vere nur rigardis ia stulta ke ni havis ŝovelilo sidis tie ĉiuj tago lasta merkredo, kaj iom kulero. Sed tiu estis mia metafora maniero de provi pentri la bildo de kial ni transitioning de C al lingvo kiel PHP. Kaj la sama povus esti dirita de iu numeron de languages-- Java, Python, Ruby aŭ kuketojn others-- sed dum en C, ekzemple, skribi programon en C eble tipe estos kiel prenante kulero ŝatas tion kaj fosi truon en la tero, sur la sablo aŭ la malpuraĵo. PHP permesas preni multe grandaj mordoj el la problemo, skribi multe malpli kodo uzante malpli grandaj ilo, ĉar tie estas tiom multe pli funcionalidad kunpecigis en. Nun, se ni vere draman, ni havus ion por ŝoveli tie, sed tiel estu. Dume, la aliaj metaforo ni elpensis estas, kompreneble, vi povus uzi ion kiel angla ŝlosilo al martelo en iu kiel najlon. Sed kompreneble, la rajton ilo por uzo tuj esti ne tiom la lingvo nomita C-- kaj nun mi ĵus ĝenita [? Sanders,?] Probable, ni riparos ke later-- tiel la dekstra ilo por uzi ofte ne tuj estos tiu plej malalta nivelo ilo. Kaj efektive, C ne estas lingvo ke plejparto de vi cxiam tuj uzos, aŭ devus nepre uzi denove. Kaj fakte, iom secret-- la nura tempo Mi uzas C mem estas preskaux inter Septembro kaj decembro de ĉiu falo semestro. Kaj tio estas ĉar ni uzi ĝin kiel ŝanco instrui la bazfaktojn de programado, kaj kun ĝi komputilo scienco bazfaktoj, datumoj strukturoj, algoritmoj kaj la like-- sed tre rapide faros vin vidu nun ke la sintakso kaj la ideoj subesta C Estas tiel mirinde transdonebla al pli moderna alta nivelo lingvoj, kiel PHP kaj Python kaj Perl kaj Java kaj Objective-C-- fakte, ne tiom Objective-C-- sed Swift, tiuj pli novaj lingvoj kiujn multaj el vi tiam dabble kun vi finan projekton. Do sen pli enkonduko, ni reale uzi PHP solvi iuj problemoj. Memoru ke frue sur, lasta semajnon, ni nur uzata CS50 IDE, ni skribis eta programo ke nur diris, "Saluton mondo." Kaj tiam mi savis ŝin en dosiero nomata hello.php. Kaj tiam mi kuris ĉi komando. Kaj kial? En la angla, kio okazas ĉi tie? Kion mi faris kiam Mi kuris ĉi komando? Yeah? Publiko: Tie estas iu funkcio PHP kiu legas kio in-- komprenas tion. DAVID Malan: Bone, ekzistas iu funkcio PHP-- kaj lasu min esti pli specifaj, tie estas programo nomata PHP, a.k.a. Interpretisto, kiu komprenas la enhavo de hello.php, kaj interpretas supro al fundo, maldekstre dekstren, kaj faras kion tiuj komandoj diri. La komandoj en hello.php kompreneble estas nur fonto code-- funkcioj kaj variabloj kaj maŝojn kaj similaj, ke ni mem komencis skribi en PHP. Sed kontraste C, kiu estas kompilita lingvo, PHP vi simple skribi ĝin kaj ruli ĝin. Vi skip ke peranto paŝo de konvertado al nuloj kaj, kaj tiam kurante ĝin. Kaj do kio estas upside de tio? Kial ni transsaltante la paŝo? Kial pli modernaj lingvoj emas tion preteratentos? Kio estis la profito? Aŭ simple intuicie? Eĉ se ni ne skribita multe PHP antaŭ, kio estas utila pri ne kompili vian kodon vi pensas? Neniu? Ne fari? Skrapi via kapo? Yeah. Publiko: Pli dinamika. DAVID Malan: Pli dinamika? Kion vi volas diri? Spektantaro: [inaudible] DAVID Malan: Bone, bone, do depende de la enigo, vi ne devas kompili ĝin ĉiufoje. Kaj vere kiel simpla kiel that-- kio estas la punkto de daŭrigi kompili vian kodon? Tiu estas nur paŝo tio making-- ĉi estas postulanta, por la pasinteco plurajn semajnoj, dufoje kiel multaj paŝoj kiel nur kurante via programo. Jam pasis utilaj en vidi ke vi vidi iujn erarmesaĝojn kaj tiel plu, sed ĝi estas ankoraŭ nur ĝena paŝo. Kaj tiel programistoj realigitaj super tempo, kial ne ni komenci skribi lingvoj kiuj ne bezonas ke sufiĉe mekanika paŝo, tiel ke povas simple skribi via kodo kaj ruli ĝin. Sed kio estis la prezo ke ni vidis nin pagitaj lasta semajno, kun unu speciala ekzemplo? Jes? Rapido. Do [? kio estas?] interpretistoj iom malrapida, en tiu nuloj kaj estas agrabla kaj rapida por komputila kompreni, ĉar la Intel CPU, aŭ kio ajn ĝi estas, nur komprenas kio okazas sur kun tiuj ŝablonoj de bitoj. Dum interpretisto Estas programo kiu vere devas legi la Ascii fonto kodo ke vi skribis, kaj konverti ĝin, tiel diri, aŭ elkompreni kiel ĝi konvertas finfine al nuloj kaj aĵoj. Do ĝi nur prenas iom iom de agado sukceso. Do estas iom da komerco-off. Nun se ni faros ĉi tie, lasu min antaŭeniri kaj faru ekzemplon jene. Se mi iros tien, nova dosiero, mi tuj savi ĉi denove estas hello.php. Kaj nun mi tuj iros antaŭen kaj diri: "print saluton mondo" - kaj memoras ke mi povas uzi print, mi ne faras devas uzi pres-F. Kaj nun cxi tie, se mi faras PHP de hello.php, huh-- mi ne ŝajnas esti interpretita ĝin. Kion mi faras malbone? Publiko: La angled braceletoj. DAVID Malan: Yeah, vi bezonas ke angulo krampo ĝis supro. Do ĝi estas speco de ĝena, sed vi alkutimiĝos rapide. Se mi devus skribi PHP kodo, mi ĝenerale bezonas diri la programon, aŭ rakonti interpretisto, hej PHP, tie venas iuj PHP kodon. Kaj tiam por bonan mezuron, mi volus fermu ne kun tiu, sed prefere kun nur demandosigno angulo krampo, tiel ke nun ĉi tie, se mi kuras ĉi denove nun Mi alvenas la dezirata rezulto. Nun ni faru iometan optimumigo, nur tiel, ke vi vidis lin antaŭe. Tiu estas speco de ĝenaj ke mi devas kuri PHP spaco hello.php, ĉar en la pasinteco mi povis nur skribi dot oblikvo programo nomo, kiu estas speco de agrabla. Ĝi estas speco de bona sperto. Do rezultas vi povas fari tion en PHP kun la following-- mi povas uzi ĉi sufiĉe kamufla sorĉdiron ĉe la supro tie, kiu kutime nomas shebang, per ĉi estas akra simbolo, tiel diri, tiu estas bang aŭ ekkrion punkto. Kaj tiu nun estas la pado al programo sur tipa Linuksa sistemo ke nomiĝas medio, aŭ env. Kaj ĉi line-- longa rakonto short-- linio oni ĵus diras, hey komputilo, trovi la PHP interpretisto por mi en la medio, trovi ĝin en via memoro, por tiel diri. Kaj kio estas bela nun, estas ke se mi iros tien, Mi povas fari dot oblikvo saluton dot php, or-- hmm. Permeso malkonfesis. Nu, vi vidos eĉ pli de tiu kun problemo starigis sep, se vi ne jam, kun permesoj. Ĝi rezultas ke mi bezonas ekzekuti ĉi komandon nomata [? chamod?] por ŝanĝo mode-- alpago x hello.php. Mi bezonas [inaudible] ĉi tiu aldona paŝo kiu estas diranta mian komputilon, fari hello.php plenumebla. Kaj nun rigardi kion happens-- skalara oblikvo hello.php, ĝi simple kuras. Mi ne bezonas specifi la interpretisto anymore. Kaj mi povas fari ĝin eĉ pli bela, ankoraŭ, se mi renomi tion. Se mi movi hello.php simple Hello-- tiom rimarkos en la supra maldekstra, la programo nomiĝas ja nun ĵus Saluton. Nun mi povas fari simili C programon, kvankam ĝi estas skribita en PHP-- aŭ sincere ajna nombro de aliaj lingvoj. Do marĝena plibonigo, neniu funkcia diferenco. Sed estas nur iom scivolemo nun, por ke vi povas skribi programojn en ajna lingvo, kaj la uzanto ne devas scii aŭ zorgi kio tiuj estas. Nu, ni rigardu pli konvinka ekzemplo nun ke Mi vipis anticipe. Kaj tio nomiĝas quote.php. Kaj estas havebla enreta. Kaj rimarki ke estas sufiĉe short-- sed estas komandlinia programo kiu estas tuj rigardos supren stock prezoj por mi, kiu estas efektive iranta esti germane al problemo starigis sep. Do ni vidu kion mi faras. Ĉe la plejsupro Mi havas la malferma krampo demandosigno PHP. Tiam mi havas tiun linion, per kiu mi estas postulanta dosiero nomata functions.php-- ni tuj vidos pli sur ĉi en iom, sed tiu estas kiel C la versio de akraj inkluzivas, kie vi volas iri inkluzivi alian dosieron. PHP nomas gxin postulas, kvankam ĝi ankaŭ havas inkluzivas funkcion. Kaj ĝi rezultas ke function.php estas nur io mi skribis antaŭ klaso. Mi metis ĝin en la sama dosierujo, ĉar Mi volis faktora iun kodon ke ni povus deziri uzi aliloke. Dume, vi povas verŝajne konkludi kio okazas tie. Tiu estas iom malsama de C-- sed Kion mi celas diri per certigi taŭgan uzadon? Traduki ĉi pli teknike. Sub kiaj cirkonstancoj mi forlasinte la programo, aŭ forlaso? Yeah? Spektantaro: Kiam vi ne havas du komandlinio argumentoj. DAVID Malan: Kiam mi ne havas al komandlinio argumentoj. Kaj memoru, ke unu el tiuj argumentoj estas la programo la nomo mem. Kaj la dua tuj estos alia vorto mi entajpas post la prompto. Do ĝuste kiel C, ĉi Estas mia maniero de kontrolanta, ĉu la uzanto kunlabori kaj kuri la programon kiel mi intencis? Nun, ekzistas io iom malsamajn kun C-- unue ni havas ĉi dolaro signo, kaj kion faras dolaron subskribi signifi en PHP? Nur variablo. Tio all-- nur variablo sekvita de ajn vi volas reale nomas. Rimarku estas io mankas mia PHP programo, samkiel ĝi mankis lasta semajno, kontre C, kiu estas kiu? A tipoj, sed ankaŭ ion alian. Ne estas io function-- ĉefa funkcio. Mankas ĉefa funkcio. Vi nur komenci skribi via kodo sen devi zorgi pri sufiĉe arbitra konvencio de enoficigante iuj defaŭlte funkcio main. Do arg C estas nur vere tutmonda variablo ke la interpretisto faras disponebla al mi. Nun, tiu estas interesa. Do rigardu supren aĵoj. Dolaro signo provizo estas sur la maldekstra, jen mia variablo. Sur la dekstra flanko, ekzistas ŝajne funkcio en PHP nomis lookup ke Mi pasante mia lasta komandlinio argumento to-- ajn la afero estas. Kaj ni vidos kiel ĉi laboras en momento. Kaj poste persiste mi raportu la prezo. Mi presi el unu parton de tia kaj tia. Kaj memoru, tiu estas la maniero en PHP-- manieron en PHP-- kie vi ne devas fari la dolaro signo S anymore. Vi povas simple uzi buklaj krampoj kaj plug en iu variablo. Vi ne devas maltrankviligi uzante printf en la sama maniero. Kaj kiel flanken, kiam vi metis variablon ene de citiloj kiel tiu, vi uzas imago tekniko nomita variablo interpolado. Ĝi nur signifas plug la variablo en ĉi tie. Kaj kiel flanken, iu el vi, kiuj venis el aliaj programado fonoj, vi ne povas uzi solan citaĵoj ĉirkaŭ kordoj fari tion. Vi devas uzi citiloj por variablo interpolado labori. Alikaze vi laŭvorte vidu tiuj buklaj krampoj. Do fine, ni iru antaŭen kaj kuri ĉi. Lasu min fari mian terminalo iom pli granda. Lasu min kaj kuras interne de mia citaĵo dosierujo. [? CDsource?] [? AM?] [? citaĵo?] PHP citaĵo skalara PHP, kaj mi tuj serĉi ion kiel GOOG, kiu estas lia Ticker simbolo, kaj unu parto de ĝia nova nomo, Alfabeto Inc, kostis $ 717, kiel de hodiaŭ. Bone, se ni volas kuras ĉi denove, iu havas alian stoko Ticker ili volas rigardi supren? Microsoft miaopinie estas ĉi tiu, MSFT-- $ 53. Mi pensas Yahoo estas eble. Kaj Facebook estas tio. Do kio estas tiu programo faras? La magio ŝajnas esti enigita en tiu lookup funkcio. Do ni prenu rapidan rigardon. Ĝi rezultas ke ne venas kun PHP, ĝi estas en functions.php. Kaj ni ne iros tra tiu granda detalo, sed rimarki la operativa vorto tie estas ke sur linio de ses functions.php-- Mi laŭvorte diras funkcio. Mi specifi la nomo de mia funkcio. Mi tiam specifi ajnan argumentoj, aŭ parametroj, Mi volas ke funkcio take-- neniu tipoj. Kaj tiam mi apliki ĝin. Kaj mi skuos mian manon ĉe la efektivigo, ĉar ĝi estas sufiĉe progresinta dekstra nun, sed ni vidos ĝin denove reale en semajno en problemo starigis sep. Sed mi povas purigi ĉi supre, ankaŭ. Mi ankaŭ inkludis en hodiaŭa kodo version de citaĵo, kiu ne havas skalara PHP dosiero. Ĉar kio estas supozeble ĉe la supro de la programo nomita simple citi? Ke tn shebang-- la sufiĉe kamufla sorĉdiron kiu diras trovi PHP kaj tiam kuri ĝin sur mia kodo tie. Bone, do kiu alportas nin al kie ni cxesis lasta time-- kvankam kun iuj pli progresintaj ekzemploj. Demandojn ĝis nun pri PHP aŭ kion ni faras? No-- gxuste. Yeah? Publiko: Interne la HTML dosierojn, fari you-- [? Ĉu vi ?] [? simple nomas ĝin?] A [inaudible] PHP dosieron? DAVID Malan: Bona demando. En reta kunteksto, kiu ni estas laŭvorte pri al transiro al, vi ne uzas la tn shebang ĉe la supro, ĉar la ttt server-- ofte programo nomata Apache aŭ Microsoft IIS, Internet Information Server, aŭ ajna nombro da aliaj retservilo softvaron, scias ke kiam vidas skalara PHP -dosiero, ke devus ekzekuti la interpretiston sur ĝi. Ne rigardu tiu unua linio. Do tiu unua linio lertaĵo Estas nur kiam vi estas skribanta komandlinio programs-- kiun ni ne faros súper ofte, sed estas nia maniero de transpontanta nia C ekzemplojn por nun nia PHP. Do ni ja transponti tiun mondon de la komandlinio mondo al la retejo farante la sekva. Lasu min antaŭeniri kaj tiros super tie por nur momento. Do se ni havas retservilo, aŭ prefere se ni havas mian tekkomputilon ĉi tie, kiun mi desegni tiel. Kaj ĉi tie ni havas la interreto en iu formo. Kaj tiam super tie, ni havi servilan en building-- jen kiel la interreto works-- kaj tien Estas servilo kun iuj lumoj eble. Kio efektive okazas inter tiuj du rilatoj? Do en tiu konstruaĵo estas retservilo. Tio estas nur komputilo ke estas kurante iuj mastrumaj system-- eble la libera programaro nomita Apache, kion CS50 IDE kuras. Do vi efektive povas pensi pri tiu konstruaĵo kiel estante la konstruaĵo en kiu CSt0 IDE estas stokitaj. Tie estas kie vi ĉiuj havas kontoj, kie vi ĉiuj havas vian propran ttt-servilo kurante, vi ĉiuj havas vian propran unikan URLoj, kiel ni komencis diskuti, kaj vi vidos pli en P. starigis ses. Jen mia tekkomputilo ie alia sur la interreto. Kaj do kiam mi vizitas URL kiu apartenas al mi, ke interreto trafiko tuj super al la servilo, la servilo ricevante HTTP request-- kiel akiri index.html kaj ĝi estas respondi al tiu retpaĝo. Do jen la ĝenerala paradigmo. Dum ĉio supren ĝis nun hodiaŭ, ĉiu okazis nur en la limoj de tiu konstruaĵo. Mi uzis mian tekkomputilon, sed Mi estis konektita al CS50 IDE, tiel ĉiuj tiuj programoj mi kuris Estis ene de tiu servilo, mem. Sed nun, ni komencu reuzon PHP skribi iuj faktaj programoj kiuj estas servita per retservilo. Kaj fari tion, mi tuj iros en tuta aro da ekzemploj ke enkonduki ĉi ideo tie. Do jen estas ia fantazio maniero priskribantaj programado paradigmo. Kaj fakte, kiel vi eliras CS50 aŭ labori sur fina projektoj, aŭ preni iun sekvi sur klaso, vi komencos vidi ke la world-- Precipe esti kreskinta kun lingvoj kiel C ke estas ekstraj malaltaj level-- rimarkas ke estas pli bone skribmanieroj programaro. Estas certaj ŝablonoj vi povas sekvi, iuj manieroj de organizi viajn dosierojn kaj manierojn de enoficigante via funkcioj, por ke longan rakonton, la mondon venis supren kun tuta amaso de akronimoj kaj nomoj manierojn de programado. Tiuj estas nur teknikoj vi povus uzi. Kaj unu el ili estas nomita MVC, por Modelo Montri Controller. Kaj tiu estas nur, ĉar nun, troe komplikita maniero diri kiom vi povus meti eksteren PHP-bazita retejo, en nia kazo. Kiel vi organizi viajn dosierojn, Kiel vi organizi vian logikon, en maniero kiu faciligante skribi pli komplikaj retejoj? Kaj efektive, Ni rapide atingi tien kun p-aro sep. Do en la mondo de MVC, vi tuj vidi ke nia kodo povas ĝenerale esti karakterizita kiel ĉu modelo kodon, aŭ controlador kodo, aŭ vido kodo. Kaj mi tuj oversimplify ĝin kiel follows-- la controlador estas la cerbon de via programo, ĝi estas kie ĉio el la interesa logiko okazas. Do ĉio ni estis skribi tiel longe en la klaso, Estas ia kiel regilo code-- ĝi kontrolado via programo, viaj bukloj, via kondiĉoj, via funkcioj kaj variabloj kaj cxio. Vidoj nun tuj estos iom pli evidenta en la mondo de la TTT. Vido estas la estetiko de via retejo. Ĝi estas kion la uzanto sees-- la bildoj, la HTML tabloj, la HTML etikedoj, kaj ĉiuj de tiu, ĉiuj la lanugaj estetika aĵoj kiuj ne estas tiel malfacila por skribi, sed estas ĝuste kion vi generante, estas la tn vido, la estetiko. Kaj modelo, finfine, tuj esti datumbazo stuff-- kiu ni komencos submarinismo en ĉiujn la pli tiu merkredo. Do regilo estas la logiko, vidpunkto estas la estetika stuff, kaj modelo tuj estos kie ni stoki niaj faktaj datumoj. Do ni rigardu tiun pli konkrete kun la jena ekzemplo. Mi tuj iros en mian dosierujon tie de hodiaŭa fonto code-- ĉiuj kiuj disponeblas rete. Kaj mi tuj iras en versio nulo. Kaj tie is-- ni nomas ĝin la versio nulo de CS50 la retejo. Tie ne estas multe ĉi tie ĉe ĉiuj. Ĝi estas tre simpla retpaĝo tio verŝajne uzante kio HTML tags-- nur diveni el pasinteco ekzemplojn? Kio estas tio? H1-- probable por tio granda aŭdaca titolo, ke logo supren supro, CS50. Kaj kio alia estas ĉe ludo? Yeah? Publiko: neordigitan liston. DAVID Malan: Senordigita list-- tiel la UL etikedo kaj eble kelkaj LI etikedoj. Kaj se vi ne memoras tiujn, ĝi honeste ne gravas. Tiuj estas lanugaj ian efektivigo detaloj de HTML ke vi rapide rigardi supren kaj vi estas denove sur via vojo. Ni enfokusigi pli en la programado ideoj, kiuj estas la juicier pecoj. Do ni nur prenu rapidan rigardi la HTML-- kaj ja se mi malfermas la vidi fontkodon tie, Yup, Tio estas ĝuste kio okazas tie. Tie estas UL etikedo. Nestitaj ene de tio estas LI etikedoj. Kaj tiam mi pruntis la URL de la fakta Syllabus tie. Kaj poste en la lectures.php estas ŝajne alia dinamike generita paĝon ke tuj havos, ni Konsideru ah, la unuaj du semajnoj de prelego. Do semajno nulo kaj unu semajno, ni rigardas this-- se mi vidi paĝon fonto, ankaŭ super simpla. Tiuj gvidas al du paĝoj nomata week0.php kaj week1.php. Do konsideru nun kio okazas. Kiam mi klakas sur week0.php, mia tekkomputilo faras peton pri week0.php. La retservilo, a.k.a., CS50 IDE, ricevas ke virtuala koverton. Ĝi estas vidanta mesaĝon kiel, akiri week0.php. Ĝi estas tiam interpreti la dosieron, supro al fundo, maldekstre right-- la dosiero nomata week0.php-- kaj kracxi el la rezultoj. Do ene de la dosiero, week0.php, devas esti la regilo logiko kiu estas produktanta ĉi HTML, kaj ni baldaŭ vidos tion. Sed nuntempe, mi povas alklaki semajno nulo, kaj nun ni havas merkredo kaj vendredo, kaj nun ni havas la diapozitivojn malrapide el semajno nulo. Kaj vi eble memoras tiu de vojo reen kiam. Do jen ĉio ĉi paĝaro estas faranta. Do ni pripensu kiel ĝi estas faranta tion. Mi tuj iros reen en la fontkodon tie, en CS50 IDE, kaj mi tuj malfermos index.php. Ĉe la supro de ĉi tiu dosiero estas aro da komentoj. Kaj tiam en la mezo de ĉi tiu dosiero, ĝi Rezultas, estas neniu PHP kodo ajn. Ĉar se vi ne havas neniun de la malferma krampo demandosigno PHP etikedoj, vi libere povas nur meti HTML. Pro kio la PHP interpretisto estas supozita fari, estas kiam legas ĉi file-- supre sube, maldekstre right-- ĝi nur interpretas kodon vidas inter tiuj angulajn krampojn demandosigno. Kaj io ajn alia ke ĝi ne rekoni kiel PHP, ĝi simple kraĉas eksteren. Kaj HTML estas inter la vazaro ĝi ĵus kraĉis. Do tiu dosiero povis havi vokitaj index.html, sed mi enoficigante ĉio skalara PHP kiel saltotabulo. Lectures.php-- simile underwhelming, estas nur iuj HTML. Week0.php, simile nur iuj HTML. Sed nun ni metis sur la proverba inĝenierio ĉapelon, kaj pripensi kiel ni povas plibonigi ĉi. Ĝi ne estas malfacile fari tion, sed mi specon de transdonitaj en kopio kaj pasto. Kaj fakte, se mi faros semajno du, vin scias kion mi verŝajne faros? Mi tuj iros al week1.php, mi estas tuj reliefigi ĉion. Mi tuj kopii ĝin, algluu ĝin en novan dosieron nomitan week2.php, tweak kelkaj adresoj, kaj estos sur mia vojo. Do bazita sur kio ni havas vidita en C jam, tiu ne sentas bone, espereble. Kopio, Almeti malofte la dekstra solvo. Do kion ni povas komenci fari por plibonigi tion? Kie estas la ŝancoj por bona dezajno? De la tempo mi akiras al semajno ok, ĝi tuj esti vere ĝena se mi volas ŝanĝi la tiparon de iu el miaj paĝoj, aŭ se mi volas ŝanĝi la strukturon de la aranĝo. Do kie estas la ŝanco por bona dezajno? Nu, ni pripensu kio estas dividita trans ĉiuj de ĉi tiuj dosieroj. Jen semajno unu, jen semajno nulo, jen lectures.php, jen index.php-- kio estas la sama kaj kio estas malsama, malglate parolante, en ĉiu el tiuj dosieroj? Yeah? Spektantaro: [inaudible] DAVID Malan: Bone, bone. Do tie estas mastro, certe, per ĉiu tempo mi elektas prelego mi, Mi devus esti generante tre simila paĝo. Do eble mi povas utiligi la fakto ke vere, ni intence numere indeksita nia lectures-- se mi povas meti eĉ pli vortojn en via respondo. Kaj kio estas la sola afero, vere, ke sxangxas inter semajno one-- kaj lasu min rulumi malsupren tiel ĝi estas malglate en la sama place-- do tie estas semajno nulo, malglate ĉe la supro. Jen unu semajno, semajno nulo, semajno unu, semajno nulo. OK, laŭvorte se vi scias neniu programo whatsoever, tiu estas nun nur kiel ŝablona rekono ludo. Do kio estas malsama? Yeah? Spektantaro: [inaudible] DAVID Malan: Bone, do la titolo ŝanĝiĝas, iam tiel iomete. Nulo tuj, kompreneble, al unu. Sama afero okazas en la H1 etikedo. Kaj ni ne tute vidas kiel facile, ĉar la URLoj estas iom longa. Sed tiuj URLoj ŝanĝas iomete. Sed kio ne ŝanĝas estas, kuraĝus mi diri, la plejparto de la enhavo de la page-- HTML tag estas la sama, la kapo estas la sama, la titolo estas preskaŭ la sama, la korpo estas la sama, kaj preskaŭ ĉio alia estas la samaj krom tiuj malgrandaj retuŝojn. Do kiel ni povas iri sur faktoranta iuj de ĉi ekstere? Nu mi proponas precize ke en la sekva versio. Do jen en versio unu, mi havas la ĝustajn samajn dosierojn, plus kelkaj aliaj. Jen index.php-- kaj eĉ se vi neniam vidis PHP antaŭ, kion mi verŝajne faras solvi tiun problem-- bazita sur kion vi vidas tie? Jes, estas ke malpeza devontigo? Neniu? Jes, daŭrigu. Spektantaro: [inaudible] DAVID Malan: Yep. Spektantaro: [inaudible] DAVID Malan: Mi bezonas vin por paroli iomete pli laŭte. Spektantaro: [inaudible] DAVID Malan: Bone, bone. Kaj mi think-- estis Malfacile aŭdi you-- sed mi pensi kion vi fariĝas ĉe estas ke la etikedoj kiu estis komuna ĝis supro, kaj la etikedoj kiu estis komunaj en la fundo, nun estas faktorita eksteren, aŭ forigitaj al kion dosierojn? Header.php kaj footer.php-- kaj ni tuj fari kelkajn retuŝojn al alparoli la konzernon vi nur levita pri la nombroj sxangxado, por Ekzemple, se mi aŭdis vin korekte. Sed tio ŝajnas esti la esenco de ĝi. Se ekzistis enorma kvanto de redundo ĉe la supro de la paĝo, kaj grandega kvanto de redundo ĉe la fundo, ni laŭvorte nur kolorigon kaj tranĉi tiun enhavon ekstere, metu ĝin en separata file-- samkiel la ideo de CSS, kie ni faktorita eksteren tre simila estetiko, metis ĝin en separata skalara PHP -dosiero, uzi la postulus mechanism-- kiu estas kiel C akraj include-- kiu Estas esence kiel diri iri ekpreni la enhavo de header.php, kaj kopiu kaj gluu ilin tie. Sed kion tio signifas estas ke nun en index.php, mi havas tiujn du liniojn. En lectures.php, mi ankaŭ havas tiuj du linioj. En week0.php, mi ankaŭ havas tiuj du linioj. Do nun, se mi volas ŝanĝi la titolo de ĉiu el miaj paĝoj, aŭ mi volas ŝanĝi la fundamenta strukturo, Mi povas ŝanĝi ĝin nun en nur unu loko, aŭ du places-- header kaj footer, respektive. Nun la kodo komencantan rigardi iom pli kripta, dekstra? Sed se vi pensu pri kio la paĝo estas doing-- se mi petante week0.php, samkiel sur la desegnado super here-- kiam week0.php petas, kion tio signifas? Laŭvorte, la dosiero estas petis de la retumilo. La TTT server-- a.k.a. CS50 ID-- ekprenas ĉi dosiero, week0.php, kaj legas ĝi supre sube, maldekstre dekstren. Sur linio unu, ĝi tuj renkontas malferma krampo demandosigno PHP, postulas kaplinio skalara PHP, kaj tiel kion la PHP interpretisto does-- ke estas konstruita en la ttt servilo, ĉar ni preconfigured ĝin you-- ĝi aŭtomate iras en header.php, kopias la enhavon, almetas ilin tie. Sed tiam la interpretisto renkontoj demandosigno proksime krampo, Do ĉio farita pensanta. Nun nur blinde kraĉas el linioj du tra sep, ĉar ĝi estas nur krudan HTML. Gets vicigi ok kaj agas sama magio again-- malfermante la dosieron, kaptante la enhavo, kaj postulanta ilin aŭ alglui ilin Bone aŭ tie. Sed mi nur aludis al cimon. Jen parta paŝon dorsdirekte ĉar se ni rigardas en header.php, Mi speco de tranĉi angulo. Kio trajto Mi donis supre por gajni ĉi diskutindaj bona dezajno? Yeah? Spektantaro: [inaudible] DAVID Malan: Yeah, I speco de tranĉita netriviala angulo. Vi atentigis ke kio ŝanĝas estis la titolo, la nombro en la titolo, kaj la nombro en la H1. Do mia solvo estis, okej, ni simple renomi la paĝo, kaj ne trakti tion problemo whatsoever. Do jen parta paŝi malantaŭen por certa. Sed kio estas rimarkinda tie Estas ke kion mi faris Estas alie faktorita el ĉiuj komunaj aĵoj. Kaj en footer.php, rimarki Mi faktorita el ĉiuj de tiu, kvankam malpli, komuna vazaro. Do mi bezonas iel nun povos preni alian paŝon antaŭen kaj ripari ke titolo temoj. Do ni faru tion. Lasu min iri en mia dua versio tie, kiu, denove, ĝi havas la samajn dosierojn krom unu nova aldono. Kaj ĝi estas iom pli parolema, sed ni vidu, se ni povas inciteti dise kio okazas tie. Do anstataŭ postulanta header.php kaj footer.php, Mi ŝajnas esti nur postulanta unu file-- nomita kompreneble helpers.php. Kaj lasu min kondiĉas nun, kio estas ene de helpers.php estas nur aro de funkcioj ke mi skribis, samkiel antaŭe. Sed mi nomas ŝin helpers.php. Nun ŝajne, en linio tri kaj 10, mi estas nomante du functions-- redonu header, render piedlinio. Tiuj ne venas kun PHP, mi skribis tiujn mem. Mi metis ilin en helpers.php. Nun, ni nur vidis tiun sintakson fojon, kaj tio estis la super mallonga. Sed tio estas ŝajne argumento render header, la funkcio. Kial mi scias tion? Nu ĉi tie estas proksime paren, jen malfermita paren. Kaj kompreneble, ĝuste kiel en C, io inter la krampoj Estas input-- aŭ argumento al la funkcio. Kio estas la datumtipo de tiu argumento, bazita sur kion mi reliefigis? Kion tiuj rektaj krampoj indiki, bazita sur pasinta semajno? Jes, ĝi estas tabelo specife asocieca tabelo. Kaj tiu sintakso koncedite estas iom funky, sed tiu estas nur pasanta en unu ŝlosilo valoro paro. La ŝlosilo estas, citaĵo unquote titolo, kaj la valoro estas CS50. Se ni faris tiun en C, ĝi povus anstataŭe aspektas pli kiel tiu, nur citaĵo unquote CS50-- aŭ reale estus krispa krampoj, aŭ iel simile en C, kie la ŝlosilo estas nulo, kaj la valoro estas CS50. Sed denove, en PHP, kvankam la sintakso estas, denove, iom stranga, ĝi permesas pasi en vortoj anstataŭ nombroj asocii klavoj kun valoroj. Do kion signifas ĉi ĉiuj signifas? Se mi iras en helpers.php, ni rigardu tiun funkcion. renderHeader.php, prefere renderHeader estas mia funkcio, kaj mi scias, ke pro mi vidas la funkcio ŝlosilvorto ĉi tie. Jen nova de C-- ĝi ŝajne prenas argumenton nomita data-- sed mi povus esti nomata ĉi nenion, sed mi nomis ĝin datumoj, nur esti iom clean-- kaj nur preni diveni, speciale se vi planas en iuj aliaj altan nivelon lingvo antaŭe, ion super C, koncepte. Kion faras egala malferma krampo kvadrata krampo probable signifas? Aŭ kio povus signifi? Ni ne vidis tiun en C. Yeah? Malplena tabelo. Specife, ĉi tio signifas ke se la uzanto ne nomu renderHeader kun argumento, mi ankoraŭ iranta havi argumenton nomita datumoj, sed ĝia defaŭlta valoro estas tuj estos malplena aro. Do estas nur belan oportuneco. Mi ne devas krias al la uzanto, aŭ diri vi uzis mian funkcion erara. Mi povas nur doni al la uzanto aprioran valoro, se mi ne aparte gravas. Nun ĉi tiu funkcio, Mi estas tuj skuos miajn manojn ĉe. Sed tiu ekstrakto funkcio permesas nin pasi ĉi tiujn variablojn en datumoj en header.php en jena vojo. Kaj tiu estas la lasta peco, Mi opinias, de funky sintakso. Jen mia nova versio de header.php-- ĝi kutimis diri, laŭvorte, malferma krampo titolo CS50, kaj ke estis ĝi. Kaj same por la H1. Nun ŝajne diras io bela funky. Kaj lasu min simpligi ĉi dummomente jene. Jen kion mi havas ŝanĝis mian titolon por esti. Tamen, ĝi iĝas iom malbela konstante malferma krampoj kun PHP, kaj tiam uzi la presita funkcio. Ĝi rezultas ke PHP havas stenografio skribmaniero por tio, kio estas nur egala signo, kiu estas teknike funkcio nomita eĥon anstataŭ print, sed ĝi estas la sama afero, efektive. Ke nur aspektas bone. Estas nur sintaksa sukero, se vi volas, kiu faras mian kodon aspektos iom pli bona. Sed rezultas, kaj ni vidos ĉi denove antaŭ longe, ni devas voki tiun agrene longa funkcio nomita HTML specialaj signoj en PHP, ĉar ĝi rezultas Estas certaj enigaĵoj ke la uzanto povu doni nin, aŭ ke uzantoj povus doni al ni, kiuj tuj rompos nian retejon. Sed ni vidos, ke sekva semajno kun JavaScript. Sed nuntempe, nur scias, ke dosiero, headers.php, simple prenas la titolon kiu Mi pasis en, ĝi faras ke ĝi estas sekura por esti injektita en retejo paĝo, kaj ĝi kraĉas ĝin kiel mian titolon kaj ĉar mia H1. Do, se mi iros al tiu versio nun, rimarkos ke lekcioj havas sian titolon reen, semajno nulo havas sian titolon reen, kaj efektive, la HTML Mi produktanta estas identa al kio mia unua versio was-- krom mia spaceto, ĉar mi komencis formatado mia kodo iom malsame. Sed mi generis ĉiu la kodo interesas min. Do lasu min paŭzo por nur momento kaj vidi se estas neniu demandoj aŭ konfuzon mi kreis. Bone, do ni tordi iom malfacila tie vidi se tie estas ŝanco por plibonigo. Helpers.php ankaŭ havis tiun funkcio, nomita renderFooter. Kaj kio estas notinda pri renderHeader kaj renderFooter? Kaj cetere, por hodiaŭa celoj, scias ke la ekstrakto funkcio estas nur Mia maniero de forpaso argumentoj en header.php kaj footer.php. Pardonon? Spektantaro: [inaudible] DAVID Malan: Yeah, mi nur ŝanĝis la postulas linion. Do laŭvorte, mi faris la peko de kopii kaj bati, tamen denove. Ĝi estas ne grandega nombro de linioj, sed venu on-- se mi kopii kaj alglui ĉio nur ŝanĝi unu malgranda vorto, kaj la unu malgranda vorto ke Alan punktoj Out estas piedlinio tie, kontre header tie. Alie, ĉio estas identa, krom, Kompreneble, la funkcio de nomoj. Do kion ni povis fari pli bonan? Nu lasu min malfermi ĉi versio tie, per kiu en helpers.php, kial ne mi simple akiri iom pli lerta pri tio? Skribi iomete pli komplika kodo, sed nomas ĝin repagi? Do kion mi fundamente ŝanĝiĝis? Ĝi prenas argumenton now-- du argumentoj, datumojn ankoraŭ. Kaj tiam kio estas la unua nomo probable uzata por, bazita sur kion vi legas tie? Eĉ se kelkaj el la sintakso estas ankoraŭ nova. Kio estas dolaro signo ŝablono? Pardonon? Publiko: kaplinio aŭ piedlinio. DAVID Malan: kaplinio aŭ piedlinio. Do ŝajne, mi decidis ke se lin sola kiu sxangxas estas kion mi deziras ŝablono al print-- kaj per ŝablono Mi volas diri estas blueprint por kodo kiun mi volas elirigi, sed mi volas ŝtopi en iuj values-- do se ĝi estas nur kaplinio aŭ piedlinio, kial ne mi parameterize tio kaj vokas la argumento dolaro signo ŝablono? Kaj tiam ĉi funky sintakso permesas min krei padon en variablo tie. Do dolaro signo vojo estas variablo. Kion faras ĉi sintakso do, se vi konas? Yeah? Spektantaro: [inaudible] DAVID Malan: Ĝuste. Se ŝablono estas, citaĵo unquote, kaplinio, aŭ se ŝablono estas, citaĵo unquote, piedlinio, tiu linio tie ke mi reliefigis, linio ok, Estas simple porti tiun nomon, kiel kaploko, kaj concatenando ŝin kun skalara PHP. Do ni ne havas ĉi operatoro en C. Ĉi skalara operatoro estas mirinda afero en PHP-- se vi estas familiara kun JavaScript aŭ Java, vi povas uzi la pli subskribi fari kunmeto. En C, ĝi estas doloro en la neck-- kaj Mi tiom bedaŭras, en p-aro ses, vi tuj devos fari this-- estas doloro en la kolo al concatenate kordoj. Kial? Nu, ĉar se vi havas ĉeno kiu estas tio longe, kaj alia ĉeno kiu estas tio longe, vi ne povas nur ŝtopi ilin kune. Kion vi anstataŭe devas fari en C? Yeah? Spektantaro: [inaudible] DAVID Malan: Vi havas malloc memoro, aŭ uzi tabelo sur la stako. Kaj vi vere devas fari ke tabelo sufiĉe granda konveni ĉi plus ĉi, plus la backslash nula. Tiam concatenate ilin kune uzanta moveti kato aŭ permane kun por ciklo, aŭ ajna nombro de teknikoj. Kaj ni klarigos al vi paron en p-aro ses. Ĝi estas doloro en la kolo. Kaj tiu estas vere kion mi volas diri pri ĉi kontre this-- kiel C kontre PHP. Vi nur akiris tiom multe pli funcionalidad senpage, por ke vi povas enfokusigi, ideale, sur la amuza parto de kodigo, la projekton vi volas solvi, anstataŭ la malalta nivelo minutiae. Do ĉi nur generas header.php aŭ footer.php bazita sur kiu mi vokas. Kaj efektive, se mi iras en index.php, avizo ĉio tio, kio changed-- Anstataŭ nomante redonu kaplinio aŭ piedlinio redonu, Mi vokas repagi, sekvata de la nomo de la ŝablono, kiun mi volas fari. Kaj vi vidos ĉi tion, ankaŭ, en problemo starigis sep, per kiu ni permesos uzi la sama funkcio por fari kukojn kaj aroj da malsamaj retpaĝoj. Do anstataŭ logxas tro multe pli sur tiujn details-- kiun vi vidos denove en problemo aro seven-- ni rigardu ĉe nun la komenco de solvo al pli interesa problemo. Tiel ege, nenion ni havas faris savis datumoj. Fakte, la nura tempo ni iam savis io ni faris en tiu klaso estas, kiam ni havis tre simplan demo kelktempe dorson, per kiu ni uzis dosiero IO en C, kaj mi opinias, ke mi tajpas en mia nomo, kaj Hannah nomo, kaj Maria la nomo aŭ eble Andy nomon, kaj tiam ni savis CSV file-- komo apartigis valorojn dosiero. Kaj ni uzis fopen-- mi pensas ni uzis fprintf kiel mi memoras, kaj ni savis dosiero. Nun, kiu estas la plej simpla formo de datumbazo. Se vi volas fari retejon por la Frosh IMs programon, per kiu unuajaruloj povas registriĝi por sporta, vi ideale volas fari ion kun tiu datumo. Pasintsemajne, ni faris nenion kun la data-- ni ĵus diris, vi registras, ne vere. Aŭ eble mi retpoŝtis la Proctor, kaj ke estis ĝi. Sed estus agrable, se mi povus doni tiun proctor CSV-dosiero, kiel Excel dosiero. Aŭ pli bona ankoraŭ, estus estus bone se mi povus metis tiujn uzulajn nomojn kaj dormejo nomoj kaj ĉiuj de tiu en datumbazo kiu nur vivas por ĉiam, ĝis mi elektas forigi la datumojn. Al datumbazo kiu permesas min konsulti informo. Kaj efektive, jen kion datumbazo estas. Ni enkondukos hodiaŭ, kaj venontsemajne, tro, teknologio nomata SQL-- Strukturita Query a Lingvo, kiu estas alia lingvo. Ĝi estas esence programado lingvo, sed por datumbazoj. Kaj datumbazon por nun, nur pensi kiel súper eleganta versio de Microsoft Excel, aŭ Google Kalkultabeloj, aŭ Apple Numeroj. Ĝi estas ĝenerale programo kiu permesas vi stoki tutan faskon da datumoj en vicoj kaj kolumnoj, tute kiel vi eble en Excel. Sed kio estas agrabla, speciale se ni ne estas súper konata kun Excel, kio SQL permesas fari estas query ĉi informo skribante linioj de kodo kie vi povas, eĉ se via datumbazo havas milionoj vicoj en ĝi, vi povas trovi aferojn super rapida. Fakte, Excel estas aparte malbona ĉe granda datumoj aroj. Kaj fakte, ĝis kelkaj jaroj, rezultis Excel nur permesos stoki ĝis 65.535 vicoj de data-- kiu sonas multe, sed ĉe la tempo mi estis grad studento, Kaj mi memoras stumblanta super ĉar mi estis generante CSV dosierojn por mia esploro kaj mi volis analizi ilin rapide por nur malfermanta supre en Excel. Kompreneble, mia komputilo nur frakasis, ĉar mi havis pli ol 65.000 vicoj. Sed kien la 65.535 venas? Kio estis Microsoft faras, supozeble? Se vi estas bona kun via potencoj de du? Jes, ili uzas 16-bita valoro por reprezenti la vico nombro. Kaj du al 16 estas 65,536-- minus unu, ĉar se vi nulo indekso signifas ke estis la plej nombro de vicoj mi povus havi. Kaj ĝi estis nur dezajno decido. Savante 16 bitoj, ili limigis min 16.000 vicoj, anstataŭ 4 miliardoj, kiun mi povus esti havinta ideale. Sed nuntempe, ni tuj enkonduki tiun pli en TTT kuntekston. Kaj kio estas agrabla pri SQL estas ke eĉ kvankam ĝi estas sufiĉe potenca kaj bela malnaiva, vere abscesoj malsupren al kvar ŝlosilaj operacioj, kvar ŝlosilo funkcioj, se vi will-- elekti, por rekuperi datumojn, serĉado por datumo; forviŝi aŭ forigi datumojn; enmeti por aldoni vicoj al la datumbazo; kaj ĝisdatigo. Do se vi iam uzis Google Kalkultabeloj, Apple Nombroj, Microsoft Excel, vi estos farinta plej verŝajne, ĉiuj de tiuj operacioj kiel homo de nur uzanta vian klavaron kaj mouse-- enmeto datumojn, uzante vian okulojn elekti aŭ serĉi datumojn, aŭ ĝisdatigo datumoj, aŭ forigi datumojn. Do kio faras ĉi tiun mezumon? Nu, antaŭ-instalitaj en CS50 Ide estas programo nomita MySQL. Ĝi estas libera, Malferma-fonto datumbazo kiu estas super populara. Facebook, ekzemple, uzas ĝin por tiu tago, inter aliaj iloj kiujn ili uzas. Kaj multan tre populara retejoj uzas en granda parto ĉar ĝi estas rapida, kaj ĉar ĝi estas libera. Kvankam certe alternativoj ekzistas. Kaj iuj el vi povus dabble kun alternativoj por fina projektoj. Jen ekrankopio, dume, de ttt-bazita ilo nomita phpMyAdmin. Estas hazardo ke tiu ret-bazita ilo ankaŭ skribita en lingvo, PHP, sed kio ĝi estas signifita fari estas doni nin reta interfaco al datumbazo. Ĉar MySQL tipe estas io, historie, vi estus interagi kun nur kun komandlinio. Kaj estus súper ĝena kaj arcano havi tajpi tekstaj komandoj por elekti datumoj, enmeti datumojn, forviŝi kaj datumoj. Do iuj homoj sur la interreto skribis reta programo ke nur ni administri la datumoj en nia datumbazo. Estas kiel duobla musklako al Excel, kaj kurante reta versio de gxi. Kaj kion vi estas iranta uzi ĉi por finfine venontsemajne, ne en p-aro ses, sed estas konstrui ion nomata CS50 Financoj, kio tuj havas datumbazon de uzantoj, kun uzanto nomoj kaj pasvortoj, dolaro kvantoj kiujn ili havas en siaj bankkontoj. Ĝi tuj estos io vi uzas por stoki la simboloj kaj la kvantoj de akcioj, ke uzantoj acxetis uzante virtuala dolaroj ke vi donos al ili. Kaj ĝi tuj permesos uzantoj registri vian retejon, tiel ke eĉ viajn amikojn povas agordi al via retejo kaj efektive enskribi, ensalutas, kaj amuziĝu kaj provu trovi kulpon en via kodo, kaj provu trovi erarojn en via retejo. Kaj ili devos simple enskribojn aldonante, efike, tra kodo vi skribos al via datumbazo. Ekzemple, ĉi tiu estas rapida ekrankopio kio datumbazo povus aspekti. Tio estis el unu el pasintjara solutions-- tio estas kiel mini Excel fajliloj, stokitaj en nia datumbazo, stokitaj en ĉi programaro nomita MySQL. Sur la maldekstra flanko, mi havas ŝajne donita ĉiu uzanto unika nombro. En la dua kolumno, mi donis ĉiuj uzanto name-- mia propra inter ili. Kaj sur la dekstra flanko, Mi donis ilin hash. Nun tiu estas efektive pasvorton sed ĝi ne estas plata teksto pasvorton. Ĝi estas ĉifrita pasvorto, se vi volas, aŭ hash pasvorton. Kiun ni revenos al antaŭ longe. Sed se vi iam legis artikolon pri kiom vian pasvorton? e iu banko aŭ iu retejo eble estos kompromitita, ĝi povas ĝenerale signifi unu el du aferoj. Do tio estas nur ekstrakto el ses uzantoj. Ĉiuj el vi nun povas diveni eksteren tra kodrompado aŭ krakas kion niaj ses popola pasvortoj. Sed se vi iam alveninta garde aŭ pardonpeto de entrepreno aŭ retejo parolo bedaŭras, hacker ekkomencis nia datumbazo, vi supozeble ŝanĝi vian Pasvorto, kio povus signifas? Nu, oni povus diri la Kompanio estis pli moronic, kaj estis stokante vian pasvorton en kolumno tiel, neĉifritaj. Kio signifas la kontraŭulo, Kiu ŝtelis la datumbazo, laŭvorte scias vian salutnomo kaj pasvorto. Tio estas la plej malbona ebla scenaro. Kaj kiel vi vidos en p-aro sep, do facile evitas. Ekzistas absolute neniu senkulpigo por ke formo de stulteco en hodiaŭa interreto. Two-- kaj ni trovos kelkajn artikolojn atesti la fakto, ke tiu ankoraŭ okazas, nonetheless-- du, eble la kontraŭulo ŝtelis ĉi versio de la datumbazo. Kiu estas ankoraŭ ia malbona, ĉar nun Ili scias ke mi havas ses klientoj, Mi scias la uzanto nomoj de tiuj ses klientoj, kaj mi konas la ĉifritajn versioj, aŭ la hashed versioj, de tiuj ses klientoj 'pasvortojn. Sed kiu el vi, kiuj eble faris [? Hacker 2?] kie vi krakis pasvortojn, aŭ prenis Rigardu ke versio de la problemo aro, kial ankoraŭ iom preocupante se la antagonisto scias viajn hash pasvortojn? Publiko: Ĉar ili povis eniri la tuta vortaro en la hash funkcio. Kaj se via pasvorto estas vortaro vorto, [? ili povas simple match--?] DAVID Malan: Ĝuste, la kontraŭulo povas simple skribi kodon, kiel kelkaj el vi faris por [? Hacker?] 2, whereby vi persisti super ĉiuj el la vortoj en la vortaro, aŭ ĉiujn eblajn kombinojn de A tra Z kaj unu tra nine-- kiu sonas multe, kaj ĝi estas. Sed por komputilo, ĝi estas sufiĉe darn rapida. Kaj fakte, kiu estis la punkto de [? Hacker 2,?] Estis preni aĵojn ke laŭvorte similas tiun, kaj dorsflanko inĝeniero kio fakte estis. Do ni rigardu kiel ni povas stoki ĉi pli kompetente. Rezultas, dankeme en MySQL, tie tuj estos datumtipoj. Kaj unu el la amuzaj partoj pri datumbazo dezajno, por esti honesta, Efektive decidi mem kial vi reprezentas la datumoj? Should vi reprezentas telefonnumero kiel int, kiel granda nombro, aŭ longa? Aŭ ĉu vi efektive faras kiel sekvenco de signoj? Kaj povas esti tre ne-bagatela trafojn de tiu. Fakte, unu el la fruaj, amuza germane rakontoj estas kiam Mark Zuckerberg estis konstruanta Facebook, ĝi estis origine skribita en, kaj ankoraŭ estas plejparte skribita en PHP. Kaj unu el la plej grandaj defioj ili alfrontis frue estis grimpante. Kiam oni festis aldonante lernejo post lernejo post lernejo, al mia scio, unu el la originalaj solvoj estis esence kopii kaj almeti iuj de la datumbazoj kaj iuj de la kodo, por ke Harvard estis kurante sur lia propra servilo, kaj MIT kuris sur lia propra servilo. Kaj tio estis kial, por kelkaj de vi kiu eble memoras, vi povis havi amikojn en aliaj retoj. Verŝajne vi ne havas amikojn en MIT aŭ Harvard 10 aŭ tiel jaroj, sed vi ne povus span retoj por parte tio. Kaj unu el la plej grandaj defioj por Markon kaj por entreprenoj kiel Facebook Efektive uzado centoj kaj miloj kaj milionoj de petoj por dua. Do tion ni komencos parolante pri tiu semajno vere tuj esti germane al skribanta bona programaro kaj popole sukcesa iloj kiuj povas pritrakti multaj uzantoj. Do ni parolos pri aferoj kiel indeksado kaj sercxo sed ke estas ĝi por hodiaŭ. Ni vidos vin por pli merkrede. [MUZIKO - "Seinfeld" TEMO] DAVID Malan: Vi povas al ĝin, kaj subtrahu el ĝi. Kaj vi ne havas senmoviĝi kun iu antaŭdestinita kvanto de memoro. Nu, kio tio tuj nomos? Parolanto 1: Nu, kio okazas? Parolanto 2: Kion vi volas diri? Li prelegis. DAVID Malan: Kaj ni povas uzi funkcio nomis malloc al memory-- Parolanto 1: Kial ne brakojn movanta? Parolanto 2: Nu that's-- vi scias, ke estas normala. Estas nur kiel li havas nur big kolbasoj pendas tie. Parolanto 1: tio estas normala? Parolanto 2: Jes, mi kredas ke ni nur supozi li hazarde anstataŭis sian senodorigilo kun superglue.