>> [Tónlist spila]
>> Ræðumaður 1: Allt í lagi, þetta er CS50, og þetta er byrjun á viku fjórum,
og eins og þú gætir hafa heyrt eða lesa, heimurinn hefur verið að ljúka.
Fara um allan netið hefur verið þekkingu og skilning
af galla í a program, a tungumál forritun heitir Bash.
Þetta hefur verið frábærlega vörumerki sem ShellShock, eða Bash dyr,
en greinar eins og þessir hafa ekki verið óalgengt.
Og í raun, margir af þeim koma minningar um Heartbleed,
sem þú gætir hafa tekið eftir í ýta aftur síðastliðið vor, sem
var álíka nokkuð dramatísk.
Nú þeirra af þér hér í dag, hversu margir ykkar hafa,
jafnvel ef þú skilur ekki hvað það er allt um, heyrt um ShellShock?
Allt í lagi, og hversu margir af ykkur hafa tölvur sem eru viðkvæm?
OK, það ætti að vera langt, langt fleiri hendur upp núna, af ástæðum sem við munum sjá.
>> Við skulum taka a líta á það sem er verið að fara á í fjölmiðlum
og síðan útskýrt það svolítið hér fyrir okkur tæknilega.
>> Ræðumaður 2: Öryggi sérfræðingar hafa varað við því að alvarlegur galli gat
verið um að hafa áhrif á hundruð milljónir netnotendum heimsins.
Svo hvaða einmitt er villan sem hefur verið kallaður ShellShock, og hvað þýðir það að gera?
Jæja, ShellShock er einnig þekkt sem Bash galla, the hugbúnaður er hetjudáð.
Tölvusnápur nota veira grannskoða varnarlaus kerfi keyra Linux og Unix
stýrikerfi og þá smita þau.
Bash er a stjórn lína skel.
Þetta leyfir notendum mál skipanir um að ráðast áætlanir og aðgerðir innan hugbúnaður
með því að slá inn texta.
Það er oftast notuð af forriturum, og ætti ekki að vera opin fyrir umheiminum,
þó ShellShock breytingar sem.
>> Jæja, worringly, sumir sérfræðingar vara það gæti verið stærri ógn,
því ShellShock leyfir lokið stjórn sýktu vél,
en Heartbleed aðeins leyft tölvusnápur að njósna um tölvur.
Það er svo alvarlegt, að það er verið metinn á 10 af 10
fyrir alvarleika af Landsbókasafni Veikleikar Gagnasafn.
2/3 af öllum vefþjónum eru á hætta, þar á meðal nokkrum Mac tölvum.
Jæja, vertu viss um að plástur kerfi núna.
Einhver hýsa heimasíðu gangi sjúkt stýrikerfi
ætti að taka til aðgerða eins fljótt og auðið er.
Einhver sem hefur efni á það ætti að líta að fylgjast með og vefur umsókn þeirra
eldveggir til að líta út fyrir öllum árásum.
Ræðumaður 3: Versta hlutur sem gæti gerst er
að einhver myndi skrifa kóða sem myndi sjálfkrafa fara og skanna
internetið og hefði áhrif á allar þessar tölvur.
Og þegar þeir gera það vel, það versta sem þeir gætu gert
er bara eyða öllu, eða leggja þær síður niður.
Þannig að við gætum séð skemmdir frá þeim sjónarhóli,
þar sem við myndum hafa illgjarn fólk sem bara ákveða að valda eyðilegging
með því að koma kerfi niður eða eyða skrár og hlutir eins og þessi.
Ræðumaður 2: Sumir segja að þetta er eitt af mest erfitt að mæla
bugs í ár, og það getur tekið vikur eða jafnvel
mánuði til að ákveða endanlega áhrif hennar.
>> Ræðumaður 1: Svo er allt það satt, en fyndna er, nánast allt
á myndmáli sem þú sást bara, nema kannski lyklaborðið,
hefur ekkert að gera með villan neinu tagi.
Netþjónum og vír og svo framvegis, það er tegund af snertistefnu tengt,
en kjarninn er það í raun nokkuð þekki hvað er að gerast hér.
Í raun, láta mig fara inn í CS50 tæki okkar.
Leyfðu mér að fara á undan og hámarka flugstöðinni glugga hér.
Og þið hafið verið að nota þetta, eða embed útgáfa þess,
í gedit til að skrifa forrit, slá skipanir, og svo framvegis,
og þetta er í raun, og hefur verið í margar vikur, Bash, B-A-S-H.
Þetta er Bourne-aftur skel, sem er bara fínt leið til að segja,
þetta er forrit sem hefur blikkandi hvetja, í raun,
sem situr þar að bíða fyrir inntak fyrir þig.
Og það er stjórn lína tengi með sem
þið hafið verið að keyra skipanir og lokum að setja saman og þá stendur
forrit.
>> En Bash er líka forritun tungumál í eftirfarandi skilningi.
Þú veist að það eru skipanir eins CD og LS og einnig clang og aðrir,
en þú getur skilgreint eigin skipanir með því að innleiða þá í Bash.
Nú erum við ekki að fara að fara í smáatriðum
að Bash í forritunarmál, en vita, til dæmis, að á því augnabliki,
það er engin skipun sem kallast "halló."
Þannig að það er hægt að finna í einn af þessum pakka.
Það er ekki sett upp á tölvunni minni.
Spurðu kerfisstjóra.
En ef ég vil það að vera program kallað "halló" í Bash eða hvetja mína,
Ég get í raun notað setningafræði sem er alveg eins og C. Það er ekki alveg það sama,
en það lítur mjög svipað á virka, að vísu vantar einhverjar upplýsingar.
Ekkert virðist gerast, en nú ef ég tegund "halló"
þú getur í raun skrifað á áætlun, ekki á C, ekki í Java,
ekki í öðru forritun tungumál, en í Bash sig.
>> Nú er lykillinn hér, að ég skrifaði nefna að ég vildi gefa þessu nýja stjórn,
og svigum eru einnig táknrænt þetta vera virka.
Sem innskot, er einnig hægt að gera gaman hlutir, og í raun, jafnvel á Mac OS,
þetta er forrit sem heitir Terminal.
Það kemur innbyggður inn í einhver er tölva sem hefur Mac í þessu herbergi,
og þú getur gert svipaða hluti í Mac OS, en þú getur farið meira út fyrir það.
Og þetta er svolítið snertir, en það er góður af gaman.
Ég var minntur morgun, þegar að hugsa þetta í gegnum,
við smá leik ég nota til að spila með eitt af fyrrum TFS CS50 er
þar hvenær hann myndi ganga í burtu frá Lyklaborðið hans með skjá hans opið,
Ég myndi framkvæma skipun eins this-- "segja halló."
Og nú einhver tími sem hann kom aftur til hans hljómborð eftir að ég ruddi skjáinn
og hann vildi setjast niður, reyna að gera sumir vinna,
lista innihald directory-- hans
>> [Hljóð spilun]
>> -Hello.
Halló.
>> Ræðumaður 1: Svo í sanngirni, það var í raun ekki "halló."
Það var yfirleitt eitthvað meira í ætt við that--
[Hljóð spilun]
-Beep.
Ræðumaður 1: --that ég would-- svo tölvan hans vildi
sver á hann hvenær sem hann í raun og veru settist á lyklaborðinu hans.
Og mjög fljótt mynstrağur hann út ekki að yfirgefa skjár hans opið.
En þetta bendir til þess að einhverskonar af heimskur gaman að þér
getur haft með eitthvað eins og Bash.
En það er lítið meira alvarlegar til að vera viss, en það.
Og í raun er þetta eitt af Hættulegustu og langvarandi galla
sem hefur í raun högg the veröld heimsvísu.
Þessi villa hefur verið í kring fyrir um 20 árum,
og þú munt vera laust í aðeins stund með hlutfallslegt einfaldleiki þess.
>> Þannig að þetta er fulltrúi stjórn að ef þú
eiga Mac, bókstaflega núna þegar þú hefur lokið opinn,
þú getur prófað að slá inn í það forrit sem heitir Terminal.
Terminal er undir Umsóknir Utilities--
einu sinni, gera Windows-notendur hafa ekki að hafa áhyggjur af þessu tiltekna threat--
en þá með Macs getur slegið þetta í glugga eins og ég mun gera hér,
og ef þú slærð að í þessu forriti
heitir Terminal, eins og ég mun gera núna, ef þú sérð orðið "viðkvæm"
tölvan er viðkvæm fyrir misnotkun.
>> Nú hvað þýðir það í raun þýtt?
Og þetta er vissulega sumir laglegur brjálaður setningafræði,
en við skulum að minnsta kosti draga úr nokkrar af áhugaverðum þáttum.
Svo er það einhver setningafræði sem lítur smá þekki, að minnsta kosti frá C
og forritun almennt.
Ég sé nokkrar sviga, semikommum, hrokkið axlabönd, og svo,
en það kemur í ljós að þetta heimskur hlutur hér í gulu
er fyrst og fremst fall sem gerir ekki neitt.
The ristill þýðir ekkert gert, og semíkommu þýðir að hætta að gera ekki neitt.
Svo inni af þessum hrokkið axlabönd, sú staðreynd
að ég hef jafn undirrita til vinstri, þetta
er fyrst og fremst að skapa stjórn, eða breytu,
kallað x, og gaf því að gult hluti af kóða þar.
Það gæti verið eitthvað eins og "echo halló "eða" segja píp "eða eitthvað
í ætt við það.
En taka eftir ef augun reika lengra til hægri,
það er meira að þessari línu en bara enda þeim semíkommu.
"Echo viðkvæm," og þá utan að það er jafnvel meira.
Annar semíkommu, bash -c :.
>> Svo löng saga stutt, þessi lína af kóða er
nóg fyrir sannfærandi tölva sem er
viðkvæmt að gera eitthvað sem þú vilt að hún geri,
vegna þess að það er padda í Bash þar jafnvel þótt Bash átti að hætta
lesa línur stjórn hægri þar eftir gulu texta,
fyrir 20-plús ár gamall galla, Bash hefur í raun verið að lesa
umfram það semíkommu og falleg mikið að gera það sem það er sagt.
>> Svo er það vísbendingu um það á endanum?
Ég sagði bara "echo halló" eða "echo viðkvæmt,"
en hvað ef þú gerðir eitthvað reyndar illgjarn, eins Rm -Rf *,
sem þú might ekki hafa alltaf slegið áður,
og hreinskilnislega þú sennilega ætti ekki of fljótt,
vegna þess að þú getur gert mikið af skemmdum við það.
Hvers vegna?
RM gerir hvað, að sjálfsögðu?
Fjarlægir.
* Þýðir hvað?
Allt.
Svo er það svokölluð villtur nafnspjald, svo það þýðir
eyða öllu í núverandi möppu.
-r gerist að meina endurkvæma, sem þýðir að ef það sem þú ert að eyða
er skrá og inni þar er aðrar skrár og aðrar möppur,
endurkvæmt kafa í það og eyða öllu um það.
Og -f er það versta af þeim öllum.
Einhver veit hvað -f þýðir hér?
Force.
Svo valdi leið, jafnvel ef þetta er slæm hugmynd,
gera það án þess að vekur mig til frekari staðfestingar.
Svo, þú veist, hlæja við á þetta, en hreinskilnislega, ég líklega
slá þetta mörgum sinnum á dag, vegna þess að veruleika
er það fljótlegasta leiðin til að eyða a heild búnt af efni.
En jafnvel ég hef gert nokkrar skemmdir.
>> En ef þú varst að plata tölvu í að skilgreina nokkur heimskur breytu
eða virka kallast x, en þá svikull tölvuna í framkvæmd
út fyrir mörk sem virka, umfram það semíkommu,
þú gætir örugglega bragð tölvu í framkvæmd eitthvað eins rm -Rf
eða Email stjórn eða Afrita stjórn.
Nokkuð bókstaflega hægt að gera með tölva, hvort sem það er að eyða skrá,
búa skrár, ruslpóstur einhvern, ráðast sumir framreiðslumaður lítillega,
ef þú getur tjáð það með stjórn, þú
getur bragð tölva í að gera það.
>> Nú er það dæmi um hvernig þú gætir gert þetta?
Jæja, það er a einhver fjöldi af tölvum á internetið gangi Bash.
Allar okkur Mac notendur eru meðal þeirra.
A einhver fjöldi af Linux netþjónum eru meðal þá eins og heilbrigður, og Unix netþjóna.
Windows fær aftur tiltölulega í friði
nema þú hafir sett upp sérstakur hugbúnaður.
Nú a einhver fjöldi af netþjónum, fyrir dæmi, hlaupa vefur framreiðslumaður,
og í raun Linux er kannski Vinsælasta stýrikerfi
að keyra á tölvum á internetinu sem eru að þjóna upp vefsíður.
Nú eins og við munum sjá síðar í önn, þegar
þú sendir beiðni frá browser-- Chrome,
Internet Explorer, whatever-- til a fjarlægur framreiðslumaður,
það kemur í ljós að jafnvel þótt þú gafst bara www.example.com,
Vafrinn þinn er að senda skilaboð það er lítið meira Bogagöng, eins og þetta.
>> En eftir a lítill eitthvað skrítið.
Fyrstu tvær línur Ég hef aldrei séð áður,
en þeir líta ekki sérstaklega ógnandi.
En taka það sem ég hef stolið fyrir þriðju línu hér.
Ef slæmur voru að senda skilaboð svona úr tölvunni hans eða hennar
viðkvæmt Mac eða viðkvæm Linux miðlara,
það fyndna er að bash, að einfaldur lítill stjórn hvetja,
er omnipresent og er oft notaður til að í raun framkvæma
innihald a skilaboð sem hún fær.
Og eftir að rökfræði, þú getur bragð vefþjón, því
með því að senda eitthvað svona User-Agent, sem yfirleitt
er ætlað að segja sem nafn í vafranum þínum.
User-Agent Króm, User-Agent Internet Landkönnuður, User-Agent Firefox, þetta
er bara vafrinn þinn er leið að skilgreina sig.
En ef slæmur mjög snjall segir mm-mm, ég er
ekki að fara að segja þér hvað vafrinn minn er,
Ég stað að fara að senda þér þetta Cryptic-útlit hlutur með Rm -Rf
* Í það, getur þú bókstaflega bragð a viðkvæm vefur framreiðslumaður á internetinu
í framkvæmd nákvæmlega að í þar til að eyða öllum skrám.
Og hreinskilnislega, það er ekki jafnvel verstu henni.
Þú getur gert hvað sem er.
Þú gætir byrjað að úthluta afneitun af árás þjónustu
ef þú sendir þessi skilaboð til heil bunches af vefþjónum
og þá hafði þeim öllum niður, til dæmi, á Harvard.edu netþjóna,
og þú getur flokkað af Bang Heck út af þeim
með net umferð sem var annars af stað með þetta slæmur strákur.
>> Svo, löng saga stutt, næstum í þessu herbergi sem á Mac allir
er viðkvæmt fyrir þessu.
Silfur fóður er að ef þú ert keyra vefþjón á fartölvuna þína,
og nema þú hafir í raun stillt það að leyfa eitthvað eins SSH inn í það,
þú ert í raun öruggur.
Það er viðkvæmt, en það er engin einn að reyna að komast inn í fartölvuna þína,
svo þú getur konar treyst.
Hins vegar, Apple mun brátt að uppfæra a festa fyrir þetta.
The veröld af Linux hefur þegar gefið út fjölda fastur fyrir Fedora og Ubuntu
og aðrar útgáfur af Linux, og reyndar ef þú keyrir uppfærslu 50 í tækið,
jafnvel að of vilja vera uppfærð og leiðrétt.
En það líka er ekki raunverulega verið varnarlaus,
því nema þú hafir tinkered með tækið
og gerði fartölvu opinberlega aðgengileg á internetinu, sem er ekki
sjálfgefið, hefur þú reyndar verið fínt því
af firewalling og aðrar aðferðir.
>> En það er sérstakt dæmi um galla að við höfum búið til fyrir bókstaflega 20
ár, og hver veit nema að einhver allan þennan tíma hefur vitað um það?
Og í raun er þetta ein af grundvallar áskoranir
að við munum sjá síðar í önn um öryggi,
er það bara eins og í hinum raunverulega heimi, góður krakkar eru í óhag.
Til að halda slæmur krakkar út, verðum við að ganga úr skugga um að sérhver hurðin er læst,
að sérhver gluggi er öruggt, að hvert komustað inn á heimili
er öruggt að halda slæmur krakkar út.
En hvað þýðir slæmur strákur hefur að gera til raunverulega málamiðlun þinn heimili
og stela frá þér?
Hann eða hún hefur bara að finna einn ólæstum dyr, einn brotinn gluggi eða eitthvað
meðfram þeim línum, og það er sama í öryggi tölvunnar.
Við getum skrifað milljón línur af forritun kóða
og eyða hundruð eða þúsundir klukkustundir að reyna að fá það rétt,
en ef þú gerir bara einn mistök í réttar,
þú getur sett allt kerfið og örugglega í þessu tilfelli, allt Netið
og heimurinn í hættu.
>> Svo ef þú vilt læra meira um þetta, fara á þessa slóð hérna.
Það er engin þörf fyrir aðgerð kvöld nema þú sért
meðal þeirra öruggari að hafa verið að keyra eigin þinn vefur
miðlara, en í því tilviki sem þú ættir, í raun, uppfæra hugbúnaðinn.
>> Og þetta er of titilinn ræðu, og nú grein,
að við höfum tengt á Vefsíða Auðvitað er í dag.
Það var eftir manni heitir Ken Thompson, sem
var samþykkt mjög frægur verðlaun í tölvunarfræði,
og hann gaf þetta mál nokkur ár síðan, fyrst og fremst um þetta sama efni.
Asking fólkinu spurningin, ættir þú virkilega
traust, að lokum, hugbúnaður sem þú hefur verið gefið?
Til dæmis, við höfum öll verið að skrifa forrit,
og við höfum verið að setja saman þá með Clang.
Og þekkingu þína, hefur þú skrifað einhver forrit fyrir CS50 þar sem það er
a bak dyrnar konar, there 'a vegur að a slæmur strákur, ef keyra forritið þitt,
gæti tekið yfir tölvuna þína?
Sennilega ekki, ekki satt?
Mario og gráðugur, og Credit.
Þetta eru allt mjög lítil forrit.
Þú vilt verða að vera nokkuð slæmt ef þú í raun
heill tölvan varnarlaus eftir að skrifa 10 eða 20 línur af kóða,
eða að minnsta kosti ókunnugt um nokkur af öryggi flækjur.
Nú er ég að segja að facetiously, en við erum að fara að sjá í dag
og í þessari viku það er í raun virkilega, virkilega auðvelt
að vera slæmt og gera jafnvel stutt forrit varnarlaus.
>> En nú, að minnsta kosti, að átta sig á að spurningin sé spurt hér
er um Clang í þýðanda.
Hvers vegna höfum við verið að treysta Clang á undanförnum tveimur eða þremur vikum?
Hver er að segja að sá sem skrifaði Clang ekki hafa "ef" ástand þarna
sem í raun sprautað nokkrum núllum og sjálfur í hvert forrit það safnar
sem myndi láta hann eða aðgangur hennar tölvan þín þegar þú ert sofandi
og laptop lokið er opið og tölvan þín er í gangi?
Ekki satt?
Við höfum þetta svona heiður kerfi hægri nú þar sem við treystum því að Clang er legit.
Þú treystir því að tækið er legit.
Þú treystir því að bókstaflega hvert forrit á Mac eða PC er áreiðanleg.
Og eins og þetta einfalt villa gefur til kynna, jafnvel ef það er ekki illgjarn,
það er alls ekki líklegri til að vera raunin.
>> Svo þú ættir að vera hræddur eins og helvíti.
Frankly, það er engin einföld lausn á þessu annað
en einhverskonar félagslegum vitund af vaxandi margbreytileika
að við erum að byggja ofan tölvukerfa okkar,
og hvernig sífellt viðkvæmari við gæti mjög vel verið.
>> Nú með því að segja, Breakout.
Svo Brot er vandamál setja þrjá og Brot er leikur frá fyrra
að þú gætir muna, en fyrir okkur í vandamál setja þrjú,
það gerir okkur kleift að taka hlutir aftur upp hak
þannig að þegar við erum að skrifa forrit, jafnvel í Terminal glugga eins og þetta,
getum við í raun að keyra, að lokum, myndræna forrit ekki
ólíkt þeim sem við höfðum aðgang að í grunni.
Svo er þetta starfsfólk er framkvæmd Brot,
sem er bara þessi múrsteinn-brot leikur, sem þú færa paddle þinn aftur
og framvegis, og þú högg the bolti gegn þeim lit múrsteinn upp ofan.
Þannig að þetta er að koma okkur konar til baka þar
við gátum til að vera mjög fljótt með grunni, og nú með C,
framkvæmd okkar eigin myndræna notandi tengi.
>> En meira en það, þetta Heimadæmi táknar fyrsta
þar sem við erum að gefa þú fullt af kóða.
Og í raun, ég boða skýr athygli á þessu, vegna þess að sérstaklega
fyrir þá sem minna þægilegt, þetta Heimadæmi, að minnsta kosti við fyrstu sýn,
er að fara að líða eins og Við höfum tekið það upp hak.
Vegna þess að við höfum gefið þér, fyrir sumir af the leita
og flokkun vandamál í pset, fullt af kóða sem við skrifaði,
og a par af athugasemdum að segja "að gera,"
þar sem þú þarft að fylla út í eyðurnar.
Svo ekki of skelfilegur, en það er í fyrsta skipti
við erum fötlun þér kóðann sem þú þarft að fyrst að lesa, skilja, og þá bæta við
og ljúka henni.
>> Og þá með Brot, við erum að fara að gera slíkt hið sama,
gefa þér nokkrar tugi fleiri línur af kóða sem hreinskilnislega, gefa þér
a einhver fjöldi af ramma fyrir leikurinn heldur stoppa stutt
að innleiða múrsteinn og boltinn og paddle,
en við gerum framkvæma nokkrar aðrar aðgerðir.
Og jafnvel að við fyrstu sýn, aftur, sérstaklega ef minna þægilegt,
kann að virðast sérlega erfitt og þú heldur að það er svo margir nýir aðgerðir
þú þarft að vefja huganum kring, og það er satt.
En hafðu í huga, það er alveg eins og grunni.
Stuðlar ert þú ekki að nota alla The ráðgáta stykki í grunni.
Stuðlar ert þú ekki sama að vefja hugur þinn um alla þá
vegna þess að allt það tók var fljótur litið að skilja, ó,
það er það sem ég get gert með því ráðgáta stykki.
Og reyndar, í vandamál setja 3. sérstakur, munum við benda þér
á gögnum sem mun kynna ykkur í nýjum störfum,
og að lokum forritun býr að nota.
Aðstæður, lykkjur, breytur og aðgerðir
mun vera eins og það sem við höfum séð hingað til.
>> Svo reyndar, hvað við munum gefa þú er nokkur sýnishorn númer sem
gerir þér kleift að búa til glugga sem lítur ekki ósvipað þessu,
og að lokum snúa það inn í eitthvað alveg eins og þetta.
Þannig að nýta CS50, ræða skrifstofutíma og fleira,
og taka þægindi í þeirri staðreynd að upphæð af kóða sem þú þarft til að skrifa
er í raun ekki allt sem mikið.
Fyrsta áskorunin er bara að aðlagast sjálfur að einhverju kóða við höfum skrifað.
>> Einhverjar spurningar um pset3, ShellShock, eða annað?
>> Áhorfendur: Það virtist eins og fara í gegnum með Brot
að kóðinn er næstum hlutbundin stíl,
en ég hélt að C var hlutbundin forrit.
Ræðumaður 1: Frábært spurning.
Svo í að leita í gegnum dreifingu kóða, kóðinn
við skrifuðum fyrir pset3, fyrir þá sem þekkja, það
lítur út eins og það er lítið hlutbundin.
Stutta svarið er, það er.
Það er að samræma hvernig þér gæti gert hlutbundin kóðann með
tungumál eins og C, en það er enn að lokum málsmeðferð.
Það eru engar aðferðir inni breytur, eins og þú munt sjá.
En það minnir á það.
Og við munum sjá að lögun aftur þegar við komum til PHP og Javascript
undir lok annarinnar.
En nú, hugsa um það sem vísbending um hvað er að koma.
Góð spurning.
Allt í lagi.
Svo Mergesort var hvernig við vinstri hluti síðasta skipti.
Og sameina tegund var kaldur í vit að það var svo miklu hraðar,
að minnsta kosti á grundvelli cursory prófunum við gerðum í síðustu viku, en, segjum, kúla
tagi, val tagi, insertion sort.
Og hvað var snyrtilegur líka bara hversu succinctly og hreinlegur
þú getur tjáð það.
Og hvað gerði við segja að það væri efri bundið á hlaupandi tíma á sameiningu
raða?
Já?
>> Áhorfendur: n log n?
>> Ræðumaður 1: n log n, ekki satt. n log n.
Og við munum koma aftur til það sem í raun þýðir eða þar sem kemur frá,
en þetta var betra en hvaða gangi tíma
sem við sáum fyrir kúla val og insertion sort?
Svo n veldi. n veldi er stærri en þetta,
og jafnvel ef það er ekki alveg augljóst, vita að Log n er minni en n,
þannig að ef þú gerir n sinnum eitthvað minni en n,
það er að fara að vera minna en n veldi.
Það er hluti af innsæi þar.
En við greitt verð fyrir þetta.
Það var hraðari, en þema sem byrjaði að koma í síðustu viku var þetta tradeoff.
Ég fékk betri árangur tími vitur, en það
gerði ég að eyða á öðrum vegar, í því skyni að ná því?
>> Áhorfendur: Minni.
Ræðumaður 1: Segja aftur?
Áhorfendur: Minni.
Ræðumaður 1: Minni, eða rúm almennt.
Og það var ekki frábær augljóst með mönnum okkar,
en muna að sjálfboðaliðum okkar voru stepping áfram og stepping
aftur eins og það er fylki hér, og eins og það er
annað array hér að þeir gætu notað, vegna þess að við
þörf einhvers staðar að sameinast þeim gott fólk.
Við gátum ekki bara skipta á þeim á sínum stað.
Svo Mergesort skiptimynt er meira pláss, sem
við þurftum engan með önnur reiknirit
en kosti er að það er miklu hraðar.
Og hreinskilnislega, í alvöru heiminum rúm þessir days-- RAM, harður diskur space--
er tiltölulega ódýr, og svo er það ekki endilega að vera slæmt.
>> Svo skulum taka a fljótur líta, lítið meira skipulega, hvað við gerðum
og hvers vegna ég sagði að það var n log n.
Svo hér eru átta tölur og átta sjálfboðaliðar við höfðum síðast.
Og það fyrsta sem Sameina Raða sagði okkur að gera var hvað?
Áhorfendur: Divide í tvennt.
Ræðumaður 1: Segja aftur?
Áhorfendur: Divide í tvennt.
Ræðumaður 1: Skiptu í tvennt, rétt.
Þetta er mjög minnir á símaskrá, að skipta
og sigra almennt.
Svo litum við á vinstri helming.
Og síðan einu sinni og ég sagði, flokka vinstri helminginn af þeim þáttum,
hvað gerði við segja næst?
Raða vinstri helminginn af vinstri helmingur, sem gerði okkur kleift að,
eftir að skipta í tvennt, leggja áherslu á fjögur og tvö.
>> Hvernig heldur þú að raða lista núna, í gulur, stærð tvö, með Mergesort?
Jæja skipta því í tvennt, og raða vinstri helming.
Og þetta var þar sem hlutirnir fékk smá heimskulegt stuttlega.
Hvernig heldur þú að raða lista sem er á stærð eitt, eins og þetta númer fjögur hér?
Það er raðað.
Þú ert búinn.
>> En þá hvernig þú flokkað lista yfir stærð eitt þegar það er númer tvö?
Jæja, sama, en nú hvað var Þriðja og mikilvægt skref í Mergesort?
Þú þurfti að sameina vinstri helmingur og hægri helminginn.
Og þegar við gerðum það, leit við Á fjórum, leit við á tvo.
Við ákváðum allt í lagi, augljóslega tveir kemur fyrst,
svo við að setja tvö í sínum stað, eftir fjóra.
Og nú þú ert að eins konar baka og þetta er tegund af eiginleika
af reiknirit eins Sameina Raða, baka í minni.
Hvað var næsta lína af sögunni?
Hvað ætti ég að vera að einbeita sér næst?
The hægri helminginn af vinstri helmingur, Sem er sex og átta.
>> Svo láta mig stíga bara í gegnum þetta án belaboring benda of mikið.
Sex og átta, þá er sex raðað, átta er raðað.
Sameina þau saman eins og þessi, og nú er næsta stóra skref
er, að sjálfsögðu, að raða rétt helming frá fyrsta skrefið í þessa reiknirit.
Þannig að við leggjum áherslu á einn, þrír, sjö, fimm.
Við leggjum áherslu þá á vinstri helming.
The vinstri helminginn af því, hægri helminginn af það, og þá sameinast í eitt og þrjú.
Þá hægri helminginn, þá að vinstri helmingi um það, þá hægri helminginn af því.
Sameina það í, og nú hvað skref áfram?
Sameina stóru vinstri helming og stór hægri helminginn, svo einn fer niður þarna,
þá tvo, þá þrjár, þá fjórar, þá fimm, þá sex, þá sjö, þá átta.
>> Svo nú hvers vegna er þetta að lokum að sýna, sérstaklega ef n og logariþmi meira
almennt frekar flýja þig, að minnsta kosti í minnum?
Jæja, eftir hæð þetta.
Við höfðum átta þætti, og við skipt því með tveimur, og tvær, með tveimur.
Svo skráðu þig stöð tvö af átta gefur okkur þrjú.
Og treystu mér á að ef svolítið óljós um þetta.
En log stöð tvö af átta er þrír, þannig að við höfum gert þrjú lög af samruna.
Og þegar við sameinuð þætti, hversu margir þættir
gerði við líta á um hvert þessara lína?
Alls n, rétt?
Vegna þess að sameina efri línuna, jafnvel þótt við gerðum það piecemeal,
Við snert lokum hvert númer einu sinni.
Og í annarri röð, til að sameinast þær lista af stærð tvö,
við þurftum að snerta hvert frumefni einu sinni.
Og þá er hér í raun greinilega í síðustu röðinni,
við þurftum að snerta hver þeirra þættir einu sinni, en aðeins einu sinni,
svo hér liggur, þá n þig n okkar.
>> Og nú bara til að gera hlutina svolítið formlegri fyrir aðeins augnablik, ef þér
voru að nú greina þetta í eins konar hærra stigi
og reyna að ákveða, vel hvernig gætir þú fara um að tjá
Keyrslutíminn þessarar reiknirit bara með því að horfa á það og ekki
með því að nota háttuð dæmi?
Jæja, hvernig mikill tími viltu segja stíga svona gular myndi taka,
ef n <2 aftur?
Það er stór O hvað?
Þannig að ég ætla að sjá einn, svo eitt skref, kannski tvö skref vegna þess að það er ef
og síðan aftur, en það er fasti tími, ekki satt?
Svo við sögðum O (1), og það er hvernig ég ætla að tjá þetta.
T, bara vera að keyra tíma.
n er the stærð af the inntak, svo T (n), bara ímynda sér vegur
að segja á gangi tími gefinn inntak af stærðinni n
er að fara að vera á röð af föstu tíma, í O (1).
>> En annars, hvað um þetta?
Hvernig myndir þú tjá hlaupandi tími þessa gulu línu?
T hvað?
Þú getur konar svindl hér og svara spurningunni lotubundið.
Svo ef Keyrslutíminn í almennt við segjum bara T (n).
Og nú þú ert góður af Punting hér og segja, vel, bara raða vinstri helming,
og þá raða rétt helminginn.
Hvernig gætum við tákna táknrænt gangi tími þessa gulu línu?
T hvað?
Hvað er the stærð af the inntak?
n yfir tvö.
Af hverju get ég ekki bara sagt það?
Og þá er þetta annar T (n / 2) og síðan aftur, ef ég sameina tvö flokkuð helminga,
hversu margir þættir er ég að fara til að snerta alls?
n.
Svo ég get tjáð þetta, bara til að vera eins konar fínt,
sem keyra tíma almennt.
T (n) er bara að keyra tíma T (n / 2), plús T (n / 2), að vinstri helmingi og hægri helming,
auk O (n), sem er sennilega n skref, en kannski, ef ég ætla að nota tvo fingur,
það er tvisvar sinnum eins og margir skref, en það er línuleg.
Það er einhver fjöldi af skrefum það er þáttur af n,
svo við gætum tjáð þetta og þetta.
Og þetta er þar nú við munum Punt til aftur menntaskóla stærðfræði okkar kennslubók
við erum að endurkomu lokum endar jafna þetta, n sinnum log n,
ef þú gerir í raun út stærðfræði meira formlega.
>> Svo er það bara tvær sjónarmið.
Eitt tölulega með harður-dulmáli dæmigert dæmi
með átta tölustafi, og meira almennt líta á hvernig við komum þangað.
En hvað er í raun áhugavert hér er, aftur, að þetta álit hjólreiða.
Ég er ekki að nota fyrir lykkjur.
Ég er góður að skilgreina eitthvað hvað varðar sjálfu sér,
ekki aðeins með þetta stærðfræði virka,
en einnig hvað varðar þessa sauðakóda.
Þetta gervi kóða er endurkvæma í þeirri tveimur af línum
er fyrst og fremst að segja það að fara nota sig til að leysa minni
Vandamálið öllu minni um sig, og síðan aftur og aftur
og aftur þangað til við tálga það niður að þessu svokallaða grunn tilfelli.
>> Svo skulum raunverulega draga meira sannfærandi taka-burt frá þessu sem hér segir.
Leyfðu mér að fara inn í gedit og taka líta á sumir af dag kóða,
einkum þetta dæmi hér.
Sigma 0, sem virðist bætir tölurnar einn í gegnum n.
Svo skulum sjá hvað er kunnuglegt og framandi hér.
Fyrst við hafa a par af felur í sér, þannig að ekkert nýtt þar.
Frumgerð.
Ég er svolítið óljós um þetta eftir nokkra daga,
en hvað gerði við segja frumgerð af fall er?
Áhorfendur: [inaudible].
Ræðumaður 1: Hvað er það?
Áhorfendur: Við tilkynntum það.
Ræðumaður 1: Við tilkynntum það.
Svo þú ert að kenna Clang, hey, í raun ekki framkvæmd þetta ennþá,
en einhvers staðar í þessari skrá, væntanlega, er að fara að vera fall sem heitir hvað?
Sigma.
Og þetta er bara loforð sem það er að fara að líta út eins og þetta.
Það er að fara að taka heila tölu sem input-- og ég get verið skýr
og segja int n --and það er fara að skila int,
en semíkommu leið, mm, ég næ í kring að innleiða þetta stuttu seinna.
Aftur, Clang er heimsk.
Það er bara að fara að vita hvað þú segir það toppur til botn,
þannig að við þurfum að minnsta kosti að gefa það vísbending um hvað er að koma.
>> Nú skulum líta á helstu hér.
Við skulum fletta niður hér og sjá hvað helstu er að gera.
Það er ekki það langan falls, og í raun reisa hér er kunnugt.
Ég lýsi breytilegt n, og þá Ég pester notanda aftur og aftur
fyrir jákvæða heiltölu með getInt, og aðeins dyr þessa lykkju
þegar notandi hefur farið.
Að gera á meðan, höfum við notað til að pester notandann í þá áttina.
Nú er þetta áhugavert.
Ég lýsa int kallast "svar."
Ég tengja það aftur gildi um aðgerð sem heitir "Sigma."
Ég veit ekki hvað það gerir enn, en Ég man að lýsa því í smá stund síðan.
Og þá er ég liggur í gildi sem notandinn slegið inn, n,
og þá tilkynni ég svarið.
Jæja við skulum fletta aftur fyrir aðeins augnablik.
Við skulum fara á undan inn í þessa möppu, gera Sigma 0, og í raun að keyra þetta forrit
og sjá hvað gerist.
Þannig að ef ég fer á undan og hlaupa þetta forrit, ./sigma-0,
og ég tegund í a jákvæð heiltala eins tveir, Sigma,
sem grísk tákn gefur til kynna, er bara að fara að bæta upp allar tölur frá
núll á allt að tvo.
Svo 0 plús 1 plús 2.
Þannig að þetta ætti vonandi að gefa mér 3.
Það er allt það er að gera.
Og sömuleiðis, ef ég keyra þetta aftur og ég gef henni í númer þrjú,
það er 3 plús 2, þannig að það er 5, auk 1 ætti að gefa mér 6.
Og þá ef ég fæ virkilega brjálaður og byrjar að slá í stærri tölur,
það ætti að gefa mér stærri og stærri fjárhæðir.
Svo er það allt.
>> Svo hvaða hjartarskinn Sigma út?
Jæja, það er nokkuð augljóst.
Það er hvernig við gætum hafa innleitt þetta fyrir the fortíð par af vika.
"Int" er að fara að vera aftur gerð.
Sigma er nafnið, og það tekur a breytilegum m í stað þess að n.
Ég ætla að upp efst.
Þá er þetta bara geðheilbrigði stöðva.
Við munum sjá hvers vegna í augnablikinu.
Nú er ég að lýsa annað breytu, summa, frumstilla hana á núll.
Þá hef ég þetta fyrir lykkju iterating, virðist til glöggvunar,
frá i = 1 á þig til = m, sem er hvað notandinn slegið inn, og þá er ég
vöxtur summan svona.
Og síðan aftur summan.
>> Svo a par af spurningum.
Einn, ég kröfu á athugasemd mína því þetta forðast hættu á óendanlega lykkju.
Hvers vegna vildi brottför á neikvæðan fjölda örva hugsanlega óendanlega lykkju?
>> Áhorfendur: Þú munt aldrei ná m.
>> Ræðumaður 1: Aldrei að ná m.
En m er samþykkt í, þannig að við skulum íhuga einfalt dæmi.
Ef m er samþykkt í því að notandi sem neikvæð einn.
Óháð aðal.
Helstu ver okkur frá þetta líka, þannig að ég er bara
vera mjög endaþarms með Sigma einnig að ganga úr skugga
að inntak getur ekki verið neikvæð.
Þannig að ef m er neikvæð, eitthvað neikvætt.
Hvað er að fara að gerast?
Jæja, ég er að fara að fá frumstilla einn,
og þá ég er að fara að vera minna en eða jafnt og m?
>> Standa eftir.
Það was-- skulum ekki, skulum nix þessa sögu.
Ég vissi ekki að spyrja þessi spurning, því sú áhætta að ég vísa til
er ekki að fara að gerast vegna þess að ég er alltaf að fara að vera meiri than-- lagi,
Ég retract þeirri spurningu.
OK.
Skulum einblína á þessa hluti hér.
Af hverju gerði ég lýsa sumir utan lykkju?
Tilkynning á línu 49 ég hef lýst i inni í lykkju,
en á netinu 48 Ég hef lýst sumir utan.
Já.
Áhorfendur: [inaudible].
Ræðumaður 1: Jú.
Svo fyrst og fremst ég vissulega ekki langar að lýsa og frumstilla summan
núlli innanverðu sem lykkja á hverjum endurtekning,
vegna þess að þetta myndi augljóslega vinna bug á Tilgangur því upp tölurnar.
Ég myndi halda að breytast gildi aftur í núll.
Og einnig, hvað er annað meira Bogagöng Ástæðan fyrir því sama hönnun ákvörðun?
Já.
>> Áhorfendur: [inaudible].
Ræðumaður 1: Einmitt.
Ég vil sjá það utan lykkja líka á hvaða línu?
Á 53..
Og byggt á reglu okkar um þumalfingur frá a par af fyrirlestrum síðan,
breytur eru scoped, í raun, að því hrokkið axlabönd sem fela þeim.
Þannig að ef ég lýsi ekki summa inni þessara ytri hrokkið axlabönd,
Ég get ekki notað það í samræmi 53..
Setjið annan hátt, ef ég lýsti Summa hér, eða jafnvel innan
Fyrir lykkja, gat ég ekki opnað það í 53..
Breytan væri í raun farinn.
Svo nokkrum ástæðum þar.
En nú skulum fara aftur og sjá hvað gerist.
Svo Sigma fær kallað.
Það bætir upp 1 plús 2, eða 1 plús 2 plús 3, og þá skilar gildi,
verslanir það í svar, og printf hér er ástæða þess að ég ætla að sjá á skjánum.
Svo er þetta það sem við munum kalla endurtekningu nálgun, þar sem endurtekning bara
þýðir að nota lykkju.
A Fyrir lykkju, á meðan lykkja, a gera á meðan lykkja, bara að gera eitthvað aftur
og aftur og aftur.
>> En Sigma er góður af snyrtilegur virka í að ég gæti framkvæma það á annan hátt.
Hvað um þetta, sem bara til að vera góður af kaldur,
láta mig virkilega losna a einhver fjöldi af truflun
vegna þessa aðgerð er í raun alveg einfalt.
Tálga það skulum niður bara til fjögur algerlega línum
og losna við alla athugasemdir og hrokkið axlabönd.
Þetta er góður af a Mind-sprengja val framkvæmd.
Allt í lagi, kannski ekki hug-blása, en það er góður af sexier, allt í lagi,
að líta á þetta svo miklu meira succinctly.
Með aðeins fjórum línum af kóða, Ég hef fyrst þetta geðheilsu stöðva.
Ef m er minna en eða jafnt og núll, Sigma gerir ekkert vit.
Það er bara ætlast til að vera í þetta mál fyrir jákvæðar tölur,
þannig að ég ætla bara að fara að skila núll geðþótta
svo að við að minnsta kosti hafa sumir svokallaða stöð ræða.
>> En hér er fegurð.
Í heild á þessa hugmynd, að bæta við tölur frá 1 til N, eða m í þessu tilfelli,
er hægt að gera með því að einskonar brottför peninginn.
Jæja, hvað er summan af 1 til m?
Jæja, þú veist hvað?
Það er það sama og summa m auk summan af 1 til m mínus 1.
Jæja þú veist hvað?
Hvað er Sigma á m mínus 1?
Jæja, ef þú fylgir góður af þessu rökrétt, það er það sama og m mínus 1
auk Sigma af m mínus 2.
Svo þú getur konar just-- þetta er eins og ef þú ert bara
reyna að ónáða vini og þeir spyrja þig spurningu,
þú svarar konar með spurningu, þú getur konar halda brottför peninginn.
En hvað er lykillinn er að ef þú halda gera spurningin minni og minni
og minni, þú ert ekki spyrja hvað er Sigma
n, hvað er Sigma á n, hvað er Sigma n?
Þú ert að spyrja hvað er Sigma n, hvað er Sigma
af n mínus 1, hvað er Sigma af n mínus 2?
Loksins spurningin er að fara að verða hvað?
Hvað er Sigma eitt eða núll, sum mjög lítið gildi,
og um leið og þú fá þessi, vinur þinn,
þú ert ekki að fara að spyrja sama spurning aftur,
þú ert bara að fara að segja, ó það er núll.
Við erum hætt að spila svona af heimskur sveiflujöfnunar leik.
>> Svo endurkvæmni er athöfn í forritun falls starf sig.
Þetta forrit, þegar saman og hlaupa, er að fara að hegða sér á nákvæmlega sama hátt,
en hvað er lykillinn að inni falls heitir Sigma,
það er lína af kóða þarsem Við köllum okkur,
sem myndi venjulega vera slæmt.
Til dæmis, hvað ef ég fyrst unnin á þessu, svo gera sigma--
gera Sigma 1 ./sigma-1.
Jákvæð heiltala, vinsamlegast, 50 1275.
Svo hvaða hlutverk virðist vera, miðað við eitt próf, rétt.
En hvað ef ég fæ smá hættulegt og eyða svokölluðum grunn tilfelli,
og bara segja, og ég ætla bara að gera þetta flóknara en það er.
Við skulum reikna bara Sigma með því að taka m og síðan að bæta
í Sigma á m mínus einn?
Jæja, hvað er að fara að gerast hér?
Við skulum súmma út.
Skulum laun program, vista það, laun program,
og er þá tilbúin ./sigma-1 zooming í, sláðu jákvæða heiltölu vinsamlegast, 50.
Hversu margir af þú ert tilbúin til fess að sjá það?
>> OK.
Þannig að þetta getur gerst fyrir a tala af ástæða,
og hreinskilnislega í þessari viku erum við um að gefa þér meira af þeim.
En í þessu tilfelli, reyna að ástæða afturábak
hvað gæti hafa gerst hér?
Skiptingu kenna, sagði við síðustu tíma, er átt við hluta af minni.
Eitthvað slæmt gerðist.
En hvað var það vélrænt sem gekk skakkur
hér vegna þess að fjarlægja minn af því svokallaða grunn tilfelli,
þar sem ég skilaði harða dulmáli gildi?
Hvað finnst þér fór úrskeiðis?
Já.
>> Áhorfendur: [inaudible].
Ræðumaður 1: Ah.
Góð spurning.
Þannig að stærð á fjölda að ég var því upp
fékk svo stór að hún fór yfir stærð minni.
Góð hugmynd, en ekki í grundvallaratriðum að fara að valda hrun.
Það gæti valdið integer flæða, þar sem bitar bara selbiti yfir
og þá erum við mistök mjög stór tölu fyrir eins neikvæða tölu,
en það sjálft mun ekki valda hrun.
Vegna þess að við lok sem dagur int er enn 32 bita.
Þú ert ekki að fara að óvart stela 33 bita.
En góð hugsun.
Já.
>> Áhorfendur: [inaudible].
Ræðumaður 1: Aðferð aldrei hættir að keyra,
og reyndar kallar það sig aftur og aftur og aftur og aftur
og aftur, og enginn þau virka alltaf
klára því eina línu þeirra númer kallar themself aftur og aftur
og aftur.
Og hvað er í raun gerast hér, og nú erum við
getur konar draga þetta pictorially.
Leyfðu mér að fara yfir til að mynd fyrir aðeins augnablik.
Þetta er mynd, sem munu á endanum hold
nánar, um hvað er að gerast inni minni tölvunnar.
Og það kemur í ljós að á Neðst á þessari mynd
er eitthvað sem kallast stafla.
Þetta er klumpur af minni, klumpur af vinnsluminni,
það er bara notað hvaða tíma fall er kallað.
Í hvert sinn sem þú, forritari, hringja í aðgerð,
stýrikerfi, eins og Mac OS, Windows eða Linux,
grípur fullt af bætum, kannski Nokkrum kílóbæti, kannski nokkrar megabæti
minni, hendur þær til þín, og þá lætur
þú keyrir færni með hvað breytur sem þú þarft.
Og ef þú hringja þá annað virka og annað virka,
þú færð annað sneið af minni og annar sneið af minni.
>> Og reyndar, ef grænu stæði frá Annenberg tákna að minni,
hér er það sem gerist fyrsta skipti sem þú hringja virka Sigma.
Það er eins og að setja bakka svona á hvað er upphaflega tómt stafla.
En svo ef það bakki kallar sig, svo að segja,
hringja annað dæmi Sigma, það er
eins og að biðja um stýrikerfi, ooh, þarf smá meira minni,
gefa mér það.
Og þá fær það hlaðið á toppinn.
En hvað er lykillinn hér er að fyrsta bakki er enn þar,
vegna þess að hann beitti þessum seinni bakkanum.
Nú á meðan, Sigma kalla Sigma, það er eins og að biðja um meira minni.
Gets hlaðið hérna.
Sigma kalla Sigma, það er annað bakki sem fær hlaðið hér.
Og ef þú halda að gera þetta, lokum, eins konar landakort þetta sjón
þeirri töflu, hvað er að fara að gerast með stafla af stæði?
Það er að fara að vera hærri en fjárhæð minni tölvan þín hefur.
Og um leið og þetta græna bakkanum umfram lárétta línu
ofan stafla og ofan að orðinu hrúga, sem við munum koma aftur til í framtíðinni,
það er a slæmur hlutur.
The hrúga er öðruvísi hluti af minni,
og ef þú lætur þetta stæði stafli og stafli á,
þú ert að fara að fara yfir eigin hluti þinn af minni,
og forritið er örugglega að fara að hrun.
>> Nú sem innskot, þessa hugmynd af endurkvæmni, því
greinilega getur leitt til vandamála, en það er ekki endilega slæmur hlutur.
Vegna íhuga, eftir allt how-- og kannski
þetta tekur nokkrar að sættast að --how glæsilegur eða hvernig einföld
að framkvæmd sigma var.
Og við erum ekki að fara að nota endurkvæmni allt að mikið í CS50,
en í CS51, og í raun einhver hópur þar sem þú vinna gögn uppbygging
eins og tré eða fjölskyldu tré, sem hafa einhvern stigveldi,
það er frábær, frábær gagnlegt.
Nú, eins og innskot, svo að þér sem upprennandi tölva vísindamenn
eru kunnugir sum Google inni brandara, ef þú ferð á Google
og þú lítur upp hvað er skilgreining á, segjum, endurkvæmni, inn í.
Uh-ha.
Sem innskot, ég dró upp nokkrar.
Þetta var eins og 10 mínútna frá Procrastination í morgun.
Ef þú líka Google "út og suður," tilkynningu með því að halla höfðinu slightly--
og þá er þetta einn kannski mest grimmilegur af öllu
þar einhver varið eins dagur þeirra framkvæmd þessa
nokkur ár ago-- koma á.
Ó, wait-- það er padda.
>> Svo í gangi á einu af Stærsta vefsíður heims
eru þessar heimskur lítill Easter egg.
Þeir neyta líklega nontrivial Fjöldi lína af kóða
bara svo að við getum haft smá gaman hlutir eins og þessi.
En að minnsta kosti nú að fá sumir af þeim inni brandara.
>> Nú skulum taka a líta á sumir af the hvítt liggur við höfum verið að segja upp á síðkastið,
og byrja að afhýða aftur sumir lög tæknilega
þannig að þú skiljir virkilega hvað er verið að fara á
og þú getur skilið sumir af the ógnir,
eins ShellShock, sem sem nú hafa byrjað að verða
í fararbroddi í allir er athygli, að minnsta kosti í fjölmiðlum.
Svo er hér mjög einföld aðgerð sem skilar engu, ógilt.
Nafn þess er skipti.
Það tekur tvær breytur og það skilar engu.
Tekur í a og b.
Svo fljótur sýning.
Við tókum þetta upp.
Við gætum eins vel taka smá brjóta hér fyrir aðeins augnablik
og hafa smá eitthvað að drekka.
Ef einhver myndi ekki hug að taka þátt mér upp hér bara í smá stund.
Hvernig um þig í maroon skyrtu?
Komdu upp.
Bara einn dag.
Þakka þér, þó.
Allt í lagi, og við höfum koma upp sem hér?
Hvað er nafn þitt?
>> Ræðumaður 4: Laura.
>> Ræðumaður 1: Laura.
Komdu upp.
Svo Laura, mjög einfalt áskorun í dag.
Gaman að hitta Yo.
Allt í lagi.
Þannig að við höfum mjólk hérna og Við höfum nokkrar appelsínusafa yfir hér
og sumir bollar sem við láni frá Annenberg dag.
>> Ræðumaður 4: láni.
Ræðumaður 1: Og að fara að fara á undan og gefa þér hálft glas af þessu.
Allt í lagi.
Og við munum gefa þér hálf glas af mjólk.
Ó, og bara svo að þú getur man hvað þetta var eins,
Ég minntist á að koma þetta upp og á í dag.
Allt í lagi.
Ef þú vilt ekki huga, við skulum sjá, við getur sett þá yfir eigin gleraugun
ef þú vilt.
Þetta mun vera í heiminum frá augum Lauru.
Allt í lagi.
Svo markmið þitt, gefa tvo bolla af fljótandi hér, mjólk og appelsínusafa,
er að skipta á tveimur innihald þannig að appelsínusafa fer í mjólk bikarnum
og mjólk fer í appelsínusafa bolli.
>> Ræðumaður 4: Þarf ég að fá annan bolla?
Ræðumaður 1: Ég er svo ánægð með að þú spurt, þó það hefði verið miklu betra myndefni
ef þú hefðir ekki spurt.
En já, getum við boðið þér þriðja bolli sem er tóm, að sjálfsögðu.
Allt í lagi.
Svo skipta innihald þar.
Mjög gott.
Þú ert að gera þetta ótrúlega vel.
Og stíga þrjú.
Allt í lagi.
Excellent.
Stórt umferð lófaklapp væri gott fyrir Laura.
Allt í lagi.
Við höfum smá skilnaði gjöf fyrir þig, en láta mig taka þetta.
Þakka þér svo mikið.
Svo einfalt dæmi, þó, að sýna fram á að ef þú gerir
langar að skipta innihald af tveimur ílátum,
eða við skulum kalla þá breytum, þú þarft sumir tímabundna geymslu
að stigi einn af the innihald í því að þú getur raunverulega gera skipti.
Svo reyndar, þetta Kóðinn upp hér í C er fulltrúi einmitt það.
Ef appelsínusafa var og mjólk var b, og við vildum að skipta um tvo,
þú gætir reynt eitthvað skapandi með því að hella einn í öðru,
en það myndi sennilega ekki enda sérstaklega vel.
Og svo við notum þriðja bolli, hringja það tmp, T-M-P eftir venju,
og setja innihald OJ í það, þá skipta einn bolla,
þá setja OJ inn í Upprunaleg, þannig
ná, nákvæmlega eins og Laura gerði, þá skipti.
>> Svo skulum gera einmitt það.
Leyfðu mér að fara á undan og opna upp dæmi sem er
reyndar kallað "nei skipta, "vegna þess að þetta er ekki
eins einfaldlega gert eins og þú might hugsa.
Svo í þessari áætlun, eftir að Ég er að nota stdio.h, gamli vinur okkar.
Ég hef frumgerð fyrir skipti þarna, sem
þýðir framkvæmd er þess líklega niður undir,
og við skulum sjá hvað þetta helsta program er að fara að gera fyrir mig.
Ég lýsi fyrst int x fær einn, og int Y fær tvö.
Svo hugsa um þá eins og OJ og mjólk, hver um sig.
Og þá hef ég bara printf segja x er þetta
og y er þetta, bara svo ég get sjónrænt séð hvað er að gerast.
Þá hef ég printf krafa að ég er að skipta á tvær,
og þá prenta ég út halda því fram að þeir eru skiptasamningar,
og ég prenta út x og y aftur.
Svo hérna í skipti er nákvæmlega hvað Laura gerði,
og nákvæmlega það sem við sáum á skjár í smá stund síðan.
>> Svo skulum fara á undan og vera sárlega vonsvikinn.
Gera ekki skipti, og keyra ekki skipti, zooming í á the framleiðsla hér.
Sláðu x er 1, y er 2, skipta skipti.
x er enn 1, og Y er enn 2.
Svo jafnvel þó hreinskilnislega, þetta lítur nákvæmlega eins, að vísu meira tæknilega,
hvað Laura gerði, virtist ekki að vinna.
Svo hvers vegna er það?
Jæja, það kemur í ljós að þegar við að skrifa forrit eins og þetta
sem hefur bæði helstu, er lögð áhersla hér, og þá annað virka, eins og skiptasamninga,
tilgreindir hér, sem það kallar, heimurinn
lítur smá eitthvað eins þessi stæði fyrir augnabliki.
Þegar helstu fyrst fær heitir, það er eins og að spyrja stýrikerfi
fyrir smá minni allir heimamaður breytur eins x og y sem helstu hefur,
og þeir enda rétt þar upp.
En ef helstu símtöl skipta, og helstu fer að skipta tvær breytur, A og B,
appelsínusafa og mjólk, það er ekki eins og fötlun appelsínusafa og mjólk
til Laura.
Hvað tölvan gerir, er það fer afrit af appelsínusafa
og afrit af mjólk til Lauru, svo að hvað er að lokum inni þessa bakka
er gildi eitt og tvö, eða OJ og mjólk, en afrit þeirra,
svo að á þessum tímapunkti í sögunni, það
er OJ og mjólk í öllum þessum bakka.
Það er einn og tveir í öllum þessum stæði,
og skipti aðgerð er örugglega að vinna.
Það er að skipta þeim inni af seinni efsta bakki,
en það swap hefur engin áhrif.
Og byggt á aðeins nokkrum grundvallarregla sem við höfum
talaði um áður, og raunar bara nokkrar mínútur síðan, hvað
gæti útskýrt hvers vegna breyta a og b inni í skipti
hefur engin áhrif á x og y, jafnvel þótt Ég stóðst x og y í skiptasamnings virka.
Hvað er lykillinn orð hér að gæti simplistically útskýra?
Ég held að ég heyrði það hér?
Áhorfendur: Return.
Ræðumaður 1: Return?
Ekki aftur.
Við skulum fara með einum öðrum.
Hvað er það?
>> Áhorfendur: [inaudible].
>> Ræðumaður 1: Allt í lagi, svo return-- við gátum gera vinnu aftur í sögunni,
en það er jafnvel einfaldara skýring.
Áhorfendur: Gildissvið.
Ræðumaður 1: Gildissvið.
Ég tek svigrúm.
Svo umfang, man hvar x okkar og y lýst.
Þeir eru lýst inni af helstu hægri upp hér.
a og b, á meðan, eru raun lýst
inni skipti, ekki alveg í the hrokkið axlabönd en samt
í almennu svæði af skipti.
Og svo reyndar, a og b aðeins til í þessari skúffu
frá Annenberg þetta Annað klumpur af kóða.
Þannig að við erum örugglega að breyta afrit, en það er í raun ekki allt sem gagnlegt.
>> Svo skulum taka a líta á þetta svolítið lægri.
Ég ætla að fara aftur í The Source Directory,
og ég ætla að fyrst zoom í hér, og bara
til að staðfesta að ég er í þessu stærri endastöðvar,
forritið er enn að haga sér eins og þessi.
Segjum nú að þetta er ekki viljandi.
Augljóslega vildi ég skipti við vinna, svo finnst það eins og padda.
Nú ég gæti byrjað að bæta upp mikið af printf til að númerið mitt,
prenta út x hérna, y yfir hér, að hérna, b hérna.
En hreinskilnislega, það er líklega það þú hefur verið að gera í nokkrar vikur
nú, í skrifstofutíma og heima þegar að vinna
á psets að reyna að finna einhverja galla.
En þú munt sjá, ef þú hefur ekki nú þegar, þessi vandamál setja þrjú kynnir þér
að skipun sem heitir GDB, þar GDB, GNU aflúsara,
hefur sér það heild búnt af aðgerðir sem geta í raun
láta okkur skilja aðstæður eins og þetta, en meira compellingly,
leysa vandamál og finna galla.
Þannig að ég ætla að fara að gera þetta.
Í stað þess að ./noswap, ég er í staðinn að fara að keyra GDB ./noswap.
Í öðrum orðum, ég er að fara að keyra minn áætlun ekki í Bash, ný vinur okkar
í dag.
Ég ætla að keyra minn Forritið noswap inni
þessarar önnur forrit sem heitir GDB, sem er a aflúsara, sem
er forrit sem er hannað til að hjálpa þú mönnum að finna og fjarlægja galla.
Svo ef ég högg hlaupa hér, það er er grimmilegur magn af texta
að þú virkilega aldrei að lesa.
Það er fyrst og fremst truflun frá the hvetja, sem
Ég ætla að lemja Control-L að komast upp á toppinn þar.
Þetta er GDB hvetja.
Ef ég vil að hlaupa þetta forrit núna, sem þetta litla svindlari lak á dag
renna til kynna, hlaupa er fyrsta skipanir sem við þýddi að kynna.
Og ég ætla bara að fara að slá hlaupa upp hér inni gdb,
og reyndar hljóp forritið mitt.
Nú er það einhver viðbótar framleiðsla af the skjár eins og þetta,
en það er GDB bara vera endaþarms og segja okkur hvað er að gerast.
Þú þarft í raun ekki að hafa áhyggjur um þessar upplýsingar núna.
En hvað er raunverulega kaldur um GDB, ef ég geri þetta again--
Control-L hreinsar screen-- láta mig fara undan og tegund "brjóta helstu," þannig,
þegar ég lenti inn, setja hvað er kallað brot lið á noswap.c,
lína 16, sem er þar sem GDB mynstrağur út program minn raun
er hlutverk mitt í raun og veru er.
Þetta munum við að hunsa í bili en það er heimilisfangið
í minni sérstaklega þessa aðgerð.
Svo núna þegar ég pikka hlaupa, taka eftir hvað er flott hérna.
Áætlun mín brýtur á línuna I sagði GDB til að gera hlé framkvæmd á.
Þannig að ég þarf ekki að nú breytt númerið mitt, bæta nokkrum printf er, laun það, endursýning
það, breyta, bæta við nokkrum printf er, vista það, að endurþýða hana, keyra hana.
Ég get bara gengið í gegnum áætlun mína skref fyrir skref fyrir skref á mönnum hraða,
ekki á Intel-inni konar hraða.
>> Svo nú taka þessa línu birtist hér, og ef ég fer aftur
til áætlun mína í gedit, eftir því að það er í raun
The mjög fyrstur lína af kóða.
Það er lína 16 í gedit.
Það er lína 16 innan gdb, og jafnvel þó þetta svart og hvítt tengi
er ekki nærri eins notanda vingjarnlegur, þetta þýðir
þessi lína 16 hefur ekki verið keyrð enn, en það er um að vera.
Svo örugglega ef ég tegund prenta x, ekki printf, bara prenta x,
Ég fæ smá svikinn gildi þar af núll, því x hefur ekki verið forsniðin enn.
Þannig að ég ætla að fara að skrifa næst, eða, ef þú langar að vera fínt, bara n í næsta.
En þegar ég slæ inn næst inn, nú eftir það færist á línu 17.
Svo rökrétt, ef ég hef framkvæmt lína 16 og ég gerð nú prenta x,
hvað ætti ég að sjá?
Einn.
>> Og nú er þetta að vísu ruglingslegt.
2 $ er bara fínt leið, ef þú vilja til að vísa til þess virði síðar,
þú getur sagt "dollaramerki tvö."
Það er eins og a bak tilvísun.
En nú, bara hunsa það.
Hvað er áhugavert er það sem er á hægri jafn skilti.
Og nú ef ég tegund næst aftur og prenta Y, ætti ég að sjá 2.
Ég get nú einnig prentað x aftur, og hreinskilnislega,
ef ég er að fá smá ruglaður í þar sem ég er, ég get slegið lista fyrir lista
og bara sjá sumir samhengi um það sem ég er í raun á.
Og nú get ég slegið næst, og þar sem x er 1.
Nú er ég að slá næst.
Oh, y er 2.
Og aftur, það er truflandi, vegna framleiðslu gdb er
er commingled með eigin framleiðslu mína.
En ef þú geymir í huga, því að glancing fram og til baka á númerið þitt
eða leggja það út hlið við hlið kannski, þú munt
sjá að í raun er ég bara stepping gegnum áætlun mína.
>> En eftir hvað gerist næst, bókstaflega.
Hér er lína 22.
Leyfðu mér að fara yfir það, þannig að flytja á til 23, og ef ég prenta x nú, enn einn.
Og ef ég prenta y nú, enn eitt.
Svo er þetta ekki gagnlegt æfa.
Svo skulum endurtaka þetta.
Leyfðu mér að fara aftur upp að efst og tegund hlaupa aftur.
Og það er að segja forritið sem er verið að debugged
hefur byrjað nú þegar, fór frá upphafi.
Já, við skulum gera þetta aftur.
Og að þessu sinni skulum gera næst, næst, næst, næst, næst,
en nú hlutirnir fá áhugavert.
Nú vil ég að stíga inn í skipti, þannig að ég slá ekki næst.
Ég slá skref, og nú taka það hefur stökk mér að noswap.c línu 33.
Ef ég fer aftur til gedit, hvað er lína 33?
Það er fyrsta raun lína af kóða inni skipti.
Sem er gott, því nú get ég konar pota í kring og fá forvitinn
hvað er að gerast sannarlega þarna.
Leyfðu mér að prenta tmp.
Bíddu.
Hvers vegna er tmp hafa sumir brjálaður, svikinn sorp gildi?
Áhorfendur: Það hefur ekki verið forsniðin.
Ræðumaður 1: Það hefur ekki verið forsniðin.
Og reyndar, þegar þú keyrir forritið, þú ert að gefa í heild búnt af minni
af stýrikerfi, en þú hafa ekki frumstilla allar gildi,
svo hvað bitar sem þú ert sjá hér, jafnvel þó að það er
þetta brjálaður stór neikvæð númer, bara þýðir
að þeir eru leifar frá sumir fyrri notkun þess RAM,
jafnvel þótt ég hafi ekki sjálfur þarf hann enn.
Svo nú er ég að fara að fara á undan og tegund næst, og ef ég tegund núna prenta tmp,
hvað ætti ég að sjá?
Hvað sem gildi fyrir var, a er fyrsta rifrildi, bara
eins X var fyrst hlutur berist í,
svo og x ætti að vera sama, svo prenta tmp ætti að prenta mér eitt.
>> Svo það sem þú munt sjá í Heimadæmi þrjú er eitthvert af tegund á gdb,
en ljóst að þetta er upphaf af að líta á tæki sem mun í raun og veru
hjálpa þér að leysa vandamál svo miklu meira í raun.
Það sem við erum að lokum að fara að gera á miðvikudaginn
er að byrja að afhýða aftur nokkrum lögum og fjarlægja sumir þjálfun hjól.
Þessi hlutur sem kallast band sem við höfum notað í nokkurn tíma,
við erum að fara að hægt að taka það í burtu frá þér og byrja að tala um
eitthvað meira esoterically þekktur sem char *,
en við erum að fara að gera þetta fallega og varlega í fyrstu, jafnvel þótt ábendingum,
eins og þeir eru kallaðir, geta gera sumir mjög slæmur hlutur ef misnotuð,
með því að horfa á smá claymation frá vinur okkar Nick Parlante frá Stanford
University, prófessor í tölvunni vísindi sem setti saman þessa forskoðun
af hvað er að koma þessum Miðvikudagur.
>> [Vídeó spilun]
-Hey, Binky.
Vakna.
Það er kominn tími til að bendillinn gaman.
>> Hvað er það?
Læra um ábendingum?
Ó, Goody!
[END vídeó spilun]
Ræðumaður 1: Það bíður þér á miðvikudag.
Við munum sjá þig þá.
[Vídeó spilun]
-Og Nú, Deep Thoughts, með Daven Farnham.
>> Af hverju erum við að læra C?
Hvers vegna ekki A +?
>> [Hlátur]
>> [END vídeó spilun]