1 00:00:00,000 --> 00:00:12,040 >> [CHWARAE CERDDORIAETH] 2 00:00:12,040 --> 00:00:16,460 >> SIARADWR 1: pob hawl, mae hyn yn CS50, ac mae hyn yn dechrau wythnos pedwar, 3 00:00:16,460 --> 00:00:20,420 ac fel y efallai eich bod wedi clywed neu darllen, mae'r byd wedi bod yn dod i ben. 4 00:00:20,420 --> 00:00:23,520 Mynd o amgylch y rhyngrwyd wedi bod gwybodaeth ac ymwybyddiaeth 5 00:00:23,520 --> 00:00:27,100 o nam mewn rhaglen, a iaith raglennu o'r enw Bash. 6 00:00:27,100 --> 00:00:32,729 Mae hyn wedi cael ei frandio rhyfeddol fel Shellshock, neu y drws Bash, 7 00:00:32,729 --> 00:00:35,485 ond mae erthyglau fel y rhain Nid yw wedi bod yn anghyffredin. 8 00:00:35,485 --> 00:00:38,807 Ac yn wir, mae llawer ohonynt yn dod â atgofion cefn Heartbleed, 9 00:00:38,807 --> 00:00:41,640 sydd efallai eich bod wedi sylwi yn y pwyso yn ôl y gwanwyn hwn yn y gorffennol, a oedd yn 10 00:00:41,640 --> 00:00:43,980 Roedd yr un modd eithaf dramatig. 11 00:00:43,980 --> 00:00:47,110 Yn awr y rhai ohonoch yma heddiw, faint sydd gennych, 12 00:00:47,110 --> 00:00:50,330 hyd yn oed os nad ydych yn deall yr hyn y mae'n ymwneud, clywed am Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Mae pob hawl, a faint ohonoch chi gyfrifiaduron sy'n agored i niwed? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, dylai fod yn llawer, llawer mwy o ddwylo i fyny ar hyn o bryd, am resymau cawn weld. 17 00:01:00,250 --> 00:01:02,580 >> Gadewch i ni edrych ar beth sydd bod yn mynd ymlaen yn y cyfryngau 18 00:01:02,580 --> 00:01:05,304 ac yna esbonio ychydig yma i ni yn dechnegol. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> SIARADWR 2: arbenigwyr diogelwch wedi rhybuddio y gallai nam difrifol 21 00:01:11,250 --> 00:01:15,650 fod ar fin effeithio ar gannoedd o miliynau o ddefnyddwyr y we yn y byd. 22 00:01:15,650 --> 00:01:20,600 Felly beth yn union yw y byg sydd wedi bod trosleisio'r Shellshock, a beth mae'n ei wneud? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Wel, Shellshock ei adnabod hefyd fel y Bug Bash, mae'r meddalwedd yn manteisio. 25 00:01:28,910 --> 00:01:33,230 Hacwyr yn defnyddio'r firws i sganio yn agored i niwed systemau sy'n rhedeg Linux a Unix 26 00:01:33,230 --> 00:01:36,300 gweithredu systemau ac yna eu heintio. 27 00:01:36,300 --> 00:01:38,730 Bash yn gragen llinell orchymyn. 28 00:01:38,730 --> 00:01:43,460 Mae hyn yn gadael y mater i ddefnyddwyr gorchmynion i lansio rhaglenni a nodweddion o fewn meddalwedd 29 00:01:43,460 --> 00:01:45,250 trwy deipio testun. 30 00:01:45,250 --> 00:01:49,980 Mae'n cael ei ddefnyddio fel arfer gan rhaglenwyr, a Ni ddylai fod yn agored i'r byd ehangach, 31 00:01:49,980 --> 00:01:51,590 er Shellshock yn newid hynny. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Wel, worringly, mae rhai dadansoddwyr rhybuddio y gallai fod yn fygythiad mwy, 34 00:01:57,910 --> 00:02:01,580 oherwydd Shellshock yn caniatáu cwblhau rheolaeth peiriant wedi'i heintio, 35 00:02:01,580 --> 00:02:06,030 tra Heartbleed yn unig a ganiateir hacwyr i sbïo ar gyfrifiaduron. 36 00:02:06,030 --> 00:02:09,130 Mae mor ddifrifol, mae'n eu graddio o 10 allan o 10 37 00:02:09,130 --> 00:02:11,900 ar gyfer difrifoldeb gan y National Cronfa Ddata Agored i niwed. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 o'r holl gweinyddwyr gwe mewn risg, gan gynnwys rhai cyfrifiaduron Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Wel, gwnewch yn siŵr eich chlytia eich systemau yn awr. 42 00:02:25,600 --> 00:02:29,330 Unrhyw un sy'n cynnal gwefan rhedeg y systemau gweithredu effeithir 43 00:02:29,330 --> 00:02:31,800 Dylai gymryd camau cyn gynted â phosibl. 44 00:02:31,800 --> 00:02:35,390 Gall unrhyw un sy'n gallu fforddio dylai edrych i'w cais monitro a gwe 45 00:02:35,390 --> 00:02:37,355 waliau tân gadw golwg am unrhyw ymosodiadau. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SIARADWR 3: Y peth gwaethaf a allai ddigwydd yn 48 00:02:41,770 --> 00:02:45,080 y byddai rhywun yn ysgrifennu cod sy'n yn mynd yn awtomatig ac yn sganio 49 00:02:45,080 --> 00:02:48,280 Byddai y rhyngrwyd ac yn effeithio ar pob un o'r cyfrifiaduron hyn. 50 00:02:48,280 --> 00:02:50,710 Ac unwaith y byddant yn gwneud hynny, yn dda, y peth gwaethaf y gallent ei wneud 51 00:02:50,710 --> 00:02:53,300 yn unig yw dileu popeth, neu eu cau i lawr y safleoedd. 52 00:02:53,300 --> 00:02:55,360 Felly, gallem weld difrod o safbwynt hwnnw, 53 00:02:55,360 --> 00:02:58,300 lle byddai gennym bobl maleisus sydd ond yn penderfynu creu hafoc 54 00:02:58,300 --> 00:03:02,534 trwy ddod â systemau i lawr neu ddileu ffeiliau, a phethau fel 'na. 55 00:03:02,534 --> 00:03:05,200 SIARADWR 2: Mae rhai yn dweud mae hwn yn un o'r rhai mwyaf anodd i'w fesur 56 00:03:05,200 --> 00:03:08,080 bugs yn ystod y blynyddoedd, ac mae'n Gall gymryd wythnosau neu hyd yn oed 57 00:03:08,080 --> 00:03:10,820 mis i benderfynu ar ei effaith yn y pen draw. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> SIARADWR 1: Felly yr holl o'r hynny'n wir, ond y peth rhyfedd yw, mae bron pob 60 00:03:15,560 --> 00:03:18,330 o'r ddelweddaeth 'ch jyst yn gweld, ac eithrio ar gyfer efallai y bysellfwrdd, 61 00:03:18,330 --> 00:03:20,930 wedi ddim i'w wneud â y byg o gwbl. 62 00:03:20,930 --> 00:03:23,960 Gweinyddwyr a gwifrau ac yn y blaen, mae'n gysylltiedig â math o meysydd sy'n gysylltiedig, 63 00:03:23,960 --> 00:03:27,410 ond ar yr graidd 'i' mewn gwirionedd 'n bert gyfarwydd beth sy'n digwydd yma. 64 00:03:27,410 --> 00:03:30,050 Yn wir, gadewch i mi fynd i mewn i ein peiriant CS50. 65 00:03:30,050 --> 00:03:32,910 Gadewch i mi fynd yn ei flaen ac yn gwneud y gorau y ffenestr terfynell yma. 66 00:03:32,910 --> 00:03:36,020 Ac rydych guys wedi bod yn defnyddio'r hyn, neu'r fersiwn gwreiddio ohono, 67 00:03:36,020 --> 00:03:39,460 mewn gedit er mwyn ysgrifennu rhaglenni, teipio gorchmynion, ac yn y blaen, 68 00:03:39,460 --> 00:03:43,690 ac mae hyn yn mewn gwirionedd, ac mae ganddo wedi bod am wythnosau, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Dyma'r Bourne-unwaith eto gragen, sydd ychydig yn ffordd ffansi o ddweud, 70 00:03:46,890 --> 00:03:50,220 mae hon yn rhaglen sydd â amrantu brydlon, yn effeithiol, 71 00:03:50,220 --> 00:03:51,970 sy'n eistedd yno aros ar gyfer mewnbwn i chi. 72 00:03:51,970 --> 00:03:53,920 Ac mae'n y gorchymyn rhyngwyneb lein drwy sy'n 73 00:03:53,920 --> 00:03:57,650 chi guys wedi bod yn rhedeg gorchmynion a yn y pen draw llunio ac yna'n rhedeg 74 00:03:57,650 --> 00:03:58,400 rhaglenni. 75 00:03:58,400 --> 00:04:01,320 >> Ond mae Bash hefyd yn rhaglennu iaith yn yr ystyr ganlynol. 76 00:04:01,320 --> 00:04:05,460 Rydych chi'n gwybod bod yna gorchmynion tebyg cd a ls a hefyd chlang ac eraill, 77 00:04:05,460 --> 00:04:09,580 ond gallwch ddiffinio eich gorchmynion hun drwy eu rhoi ar waith yn Bash. 78 00:04:09,580 --> 00:04:11,420 Nawr, nid ydym yn mynd i mynd i fanylder mawr 79 00:04:11,420 --> 00:04:16,089 ag i Bash iaith raglennu, ond yn gwybod, er enghraifft, fod ar hyn o bryd, 80 00:04:16,089 --> 00:04:17,607 does dim Gelwir command "helo." 81 00:04:17,607 --> 00:04:19,440 Fel bod modd ei gweld yn un o'r pecynnau hyn. 82 00:04:19,440 --> 00:04:20,856 Dyw hi ddim yn osod ar fy nghyfrifiadur. 83 00:04:20,856 --> 00:04:21,870 Gofynnwch i'ch gweinyddwr. 84 00:04:21,870 --> 00:04:26,030 Ond os wyf am yno i fod yn rhaglen o'r enw "helo" yn Bash neu yn fy brydlon, 85 00:04:26,030 --> 00:04:30,810 Gall Fi 'n weithredol ddefnyddio cystrawen dyna yn eithaf tebyg i C. Nid yw'n union yr un fath, 86 00:04:30,810 --> 00:04:35,020 ond mae'n edrych yn eithaf tebyg i un swyddogaeth, er goll rhai manylion. 87 00:04:35,020 --> 00:04:38,090 Nid oes dim yn ymddangos i ddigwydd, ond erbyn hyn os byddaf deipio "helo," 88 00:04:38,090 --> 00:04:40,960 alli 'n weithredol ysgrifennu rhaglen, nid yn C, nid yn Java, 89 00:04:40,960 --> 00:04:44,280 nid mewn rhaglennu arall iaith, ond yn Bash ei hun. 90 00:04:44,280 --> 00:04:47,630 >> Nawr bod y allweddol yma yw fy mod ysgrifennodd y enwi oeddwn am roi y gorchymyn newydd, 91 00:04:47,630 --> 00:04:50,820 ac mae'r cromfachau hefyd symbolaidd o hyn fod yn swyddogaeth. 92 00:04:50,820 --> 00:04:54,010 Gyda llaw, gallwch hefyd wneud hwyl pethau, ac yn wir, hyd yn oed ar Mac OS, 93 00:04:54,010 --> 00:04:55,620 mae hon yn rhaglen o'r enw Terfynell. 94 00:04:55,620 --> 00:04:58,800 Mae'n dod adeiladu i mewn unrhyw un gyfrifiadur sydd â Mac yn yr ystafell hon, 95 00:04:58,800 --> 00:05:03,640 a gallwch wneud pethau tebyg yn Mac AO, ond gallwch fynd yn fwy y tu hwnt i hynny. 96 00:05:03,640 --> 00:05:07,110 Ac mae hyn yn ychydig yn ymylol, ond mae'n fath o hwyl. 97 00:05:07,110 --> 00:05:09,715 Cefais fy atgoffa y bore yma, wrth feddwl hyn drwy, 98 00:05:09,715 --> 00:05:13,279 o ychydig o gêm yr wyf yn arfer chwarae gydag un o gyn TFS CS50 yn 99 00:05:13,279 --> 00:05:16,570 lle unrhyw bryd byddai'n cerdded i ffwrdd oddi wrth ei bysellfwrdd gyda'i sgrîn datgloi, 100 00:05:16,570 --> 00:05:23,611 Byddwn yn gweithredu gorchymyn fel this-- "ddweud helo." 101 00:05:23,611 --> 00:05:26,610 Ac yn awr unrhyw adeg daeth yn ôl at ei bysellfwrdd ar ôl i mi glirio y sgrin 102 00:05:26,610 --> 00:05:27,985 a byddai'n eistedd i lawr, ceisio gwneud rhywfaint o waith, 103 00:05:27,985 --> 00:05:29,250 rhestru cynnwys ei directory-- 104 00:05:29,250 --> 00:05:29,510 >> [SAIN Playback] 105 00:05:29,510 --> 00:05:30,010 >> -Hello. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Helo. 108 00:05:32,120 --> 00:05:35,030 >> SIARADWR 1: Felly, a bod yn deg, nid oedd mewn gwirionedd yn "helo." 109 00:05:35,030 --> 00:05:36,894 Mae fel arfer yn rhywbeth debycach i that-- 110 00:05:36,894 --> 00:05:37,560 [SAIN Playback] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 SIARADWR 1: --that wyf would-- felly byddai ei gyfrifiadur 113 00:05:39,320 --> 00:05:42,170 rhegi arno unrhyw adeg ei fod mewn gwirionedd eistedd i lawr ar ei bysellfwrdd. 114 00:05:42,170 --> 00:05:46,265 Ac yn gyflym iawn, efe a cyfrifedig allan beidio â gadael ei sgrin ddatgloi. 115 00:05:46,265 --> 00:05:48,730 Ond mae hyn yn awgrymu y math o hwyl dwp sy'n eich 116 00:05:48,730 --> 00:05:50,210 Gall gael gyda rhywbeth fel Bash. 117 00:05:50,210 --> 00:05:52,770 Ond mae'n ychydig yn fwy difrifol, i fod yn sicr, na hynny. 118 00:05:52,770 --> 00:05:57,235 Ac yn wir, mae hyn yn un o'r y rhan fwyaf o chwilod peryglus a hir-barhaol 119 00:05:57,235 --> 00:05:58,860 sydd wedi taro y byd 'n sylweddol yn fyd-eang. 120 00:05:58,860 --> 00:06:02,060 Mae'r byg wedi bod o gwmpas am ryw 20 mlynedd, 121 00:06:02,060 --> 00:06:05,780 a byddwch yn taro mewn dim ond hyn o bryd gan ei symlrwydd cymharol. 122 00:06:05,780 --> 00:06:07,990 >> Felly mae hwn yn gynrychiolydd gorchymyn, os ydych 123 00:06:07,990 --> 00:06:10,448 yn berchen ar Mac, yn llythrennol ar hyn o bryd pan fyddwch yn cael eich caead ar agor, 124 00:06:10,448 --> 00:06:12,940 gallwch roi cynnig teipio i mewn i hynny rhaglen o'r enw Terfynell. 125 00:06:12,940 --> 00:06:15,410 Terfynol yn dan Ceisiadau Utilities-- 126 00:06:15,410 --> 00:06:18,790 am unwaith, nid oes rhaid i ddefnyddwyr Windows phoeni am hyn threat-- penodol 127 00:06:18,790 --> 00:06:22,310 ond gall y rhai ohonoch sydd â Macs deipio hyn i mewn i ffenestr fel y bydda i'n ei wneud yma, 128 00:06:22,310 --> 00:06:24,210 ac os ydych yn teipio hynny yn y rhaglen hon 129 00:06:24,210 --> 00:06:28,830 Gelwir Terminal, fel 'n annhymerus' ei wneud yn awr, os ydych yn gweld y gair "agored i niwed," 130 00:06:28,830 --> 00:06:32,200 eich cyfrifiadur yn agored i gael eu hecsbloetio. 131 00:06:32,200 --> 00:06:33,850 >> Nawr beth mae hynny'n ei olygu mewn gwirionedd? 132 00:06:33,850 --> 00:06:35,870 Ac mae hyn yn rhaid cyfaddef rhywfaint o gystrawen eithaf gwallgof, 133 00:06:35,870 --> 00:06:39,050 ond gadewch i ni o leiaf yn tynnu allan rhai o'r agweddau diddorol. 134 00:06:39,050 --> 00:06:42,567 Felly, mae rhywfaint o gystrawen sy'n edrych ychydig yn gyfarwydd, o leiaf o C 135 00:06:42,567 --> 00:06:43,950 a rhaglennu yn fwy cyffredinol. 136 00:06:43,950 --> 00:06:47,550 Rwy'n gweld rhai cromfachau, hanner colon, bresys cyrliog, ac o'r fath, 137 00:06:47,550 --> 00:06:50,820 ond mae'n troi allan bod hyn beth gwirion yma mewn melyn 138 00:06:50,820 --> 00:06:53,580 yn ei hanfod yn swyddogaeth sy'n gwneud dim. 139 00:06:53,580 --> 00:06:57,840 Y dull colon yn gwneud dim, ac mae'r hanner colon yn golygu rhoi'r gorau i wneud dim byd. 140 00:06:57,840 --> 00:07:00,250 Felly, y tu mewn o'r rhain braces cyrliog, mae'r ffaith 141 00:07:00,250 --> 00:07:02,440 fy mod yn cael gyfartal arwyddo i'r chwith, mae hyn 142 00:07:02,440 --> 00:07:05,500 yn creu ei hanfod gorchymyn, neu newidyn, 143 00:07:05,500 --> 00:07:09,520 Gelwir x, ac yn aseinio ei bod ychydig melyn o god yno. 144 00:07:09,520 --> 00:07:14,040 Gallai hynny fod yn rhywbeth fel "eco helo "neu" yn dweud Canu "neu rywbeth 145 00:07:14,040 --> 00:07:15,120 debyg i hynny. 146 00:07:15,120 --> 00:07:17,780 Ond yn sylwi os yw eich llygaid crwydro ymhellach ar y dde, 147 00:07:17,780 --> 00:07:22,150 mae yna fwy i'r llinell hon nag dim ond diwedd y hanner colon. 148 00:07:22,150 --> 00:07:25,160 "Echo agored i niwed," ac yna tu hwnt i hynny mae hyd yn oed mwy. 149 00:07:25,160 --> 00:07:26,530 Hanner colon, -c arall bash :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Mor fyr stori hir, y llinell hon o god yn 152 00:07:34,050 --> 00:07:36,660 ddigonol ar gyfer cymhellol cyfrifiadur dyna 153 00:07:36,660 --> 00:07:39,830 agored i wneud rhywbeth eich bod am iddo ei wneud, 154 00:07:39,830 --> 00:07:44,290 oherwydd mae 'na bug yn Bash lle er bod Bash oedd i fod i roi'r gorau i 155 00:07:44,290 --> 00:07:48,980 llinellau darllen o gorchymyn hawl yno ar ôl y testun melyn, 156 00:07:48,980 --> 00:07:52,520 ar gyfer 20-plws oed bug flwyddyn, Bash mewn gwirionedd wedi bod yn darllen 157 00:07:52,520 --> 00:07:56,780 y tu hwnt i'r hanner colon a 'n bert llawer yn gwneud yr hyn y mae'n ei hadrodd. 158 00:07:56,780 --> 00:07:59,070 >> Felly beth yw'r goblygiadau o hynny yn y pen draw? 159 00:07:59,070 --> 00:08:01,340 Wyf newydd ei ddweud "helo echo" neu "adleisio agored i niwed," 160 00:08:01,340 --> 00:08:05,449 ond beth os ydych yn gwneud rhywbeth mewn gwirionedd yn faleisus, fel rm -rf *, 161 00:08:05,449 --> 00:08:07,240 nad ydych efallai wedi teipio erioed o'r blaen, 162 00:08:07,240 --> 00:08:08,920 a dweud y gwir mae'n debyg y ddylai heb fod yn rhy fuan, 163 00:08:08,920 --> 00:08:10,700 oherwydd gallwch wneud llawer o ddifrod ag ef. 164 00:08:10,700 --> 00:08:11,210 Pam? 165 00:08:11,210 --> 00:08:12,990 rm sy'n gwneud beth, wrth gwrs? 166 00:08:12,990 --> 00:08:14,270 Cael gwared. 167 00:08:14,270 --> 00:08:15,930 * Yn golygu beth? 168 00:08:15,930 --> 00:08:16,430 All. 169 00:08:16,430 --> 00:08:18,180 Felly mae'n hyn a elwir yn cerdyn gwyllt, felly mae'n golygu 170 00:08:18,180 --> 00:08:20,410 dileu popeth yn y cyfeiriadur cyfredol. 171 00:08:20,410 --> 00:08:23,379 -r digwydd i olygu recursive, sy'n golygu os bydd hyn yr ydych yn dileu 172 00:08:23,379 --> 00:08:26,420 yn gyfeiriadur, ac y tu mewn o yno yn ffeiliau eraill a chyfeiriaduron eraill, 173 00:08:26,420 --> 00:08:28,950 recursively plymio i mewn yno ac yn dileu popeth o hynny. 174 00:08:28,950 --> 00:08:31,040 Ac -f yw'r gwaethaf ohonynt i gyd. 175 00:08:31,040 --> 00:08:32,580 Unrhyw un yn gwybod beth -f ei olygu fan hyn? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Heddlu. 178 00:08:34,360 --> 00:08:37,830 Felly grym yn golygu, hyd yn oed os yw hyn yn syniad drwg, 179 00:08:37,830 --> 00:08:40,939 wneud hynny heb anogaeth i mi am gadarnhad pellach. 180 00:08:40,939 --> 00:08:43,230 Felly, chi'n gwybod, rydym yn chwerthin ar hyn, ond dweud y gwir, yr wyf yn ôl pob tebyg 181 00:08:43,230 --> 00:08:44,972 teipiwch hyn sawl gwaith y dydd, gan fod y realiti 182 00:08:44,972 --> 00:08:47,210 yw ei fod yn y ffordd gyflymaf i dileu criw cyfan o bethau. 183 00:08:47,210 --> 00:08:48,590 Ond hyd yn oed yr wyf wedi gwneud rhywfaint o niwed. 184 00:08:48,590 --> 00:08:53,100 >> Ond os ydych yn twyllo cyfrifiadur mewn i ddiffinio rhai newidyn dwp 185 00:08:53,100 --> 00:08:56,810 neu swyddogaeth o'r enw x, ond yna twyllo'r y cyfrifiadur i mewn i gweithredu 186 00:08:56,810 --> 00:09:00,030 tu hwnt i ffiniau hynny swyddogaeth, y tu hwnt i'r hanner colon, 187 00:09:00,030 --> 00:09:04,430 Gallai yn wir i chi twyllo cyfrifiadur i mewn i weithredu rhywbeth fel rm -rf 188 00:09:04,430 --> 00:09:07,810 neu'r Ebost gorchymyn neu y gorchymyn Copy. 189 00:09:07,810 --> 00:09:11,400 Unrhyw beth llythrennol y gallwch ei wneud gyda'r cyfrifiadur, boed yn dileu ffeiliau, 190 00:09:11,400 --> 00:09:15,350 creu ffeiliau, spamio rhywun, ymosod peth gweinydd o bell, 191 00:09:15,350 --> 00:09:17,190 os gallwch fynegi ei gyda meistrolaeth, rydych 192 00:09:17,190 --> 00:09:19,120 Gall castia cyfrifiadur i mewn i wneud hynny. 193 00:09:19,120 --> 00:09:21,510 >> Nawr beth yw enghraifft o sut y byddwch yn gwneud hyn? 194 00:09:21,510 --> 00:09:24,300 Wel, mae llawer o gyfrifiaduron ar y Bash rhedeg y rhyngrwyd. 195 00:09:24,300 --> 00:09:26,390 Mae pob un ohonom defnyddwyr Mac yn eu plith. 196 00:09:26,390 --> 00:09:30,390 Mae llawer o weinyddion Linux ymhlith nhw hefyd, a gweinyddwyr Unix. 197 00:09:30,390 --> 00:09:32,630 Ffenestri unwaith eto yn cael gymharol oddi ar y bachyn 198 00:09:32,630 --> 00:09:34,590 oni bai eich bod wedi gosod meddalwedd arbennig. 199 00:09:34,590 --> 00:09:37,130 Erbyn hyn, mae llawer o weinyddion, ar gyfer enghraifft, gweinyddwyr gwe yn rhedeg, 200 00:09:37,130 --> 00:09:39,840 ac mewn gwirionedd Linux efallai yw'r y rhan fwyaf o system weithredu poblogaidd 201 00:09:39,840 --> 00:09:43,060 i redeg ar gyfrifiaduron ar y rhyngrwyd sydd yn gwasanaethu i fyny tudalennau gwe. 202 00:09:43,060 --> 00:09:44,910 Nawr fel y byddwn yn gweld yn nes ymlaen yn y semester, pan 203 00:09:44,910 --> 00:09:48,470 i chi anfon cais gan eich Chrome browser--, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- i weinydd anghysbell, 205 00:09:50,790 --> 00:09:53,730 mae'n ymddangos bod hyd yn oed er 'ch jyst deipio www.example.com, 206 00:09:53,730 --> 00:09:59,590 eich porwr yn anfon neges dyna ychydig yn fwy dirgel, fel hyn. 207 00:09:59,590 --> 00:10:01,239 >> Ond sylwi rhywbeth bach rhyfedd. 208 00:10:01,239 --> 00:10:03,030 Mae'r ddwy linell gyntaf Dwi erioed wedi gweld o'r blaen, 209 00:10:03,030 --> 00:10:04,904 ond nid ydynt yn edrych arbennig o fygythiol. 210 00:10:04,904 --> 00:10:08,030 Ond sylwi ar hyn yr wyf wedi dwyn am y drydedd linell yma. 211 00:10:08,030 --> 00:10:13,390 Os bydd dyn drwg yn anfon neges fel hyn o'i gyfrifiadur 212 00:10:13,390 --> 00:10:17,270 i'r Mac neu agored i niwed gweinydd Linux sy'n agored i niwed, 213 00:10:17,270 --> 00:10:21,580 y peth rhyfedd yw bod Bash, hynny brydlon gorchymyn bach syml, 214 00:10:21,580 --> 00:10:27,450 yn hollbresennol ac yn aml defnyddio i weithredu yn y bôn 215 00:10:27,450 --> 00:10:30,020 gynnwys y neges y mae'n ei dderbyn. 216 00:10:30,020 --> 00:10:33,490 Ac erbyn y rhesymeg, gallwch castia gweinydd gwe, felly, 217 00:10:33,490 --> 00:10:36,370 drwy anfon rhywbeth fel Defnyddiwr-Asiant, sydd fel arfer 218 00:10:36,370 --> 00:10:38,300 i fod i ddweud y enwi eich porwr. 219 00:10:38,300 --> 00:10:42,420 Defnyddiwr-Asiant Chrome, Defnyddiwr-Asiant Rhyngrwyd Explorer, Defnyddiwr-Asiant Firefox, mae hyn 220 00:10:42,420 --> 00:10:44,590 yn unig yw eich porwr ffordd o adnabod ei hun. 221 00:10:44,590 --> 00:10:46,605 Ond os bydd dyn drwg iawn Dywed gelfydd, mm-mm, rwy'n 222 00:10:46,605 --> 00:10:47,930 ddim yn mynd i ddweud wrthych beth yw fy porwr yn, 223 00:10:47,930 --> 00:10:50,888 Im 'yn lle mynd i anfon chi yma cryptig-edrych beth gyda -rf rm 224 00:10:50,888 --> 00:10:55,840 * Ynddo, gallwch llythrennol castia a weinydd y we sy'n agored i niwed ar y rhyngrwyd 225 00:10:55,840 --> 00:10:59,055 i mewn i gweithredu yn union hynny yn yno ar gyfer dileu pob un o'r ffeiliau. 226 00:10:59,055 --> 00:11:00,930 Ac yn dweud y gwir, nid yw hynny'n hyd yn oed y gwaethaf ohono. 227 00:11:00,930 --> 00:11:01,763 Gallwch chi wneud unrhyw beth. 228 00:11:01,763 --> 00:11:04,480 Gallech ddechrau ddosbarthu ymosodiad gwrthod gwasanaeth 229 00:11:04,480 --> 00:11:07,030 os ydych yn anfon y neges hon at sypiau cyfan o gweinyddwyr gwe 230 00:11:07,030 --> 00:11:10,256 ac yna roedd nhw i gyd yn disgyn, am enghraifft, ar weinyddion Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 a gallwch ddatrys o bang y Heck allan ohonynt 232 00:11:12,130 --> 00:11:15,490 gan draffig rhwydwaith a oedd sbarduno fel arall gan y dyn drwg. 233 00:11:15,490 --> 00:11:18,760 >> Felly, stori fer hir, bron pawb yn yr ystafell hon sy'n berchen ar Mac 234 00:11:18,760 --> 00:11:20,240 yn agored i hyn. 235 00:11:20,240 --> 00:11:24,100 Mae'r ymyl arian yw bod oni bai eich bod rhedeg gweinydd gwe ar eich gliniadur, 236 00:11:24,100 --> 00:11:27,780 ac oni bai eich bod wedi ffurfweddu mewn gwirionedd iddo i ganiatáu rhywbeth fel SSH i mewn iddo, 237 00:11:27,780 --> 00:11:28,670 eich bod mewn gwirionedd yn ddiogel. 238 00:11:28,670 --> 00:11:31,710 Mae'n agored i niwed, ond nid oes un yn ceisio at ca i mewn eich gliniadur, 239 00:11:31,710 --> 00:11:33,290 er mwyn i chi fath o yn dawel eich meddwl. 240 00:11:33,290 --> 00:11:36,210 Fodd bynnag, bydd Apple yn fuan yn diweddaru ateb ar gyfer hyn. 241 00:11:36,210 --> 00:11:39,660 Mae byd Linux eisoes wedi rhyddhau nifer o atebion ar gyfer Fedora a Ubuntu 242 00:11:39,660 --> 00:11:43,790 a fersiynau eraill o'r Linux, ac yn wir os ydych yn rhedeg diweddariad 50 yn y peiriant, 243 00:11:43,790 --> 00:11:45,930 hyd yn oed y bydd hefyd yn diweddaru a'u cywiro. 244 00:11:45,930 --> 00:11:47,764 Ond nad yw hefyd wedi 'n sylweddol wedi bod yn agored i niwed, 245 00:11:47,764 --> 00:11:49,804 oherwydd oni bai eich bod wedi tinkered gyda'r offer 246 00:11:49,804 --> 00:11:52,770 a gwneud eich gliniadur yn gyhoeddus hygyrch ar y rhyngrwyd, ac nid yw 247 00:11:52,770 --> 00:11:54,910 at ball, eich bod wedi bod yn iawn oherwydd mewn gwirionedd 248 00:11:54,910 --> 00:11:56,890 o mur gwarchod a thechnegau eraill. 249 00:11:56,890 --> 00:12:01,000 >> Ond ei fod yn enghraifft eithafol o nam ein bod ni wedi byw am dros llythrennol 20 250 00:12:01,000 --> 00:12:04,050 flynyddoedd, a phwy a ŵyr os bydd rhywun i gyd y tro hwn wedi hysbys am y peth? 251 00:12:04,050 --> 00:12:06,300 Ac yn wir, mae hyn yn un o yr heriau sylfaenol 252 00:12:06,300 --> 00:12:08,690 y byddwn yn gweld yn nes ymlaen yn y semester am ddiogelwch, 253 00:12:08,690 --> 00:12:13,020 yw bod yn union fel yn y byd go iawn, y guys da wrth anfantais. 254 00:12:13,020 --> 00:12:16,500 I gadw'r guys ddrwg allan, mae'n rhaid i ni gwneud yn siŵr bod pob drws wedi ei gloi, 255 00:12:16,500 --> 00:12:20,340 bod pob ffenestr yn ddiogel, bod pob pwynt mynediad i gartref 256 00:12:20,340 --> 00:12:21,980 yn ddiogel i gadw'r guys drwg allan. 257 00:12:21,980 --> 00:12:26,870 Ond beth sydd gan y dyn drwg yn rhaid i ei wneud i mewn gwirionedd yn peryglu eich cartref 258 00:12:26,870 --> 00:12:28,200 a dwyn oddi wrthych? 259 00:12:28,200 --> 00:12:32,574 Ef neu hi jyst wedi i ddod o hyd i un heb ei gloi drws, un ffenestr wedi torri, neu rywbeth 260 00:12:32,574 --> 00:12:35,240 ar y llinellau hynny, ac mae'n y un peth mewn diogelwch cyfrifiadurol. 261 00:12:35,240 --> 00:12:37,660 Gallwn ysgrifennu miliynau o llinellau o god rhaglennu 262 00:12:37,660 --> 00:12:40,570 ac yn gwario cannoedd neu filoedd o oriau yn ceisio at ca yw'n gywir, 263 00:12:40,570 --> 00:12:43,370 ond os byddwch yn gwneud dim ond un gamgymeriad mewn cywirdeb, 264 00:12:43,370 --> 00:12:47,030 gallwch roi y system gyfan a yn wir yn yr achos hwn, y rhyngrwyd cyfan 265 00:12:47,030 --> 00:12:48,660 a byd mewn perygl. 266 00:12:48,660 --> 00:12:51,950 >> Felly os hoffech chi ddysgu mwy am hyn, ewch i'r URL hwn yma. 267 00:12:51,950 --> 00:12:54,450 Does dim angen i weithredu heno oni bai eich bod 268 00:12:54,450 --> 00:12:57,116 ymhlith y rhai yn fwy cyfforddus bod wedi bod yn rhedeg eich gwe eich hun 269 00:12:57,116 --> 00:12:59,810 gweinyddwr, ac os felly dylech, mewn gwirionedd, diweddaru eich meddalwedd. 270 00:12:59,810 --> 00:13:03,244 >> Ac mae hyn hefyd yw teitl araith, ac yn awr papur, 271 00:13:03,244 --> 00:13:05,410 ein bod wedi cysylltu ar y wefan y cwrs ar gyfer heddiw. 272 00:13:05,410 --> 00:13:07,600 Yr oedd gan gyd o'r enw Ken Thompson, a oedd 273 00:13:07,600 --> 00:13:10,120 yn derbyn enwog iawn wobr mewn gwyddoniaeth gyfrifiadurol, 274 00:13:10,120 --> 00:13:13,495 a rhoddodd araith hon rai blynyddoedd yn ôl, yn y bôn ar yr un pwnc. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Gofyn Folks y cwestiwn, Dylai chi wir 277 00:13:20,520 --> 00:13:23,480 ymddiriedaeth, yn y pen draw, mae'r meddalwedd ydych wedi bod yn ei roi? 278 00:13:23,480 --> 00:13:26,100 Er enghraifft, yr ydym i gyd wedi bod yn ysgrifennu rhaglenni, 279 00:13:26,100 --> 00:13:27,820 ac rydym wedi bod yn llunio iddynt chlang. 280 00:13:27,820 --> 00:13:31,830 Ac i eich gwybodaeth, ydych chi wedi ysgrifennu unrhyw raglenni ar gyfer CS50 lle mae 281 00:13:31,830 --> 00:13:35,310 drws cefn o ryw fath, mae ffordd bod dyn drwg, os redeg eich rhaglen, 282 00:13:35,310 --> 00:13:37,410 Gallai cymryd drosodd eich cyfrifiadur? 283 00:13:37,410 --> 00:13:38,310 Nid yn ôl pob tebyg, dde? 284 00:13:38,310 --> 00:13:40,180 Mario, a barus, a Chredyd. 285 00:13:40,180 --> 00:13:41,680 Mae'r rhain i gyd yn y rhaglenni eithaf bach. 286 00:13:41,680 --> 00:13:43,910 Byddai'n rhaid i chi fod yn eithaf drwg os ydych mewn gwirionedd yn 287 00:13:43,910 --> 00:13:47,310 gwneud eich cyfrifiadur cyfan sy'n agored i niwed ar ôl ysgrifennu 10 neu 20 llinell o god, 288 00:13:47,310 --> 00:13:49,690 neu o leiaf yn ymwybodol o rai o'r goblygiadau diogelwch. 289 00:13:49,690 --> 00:13:52,023 Nawr yr wyf yn dweud hynny gellweirus ond rydym yn mynd i weld heddiw 290 00:13:52,023 --> 00:13:54,600 ac yr wythnos hon ei fod yn mewn gwirionedd mewn gwirionedd, hawdd iawn 291 00:13:54,600 --> 00:13:57,980 i fod yn wael ac yn gwneud hyd yn oed yn raglenni byr sy'n agored i niwed. 292 00:13:57,980 --> 00:14:02,880 >> Ond am y tro, o leiaf, yn sylweddoli bod y cwestiwn a ofynnir yma 293 00:14:02,880 --> 00:14:04,850 yn ymwneud chlang mewn compiler. 294 00:14:04,850 --> 00:14:08,360 Pam ydym ni wedi bod yn ymddiried chlang ar gyfer y ddwy neu dair wythnos diwethaf? 295 00:14:08,360 --> 00:14:12,650 Pwy yw i ddweud bod pwy bynnag ysgrifennodd chlang Nid oedd gan "os" cyflwr mewn 'na 296 00:14:12,650 --> 00:14:17,680 hynny yn y bôn chwistrellu rhai seroau a rhai i mewn i bob rhaglen y mae'n llunio 297 00:14:17,680 --> 00:14:21,180 a fyddai'n gadael iddo neu iddi fynediad pan fydd eich cyfrifiadur eich bod yn cysgu 298 00:14:21,180 --> 00:14:23,580 a bod eich gliniadur caead ar agor a bod eich cyfrifiadur yn rhedeg? 299 00:14:23,580 --> 00:14:24,080 Hawl? 300 00:14:24,080 --> 00:14:28,350 Mae gennym y math hwn o system anrhydedd hawl awr lle'r ydym yn hyderu y chlang yn legit. 301 00:14:28,350 --> 00:14:30,000 Ydych yn ymddiried bod y peiriant yn legit. 302 00:14:30,000 --> 00:14:34,430 Ydych yn ymddiried bod llythrennol pob rhaglen ar eich Mac neu PC yn ddibynadwy. 303 00:14:34,430 --> 00:14:37,510 Ac fel y bug syml yn awgrymu, hyd yn oed os nad yw'n faleisus, 304 00:14:37,510 --> 00:14:40,580 dyna gwbl nad debygol o fod yn wir. 305 00:14:40,580 --> 00:14:42,350 >> Felly, dylech fod yn ofnus fel uffern. 306 00:14:42,350 --> 00:14:45,560 Dweud y gwir, does dim syml ateb i hyn eraill 307 00:14:45,560 --> 00:14:48,185 na rhyw fath o ymwybyddiaeth cymdeithasol o'r cymhlethdod cynyddol 308 00:14:48,185 --> 00:14:50,310 ein bod yn adeiladu ar ben ein systemau cyfrifiadurol, 309 00:14:50,310 --> 00:14:53,740 a pha mor fwyfwy agored i niwed efallai y byddwn yn dda iawn fod. 310 00:14:53,740 --> 00:14:55,570 >> Nawr gyda dweud hynny, Breakout. 311 00:14:55,570 --> 00:14:59,889 Felly Breakout yn broblem gosod tri, a Breakout yn gêm oddi fu 312 00:14:59,889 --> 00:15:02,180 y gallai byddwch yn cofio, ond i ni yn broblem gosod tri, 313 00:15:02,180 --> 00:15:04,450 mae'n ein galluogi i gymryd pethau yn ôl i fyny hollt 314 00:15:04,450 --> 00:15:08,880 fel bod pan fyddwn yn ysgrifennu rhaglenni, hyd yn oed mewn ffenestr Derfynnell fel hyn, 315 00:15:08,880 --> 00:15:14,670 allwn ni mewn gwirionedd yn rhedeg, yn y pen draw, Nid yw rhaglenni graffigol 316 00:15:14,670 --> 00:15:17,800 yn wahanol i'r rhai rydym yn cael mynediad ato yn Scratch. 317 00:15:17,800 --> 00:15:20,910 Felly mae hwn yn y staff gweithredu Breakout, 318 00:15:20,910 --> 00:15:23,930 sydd ychydig y brics-dorri gêm, eich bod yn symud eich padlo yn ôl 319 00:15:23,930 --> 00:15:27,590 ac ymlaen, ac i chi taro'r bêl yn erbyn y brics lliw y rhai i fyny top. 320 00:15:27,590 --> 00:15:30,020 Felly, mae hyn yn dod â ni fath o yn ôl i lle 321 00:15:30,020 --> 00:15:33,180 roeddem yn gallu bod yn gyflym iawn gyda Scratch, ac yn awr gyda C, 322 00:15:33,180 --> 00:15:35,800 gweithredu ein hunain rhyngwynebau defnyddwyr graffigol. 323 00:15:35,800 --> 00:15:38,960 >> Ond yn fwy na hynny, mae hyn yn set problem yn cynrychioli'r cyntaf 324 00:15:38,960 --> 00:15:41,000 lle rydym yn rhoi chi griw o god. 325 00:15:41,000 --> 00:15:43,940 Ac yn wir, yr wyf yn dod â eglur sylw at hyn, gan fod yn arbennig 326 00:15:43,940 --> 00:15:47,090 ar gyfer y rhai llai cyfforddus, mae hyn broblem a osodwyd, o leiaf ar yr olwg gyntaf, 327 00:15:47,090 --> 00:15:49,170 yn mynd i deimlo fel rydym wedi cymryd i fyny hollt. 328 00:15:49,170 --> 00:15:51,540 Oherwydd ein bod wedi ei roi i chi, gyfer rhai o'r chwiliad 329 00:15:51,540 --> 00:15:54,930 a didoli problemau yn y pset, criw o cod sy'n ysgrifenasom, 330 00:15:54,930 --> 00:15:56,680 ac un neu ddau o sylwadau sy'n dweud "i'w wneud," 331 00:15:56,680 --> 00:15:58,221 lle mae'n rhaid i lenwi'r bylchau. 332 00:15:58,221 --> 00:16:00,020 Felly, heb fod yn rhy frawychus, ond 'i' y tro cyntaf 333 00:16:00,020 --> 00:16:03,370 rydym yn trosglwyddo i chi cod y mae angen i chi yn gyntaf ddarllen, deall, ac yna ychwanegu at 334 00:16:03,370 --> 00:16:04,290 a'i gwblhau. 335 00:16:04,290 --> 00:16:05,940 >> Ac yna gyda Breakout, ydym yn mynd i wneud yr un peth, 336 00:16:05,940 --> 00:16:08,740 gan roi ychydig dwsin mwy linellau chi o god hynny, a dweud y gwir, yn rhoi i chi 337 00:16:08,740 --> 00:16:11,490 llawer o'r fframwaith ar gyfer y gêm ond yn rhoi'r gorau i byr 338 00:16:11,490 --> 00:16:14,304 o weithredu'r brics ac y bêl ac y Stemars, 339 00:16:14,304 --> 00:16:15,970 ond rydym yn ei wneud yn gweithredu rhai nodweddion eraill. 340 00:16:15,970 --> 00:16:18,280 A hyd yn oed fod ar yr olwg gyntaf, unwaith eto, yn enwedig os oes llai cyfforddus, 341 00:16:18,280 --> 00:16:21,480 Gallai ymddangos yn arbennig o frawychus a ydych yn credu bod cymaint o swyddogaethau newydd 342 00:16:21,480 --> 00:16:24,070 mae angen i chi lapio eich meddwl gwmpas, ac mae hynny'n wir. 343 00:16:24,070 --> 00:16:26,281 Ond yn cadw mewn cof, mae'n yn eithaf tebyg i Scratch. 344 00:16:26,281 --> 00:16:28,780 Groes yn nad oeddech yn defnyddio'r holl y darnau pos yn Scratch. 345 00:16:28,780 --> 00:16:31,120 Groes yn nad oeddech yn gofalu i lapio eich meddwl o amgylch pob un ohonynt 346 00:16:31,120 --> 00:16:33,617 oherwydd y cyfan fe gymerodd roedd yn cipolwg cyflym i ddeall, oh, 347 00:16:33,617 --> 00:16:35,450 dyna beth y gallaf ei wneud gyda'r darn pos. 348 00:16:35,450 --> 00:16:38,260 Ac yn wir, yn y broblem a osodwyd 3 spec, byddwn yn pwyntio i chi 349 00:16:38,260 --> 00:16:41,370 ar y dogfennau a fydd eich cyflwyno i rai swyddogaethau newydd, 350 00:16:41,370 --> 00:16:43,570 ac yn y pen draw, mae'r rhaglenni yn adeiladu a ddefnyddiwch. 351 00:16:43,570 --> 00:16:47,610 Amodau, dolenni, newidynnau, a swyddogaethau 352 00:16:47,610 --> 00:16:50,720 fydd yn union yr un fath hyn yr ydym wedi ei weld hyd yn hyn. 353 00:16:50,720 --> 00:16:53,560 >> Felly yn wir, yr hyn y byddwn yn rhoi chi rhywfaint o cod sampl sy'n 354 00:16:53,560 --> 00:16:56,110 yn gadael i chi greu ffenestr Nid yw yn edrych yn wahanol hyn, 355 00:16:56,110 --> 00:16:59,540 ac yn y pen draw troi i mewn rhywbeth eithaf fel hyn. 356 00:16:59,540 --> 00:17:02,250 Felly, yn cymryd mantais o CS50, trafod oriau swyddfa ac yn fwy, 357 00:17:02,250 --> 00:17:05,290 ac yn cymryd cysur yn y ffaith bod faint o cod yn rhaid i chi ysgrifennu 358 00:17:05,290 --> 00:17:06,760 mewn gwirionedd nid yw pob bod llawer. 359 00:17:06,760 --> 00:17:10,359 Yr her gyntaf yn unig i acclimate eich hun i ryw cod rydym wedi ysgrifennu. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Unrhyw gwestiynau am pset3, Shellshock, neu fel arall? 362 00:17:15,810 --> 00:17:19,226 >> CYNULLEIDFA: Mae'n ymddangos fel mynd drwy gyda Breakout 363 00:17:19,226 --> 00:17:22,154 bod y cod yn bron arddull gwrthrych-oriented, 364 00:17:22,154 --> 00:17:24,675 ond roeddwn i'n meddwl C yn rhaglen gwrthrych-oriented. 365 00:17:24,675 --> 00:17:26,050 SIARADWR 1: Mae cwestiwn ardderchog. 366 00:17:26,050 --> 00:17:28,258 Felly, wrth edrych drwy'r cod dosbarthu, mae'r cod 367 00:17:28,258 --> 00:17:30,180 ysgrifennom am pset3, ar gyfer y rhai cyfarwydd, mae'n 368 00:17:30,180 --> 00:17:32,230 edrych fel ei fod yn Ychydig gwrthrych-oriented. 369 00:17:32,230 --> 00:17:33,800 Yr ateb byr yw, mae'n. 370 00:17:33,800 --> 00:17:38,130 Mae'n amcangyfrif o sut yr ydych yn Gallai wneud cod gwrthrych-oriented gan ddefnyddio 371 00:17:38,130 --> 00:17:41,850 iaith fel C, ond mae'n dal i fod yn y pen draw gweithdrefnol. 372 00:17:41,850 --> 00:17:44,900 Nid oes unrhyw ddulliau tu mewn y newidynnau, fel y byddwch yn gweld. 373 00:17:44,900 --> 00:17:46,180 Ond mae'n ein hatgoffa o hynny. 374 00:17:46,180 --> 00:17:48,780 A byddwn yn gweld y nodwedd honno eto pan fyddwn yn mynd i PHP a JavaScript 375 00:17:48,780 --> 00:17:49,946 tuag at ddiwedd y semester. 376 00:17:49,946 --> 00:17:53,667 Ond am nawr, meddwl amdano fel awgrym o beth sydd i ddod. 377 00:17:53,667 --> 00:17:54,250 Gwestiwn da. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Mae pob hawl. 380 00:17:56,550 --> 00:17:59,730 Felly yn uno fath oedd sut yr ydym yn chwith bethau tro diwethaf. 381 00:17:59,730 --> 00:18:03,250 Ac yn uno fath yn oer yn y ystyr ei fod mor llawer cyflymach, 382 00:18:03,250 --> 00:18:07,100 o leiaf yn seiliedig ar y profion arwynebol y gwnaethom yr wythnos diwethaf, na, dyweder, swigen 383 00:18:07,100 --> 00:18:08,710 didoli, didoli dewis, didoli gosod. 384 00:18:08,710 --> 00:18:11,780 A beth oedd yn daclus hefyd yn unig pa mor gryno ac yn lân 385 00:18:11,780 --> 00:18:12,810 gallwch fynegi ei. 386 00:18:12,810 --> 00:18:15,840 A beth wnaethon ni ei ddweud ei fod yn uwch rhwymo ar yr amser yn rhedeg o uno 387 00:18:15,840 --> 00:18:16,340 didoli? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Yeah? 390 00:18:18,495 --> 00:18:19,360 >> CYNULLEIDFA: n log n? 391 00:18:19,360 --> 00:18:20,819 >> SIARADWR 1: n log n, ar y dde. n log n. 392 00:18:20,819 --> 00:18:23,776 A byddwn yn dod yn ôl at yr hyn sy'n olygu mewn gwirionedd, neu pan fo hynny'n dod, 393 00:18:23,776 --> 00:18:25,570 ond roedd hyn yn well na'r hyn y tro yn olynol 394 00:18:25,570 --> 00:18:28,440 a welsom am swigen dethol a didoli gosod? 395 00:18:28,440 --> 00:18:30,610 Felly n sgwâr. n sgwario yn fwy na hyn, 396 00:18:30,610 --> 00:18:34,650 a hyd yn oed os nad yw'n hollol amlwg, gwybod bod log n yn llai na n, 397 00:18:34,650 --> 00:18:36,910 felly os ydych yn gwneud amseroedd n rhywbeth llai na n, 398 00:18:36,910 --> 00:18:38,680 mae'n mynd i fod yn llai na'r sgwâr n. 399 00:18:38,680 --> 00:18:40,130 Mae'n dipyn o greddf yno. 400 00:18:40,130 --> 00:18:42,190 Ond rydym yn talu pris ar gyfer hyn. 401 00:18:42,190 --> 00:18:47,000 Yr oedd yn gyflymach, ond yn thema a ddechreuodd i ddod i'r amlwg yr wythnos diwethaf oedd tradeoff hwn. 402 00:18:47,000 --> 00:18:49,804 Cawn gwell perfformiad doeth o amser, ond yr hyn 403 00:18:49,804 --> 00:18:52,470 oedd rhaid i mi wario ar y llaw arall llaw, er mwyn cyflawni hynny? 404 00:18:52,470 --> 00:18:53,591 >> CYNULLEIDFA: Cof. 405 00:18:53,591 --> 00:18:54,465 SIARADWR 1: Dweud eto? 406 00:18:54,465 --> 00:18:55,173 CYNULLEIDFA: Cof. 407 00:18:55,173 --> 00:18:57,040 SIARADWR 1: Cof, neu o le yn fwy cyffredinol. 408 00:18:57,040 --> 00:18:59,040 Ac nid oedd yn super amlwg gyda'n bodau dynol, 409 00:18:59,040 --> 00:19:02,240 ond yn dwyn i gof bod ein gwirfoddolwyr yn camu ymlaen ac yn camu 410 00:19:02,240 --> 00:19:04,780 yn ôl fel pe mae 'na amrywiaeth yma, ac fel pe mae 411 00:19:04,780 --> 00:19:07,130 ail amrywiaeth yma y gallent ei ddefnyddio, oherwydd ein bod 412 00:19:07,130 --> 00:19:09,080 Thrafod Roedd ei angen i uno Folks hynny. 413 00:19:09,080 --> 00:19:11,480 Ni allem unig yn eu cyfnewid yn eu lle. 414 00:19:11,480 --> 00:19:13,800 Felly uno trosoledd fath yn fwy o le, a oedd yn 415 00:19:13,800 --> 00:19:15,620 doedden ni ddim yn angen â y algorithmau eraill, 416 00:19:15,620 --> 00:19:17,410 ond mae'r upside yw ei fod yn llawer cyflymach. 417 00:19:17,410 --> 00:19:20,780 Ac yn dweud y gwir, yn y lle a byd go iawn mae'r rhain RAM days--, disg galed space-- 418 00:19:20,780 --> 00:19:25,030 yn gymharol rhad, ac felly dyna nid o reidrwydd yn beth drwg. 419 00:19:25,030 --> 00:19:28,320 >> Felly, gadewch i ni edrych yn sydyn, ychydig fwy yn drefnus, yn hyn a wnaethom 420 00:19:28,320 --> 00:19:30,220 a pham yr ydym yn dweud ei fod yn n log n. 421 00:19:30,220 --> 00:19:33,260 Felly dyma yw'r rhifau wyth a'r wyth o wirfoddolwyr oedd gennym y tro diwethaf. 422 00:19:33,260 --> 00:19:35,718 A'r peth cyntaf sy'n Uno Trefnu yn dweud wrthym i wneud oedd beth? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 CYNULLEIDFA: Rhannwch yn ddau. 425 00:19:38,010 --> 00:19:38,663 SIARADWR 1: Dweud eto? 426 00:19:38,663 --> 00:19:39,650 CYNULLEIDFA: Rhannwch yn ddau. 427 00:19:39,650 --> 00:19:40,610 SIARADWR 1: Divide mewn dau, ar y dde. 428 00:19:40,610 --> 00:19:42,818 Mae hyn yn atgoffa rhywun iawn o y llyfr ffôn, o rhaniad 429 00:19:42,818 --> 00:19:44,220 a gorchfygu yn fwy cyffredinol. 430 00:19:44,220 --> 00:19:45,640 Felly, buom yn edrych ar yr hanner chwith. 431 00:19:45,640 --> 00:19:48,700 Ac yna ar ôl i ni ei ddweud, didoli yr hanner chwith y elfennau, 432 00:19:48,700 --> 00:19:49,690 yr hyn a wnaethom ni ddweud nesaf? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Didoli'r hanner chwith y chwith hanner, a oedd yn caniatáu i ni, 435 00:19:54,860 --> 00:19:57,570 ar ôl rhannu mewn dau, canolbwyntio ar bedwar a dau. 436 00:19:57,570 --> 00:20:01,280 >> Sut ydych chi'n datrys rhestr yn awr, yn melyn, o faint dau, gan ddefnyddio Cyfuno Sort? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Wel rannu yn ei hanner, ac yn didoli'r hanner chwith. 439 00:20:04,580 --> 00:20:07,100 Ac roedd hyn yn lle mae pethau got ychydig yn fyr dwp. 440 00:20:07,100 --> 00:20:10,720 Sut ydych chi'n datrys rhestr dyna o un maint, fel y nifer hwn pedwar yma? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Mae'n datrys. 443 00:20:13,210 --> 00:20:14,200 Rydych yn ei wneud. 444 00:20:14,200 --> 00:20:17,300 >> Ond yna sut ydych chi'n trefnu rhestr o maint un pryd mae'n y rhif dau? 445 00:20:17,300 --> 00:20:21,640 Wel, un peth, ond erbyn hyn beth oedd y trydydd a'r cam allweddol yn Merge Sort? 446 00:20:21,640 --> 00:20:24,020 Bu'n rhaid i chi gyfuno y chwith hanner a hanner cywir. 447 00:20:24,020 --> 00:20:26,580 Ac unwaith baem yn gwneud hynny, buom yn edrych mewn pedwar, buom yn edrych ar ddau. 448 00:20:26,580 --> 00:20:28,750 Rydym yn penderfynu i gyd yn iawn, amlwg dau yn dod yn gyntaf, 449 00:20:28,750 --> 00:20:31,840 felly rydym yn rhoi dau yn ei lle, ac yna bedwar. 450 00:20:31,840 --> 00:20:35,010 Ac yn awr mae'n rhaid i chi fath o ailddirwyn, ac mae hyn yn fath o nodwedd 451 00:20:35,010 --> 00:20:37,570 o algorithm fel Merge Didoli, ail-ddirwyn yn y cof. 452 00:20:37,570 --> 00:20:40,240 Beth oedd y llinell nesaf y stori? 453 00:20:40,240 --> 00:20:41,780 Beth ddylwn i fod yn canolbwyntio ar nesaf? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Mae hanner dde o'r chwith hanner, Pa yn chwech ac wyth. 456 00:20:47,350 --> 00:20:50,320 >> Felly, gadewch i mi dim ond cam drwy hyn heb belaboring pwynt gormod. 457 00:20:50,320 --> 00:20:53,330 Chwech ac wyth, yna chwech yn didoli, wyth yn cael ei datrys. 458 00:20:53,330 --> 00:20:57,190 Uno at ei gilydd fel 'na, ac yn awr y cam mawr nesaf 459 00:20:57,190 --> 00:21:00,990 yw, wrth gwrs, yn didoli'r hanner cywir o y cam cyntaf un o algorithm hwn. 460 00:21:00,990 --> 00:21:02,870 Felly, rydym yn canolbwyntio ar un, tri, saith, pump. 461 00:21:02,870 --> 00:21:04,540 Yna, rydym yn canolbwyntio ar yr hanner chwith. 462 00:21:04,540 --> 00:21:09,400 Mae hanner chwith hynny, mae'r hanner cywir o hynny, ac yna uno mewn un a thri. 463 00:21:09,400 --> 00:21:13,100 Yna yr hanner i'r dde, yna i'r chwith hanner o hynny, yna yr hanner dde ohono. 464 00:21:13,100 --> 00:21:15,985 Cyfuno i mewn, ac yn awr pa gam yn parhau i fod? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Cyfuno yr hanner chwith mawr a'r mawr hanner cywir, felly un yn mynd i lawr yno, 467 00:21:22,460 --> 00:21:27,330 Yna, dau, yna dri, yna pedwar, yna phump, yna chwech, ac yna saith, ac yna wyth. 468 00:21:27,330 --> 00:21:31,990 >> Felly nawr pam fod hyn yn y pen draw datgelu, yn enwedig os n a logarithmau mwy 469 00:21:31,990 --> 00:21:35,487 gyffredinol yn hytrach chi ddianc, o leiaf yn y cof yn ddiweddar? 470 00:21:35,487 --> 00:21:37,070 Wel, yn sylwi ar y uchder y peth hyn. 471 00:21:37,070 --> 00:21:41,230 Roedd gennym wyth elfen, ac rydym yn Rhennir iddo gan ddau, gan ddau, gan ddau. 472 00:21:41,230 --> 00:21:44,590 Felly log sylfaen dau o wyth yn rhoi i ni dri. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Ac yn ymddiried mi ar hynny os ychydig yn aneglur ar hynny. 475 00:21:48,540 --> 00:21:54,710 Ond log sylfaen dau o wyth yw tri, felly rydym wedi gwneud tair haen o uno. 476 00:21:54,710 --> 00:21:57,170 A phan fyddwn yn uno elfennau, faint o elfennau 477 00:21:57,170 --> 00:21:58,950 wnaeth rydym yn edrych ar ar bob un o'r rhesi hynny? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Mae cyfanswm o n, dde? 480 00:22:01,437 --> 00:22:04,020 Gan fod i uno y rhes uchaf, er ein bod yn gwneud hynny bob yn dipyn, 481 00:22:04,020 --> 00:22:05,990 rydym yn y pen draw cyffwrdd pob rhif unwaith. 482 00:22:05,990 --> 00:22:09,054 Ac yn yr ail reng, i uno rhestrau rhai o faint dau, 483 00:22:09,054 --> 00:22:10,470 roedd rhaid i ni gyffwrdd pob elfen unwaith. 484 00:22:10,470 --> 00:22:12,690 Ac yna dyma mewn gwirionedd glir yn y rhes olaf, 485 00:22:12,690 --> 00:22:15,430 roedd yn rhaid i gyffwrdd pob un o'r rhai a elfennau unwaith, ond dim ond unwaith, 486 00:22:15,430 --> 00:22:18,400 felly yma yn gorwedd, yna, mae ein n log n. 487 00:22:18,400 --> 00:22:21,780 >> Ac yn awr yn unig i wneud pethau ychydig yn mwy ffurfiol ar gyfer dim ond hyn o bryd, os ydych yn 488 00:22:21,780 --> 00:22:24,260 Roedd yn hyn dadansoddi'r hyn mewn rhyw fath o lefel uwch 489 00:22:24,260 --> 00:22:28,340 ac yn ceisio penderfynu, yn dda sut efallai y byddwch yn mynd ati i fynegi 490 00:22:28,340 --> 00:22:31,780 yr amser yn rhedeg y algorithm hwn dim ond drwy edrych arno ac nid 491 00:22:31,780 --> 00:22:33,590 drwy ddefnyddio enghraifft ddyfeisgar? 492 00:22:33,590 --> 00:22:36,590 Wel, faint o amser fyddech chi'n dweud yn cam fel y byddai hyn yn melyn yn cymryd, 493 00:22:36,590 --> 00:22:37,173 os n <2 yn dychwelyd? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Mae hynny'n O fawr o beth? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Felly rwy'n gweld un, felly un cam, efallai dau gam am ei fod os 498 00:22:44,540 --> 00:22:47,110 ac yna dychwelyd, ond mae'n amser yn gyson, dde? 499 00:22:47,110 --> 00:22:49,960 Felly dywedasom O (1), a dyna sut 'N annhymerus' yn mynegi hyn. 500 00:22:49,960 --> 00:22:51,480 T, dim ond yn rhedeg amser. 501 00:22:51,480 --> 00:22:54,150 n yw maint y mewnbwn, felly T (n), dim ond ffordd ffansi 502 00:22:54,150 --> 00:22:56,330 o ddweud rhedeg amser mewnbwn penodol o faint n 503 00:22:56,330 --> 00:23:00,220 yn mynd i fod ar y drefn o amser yn gyson, yn O (1). 504 00:23:00,220 --> 00:23:01,970 >> Ond fel arall, beth am hyn? 505 00:23:01,970 --> 00:23:05,660 Sut y byddech yn mynegi y rhedeg amser y llinell felen hon? 506 00:23:05,660 --> 00:23:06,250 T o beth? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Gallwch fath o twyllo yma ac ateb fy nghwestiwn gylchol. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Felly, os bydd yr amser yn rhedeg yn cyffredinol yr ydym newydd ei ddweud yw T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Ac yn awr eich bod yn fath o punting yma ac gan ddywedyd, yn dda, dim ond didoli'r hanner chwith, 513 00:23:22,490 --> 00:23:23,920 ac yna ddatrys y hanner cywir. 514 00:23:23,920 --> 00:23:27,520 Sut y gallem symbolaidd yn cynrychioli yr amser yn rhedeg y llinell felen hon? 515 00:23:27,520 --> 00:23:28,020 T o beth? 516 00:23:28,020 --> 00:23:29,360 Beth yw maint y mewnbwn? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n dros ddwy. 519 00:23:31,057 --> 00:23:32,140 Pam nad ydw i'n jyst yn dweud hynny? 520 00:23:32,140 --> 00:23:36,449 Ac yna mae hyn yn T un arall (n / 2) ac yna eto, os wyf yn uno dau hanner ddidoli, 521 00:23:36,449 --> 00:23:38,615 faint o elfennau ydw i'n mynd i fod i gyffwrdd cyfanswm? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Felly gallaf fynegi hyn, dim ond i fod yn fath o ffansi, 525 00:23:42,790 --> 00:23:44,430 fel yr amser yn rhedeg yn gyffredinol. 526 00:23:44,430 --> 00:23:51,140 T (n) yn unig yw yr amser yn rhedeg o T (dd / 2), ynghyd T (dd / 2), gadawodd hanner a hanner i'r dde, 527 00:23:51,140 --> 00:23:55,360 plws O (n), sydd yn ôl pob tebyg n grisiau, ond efallai, os wyf yn defnyddio dau fys, 528 00:23:55,360 --> 00:23:57,960 'i' ddwywaith yn fwy o grisiau, ond mae'n llinol. 529 00:23:57,960 --> 00:24:00,440 Mae'n rhywfaint o nifer o gamau mae hynny'n ffactor o n, 530 00:24:00,440 --> 00:24:02,270 er mwyn i ni fynegi'r hyn fel hyn. 531 00:24:02,270 --> 00:24:05,550 A dyma lle erbyn hyn byddwn yn punt at y nghefn ein gwerslyfr mathemateg ysgol uwchradd 532 00:24:05,550 --> 00:24:10,290 rydym yn y pen draw digwydd eto yn dod i ben i fyny gyfartal hyn, amseroedd n log n, 533 00:24:10,290 --> 00:24:12,530 os ydych yn ei wneud allan y cwestiwn yn fwy ffurfiol. 534 00:24:12,530 --> 00:24:13,950 >> Felly dyna safbwyntiau dim ond dau. 535 00:24:13,950 --> 00:24:17,500 Mae un yn rhifol gyda caled-godio Enghraifft cynrychioliadol 536 00:24:17,500 --> 00:24:21,140 gan ddefnyddio wyth rhifau, ac mae mwy Golwg gyffredinol ar y modd yr ydym yn cyrraedd yno. 537 00:24:21,140 --> 00:24:25,670 Ond yr hyn sy'n ddiddorol iawn yma yw, unwaith eto, syniad hwn o feicio. 538 00:24:25,670 --> 00:24:26,900 Dydw i ddim yn defnyddio ar gyfer dolenni. 539 00:24:26,900 --> 00:24:29,860 Im 'yn fath o ddiffinio rhywbeth o ran ei hun, 540 00:24:29,860 --> 00:24:31,950 nid yn unig gyda hyn swyddogaeth mathemategol, 541 00:24:31,950 --> 00:24:34,860 ond hefyd o ran y cod ffug. 542 00:24:34,860 --> 00:24:38,260 Mae'r cod ffug yn recursive gan fod dau o'i linellau 543 00:24:38,260 --> 00:24:42,310 yn y bôn yn dweud iddo fynd defnyddio ei hun i ddatrys llai 544 00:24:42,310 --> 00:24:45,400 problem o faint llai, ac yna dro ar ôl tro 545 00:24:45,400 --> 00:24:48,820 ac eto hyd nes y byddwn naddu ei i lawr at yr achos sylfaenol fel y'u gelwir. 546 00:24:48,820 --> 00:24:52,810 >> Felly gadewch i ni mewn gwirionedd yn tynnu mwy cymhellol i'w fwyta allan o hyn fel a ganlyn. 547 00:24:52,810 --> 00:24:58,420 Gadewch i mi fynd i mewn i gedit ac yn cymryd edrych ar rai o'r cod ffynhonnell heddiw, 548 00:24:58,420 --> 00:24:59,930 yn arbennig yr enghraifft yma. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, sydd yn ôl pob golwg yn ychwanegu y rhifau un drwy n. 550 00:25:03,709 --> 00:25:05,750 Felly, gadewch i ni weld beth sy'n gyfarwydd ac anghyfarwydd yma. 551 00:25:05,750 --> 00:25:08,690 Yn gyntaf mae gennym un neu ddau o yn cynnwys, felly dim byd newydd yno. 552 00:25:08,690 --> 00:25:09,190 Prototeip. 553 00:25:09,190 --> 00:25:11,370 Rwy'n ychydig yn niwlog ar hyn ar ôl ychydig ddyddiau, 554 00:25:11,370 --> 00:25:13,790 ond yr hyn a wnaethom ni ddweud prototeip o swyddogaeth yw? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 CYNULLEIDFA: [Anghlywadwy]. 557 00:25:16,015 --> 00:25:16,905 SIARADWR 1: Beth sy'n bod? 558 00:25:16,905 --> 00:25:17,800 CYNULLEIDFA: Rydym yn cyhoeddi ei. 559 00:25:17,800 --> 00:25:18,883 SIARADWR 1: Rydym yn cyhoeddi ei. 560 00:25:18,883 --> 00:25:22,290 Felly yr ydych yn addysgu chlang, hey, Nid mewn gwirionedd yn gweithredu hyn eto, 561 00:25:22,290 --> 00:25:25,740 ond yn rhywle yn y ffeil, yn ôl pob tebyg, yn mynd i gael ei swyddogaeth o'r enw beth? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Sigma. 564 00:25:27,540 --> 00:25:30,540 Ac mae hyn yn unig yw addewid sy'n mae'n mynd i edrych fel hyn. 565 00:25:30,540 --> 00:25:33,720 Mae'n mynd i gymryd yn gyfanrif fel input-- a gallaf fod yn fwy eglur 566 00:25:33,720 --> 00:25:36,570 a dweud int n --and mae'n mynd i ddychwelyd yn int, 567 00:25:36,570 --> 00:25:39,900 ond mae dulliau hanner colon, mm, yr wyf bydd symud o gwmpas i weithredu hyn ychydig yn ddiweddarach. 568 00:25:39,900 --> 00:25:40,989 Unwaith eto, chlang yn fud. 569 00:25:40,989 --> 00:25:43,280 Dim ond yn mynd i wybod beth chi ddweud ei top i'r gwaelod, 570 00:25:43,280 --> 00:25:45,765 felly mae angen i ni o leiaf yn rhoi mae'n awgrym o beth sydd i ddod. 571 00:25:45,765 --> 00:25:47,330 >> Nawr gadewch i ni edrych ar brif yma. 572 00:25:47,330 --> 00:25:50,040 Gadewch i sgroliwch i lawr yma ac weld beth prif yn ei wneud. 573 00:25:50,040 --> 00:25:53,780 Dyw hi ddim yn bod hir o swyddogaeth, ac yn wir y lluniad yma yn gyfarwydd. 574 00:25:53,780 --> 00:25:57,590 Yr wyf yn datgan newidyn n, ac yna Rwy'n plagio y defnyddiwr dro ar ôl tro 575 00:25:57,590 --> 00:26:01,880 ar gyfer cyfanrif positif gan ddefnyddio getInt, a dim ond allanfa allan o'r ddolen hon 576 00:26:01,880 --> 00:26:03,280 unwaith y bydd y defnyddiwr wedi cydymffurfio. 577 00:26:03,280 --> 00:26:05,670 Ydyn Er, rydym wedi defnyddio i plagio y defnyddiwr yn y ffordd honno. 578 00:26:05,670 --> 00:26:06,670 Yn awr mae hyn yn ddiddorol. 579 00:26:06,670 --> 00:26:08,510 Yr wyf yn datgan int o'r enw "ateb." 580 00:26:08,510 --> 00:26:11,420 Trosglwyddaf ei werth dychwelyd swyddogaeth o'r enw "sigma." 581 00:26:11,420 --> 00:26:15,200 Nid wyf yn gwybod beth y mae hynny'n ei wneud eto, ond Dwi'n cofio datgan ei fod funud yn ôl. 582 00:26:15,200 --> 00:26:18,310 Ac yna i ddim yn pasio yn y gwerth y mae'r defnyddiwr yn teipio i mewn, n, 583 00:26:18,310 --> 00:26:20,420 ac yna yr wyf yn rhoi gwybod yr ateb. 584 00:26:20,420 --> 00:26:22,260 Wel gadewch i sgrolio yn ôl am ddim ond ennyd. 585 00:26:22,260 --> 00:26:28,620 Gadewch i ni fynd yn ei flaen i mewn i cyfeiriadur, gwneud sigma 0, ac mewn gwirionedd yn rhedeg y rhaglen hon 586 00:26:28,620 --> 00:26:30,490 a gweld beth sy'n digwydd. 587 00:26:30,490 --> 00:26:35,930 Felly, os wyf yn mynd yn ei flaen ac yn rhedeg rhaglen hon, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 ac yr wyf yn teipio mewn ffordd gadarnhaol cyfanrif fel dwy, Sigma, 589 00:26:40,139 --> 00:26:43,180 gan fod y symbol Groeg yn awgrymu, yn unig mynd i ychwanegwch yr holl rhifau o 590 00:26:43,180 --> 00:26:44,320 sero ar hyd at ddwy. 591 00:26:44,320 --> 00:26:46,560 Felly 0 plws 1 a 2. 592 00:26:46,560 --> 00:26:48,830 Felly, dylai hyn, gobeithio, roi i mi 3. 593 00:26:48,830 --> 00:26:49,750 Dyna i gyd mae'n ei wneud. 594 00:26:49,750 --> 00:26:52,690 Ac yn yr un modd, os wyf yn rhedeg hyn eto ac yr wyf yn rhoi y rhif tri, 595 00:26:52,690 --> 00:26:56,721 dyna 3 a 2, felly dyna 5, ynghyd ag 1 Dylai roi i mi 6. 596 00:26:56,721 --> 00:26:59,470 Ac yna os byddaf yn cael 'n sylweddol crazy a dechrau teipio mewn niferoedd mwy, 597 00:26:59,470 --> 00:27:01,290 dylai roi i mi symiau fwy ac yn fwy. 598 00:27:01,290 --> 00:27:02,250 Felly, dyna i gyd. 599 00:27:02,250 --> 00:27:04,010 >> Felly beth mae sigma yn edrych? 600 00:27:04,010 --> 00:27:05,430 Wel, mae'n eithaf syml. 601 00:27:05,430 --> 00:27:08,940 Mae'n sut y gallem fod wedi rhoi ar waith hyn ar gyfer yr ychydig o wythnosau diwethaf. 602 00:27:08,940 --> 00:27:11,120 "Int" yn mynd i fod y math dychwelyd. 603 00:27:11,120 --> 00:27:14,330 Sigma yw enw, ac mae'n cymryd m amrywiol yn lle n. 604 00:27:14,330 --> 00:27:15,940 'N annhymerus' newid hynny i fyny top. 605 00:27:15,940 --> 00:27:17,340 Yna, mae hyn yn unig yw gwirio bwyll. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Byddwn yn gweld pam mewn munud. 608 00:27:19,950 --> 00:27:24,220 Nawr yr wyf yn datgan newidyn arall, swm, ymgychwyn i sero. 609 00:27:24,220 --> 00:27:28,140 Yna mi gael hyn Ar gyfer dolen ailadrodd, yn ôl pob golwg er eglurder, 610 00:27:28,140 --> 00:27:33,810 oddi i = 1 ar hyd at = m, sydd yn beth bynnag y defnyddiwr deipio i mewn, ac yna yr wyf yn 611 00:27:33,810 --> 00:27:35,690 cynyddiad y swm fel hyn. 612 00:27:35,690 --> 00:27:37,360 Ac yna dychwelyd y swm. 613 00:27:37,360 --> 00:27:38,440 >> Felly, ychydig o gwestiynau. 614 00:27:38,440 --> 00:27:42,370 Un, i'n hawlio yn fy sylw bod hyn yn osgoi risg o dolen ddiddiwedd. 615 00:27:42,370 --> 00:27:45,620 Pam y byddai pasio mewn nifer negatif cymell, o bosibl, dolen ddiddiwedd? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> CYNULLEIDFA: Fyddwch chi byth yn cyrraedd m. 618 00:27:51,290 --> 00:27:52,880 >> SIARADWR 1: Peidiwch byth yn cyrraedd m. 619 00:27:52,880 --> 00:27:55,880 Ond m cael ei basio i mewn, felly gadewch i ni ystyried enghraifft syml. 620 00:27:55,880 --> 00:27:58,510 Os yw m yn cael ei basio i mewn gan y defnyddiwr fel un negyddol. 621 00:27:58,510 --> 00:28:00,059 Heb ystyried brif. 622 00:28:00,059 --> 00:28:01,850 Main yn ein diogelu rhag mae hyn hefyd, felly Im 'jyst 623 00:28:01,850 --> 00:28:04,680 bod yn wir yn rhefrol gyda sigma i hefyd yn gwneud yn siŵr 624 00:28:04,680 --> 00:28:06,540 na all y mewnbwn fod yn negyddol. 625 00:28:06,540 --> 00:28:10,130 Felly os m yn negyddol, rhywbeth fel un negyddol. 626 00:28:10,130 --> 00:28:11,930 Beth sy'n mynd i ddigwydd? 627 00:28:11,930 --> 00:28:14,390 Wel, fi yn mynd i cael initialized i un, 628 00:28:14,390 --> 00:28:19,060 ac yna fi yn mynd i fod llai na neu'n hafal i m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Sefyll yn ôl. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Na was-- gadewch i ni, gadewch i Nix y stori hon. 633 00:28:29,370 --> 00:28:32,780 Ni ofynnais y cwestiwn hwnnw, oherwydd y risg yr wyf yn cyfeirio ato 634 00:28:32,780 --> 00:28:38,360 Nid yn mynd i ddigwydd oherwydd i yw bob amser yn mynd yn fwy iawn than--, 635 00:28:38,360 --> 00:28:39,871 Yr wyf yn retract y cwestiwn hwnnw. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Gadewch i ganolbwyntio yn unig ar y rhan hon yma. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Pam wnes i ddatgan rhai tu allan i'r ddolen? 640 00:28:48,830 --> 00:28:52,010 Hysbysiad ar lein 49 rwyf wedi datgan ff tu mewn i'r ddolen, 641 00:28:52,010 --> 00:28:54,950 ond ar-lein 48 rwyf wedi Datganodd rhan tu allan. 642 00:28:54,950 --> 00:28:55,695 Yeah. 643 00:28:55,695 --> 00:28:56,611 CYNULLEIDFA: [Anghlywadwy]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SIARADWR 1: Cadarn. 646 00:28:59,400 --> 00:29:03,360 Felly, yn anad dim yn sicr nid ei wneud yn awyddus i ddatgan a ymgychwyn swm 647 00:29:03,360 --> 00:29:06,130 i sero du mewn y dolen ar bob iteriad, 648 00:29:06,130 --> 00:29:09,370 gan y byddai hyn yn groes glir y bwrpas grynhoi fyny y rhifau. 649 00:29:09,370 --> 00:29:11,770 Byddwn yn cadw newid y gwerth yn ôl i sero. 650 00:29:11,770 --> 00:29:17,992 A hefyd, beth arall yn fwy dirgel rheswm dros yr un penderfyniad dylunio? 651 00:29:17,992 --> 00:29:18,954 Yeah. 652 00:29:18,954 --> 00:29:20,279 >> CYNULLEIDFA: [Anghlywadwy]. 653 00:29:20,279 --> 00:29:21,070 SIARADWR 1: Yn union. 654 00:29:21,070 --> 00:29:24,060 Yr wyf am i gael mynediad ato y tu allan o'r ddolen hefyd ar yr hyn y lein? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Ar 53. 657 00:29:26,400 --> 00:29:29,910 Ac yn seiliedig ar ein synnwyr y fawd o un neu ddau o ddarlithoedd yn ôl, 658 00:29:29,910 --> 00:29:33,680 newidynnau yn cael eu cwmpasu, mewn gwirionedd, at y braces cyrliog sy'n eu cwmpasu. 659 00:29:33,680 --> 00:29:38,190 Felly os nad wyf yn datgan swm y tu mewn o'r rhain braces cyrliog allanol, 660 00:29:38,190 --> 00:29:40,250 Nid wyf yn gallu ei ddefnyddio yn unol 53. 661 00:29:40,250 --> 00:29:43,160 Mewn geiriau eraill, os wyf yn datgan swm i mewn yma, neu hyd yn oed o fewn y 662 00:29:43,160 --> 00:29:45,410 Ar gyfer dolen, allwn i ddim cael mynediad iddo yn 53. 663 00:29:45,410 --> 00:29:47,150 Byddai'r newidyn yn effeithiol yn mynd. 664 00:29:47,150 --> 00:29:48,579 Felly, un neu ddau o resymau yno. 665 00:29:48,579 --> 00:29:50,370 Ond yn awr gadewch i ni fynd yn ôl a gweld beth sy'n digwydd. 666 00:29:50,370 --> 00:29:51,730 Felly sigma yn cael ei alw. 667 00:29:51,730 --> 00:29:55,640 Mae'n ychwanegu i fyny 1 a 2, neu 1 a 2 ynghyd â 3, ac yna'n dychwelyd y gwerth, 668 00:29:55,640 --> 00:29:59,660 siopau yn ateb, a printf yma Dyna pam rydw i'n gweld ar y sgrin. 669 00:29:59,660 --> 00:30:03,079 Felly mae hyn yn yr hyn y byddwn yn galw ailadroddol dull, lle mae ailadroddiad union 670 00:30:03,079 --> 00:30:03,870 golygu defnyddio dolen. 671 00:30:03,870 --> 00:30:06,900 A Ar gyfer dolen, dolen Er, mae Do Er bod dolen, dim ond gwneud rhywbeth eto 672 00:30:06,900 --> 00:30:08,380 ac dro ar ôl tro. 673 00:30:08,380 --> 00:30:13,505 >> Ond sigma yn fath o swyddogaeth daclus mewn y gallwn i weithredu yn wahanol. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Beth am hyn, a oedd yn dim ond i fod yn fath o oer, 676 00:30:19,120 --> 00:30:21,880 gadewch i mi mewn gwirionedd yn cael gwared o lawer o tynnu sylw 677 00:30:21,880 --> 00:30:24,380 oherwydd bod y swyddogaeth hon sydd mewn gwirionedd yn eithaf syml. 678 00:30:24,380 --> 00:30:27,780 Gadewch i Whittle i lawr dim ond at ei pedair llinell graidd 679 00:30:27,780 --> 00:30:30,410 a chael gwared ar yr holl sylwadau a braces cyrliog. 680 00:30:30,410 --> 00:30:34,334 Mae hwn yn fath o meddwl chwiban gweithredu amgen. 681 00:30:34,334 --> 00:30:37,250 Mae pob hawl, efallai nad meddwl-chwythu, ond mae'n fath o sexier, i gyd yn iawn, 682 00:30:37,250 --> 00:30:39,920 i edrych ar hyn yn llawer mwy cryno. 683 00:30:39,920 --> 00:30:43,120 Gyda dim ond pedair llinell o god, Cyntaf i mi gael y gwiriad pwyll. 684 00:30:43,120 --> 00:30:45,732 Os yw m yn llai na neu'n hafal i sero, sigma yn gwneud unrhyw synnwyr. 685 00:30:45,732 --> 00:30:48,190 Dim ond i fod i fod yn yr achos hwn ar gyfer rhifau positif, 686 00:30:48,190 --> 00:30:50,340 felly Im 'jyst yn mynd i dychwelyd sero fympwyol 687 00:30:50,340 --> 00:30:53,210 fel ein bod o leiaf yn cael rhai hyn a elwir yn achos sail. 688 00:30:53,210 --> 00:30:54,430 >> Ond dyma y harddwch. 689 00:30:54,430 --> 00:30:59,930 Y cyfan o'r syniad hwn, gan ychwanegu y rhifau o 1 i n, neu m yn yr achos hwn, 690 00:30:59,930 --> 00:31:02,630 y gellir ei wneud drwy fath o daflu'r baich. 691 00:31:02,630 --> 00:31:04,947 Wel, beth yw'r swm o 1 i m? 692 00:31:04,947 --> 00:31:05,780 Wel, chi'n gwybod beth? 693 00:31:05,780 --> 00:31:11,949 Mae yr un fath â'r swm o m yn ogystal â'r swm o 1 i m minws 1. 694 00:31:11,949 --> 00:31:12,740 Wel eich bod yn gwybod beth? 695 00:31:12,740 --> 00:31:13,940 Beth yw sigma o m minws 1? 696 00:31:13,940 --> 00:31:17,860 Wel, os ydych yn fath o ddilyn hyn rhesymegol, 'i' yr un fath â m minws 1 697 00:31:17,860 --> 00:31:21,415 ynghyd sigma o m minws 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Felly, gallwch fath o just-- mae hyn yn debyg, os ydych yn unig 700 00:31:26,012 --> 00:31:28,220 ceisio cythruddo ffrind ac maent yn gofyn cwestiwn i chi, 701 00:31:28,220 --> 00:31:31,344 chi fath o ymateb gyda chwestiwn, gallwch chi fath o gadw daflu'r baich. 702 00:31:31,344 --> 00:31:34,560 Ond yr hyn sy'n allweddol yw bod os ydych yn cadw gwneud y cwestiwn yn llai ac yn llai 703 00:31:34,560 --> 00:31:36,910 ac yn llai o faint, rydych yn Nid yw yn gofyn beth sydd sigma 704 00:31:36,910 --> 00:31:39,116 o n, beth sydd sigma o n, beth sydd sigma o n? 705 00:31:39,116 --> 00:31:40,990 Ydych yn gofyn beth sydd sigma o n, beth sydd sigma 706 00:31:40,990 --> 00:31:42,839 o n minws 1, beth sydd sigma o n minws 2? 707 00:31:42,839 --> 00:31:44,880 Yn y pen draw eich cwestiwn yn mynd i ddod yn beth? 708 00:31:44,880 --> 00:31:50,250 Beth yw sigma o un neu sero, rhywfaint o werth bach iawn, 709 00:31:50,250 --> 00:31:52,220 a chyn gynted ag y byddwch yn cael hynny, eich ffrind, 710 00:31:52,220 --> 00:31:54,350 Nid ydych yn mynd i ofyn yr un cwestiwn eto, 711 00:31:54,350 --> 00:31:55,975 ydych ond yn mynd i ddweud, oh ei fod yn sero. 712 00:31:55,975 --> 00:31:58,490 Rydym chi wedi gorffen chwarae math hwn o gêm cylchol dwp. 713 00:31:58,490 --> 00:32:02,950 >> Felly recursion yw'r weithred yn rhaglennu o swyddogaeth galw ei hun. 714 00:32:02,950 --> 00:32:06,630 Mae'r rhaglen hon, pan llunio a'u rhedeg, yn mynd i ymddwyn yn union yr un ffordd, 715 00:32:06,630 --> 00:32:09,620 ond yr hyn sy'n allweddol yw bod y tu mewn swyddogaeth o'r enw sigma, 716 00:32:09,620 --> 00:32:13,150 mae llinell o god wherein rydym yn galw ein hunain, 717 00:32:13,150 --> 00:32:14,980 fyddai fel rheol yn ddrwg. 718 00:32:14,980 --> 00:32:21,160 Er enghraifft, beth os byddaf yn gyntaf luniwyd hyn, felly gwnewch sigma-- 719 00:32:21,160 --> 00:32:22,710 gwneud sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Cyfanrif positif, os gwelwch yn dda, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Felly beth mae'r swyddogaeth yn ymddangos i fod, yn seiliedig ar un prawf, yn gywir. 723 00:32:30,810 --> 00:32:34,917 Ond beth os wyf yn cael ychydig yn beryglus a dileu'r achos sylfaenol hyn a elwir, 724 00:32:34,917 --> 00:32:37,750 a dim ond dweud, yn dda Im 'jyst yn gwneud mae hyn yn fwy cymhleth nag y mae. 725 00:32:37,750 --> 00:32:42,450 Gadewch i jyst gyfrifo y sigma drwy gymryd m ac yna ychwanegu 726 00:32:42,450 --> 00:32:44,564 mewn sigma o un m minws? 727 00:32:44,564 --> 00:32:45,980 Wel, beth sy'n mynd i ddigwydd yma? 728 00:32:45,980 --> 00:32:47,140 Gadewch i chwyddo allan. 729 00:32:47,140 --> 00:32:52,920 Gadewch i ni ail-grynhoi y rhaglen, gadw, ail-grynhoi y rhaglen, 730 00:32:52,920 --> 00:33:00,450 ac yna'n barod ./sigma-1 chwyddo i mewn, mynd i mewn cyfanrif positif os gwelwch yn dda, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Faint ohonoch chi yn fodlon i fess i fyny at weld hynny? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Felly, gall hyn ddigwydd am nifer o resymau, 735 00:33:06,690 --> 00:33:09,148 a dweud y gwir yr wythnos hon rydym yn fin rhoi mwy ohonyn nhw i chi. 736 00:33:09,148 --> 00:33:11,780 Ond yn yr achos hwn, rhowch gynnig i resymu'n ôl 737 00:33:11,780 --> 00:33:14,430 beth allai fod wedi digwydd yma? 738 00:33:14,430 --> 00:33:17,400 Fai segmentu, dywedasom ddiwethaf amser, yn cyfeirio at segment o gof. 739 00:33:17,400 --> 00:33:18,690 Mae rhywbeth drwg wedi digwydd. 740 00:33:18,690 --> 00:33:21,550 Ond beth oedd ei fecanyddol a aeth o chwith 741 00:33:21,550 --> 00:33:25,000 yma oherwydd fy symud yr achos sylfaenol fel y'u gelwir, 742 00:33:25,000 --> 00:33:26,870 lle yr wyf yn dychwelyd gwerth godio-galed? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Beth ydych chi'n feddwl aeth o'i le? 745 00:33:30,460 --> 00:33:31,219 Yeah. 746 00:33:31,219 --> 00:33:32,135 >> CYNULLEIDFA: [Anghlywadwy]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 SIARADWR 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Gwestiwn da. 750 00:33:37,550 --> 00:33:39,508 Felly, maint y rhif yr oeddwn yn ei grynhoi i fyny 751 00:33:39,508 --> 00:33:41,920 got mor fawr ei fod yn mynd y tu hwnt maint y gofod cof. 752 00:33:41,920 --> 00:33:44,640 Syniad da, ond nid yn y bôn mynd i achosi damwain. 753 00:33:44,640 --> 00:33:48,230 A allai achosi gorlif cyfanrif, lle y darnau yn union troi drosodd 754 00:33:48,230 --> 00:33:51,760 ac yna rydym yn camgymryd yn fawr iawn rhif ar gyfer fel rhif negatif, 755 00:33:51,760 --> 00:33:53,260 ond na fydd ynddo'i hun yn achosi damwain. 756 00:33:53,260 --> 00:33:55,509 Gan fod ar ddiwedd y dydd mae int yn dal i fod 32 o ddarnau. 757 00:33:55,509 --> 00:33:57,640 Nid ydych yn mynd i ddamweiniol dwyn ychydig yn 33ain. 758 00:33:57,640 --> 00:33:58,431 Ond mae meddwl da. 759 00:33:58,431 --> 00:33:58,984 Yeah. 760 00:33:58,984 --> 00:33:59,900 >> CYNULLEIDFA: [Anghlywadwy]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 SIARADWR 1: Y Dull byth yn stopio rhedeg, 763 00:34:02,300 --> 00:34:06,658 ac yn wir mae'n galw ei hun eto ac dro ar ôl tro ar ôl tro 764 00:34:06,658 --> 00:34:08,449 ac unwaith eto, ac nid oes yr un swyddogaethau hynny erioed 765 00:34:08,449 --> 00:34:13,310 gorffen oherwydd bod eu llinell unig cod yn galw nhw eu hunain dro ar ôl tro 766 00:34:13,310 --> 00:34:14,219 ac unwaith eto. 767 00:34:14,219 --> 00:34:16,080 A beth '' n sylweddol digwydd yma, ac yn awr rydym 768 00:34:16,080 --> 00:34:18,100 Gall math o dynnu lluniau. 769 00:34:18,100 --> 00:34:20,899 Gadewch i mi fynd drosodd i llun am ddim ond ennyd. 770 00:34:20,899 --> 00:34:22,940 Mae hwn yn ddarlun, bod Bydd cnawd ar esgyrn y pen draw 771 00:34:22,940 --> 00:34:26,336 yn fanylach, yr hyn sy'n digwydd tu mewn cof eich cyfrifiadur. 772 00:34:26,336 --> 00:34:28,460 Ac mae'n ymddangos bod ar waelod y llun 773 00:34:28,460 --> 00:34:29,709 yn rhywbeth a elwir yn y pentwr. 774 00:34:29,709 --> 00:34:31,920 Mae hwn yn dalp o cof, darn o RAM, 775 00:34:31,920 --> 00:34:33,920 sydd newydd eu defnyddio unrhyw bryd cael ei alw'n swyddogaeth. 776 00:34:33,920 --> 00:34:36,239 Unrhyw tro y byddwch, yn rhaglennydd, yn galw swyddogaeth, 777 00:34:36,239 --> 00:34:38,860 y system weithredu, fel Mac OS, Windows, neu Linux, 778 00:34:38,860 --> 00:34:41,920 grabs criw o bytes, efallai ychydig kilobytes, efallai ychydig megabeit 779 00:34:41,920 --> 00:34:44,590 y cof, yn eu dwylo i chi, ac yna'n gadael i 780 00:34:44,590 --> 00:34:47,650 ydych yn rhedeg eich swyddogaeth ddefnyddio newidynnau beth bynnag eu hangen arnoch. 781 00:34:47,650 --> 00:34:50,699 Ac os ydych yn, yna ffoniwch un arall swyddogaeth a swyddogaeth arall, 782 00:34:50,699 --> 00:34:53,590 byddwch yn cael sleisen arall o gof a sleisen arall o gof. 783 00:34:53,590 --> 00:34:57,090 >> Ac yn wir, os yw'r hambyrddau gwyrdd hyn o Annenberg yn cynrychioli y cof, 784 00:34:57,090 --> 00:34:59,870 dyma beth sy'n digwydd y cyntaf tro y byddwch yn galw sigma swyddogaeth. 785 00:34:59,870 --> 00:35:04,510 Mae fel rhoi hambwrdd fel hyn ar yr hyn sydd i ddechrau yw pentwr wag. 786 00:35:04,510 --> 00:35:07,142 Ond wedyn os yw'r hambwrdd galw ei hun, fel petai, 787 00:35:07,142 --> 00:35:08,850 galw achos arall o sigma, dyna 788 00:35:08,850 --> 00:35:11,640 fel gofyn y system weithredu, ooh, mae angen ychydig mwy o gof, 789 00:35:11,640 --> 00:35:12,520 roi i mi hynny. 790 00:35:12,520 --> 00:35:14,840 Ac yna mae'n mynd yn pentyrru ar ar ei ben. 791 00:35:14,840 --> 00:35:18,030 Ond yr hyn sy'n allweddol yma yw bod yr hambwrdd cyntaf yn dal i fod yno, 792 00:35:18,030 --> 00:35:20,620 oherwydd ei fod yn galw i rym yr ail hambwrdd. 793 00:35:20,620 --> 00:35:23,500 Yn awr yn y cyfamser, sigma yn galw sigma, dyna fel gofyn am fwy o gof. 794 00:35:23,500 --> 00:35:25,830 Gets pentyrru ar dros yma. 795 00:35:25,830 --> 00:35:29,350 sigma yn galw sigma, dyna un arall hambwrdd sy'n cael eu pentyrru ar yma. 796 00:35:29,350 --> 00:35:32,942 Ac os ydych yn dal i wneud hyn, yn y pen draw, math o map hwn gweledol 797 00:35:32,942 --> 00:35:35,525 at y siart, beth sy'n mynd i digwydd gyda'r pentwr o hambyrddau? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Mae'n mynd i fod yn fwy na'r swm o gof ar eich cyfrifiadur. 800 00:35:41,160 --> 00:35:45,790 A chyn gynted ag y hambwrdd werdd yn fwy na'r llinell lorweddol 801 00:35:45,790 --> 00:35:49,410 uwchben pentwr ac uwch y gair hwnnw domen, y byddwn yn dod yn ôl ato yn y dyfodol, 802 00:35:49,410 --> 00:35:50,410 hynny yn beth drwg. 803 00:35:50,410 --> 00:35:52,810 Mae'r domen yn wahanol segment o gof, 804 00:35:52,810 --> 00:35:55,190 ac os ydych yn gadael y rhain hambyrddau pentwr a pentwr ar, 805 00:35:55,190 --> 00:35:57,800 ydych yn mynd i fod yn fwy na segment eich hun o gof, 806 00:35:57,800 --> 00:36:00,420 ac mae rhaglen yn wir yn mynd i ddamwain. 807 00:36:00,420 --> 00:36:02,930 >> Yn awr wrth fynd heibio, y syniad hwn o recursion, felly, 808 00:36:02,930 --> 00:36:06,500 Gall arwain yn glir at broblemau, ond nid yw o reidrwydd yn beth drwg. 809 00:36:06,500 --> 00:36:08,840 Gan fod yn ystyried, ar ôl gyd, how-- ac efallai 810 00:36:08,840 --> 00:36:11,700 mae hyn yn cymryd ychydig amser i ymgyfarwyddo i --how cain neu pa mor syml 811 00:36:11,700 --> 00:36:14,890 bod gweithredu sigma oedd. 812 00:36:14,890 --> 00:36:17,440 Ac nid ydym yn mynd i ddefnyddio recursion i gyd bod llawer yn CS50, 813 00:36:17,440 --> 00:36:20,780 ond yn CS51, ac yn wir unrhyw ddosbarth lle rydych yn trin strwythurau data 814 00:36:20,780 --> 00:36:23,640 fel coed, neu goed teuluol, sydd â rhywfaint o hierarchaeth, 815 00:36:23,640 --> 00:36:26,000 'i' super, super defnyddiol. 816 00:36:26,000 --> 00:36:29,750 Yn awr, wrth fynd heibio, er mwyn i chi fel darpar wyddonwyr cyfrifiadurol 817 00:36:29,750 --> 00:36:33,180 yn gyfarwydd â rhai o Google jôcs y tu mewn, os byddwch yn mynd i Google 818 00:36:33,180 --> 00:36:36,345 a ydych yn edrych i fyny yr hyn yw'r ddiffiniad o, dyweder, recursion, nodwch. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Uh-huh. 821 00:36:41,110 --> 00:36:42,670 Wrth fynd heibio, yr wyf yn tynnu i fyny ychydig. 822 00:36:42,670 --> 00:36:45,470 Roedd hyn fel 10 munud o oedi y bore yma. 823 00:36:45,470 --> 00:36:52,890 Os ydych hefyd yn Google "Askew," hysbysiad drwy tilting eich pen slightly-- 824 00:36:52,890 --> 00:36:55,120 ac yna yr un yma, efallai, mwyaf erchyll o bob 825 00:36:55,120 --> 00:36:57,286 gan fod rhywun yn cael ei wario fel eu diwrnod gweithredu hyn 826 00:36:57,286 --> 00:36:59,880 rai blynyddoedd ago-- dod ymlaen. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 O, wait-- dyna a bug. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Felly, yn rhedeg ar un o'r gwefannau mwyaf byd 831 00:37:11,410 --> 00:37:13,510 yw'r rhain wyau Pasg ychydig yn dwp. 832 00:37:13,510 --> 00:37:16,690 Maent yn ôl pob tebyg yn bwyta yn nontrivial nifer o linellau o god 833 00:37:16,690 --> 00:37:19,280 yn union fel y gallwn gael ychydig bethau hwyl fel 'na. 834 00:37:19,280 --> 00:37:22,140 Ond o leiaf yn awr byddwch yn cael rhai o'r jôcs y tu mewn hynny. 835 00:37:22,140 --> 00:37:28,330 >> Nawr gadewch i ni edrych ar rai o'r gwyn yn gorwedd rydym wedi bod yn dweud yn ddiweddar, 836 00:37:28,330 --> 00:37:30,707 a dechrau plicio yn ôl rhai haenau dechnegol 837 00:37:30,707 --> 00:37:32,790 fel eich bod wir yn deall beth sydd wedi bod yn mynd ymlaen 838 00:37:32,790 --> 00:37:34,860 a gallwch ddeall rhai o'r bygythiadau, 839 00:37:34,860 --> 00:37:38,060 fel Shellshock, bod bellach wedi dechrau dod yn 840 00:37:38,060 --> 00:37:41,110 ar y blaen o ran pawb sylw, o leiaf yn y cyfryngau. 841 00:37:41,110 --> 00:37:45,810 Felly dyma yn swyddogaeth syml iawn sy'n dychwelyd dim byd, yn ddi-rym. 842 00:37:45,810 --> 00:37:46,790 Mae ei enw i yw cyfnewid. 843 00:37:46,790 --> 00:37:50,880 Mae'n cymryd mewn dau newidyn ac yn dychwelyd dim byd. 844 00:37:50,880 --> 00:37:52,260 Yn cymryd mewn a b. 845 00:37:52,260 --> 00:37:53,337 Felly arddangosiad cyflym. 846 00:37:53,337 --> 00:37:54,170 Rydym yn dwyn y rhain i fyny. 847 00:37:54,170 --> 00:37:56,100 Efallai y byddwn yn ogystal yn cymryd ychydig egwyl yma am ychydig funudau'n 848 00:37:56,100 --> 00:37:57,250 ac mae ganddynt ychydig o rywbeth i'w yfed. 849 00:37:57,250 --> 00:38:00,120 Os na fyddai rhywun yn meddwl ymuno fi yma am ychydig funudau'n. 850 00:38:00,120 --> 00:38:01,830 Beth am i chi yn y crys marwn? 851 00:38:01,830 --> 00:38:02,335 Dewch ar i fyny. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Dim ond yr un heddiw. 854 00:38:05,260 --> 00:38:06,251 Diolch i chi, er. 855 00:38:06,251 --> 00:38:08,000 Mae pob hawl, ac mae gennym dod i fyny pwy fan hyn? 856 00:38:08,000 --> 00:38:08,660 Beth yw eich enw? 857 00:38:08,660 --> 00:38:09,360 >> SIARADWR 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> SIARADWR 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Dewch ar i fyny. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Felly Laura, her syml iawn heddiw. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Neis i gwrdd yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Mae pob hawl. 866 00:38:16,910 --> 00:38:21,179 Felly, mae gennym ychydig o laeth dros yma ac mae gennym rai sudd oren dros yma 867 00:38:21,179 --> 00:38:23,345 a rhai chwpanau yr ydym benthyg o Annenberg heddiw. 868 00:38:23,345 --> 00:38:24,178 >> SIARADWR 4: Fenthycwyd. 869 00:38:24,178 --> 00:38:27,240 SIARADWR 1: Ac yn mynd i fynd yn ei flaen ac yn rhoi hanner gwydr o hyn i chi. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Mae pob hawl. 872 00:38:28,800 --> 00:38:30,750 A byddwn yn rhoi i chi hanner gwydraid o laeth. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 O, ac yn union fel y gallwch cofio beth roedd hyn yn debyg, 875 00:38:35,890 --> 00:38:38,860 Yr wyf yn cofio i ddod â hyn i fyny ac ar heddiw. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Iawn. 878 00:38:42,530 --> 00:38:45,470 Os na fyddech yn meddwl, gadewch i ni weld, rydym yn Gellir eu rhoi dros eich sbectol eich hun 879 00:38:45,470 --> 00:38:46,560 os ydych yn dymuno. 880 00:38:46,560 --> 00:38:48,710 Bydd hyn fod yn y byd o lygaid Laura. 881 00:38:48,710 --> 00:38:49,210 Mae pob hawl. 882 00:38:49,210 --> 00:38:53,820 Felly eich nod, o gofio dau gwpan o hylif yma, llaeth a sudd oren, 883 00:38:53,820 --> 00:38:58,370 yn cyfnewid y ddau cynnwys fel bod y sudd oren yn mynd i mewn i'r cwpan llaeth 884 00:38:58,370 --> 00:39:00,710 ac y llaeth yn mynd i mewn i y cwpan sudd oren. 885 00:39:00,710 --> 00:39:02,359 >> SIARADWR 4: A fyddaf yn cael gwpan arall? 886 00:39:02,359 --> 00:39:05,650 SIARADWR 1: Rydw i mor falch i chi ofyn, er bod byddai wedi bod yn llawer gwell ffilm 887 00:39:05,650 --> 00:39:06,710 os nad ydych wedi gofyn. 888 00:39:06,710 --> 00:39:10,620 Ond ie, gallwn gynnig i chi un rhan o dair cwpan sy'n wag, wrth gwrs. 889 00:39:10,620 --> 00:39:11,120 Mae pob hawl. 890 00:39:11,120 --> 00:39:12,300 Felly cyfnewid y cynnwys yno. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Iawn 'n glws. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Da iawn. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Rydych yn gwneud hyn yn hynod o ofalus. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Ac yn gam tri. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Mae pob hawl. 901 00:39:31,350 --> 00:39:31,930 Ardderchog. 902 00:39:31,930 --> 00:39:33,930 Mae rownd fawr o gymeradwyaeth Byddai yn dda i Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Mae pob hawl. 905 00:39:37,000 --> 00:39:40,790 Mae gennym ychydig anrheg Parting i chi, ond gadewch i mi gymryd y rhain. 906 00:39:40,790 --> 00:39:42,620 Ddiolch 'ch ogystal. 907 00:39:42,620 --> 00:39:46,170 Felly, enghraifft syml, fodd bynnag, i ddangos bod os ydych yn gwneud 908 00:39:46,170 --> 00:39:48,300 am gyfnewid y cynnwys o dau gynhwysydd, 909 00:39:48,300 --> 00:39:52,360 neu gadewch i ni alw newidynnau nhw, bydd angen rhywfaint o storio dros dro 910 00:39:52,360 --> 00:39:56,710 i gam un o'r cynnwys i'r y gallwch chi ei wneud mewn gwirionedd y cyfnewid. 911 00:39:56,710 --> 00:40:01,790 Felly yn wir, ffynhonnell hon cod fyny yma yn C yn cynrychioli union hynny. 912 00:40:01,790 --> 00:40:06,340 Os bydd y sudd oren oedd a'r llaeth oedd b, ac roeddem yn awyddus i gyfnewid y ddau, 913 00:40:06,340 --> 00:40:08,990 gallech roi cynnig ar rywbeth creadigol trwy dywallt un i'r llall, 914 00:40:08,990 --> 00:40:11,031 ond nad oedd yn ôl pob tebyg fyddai yn dod i ben yn arbennig o dda. 915 00:40:11,031 --> 00:40:15,260 Ac felly rydym yn defnyddio cwpan drydydd, ffoniwch mae'n tmp, T-M-P yn ôl confensiwn, 916 00:40:15,260 --> 00:40:19,370 a rhowch y cynnwys y OJ yn hynny, ac yna cyfnewid un cwpan, 917 00:40:19,370 --> 00:40:22,610 Yna rhowch y OJ mewn i'r cwpan gwreiddiol, a thrwy hynny 918 00:40:22,610 --> 00:40:25,320 cyflawni, yn union fel y Wnaeth Laura, mae'r cyfnewid. 919 00:40:25,320 --> 00:40:26,850 >> Felly gadewch i ni wneud yn union hynny. 920 00:40:26,850 --> 00:40:30,110 Gadewch i mi fynd yn ei flaen ac yn agor fyny enghraifft sy'n 921 00:40:30,110 --> 00:40:32,720 mewn gwirionedd a elwir yn "na cyfnewid, "oherwydd nid yw hyn yn 922 00:40:32,720 --> 00:40:36,180 wneud mor syml ag y byddech yn ei feddwl. 923 00:40:36,180 --> 00:40:41,190 Felly, yn y rhaglen hon, sylwch fod Im 'yn arfer stdio.h, ein hen gyfaill. 924 00:40:41,190 --> 00:40:43,130 Yr wyf yn cael y prototeip gyfer cyfnewid i fyny yno, a oedd yn 925 00:40:43,130 --> 00:40:45,450 golygu ei weithredu yn yn ôl pob tebyg i lawr isod, 926 00:40:45,450 --> 00:40:48,050 a gadewch i ni weld beth mae hyn yn brif rhaglen yn mynd i wneud i mi. 927 00:40:48,050 --> 00:40:52,020 Yr wyf yn datgan yn gyntaf int x yn cael un, ac int y cael dau. 928 00:40:52,020 --> 00:40:54,930 Felly, meddwl am hynny fel OJ a llaeth, yn y drefn honno. 929 00:40:54,930 --> 00:40:57,100 Ac yna Fi jyst cael printf dweud x yw hyn yn 930 00:40:57,100 --> 00:41:00,120 ac y mae hyn, yn union fel y gallaf ar eu golwg yn gweld beth sy'n digwydd. 931 00:41:00,120 --> 00:41:03,810 Hynny rwyf wedi printf hawlio fy mod yn cyfnewid y ddau, 932 00:41:03,810 --> 00:41:07,100 ac yna yr wyf yn argraffu honni eu bod yn cyfnewid, 933 00:41:07,100 --> 00:41:09,300 ac yr wyf yn argraffu x ac y eto. 934 00:41:09,300 --> 00:41:13,010 Felly i lawr yma yn cyfnewid yn yn union yr hyn a wnaeth Laura, 935 00:41:13,010 --> 00:41:16,240 ac yn union yr hyn a welsom ar y y sgrin funud yn ôl. 936 00:41:16,240 --> 00:41:19,380 >> Felly, gadewch i ni fynd yn ei flaen a fod yn enfawr ar ei ôl siomedig. 937 00:41:19,380 --> 00:41:24,690 Peidiwch â gwneud cyfnewid, ac yn rhedeg dim cyfnewid, chwyddo i mewn ar yr allbwn yma. 938 00:41:24,690 --> 00:41:28,320 Rhowch x yw 1, y yn 2, cyfnewid cyfnewid. 939 00:41:28,320 --> 00:41:32,700 x yn dal i 1, ac y mae'n dal i fod yn 2. 940 00:41:32,700 --> 00:41:37,630 Felly hyd yn oed er, a dweud y gwir, mae hyn yn edrych yn yn union yn hoffi, er yn dechnegol, 941 00:41:37,630 --> 00:41:40,730 yr hyn a wnaeth Laura, nid oedd yn ymddangos i weithio. 942 00:41:40,730 --> 00:41:42,130 Felly pam yw bod? 943 00:41:42,130 --> 00:41:46,630 Wel, mae'n ymddangos fod pryd rydym yn ysgrifennu rhaglen fel hon 944 00:41:46,630 --> 00:41:51,590 sydd wedi ddau brif, a amlygir yma, ac yna swyddogaeth arall, megis cyfnewid, 945 00:41:51,590 --> 00:41:54,230 hamlygu yma, a oedd yn mae'n galw, y byd 946 00:41:54,230 --> 00:41:57,030 bach yn edrych yn rhywbeth fel hambyrddau hyn funud yn ôl. 947 00:41:57,030 --> 00:42:00,440 Pan fydd prif cyntaf yn cael ei alw, dyna fel gofyn system weithredu 948 00:42:00,440 --> 00:42:04,030 am dipyn o gof ar gyfer unrhyw leol newidynnau fel x ac y sydd phrif wedi, 949 00:42:04,030 --> 00:42:05,660 ac maent yn y pen draw yn iawn yno. 950 00:42:05,660 --> 00:42:10,920 Ond os prif alwadau cyfnewid, a phrif pasio i gyfnewid dwy ddadl, a a b, 951 00:42:10,920 --> 00:42:16,410 sudd oren a llaeth, nid yw'n debyg trosglwyddo y sudd oren a'r llaeth 952 00:42:16,410 --> 00:42:17,500 i Laura. 953 00:42:17,500 --> 00:42:21,300 Yr hyn cyfrifiadur yn ei wneud, a yw'n pasio copïau o'r sudd oren 954 00:42:21,300 --> 00:42:27,110 a chopïau o'r llaeth i Laura, fel bod beth sydd yn y pen draw tu mewn hambwrdd hwn 955 00:42:27,110 --> 00:42:32,510 yw gwerth un a dau, neu OJ a llaeth, ond mae copïau ohono, 956 00:42:32,510 --> 00:42:34,790 fel eu bod ar hyn o bryd yn y stori, mae 957 00:42:34,790 --> 00:42:36,930 yw OJ a llaeth ym mhob un o'r hambyrddau hyn. 958 00:42:36,930 --> 00:42:39,260 Mae 'na un a dwy ym mhob un o'r hambyrddau hyn, 959 00:42:39,260 --> 00:42:41,720 a'r swyddogaeth ffeirio yn wir yn gweithio. 960 00:42:41,720 --> 00:42:46,090 Mae wedi eu cyfnewid y tu mewn o'r hambwrdd ail topmost, 961 00:42:46,090 --> 00:42:48,147 ond nad cyfnewid yn cael unrhyw effaith. 962 00:42:48,147 --> 00:42:49,980 Ac yn seiliedig ar dim ond rhai egwyddor sylfaenol rydym wedi 963 00:42:49,980 --> 00:42:52,970 siarad am o'r blaen, ac yn wir dim ond ychydig funudau yn ôl, beth 964 00:42:52,970 --> 00:42:58,770 Gallai esbonio pam newid a a b tu mewn cyfnewid 965 00:42:58,770 --> 00:43:05,560 cael unrhyw effaith ar x ac y, er bod Yr wyf yn pasio x ac y i'r swyddogaeth cyfnewid. 966 00:43:05,560 --> 00:43:08,750 Beth yw'r gair allweddol yma fod Gallai esbonio simplistig? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Rwy'n credu fy mod glywed yma? 969 00:43:12,627 --> 00:43:13,335 CYNULLEIDFA: Dychwelyd. 970 00:43:13,335 --> 00:43:14,085 SIARADWR 1: Dychwelyd? 971 00:43:14,085 --> 00:43:14,590 Nid yw dychwelyd. 972 00:43:14,590 --> 00:43:15,895 Gadewch i ni fynd ag un arall. 973 00:43:15,895 --> 00:43:16,395 Beth sy'n bod? 974 00:43:16,395 --> 00:43:17,080 >> CYNULLEIDFA: [Anghlywadwy]. 975 00:43:17,080 --> 00:43:20,000 >> SIARADWR 1: Iawn, felly return-- gallem gwneud gwaith yn dychwelyd yn y stori, 976 00:43:20,000 --> 00:43:21,914 ond mae 'na esboniad hyd yn oed yn symlach. 977 00:43:21,914 --> 00:43:22,580 CYNULLEIDFA: Scope. 978 00:43:22,580 --> 00:43:23,288 SIARADWR 1: Cwmpas. 979 00:43:23,288 --> 00:43:24,300 'N annhymerus' cymryd cwmpas. 980 00:43:24,300 --> 00:43:27,290 Felly cwmpas, cofio lle ein x ac y datgan. 981 00:43:27,290 --> 00:43:30,840 Maent yn datgan y tu mewn o brif i'r dde i fyny yma. 982 00:43:30,840 --> 00:43:33,200 a a b, yn y cyfamser, yn cael eu datgan yn effeithiol 983 00:43:33,200 --> 00:43:35,930 tu mewn cyfnewid, ddim yn hollol mewn y braces cyrliog ond yn dal 984 00:43:35,930 --> 00:43:37,690 yn yr ardal gyffredinol o gyfnewid. 985 00:43:37,690 --> 00:43:40,560 Ac felly yn wir, a a b ond yn bodoli o fewn y hambwrdd hwn 986 00:43:40,560 --> 00:43:44,850 o Annenberg, mae hyn ail darn o god. 987 00:43:44,850 --> 00:43:49,500 Felly, rydym yn wir yn newid y copi, ond nid dyna'r wir bob un sy'n ddefnyddiol. 988 00:43:49,500 --> 00:43:52,190 >> Felly, gadewch i ni edrych ar lefel ychydig yn is hyn. 989 00:43:52,190 --> 00:43:55,430 Rydw i'n mynd i fynd yn ôl i mewn i Cyfeirlyfr Source, 990 00:43:55,430 --> 00:43:58,330 ac yr wyf i'n mynd i yn gyntaf chwyddo i mewn yma, a dim ond 991 00:43:58,330 --> 00:44:02,290 i gadarnhau fy mod yn hyn o ffenestr terfynell fwy, 992 00:44:02,290 --> 00:44:04,430 mae'r rhaglen yn dal i ymddwyn fel 'na. 993 00:44:04,430 --> 00:44:06,840 Tybiwch yn awr fod hyn Nid yn fwriadol. 994 00:44:06,840 --> 00:44:10,090 Yn amlwg Roeddwn i eisiau cyfnewid i gwaith, felly mae'n teimlo fel bug. 995 00:44:10,090 --> 00:44:12,780 Nawr gallwn i ddechrau ychwanegu llawer o printf i fy cod, 996 00:44:12,780 --> 00:44:16,010 argraffu x dros yma, y ​​dros yma, mae dros yma, b dros yma. 997 00:44:16,010 --> 00:44:18,220 Ond dweud y gwir, yn ôl pob tebyg dyna beth rydych wedi bod yn ei wneud am ychydig o wythnosau 998 00:44:18,220 --> 00:44:20,190 yn awr, yn ystod oriau swyddfa ac yn y cartref wrth weithio 999 00:44:20,190 --> 00:44:22,150 ar psets ceisio dod o hyd rhai bugs. 1000 00:44:22,150 --> 00:44:25,560 Ond byddwch yn gweld, os nad ydych wedi gwneud hynny'n barod, y broblem honno yn gosod tri yn cyflwyno i chi 1001 00:44:25,560 --> 00:44:31,630 i orchymyn o'r enw GDB, lle mae GDB, GNU debugger, 1002 00:44:31,630 --> 00:44:34,040 ei hun wedi criw cyfan o nodweddion y gall mewn gwirionedd 1003 00:44:34,040 --> 00:44:38,160 gadewch i ni i ddeall sefyllfaoedd fel hyn, ond yn fwy nerthol, 1004 00:44:38,160 --> 00:44:39,940 datrys problemau a dod o hyd i chwilod. 1005 00:44:39,940 --> 00:44:40,940 Felly dw i'n mynd i wneud hyn. 1006 00:44:40,940 --> 00:44:44,770 Yn hytrach na ./noswap, Im 'yn lle hynny mynd i redeg GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Mewn geiriau eraill, yr wyf i'n mynd i redeg fy rhaglen nid yn Bash, ein ffrind newydd 1009 00:44:51,200 --> 00:44:51,850 heddiw. 1010 00:44:51,850 --> 00:44:53,970 Rydw i'n mynd i redeg fy noswap rhaglen yn y tu mewn 1011 00:44:53,970 --> 00:44:56,900 o'r rhaglen arall o'r enw GDB, sef dadfygiwr, a oedd 1012 00:44:56,900 --> 00:45:01,035 yn rhaglen sydd wedi'i chynllunio i helpu chi mae pobl eu ddod o hyd a chael gwared ar bugs. 1013 00:45:01,035 --> 00:45:03,410 Felly, os wyf yn taro Rhedeg fan hyn, mae swm echrydus o destun 1014 00:45:03,410 --> 00:45:04,868 sydd byth yn wir yn rhaid i chi ei ddarllen. 1015 00:45:04,868 --> 00:45:07,290 Mae'n y bôn yn tynnu sylw o'r brydlon, sy'n 1016 00:45:07,290 --> 00:45:10,030 Rydw i'n mynd i daro Control-L i fynd i fyny ar y brig yno. 1017 00:45:10,030 --> 00:45:11,800 Mae hyn yn y brydlon GDB. 1018 00:45:11,800 --> 00:45:15,550 Os ydw i eisiau i redeg y rhaglen hon yn awr, gan fod hyn yn taflen twyllo ychydig ar heddiw 1019 00:45:15,550 --> 00:45:21,860 sleid yn awgrymu, Run yw'r cyntaf gorchmynion i ni i fod i'w gyflwyno. 1020 00:45:21,860 --> 00:45:25,150 A dwi'n jyst yn mynd i deipio cyfnod yn arwain yma tu mewn GDB, 1021 00:45:25,150 --> 00:45:26,811 ac yn wir ei fod yn rhedeg fy rhaglen. 1022 00:45:26,811 --> 00:45:29,310 Nawr mae rhywfaint ychwanegol allbynnau y sgrin fel hyn, 1023 00:45:29,310 --> 00:45:31,910 ond mae hynny'n GDB rhefrol dim ond bod a dweud wrthym beth sy'n mynd ymlaen. 1024 00:45:31,910 --> 00:45:34,451 Nid oes rhaid i chi wir i chi boeni am y manylion hyn ar hyn o bryd. 1025 00:45:34,451 --> 00:45:36,890 Ond yr hyn sy'n wir yn cŵl am GDB, os wyf yn gwneud hyn again-- 1026 00:45:36,890 --> 00:45:42,100 Rheoli-L clirio'r screen-- gadael i mi fynd ymlaen a math "dorri prif," a thrwy hynny, 1027 00:45:42,100 --> 00:45:45,743 pan wnes i daro Enter, gan osod yr hyn sydd Gelwir pwynt egwyl yn noswap.c, 1028 00:45:45,743 --> 00:45:51,270 llinell 16, a dyna lle mae GDB cyfrifedig allan fy rhaglen mewn gwirionedd yn 1029 00:45:51,270 --> 00:45:53,070 yw, fy swyddogaeth mewn gwirionedd. 1030 00:45:53,070 --> 00:45:55,070 Hyn byddwn yn anwybyddu am y tro ond dyna y cyfeiriad 1031 00:45:55,070 --> 00:45:57,310 mewn cof yn benodol y swyddogaeth hon. 1032 00:45:57,310 --> 00:46:00,240 Felly nawr pan fyddaf r math rhedeg, sylwi ar beth sy'n oer yma. 1033 00:46:00,240 --> 00:46:05,650 Mae fy rhaglen yn torri ar yr wyf llinell Dywedodd GDB i oedi gweithredu ar. 1034 00:46:05,650 --> 00:46:09,850 Felly does dim rhaid i mi yn awr newid fy cod, ychwanegu ychydig o printf, yn ail-grynhoi iddo, ailgynnal 1035 00:46:09,850 --> 00:46:13,300 iddo, yn newid, ychwanegu ychydig o printf yn, gadw, ail-grynhoi ei, redeg. 1036 00:46:13,300 --> 00:46:18,100 Gall Fi jyst cerdded trwy fy rhaglen gam wrth gam wrth gam ar gyflymder dynol, 1037 00:46:18,100 --> 00:46:20,880 nid ar fath Intel-tu mewn cyflymder. 1038 00:46:20,880 --> 00:46:24,580 >> Felly nawr sylwi ar y llinell hon ymddangos yma, ac os byddaf yn mynd yn ôl 1039 00:46:24,580 --> 00:46:27,800 at fy rhaglen mewn gedit, sylwi bod hynny mewn gwirionedd yn 1040 00:46:27,800 --> 00:46:29,280 y llinell gyntaf iawn o god. 1041 00:46:29,280 --> 00:46:31,240 Mae llinell 16 yn gedit. 1042 00:46:31,240 --> 00:46:34,610 Mae llinell 16 o fewn GDB, a hyd yn oed er bod hyn rhyngwyneb du a gwyn 1043 00:46:34,610 --> 00:46:37,760 Nid yw bron mor defnyddiwr gyfeillgar, mae hyn yn golygu 1044 00:46:37,760 --> 00:46:41,680 Nid yw fod 16 llinell wedi cael ei ddienyddio eto, ond mae'n ymwneud i fod. 1045 00:46:41,680 --> 00:46:46,220 Felly, yn wir, os wyf yn fath print x, nid yn printf, dim ond print x, 1046 00:46:46,220 --> 00:46:50,730 Rwy'n cael rhywfaint o werth ffug yno o sero, gan nad yw x wedi'i ymgychwyn eto. 1047 00:46:50,730 --> 00:46:54,760 Felly dw i'n mynd i deipio nesaf, neu, os ydych yn am fod yn ffansi, dim ond N am nesaf. 1048 00:46:54,760 --> 00:46:59,090 Ond pan fyddaf yn mynd i mewn r math nesaf, yn awr sylwi mae'n symud ymlaen i linell 17. 1049 00:46:59,090 --> 00:47:02,840 Felly yn rhesymegol, os wyf i wedi eu gweithredu llinell 16 ac yr wyf yn awr deipio print x, 1050 00:47:02,840 --> 00:47:03,640 beth ddylwn i ei weld? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Un. 1053 00:47:05,520 --> 00:47:07,820 >> Ac yn awr mae hyn yn rhaid cyfaddef ddryslyd. 1054 00:47:07,820 --> 00:47:11,260 $ 2 yn unig yw ffordd ffansi o, os ydych yn am gyfeirio at y gwerth hwnnw yn nes ymlaen, 1055 00:47:11,260 --> 00:47:12,510 gallwch ddweud "doler lofnodi dau." 1056 00:47:12,510 --> 00:47:13,480 Mae'n debyg i gyfeiriad cefn. 1057 00:47:13,480 --> 00:47:14,570 Ond am y tro, yn ei hanwybyddu. 1058 00:47:14,570 --> 00:47:17,070 Yr hyn sy'n ddiddorol yw beth sy'n ar y dde o'r arwydd cyfartal. 1059 00:47:17,070 --> 00:47:21,000 Ac yn awr os wyf deipio nesaf eto ac argraffu y, dylwn i weld 2. 1060 00:47:21,000 --> 00:47:23,870 Gallaf hefyd nawr argraffu x unwaith eto, a dweud y gwir, 1061 00:47:23,870 --> 00:47:27,130 os ydw i'n cael ychydig yn ddryslyd ynghylch lle yr wyf fi, gallaf deipio rhestr ar gyfer y rhestr 1062 00:47:27,130 --> 00:47:30,590 a dim ond yn gweld rhywfaint o gyd-destun o gwmpas y pwynt rwy'n mewn gwirionedd yn. 1063 00:47:30,590 --> 00:47:35,180 Ac yn awr y gallaf deipio nesaf, ac mae x yw 1. 1064 00:47:35,180 --> 00:47:36,300 Nawr rwy'n deipio nesaf. 1065 00:47:36,300 --> 00:47:37,710 O, y mae 2. 1066 00:47:37,710 --> 00:47:40,750 Ac eto, mae'n ddryslyd, oherwydd bod allbwn GDB yn 1067 00:47:40,750 --> 00:47:43,044 yn cael ei cymysg gyda fy allbwn hun. 1068 00:47:43,044 --> 00:47:45,710 Ond os ydych yn cadw mewn cof, gan glancing yn ôl ac ymlaen yn eich cod 1069 00:47:45,710 --> 00:47:47,740 neu wrth ei osod allan ochr yn ochr efallai, wnewch chi helpu 1070 00:47:47,740 --> 00:47:51,020 gweld sydd wir Im 'jyst camu trwy fy rhaglen. 1071 00:47:51,020 --> 00:47:54,620 >> Ond yn sylwi ar yr hyn sy'n digwydd nesaf, yn llythrennol. 1072 00:47:54,620 --> 00:47:56,380 Dyma llinell 22. 1073 00:47:56,380 --> 00:48:01,315 Gadewch i mi fynd drosti, a thrwy hynny symud ymlaen i 23, ac os wyf yn argraffu x yn awr, yn dal yn un. 1074 00:48:01,315 --> 00:48:03,890 Ac os wyf yn argraffu y awr, yn dal yn un. 1075 00:48:03,890 --> 00:48:05,820 Felly, nid yw hyn yn ymarfer defnyddiol. 1076 00:48:05,820 --> 00:48:07,450 Felly gadewch i ni ail-wneud hyn. 1077 00:48:07,450 --> 00:48:10,069 Gadewch i mi fynd yn ôl i fyny at y top a math rhedeg eto. 1078 00:48:10,069 --> 00:48:12,110 Ac mae'n dweud bod y rhaglen sy'n cael ei debugged 1079 00:48:12,110 --> 00:48:14,109 eisoes wedi dechrau, dechrau o'r dechrau. 1080 00:48:14,109 --> 00:48:15,420 Ie, gadewch i ni wneud hyn eto. 1081 00:48:15,420 --> 00:48:22,000 A'r tro hwn gadewch i ni ei wneud nesaf, nesaf, nesaf, nesaf, nesaf, 1082 00:48:22,000 --> 00:48:24,180 ond erbyn hyn mae pethau'n mynd yn ddiddorol. 1083 00:48:24,180 --> 00:48:27,760 Nawr rwyf am i gamu i mewn cyfnewid, felly nid wyf yn teipio nesaf. 1084 00:48:27,760 --> 00:48:34,380 Wyf yn fath gam, ac yn awr yn sylwi arno wedi fy neidio i linell noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Os byddaf yn mynd yn ôl i'r gedit, beth sy'n llinell 33? 1086 00:48:37,240 --> 00:48:40,500 Dyna y cyntaf gwirioneddol llinell o god tu mewn cyfnewid. 1087 00:48:40,500 --> 00:48:44,150 Pa yn neis, oherwydd erbyn hyn gallaf math o brocio o gwmpas a chael chwilfrydig 1088 00:48:44,150 --> 00:48:46,052 ynghylch yr hyn sy'n digwydd yn wirioneddol i mewn 'na. 1089 00:48:46,052 --> 00:48:46,760 Gadewch i mi argraffu tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Pwy yw. 1092 00:48:48,800 --> 00:48:51,438 Pam mae tmp cael rhywfaint o crazy, gwerth garbage ffug? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 CYNULLEIDFA: Nid yw wedi ei ymgychwyn. 1095 00:48:56,120 --> 00:48:57,150 SIARADWR 1: Nid yw wedi'i ymgychwyn. 1096 00:48:57,150 --> 00:49:00,270 Ac yn wir, pan fyddwch yn rhedeg rhaglen, eich bod yn rhoi criw cyfan o gof 1097 00:49:00,270 --> 00:49:03,392 gan y system weithredu, ond yr ydych Nid yw wedi initialized unrhyw werthoedd, 1098 00:49:03,392 --> 00:49:05,600 felly beth bynnag darnau rydych yn gweld yma, hyd yn oed er 'i' 1099 00:49:05,600 --> 00:49:07,770 hwn negyddol fawr crazy rhif, dim ond yn golygu 1100 00:49:07,770 --> 00:49:10,750 bod y rheini yw'r gweddillion o peth defnydd blaenorol o'r RAM, 1101 00:49:10,750 --> 00:49:13,050 er nad wyf wedi fy hun ei angen eto. 1102 00:49:13,050 --> 00:49:17,086 Felly, yn awr yr wyf i'n mynd i fynd yn ei flaen a math nesaf, ac os wyf yn awr deipio print tmp, 1103 00:49:17,086 --> 00:49:17,835 beth ddylwn i ei weld? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Beth bynnag werth a oedd, a yw'r ddadl gyntaf, dim ond 1106 00:49:23,360 --> 00:49:25,550 fel x oedd y cyntaf beth sy'n cael ei basio i mewn, 1107 00:49:25,550 --> 00:49:30,450 felly mae a dylai x fod yr un fath, felly dylai argraffu tmp argraffu mi un. 1108 00:49:30,450 --> 00:49:36,360 >> Felly, beth byddwch yn gweld mewn set problem tri yn tiwtorial o ryw fath ar GDB, 1109 00:49:36,360 --> 00:49:40,020 ond yn sylweddoli bod hyn yn ddechrau o edrych ar offeryn a fydd mewn gwirionedd yn 1110 00:49:40,020 --> 00:49:42,774 eich helpu i ddatrys problemau llawer mwy effeithiol. 1111 00:49:42,774 --> 00:49:44,690 Yr hyn rydym yn y pen draw mynd i'w wneud ar ddydd Mercher 1112 00:49:44,690 --> 00:49:48,180 yn dechrau plicio yn ôl ychydig o haenau a dileu rhai olwynion hyfforddiant. 1113 00:49:48,180 --> 00:49:50,496 Y peth a elwir yn llinyn sy'n rydym wedi ei ddefnyddio ers peth amser, 1114 00:49:50,496 --> 00:49:53,370 rydym yn mynd i gymryd y ffwrdd yn araf oddi wrthych ac yn dechrau siarad am 1115 00:49:53,370 --> 00:49:55,725 rhywbeth mwy esoterically a elwir yn torgoch *, 1116 00:49:55,725 --> 00:49:59,550 ond yr ydym yn mynd i wneud 'n glws hwn a ysgafn ar y dechrau, er bod awgrymiadau, 1117 00:49:59,550 --> 00:50:02,730 gan eu bod yn gelwir, yn gallu gwneud rhai pethau drwg iawn os cam-drin, 1118 00:50:02,730 --> 00:50:06,040 drwy edrych ar ychydig o animeiddio clai oddi ein ffrind Nick Parlante o Stanford 1119 00:50:06,040 --> 00:50:09,670 Brifysgol, yn athro yn y cyfrifiadur gwyddoniaeth a rhoi at ei gilydd rhagolwg hwn 1120 00:50:09,670 --> 00:50:11,075 o'r hyn sydd i ddod Dydd Mercher hwn. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO Playback] 1123 00:50:13,400 --> 00:50:13,900 -Hey, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Wake i fyny. 1126 00:50:15,780 --> 00:50:17,240 Mae'n amser am hwyl pwyntydd. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> -Beth Yw hwnna? 1129 00:50:19,350 --> 00:50:21,150 Dysgu am awgrymiadau? 1130 00:50:21,150 --> 00:50:22,050 O, anrhegion! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [DIWEDD Playback VIDEO] 1133 00:50:23,730 --> 00:50:25,396 SIARADWR 1: Bod yn eich disgwyl ar ddydd Mercher. 1134 00:50:25,396 --> 00:50:26,440 Byddwn yn eich gweld yna. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO Playback] 1136 00:50:27,106 --> 00:50:30,420 -ac Awr, Thoughts Deep, gan Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> -Pam Ydyn ni'n dysgu C? 1139 00:50:35,900 --> 00:50:36,785 Pam na A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Chwerthin] 1142 00:50:40,910 --> 00:50:42,160 >> [DIWEDD Playback VIDEO]