[Muziciranja] DAVID J. Malan: Pozdrav. Idemo prošetati Problem Set 8 Mashup, koja će vas izazov osloniti na elementima za Google Maps s elementima iz Google News i kaša ih zajedno u web appleta koji omogućuje korisniku da traži Karta za vijesti lokalnu na određenim mjestima, gradovi, i ZIP kodovi. Da biste to učinili, mi ćemo integrirati neke HTML, CSS, PHP, SQL, JavaScript i tehnika općenito poznat kao Ajax kako stvoriti ovaj potop korisničko iskustvo. Neka prvi za Google Maps sama. To, naravno, možda poznato sučelje. Ali ispada da je Google Maps Također pruža API-- aplikaciju programiranje interface-- preko kojih možete uzeti elemente Google Maps i integrirati ih u vlastite aplikacije. Doista, tijekom ove Proces, idete pronaći nekoliko URL-ova Posebno korisno da spominju se u Specifikacija za problem Set 8, posebno ovo početak Vodič odnosno developer vodič za Google Maps API verzija 3, kao i kao Karte JavaScript Google API v3 reference, što je malo više Arcane čitati ali zapravo je sve na nižoj razini Pojedinosti o tome što funkcionira ili metoda a predmeti i svojstva i Događaji zapravo dolaze s API, vrlo sličan u duhu na [nečujan] stranicama. Sada, ako pogledamo na Google News, vi ćete možda vidjeti poznato sučelje ovdje. Ali ispada možete pretraživati Google News za određene geografskim područjima putem HTTP parametra naziva geo. U stvari, ako sam uvećanje ovdje, vidjet ćete da je Ja sam u news.google.com/news/section?geo=02138. I, doista, ako uvećanje out, vidjet ćete da sam gledajući na stranicu sa cijela hrpa Stavovi o Cambridgeu, Massachusetts. U međuvremenu, ako sam stvarno promijeniti URL ne bude poštanski broj kao što je ovaj, ali nešto malo Messier kao što su Cambridge, Massachusetts +, gdje plus je način na koji se kodirati razmak u URL i pritisnite Enter, vidjet ćete da sam zapravo vidjeti gotovo istu vijest. Možda je to malo drugačije jer Cambridge zapravo ima više poštanske brojeve. Sada kako bih znao da je i, U stvari, kako sam mogao nekako vezati gradove i mjesta na poštanski brojevi u slučaju da žele dopustiti korisniku pogledati bilo? Pa, ispada da postoji website vani zove geonames.org što je Inicijativa da se slobodno dostupna baza podataka o svim vrste geografskih informacija, ne samo za SAD, ali i za druge zemlje. U stvari, ako ja ići na ovaj URL ovdje, što se također spominje u problemu postavio Specifikacija, vi ćete ga vidjeti tri popis cijela hrpa zip datoteka bilo kojih se može skinuti od vas. Naime, za ovaj problem postaviti ti ćeš preuzeti us.zip. Sada u ovoj datoteci je cijeli hrpa podataka u tekstualnom obliku. Datoteke je vrlo sličan CSV-- vrijednosti odvojenih zarezom file-- ali to je zapravo koristi Kartice se obilježiti polja. Sada, u međuvremenu, ako pogledate ovdje na ono što sam istaknuo, polja u datoteci idu da se stvari poput brojeva država, poštanski brojevi, imena mjesta, a onda, u nekom obliku ili drugi, države i županije, zajednice, i još mnogo toga. U stvari, već imam preuzeti ovu datoteku unaprijed. Dopustite mi ići naprijed i otvoriti ga here-- us.text-- i, štoviše, da ćete vidjeti ako sam se pomaknite prema dolje da se postroje 16792 vidjet ćete nekoliko zapisa za Cambridge, Massachusetts i njegove razne poštanski brojevi. Ono što je također vidjeti da je Županija, neke brojeve da ja stvarno ne razumijem, ali i sve Način na desnoj strani, neki GPS coordinates-- zemljopisne širine i dužine. To je super jer je jedan od značajke Google Maps API je sposobnost otkrivanja gdje ste geografski U smislu GPS koordinate. Sada ćemo početi shvatiti kako početi vezanje ove stvari zajedno. Mi smo vam dali cijeli hrpa distribucije koda, kao i MySQL baza podataka. U stvari, ako sam povući phpMyAdmin ima Već uvozi, kao što će uskoro, pset8.SQL, vidjet ćete MySQL tablica koje izgleda ovako, ID polje, zemlja broj, poštanski broj, naziv mjesta i još mnogo toga. Vrste svima Kolone sam izvedena jednostavno čitajući readme.text podnijeti da se ovdje navedeno li područje je cijeli broj, ili varchar ili slično. Tako smo stvorili tu tablicu za ti i ti dao SQL naredbe izvršiti stvoriti da stol u svojoj bazi podataka, ali tu je zapravo u njemu nema podataka još. Umjesto toga, ti si idući u morati preuzeti us.zip ili poštanski bilo koje zemlje u file iz tog URL-a tamo. A onda ćeš morati napisati naredbenog retka skripte u PHP da je će se otvoriti taj tekst podnijeti, ponoviti tijekom svoje linije, te za svaku one linije napraviti umetak u koji stavlja stol u MySQL bazu podataka. Dakle, na kraju tog procesa, vi ćete pokrenuti tu skriptu u konačnici Samo jednom u teoriji. U stvarnosti vjerojatno ćete pokrenite ga hrpu puta dok je pokušavao popraviti razne bugove. U konačnici, ti si idući u morati stvarno velika baza podataka s tisućama i tisuće geografskih redova. Onda ti ćeš staviti da uvoz Skripta stranu nakon što je rad i tvoja baza je lijepo i točno, a zatim ti si idući u premjestiti na stvari provedbi samog Mashup. Mashup će izgledati Malo nešto ovako. Na mashup.cs50.net smo imamo rješenje osoblje da izgleda malo nešto ovako. Doista, ako sam kliknite na ovaj list ikona za Cambridgeu, Massachusetts, vidjet ćete proklizavati icon kratko, a zatim naredio popis, Popis s grafičkim oznakama članaka odnose na Cambridgeu, Massachusetts. Ako sam kliknite na Charlestown, Massachusetts, Vidjet ću isto za taj grad. I ako ja kliknite na Watertown, Massachusetts, Tu ne može biti bilo vijesti iz Watertown, pa ćete vidjeti nešto poput laganog vijesti dana. Sada, pak, na gornjem lijevom su neki poznati Google Maps kontrole to vam smanjivanje, pan gore, dolje, lijevo i desno, ali i okvir za pretraživanje da smo tamo stavili. Dakle, ako sam tražiti, iskreno, Jedini poštanski broj znam, 90210, mi ćemo zapravo vidjeti Beverly Hills, California. Kada se pritisne da me vodi California i cijela hrpa vijesti o Beverly Hillsu. Sada primijetiti, također, ono što se tamo dogodilo. Ako sam ovaj put Potraga za 02138 ili čak Cambridge Massachusetts zarez ili neki varijanta, dobivate Malo autocomplete padajući. Sada to koristi plugin za knjižnicu zove jQuery, i da čep se zove typeahead. Mi jednostavno pročitati dokumentacije, preuzeli .js integrirani u distribucijskoj koda, tako da konačnici može napisati kod koji ispunjava taj padajući izbornik s auto izbor ili auto sugestije. Sada distribucija koda, ipak, da je ste primili ne čini gotovo koliko. Možete dobiti Google Karta ugrađen, i dobivate kontrole u gornjem lijevom kutu, i dobiti okvir za pretraživanje. Ali ako upišete nešto poput 02138, nema mjesta nalaze se još. Tako da će biti jedan od naših ciljeva ovdje. Osim toga, ako se uzme korak natrag i pogled na samoj karti, nema novosti god. Čak i ako kliknem i drag, nema markera zapravo pojaviti za vijesti, jer to Izazov je lijevo za vas kao dobro. Idemo pogledati zatim na distribucijski koda. Nakon što ste preuzeli pset8.zip i raspakirali u svom vhost imenik u CS50 Appliance, vidjet ćete to imenike ovdje unutra. Bin-- koji obično označava binarni za izvršnu programs-- uključuje, kao u pset7, neki PHP datoteke koje druge datoteke uključuju, zatim javnosti, što je datoteke koje je potrebno biti javno dostupne korisniku u pregledniku. Idemo pogledati u bin, a mi ćemo vidjeti da postoji datoteka Tu se već zove uvoz. Ako smo otvorili ovo s gedit, vidjet ćemo da, na žalost, ne postoji mnogo tamo. Sve što je tu, ipak, je shebang na vrhu koji određuje što interpreter-- u ovom slučaju PHP-- treba koristiti kako bi zapravo izvršavanje ove datoteke. Ali onda gdje piše TODO je mjesto gdje ste ćete morati napisati neki kod koji je vjerojatno zahtijeva konfiguracija file koji je u uključuje imenik kao što smo učinili prije s PHP datoteke. A onda idete moraju nekako otvoriti us.text koja vam vjerojatno su raspakirali već. Onda ti si idući u morati ponoviti preko linija u toj datoteci, možda pomoću neke od funkcija predložen u specifikaciji. Zatim stavite svaki od njih Linije u MySQL bazu podataka pomoću upita funkciju, što opet smo vam daje with-- ili barem varijante tome u functions.php, što ćemo vidjeti u samo trenutak. Sada ćemo zatvoriti uvoz i vratiti se naš katalog i ovaj put ići u uključuje. A ako ja ls tamo, vidjet ćete Tri datoteka vrlo slične Problem Set 7. I neka je uzme brzi pogled, Primjerice, na config.php. U tu je manje linije nego prije, i to Čini se ova datoteka sadrži constants.php i functions.php. Mi koristimo malo drugačiji Tehnika ovaj put zapravo odrediti da te datoteke su relativni na trenutni direktorij __ DIR__ predstavlja ono imenik ovu file, config.php je sama u. Dakle, to je više eksplicitni način određivanja što druge datoteke koje želite potrebna. Sada, ako sam zatvoriti ovu datoteku i otvori constants.php umjesto toga, vidjet ćete datoteku jako podsjeća Problem se Set 7-a, kao i, premda s različitim baze podataka pod nazivom pset8. Konačno, u functions.php, vidjet ćemo samo jednu funkciju ovaj put pod nazivom upit. To je gotovo isto, osim što nositi pogreške ovaj put malo drugačije, ali to je upotreba je Isto kao što je u problemu postaviti sedam. Sada idemo natrag u našu pset8 imenik, ići u javnost, a tamo Ako ja LS, vidjet ćete this-- articles.php, index.html, search.php, i update.php-- sve datoteke. A onda CSS fontove, img, a js imenik sasvim kao pset7. Idemo pogledati Startna, što je će biti jako polazna točka za smashup. Sada u index.html, vidjet ćete cijeli hrpa linkova elemenata u glavi, Naime, za bootstrap za vlastite CSS slijedi cijela hrpa pisma oznake za stvari kao što su zemljovidi, API Sama, posebna marker s oznakom program koji smo spomenuli u specifikacija je dostupna na vas, jQuery sama, bootstrap sama, a druga knjižnica zove podcrtavanja koje govorimo o u spec. Underscore.js kao jquery.js je JavaScript knjižnica da ima hrpu funkcionalnosti da je mnogo ljudi u svijetu želji postojali u samom JavaScript. Dakle, sve su to zapravo vrlo popularan. Također smo spomenuli typeahead što je knjižnica koja ne da je autocomplete padajući i konačno link na vlastitom JavaScript. U međuvremenu, a možda Srećom, ovaj Mashup pokreće relativno malo HTML ovdje na dnu. Obavijest da smo naveli div u naše tijelo klase spremnika tekućine. To je, po bootstrap-a dokumentacije, jednostavno znači da je taj div će ispuniti okvir ili prozor preglednika potpunosti. U međuvremenu, u nastavku da imamo div koji je otvorio i odmah zatvorio s jedinstvenim ID karti platnu. To je iz Googlea Karte dokumentacija po API, pri čemu sam jednostavno trebate ima prazan div u kojima bi se uvelo, u konačnici, stvarni Google Maps. No, više o tome u samo malo. Konačno, tu je oblik unutar kojih ovdje implementira okvir za tekst na vrhu lijevo U našoj sučelje za pretraživanje. Obavijest da smo koristiti malo bootstrap Ovdje too-- stvari kao što su Obrazac-inline i oblik-skupine. Mi smo dali bivši Jedinstveni ID obrazac. A onda, u konačnici, ja zapravo Vrsta ulaza, što je prilično poznato, čiji ID je q. Samo konvencija. Pitanje za query-- mogao imati Pozvani ništa. A onda rezervirano, U međuvremenu je grad, država, i poštanski broj koji ste mogli sjetiti gledajući u naše Mashup demo ranije. Ajmo zatvoriti ovu datoteku. Sada pogledajte PHP datoteka koje čekaju i onda JavaScript datoteke. U našim PHP datoteka, mi smo Već provodi za vas, za primjer, ažuriranja. Update.php-- nećemo potrošiti ogromna Količina vremena na here-- ukratko je file da je naš JavaScript koda ide kontaktirati putem AJAX da asinkroni tehnika koja je ugrađene u JavaScript ovih dana da je će nam omogućiti da se pitaju update.php za više informacija. Naime, u bilo koje vrijeme Korisnik vuče na karti ili obavlja pretraživanje koji skače Korisnik na drugo mjesto, naša JavaScript kôd, što ćemo uskoro vidjeti, nazvati update.php i pitati za 10-ak markera u Pogledu temelji na GPS koordinate na vrhu i na dnu Uglovi toga karti. Tada ćemo moći repopulate kartu da sada Korisnik je preselio na zaslonu kako bi vidjeti 10 vjerojatno novi markeri za različite gradove. U međuvremenu, ova datoteka je u konačnici će izvršiti SQL upit Protiv našoj bazi stol pod nazivom mjesta koja će se vratiti onima 10 ili manje mjesta. U međuvremenu, u articles.php, još je jedan file smo napisana u cijelosti. To je vrlo sličan u duhu Problem Set 7 je Potraži funkcija, koji je kontaktirao Yahoo financija za vas. Ova datoteka kontakata Google News za vas, u konačnici grabbing strojno čitljiv version-- u nečemu nazvao RSS format-- vijesti za Cambridge ili Beverly Hills ili što god grad ste tražili za na temelju tog geoparameter. Mi analizirati tu RSS, što je samo vrsta markup jezik zove XML, a onda smo zapravo ga vratiti u pregledniku i na svoj JavaScript kôd, Naime, u formatu zove JSON, JavaScript Object zapis. Sada ćete vidjeti u specification-- smo vam točka kako se zapravo može vidjeti Neki od JSON narednom back-- da je ova funkcija u konačnici omogućuje naseliti one popup izbornika tako da kada kliknete na igrača u mapi što zapravo vidjeti hrpu metaka, od kojih je svaki Linkovi na članak. Sada ćemo pogledati jedan posljednjem PHP file koji, na sreću, ne ima puno ide on-- Samo prilično velika TODO. Sada je ova datoteka izjavljuje niz naziva mjesta. I na kraju ispisuje da niz u JSON format-- to prilično ispisom samo tako da se stvari lakše za ispravljanje. Nažalost, u Srednji je to obveza, koji zahtijeva da se traži baza podataka za mjesta odgovarajućih geo HTTP parametar. I, doista, to će biti jedan od vaših challenges-- provesti ovu funkcionalnost ovdje tako da kad se obratite ovu datoteku s URL poput pretraživanja. php? geo = nešto, Vaš broj će u konačnici vratiti JSON Niz svih mjesta u vašoj tablica baze podataka kako bi se slagala da je ulaz. Dakle, ako korisnik upiše u Cambridgeu, Vaša datoteka ovdje search.php treba u konačnici vratiti JSON niz za sve utakmice za Cambridge, što bi moglo biti u Massachusettsu ali može biti i bilo gdje drugdje. Na kraju, neka je pogledati na dva datoteke koje su statične ultimately-- Vaš CSS datoteku i vaš JavaScript datoteka. Ako odem u našu CSS imenik, postoji cijela hrpa datoteka postoji, ali većina njih su knjižnice. Idem pogledati, Naime, na styles.css, koji je naš vlastiti globalno CSS koji je ide stilizovati cijeli ovaj Mashup. Ja ću ga ostaviti na vama je da pročitate komentari su ovdje, ali, ukratko, to je CSS koji osigurava da su naši Mashup, po defaultu iz kutije, izgleda točno onako kako smo it-- želite s kartom ispuni pogledom luku i potragom kutiju u gornjem lijevom kutu. Također smo uzeli slobodu stylizing da typeahead padajući Izbornik malo kao dobro. Najvažniji datoteka možda za taj problem postaviti je to posljednja, scripts.js. Unutar vašeg JS imenik još više datoteka. Svi oni su knjižnica datoteke osim tog jednog, scripts.js. Ako smo otvorili ovaj gore, neka je uzme naše Konačna turneju kroz funkcije koje su ugrađeni u ovu datoteku za vas i pažnju poziva na todos koji nam predstoje. Na vrhu ove datoteke, Tri su globalne varijable. Jedan za kartu, koja ide na se odnosi na našu Google karti. Možete misliti na njega vrsta kao pokazivač. U međuvremenu, imamo druga globalna varijabla zove info, koja, kako se čini pohranjivanje povratnu vrijednost poziva na novom google.maps.InfoWindow. JavaScript podržava predmete koje vrlo su slični u duhu do amortizeri. A što je ovo linija za naše svrhe radi stvara novi info Prozor u memoriju i zatim imajući oko referencu njega u varijablu pod nazivom Info. A među onima, U međuvremenu, ono što se pojavljuje biti prazna JavaScript Niz naziva markera. Sve one novinskih ikona, ili može odabrati drugu ikonu uopce, će biti pohranjeni u konačnici u ovom nizu tako da možemo vrlo lako dodati na Karta i uklonite ih s karte. Sada se pomaknite prema dolje malo i fijuk putem koda koji će biti izvršiti čim DOM ili dokument Objekt model ili Sama stranica je spremna. Sjetite se da je ovaj sintaksi Ovdje jednostavno ne odredi da sljedeći kod treba izvršiti samo kada je preglednik završio učitava sve ostalo. Mi smo prvi izjaviti Cijela hrpa stilova, koji završavaju stylizing Karta po spec. Mi smo tada izjaviti Cijela hrpa mogućnosti, što dodatno prilagoditi Google Karta da smo o tome kako ugraditi. Zatim na malo jQuery koda, što je objašnjeno u malo detaljnije u spec, zgrabiti taj element, karta-platna da smo tako jedinstveno identificirati. A onda je ovo linija ovdje ono što se čini da se magično nam Karta Google unutar naš vlastiti zahtjev, spremanje citat U tom promjenjivom zove karte. Konačno, ovdje smo registrirajte ono što se zove slušatelj. Razmislite back-- način, način back-- za tjedan nula u CS50 kad smo pogledali nule i njegova podrška kroz šetnju kroz stvari zove Događaji i emisije. Vi ne bi mogli imati koristi sami, ali to je mehanizam kojim browser u ovom slučaju može dobiti našu pozornost kad je spremni za izvršavanje neki kod. U ovom slučaju, to će slušati na karti za događaj pod nazivom miruje. To znači da je preglednik završio učitavanja na karti Google. U ovom trenutku funkcija zove Konfiguracija trebali u konačnici biti pogubljeni. To funkciju, konfiguriranje, ćemo vidjeti, je napisao nama. Sada ovdje je funkcija da, na žalost, samo TODO dodati marker. Po spec. ti si idući u morati napisati kod koji zapravo dodaje marker-- li izgleda poput novina, ili palac uzdama, ili nešto else-- na Google karti. Ovdje je to funkcija zove konfigurirati. Ja ću ga ostaviti na vama je da pročitate kroz to detaljnije, ali shvatiti da smo dodali hrpa više Slušatelji tako da možemo izvršiti kod kada Korisnik klikne na te vuče kartu. Također imamo kod ovdje da inicijalizira da typeahead plugin tako da je padajući Izbornik zapravo radi. Ali neka se usredotočiti na samo par mjesta ovdje. Naime, to učiniti ovdje. Ja ću odgoditi za online dokumentacija i specifikacije koliko ispuniti u ovoj todo. No, u Ukratko, ova knjižnica typeahead vam omogućuje da prođe u ono što je općenito poznato kao predložak, koji ima neke promjenjive rezervirana vrlo slične u duhu printf-a%. * s. No, u ovom slučaju, Predložak po spec omogućuje vam da odredite ono varijable želite kako bi se uvelo iz podataka koje je došao Povratak iz nešto poput PHP datoteke koje ste napisali koji se emitira JSON izlaz. Sada ovdje shvatili da smo osluškujući typeahead odabira kad korisnik zapravo provodi Pretražite i odabire vrijednost. To je, kako smo zapravo će slušati za to i izvršiti neki kod, kao rezultat. Zatim smo nastavili konfigurirati Mashup samo malo. I, na kraju, možemo nazvati Ova funkcija ažuriranje. To ažurira oznake na zaslonu. Više o tome u samo nekoliko trenutaka. U međuvremenu, postoji nekoliko mali funkcije ovdje. Od kojih je hideInfo koje jednostavno zatvara InfoWindow. Još jedna funkcija ovdje, što u konačnici neće biti previše dugo, uklanjanje oznaka. To će poništiti sve što Vaš oglas funkcija marker radi. I onda ovdje je potraga. A ovo je zanimljiva jer mi napisali JavaScript kôd koji će razgovarati s search.php na poslužitelja i vratiti neke odgovor. Vi, naravno, i dalje će potrebno provesti search.php, ali smo provoditi JavaScript kod koji je će nositi zapravo obavljanje traži od tog tekstualnog okvira. Konkretno, obavijesti da je ova funkcija ovdje, traži, ne zovu search.php metodom zove dobili JSON, koje smo vidjeli u predavanju. I sintaksa ovdje je malo drugačiji od predavanja u da smo pomoću jQuery tzv obećanje sučelje. Više o tome u spec. To jednostavno znači za našu svrhe sada da postoji Dva su posebne funkcije smo potrebno je nazvati s dot notaciji Ovdje odmah nakon poziva dobili JSON. Jedan se zove učiniti. Jedan se zove uspjeti. Možete misliti na njih kao rukovatelj uspjeh a neuspjeh rukovatelj samo U slučaju da nešto pođe po zlu. Sada pogledajmo zadnji Nekoliko funkcija u ovoj datoteci. Ovdje je funkcija zove showInfo, koji prikazuje podatke u jedan od onih mali info prozori pops gore kada korisnik klikne oznaku. Ovdje i dalje je da ažuriranje funkcija da smo provoditi za vas. Ona određuje granice karte. Koje su GPS koordinate njegova sjeveroistočno i jugozapadno kutovi ovdje. Mi smo pripremili neke HDP parametre tu i onda ih prošlo u konačnici na update.php, koju ste također provodi za vas. To u konačnici dobiva natrag neke JSON od datoteka zove update.php a zatim uklanja bilo markeri na zaslonu a zatim iterira preko podaci koji se vraćaju iz update.php, koji opet je samo JSON polje. I onda na kraju dodaje oznaku za svaki od tih mjesta, rukovanje neuspjeh ili pogreške koje bi mogle vrlo dobro dogoditi. Sada samo da vam dati okus kako ste možda ići oko ispravljanje pogrešaka ovaj projekt, shvatiti da sam otvorena u unaprijed ovu karticu ovdje na ovaj URL, pset8 / articles.php? geo = 02138. Sada, opet, članci o PHP smo provoditi za vas tako da to nije toliko ono što će se pomoću za ispravljanje, nego u tehnici. Obavijest da sam tražio Cambridge poštanski broj ovdje, i ja sam dobila natrag, dapače, JSON Niz JSON objekata unutar kojih dva keys-- veza i naslov. Dakle, ta funkcija radi se već za vas. Ali ova tehnika ručno ide na URL ovako nešto slično search.php? geo = Cambridge ili 02138 ili sve što korisnik unese treba dokazati neprocjenjiva, kao što, sami, pokušajte shvatiti točno bilo i zašto search.php radi ili ne. Konačno onda, imate Nekoliko todos ispred vas. Ti si idući u prvih oruđa da uvoz skriptu koja čita u us.text u bazu podataka. Ti si onda će morati provesti search.php tako da se ponaša upravo kao što je navedeno. Ti si onda će htjeti da se usredotoče na scripts.js i na kraju provodi onih par todos, uključujući za konfiguriranje i da je predložak, dodavanje oznaka, uklanjanje oznake i tada traju, ali ne i najmanje važno, jedan osobni dodir. Nakon što ste svoj Mashup rad sasvim kao što je naša, cilj pri ruci je za vas da dodate osobnu dodir na svoj Mashup, je li to estetski i funkcionalno. Uzmi Mashup ikada tako nešto na sljedeću razinu. Tako dugo dok ste se gurati dalje Vaše poznavanje samog spec i pokupiti jednu tehniku Novi, čak i ako je samo nešto estetskih poput promjene Izgled karti koju koristite, Opseg da očekujemo će biti zadovoljni. To je onda problem Set 8 Mashup. Stay tuned za više Specifikacija i mnogo sreće rješavanju toga, tvoja posljednja CS50 je problem postaviti ikad. [Muziciranja]