ANDI PENG: Siamo quasi attraverso tutti i pset. In realtà, noi siamo con la maggioranza dei pset più difficili. Quindi siamo in realtà solo andando a tipo di brezza attraverso il prossimo paio di settimane. Stiamo per iniziare a parlare del nostro progetti finali, gli eventi in arrivo nelle prossime settimane. E la vita sarà un gioco da ragazzi. Quindi non troppo oggi. Si spera, sarà effettivamente brezza attraverso l'ordine del giorno di oggi, e poi da qui con un po 'di tempo libero a disposizione. Inoltre, voglio scusarmi per la mancanza di caramelle oggi. Non so perché. Ma nella settimana che precede Halloween, mi avrebbe dimenticato caramelle. Quindi sono in realtà solo un vasto delusione per te in questo momento. Perché ho letteralmente ricordo caramelle per ogni singola classe, ma di Halloween. Ma la prossima settimana, io porterò raddoppiare la quantità di caramelle per compensare questo, tutto per voi. Sarà fantastico. Così ho un paio di annunci per quanto riguarda alcuni programmazione. Ho alcuni problemi di pianificazione. Poi andremo a passare a parlare di ciò che è chiamato chmod. Stiamo andando a parlare rapidamente TCP / IP HTTP. E poi andremo a codificare la nostra proprio sito web utilizzando HTML e CSS. E poi ti lascio in realtà forse come 20 minuti per parlare pset6. Perché pset6 è in realtà un sacco di roba che abbiamo già visto in precedenza, ma ho voluto rinfrescare alcuni di questi concetti nonché insegnare un paio di nuove funzioni. Raffreddare. Quindi prima di tutto, bentornato dalle vacanze. Spero che tu sia pausa è stata piacevole. Vuoi hai fatto per la pausa? PUBBLICO: È andato a New York. ANDI PENG: Sei andato a New York? Penso che la metà della nostra scuola è andato a New York. Va tutto bene. Ho passato la maggior parte della mia pausa sedentario a letto Netflixing. Ed è stato un buon tempo. Ma ora siamo indietro, indietro in seduta, di nuovo in altalena delle cose. Abbiamo un pset dovuto questo Venerdì a mezzogiorno. Credo che tu abbia già preso il quiz, sì? Così chiunque altro che ha Non avevano i loro quiz, si prega di venire a prendere i tuoi quiz da me alla fine della sezione. O mi rintracciare nel campus. Avrò con me da qualche parte. Il nostro progetto finale pre-proposta anche. Così per quelli di noi che non hanno mai preso questa classe prima, la chiave di volta di CS50 molto è culminato in questo grande progetto che gli studenti propongono. E la proposta preliminare, solo un'idea generale di ciò che si potrebbe desiderare di fare per il loro progetto, l'idea è dovuto Lunedi, Lunedi prossimo a mezzogiorno. Così più o meno, penso che David sarà comunicare di più circa questo in conferenza se non l'ha già. E c'è una pagina solida sul nostro sito web che spiega tutti i requisiti del progetto. Ma in sostanza, scegliere qualsiasi argomento che hai stati interessati a per tutto il vostro tempo qui a CS, che si tratti di giochi o disegno o un video o qualsiasi cosa. E si può davvero tipo di ora applicare alcune delle lezioni che abbiamo imparato qui in CS50-- ciao, welcome-- a praticamente condurre un progetto finale della tua scelta. Tutto ciò che è dovuto Lunedi è solo un breve trafiletto via e-mail a me, una rapida sentenza, come, hey, Andi, Sono molto interessato nella progettazione un gioco che fa per iOS. Raffreddare. Basta che mi lasciate che il vostro brief iniziale idee per i vostri progetti finali. E parleremo attraverso o meno che in realtà è una buona idea o no, se si tratta di una idea fattibile o meno. Ma appena la proposta preliminare è prevista per il prossimo Lunedi. pset6, la nostra bella web-- che è sbagliato. Pset7? pset6? E 'pset6, giusto? pset6, il nostro web server, è dovuto Venerdì a mezzogiorno con la fine del giorno. Orario di ricevimento riprendere normalmente da Lunedi a Giovedi 8:00-11:00 questa settimana. Penso Commons per le prossime tre notti. Raffreddare. Prima abbiamo avuto nel materiale, qualcuno Per qualsiasi domanda, barzellette, storie? Che cosa hai fatto per l'autunno pausa? PUBBLICO: Che cosa devo fare? ANDI PENG: Already è tempo fa in realtà. Christabel andato a New York. Ho soggiornato qui e Netflixed. PUBBLICO: Oh, sì ero qui. ANDI PENG: Oh, OK. PUBBLICO: non mi ricordo che cosa specificamente. ANDI PENG: Va bene. PUBBLICO: Netflixing probabilmente. ANDI PENG: Netflixing. Sì, è un buon momento. OK. Tutto ok. Tutte le domande prima saltiamo in materiale? Inoltre, stiamo andando a cercare di accelerare attraverso la sezione di oggi, non troppo da coprire. E si spera, ci arriveremo qui un po 'presto. Ci scusiamo per non caramelle, anche. Io sono una delusione, soprattutto durante Halloween. Tutto ok. Raffreddare. Quindi stiamo andando a cominciare a parlare un argomento della riga di comando chiamato chmod. chmod, tutto ciò che è è solo un sistema Unix chiamata effettuata dalla linea di comando per cambiare i permessi dei file. Così, per esempio, abbiamo tutto incontrato una pagina come questo probabilmente qualche volta nel la nostra vita di essere un internet utente, dove il nostro server web ha ci ha dato l'errore di Proibita. Non hai il permesso di accesso, bla, bla, bla, su questo server. Tutto ciò che significa veramente è che le autorizzazioni che sono stati attaccati a qualsiasi pagina che stavi tentando di accedere non erano aperte a voi. Così più o meno, chmod è il modo in cui siamo in grado di modificare tali autorizzazioni del sistema per dare a tutti, l'utente, il gruppo, o il mondo, o qualsiasi combinazione di quelle accesso a determinati file, directory, nulla di veramente, qualsiasi tipo di sistema un sistema operativo. Quindi, se qualcuno di ragazzi hanno computer se si sente come seguire insieme a me oggi, totalmente sentitevi liberi di scrivere le cose solo in. In caso contrario, si può semplicemente appendere fuori. Quindi ho intenzione di tirare realmente il mio terminale al momento. Così il comando da eseguire chmod, o almeno solo per elencare i permessi della directory del file, è solo ls-l. Come si può vedere, un gruppo di roba apre maggior parte dei quali è importante a noi il lato sinistro qui. Voi ragazzi vedere un mucchio di rs, ws, 1 /. Già. Questi sono essenzialmente solo tutti i permessi dei file per spiegare che cosa alcune directory e file all'interno del sistema hanno. Quindi torniamo a il punto di potere qui. Quindi, oltre ai nomi di file come voi ragazzi può vedere sulla destra, stiamo cercando di vedere essenzialmente solo la colonna a sinistra. Quindi, oltre a solo i nomi dei file, abbiamo può vedere i permessi dei file, la loro gruppo di proprietari, il nome del gruppo, la data che il file è stato modificato, eccetera. Si può vedere un sacco di cose usando chmod. Quindi il modo che abbiamo letto chmod è che la prima lettera abbiamo praticamente ignoriamo in termini di permessi di lettura. La prima lettera ci dice proprio quello tipo di sistema che stiamo accesso. d, in questo caso, è un cartella o directory. Così sappiamo che la mia area di lavoro attualmente sezione sette era una directory. E poi si vede a tre triadi, essenzialmente solo tre gruppi di tre caratteri. E si può pensare di ciascuno come un po '. Quindi avete appena tre serie di tre bit, nove bit in totale. Li trattano in gruppi di tre. Così il primo gruppo di tre è sempre le autorizzazioni degli utenti. Il tuo secondo gruppo di tre è sempre le autorizzazioni di gruppo. E la tua terza serie di tre è sempre come il mondo, le autorizzazioni ovunque. Quindi credo che la facile domanda da porsi è che cosa è la differenza tra l'utente e il gruppo. La differenza principale tra l'utente e il gruppo è che un utente è proprio lei personalmente accedendo qualunque cosa sia adesso. Un gruppo può essere se si dispone di più utenti su un computer, per esempio. Tutti loro possono essere trattati come un gruppo. E poi il mondo è solo il mondo, tutti. Così possiamo vedere più avanti come possiamo modificare quelle in autorizzazioni diverse. Così più o meno, siamo andando a concentrarsi ancora sulla parte sinistra, dove per la directory CS50 vediamo drwx, dove la r significa solo che è leggibile. Il w significa solo che è scrivibile. E poi le x solo significa che è eseguibile. Si potrebbe pensare che tipo di non ha senso. Dovrebbe essere posta. Ma x realtà tipo di funziona un po 'meglio, perché si può ricordare meglio. Quindi i tre tipi di cose che si può fare, è possibile leggere un file, si può avere il permesso di scrivere un su file, o si potrebbe avere il permesso di eseguire un file. E così il modo in cui abbiamo effettivamente rappresentano quelli in bit è il numero 4, 2 e 1. Quindi tutto ciò che è leggibile sia rappresentata dal numero di 4. Tutto ciò che è scrivibile è rappresentato da 2. E tutto ciò che è eseguibile come rappresentato dalla 1. Quindi, in questo senso, possiamo anche rappresentare queste numbers-- Ciao, benvenuto, in un modo diverso. Scusate. Prima di tutto, ho intenzione di chiedere scusa a nome di tutti entra la classe ora. Ho dimenticato caramelle oggi. Mi dispiace che sono un fallimento questa settimana di Halloween. Porterò doppio della quantità di caramelle prossima volta per fare per essa. Ma comunque, mi dispiace su che ragazzi, mi dispiace. Quindi il modo che possiamo realmente ingresso sul nostro comando l'argomento è che può fare le autorizzazioni gruppo oblique chmod, dove il gruppo è solo ciò che gruppo stiamo cercando di cambiare. E i permessi sono tutto ciò che vogliamo aggiungere. Così, per esempio, la e aggiunge autorizzazioni, e la sottrazione toglie autorizzazioni. E il tipo di gruppo abbiamo un nostro per tutti, u per gli utenti, g per gruppi, oppure o per gli altri. E 'un po' astratto in questo momento. Ma andiamo oltre un paio di esempi proprio per dimostrare questo rapido reale. Tutto bene su questo scivolo, quindi posso andare avanti? Raffreddare. Così, per esempio, rwx. Prima di parlare di ciò che rappresenta, prima di tutto ciò che rwx significa? Se si vede che questa determinata file ha permessi rwx, cosa vuol dire la persona potrebbe essere in grado di fare? PUBBLICO: lettura, scrittura ed esecuzione. ANDI PENG: Sì, esattamente. È possibile leggere scrivere ed eseguire. Poiché tutti e tre questi personaggi sono presenti. Quindi, se andiamo avanti e parliamo su questo in termini di bit, la rwx può anche essere rappresentato come 700. Perché, come si può vedere in qualsiasi sorta di permesso di directory di file, ci sono tre triadi. In questo caso, solo la prima triade ha qualcosa lì. Quindi, in questo caso, la r è 4, la w è 2, ed il x è 1. Se si aggiungono quelli insieme, è 7. E così se si converte per binario, è 700. Perché 7 è la prima triade. 0, non c'è niente presente nella seconda terna. E poi non c'è nulla presenti in la terza triade, quindi questo è un altro 0. Così nello stesso senso, un gruppo di triadi può essere rappresentato solo in bit, solo in binario pure. Così 700 significa la stessa cosa come rwx ------ in termini di autorizzazioni. Ognuno chiaro? Raffreddare. E così chmod 111 darebbe che le autorizzazioni per il file? Darvi ragazzi una coppia secondi per convertire questo. Ricordate, la prima triade è per l'utente. La seconda triade è per il gruppo. E la terza triade è per tutti. E così chmod 111 avrebbe dato che tipo di autorizzazioni e per chi? Prendete un paio di secondi a pensarci e tornare indietro. Già. PUBBLICO: Così tutti possono eseguirlo. ANDI PENG: Yup, esattamente. PUBBLICO: Ma nessuno sa né leggere né scrivere. ANDI PENG: E sentitevi liberi per spiegare a tutti come sei arrivato a questa conclusione. PUBBLICO: Beh, per l'utente, il di gruppo, e il mondo, è tutto uno, che è il codice eseguibile per. ANDI PENG: Sì, esattamente. Quindi 1, in questo caso, sappiamo soltanto che questo è il codice eseguibile. Perché la lettura è di 4. La scrittura è 2. E l'eseguibile è 1. Così è tutti e tre triadi sono 1, che significa che per il mondo, per l'utente, e al gruppo, sono tutti eseguibili. Tutti bene con quello? OK. E così il secondo modo che possiamo realmente scrivere questo anche è che si potrebbe solo fare chmod un plus x. una si intendono tutti o tutti. Il plus significa dare autorizzazioni a. E poi la x significa eseguibile. Quindi ci sono due comandi sono in realtà identici. Quindi, se si desidera eseguire questo nel terminale, fate chmod 111, nome directory o al file. Oppure si può fare chmod un plus x, il nome del file della directory. La stessa cosa, solo un modo più semplice, forse, per alcuni di rappresentare o di cambiamento i permessi dei file. Ognuno OK con chmod prima di passare? Raffreddare. Così ora stiamo andando a testa in un alcune diapositive di concetti molto astratte che io sono più o meno andando a brezza attraverso. Ed è del tutto OK se si non capisco tutto. Anche adesso, io ancora non lo faccio davvero comprendere completamente tutto. Ma è più di ottenere la comprensione di livello superiore di come alcune di queste cose funzionano. Quindi stiamo andando a parlare rapidamente sul protocollo TCP / IP, che è appena Transmission Control Protocollo taglio su Internet Protocol. Ricordiamo da conferenza, David, ti ha insegnato l'esempio dove aveva passare le note in una busta fino a come la parte superiore della sala conferenze? Così nella auditorium della scuola legge David ha dimostrato essenzialmente come il protocollo TCP / IP funziona in il senso che tutto è sia un mezzo per assicurare che i dati è stato consegnato attraverso un server o su Internet. Quindi, nell'esempio della busta e il messaggio, l'utente al fine poteva vedere che, oh, avevo bisogno di ricevere quattro pacchetti di informazioni. Ma in realtà ho solo ricevuto tre. Ciò significa che devo mancare uno. E non è stato consegnato. E così il protocollo TCP / IP su Internet, attraverso il computer e il server, fa la stessa identica cosa. Tutto ciò che fa è specificare un quadro in cui una perdita di dati i pacchetti possono essere risentiti e ricevuti. Come su internet quando si sta cercando per accedere ai file online o inviare file il tuo amico o guardare web browser, migliaia e migliaia di miliardi e miliardi di byte informazioni sono trasferiti per millisecondo. Ed è molto, molto confusa. Ed è davvero difficile in realtà sapere ciò che è stato inviato e ciò che non è stato inviato. E così il protocollo TCP / IP specifica solo un quadro coerente in cui il vostro web il browser e il server può sorta di comunicare con l'altro, solo fare in modo che i pacchetti siano tutto qui e niente di perduto e tutti i dati che avete richiesto è in realtà corretta visualizzazione. Ognuno OK sul proprio questo molto breve alto livello capito? Raffreddare. Allora stiamo andando a spostare a parlare di HTTP, che è solo Hypertext Transfer Protocol. HTTP, tutto è è tutto ciò che qualsiasi pagina o il file è accessibile sul tuo sito web, il server restituisce un HTTP codice di stato in risposta alla richiesta assicurandosi che sia, oh, questa richiesta ha attraversato. E tutto di visualizzare correttamente. Oppure, oh, no, 404. Qualcosa è andato storto. Oh, non riesco a visualizzare. Tutto ciò che è è che qualunque si sta cercando di accedere, utilizzare come l'utente sta tentando di accedere, sulla internet-- appena assicurandosi che hai con successo accessibile qualunque cosa fosse o no accedere con successo qualsiasi cosa fosse. E così lo stato HTTP codice appena fornisce un mezzo per essere in grado di sapere se o non ha avuto successo o meno. Così, per esempio, un esempio di richiesta. Potete vedere qui è di solito in genere quattro linee. Abbiamo un HTTP GET 1.1, che è solo l'URL della richiesta metodo, il protocollo la versione, il nome del campo, e il valore del campo. Quindi nessun bisogno di completamente memorizzare nulla qui. Solo tipo di familiarizzare te stesso con come questi sembrano. In questo esempio, il metodo di richiesta URL è proprio qualunque richiesta si sta inviando al server. Come, ehi, assistente, ho molta voglia di accesso bla, bla, bla, pag HTTP. La versione del protocollo è proprio qualunque versione tuo host o server utilizza per accedere alle informazioni. Il nome del campo è il sito o URL che si sta cercando di accedere, in questo caso, www.apple.com. E il valore del campo è solo tipicamente nome, valore. E può essere qualsiasi tipo di combinazione di lettere o numeri o qualsiasi altra cosa. Quindi una richiesta tipica, in modo da ciò che il computer in realtà invia al server che dice, hey, si sa che cosa ho bisogno di questo visualizzata, questo è il tipo di richiesta che in realtà ricevono. Una risposta esempio di ciò che il server potrebbe rispedire a voi sarebbe più o meno la stessa cosa, se non con un codice di stato nella parte superiore. Così 200, 2 0 0 è sempre il codice di stato OK. Come, OK, questa richiesta ha attraversato. Siete stati in grado di accedere tutto correttamente. La vita è bella. La vita va bene. Tutto è totalmente buono. E così questo dice solo il browser e il server, ehi, buon tutto. Ho ottenuto tutte le informazioni che mi servono. Raffreddare. Ma il problema è talvolta sorgono dei problemi quando si have-- durare penso Ho parlato di duplicati. Hai meno buone risposte. Così, per esempio, 404 è la pagina non trovata. A volte hanno un accesso Proibita. Avete vari altri codici di stato che io sono Assicurati di visto tutti quando si è cercando di fare ricerca su internet. E il browser ti dà la, no, non può accedere. E tu sei come, bene, merda. Quindi, solo più o meno, non c'è alcuni codici di stato piuttosto comuni. Forse familiarizzare con quali quelli sono. Quello che più divertente Io credo di aver mai sentito di-- se vi capita di cercare tutti on-line, per qualche motivo c'è in realtà un codice di stato reale chiamato 418 Sono una teiera. Ho cercato su google dove il origine di questo era da. E a quanto pare uno pesce d'aprile ' Giorno un paio di decenni fa, qualcuno ha pensato che sarebbe stato esilarante per creare un nuovo codice di stato chiamato 418 Io sono una teiera. Legittimamente, il nome di questo codice viene chiamato io sono una teiera. Io dimenticare ciò che la pagina è necessario andare a fare effettivamente questo display. Ma a quanto pare, si può effettivamente ottenere un codice di stato sono una teiera in qualche modo attraverso il fare qualcosa. Quindi ci sono centinaia e centinaia di codici di stato. Alcuni di loro fanno più senso rispetto ad altri. Ma praticamente solo familiarizzare te stesso con le più comuni. Il corpo dell'entità richiesta è corto e robusto, a quanto pare. Così a volte ci sono più errori spaventosi di quanto mi sono una teiera. Ma questo è quello che immagino è sorta di spera di colpire. Ma io non credo che si farà. Tutti bene sul proprio stato i codici, le richieste, i processi, il processo che le informazioni viene consegnato correttamente? Così ora stiamo andando a transizione in una parte divertente della sezione di oggi, dove si parla un po 'di HTML. HTML, tutto è HyperText Linguaggio con marcatori. E 'solo la lingua standard utilizzato per creare tutti i web pagine su internet. Quindi, qualsiasi pagina web, qual è la tua pagina web preferita? Qual è la tua pagina web preferita? PUBBLICO: [incomprensibile]. ANDI PENG: Siamo spiacenti? PUBBLICO: Tumblr. ANDI PENG: Tumblr. Così Tumblr è scritto in HTML. E così faremo effettivamente andare attraverso e giocare con alcune di queste cose più tardi. Praticamente tutto quello che si bisogno di imparare, di conoscere, per scrivere codice HTML si può probabilmente solo Google su internet. HTML, non è un programma come C dove è possibile creare le variabili e fare cose interessanti con esso. E 'più di solo, oh, è così che vogliono che le cose appaiono sul mio sito web. E sto solo andando a mettere in. E sta andando per lo stile di esso. Così HTML, in un certo senso, è proprio come un linguaggio di formattazione o un modello. E 'molto più facile. E 'molto più facile da imparare, molto più facile da scrivere a che la programmazione tipica lingua, molto semplice, molto facile accessibile e accogliente. Quindi stiamo effettivamente andando a giocare intorno, scrivere le nostre pagine di oggi. Ma prima di iniziare, voglio solo andare oltre alcune brevi best practice. Perché HTML è tale un facile lingua e perché anche se si fa un paio di cose sbagliate, a volte può non notare, Vogliamo fare in modo che siamo in realtà aderente alla nostre best practice per assicurarsi che le cose che potrebbe essere andare in giro, ma non sono sempre intenzione di non andare a destra assicurarsi che stanno ridotti al minimo. Così più o meno, assicurarsi i tuoi chiusura tutti i tag quando si scrive in HTML. Se si sta aprendo un corpo, assicuratevi di essere chiudendolo con un corpo da qualche parte. Si vuole fare in modo che il vostro La pagina web di convalida utilizzando quello che chiama il W3 Validator. Si può solo Google che on-line, e c'è un link ad esso. E poi vuoi separata HTML, che è il vostro linguaggio di markup dal vostro stile, che è il linguaggio CSS che David dimostrato che siamo anche andare a giocare un po 'con lezione. Raffreddare. Quindi, ogni volta che si desidera eseguire HTML sull'apparecchio CS50, stiamo andando a correre un programma chiamato apache, che tutto è solo un costruito in web server che tutti in CS50 ha accesso. Noi lo chiamiamo apache50 solo perché siamo Per chiamare tutto 50 in CS50. Quindi il modo che si avvia il web CS50 server è digitando sul vostro comando Linea apache50 inizio punto. E se si desidera terminare in qualsiasi tempo, non apache50 finisce alcun punto. E basta invio. E dovrebbe essere a capo di qui a breve. Sì. Quindi sono solo per andare rapidamente su un esempio di una pagina web molto breve. E stiamo andando a spendere come 10, 15 minuti a giocare intorno a scrivere le nostre pagine web. OK. Così qui in IDE-- Tutti possono vedere che? Non proprio. Qui, io lo zoom in. Ho appena ricevuto questa breve template qui con nulla di fatto in essa. Stiamo solo andando a scrivere velocemente un programma di HTML in cui abbiamo appena dire ciao al mondo. Così stessa cosa come in C, ora siamo solo andando a farlo in formato HTML. Qualcuno ha voglia di realtà solo provare a dare a me la prima cosa che si avrebbe dovuto mettere in un documento HTML? Già. PUBBLICO: le parentesi, il [incomprensibile]. ANDI PENG: Sì. Quindi, qualcosa che è molto unica per HTML che abbiamo in genere tradizionalmente non incontrare in altro comando linguaggi di programmazione a livello di linea è che in realtà a specificare il tipo di file che questo sta per essere nella parte superiore del nostro codice. Quindi, in questo instance-- credo questo è il comando giusto, giusto? Sì. Nella parte superiore, si vuole solo includere botto DOCTYPE html tra parentesi solo a dire il computer, ehi, guarda fuori. E documento HTML è in arrivo. E allora come vogliamo per iniziare il nostro file? Se vogliamo solo dire ciao, hanno un pagina web che dice ciao al mondo, Come possiamo fare per costruire questo? In realtà, torniamo a Google. E possiamo effettivamente fare questo. Sì. Ci siamo. Così HTML. Come potete vedere, il mio browser è in realtà styling automaticamente questo per me. Stessa cosa come in C, quando si creare una parentesi graffa aperta, il browser automaticamente aggiunge in una stretta parentesi graffa. Per fortuna, il nostro IDE ama fare questo per noi. Così ora siamo in grado di tipo di tipo l'inizio di un tag, e sta andando a dirci sempre a ricordarsi di digitare la fine del tag. Credo che questo debba essere capitalizzati. E poi vogliamo aggiungere, sempre, una testa in cui è il titolo. Vogliamo solo chiamare forse questo ciao, e poi il corpo. E ci si va. Che è in realtà il nostro documento HTML. Quindi il modo che qualsiasi documento HTML è sempre in stile dentro-- stessa cosa con int void main. Hai sempre voglia di avere HTML un tag di apertura e chiusura nella parte superiore e inferiore del vostro codice. Volete avere una testa dentro di che contiene il titolo, solo quello sta per visualizzare la scheda del tuo sito web pagina e quindi un corpo all'interno del quale effettivamente visualizzare il contenuto di quello che vuoi fare. Quindi, se si voleva correre in realtà questo, ho intenzione di zoom indietro. Si può effettivamente iniziare apache50 iniziare a puntino. Raffreddare. E così come si può vedere, ora questo link è apparso. Dice il tuo sito è ora disponibile ad un certo link qui sotto. Quindi tutto il nostro IDE ha done-- Non IDE, sorry-- sì, il nostro IDE ha fatto è creare una rete collegamento su cui tutte le nostre pagine web si può accedere sul server. Quindi, diamo uno sguardo qui. Facciamo clic su questo, andare a hello.html. E si vede una molto semplice pagina web per ciao mondo. OK. Stiamo davvero andando a solo avere everyone-- sì, che cosa succede? PUBBLICO: Ho una domanda di base. ANDI PENG: Yup. PUBBLICO: Come si fa a salvare il file come HTML? ANDI PENG: Sì. Quindi, se dovessi creare un nuovo file, se faccio Nuovo file, Untittle, se lo faccio, section.html, boom, questo è tutto quello che devo fare. PUBBLICO: [incomprensibile]? ANDI PENG: No. PUBBLICO: [incomprensibile]. ANDI PENG: No. PUBBLICO: [incomprensibile]. ANDI PENG: Sì. Praticamente, l'estensione sul il file che è all'interno del vostro IDE, che dice il computer, che dice al browser, ehi, guarda fuori. Questo sta per essere il codice scritto in questa lingua. Così, per esempio, in Microsoft Parola, che cosa fare tutti i documenti di Word terminare con, quale estensione? .doc o .docx, giusto? Tutto ciò che fa è specifica per il sistema operativo, hey, hai un documento di Word in arrivo. Aprilo con Word. Stessa cosa con i file PDF. Si sa, oh, ho bisogno di aprire questo file con Adobe Reader o Adobe Acrobat. E così le estensioni operano il così come nel vostro computer. Se si specifica la pagina di codice di essere chiamato HTML, allora sa, oh, hai il codice HTML. Ho intenzione di trattarlo come codice html. Quindi è super intelligente in questo senso. Così tutti, prendiamo come 10 minuti e solo creare i nostri siti web. Aggiungiamo nelle cose belle. Sentitevi liberi di dire quello che vuoi. Voglio solo fare in modo che i server di tutti sono in esecuzione correttamente prima che ti liberiamo nel pset. Perché se i server non correre per il pset, che sarà molto, molto male. Sto solo andando a galleggiare intorno e vedere quello che tutti sta lavorando. Come sta andando? PUBBLICO: Ho appena acceso il mio computer. ANDI PENG: Va bene. PUBBLICO: [incomprensibile]. ANDI PENG: Basta vostro IDE. Già. PUBBLICO: [incomprensibile]. ANDI PENG: Va bene. PUBBLICO: [incomprensibile]. ANDI PENG: Totally bene. Sono tutti l'accesso OK loro web server? È apache50 esecuzione OK? Penso che in alcuni le altre sezioni, abbiamo avuto problemi con non le persone essere in grado di accedere al server. Già. Quindi basta eseguire apache50 spazio di inizio del periodo di spazio. PUBBLICO: [incomprensibile]. ANDI PENG: Yup. Buona? PUBBLICO: [incomprensibile]. ANDI PENG: Oh, OK. Quindi stai suppone di avere uno spazio. Così apache50-- PUBBLICO: ho fatto. ANDI PENG: spazio --start. PUBBLICO: Oh, lo spazio di punti. ANDI PENG: Yup, spazio puntino. Ci si va. Allora se avete una pagina HTML creata, allora si può solo andare direttamente per il collegamento che specifica. E si dovrebbe essere in grado di accedervi. Ognuno stato in grado di accedere ai propri pagine web OK? PUBBLICO: [incomprensibile]. ANDI PENG: Oh, va bene. PUBBLICO: [incomprensibile]. ANDI PENG: Sì. Penso che si può effettivamente aprire è all'interno del browser, il browser e non solo il browser IDE. Sì, penso che se si copia e si incolla. PUBBLICO: E poi come facciamo a spegnerlo? [Incomprensibile] ANDI PENG: Sì, si fa apache50 smettere senza periodo. Sì. PUBBLICO: [incomprensibile]. ANDI PENG: Senza periodo. Già. Ci siamo. Sì. Stiamo creando le nostre pagine web. PUBBLICO: Oh, fresco. ANDI PENG: Sì. PUBBLICO: Ho una domanda. Così apache 50-- ANDI PENG: 50, sì. PUBBLICO: [incomprensibile]. ANDI PENG: Che cosa? Quello è strano. Vedere, che era una sorta di questione che stava accadendo prima. OK. Vedermi dopo la sezione. Perché stiamo avendo un po ' problemi con il server. E si vuole fare Assicurarsi che il server sia in esecuzione prima di avviare il pset. Perché si sta andando a bisogno. Già. C'è qualcun altro che non è stato in grado di ottenere il loro server per iniziare? Per quelli di voi che vogliono aggiungere stile aggiuntivo per le vostre pagine web, possiamo effettivamente fare quello che Davide fece in conferenza pure, che è di creare uno stile addizionale foglio, che è un puntino CSS, Cascading Style Sheet e in realtà solo aggiungere in. Così, per esempio, ho appena creato praticamente quasi l'esatto stesso David ha fatto in conferenza. Si può praticamente solo fare corpo. Hai ciò che sono chiamati tag in cui è possibile applicare a qualunque sezione IDE vuoi all'interno del tuo effettivo alla pagina HTML. Così il corpo della pagina, può fare testo centro align. E poi ti creativo un top tag chiamato dentro di cui voglio queste cose accadere, assegnare una dimensione del pixel più grande per il carattere. Voglio che il peso del carattere di essere audaci. E voglio il colore essere blu, solo arbitrario valori che ho deciso di scegliere. Posso creare un altro tag chiamato mezzo. Dimensione del carattere, lo rendono un po 'più piccolo. E poi posso creare un altro tag chiamato fondo dove voglio la dimensione del carattere per essere ancora più piccolo ancora. E così più o meno questo è solo esempio di codice sorgente o sorgente fogli di stile che è molto facile da solo Google. Se dici, oh, voglio che il mio carattere essere in corsivo e di colore verde scuro, si può probabilmente Google, e poi vi dirà i tag o gli ID appropriate per creare. E così il modo in cui si sarebbe in realtà tipo di avere questo in un documento HTML o usarlo è tutto quello che hai di fare qui è a capo aggiungere un link al foglio di stile. Così si può semplicemente collegare uguali href qualunque sia il nome del foglio di stile è. E poi il rapporto è un foglio di stile. Quindi all'interno di qualsiasi documento HTML, purché si include questa scheda CSS punto, si dovrebbe essere in grado di accedere e hanno le proprietà lì. Così, per esempio, qui ho solo creare un'altra pagina web esempio. Questo è il benvenuto alla sezione CS50 Martedì dalle 02:00 alle 03:30 con me. E poi ho aggiunto una bella immagine che noi potenzialmente dovremmo essere in grado di vedere. Quindi, se si dà un'occhiata qui, se si va a style.html, abbiamo creato una pagina web con i gattini. Perché gattino sono impressionanti. In modo da aggiungere l'immagine è solo img Link SRC. Praticamente, se c'è qualsiasi tipo di funzione che si desidera aggiungere alla vostra website-- quindi diciamo, si desidera aggiungere un menu o una barra di ricerca o come un image-- solo Google come fare. E basta plop in quel formato. E si può solo abbastanza tanto basta aggiungere in. E 'davvero, davvero facile. Stiamo creando il nostro le pagine web in questo momento. Se lo desidera-- PUBBLICO: [incomprensibile] ANDI PENG: Siamo spiacenti? PUBBLICO: [incomprensibile]. ANDI PENG: Oh, il div è solo una divisione dicendomi che, oh, ho una certa sezione mezzo in cui sto applicando mio tag CSS, e quindi la mia altra divisione con il fondo. Questo è tutto ciò che si sta dicendo. Perché è bello mantenere belle cose in ordine, in modo che il programma sa esattamente come per l'esecuzione. E penso di poter copiare incolla questo nel mio browser reale così. Si dovrebbe andare bene. Già. Sìì. Quindi, se tutti vogliono solo provare a creare una pagina web, daremo altri due o tre minuti. Voglio solo essere sicuro i server di tutti sono in esecuzione e tutti hanno un idea di come farlo. Se voi volete togliere i computer. Continua a non funzionare? PUBBLICO: Io sono solo [incomprensibile]. ANDI PENG: Forse provare aggiornare 50 pure. Già. PUBBLICO: [incomprensibile]. ANDI PENG: Sì. Quindi il modo che si inizia un nuovo Web server su l'IDE è solo fare apache50 avvio spazio spazio puntino. Volevo solo fare in modo i server di tutti sono in esecuzione su OK. PUBBLICO: Qui, sul terminale? ANDI PENG: Sì. PUBBLICO: [incomprensibile]. ANDI PENG: Apache. In realtà, penso che tu sia in esecuzione qualcosa di già. Sì, sei in realtà esecuzione di un server diverso. Sì, sei bravo. Finché che sta lavorando, tu sei OK. PUBBLICO: OK. ANDI PENG: Ce ne sono due modi per eseguire i server. Quindi, fintanto che uno dei modi sta lavorando, è tutto a posto. Prenderemo un altro minuto solo al tipo di finire gli ultimi ritocchi di qualsiasi Web page voi ragazzi volevano fare. È tutti lavorando a proposito? I server di ognuno sono corsa inoltre per il vostro? Troveremo che fuori. E HTML di abbastanza semplice. Quindi penso che siamo tutti buoni. Già. Ritornerò. PUBBLICO: [incomprensibile]. ANDI PENG: OK. PUBBLICO: Quindi è solo ha iniziato a caricare. ANDI PENG: Non preoccuparti. Così HTML, c'è il codice sorgente che sarà online dopo la sezione. Inoltre, David ha un intero grappolo online. Solo tipo di sguardo su di esso per vedere come sono scritte le pagine HTML. E 'abbastanza facile. Tutto ciò che non lo so, è praticamente molto solo Google e si sta bene. Voglio solo fare in modo che i server sono in esecuzione. PUBBLICO: Lo fa spesso? ANDI PENG: Non è mai successo a me. Non sapevo che potrebbe anche ibernazione. PUBBLICO: [incomprensibile]. ANDI PENG: Penso everyone-- la mia non è mai ibernato prima. E io non so perché. È strano. PUBBLICO: [incomprensibile]. ANDI PENG: è tuo letargo? PUBBLICO: [incomprensibile]. ANDI PENG: Sì. PUBBLICO: Va bene. Quindi una volta che è aperto. ANDI PENG: OK. Ci occuperemo di qualche server problemi dopo sezione. Si dovrebbe andare bene. Anche se, si vuole fare in modo che si farli risolto prima di partire. Perché se del server non è in esecuzione, allora sei Non sarà in grado di fare il pset, come ogni parte del pset. Così si vuole fare in modo che che sta lavorando. Raffreddare. Tutto ok. Dire addio gattini. Ho trascorso molto tempo alla ricerca di quella foto kitten da indossare. Così, in ogni modo. PUBBLICO: [incomprensibile]. ANDI PENG: Siamo spiacenti? PUBBLICO: [incomprensibile]. ANDI PENG: Penso che sia sul sito web. Come le specifiche? PUBBLICO: [incomprensibile]. Penso che la specifica è solo on-line in sette settimane. Mi pare si chiami pset6, anche se siamo sulla settimana di sette, che è un po 'di calcolo. PUBBLICO: Ma voglio dire, se si consiglia di guardare at-- se voglia di tirare su la nostra versione di il sito web del nostro sever? Così come server.c è il pset, giusto? Se si vuole guardare a questo, come come controlli fuori? ANDI PENG: Oh, così in realtà il pset, tutti stiamo facendo qui è implementing-- qui, Vado oltre brevemente. Quindi, per tutti che ha appena ottenuto alla sezione, voi siete fortunati. C'è molto poco materiale per coprire in realtà oggi. Sto solo andando a trascorrere il prossimo 20 minuti andando oltre pset aiuto. Perché c'è un po 'di utile funzioni che aiuteranno la vostra vita. E si spera, saremo fuori di qui in come 20 minuti. OK. Così pset7 è sbagliato. Anche se siamo su settimana sette, in realtà è pset6. Cambierò quello. Tutto quello che stiamo facendo in pset6 è la creazione di un server web. Che suona eccellente spaventoso. E soprattutto per chi di voi che hanno già guardato il codice di distribuzione, c'è un sacco di codice, un sacco di codice. Ma è del tutto OK. Poiché la Nitty Gritty parte realmente di creare il server è fatto da noi. Tutto quello che sei veramente chiesto a fare in questa pset è solo per fare qualche manipolazione delle stringhe in file di I / O. In realtà è come abbastanza semplice. Quindi, quando si scarica prima che-- che qui ha effettivamente già scaricato il pset e dato un'occhiata? Tutto ok. Già. C'è come 500 linee di codice che si sta andando ad essere come, che cosa succede? E questo è tutto bene. Assicurati di guardare i walk-through. Perché David e- io non lo so. Io non credo che sia Zamyla, questo uno. Ma credo che qualche altro walk-through sono abbastanza utile in termini di solo farti sapere quello che sta succedendo all'interno del codice. Ed è del tutto OK. Poiché le quattro funzioni che sei ha chiesto di attuare avere realmente nulla a che fare con il server effettivo. Tutto quello che dovete fare è solo analisi diverse stringhe, ricerca attraverso le stringhe, per assicurarsi che le cose stanno facendo quello che si suppone di fare. Quindi, in questo senso, ci sono alcune funzioni molto, molto utili, soprattutto per la stringa manipolazione, che dovremmo tutti vado oltre che ho pensato di essere molto utile per voi ragazzi per imparare prima di tentare l'pset. E sono tutti contenuti all'interno della vostra libreria string.h. C'è probabilmente più utile funzioni non ho incluso qui, perché non sia mai li uso o forse io non lo sapevo che esistono. Sentitevi liberi di sfogliare student.h. Perché ci sara 'un sacco di funzioni che sono molto utili. Così i sei che io uso il più a mio pset quando stavo facendo che la scorsa settimana erano strtok, strchr, strrcher, strstr, strcasecmp, e strcpy. E così le ultime due possono sembrare abbastanza familiare alla maggior parte di voi. Caso str confronto, tutto ciò che fa è confrontare stringhe per controllare loro per l'uguaglianza, con custodia. E strcpy solo copie una stringa in un buffer. E così quei due dovrebbero sembrare molto familiare a voi ragazzi, a questo punto. Perché abbiamo usato loro un sacco, soprattutto per gli ultimi pset. Ma i primi quattro forse non avete visto fino ad ora. Ma ho intenzione di andare a piedi attraverso di loro. Perché stanno andando a fare la vostra vita davvero, davvero facile non for-- facile, ma molto più facile per questo prossimo pset. OK. Così char * strtok, questa è la funzione definizione per questa funzione conteneva all'interno della stringa, h libreria. Se le viene somministrato un ingresso di char * stringa, che è solo una stringa, o un char costante * deliminator, delim in breve, tutto ciò che sta facendo sta rompendo il più grande stringa in una serie di ciò che chiamiamo token separati da un certo valore. Quindi, in un certo senso, se dovessi dare si section.7.php, questa è una stringa. In modo che sarebbe se dovessi passare in questo come il mio str, il mio char * str, se il mio deliminator era punto, tutto questo vorrei fare è cercare attraverso stringa. E la prima volta che incontra un punto, sarebbe solo tornare al puntatore per l'ultimo token trovato nella stringa prima di questo. Quindi sarebbe andare a destra qui. E sarebbe solo darmi 7.php. E se dovessi chiamare il funzionare ancora una volta, mi avrebbe dato solo il .php. E così tutto questa funzione sta facendo è abbattere la stringa più grande in stringhe più piccole a seconda su quello che stai cercando. Così per esempio, in il vostro sguardo in su la funzione se si vuole guardare a ciò che alcuni caratteri vengono su o se i punti accadono o estensioni accadere, questa funzione potrebbe essere abbastanza utile. Già. Nessun problema. In questo modo tutto essere-- sì, che cosa succede? PUBBLICO: Quindi, in prima linea, se stessimo usando questo esempio, cosa avremmo inserire in questo? ANDI PENG: Sì. Si potrebbe chiamare un strtok delim corda virgola. E la stringa è uguale a section.7.php. E allora sei delim potrebbe essere pari a dot solo. PUBBLICO: OK. ANDI PENG: Sì. Proprio così. Tutte queste funzioni sono abbastanza simile quando andiamo attraverso di loro. Hanno appena fanno cose leggermente diverse. Ma sono tutti di andare a rendere la vita molto più facile. Seconda funzione, questo è come super, super, super importante, è the-- reggere. Oops. Ricerche strchr per la prima occurrence-- realtà, sì. Strchr è la funzione che Io sicuramente appena andato oltre. Quindi ignorare quello che ho detto per la prima funzione. In realtà è chiamato strchr. Quindi, che cosa sarebbe successo qui è se è stata data una stringa in un char c, sarebbe solo dare voi qualunque cosa fosse. Già. Così pensare ad esso come str, che è una stringa, e chr come char. Quindi tutto quello che sta cercando di fare è cercare per cui un char è all'interno di una stringa. E così cerca la prima occorrenza del carattere c nella stringa str. PUBBLICO: [incomprensibile]. ANDI PENG: Yup. E poi se non ha trovato esso, sta andando a restituire NULL. Quindi, qualcosa che sta per essere molto utile per voi ragazzi a fare il pset Se, per esempio, siete stati alla ricerca di un estensione come un .docx per una parola documento o un .pdf per un documento PDF, è possibile tipo di usarlo per guardare per tutto ciò che è in seguito ogni volta che vedi un punto, giusto? E così più o meno, se si eseguire che attraverso la funzione, se restituisce NULL, poi si sa che non ha trovato che puntino, che significa che questo chiaramente non è un'estensione di file valida. Oppure, se restituisce qualcosa, poi si sa sta andando a restituire tutto quello che è in realtà dopo l'estensione. Così quelli di voi che hanno avuto iniziato a cercare attraverso di ricerca e analizzare, questa funzione di andando a essere super utile. Quindi stiamo effettivamente andando per dimostrare di utilizzare questo. Perché non provare a scrivere un ragazzi funzione bool frase char * s che semplicemente restituisce true se s è un frase e false altrimenti. Così Suggerimento, si sta andando utilizzare probabilmente strchr. O basta cercare nel stringa per un certo carattere. E così in una frase, ciò che separa una frase da un non-frase, che carattere specifico? PUBBLICO: Uno spazio. ANDI PENG: Uno spazio, giusto? E così quello che facciamo probabilmente andando a voglia di fare all'interno di questa funzione qui? PUBBLICO: [incomprensibile]. ANDI PENG: Stiamo andando a voler strchr stringa per l'aspetto dello spazio. Perché se restituisce qualcosa, poi sappiamo che questo deve essere una condanna. Ciò significa che dobbiamo avere uno spazio in questa stringa. Se non c'è spazio, allora sappiamo che, ehi, immagino che non è una stringa. E 'probabilmente solo un tempo molto lungo termine. Così ti darò un paio ragazzi minuti per scrivere questa funzione. Già. PUBBLICO: Hai ricevuto questa stringa dall'utente? ANDI PENG: Sì. Quindi questa è solo una funzione. Quindi immaginate all'interno della vostra funzione principale già have-- andiamo qui. OK. Così ho scritto questo programma dove Ho la mia funzione principale dove Ho appena creato due stringhe. Il primo è Ciao, il mio nome è Andi-- chiaramente, una frase. Il mio secondo è solo Andi, chiaramente non condanna. E così io sto correndo sia di quelli stringhe attraverso questa funzione. Voglio che voi ragazzi a scrivere sentenza freddo. E sto memorizzare quei valori, e poi basta stamparli. Quindi pensare che l'utente è andando a passare in una stringa. E poi si sta andando a essenzialmente capire se si tratta di una frase o no e restituire true o false di conseguenza. Se voi volete dare una pollice in alto o testa a testa, testa cenno del capo, è chiunque è pronto per iniziare questo, che sarebbe stato bene. Forse come 30 secondi? Tutto ok. Vediamo se si può provare scrittura di questa funzione. Così pseudo coding-- Sto solo andando a tipo di attraversare questo momento. Praticamente, sappiamo che la funzione che abbiamo bisogno di usare. Stiamo andando a chiamare tale funzione su la nostra stringa e ricerca di uno spazio. Se restituisce qualcosa, allora dobbiamo sa che, chiaramente, questa è una frase. Perché c'è spazi. Poi andremo a restituire true. Altrimenti, stiamo andando a restituire false. Qualcuno ha voglia di dare me la prima riga di codice che stiamo effettivamente andando da utilizzare per scrivere questo? In realtà è la più difficile linea di codice pure. Già. PUBBLICO: Se strtok S-- ANDI PENG: Solo strchr. PUBBLICO: [interponendo VOICES] lo spazio non è uguale a null. ANDI PENG: Freddo. Completamente giusto. Capire a tutti che prima linea? Stiamo andando a chiamare strstr, che è una funzione che cerca la stringa s per il char di spazio. E se lo trova, sta andando a restituire un puntatore a dove si trova. Se non lo trova, sta andando a restituire NULL. Quindi, se restituisce qualcosa di diverso NULL, allora sappiamo che ha trovato uno spazio. Questo fa senso? Raffreddare. Tutto ok. Quindi, se sappiamo che trovato un spazio, cosa vogliamo fare? PUBBLICO: Restituisce vero. ANDI PENG: Yup. Restituisce vero. E poi, qualcuno vuole finire la funzione per me? Già. Altrimenti, proprio così. E provare a compilare questo. Sì. Così come voi potete vedere dal uscite, ricordatevi booleani in C sono sempre espressi in binario. 1 è vero. 0 è falso. Se dovessimo eseguire questo funzione stringa uno, che è Ciao, mi chiamo Andi-- chiaramente, un sentence-- risultato stampato a 1 che è vero. Il secondo, che è appena una parola, risulti stampata a 0, il che è falso. Tutti i tipi di chiara su come questa funzione è stato scritto? Già. PUBBLICO: Possiamo anche fare, invece di non è uguale no, è uguale uguale a 0, in modo che sia uguale a? ANDI PENG: No. Perché strchr è una funzione. Ho intenzione di tornare a questo. Allora qual è il tipo di ritorno della nostra funzione strchr? PUBBLICO: Oh, OK. O NULL. ANDI PENG: Sì. Si tratta di un char * che mi dice che qualunque questa funzione sta per tornare, sta andando essere un puntatore. O il puntatore sarà indicando dove è trovato, o sta andando a tornare un puntatore a NULL. In entrambe le circostanze, sta andando per restituire un puntatore a qualcosa. E così, se si dovesse equiparare questo è uguale, uguale, 0, si sta andando ad ottenere un errore di compilazione. Perché sta andando a restituire un puntatore. E si sta andando a cercare di confrontare un puntatore ad un intero. E il computer non è piacerà questo. Si Esattamente. Raffreddare. Tutti bene? E in secondo luogo, stiamo per andare su una funzione chiamata strstr. Nessun problema se questi funzioni sono confuse. Mi stanno confondendo. Come tale, voi ragazzi poteva aver visto, tutti suonano più o meno lo stesso. Proprio quando sei confuso, tirare su la biblioteca string.h. E voi potete ordinare attraverso il quale uno di che. Quindi strstr, tutto ciò che non fa altro che le ricerche una stringa per un altra stringa intera. Allora, dove strchr soli ricerche per un singolo carattere, Ricerche strstr per un'intera stringa. Così ho voluto guardare dentro, non lo faccio conoscere, Ciao, il mio nome è Andi. E il nome di mio migliore amico è anche Andi. Se volessi cercare in questo condanna per l'intera parola di Andi, mio ago sarebbe stata qualsiasi cosa tu stia cercando. E il tuo pagliaio è tutto ciò che cerchi in. Quindi, se siete alla ricerca di un parola specifica all'interno di una frase, questa parola sta per essere l'ago. E poi la frase in sé sta per essere il vostro pagliaio. E così cerca solo la prima occorrenza dell'ago corda nel pagliaio stringa. Restituisce il puntatore alla prima occorrenza. Tranne, ricordate in questo caso, è il prima occorrenza della stringa completa che si sta cercando per, non solo un personaggio. E quindi questo è quasi stessa cosa come la funzione abbiamo appena fatto, solo con un po 'di più specificità. Perché siete alla ricerca di più di un carattere. E l'utilizzo è la stessa esatta come quello che abbiamo appena fatto. Ognuno OK con questo? OK. L'ultimo che abbiamo intenzione di andare sopra è strrchr, che non è confuso con strstr o con strchr. strrchr ha un r più in là. Fare attenzione quando si sta digitando. Si possono trovare te compreso una R in più o meno compreso un r, e poi la funzione non è preso a andare a lavorare. E si sta andando ad essere confuso. Fare attenzione che si sta ortografia tutte queste funzioni a destra. Così strrchr è l'esatto stessa cosa come strchr tranne che cerca non il primo occorrenza di un carattere specifico, ma piuttosto l'ultima occorrenza. E così, in questo senso, è quasi la stessa esatta. Ma invece di muoversi inoltrare in una stringa, si sta andando ad essere in movimento all'indietro in una stringa. Esattamente la stessa cosa, sei solo la ricerca in un ordine diverso. E quindi questo potrebbe essere super, super utile per la ricerca funzione, la prima funzione sul vostro pset. Facciamo finta che avevamo bisogno di scrivere un funzione di estensione vuoto in cui abbiamo passare un nome di file * costante char, solo una stringa, un nome di file, che prende in quel nome e stampe l'estensione del file. Così, per esempio, se dovessi passare nella stringa di pset7.zip, sta andando a stampare solo l'estensione, che è .zip. E questo dovrebbe funzionare per qualsiasi tipo di estensione, .docx per Word o .pdf per un PDF file o .html per un file HTML. Praticamente, scrivere un funzione che può farlo. In realtà sto andando a passare alla IDE. Non è load-- ci andiamo. Quindi tutto quello che ho fatto qui è creato un char *, una prima stringa, chiamato pset7.zip. Io vado per ingrandire. Ho creato una seconda stringa chiamato finalpaper.docx. E mi scrivere una funzione che, quando chiamata sta per stampare appena fuori le estensioni di file. Forse prendere un paio di minuti per pensare di come si sta andando a fare questo. Un po 'più impegnativo quello scorso, ma l'utilizzo è quasi esattamente la stessa. Già. Quindi scrivere un estensione funzione chiamata che, se ti do il nome di un file, se dovessi dare io pset7.zip-- desidera di stampare solo la .zip. Se io do ti piace finalpaper.docx, basta stampare il .docx, solo l'estensione di qualsiasi file. Questo in realtà solo prende due righe di codice. Quindi cercate di vedere se si può forse farlo in questo. In realtà, solo prende una riga di codice. Ma due linee è probabilmente più standard. Quale funzione siamo probabilmente andando a voler chiamare? PUBBLICO: strrchr. ANDI PENG: strrchr, a destra. Perché noi stiamo cercando da destra a sinistra. Io non ti ho dato ragazzi un esempio come questo, ma se ti ho dato un esempio come www.apple.com e volevo solo il .com, sarebbe un esempio di dove si desidera chiamare l'ultima istanza del periodo e non la prima, giusto? Se tu fossi strchr chiamata, avrebbe mai dato la apple.com. Se hai chiamato strrchr esso, ti avrebbe dato il .com. E quindi state attenti su cui ways-- nel mio esempio, si potrebbe probabilmente potrebbe avere appena scritto utilizzando strchr, dato che c'è un solo punto. Ma in altri casi, che non può essere il caso. E così sempre cercare di progettare il codice e, in modo che-- sì? PUBBLICO: Così nel esempio hai appena detto, quando non strrchr sarebbe darvi .com o semplicemente vieni? ANDI PENG: Si darebbe il .com. PUBBLICO: OK. ANDI PENG: Sì. Che punti a cui si trovata. Già. 30 secondi forse? Già. Tutti bene o forse un po 'più di tempo? Alzata di mano? Mostra di teste? Raffreddare. Chiunque vuole darmi il primo riga di codice per questo programma? PUBBLICO: [incomprensibile]. ANDI PENG: Quindi prima di tutto, diamo forse scomposizione. Allora, qual è il tipo di ritorno di strrchr? Torniamo indietro. strrchr, qual è il tipo di ritorno? PUBBLICO: Char * ANDI PENG: E 'un char *, giusto? Il che significa che probabilmente stai andando a voler creare un altro tipo di char * di memorizzare ogni volta che è ritorno a, giusto? Perché se si chiama la funzione di strrchr, sta andando per darvi un puntatore a ovunque essa ha constatato che nell'ultimo periodo, destra? Ma si sta andando a voler memorizzare che da qualche parte, giusto? E così come possiamo codifichiamo questo in il nostro programma? PUBBLICO: Fate il char * [incomprensibile]. ANDI PENG: Sì. PUBBLICO: [incomprensibile]. ANDI PENG: strrchr. Già. Oh, perso una r lì. PUBBLICO: Nome file [incomprensibile]. Cos'è? Oh, E 'solo s. ANDI PENG: Oh, è solo s. Yup, mi dispiace. Colpa mia. Esempi non corrisponde. PUBBLICO: E poi dot. ANDI PENG: Yup. Prestare attenzione quando si ragazzi are-- qui, lasciatemi Zoom avanti. Ci siamo. Prestare attenzione quando si ragazzi digitazione, soprattutto quando si sta facendo solo un carattere. E 'davvero facile da solo accidentalmente fare doppi apici piuttosto che singolo. Non funzionerà. Il compilatore sta andando a lamentarsi. E la vostra funzione è semplicemente non andare a correre. E quindi state attenti quando si sta facendo le cose con caratteri che è apici. E così fa questa linea di codice senso per tutti? Stiamo creando un puntatore char *. Perché restituisce strrchr qualcosa di tipo puntatore. E così stiamo andando a chiamare strchr su s, che è la stringa, il file nominiamo, che stiamo passando. E stiamo cercando l'ultimo esempio di un periodo, che è solo la singola citazione dot sola offerta. Già. PUBBLICO: quando usiamo le virgolette doppie e quando fare usiamo le virgolette singole? ANDI PENG: Sì. Le virgolette doppie sono così sempre utilizzato quando si avere una stringa di più di uno. Quindi, se si sta facendo strstr, che è quella che si cercare una stringa per stringa, passerebbe tra virgolette. Ma ogni volta è solo un singolo carattere, si vuole fare apici. E 'una buona cosa da tenere a mente. Quindi, ora che abbiamo la nostra puntatore, cosa facciamo con esso? Ti sto chiedendo ragazzi a la stampa fuori, giusto? Così [incomprensibile], vuoi dammi la riga di codice? PUBBLICO: printf-- ANDI PENG: Sì. PUBBLICO: --Potete bisogno di un supporto posto. ANDI PENG: Yup. AUDIENCE: Stampare il segnaposto. Io non so quale sia il posto titolare è ma punto ad esso. OK. Saltiamo che per ora poi. PUBBLICO: E poi comma-- ANDI PENG: Pointer, giusto? PUBBLICO: Pointer, yup. ANDI PENG: Quindi tipo di una domanda trabocchetto, ha a che fare con i puntatori e stringhe che abbiamo tipo di parlato già. Che tipo di supporto posto dobbiamo necessità di un puntatore per un char *? PUBBLICO: [incomprensibile]. ANDI PENG: Sì. E 'più facile di quanto pensate ragazzi è. PUBBLICO: String? ANDI PENG: E 'solo una stringa, esattamente. Perché ricordare stringhe in realtà non esistono. Un char * è l'esatto stessa cosa come una stringa. E così proprio questo è ciò che s avrebbe dovuto essere utilizzato per tutto il tempo. OK. Vediamo se siamo in grado di provare a eseguire questo. Facciamo una estensione marca. Raffreddare. Voi ragazzi vedere come ho passato in psset7.zip e il finalpaper.docx, e la stampa appena fuori il .zip e il .docx? Ha senso? OK Quindi penso che nel tuo sguardo su funzione nel pset sei sta per essere chiesto se la stringa ha una certa conclusione, si deve dare un certo codice di errore. E così questo sarà abbastanza terribile. Perché se si riesce a capire ciò che l'estensione è, si può quindi confrontare che estensione per vedere se corrisponde up con una determinata estensione. E poi si può tornare un messaggio di errore, giusto? Già. PUBBLICO: Quindi non lo facciamo deve aggiungere 1 o altro? Il puntatore andrà a the-- ANDI PENG: Nope. PUBBLICO: --point dopo. ANDI PENG: Sì. Essa ricorda esattamente a dove i casi sono stati. Così, per esempio qui, siamo la ricerca per il periodo. Così sta andando a tornare un puntatore al periodo. E poi sta andando a stampare partendo nel periodo. Quindi non c'è bisogno di aggiungere 1. Anche se, è totalmente bene per, se si è mai sicuri, a solo tipo di provarlo voi stessi. Costruire un programma di esempio. Provatelo voi stessi e vedere dove è la stampa. Questo non è un brutto modo di farlo. Raffreddare. E questo è più o meno tutto Ho avuto per voi ragazzi oggi. Abbiamo fatto un sacco di roba pset oggi. Così, in caso di dubbio, come Ho detto, sempre guardare in alto la libreria string.h per questo pset. Ci sara 'un sacco di funzione che ci può essere utile. Alcuni potrebbero non essere utile. Io non lo so. Wade attraverso di essa, c'è un sacco di loro. strstr, strchr, strrchr sono super, super disponibile, così come le strcpys e strcasecmps che abbiamo già usato. E 'solo molto fare in giro con stringhe, determinando se sono uguali, ottenendo roba di stringhe, e essere in grado di aprire correttamente i file. E 'un sacco di file di I / O. pset non è poi così male. Stai andando a prendere un guardare, scaricarlo, e vedere un sacco di codice. Nessun problema, il codice effettivamente scrivere non è affatto male. Se qualcuno ha problemi con il loro Server, vieni a vedere me dopo sezione. Chiedere scusa ancora una volta per non portando caramelle per Halloween. Non so che cosa mi stava succedendo. Ma avremo doppia la caramella prossima volta. E buona fortuna nel vostro pset questa settimana. Sì.