[MUSIC KUCHEZA] SPIKA 1: zote haki, hii ni CS50, na hii ni mwanzo wa wiki nne, na kama unaweza kuwa na habari au kusoma, dunia imekuwa na mwisho. Kwenda pande zote biashara imekuwa maarifa na ufahamu ya mdudu katika mpango, a lugha ya programu inayoitwa Bash. Hii imekuwa ya ajabu asili kama Shellshock, au Bash mlango, lakini makala kama hizi si kawaida. Na kwa kweli, wengi wao kuleta kumbukumbu ya nyuma ya Heartbleed, ambayo unaweza kuwa niliona katika vyombo vya habari nyuma spring hii iliyopita, ambayo ilikuwa vile vile haki makubwa. Sasa ya wale wa wewe hapa leo, jinsi wengi wenu kuwa, hata kama wewe hawajui nini ni wote kuhusu, habari za Shellshock? Zote haki, na jinsi wengi wenu kuwa na kompyuta kwamba ni mazingira magumu? OK, kuna haja ya kuwa mikono mbali, mbali zaidi up sasa hivi, kwa sababu tutaona. Hebu tuangalie nini kinachoendelea katika vyombo vya habari na kisha kueleza ni kidogo hapa kwa ajili yetu kitaalam. SPIKA 2: wataalam Usalama na alionya kuwa flaw kubwa inaweza kuwa juu ya kuathiri mamia ya mamilioni ya watumiaji wa mtandao wa dunia. Basi nini hasa ni mdudu kwamba imekuwa dubbed Shellshock, na je ni nini? Naam, Shellshock pia anajulikana kama Bash mdudu, programu ni ushujaa. Hackers kutumia virusi Scan wanaoishi katika mazingira magumu mifumo ya kuendesha Linux na Unix mifumo ya uendeshaji na kisha kuambukiza yao. Bash ni mstari amri shell. Hii inakuwezesha watumiaji suala amri kuzindua mipango na makala ndani ya programu na kuandika katika maandishi. Ni kawaida hutumiwa na programmers, na haipaswi kuwa wazi kwa dunia nzima, ingawa Shellshock mabadiliko hayo. Naam, worringly, baadhi ya wachambuzi kuonya inaweza kuwa tishio kubwa, kwa sababu Shellshock inaruhusu kamili udhibiti wa mashine ya kuambukizwa, ambapo Heartbleed kuruhusiwa tu Hackare na kupeleleza juu ya kompyuta. Ni hivyo mbaya, ni imekuwa lilipimwa 10 kati ya 10 kwa ukali na ya Taifa ya Mazingira magumu Database. 2/3 ya servrar wote mtandao ni katika hatari, ikiwa ni pamoja na baadhi ya kompyuta Mac. Naam, kuhakikisha kiraka mifumo yako sasa. Mtu yeyote mwenyeji tovuti mbio walioathirika mifumo ya uendeshaji inapaswa kuchukua hatua kama haraka iwezekanavyo. Mtu yeyote ambaye anaweza kumudu ni lazima kuangalia na ufuatiliaji na mtandao maombi yao firewalls kuangalia nje kwa ajili ya mashambulizi yoyote. SPIKA 3: Mbaya kitu ambayo inaweza kutokea ni kwamba mtu bila kuandika kificho kwamba ingekuwa moja kwa moja kwenda na Scan mtandao na bila kuathiri wote wa kompyuta hizi. Na mara moja wao kufanya hivyo, pamoja, jambo baya zaidi waweze kufanya ni kufuta tu kila kitu, au kufunga maeneo ya chini. Hivyo tunaweza kuona uharibifu na kwamba hatua ya maoni, ambapo tunataka kuwa watu malicious ambao tu kuamua kusababisha havoc kwa kuleta mifumo chini au kufuta files, na mambo kama hayo. SPIKA 2: Baadhi ya kusema hii ni moja ya vigumu kupima mende katika miaka, na inaweza kuchukua wiki au hata miezi kuamua athari yake ya mwisho. SPIKA 1: Basi wote wa hiyo ni kweli, lakini jambo funny ni, karibu wote ya picha wewe tu kuona, isipokuwa labda keyboard, ina kitu cha kufanya na mdudu wowote. Servers na waya na kadhalika, ni aina ya tangentially kuhusiana, lakini katika msingi ni kweli pretty familiar nini kinaendelea hapa. Kwa kweli, basi mimi kwenda katika CS50 yetu appliance. Hebu kwenda mbele na kuongeza dirisha terminal hapa. Na wewe guys wamekuwa wakitumia huu, au iliyoingia version yake, katika gedit ili kuandika mipango, aina amri, na kadhalika, na hii ni kweli, na ina imekuwa kwa wiki, Bash, B-A-S-H. Hii ni Bourne-tena shell, ambayo ni njia tu dhana ya kusema, hii ni programu ambayo ina blinking haraka, kwa ufanisi, kwamba yapo hapo kusubiri kwa ajili ya pembejeo kwa ajili yenu. Na ni amri line interface kupitia ambayo nyie wamekuwa kuendesha amri na hatimaye kuandaa na kisha mbio mipango. Lakini Bash ni pia programu lugha kwa maana zifuatazo. Unajua kwamba kuna amri kama cd na ls na pia Clang na wengine, lakini unaweza kufafanua amri yako mwenyewe kwa kutekeleza yao katika Bash. Sasa sisi siyo kwenda kwenda katika kina kubwa kama kwa Bash lugha ya programu, lakini kujua, kwa mfano, kwamba kwa wakati huu, hakuna amri inayoitwa "hello." Hivyo ni inaweza kupatikana katika moja ya hizi paket. Ni si imewekwa kwenye kompyuta yangu. Kuuliza msimamizi wako. Lakini kama nataka kuwa kuna mpango inayoitwa "hello" katika Bash au haraka yangu, Mimi unaweza kweli kutumia syntax kwamba kabisa kama C. Ni si sawa kabisa, lakini inaonekana pretty sawa na kazi, pamoja na kukosa baadhi ya maelezo. Kitu inaonekana kutokea, lakini sasa kama mimi aina ya "hello," unaweza kweli kuandika mpango, si katika C, si katika Java, si katika programu nyingine lugha, lakini katika Bash yenyewe. Sasa muhimu hapa ni kwamba mimi aliandika jina nilitaka kutoa amri hii mpya, na mabano ni pia ishara ya hii kuwa kazi. Kama kando, unaweza pia kufanya fun mambo, na kwa kweli, hata juu ya Mac OS, hii ni programu ya kuitwa Terminal. Ni huja kujengwa ndani ya mtu yeyote kompyuta ambayo ina Mac katika nafasi hii, na unaweza kufanya mambo sawa katika Mac OS, lakini unaweza kwenda zaidi ya hapo. Na hii ni kidogo tangential, lakini ni aina ya furaha. Mimi nilikuwa aliwakumbusha asubuhi hii, wakati wa kufikiria hili kwa njia ya, ya mchezo kidogo mimi kutumika kwa kucheza na moja ya CS50 ya TFS wa zamani ambapo wakati wowote angeweza kutembea mbali na keyboard yake na screen yake unlocked, Napenda kutekeleza amri kama Haya "kusema hello." Na sasa wakati wowote yeye akarudi yake keyboard baada ya mimi akalipa screen na angeweza kukaa chini, kujaribu kufanya baadhi ya kazi, orodha ya yaliyomo ya directory-- yake [Audio avspelning] -Hello. Hello. SPIKA 1: Kwa hiyo, katika haki, ilikuwa si kweli "hello." Ilikuwa ni kawaida kitu sawa na zaidi that-- [Audio avspelning] -Beep. SPIKA 1: --that mimi would-- hivyo kompyuta yake ingekuwa kuapa saa yake wakati wowote yeye kweli waliketi keyboard yake. Na haraka sana yeye figured nje ya si kuondoka screen yake unlocked. Lakini hii inaonyesha aina ya kijinga furaha kwamba wewe unaweza kuwa na kitu kama Bash. Lakini ni kidogo zaidi kubwa, kuwa na uhakika, zaidi ya hiyo. Na kwa kweli, hii ni moja ya mende wengi hatari na ya muda mrefu ambayo ina kweli hit dunia kimataifa. Mdudu hii imekuwa karibu kwa baadhi ya miaka 20, na wewe utakuwa na akampiga katika tu wakati kwa unyenyekevu jamaa yake. Hivyo hii ni mwakilishi amri kwamba kama wewe wenyewe Mac, literally hivi sasa wakati una mfuniko yako wazi, unaweza kujaribu kuandika katika kwamba programu inayoitwa Terminal. Terminal ni chini ya Maombi Utilities-- kwa mara moja, watumiaji Windows hawana wasiwasi kuhusu threat-- hii hasa lakini wale wa wewe kwa Macs unaweza aina huu katika dirisha kama mimi itabidi kufanya hapa, na kama huna aina kwamba katika mpango huu kuitwa Terminal, kama mimi itabidi kufanya sasa, kama unaweza kuona neno "mazingira magumu," kompyuta yako ni mazingira magumu na unyonyaji. Sasa je, hiyo kweli maana yake nini? Na hii ni admittedly baadhi syntax pretty mambo, lakini hebu angalau kuteka nje baadhi ya mambo ya kuvutia. Hivyo kuna baadhi syntax kwamba inaonekana kidogo familiar, angalau kutoka C na programu zaidi kwa ujumla. Mimi naona baadhi mabano, semicolons, braces curly, na vile, lakini zinageuka kuwa hii kitu kijinga hapa katika njano kimsingi ni kazi kwamba hana chochote. njia COLON kufanya lolote, na semicolon maana kuacha mara moja kufanya chochote. Hivyo ndani ya hizi braces curly, ukweli kwamba nina sawa saini kwa upande wa kushoto, hii kimsingi ni kujenga amri, au variable, kuitwa x, na kumshirikisha ni kwamba njano kidogo ya code huko. Hiyo inaweza kuwa kitu kama "echo hello "au" kusema beep "au kitu sawa na yale. Lakini taarifa kama macho yako tanga zaidi kwa haki, kuna zaidi ya mstari huu kuliko tu mwisho wa semicolon. "Echo katika mazingira magumu," na kisha zaidi ya kwamba kuna hata zaidi. Mwingine semicolon, bash -c :. Hivyo hadithi muda mfupi, mstari wa kanuni ni kutosha kwa ajili ya kulazimisha kompyuta hiyo ni mazingira magumu na kufanya kitu kwamba unataka kufanya, kwa sababu kuna mdudu katika Bash ambapo ingawa Bash ilitakiwa kuacha mistari kusoma amri ya haki kuna baada ya maandishi ya njano, kwa ajili ya 20-plus mwaka mdudu wa zamani, Bash ana kweli imekuwa kusoma zaidi ya kwamba semicolon na pretty sana kufanya nini ni habari. Basi nini maana ya kwamba hatimaye? I just alisema "echo hello" au "echo katika mazingira magumu," lakini nini kama wewe alifanya kitu kweli malicious, kama rm -rf *, ambayo unaweza si milele typed kabla, na kusema ukweli pengine lazima si mapema mno, kwa sababu unaweza kufanya mengi ya uharibifu na hayo. Kwa nini? rm anafanya nini, bila shaka? Kuondosha. * Nini maana ya? Yote. Hivyo ni kinachojulikana kadi ya pori, hivyo ina maana kufuta kila kitu katika saraka ya sasa. r kinachotokea kwa maana ya kujirudia, ambayo ina maana kama nini wewe kufuta ni directory, na ndani ya huko ni files nyingine na directories nyingine, recursively kupiga mbizi katika huko na kufuta yote. Na -f ni mbaya zaidi ya wote. Mtu yeyote kujua nini -f ina maana hapa? Nguvu. Hivyo nguvu maana yake, hata kama hii ni wazo mbaya, kufanya hivyo bila kusababisha mimi kwa ajili ya uthibitisho zaidi. Hivyo, unajua, sisi kucheka hii, lakini kusema ukweli, mimi pengine aina hii mara nyingi siku, kwa sababu ukweli ni ni njia ya haraka sana kufuta rundo zima la mambo ya ajabu. Lakini hata mimi wamefanya baadhi ya uharibifu. Lakini kama ungekuwa na hila kompyuta ndani ya kufafanua baadhi variable kijinga au kazi kuitwa x, lakini kisha tricking kompyuta katika utekelezaji nje ya mipaka ya kwamba kazi, zaidi ya kuwa semicolon, unaweza kweli hila kompyuta ndani ya utekelezaji wa kitu kama rm -rf Barua pepe au amri au Copy amri. Kitu chochote literally unaweza kufanya na kompyuta, kama ni kufuta files, kujenga files, spamming mtu, kushambulia baadhi server remotely, kama unaweza kueleza ni na amri, unaweza hila kompyuta katika kufanya hivyo. Sasa nini mfano wa jinsi gani unaweza kufanya hili? Naam, kuna mengi ya kompyuta juu ya biashara ya mbio Bash. Sisi sote Mac watumiaji ni kati yao. mengi ya Linux servrar ni miongoni mwa yao kama vizuri, na servrar Unix. Windows tena anapata kiasi kutokuhusika isipokuwa wameweza imewekwa programu maalum. Sasa mengi ya watumishi, kwa mfano, servrar kuendesha mtandao, na kwa kweli Linux ni labda zaidi mfumo wa uendeshaji maarufu kwa kukimbia kwenye kompyuta kwenye mtandao kwamba ni kuwahudumia up kurasa za mtandao. Sasa kama tutaweza kuona baadaye katika muhula, wakati kutuma ombi kutoka yako Chrome browser--, Internet Explorer, whatever-- kijijini server, zinageuka kuwa hata kama wewe tu typed www.example.com, browser yako ni kutuma ujumbe hiyo kidogo zaidi arcane, kama hii. Lakini taarifa kitu kidogo ya ajabu. kwanza mistari miwili Sijawahi kuona mbele, lakini hawana kuangalia hasa kutisha. Lakini taarifa ya nini nimekuwa kuibiwa kwa mstari wa tatu hapa. Kama guy mbaya walikuwa kutuma ujumbe kama hii kutoka kwa kompyuta yake kwa Mac katika mazingira magumu au a wanaoishi katika mazingira magumu Linux server, kitu funny ni kwamba Bash, kuwa rahisi amri kidogo haraka, ni omnipresent na ni mara nyingi kutumika kwa kimsingi nitafanya yaliyomo ya ujumbe kwamba inayopata. Na kwa mantiki hiyo, unaweza hila mtandao wa kompyuta, kwa hiyo, kwa kutuma kitu kama User-Agent, ambayo kwa kawaida anapaswa kusema jina ya browser yako. User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, hii ni tu browser yako njia ya kutambua yenyewe. Lakini kama guy mbaya sana cleverly anasema, mm-mm, mimi nina si kwenda kukuambia nini browser yangu ni, Mimi nina badala kwenda kutuma wewe hii cryptic-kuangalia kitu na rm -rf * Katika hiyo, unaweza literally hila wanaoishi katika mazingira magumu mtandao wa kompyuta kwenye mtandao ndani ya utekelezaji hasa kwamba katika huko kwa kufuta yote ya files. Na kusema ukweli, si kwamba hata mbaya zaidi ya hiyo. Unaweza kufanya kitu chochote. Unaweza kuanza kusambazwa kunyimwa ya mashambulizi huduma kama wewe alituma ujumbe huu kwa mashada yote ya servrar mtandao na kisha alikuwa wote kushuka, kwa mfano, kwenye seva Harvard.edu, na unaweza aina ya bang heck nje ya yao na mtandao wa trafiki kwamba alikuwa vinginevyo yalisababisha na hii guy mbaya. Hivyo, hadithi muda mfupi, karibu kila mtu katika chumba hii ambaye anamiliki Mac ni katika mazingira magumu na hii. bitana fedha ni kwamba kama wewe ni mbio mtandao wa kompyuta juu ya mbali yako, na kama wewe wameweza kweli kimeundwa ni kuruhusu kitu kama SSH ndani yake, wewe ni kweli salama. Ni katika mazingira magumu, lakini hakuna moja kujaribu kupata katika Laptop yako, hivyo unaweza aina ya mapumziko uhakika. Hata hivyo, Apple hivi karibuni kuwa uppdatering fix kwa hili. ulimwengu wa Linux tayari iliyotolewa simu ya fixes kwa Fedora na Ubuntu na matoleo mengine ya Linux, na kwa kweli kama wewe kukimbia update 50 katika appliance, hata kwamba pia itakuwa updated na kusahihishwa. Lakini hiyo pia ina si kweli imekuwa katika mazingira magumu, kwa sababu kama wewe wameweza tinkered na appliance na alifanya mbali yako hadharani kupatikana kwenye mtandao, ambayo si by default, wewe wameweza kweli imekuwa faini kwa sababu ya firewalling na mbinu nyingine. Lakini ni mfano uliokithiri wa mdudu kwamba tumekuwa aliishi kwa ajili ya literally 20 miaka, na ambaye anajua kama mtu muda wote huu kuifahamu kuhusu hilo? Na kwa kweli, hii ni moja ya changamoto za msingi kwamba tutaweza kuona baadaye katika muhula kuhusu usalama, ni kwamba tu kama katika ulimwengu wa kweli, guys nzuri ni katika hasara. Kuweka watu wabaya nje, tuna kuhakikisha kwamba kila mlango umefungwa, kwamba kila dirisha ni salama, kwamba kila hatua ya kuingia ndani ya nyumba ni salama kuweka watu wabaya nje. Lakini ni nini guy mbaya na kufanya kwa kweli maelewano nyumba yako na kuiba kutoka kwenu? Yeye au yeye tu ana kupata moja unlocked mlango, moja kuvunjwa dirisha, au kitu pamoja na mistari wale, na ni kitu kimoja katika usalama wa kompyuta. Tunaweza kuandika mamilioni ya mistari ya programu code na kutumia mamia au maelfu ya masaa kujaribu kupata sahihi, lakini kama wewe kufanya moja tu makosa katika usahihi, unaweza kuweka mfumo mzima na kweli katika kesi hii, internet nzima na dunia katika hatari. Hivyo kama wewe Ningependa kujifunza zaidi kuhusu hili, kwenda URL hii hapa. Hakuna haja kwa ajili ya hatua usiku wa leo kama wewe ni miongoni mwa wale vizuri zaidi kwamba wamekuwa kuendesha mtandao yako mwenyewe server, katika kesi unapaswa ambayo, kwa kweli, update programu yako. Na hii pia ni jina la kusema, na sasa karatasi, kwamba tumekuwa wanaohusishwa juu ya tovuti shaka kwa ajili ya leo. Ilikuwa na wenzake jina lake Ken Thompson, ambaye ilikuwa kukubali maarufu sana tuzo katika sayansi ya kompyuta, na yeye alitoa hotuba hii baadhi ya miaka iliyopita, kimsingi juu ya mada hii. Kuuliza swali folks, lazima wewe kweli uaminifu, hatimaye, programu tumekuwa aliyopewa? Kwa mfano, sisi sote tuna wamekuwa kuandika mipango, na tumekuwa kuandaa yao na Clang. Na kwa maarifa yako, umeandika mipango yoyote kwa CS50 ambapo kuna mlango wa nyuma wa kila aina, kuna njia kwamba guy mbaya, kama kuendesha programu yako, inaweza kuchukua zaidi ya kompyuta yako? Pengine si, haki? Mario, na tamaa, na Mikopo. Hizi ni mipango yote pretty ndogo. Wewe d kuwa pretty mbaya kama kweli alifanya kompyuta yako yote wanaoishi katika mazingira magumu baada ya kuandika 10 au 20 mstari wa kanuni, au angalau hawajui baadhi ya matokeo ya usalama. Sasa mimi kusema kwamba facetiously, lakini sisi ni kwenda kuona leo na wiki hii ni kweli kweli, kweli rahisi kuwa mbaya na kufanya hata mipango short mazingira magumu. Lakini kwa sasa, angalau, kutambua kwamba swali kuulizwa hapa ni kuhusu Clang katika compiler. Kwa nini sisi wamekuwa kuamini Clang kwa kipindi cha wiki mbili au tatu? Nani wa kusema kwamba mtu aliandika Clang hakuwa na "kama" hali katika huko kwamba kimsingi sindano baadhi zeros na wale katika kila mpango inaandaa kwamba ingekuwa basi yeye au upatikanaji wake kompyuta yako wakati uko wamelala na Laptop yako mfuniko ni wazi na kompyuta yako ni mbio? Haki? Tuna aina hii ya mfumo wa heshima haki sasa ambapo tunaamini kwamba Clang ni legit. You kuamini kwamba appliance ni legit. You kuamini kwamba literally kila mpango juu ya Mac au PC yako ni ya kuaminika. Na kama mdudu huu rahisi unaonyesha, hata kama ni si malicious, hiyo ni kabisa si uwezekano wa kuwa na kesi. Hivyo unapaswa kuwa na hofu kama kuzimu. Kwa kweli, hakuna rahisi ufumbuzi wa hili nyingine kuliko aina ya ufahamu wa jamii ya utata kuongeza kwamba sisi ni kujenga juu ya mifumo ya kompyuta yetu, na jinsi zinazidi tupate vizuri sana kuwa. Sasa kwa kuwa alisema, Breakout. Hivyo kuzuka ni tatizo kuweka tatu, na Kuzuka ni mchezo kutoka yesteryear kwamba unaweza kukumbuka, lakini kwa ajili yetu katika tatizo kuweka tatu, inaruhusu sisi kuchukua mambo nyuma up notch hivyo kwamba wakati sisi ni kuandika mipango, hata katika dirisha Terminal kama hii, sisi kweli wanaweza kukimbia, hatimaye, mipango graphical si tofauti na wale tulikuwa na upatikanaji wa katika Scratch. Hivyo hii ni ya wafanyakazi utekelezaji wa kuzuka, ambayo ni tu hii matofali-kuvunja mchezo, kwamba hoja paddle yako nyuma na huko, na wewe hit mpira dhidi ya wale matofali ya rangi ya juu juu. Hivyo hii ni kuleta kwetu aina ya nyuma ambapo tulikuwa na uwezo wa kuwa haraka sana na Scratch, na sasa na C, kutekeleza yetu wenyewe graphical user interfaces. Lakini zaidi ya hapo, hii tatizo kuweka inawakilisha kwanza katika ambayo sisi ni kutoa wewe rundo la code. Na kwa kweli, mimi kuleta wazi makini na hili, kwa sababu hasa kwa wale chini ya starehe, hii kuweka tatizo, angalau katika mtazamo wa kwanza, ni kwenda kujisikia kama tumekuwa kuchukuliwa it up notch. Kwa sababu tumekuwa aliyopewa wewe, kwa baadhi ya utafutaji na kuchagua matatizo katika pset, rundo la kificho kwamba sisi aliandika, na michache ya maoni kwamba kusema "kufanya," ambapo una kujaza nafasi zilizoachwa wazi. Hivyo si pia inatisha, lakini ni mara ya kwanza sisi ni kuwapatia wewe kificho kwamba unahitaji kwanza kusoma, kuelewa, na kisha kuongeza kwa na kukamilisha. Na kisha kwa kuzuka, tunakwenda kufanya hivyo, kutoa kadhaa chache mistari zaidi ya kificho kwamba, kusema ukweli, kukupa mengi ya mfumo kwa mchezo lakini kuacha short ya utekelezaji wa matofali na mpira na paddle, lakini sisi kufanya kutekeleza baadhi ya vipengele vingine. Na hata kuwa katika mtazamo wa kwanza, tena, hasa kama chini ya starehe, inaweza kuonekana hasa ngumu na unafikiri kuna kazi nyingi mpya unahitaji wrap akili yako karibu, na kwamba ni kweli. Lakini kumbuka, ni kabisa kama Scratch. Tabia mbaya ni wewe hakuwa na matumizi yote ya vipande puzzle katika Scratch. Tabia mbaya ni wewe hakuwa na huduma kwa wrap akili yako karibu wote kwa sababu wote ilichukua mara mtazamo wa haraka kuelewa, oh, hiyo ni nini siwezi kufanya na kwamba puzzle kipande. Na hakika, katika tatizo kuweka 3 spec, tutaweza kumweka wewe katika nyaraka kwamba mapenzi kuanzisha wewe baadhi ya kazi mpya, na hatimaye programu constructs wewe kutumia. Masharti, loops, vigezo, na kazi itakuwa kufanana na nini tumeona hivi sasa. Hivyo kweli, nini tutaweza kutoa wewe ni baadhi ya kanuni sampuli kwamba inakuwezesha kujenga dirisha kwamba inaonekana si tofauti na hii, na hatimaye kugeuka ndani kitu kabisa kama hii. Hivyo kuchukua faida ya CS50, kujadili masaa ya ofisi na zaidi, na kuchukua faraja katika ukweli kwamba kiasi cha code una kuandika ni kweli si yote kwamba mengi. Changamoto ya kwanza ni tu kwa acclimate mwenyewe kwa baadhi ya kanuni tumekuwa imeandikwa. Maswali yoyote juu ya pset3, Shellshock, au vinginevyo? Watazamaji: Ni ilionekana kama kwenda kwa njia na kuzuka kwamba kanuni ni karibu kitu-oriented style, lakini nilifikiri C mara kitu-oriented mpango. SPIKA 1: swali bora. Hivyo katika kutafuta njia ya usambazaji code, kanuni na sisi aliandika kwa pset3, kwa wale jamaa, ni inaonekana kama ni kidogo kitu-oriented. Short jibu ni, ni. Ni makadirio ya jinsi anaweza kufanya kitu-oriented code kwa kutumia lugha kama C, lakini ni bado hatimaye kiutaratibu. Kuna hakuna njia ndani ya vigezo, kama utaona. Lakini ni kukumbusha ya kwamba. Na tutaweza kuona kipengele kwamba tena wakati sisi kupata PHP na JavaScript kuelekea mwisho wa muhula. Lakini kwa sasa, kufikiria ni kama ladha ya nini kuja. Swali nzuri. Wote haki. Hivyo kuunganisha aina ni jinsi sisi mambo kushoto wakati wa mwisho. Na kuunganisha aina ilikuwa baridi katika maana ya kwamba ilikuwa hivyo kwa kasi zaidi, angalau misingi ya vipimo haraka haraka sisi alifanya wiki iliyopita, kuliko kusema, Bubble aina, uteuzi aina, insertion aina. Na kile ambacho hakikuwa nadhifu pia ni tu jinsi ufupi na cleanly unaweza kueleza yake. Na nini sisi kusema ilikuwa ni juu amefungwa juu ya wakati mbio ya kuunganisha aina? Yeah? Watazamaji: n logi n? SPIKA 1: n logi n, haki. n logi n. Na tutaweza kuja nyuma kwa nini kwamba kweli ina maana au ambapo kwamba anakuja kutoka, lakini hii ilikuwa bora kuliko yale wakati mbio kuwa tuliona kwa Bubble uteuzi na insertion aina? Hivyo n squared. n squared ni kubwa kuliko hii, na hata kama si dhahiri kabisa, kujua kwamba n logi ni ndogo kuliko n, hivyo kama wewe kufanya mara n kitu kidogo kuliko n, ni kwenda kuwa chini ya n squared. Ni kidogo ya Intuition huko. Lakini sisi kulipwa kwa bei hii. Ilikuwa ni kwa kasi, lakini mandhari ambayo ilianza kuibuka wiki iliyopita ilikuwa tradeoff hii. I got utendaji bora wakati na hekima, lakini nini Je, mimi na kutumia kwa upande mwingine mkono, ili kufanikisha hilo? Watazamaji: Kumbukumbu. SPIKA 1: Sema tena? Watazamaji: Kumbukumbu. SPIKA 1: Kumbukumbu, au nafasi zaidi kwa ujumla. Na haikuwa super dhahiri na binadamu yetu, lakini kukumbuka kwamba waandishi wetu wa kujitolea walikuwa wanazidi mbele na wanazidi nyuma kama ingawa kuna safu hapa, na kama ingawa kuna safu ya pili hapa kwamba wanayoweza kutumia, kwa sababu sisi zinahitajika mahala fulani kwa kuunganisha folks wale. Tunaweza si tu wabadilishane yao katika nafasi. Hivyo kuunganisha aina kujiinua ni nafasi zaidi, ambayo sisi hakuwa na haja ya kwa algorithms mengine, lakini kichwa ni kwamba ni kwa kasi zaidi. Na kusema ukweli, katika nafasi halisi ya dunia haya RAM days--, hard disk space-- ni kiasi nafuu, na hivyo hiyo ni si lazima kitu mbaya. Basi hebu tuangalie kwa haraka, kidogo zaidi methodically, katika kile sisi alivyofanya na kwa nini sisi alisema ilikuwa n logi n. Hivyo hapa ni namba nane na kujitolea nane tulikuwa na wakati mwisho. Na jambo la kwanza kwamba Merge Aina alituambia kufanya ni nini? Watazamaji: Divide katika mbili. SPIKA 1: Sema tena? Watazamaji: Divide katika mbili. SPIKA 1: Divide katika mbili, kulia. Hii ni sawa na sana ya kitabu cha simu, ya mgawanyiko wa na kushinda zaidi kwa ujumla. Hivyo sisi inaonekana katika nusu kushoto. Na kisha mara moja sisi alisema, aina nusu ya kushoto ya mambo, nini sisi kusema ijayo? Aina nusu ya kushoto ya kushoto nusu, ambayo alituruhusu, baada ya kugawa katika mbili, kuzingatia nne na mbili. Jinsi gani unaweza aina orodha sasa, katika njano, ukubwa mbili, kwa kutumia Merge Aina? Naam kuigawanya katika nusu, na aina nusu kushoto. Na hii ilikuwa ambapo mambo got kidogo kijinga kwa ufupi. Jinsi gani unaweza aina orodha hiyo ni ya ukubwa moja, kama idadi hii nne hapa? Ni vyema. Wewe ni kosa. Lakini basi ni jinsi gani unaweza aina orodha ya ukubwa moja wakati ni namba mbili? Naam, kitu kimoja, lakini sasa nini ilikuwa tatu na hatua muhimu katika Unganisha Aina? You alikuwa na kuunganisha kushoto nusu na nusu ya haki. Na mara moja sisi alifanya hivyo, sisi inaonekana saa nne, sisi inaonekana saa mbili. Tuliamua haki ya wote, wazi mbili anakuja kwanza, hivyo sisi kuweka mbili katika wake mahali, ikifuatiwa na watu wanne. Na sasa una aina ya rewind, na hii ni aina ya tabia ya algorithm kama Unganisha Aina, rewind katika kumbukumbu. Alikuwa mstari wa pili ya hadithi ni nini? Nifanye kulenga ijayo? nusu haki ya kushoto nusu, ambayo ni sita na nane. Hivyo basi mimi tu hatua kwa njia hii bila belaboring uhakika sana. Sita na nane, kisha sita ni Iliyopangwa, nane ni Iliyopangwa. Kuunganisha yao pamoja kama kwamba, na sasa kubwa ijayo hatua ni, bila shaka, aina nusu haki kutoka hatua ya kwanza ya algorithm hii. Hivyo sisi kuzingatia moja, tatu, saba, tano. Sisi basi kuzingatia nusu kushoto. nusu ya kushoto ya kwamba, nusu haki ya kwamba, na kisha kuunganisha katika moja na tatu. Kisha nusu haki, kisha kushoto nusu yake, basi nusu haki yake. Kuunganisha katika, na sasa nini hatua bado? Kuunganisha kubwa nusu kushoto na kubwa nusu haki, hivyo moja huenda kuna chini, kisha mbili, kisha tatu, nne, kisha tano, basi sita, kisha saba, nane. Hivyo sasa kwa nini hii hatimaye akifafanua, hasa kama n na logarithms zaidi kwa ujumla badala kutoroka wewe, angalau katika kumbukumbu ya hivi karibuni? Naam, taarifa urefu wa jambo hili. Tulikuwa na mambo nane, na sisi kuigawa na mbili, na mbili, na mbili. Hivyo kuingia msingi mbili ya nane inatupa tatu. Na matumaini yangu juu ya kwamba kama hazy kidogo juu ya hilo. Lakini kuingia msingi mbili ya nane ni tatu, hivyo tumefanya tabaka tatu za kuunganisha. Na wakati sisi ilijiunga mambo, jinsi wengi vipengele gani sisi kuangalia juu ya kila ya mistari hizo? jumla ya n, haki? Kwa sababu kwa kuunganisha safu ya juu, ingawa sisi alifanya hivyo piecemeal, sisi hatimaye kuguswa kila idadi mara moja. Na katika mstari wa pili, kwa kuunganisha orodha wale wa kawaida mbili, tulikuwa na kugusa kila kipengele mara moja. Na kisha hapa kweli wazi katika mstari wa mwisho, tulikuwa na kugusa kila mmoja wa wale mambo mara moja, lakini mara moja tu, hivyo humu uongo, basi, n logi yetu n. Na sasa tu kufanya mambo kidogo rasmi zaidi kwa muda tu, kama wewe walikuwa na sasa kuchambua hii katika aina ya kiwango cha juu na kujaribu kuamua, vizuri jinsi wanaweza kwenda juu ya kuonyesha wakati mbio ya algorithm hii tu kwa kuangalia saa yake na si kwa kutumia mfano contrived? Naam, ni kiasi gani wakati unaweza kusema hatua kama hii katika njano bila kuchukua, kama n <2 kurudi? Hiyo ni O kubwa ya nini? Hivyo mimi nina kuona moja, hivyo hatua moja, labda hatua mbili kwa sababu ni kama na kisha kurudi, lakini ni wakati mara kwa mara, haki? Hivyo tulisema O (1), na kwamba jinsi mimi itabidi kueleza hii. T, tu kuwa mbio wakati. n ni ukubwa wa pembejeo, hivyo T (n), njia tu dhana ya kusema mbio wakati huo mchango wa ukubwa n ni kwenda kuwa juu ya utaratibu ya muda mara kwa mara, katika O (1). Lakini vinginevyo, nini kuhusu hili? Jinsi gani unaweza kueleza mbio wakati wa mstari huu njano? T ya nini? Unaweza aina ya kudanganya hapa na jibu swali langu cyclically. Hivyo kama mbio wakati katika ujumla sisi tu kusema ni T (n). Na sasa wewe ni aina ya punting hapa na akisema, vizuri, tu aina nusu kushoto, na kisha kutatua nusu ya haki. Jinsi gani sisi mfano kuwakilisha wakati wa mstari huu njano mbio? T ya nini? Nini ukubwa wa pembejeo? n juu ya mbili. Kwa nini si mimi tu kusema kwamba? Na kisha hii ni mwingine T (n / 2) na kisha tena, kama mimi kuunganisha halves mbili sorted, jinsi mambo mengi mimi kwenda kwa kuwa na kugusa jumla? n. Hivyo siwezi kueleza hii, tu kuwa aina ya dhana tu, kama mbio wakati kwa ujumla. T (n) ni tu wakati mbio ya T (n / 2), pamoja na T (n / 2), kushoto nusu na nusu wa kulia, pamoja na O (n), ambayo pengine ni n hatua, lakini labda, kama mimi nina kutumia vidole viwili, ni mara mbili kama wengi hatua, lakini ni linear. Ni baadhi ya idadi ya hatua hiyo ni sababu ya n, hivyo tupate kueleza hii kama hii. Na hii ni mahali ambapo sasa tutaweza Punt kwa nyuma ya shule ya sekondari yetu math vitabu vya kiada sisi ni kwamba upprepning hatimaye mwisho juu ni sawa na hii, n mara logi n, kama kweli kufanya nje math zaidi rasmi. Hivyo hiyo ni mitazamo miwili tu. Numerically moja kwa ngumu-coded mfano mwakilishi kutumia namba nane, na zaidi ujumla kuangalia jinsi gani sisi got huko. Lakini nini kweli kuvutia hapa ni, tena, wazo hili la baiskeli. Mimi si kutumia kwa ajili ya loops. Mimi nina aina ya kufafanua kitu katika suala la yenyewe, si tu na hii kazi hisabati, lakini pia katika suala la kanuni hii Pseudo. Hii ni Pseudo code kujirudia katika wawili wa mistari yake kimsingi ni kuwaambia ni kwenda kutumia yenyewe ya kutatua ndogo tatizo la kawaida kidogo, na kisha tena na tena na tena mpaka sisi whittle ni chini ya kinachojulikana kesi hii ya msingi. Basi hebu kweli kuteka zaidi ya kulazimisha kuchukua-mbali na hii kama ifuatavyo. Hebu kwenda katika gedit na kuchukua kuangalia baadhi ya chanzo kanuni ya leo, hasa mfano huu hapa. Sigma 0, ambayo inaonekana anaongeza namba moja kwa njia ya n. Basi hebu angalia nini familiar na usio wa kawaida hapa. Kwanza sisi kuwa wanandoa wa pamoja na, hivyo hakuna jipya huko. Mfano. Mimi nina hazy kidogo juu ya hii ni baada ya siku chache, lakini nini sisi kusema mfano wa kazi ni? Watazamaji: [inaudible]. SPIKA 1: Nini hiyo? Watazamaji: Sisi kutangaza yake. SPIKA 1: Sisi kutangaza yake. Basi, wewe ni kufundisha Clang, hey, si kweli kutekeleza hili bado, lakini mahali fulani katika faili hili, labda, ni kwenda kuwa kazi kuitwa nini? Sigma. Na hii ni ahadi kwamba ni kwenda kuangalia kama hii. Ni kwenda kuchukua integer kama input-- na naweza kuwa wazi zaidi na kusema int n --and ni kwenda na kurudi int, lakini njia semicolon, mm, mimi itabidi kupata kote kwa kutekeleza hili baadaye kidogo. Tena, Clang ni bubu. Ni tu kwenda kujua nini kumweleza ni juu hadi chini, hivyo tunahitaji angalau kuwapa ni ladha ya nini kuja. Sasa hebu tuangalie kuu hapa. Hebu kitabu chini hapa na kuona nini kuu ni kufanya. Siyo kwamba muda mrefu ya kazi, na kwa kweli kujenga hapa ni ukoo. Mimi kutangaza variable n, na kisha Mimi bemba user tena na tena kwa integer chanya kwa kutumia GetInt, na tu exit nje ya kitanzi hii mara moja user ina iakttagit. Je, Wakati, tumekuwa kutumika kwa bemba user katika njia hiyo. Sasa hii ni ya kuvutia. Mimi kutangaza int kuitwa "jibu." Mimi hawawajui thamani ya kurudi ya kazi kuitwa "sigma." Mimi sijui nini kwamba hana bado, lakini Nakumbuka kutangaza ni wakati iliyopita. Na kisha mimi nina kupita katika thamani kwamba mtumiaji typed katika, n, na kisha mimi ripoti jibu. Naam hebu kitabu nyuma kwa muda tu. Hebu kwenda mbele katika saraka hii, kufanya sigma 0, na kwa kweli kuendesha mpango huu na kuona nini kinatokea. Hivyo kama mimi kwenda mbele na kukimbia mpango huu, ./sigma-0, na mimi aina katika chanya integer kama mbili, Sigma, kama alama ya Kigiriki ina maana, ni tu kwenda kuongeza up namba zote kutoka sifuri juu ya hadi mbili. Hivyo 0 plus 1 plus 2. Hivyo hii lazima hopefully nipe 3. Hayo ni yote ni kufanya. Na vile vile, kama mimi kukimbia hii tena na mimi kuwapa namba tatu, hiyo ni 3 plus 2, hivyo hiyo ni 5, plus 1 anipe 6. Na kisha kama mimi kupata kweli mambo na kuanza kuandika katika namba kubwa, ni lazima nipe kiasi kubwa na kubwa zaidi. Hivyo kwamba ni yote. Kwa hiyo ni nini sigma kuangalia kama? Naam, ni pretty moja kwa moja. Ni jinsi gani sisi tupate kuwa kutekelezwa hii kwa wanandoa wa zamani wa wiki. "Int" ni kwenda kuwa aina ya kurudi. Sigma ni jina, na inachukua m variable badala ya n. Mimi itabidi mabadiliko ya kwamba juu juu. Basi hii ni tu sanity hundi. Tutaweza kuona nini katika wakati huu. Sasa mimi kutangaza mwingine kutofautiana, Jumla, initialize kwa sifuri. Basi nina hii Kwa kitanzi iterating, inaonekana kwa uwazi, kutoka i = 1 hadi kwenye = m, ambayo ni chochote user typed katika, na kisha mimi increment Jumla kama hii. Na kisha kurudi Jumla. Hivyo wanandoa wa maswali. Moja, mimi kudai katika maoni yangu kwamba huu avoids hatari ya kitanzi usio. Kwa nini kupita katika namba hasi kushawishi, uwezekano, kitanzi usio? Watazamaji: Wewe utakuwa kamwe kufikia m. SPIKA 1: Kamwe kufikia m. Lakini m ni kupita katika, hivyo hebu kufikiria mfano rahisi. Kama m ni kupita katika na user kama hasi moja. Bila kujali kuu. Kuu ya kulinda sisi kutoka huu pia, hivyo mimi nina tu kuwa kweli anal na sigma pia kuhakikisha kwamba pembejeo hawezi kuwa hasi. Hivyo kama m ni hasi, kitu kama hasi moja. Nini kitatokea? Naam, i ni kwenda kupata initialized kwa moja, na kisha i ni kwenda kuwa chini ya au sawa na m? Kusimama kwa. Hiyo was-- hebu si, hebu Nix hadithi hii. Mimi si kuuliza swali hilo, kwa sababu hatari kwamba mimi inataja si kwenda kutokea kwa sababu i ni daima kwenda kuwa kubwa than-- OK, Mimi retract swali hilo. OK. Hebu lengo tu juu ya sehemu hii hapa. Kwa nini mimi kutangaza baadhi nje ya kitanzi? Taarifa juu ya line 49 nimekuwa alitangaza i ndani ya kitanzi, lakini online 48 nimekuwa alitangaza baadhi ya nje. Yeah. Watazamaji: [inaudible]. SPIKA 1: Uhakika. Hivyo kwanza kabisa mimi hakika hawana nataka kutangaza na initialize Jumla na sifuri ndani ya kitanzi juu ya kila iteration, kwa sababu hii ingekuwa wazi kushindwa madhumuni ya summing up idadi. Napenda kuendelea kubadilisha thamani ya nyuma na sifuri. Na pia, nini mwingine zaidi arcane Sababu ya kuwa sawa uamuzi wa kubuni? Yeah. Watazamaji: [inaudible]. SPIKA 1: Hasa. Nataka kupata hiyo nje ya kitanzi pia juu ya nini mstari? On 53. Na misingi ya utawala wetu wa kidole gumba kutoka michache ya mihadhara iliyopita, vigezo ni scoped, kwa kweli, kwa braces curly kwamba imewazunguka yao. Hivyo kama mimi si kutangaza Jumla ndani ya wa haya nje braces curly, Siwezi kutumia katika line 53. Kuweka njia nyingine, kama mimi alitangaza Jumla katika hapa, au hata ndani ya Kwa kitanzi, sikuweza kupata ni katika 53. variable ingekuwa na gone. Hivyo michache ya sababu huko. Lakini sasa hebu kwenda nyuma na kuona nini kinatokea. Hivyo sigma anapata kuitwa. Inaongeza up 1 plus 2, au 1 plus 2 plus 3, na kisha anarudi thamani, maduka katika jibu, na printf hapa ni kwa nini mimi nina kuona juu ya screen. Hivyo hii ni nini tutaweza wito iterative mbinu, ambapo iteration tu ina maana ya kutumia kitanzi. A Kwa kitanzi, Wakati kitanzi, Do Wakati kitanzi, tu kufanya kitu tena na tena na tena. Lakini sigma ni aina ya kazi nadhifu katika kwamba mimi naweza kutekeleza ni tofauti. Nini kuhusu hili, ambayo tu kuwa aina ya baridi, basi mimi kweli kujikwamua mengi ya ovyo kwa sababu kazi hii ni kweli ni rahisi sana. Hebu whittle ni chini tu kwa mistari yake manne ya na kujikwamua yote maoni na braces curly. Hii ni aina ya akili-mbiu mbadala utekelezaji. Haki wote, labda si akili-mbiu, lakini ni aina ya sexier, kila haki, kuangalia hii hivyo zaidi kwa ufupi. Pamoja na mistari minne tu wa kanuni, Mimi kwanza na hii kuangalia sanity. Kama m ni chini ya au sawa na sifuri, sigma haina mantiki. Ni tu walidhani kuwa katika kesi hii kwa idadi chanya, hivyo mimi nina kwenda tu kwa kurudi zero kiholela ili sisi angalau kuwa na baadhi kinachojulikana kesi ya msingi. Lakini hapa ni uzuri. ukamilifu wa wazo hili, na kuongeza namba kuanzia 1 mpaka n, au m katika kesi hii, inaweza kufanyika kwa aina ya kupita mume. Naam, ni nini ni jumla ya 1 na m? Naam, unajua nini? Ni sawa kama jumla ya m pamoja na Jumla ya 1 kwa m minus 1. Naam unajua nini? Nini sigma ya m minus 1? Naam, kama wewe aina ya kufuata hii mantiki, ni sawa na kama m minus 1 pamoja na sigma ya m minus 2. Hivyo unaweza aina ya just-- hii ni kama, kama wewe ni tu kujaribu waudhi rafiki na wao kuuliza swali, wewe aina ya kujibu kwa swali, unaweza aina ya kuweka kupita mume. Lakini nini muhimu ni kwamba kama wewe kuweka kufanya swali na ndogo ndogo na ndogo, wewe ni si kuuliza nini sigma ya n, nini sigma ya n, nini sigma ya n? Wewe ni kuuliza nini sigma ya n, nini sigma ya n minus 1, nini sigma ya n minus 2? Hatimaye swali lako inaenda kuwa nini? Sigma ya mtu mmoja au ni nini sifuri, baadhi ya thamani ndogo sana, na kwa haraka kama wewe kupata kwamba, rafiki yako, wewe si kwenda kuuliza swali moja tena, wewe ni kwenda tu kusema, oh ni sifuri. Sisi ni kosa kucheza aina hii ya kijinga mchezo mzunguko. Hivyo kujirudia ni tendo katika programu ya kazi wito yenyewe. Mpango huu, wakati ulioandaliwa na kukimbia, ni kwenda kuishi hasa kwa njia hiyo, lakini nini muhimu ni kwamba ndani ya ya kazi kuitwa sigma, kuna mstari wa kanuni ambayo sisi ni wito wenyewe, ambayo kwa kawaida kuwa mbaya. Kwa mfano, nini kama mimi kwanza ulioandaliwa hii, hivyo kufanya sigma-- kufanya sigma 1 ./sigma-1. Chanya integer, tafadhali, 50 1275. Basi nini kazi inaonekana kuwa, kulingana na mtihani mmoja, sahihi. Lakini nini kama mimi kupata kidogo hatari na kufuta kinachojulikana kesi ya msingi, na tu kusema, pamoja na mimi nina maamuzi tu hii ngumu zaidi kuliko ilivyo. Hebu tu compute sigma kwa kuchukua m na kisha kuongeza katika sigma ya m minus moja? Naam, nini kinaendelea kutokea hapa? Hebu zoom nje. Hebu recompile mpango, kuokoa yake, recompile mpango, na kisha tayari ./sigma-1 zooming katika, kuingia integer chanya tafadhali, 50. Jinsi gani wengi wa wewe ni tayari kwa fess up kwa kuona kwamba? OK. Hivyo hii inaweza kutokea kwa idadi ya sababu, na kusema ukweli wiki hii tuko kuhusu kukupa zaidi yao. Lakini katika kesi hii, jaribu kwa sababu nyuma nini kinaweza kuwa kilichotokea hapa? Mkato wa soko kosa, sisi alisema jana wakati, inahusu sehemu ya kumbukumbu. Kitu mbaya kilichotokea. Lakini kile ambacho kilikuwa ni mechanically kwamba alikwenda awry hapa kwa sababu ya kuondolewa yangu ya kwamba kinachojulikana kesi ya msingi, ambapo mimi akarudi ngumu-coded thamani? Unafikiri potoka? Yeah. Watazamaji: [inaudible]. SPIKA 1: Ah. Swali nzuri. Hivyo ukubwa wa idadi kwamba nilikuwa summing up got hivyo kubwa kwamba ilizidi ukubwa wa nafasi ya kumbukumbu. Wazo nzuri, lakini si kimsingi kwenda kusababisha ajali. Ambayo inaweza kusababisha integer kufurika, ambapo bits tu flip juu ya na kisha sisi makosa kweli kubwa simu kwa kama idadi hasi, lakini kwamba yenyewe si kusababisha ajali. Kwa sababu mwishoni mwa siku int bado ni 32 bits. Wewe si kwenda kwa ajali kuiba 33 bit. Lakini wazo nzuri. Yeah. Watazamaji: [inaudible]. SPIKA 1: Njia kamwe ataacha mbio, na kwa kweli ni wito yenyewe tena na tena na tena na tena na tena, na hakuna hata mmoja wa kazi hizo milele kumaliza kwa sababu line yao ya pekee ya code wito themself tena na tena na tena. Na nini kweli kinachotokea hapa, na sasa sisi unaweza aina ya kuteka hii pictorially. Hebu kwenda juu ya picha kwa muda tu. Hii ni picha, kwamba hatimaye nyama nje kwa undani zaidi, ya nini kinaendelea ndani ya kumbukumbu ya kompyuta yako. Na zinageuka kuwa juu ya chini ya picha hii ni kitu kinachoitwa stack. Hii ni chunk ya kumbukumbu, chunk ya RAM, hiyo ni tu kutumika wakati wowote kazi ni kuitwa. Yoyote wakati wewe, programu, wito kazi, mfumo wa uendeshaji, kama Mac OS, Windows, au Linux, grabs rundo la ka, labda kilobytes chache, megabytes labda chache ya kumbukumbu, mikono yao na wewe, na kisha lets wewe kukimbia kazi yako kwa kutumia chochote vigezo unahitaji. Na kama wewe kisha kuwaita mwingine kazi na kazi nyingine, kupata kipande nyingine ya kumbukumbu na kipande nyingine ya kumbukumbu. Na hakika, kama hawa trays kijani kutoka Annenberg kuwakilisha kwamba kumbukumbu, hapa ni nini kinatokea kwanza wakati wewe piga kazi sigma. Ni kama kuweka tray kama hii juu ya nini awali stack tupu. Lakini basi kama kwamba tray wito yenyewe, hivyo kusema, wito mfano mwingine ya sigma, hiyo ni kama kuuliza mfumo wa uendeshaji, ooh, haja kidogo zaidi ya kumbukumbu, nipe hiyo. Na kisha anapata piled juu ya juu. Lakini nini muhimu hapa ni kwamba tray kwanza ni bado kuna, kwa sababu yeye kutenguliwa tray hii ya pili. Sasa wakati huo huo, sigma wito sigma, hiyo ni kama kuuliza kwa zaidi ya kumbukumbu. Anapata piled juu ya zaidi ya hapa. sigma wito sigma, hii ni sababu nyingine tray kwamba anapata piled juu ya hapa. Na kama wewe kuendelea kufanya hivyo, hatimaye, aina ya ramani hii Visual kwa kuwa chati, nini kinaendelea kutokea kwa stack ya trays? Ni kwenda kisichozidi kiasi ya kumbukumbu ya kompyuta yako ina. Na kwa haraka kama hii tray kijani unazidi line usawa juu stack na hapo juu kwamba neno chungu, ambayo tutaweza kurudi katika siku za usoni, kwamba ni jambo baya. lundo ni tofauti sehemu ya kumbukumbu, na kama wewe, waache hawa trays rundo na rundo juu, wewe ni kwenda kisichozidi sehemu yako mwenyewe ya kumbukumbu, na mpango ni kweli kwenda kwa ajali. Sasa kama kando, wazo hili ya kujirudia, kwa hiyo, unaweza wazi kusababisha matatizo, lakini si lazima kitu mbaya. Kwa sababu kufikiria, baada ya wote, how-- na labda hii inachukua baadhi ya kupata kutumika kwa --how kifahari au jinsi rahisi kwamba utekelezaji wa sigma mara. Na sisi ni si kwenda kutumia kujirudia yote kwamba mengi katika CS50, lakini katika CS51, na kwa kweli darasa yoyote ambapo kuendesha miundo data kama miti, au miti familia, kwamba kuwa na baadhi ya uongozi, ni super, super muhimu. Sasa, kama kando, ili kama anayetaka wanasayansi wa kompyuta ni ukoo na baadhi ya Google ya utani ndani, kama wewe kwenda Google na wewe kuangalia juu ni nini ufafanuzi wa, kusema, kujirudia, kuingia. Uh-huh. Kama kando, mimi vunjwa up chache. Hii ilikuwa kama dakika 10 ya uajizi asubuhi hii. Kama wewe pia Google "potovu," ilani na tilting kichwa yako slightly-- na kisha hii moja ni labda mauaji zaidi ya yote tangu mtu alitumia kama siku yao kutekeleza azma hii baadhi ya miaka ago-- kuja juu. Oh, wait-- hiyo ni mdudu. Hivyo mbio juu ya moja ya Nje kubwa duniani ni kijinga kidogo haya mayai ya Pasaka. Pengine hutumia nontrivial idadi ya mstari wa kanuni hivyo tu kwamba tunaweza kuwa na kidogo fun mambo kama hayo. Lakini angalau sasa, kupata baadhi ya utani wale ndani. Sasa hebu tuangalie baadhi ya nyeupe uongo tumekuwa kuwaambia wa marehemu, na kuanza peel nyuma tabaka baadhi kitaalam ili kweli kuelewa nini imekuwa kinachoendelea na unaweza kuelewa baadhi ya vitisho, kama Shellshock, kwamba sasa kuanza kuwa juu ya mstari wa mbele katika kila mtu makini, angalau katika vyombo vya habari. Hivyo hapa ni kazi rahisi sana kwamba anarudi kitu, batili. Jina lake ni kubadilishana. Inachukua katika vigezo mbili na kuirudisha chochote. Inachukua katika a na b. Hivyo maandamano ya haraka. Sisi kuletwa haya juu. Tunaweza pia kuchukua kidogo kuvunja hapa kwa muda tu na kuwa na kitu kidogo ya kunywa. Kama mtu bila akili kujiunga na me up hapa kwa muda tu. Vipi kuhusu wewe katika shati maroon? Kuja juu juu. Moja tu leo. Asante, ingawa. Zote haki, na sisi kuja juu ambao hapa? Nini jina lako? SPIKA 4: Laura. SPIKA 1: Laura. Kuja juu juu. Hivyo Laura, changamoto rahisi sana leo. Nice kukutana na yo. Wote haki. Hivyo tuna baadhi ya maziwa juu ya hapa na tuna baadhi ya juisi ya machungwa juu ya hapa na baadhi ya vikombe kwamba sisi zilizokopwa kutoka Annenberg leo. SPIKA 4: zilizokopwa. SPIKA 1: Na kwenda mbele na kukupa nusu glasi ya hii. Wote haki. Na tutaweza kukupa nusu glasi ya maziwa. Oh, na hivyo tu kwamba unaweza kumbuka nini hii ilikuwa kama, Mimi ikumbukwe kuleta hii juu na juu ya leo. Sawa. Kama isingekuwa akili, hebu angalia, sisi unaweza kuweka yao juu ya miwani yako mwenyewe kama unataka. Hii itakuwa dunia kutoka macho Laura ya. Wote haki. Hivyo lengo yako, kutokana na vikombe viwili vya kioevu hapa, maziwa na juisi ya machungwa, ni wabadilishane yaliyomo mbili ili juisi ya machungwa huenda katika kikombe maziwa na maziwa huenda katika juisi ya machungwa kikombe. SPIKA 4: Je, mimi kupata kikombe mwingine? SPIKA 1: Mimi nimefurahi wewe aliuliza, ingawa ingekuwa bora zaidi Footage kama alikuwa na si aliuliza. Lakini ndiyo, tunaweza kutoa tatu kikombe hiyo ni tupu, bila shaka. Wote haki. Hivyo wabadilishane yaliyomo huko. Nzuri sana. Nzuri sana. Wewe ni kufanya hivyo inashangaza kwa makini. Na hatua tatu. Wote haki. Excellent. duru kubwa ya applause itakuwa vizuri kwa Laura. Wote haki. Tuna kidogo zimefunguliwa zawadi kwa ajili yenu, lakini napenda kuchukua hizi. Asante sana. Basi mfano rahisi, ingawa, kuonyesha kwamba kama wewe kufanya wanataka wabadilishane yaliyomo ya vyombo mbili, au hebu kuwaita vigezo, unahitaji baadhi ya kuhifadhi muda hatua ya moja ya yaliyomo katika hivyo kuwa unaweza kweli kufanya byta. Hivyo kweli, chanzo hiki code hapa up katika C ni mwakilishi wa hasa kwamba. Kama maji ya machungwa mara a na maziwa mara b, na sisi alitaka wabadilishane mbili, unaweza kujaribu kitu ubunifu kwa kumwaga moja katika nyingine, lakini kwamba pengine ingekuwa si mwisho hasa vizuri. Na hivyo sisi kutumia tatu kikombe, wito ni TMP, T-M-P na mkataba huo, na kuweka yaliyomo ya OJ katika kwamba, basi wabadilishane kikombe moja, kisha kuweka OJ ndani ya kikombe awali, na hivyo kufikia, hasa kama Laura hivyo, wabadilishane. Basi hebu kufanya hasa kwamba. Hebu kwenda mbele na kufungua up mfano kwamba kweli kuitwa "hakuna wabadilishane, "kwa sababu hii ni si kufanyika kama tu kama wewe kufikiri. Hivyo katika mpango huu, taarifa kwamba Mimi nina kutumia stdio.h, rafiki yetu ya zamani. Nina mfano kwa wabadilishane up huko, ambayo ina maana utekelezaji wake ya pengine chini chini, na hebu angalia nini hii kuu mpango kwenda kufanya kwa ajili yangu. Mimi kwanza kutangaza int x anapata moja, na int y anapata mbili. Hivyo kufikiri ya wale kama OJ na maziwa, kwa mtiririko huo. Na kisha mimi tu printf akisema x ni hii na y ni hii, tu ili niweze kuibua kuona nini kinaendelea. Kisha mimi kuwa printf wakidai kwamba mimi nina swapping mbili, na kisha mimi magazeti nje kudai kwamba wao ni walibadilishana, na mimi magazeti nje x na y tena. Hivyo hapa chini katika wabadilishane ni nini hasa Laura hivyo, na hasa yale tuliona juu ya screen wakati iliyopita. Basi hebu kwenda mbele na kuwa sorely tamaa. Kufanya hakuna wabadilishane, na kukimbia hakuna wabadilishane, zooming katika juu ya pato hapa. Kuingia x ni 1, y ni 2, swapping swapped. x ni bado 1, na y ni bado 2. Hivyo hata ingawa, kusema ukweli, hii inaonekana hasa kama, pamoja na zaidi kitaalam, nini Laura hivyo, hawakuwa wanaonekana kazi. Hivyo kwa nini ni kwamba? Naam, ni zinageuka kuwa wakati sisi kuandika mpango kama hii ambayo ina wote wawili kuu, yalionyesha hapa, na kisha kazi nyingine, kama wabadilishane, yalionyesha hapa, ambayo wito, dunia inaonekana kitu kidogo kama trays haya wakati iliyopita. Wakati kuu kwanza anapata kuitwa, hiyo ni kama kuuliza mfumo wa uendeshaji kwa kidogo ya kumbukumbu kwa ajili ya serikali za mitaa vigezo kama x na y ambayo ina kuu, na wao kuishia haki pale. Lakini kama wito kuu wabadilishane, na kuu hupita wabadilishane hoja mbili, a na b, juisi ya machungwa na maziwa, siyo kama kuwapatia maji ya machungwa na maziwa kwa Laura. Nini kompyuta gani, ni hupita nakala ya juisi ya machungwa na nakala za maziwa kwa Laura, ili nini hatimaye ndani ya tray hii ni thamani moja na mbili, au OJ na maziwa, lakini nakala yake, hivyo kwamba katika hatua hii katika hadithi, kuna ni OJ na maziwa katika kila moja ya trays haya. Kuna moja na mbili katika kila moja ya trays haya, na kubadilishana kazi ni kweli kazi. Ni swapping yao ndani ya ya pili topmost tray, lakini kwamba swapping ina athari hakuna. Na misingi ya baadhi tu kanuni ya msingi tumekuwa kuongelea kabla, na kwa kweli tu dakika chache zilizopita, kile inaweza kueleza kwa nini kubadilisha a na b ndani ya wabadilishane haina madhara juu ya x na y, ingawa Mimi kupita x na y kwa wabadilishane kazi. Nini neno muhimu hapa kwamba wanaweza simplistically kueleza? Nadhani habari hiyo hapa? Watazamaji: Return. SPIKA 1: Kurudi? Si kurudi. Hebu kwenda na nyingine moja. Nini hiyo? Watazamaji: [inaudible]. SPIKA 1: OK, hivyo return-- tunaweza kufanya kazi ya kurudi katika hadithi, lakini kuna maelezo hata rahisi. Watazamaji: Scope. SPIKA 1: Scope. Mimi itabidi kuchukua upeo. Hivyo upeo, kukumbuka ambapo x yetu na y alisema. Wao ni alitangaza ndani ya ya kuu haki hapa. a na b, wakati huo huo, ni ufanisi alitangaza ndani ya wabadilishane, si kabisa katika braces curly lakini bado katika eneo la jumla ya wabadilishane. Na hivyo kweli, a na b tu kuwepo ndani ya tray hii kutoka Annenberg, hii chunk ya pili ya code. Hivyo sisi ni kweli kubadilisha nakala, lakini kwamba si kweli yote kusaidia. Basi hebu tuangalie ngazi hii kidogo chini. Mimi nina kwenda nyuma katika Chanzo Directory, na mimi nina kwenda kwa kwanza zoom katika hapa, na tu kuthibitisha kwamba mimi niko katika hii terminal dirisha kubwa, mpango bado tabia kama hiyo. Tuseme sasa kwamba hili ni si kukusudia. Ni wazi nilitaka wabadilishane kwa kazi, hivyo anahisi kama mdudu. Sasa mimi naweza kuanza kuongeza mengi ya printf kwa code yangu, uchapishaji nje x zaidi ya hapa, y juu ya hapa, zaidi ya hapa, b zaidi ya hapa. Lakini kusema ukweli, kwamba pengine nini tumekuwa kufanya kwa wiki kadhaa sasa, katika masaa ya ofisi na nyumbani wakati wa kufanya kazi juu ya psets kujaribu kupata baadhi ya mende. Lakini utaona, kama wewe si tayari, tatizo kwamba kuweka tatu utangulizi wewe kwa amri aitwaye GDB, ambapo GDB, GNU HatiJava, ina yenyewe rundo zima la sifa ya kuwa unaweza kweli hebu kuelewa hali kama hii, lakini zaidi compellingly, kutatua matatizo na kupata mende. Hivyo nina kwenda kufanya hivyo. Badala ya ./noswap, mimi nina badala kwenda kukimbia GDB ./noswap. Kwa maneno mengine, mimi nina kwenda kukimbia yangu mpango si katika Bash, rafiki yetu mpya leo. Mimi nina kwenda kukimbia yangu mpango noswap ndani ya ya programu nyingine hii inaitwa GDB, ambayo ni HatiJava, ambayo ni mpango hiyo iliyoundwa na kusaidia wewe binadamu kupata na kuondoa mende. Hivyo kama mimi hit kukimbia hapa, kuna kiasi mauaji ya maandishi kwamba kwa kweli kamwe kuwa na kusoma. Ni kimsingi ovyo kutoka haraka, ambayo Mimi nina kwenda hit Kudhibiti-L kupata hadi saa juu huko. Hii ni GDB haraka. Kama nataka kukimbia mpango huu sasa, kama hii kidogo kudanganya karatasi juu ya leo slide unaonyesha, kukimbia ni mara ya kwanza amri kwamba sisi maana ya kuanzisha. Na mimi nina kwenda tu aina kukimbia hadi hapa ndani ya GDB, na kwa kweli ni mbio mpango wangu. Sasa kuna baadhi ya ziada matokeo ya screen kama hii, lakini hiyo ni GDB kuwa tu anal na kutuambia nini kinaendelea. Wewe si kweli kuwa na wasiwasi juu ya maelezo haya hivi sasa. Lakini nini kweli cool kuhusu GDB, kama mimi kufanya hii again-- Kudhibiti-L clears screen-- basi mimi kwenda mbele na aina ya "kuvunja kuu," hivyo, wakati mimi hit Enter, kuweka nini kuitwa kuvunja uhakika katika noswap.c, line 16, ambayo ni ambapo GDB figured nje ya mpango wangu kweli ni, kazi yangu kweli ni. Hii tutaweza kupuuza kwa sasa lakini hiyo ni anwani katika kumbukumbu hasa ya kazi hii. Hivyo sasa wakati mimi aina kukimbia, taarifa ya nini ni baridi hapa. Mpango wangu mapumziko katika mstari wa mimi aliiambia GDB pause utekelezaji katika. Kwa hiyo mimi hawana sasa kubadilisha kanuni wangu, kuongeza baadhi ya ya printf, recompile yake, rerun yake, mabadiliko, kuongeza baadhi ya ya printf, kuokoa yake, recompile yake, kukimbia yake. Naweza kutembea tu kwa njia ya mpango wangu hatua kwa hatua kwa hatua kwa kasi ya binadamu, si katika aina Intel-ndani ya kasi. Hivyo sasa taarifa mstari huu inaonekana hapa, na kama mimi kwenda nyuma kwa mpango wangu katika gedit, taarifa kwamba kwamba ni kweli mstari wa kwanza sana wa kanuni. Kuna mstari 16 katika gedit. Kuna mstari 16 ndani ya GDB, na hata ingawa interface hii nyeusi na nyeupe ni karibu kama si user kirafiki, hii ina maana kwamba line 16 haikutekelezwa bado, lakini ni kuhusu kuwa. Hivyo kweli kama mimi aina magazeti x, si printf, magazeti tu x, Mimi kupata baadhi ya thamani bogus huko ya sifuri, kwa sababu x haijawahi initialized bado. Hivyo mimi nina kwenda aina ya pili, au, kama wewe unataka kuwa dhana tu, n tu kwa ajili ya pili. Lakini wakati mimi aina ya kuingia, sasa taarifa ni hatua juu ya mstari 17. Hivyo mantiki, kama nimekuwa kunyongwa line 16 na mimi sasa aina magazeti x, nini anatakiwa kuona nini? One. Na sasa hii ni admittedly utata. $ 2 ni njia tu ya dhana ya, kama wewe wanataka rejea thamani kwamba baadaye, unaweza kusema "dola ishara mbili." Ni kama nyuma ya kumbukumbu. Lakini kwa sasa, tu kupuuza. Nini kuvutia ni nini juu ya haki ya ishara sawa. Na sasa kama mimi aina ya pili yake na magazeti y, mimi lazima kuona 2. Mimi pia sasa magazeti x tena, na kusema ukweli, kama mimi nina kupata kuchanganyikiwa kidogo kama kwa ambapo mimi, siwezi aina orodha kwa orodha na tu kuona baadhi mazingira kuzunguka mimi nina uhakika kweli katika. Na sasa siwezi aina pili, na huko x ni 1. Sasa mimi aina ya pili. Oh, y ni 2. Na tena, ni utata, kwa sababu pato GDB ya ni kuwa lilichanganyika na pato wangu mwenyewe. Lakini kama wewe kuweka katika akili, na glancing na kurudi katika code yako au kuwekewa nje upande kwa upande labda, itabidi kuona kwamba kweli mimi nina tu wanazidi kupitia mpango wangu. Lakini taarifa nini kinatokea ijayo, literally. Hapa ni line 22. Hebu kwenda juu yake, na hivyo kuhamia kwenye kwa 23, na kama mimi magazeti x sasa, bado moja. Na kama mimi magazeti y sasa, bado moja. Hivyo hii ni si zoezi muhimu. Basi hebu Rudia huu. Hebu kwenda nyuma juu ya juu na aina kukimbia tena. Na ni kusema kwamba, programu hiyo kuwa debugged imeanza tayari, ilianza kutoka mwanzo. Ndiyo, hebu kufanya hii tena. Na wakati huu hebu kufanya ijayo, pili, pili, pili, pili, lakini sasa mambo kupata kuvutia. Sasa nataka hatua katika wabadilishane, hivyo mimi si aina ya pili. Mimi aina hatua, na sasa taarifa hiyo imeongezeka mimi noswap.c line 33. Kama mimi kwenda nyuma ya gedit, nini line 33? Hiyo ni kwanza halisi mstari wa kanuni ndani ya wabadilishane. Ambayo ni nzuri, kwa sababu sasa naweza aina ya poke kuzunguka na kupata curious kama kwa nini kinaendelea kweli huko. Hebu magazeti TMP. Whoa. Kwa nini TMP kuwa na baadhi ya mambo, bogus takataka thamani? Watazamaji: Ni haijawahi initialized. SPIKA 1: Ni haijawahi initialized. Na hakika, wakati wewe kukimbia mpango, wewe ni kupewa rundo zima la kumbukumbu na mfumo wa uendeshaji, lakini wewe si initialized maadili yoyote, hivyo chochote bits wewe ni kuona hapa, hata kama ni hii mambo kubwa hasi simu, tu ina maana kwamba wale ni mabaki kutoka baadhi ya matumizi ya awali ya kwamba RAM, hata mimi na si mwenyewe zinahitajika kuwa bado. Hivyo sasa mimi nina kwenda mbele na aina ijayo, na kama mimi sasa aina magazeti TMP, nini anatakiwa kuona nini? Chochote thamani ya mara, a ni hoja ya kwanza, tu kama x kwa mara ya kwanza Jambo kuwa alipita katika, hivyo na x lazima ziwe sawa, hivyo magazeti TMP lazima magazeti yangu mmoja. Hivyo kile utaona katika tatizo kuweka tatu ni mafunzo ya aina juu ya GDB, lakini kutambua kwamba huu ni mwanzo ya kuangalia chombo kwamba kwa kweli kukusaidia kutatua matatizo sana kwa ufanisi zaidi. Nini sisi ni hatimaye kwenda kufanya juu ya Jumatano ni kuanza peel nyuma tabaka chache na kuondoa baadhi magurudumu mafunzo. Hiyo kitu kinachoitwa kamba kwamba tumekuwa kutumika kwa muda fulani, tunakwenda polepole kuchukua kwamba mbali kutoka kwenu na kuanza kuzungumza juu ya kitu esoterically zaidi inayojulikana kama * Char, lakini sisi ni kwenda kufanya nzuri hii na upole kwa mara ya kwanza, ingawa kuyatumia, kama wao ni kuitwa, unaweza kufanya baadhi ya mambo mabaya sana kama vibaya, kwa kuangalia claymation kidogo kutoka rafiki yetu Nick Parlante kutoka Stanford Chuo Kikuu, profesa katika kompyuta sayansi ambao kuweka pamoja hakikisho hili ya nini kuja hii ya Jumatano. [VIDEO avspelning] -Hey, Binky. Kuamka. Ni wakati kwa pointer na furaha. -Nini Hiyo? Kujifunza kuhusu kuyatumia? Oh, goody! [END video avspelning] SPIKA 1: Hiyo watapata wewe juu ya Jumatano. Tutaweza kuona wewe hapo. [VIDEO avspelning] -Na Sasa, Deep Thoughts, na Daven Farnham. -Kwa Ni sisi kujifunza C? Kwa nini si +? [Kicheko] [END video avspelning]