[MUSIC nagpe-play] David MALAN: Ang lahat ng mga karapatan, ito ay CS50. Ito ay ang katapusan ng linggo alas-otso. At ngayon, sisimulan namin upang punan ang ilang mga piraso pagdating sa gusali mga bagay-bagay sa web. Kaya, isipin ang na sa Lunes gastusin namin ng maraming mas maraming oras sa PHP, na kung saan ay ang dynamic programming language na Hinahayaan amin output, bukod sa iba pang mga bagay-bagay, HTML at iba pang mga naturang nilalaman na makikita gusto naming makita. Ngunit kami ay hindi talagang tumingin sa kung paano kami ay pagpunta upang mag-imbak ng anumang impormasyon. Sa katunayan, halos lahat ng anumang ng mga na ang mga super kagiliw-giliw na mga website na binibisita mo ngayon may ilang mga uri ng database sa likod dulo, right? Tiyak na nag-iimbak ng Facebook maraming data tungkol sa ating lahat at mga tindahan ng Gmail ang lahat ng iyong mga email. At ito, maraming iba pang mga site ay hindi lamang static na nilalaman na nagbibigay-kaalaman. Ito ay talagang dynamic na sa ilang mga paraan. Magbigay ka ng input, ito update ang mga pahina para sa iba pang mga tao. Makakakuha ka ng mga mensahe, magpadala sa iyo ng mensahe, at iba pa. Kaya ngayon, masaya naming mas malapit sa ang underpinnings ng isang proyekto na makikita mo sumisid sa susunod linggo, CS50 Finance, na ay talagang pagpunta sa mayroon kang bumuo ng isang bagay na wala sa C, ngunit sa PHP. Ang isang website na mukhang isang maliit na bagay na tulad nito na nagbibigay-daan upang bumili at magbenta mga stock na talagang pagpunta sa gumuhit sa real time data stock mula sa Yahoo Finance. At kaya sa huli, ikaw ay magkakaroon ng ilusyon para sa iyong sarili at para sa mga gumagamit na ang tunay na ikaw ay bumibili at nagbebenta stock at pagkuha ng halos real time update, sa pamamahala ng isang portfolio, ang lahat ng na ay pagpunta sa nangangailangan ng pagkakaroon, sa huli, isang database ng mga gumagamit. Kaya, sa iyong sariling mga salita, lalo na kung ikaw ay hindi sobrang pamilyar sa computer science o mga database, kung ano alam mo ang isang database upang maging sa ngayon, sa nontechnical termino? Ano ito? Paano mo ilalarawan ang mga ito sa isang kasama sa kuwarto o kaibigan? Madla: [hindi marinig] impormasyon [hindi marinig] David MALAN: Kaya, ang isang listahan ng impormasyon, o isang store-- ng isang listahan ng impormasyon na maaari mong isaalang-imbak tungkol sa isang bagay, tulad ng isang user. At ano ang mga gumagamit ay may nauugnay sa mga ito? Kung ikaw ay isang user sa Facebook o Gmail, ano ang mga katangian na lahat tayo gumagamit ay may? Tulad ng, kung ano ang maaaring maging ang ilan sa mga hanay sa spreadsheet na kung saan namin Tinukoy sa nakaraan? Dahil muli, maaari mong tingin ng isang database talagang bilang fancy Excel file o Google Spreadsheet o Apple Numbers file. Kaya, ano ang tingin mo sa kapag sa tingin mo ng isang user? Ano ang mayroon sila? Ano yan? Madla: Ang isang pangalan. David MALAN: Isang pangalan. Kaya kung pangalan, tulad ng, David Malan ay magiging ang pangalan ng ilang mga user. Ano pa ang magkaroon ng isang user? Madla: Isang ID. David MALAN: Isang ID. Kaya, tulad ng isang numero ng ID, tulad ng iyong Harvard ID o ang iyong Yale Net ID o mga katulad. Ano pa ang maaaring magkaroon ng isang user? Madla: Password. David MALAN: Ang isang password, marahil ng isang address, marahil ng isang numero ng telepono, marahil ng isang email address. Kaya, may kumpol ng mga patlang at ang maaaring uri ng spiral ng control mabilis sa lalong madaling simulan mo realizing, oh, ni-imbak ito ipaalam at ni-imbak na ito at na ipaalam. Ngunit paano namin talagang gawin iyon? Kaya muli, ang kaisipan modelo na magkaroon ng para sa araw na ito bilang namin sumisid sa aktwal na SQL, Nakabalangkas na Query Wika, ay isang database na ganito ang hitsura. Ito ay mga hilera lamang at mga haligi. At maaari mong isipin Google Spreadsheets o anumang bilang ng iba pang mga program. Ngunit kung ano ang key tungkol sa MySQL, na kung saan ay ang database software na kami ay pagpunta upang gamitin, ang malayang lantaran available-- gumagamit Facebook ito at anumang bilang ng iba pang mga websites-- database ng mga tindahan ng mga bagay relationally. At isang pamanggit database ito ay nangangahulugan lamang na ang isa literal nag-iimbak ng data nito sa hanay at haligi. Ito ay kasing simple ng iyon. Kaya, kahit na isang bagay tulad ng Oracle na maaari kang magkaroon ng karaniwang naririnig ng ay isang pamanggit database. At sa ilalim ng hood, ito tindahan ng data sa mga hanay at haligi. At Oracle Sisingilin ka ng isang maraming pera upang gawin iyon, samantalang MySQL singil wala ka para sa pareho. Kaya, SQL ay pagpunta upang ibigay sa amin hindi bababa sa apat na mga operasyon. Ang kakayahan na piliin ang data, tulad ng read data, ipasok, tanggalin, at i-update ang data. Sa ibang salita, ang mga ito ay talaga ang apat na key operasyon na pagpunta sa-daan sa amin upang baguhin bagay-bagay sa mga hanay at haligi. Ang tool na gagamitin namin ngayon lalo na upang malaman ang SQL at upang i-play dito ay tinatawag na muli PHP MyAdmin. Ito ay based tool web. Kabuuang pagkakataon na ito ay nakasulat sa PHP. Ngunit ito ay pagpunta sa bigyan kami ng isang graphical user interface kaya na namin maaaring aktwal lumikha ng mga hanay at haligi at pagkatapos ay makipag-usap sa kanila sa pamamagitan ng code. Kaya, ngayon simulan upang ipaalam ano ang tingin ko ay lantaran uri ng masaya proseso ng gusali sa likod ng pagtatapos ng mga website, ang mga bahagi na hindi gumagamit makita, ngunit tiyak na ang pag-aalaga tungkol sa, dahil iyon sa halip data ng pagpunta. Kaya, katulad sa C at isang maliit na mas mababa tulad ng PHP, SQL, o sa isang database na sumusuporta sa SQL, ay may mga uri ng hindi bababa sa mga data at mga kumpol ng iba. Pansamantalang trabaho, VARCHAR, INT, BIGINT, Decimal, at DATETIME. At may isang buong grupo ng iba pang mga tampok, ngunit sabihin gawin ito sa pamamagitan ng ipaalam paraan ng aktwal na halimbawa. Pupunta ako sa pumunta sa CS50 IDE kung saan, nang maaga, ako naka-log in at iyong binisita ko rin ang isang URL para sa ang kasangkapan na tinatawag na PHP MyAdmin. At sa set problema pitong, sasabihin namin sa sa iyo nang eksakto kung paano makapunta sa interface na ito din. Sa itaas na kaliwang sulok, paunawa sinasabi nito magbigay ng panayam. At iyon ay nangangahulugan lamang na nang maaga, nilikha ko isang walang laman na database na tinatawag na lecture na ay wala pang mga spreadsheet sa loob nito. Walang mga hanay at haligi. Dahil ang unang bagay na namin ang pagpunta sa gawin ay magsisimula na lumikha ng isang talahanayan na ang pagpunta sa tindahan ng aming mga gumagamit. Kaya, literal higit sa dito sa kanan, ako pagpunta sa sabihin sa database Gusto ko ng isang talahanayan na tinatawag na mga gumagamit. Kaya, ito ay tulad ng mga file na ako nais na tindahan ng lahat ng aking mga data sa. At kung gaano karaming mga haligi? Well, panatilihin ito simple para sa ngayon. Gusto ko lang mag-imbak tulad ng isang username at isang pangalan para sa isang user. Sisimulan naming maliit. Kaya, gusto kong total dalawang haligi. At ako pagpunta sa magpatuloy at i-click ang Go. At pagkatapos ay, para sa mga haligi, kung ano ako pagpunta upang do-- kung ito internet cooperates-- lahat ng karapatan, kaya kami ay pagpunta sa subukan muli. Pupunta ako upang lumikha ng isang talahanayan na tinatawag na Mga user na may dalawang mga haligi, i-click ang Go, OK. Ngayon nakuha ito talagang mabilis namin. Salamat sa iyo, masyadong magaling. Lahat ng karapatan, kaya kung ano ang gusto namin mga hanay na ito ay tinatawag na? Kaya, ang isa ay pagpunta sa ay tinatawag Username. Kaya, ang lahat ng nakikita ko here-- at ang interface lantaran ang makakakuha ng isang maliit na pangit sa huli, sa sandaling ikaw simulan ang pag-type sa lahat ng data na ito. Ngunit kung ano ang magaling na uri ng paradoxically, ako ang paglikha ng mga hanay, ngunit ang mga tool ay kamangmangan inilatag ito sa mga hilera upang ang maaari kong i-configure ang mga hanay na ito. Kaya, may dalawang mga patlang doon sa ilalim ng Pangalan. At ang isa sa mga patlang na ito ako nais na tinatawag na Username, at ang iba pang mga field na gusto kong tumawag ng Pangalan. At ngayon kailangan kong piliin ang uri ng data para sa mga bagay na ito. Kaya, habang sa Excel at Google Spreadsheets, kung nais mo ang isang haligi, literal mo i-type lamang Pangalan o Username, pindutin ang Enter. Siguro mo itong gawing bold face para lamang sa kaliwanagan, ngunit na ito. Hindi mo tukuyin ang mga uri ng haligi. Ngayon sa Google Spreadsheets o Excel, ikaw Maaaring tukuyin kung paano ang data ay nai-render. Ikaw ay maaaring pumunta sa menu ng Format, at ikaw maaaring tukuyin ipakita ito tulad ng dollar sign, ipakita ito tulad ng isang lumulutang na halaga ng point. Kaya, ito ay katulad sa espiritu sa na kung ano ang hindi namin tungkol sa upang gawin, ngunit ito ay aktwal na pagpunta sa lakas ang data na maging isang tiyak na uri. Ngayon, kahit isang sandali na ang nakaraan ako sinabi may lamang ng ilang mga uri ng data, may tunay na isang buong maraming, at sila ay sa iba't ibang grado ng pagtitiyak. At bilang isang bukod, mo Maaari ring gawin magarbong mga bagay-bagay tulad geometries storage sa loob ng isang database. Maaari mong itabi ang mga bagay-bagay tulad ng mga coordinate sa GPS at talagang mahanap, mathematically, puntos na malapit sa iba. Ngunit kami ay pagpunta sa panatilihin ito sobrang simple at pumunta sa dito, ang lahat ng mga ang tinatawag na uri string. Kaya, narito ang isang listahan ng isang buong grupo ng mga opsyon. Pansamantalang trabaho, VARCHAR, TINYTEXT, MEDIUMTEXT, LONGTEXT. At ito ay uri ng napakalaki. At sa kasamaang palad, medyo paradoxically sa C, isang pansamantalang trabaho ay hindi talagang isang pansamantalang trabaho. Kung tinukoy mo sa isang database na i-type ang iyong data ay pansamantalang trabaho, na nangangahulugan na oo, ito ay isang Pansamantalang trabaho, ngunit ito ay isa o higit pang mga karakter. At kailangan mong tukuyin kung gaano karaming karakter na gusto mo. Kaya, ano ang isang tipikal haba para sa isang username? Kadalasan ay may hangganan? Madla: [hindi marinig] David MALAN: 16 siguro? Parang ganun. Alam mo, pabalik sa araw, ginamit ito upang maging walo. Minsan ito ay 16, kung minsan ito ay mas higit na. At ito, ito ay hindi gumagana ibig sabihin bigyan ako ng isa char. Ang ibig sabihin nito ko kailangang tiyakin ang haba ng field, at ngayon maaari kong sabihin isang bagay tulad ng 16. At doon ay isang kalakalan off dito. Kaya, kami ay makikita sa ilang sandali na ito ay nangangahulugan ng isa, bawat username ay kailangang 16 character. Ngunit maghintay ng isang minuto, M-A-L-A-N. Kung iyon aking username at gumagamit ako ng limang lamang, kung ano ang nais mong imungkahi na ang database upang gawin para sa iba pang 11 na mga character na Nakareserba ko na espasyo para sa? Ano ang gagawin mo? Madla: [hindi marinig] David MALAN: Oo, lamang gumawa ng mga ito ang lahat ng null. Gumawa ng mga ito na mga puwang. Ngunit marahil ay null, kaya ang isang pulutong ng backslash zero. Kaya, sa isang banda, na namin ngayon ginawa sigurado na ang aking username ay maaaring maging hindi hihigit sa 16 character. At tingnan ang bahagi ng na na kung ako ay isang tunay na matagal na pangalan o nais ng isang tunay na mahaba username tulad ng ilan sa inyo ay maaaring magkaroon ng isang lalaki na sa kolehiyo o sa Yale.edu, hindi ka maaaring magkaroon ng isa. At kaya sa katunayan, kung na sa iyo kailanman nakarehistro para sa isang website at kumuha ka yelled sa sinasabi iyong password ay masyadong mahaba o ang iyong username ay masyadong mahaba, ito ay dahil lang sa isang programmer, kapag pag-configure ng kanyang database, nagpasya na ang patlang na ito ay na hindi na kaysa sa haba. Lahat ng karapatan, kaya kung ano kung magpatuloy namin sa pangalan? Gaano katagal ang dapat isang Pangalan ng tipikal na tao ang dapat? Gaano karaming mga character, 16? Ako sa paghula ng dati namin makahanap ng isang tao sa kuwartong ito kung saan sa pamamagitan ng kanyang unang plus huling pangalan ay mas mahaba kaysa sa 16 mga character. Kaya, ano ang mas mahusay kaysa sa na, 17? 18? 25? Mas malaki? 30? Madla: [hindi marinig] David MALAN: 5,000, oh aking Diyos. Kaya, na maaring isang disenteng itaas na nakagapos, ay dapat namin sabihin. At dito namin uri ng may upang gumawa ng isang paghatol na tawag. Tulad ng, hindi na tamang sagot dito. Walang-hanggan ay hindi lubos na posible, dahil hindi namin kalaunan pagpunta sa have-- hindi namin pagpunta sa maubusan ng memory. Kaya, kami ay gumawa ng isang paghatol call sa ilang mga punto. Napaka-karaniwang ay, halimbawa, upang use-- at ipaalam sa akin tukuyin char dito bilang before-- 255 ay literal ang mataas na limitasyon sa database na ito software Taong nakalipas. At ito, ang isang pulutong ng mga tao Gusto lamang sabihin, fine. 255 ay ang limitasyon. Gamitin lang ang maximum Hayaan. At ito ay medyo katawa-tawa. Tulad ng, kung nagta-type ka ng isang tao pangalan para sa 200 plus na mga character, na ang isang maliit na walang katotohanan. Subalit, tandaan na ASCII ay hindi ang tanging sistema para sa mga character. At ito, lalo na sa isang pulutong ng mga Asian na mga wika kung saan may mga character ay hindi natin ipahayag sa keyboard tulad ng aking US keyboard, ilang mga character talaga tumagal ng hanggang 16 bits sa halip ng walong bits. At ito, ito ang tunay na ay hindi lahat na hindi makatwiran na kailangan namin ng higit pang space kung gusto naming upang magkasya mas malaking mga character kaysa sa tunay US Centric mga ko na tended upang talakayin. Kaya, kailangan namin ng ilang upper bound. Hindi ko alam kung ano ang pinakamahusay na isa ay, ngunit 255 ay karaniwang isang karaniwang isa. 25 nararamdaman mababa. 16, 32 pakiramdam mababa. Gusto ko magkamali sa gilid ng isang bagay na mas mataas. Subalit mayroong isang kalakalan off, gaya ng lagi. Ano ang, marahil, halata trade off ng mapagtipid 255 na karakter para sa lahat ng pangalan sa aking database? Madla: [hindi marinig] David MALAN: Ano iyon? Madla: [hindi marinig] David MALAN: Ito ay isang maraming memorya, di ba? M-A-L-A-N. Ako ay nasayang lamang 250 mga character upang i-imbak lang ang aking pangalan defensively, sa kaso ng isang tao sa klase ay may isang tunay na matagal na pangalan. Na tila tulad ng isang hindi tumpak tradeoff. Kaya, ito ay lumiliko out na SQL, database na ito ng wika, tunay na sumusuporta sa isang bagay tinatawag VARCHAR, o Variable char. At ito ay uri ng magaling sa na ito ay nagbibigay-daan sa iyo upang tukuyin hindi isang nakapirming width, ngunit sa halip, ang isang variable na lapad. At higit na partikular, ang isang maximum na lapad ng field. Kaya, ito ay nangangahulugan na ang isang pangalan na maaari na hindi hihigit sa 250 mga character, ngunit ito ay tiyak na magiging mas kaunti. At ang mga database ay magiging matalino. Kung alam mong ilagay sa M-A-L-A-N, lamang ito ay pagpunta upang gamitin ang limang, siguro anim bytes para tulad ng isang trailing null character, at hindi gastusin ng isang karagdagang 249 o 250 bytes kung hindi kinakailangan. Kaya, ito ay tila tulad ng dapat kong Sinimulan sa kuwentong ito. Ngunit may palaging isang tradeoff. Kaya, sa isang banda, ang isang username na hindi ko na tinukoy na hard code sa 16, at marahil na ay hindi ang karapatan na tawag, marahil ito ay, ngunit bakit hindi gamitin Varchars para sa lahat? Ito ay umiiral para sa isang kadahilanan. Bakit hindi gamitin varchars para sa bawat field ang haba hindi mo alam nang maaga kung ito tila na maging isang mahusay na bagay, di ba? Gamitin lamang ang mas maraming espasyo bilang kailangan mo ng hanggang sa ang limitasyon na ito? Madla: Mas mabagal. David MALAN: Speller? Madla: Ginagawang mas mabagal? David MALAN: Oh, ito ay mas mabagal. Good, na halos palaging ang sagot, lantaran. Tulad ng, kung ano ang mga tradeoff? Ito ay alinman sa may bayad na higit pang espasyo o mas maraming oras ang mga gastos. Kaya, sa kasong ito, maaaring ito ay mas mabagal. Bakit? Madla: [hindi marinig] pagtukoy [hindi marinig]. David MALAN: Magandang. Kaya, maaari mong isipin ang mula sa kahit na PSED5, paglalaro kasama ang iyong diskarte sa diksyunaryo, kung mayroon ka na magtalaga ng memory dynamic o panatilihin lumalaking isang buffer, na aktwal na maaaring maging mabagal. Kung mayroon kang tumawag sa malloc sa ilalim ng hood at baka na kung ano ang ginagawa MySQL, kaya tiyak na maaaring ang kaso. At kung sa tingin mo na paraan bumalik sa PSet-- o kahit dalawang linggo, kapag kami gumawa ng mga bagay tulad ng binary paghahanap o kahit linear paghahanap, isa sa mga magagandang bagay tungkol sa bawat salita sa isang database o bawat salita sa isang haligi pagiging eksakto ang parehong haba, kahit kung ang isang buong grupo ng mga character ay blangko, ay na maaari mong gamitin ang random access sa iyong data, i-right? Kung alam mo na ang bawat salita ay 16 character ang layo, maaari mong gamitin ang pointer aritmetika, para sa magsalita, at pumunta sa amin 16, 32, 48, 64, at maaari mo lamang tumalon agad gamit ang arithmetic sa alinman sa mga salitang ito sa iyong database. Sapagkat kung ito ay isang VARCHAR, ano ang gagawin mo sa halip ay may sa gawin? [PHONE tugtog] Kung ito ay isang VARCHAR, ikaw hindi maaaring gumamit ng random access. Ano ang kailangan upang tumingin para sa o gawin? Oo? Madla: [hindi marinig] David MALAN: Hanapin sa pamamagitan ng whole-- trace sa pamamagitan ng buong listahan naghahanap ng kung ano, malamang? Anong uri ng mga espesyal na halaga? Madla: [hindi marinig] David MALAN: Naghahanap para sa mga null terminators na maghiwalay ang paghihiwalay ng mga salita. Kaya muli, isang tradeoff, at walang tamang sagot. Ngunit ito ay kung saan, lalo na kapag nakakuha ng iyong mga gumagamit na maging maraming at ang iyong pag-load sa iyong server, ang bilang ng mga tao gamit ang mataas na ito ay makakakuha ng, ang mga ito ay aktwal na nontrivial desisyon. Kaya, maaari naming mag-iwan ang mga ito bilang na ito, ngunit ni mag-scroll pababa sa ibabaw sa kanan ipaalam dito. Ngayon, may isang pares ng mga haligi kung saan mayroon kaming upang gumawa ng isang paghatol na tawag. Ba magkaroon ng kahulugan upang payagan ang isang gumagamit pangalan, username ng isang user o ng isang user pangalan na, upang maging null? Iyon ay, lamang blangko. Nararamdaman ng isang maliit na walang saysay, kaya hindi ako hindi pagpunta upang suriin ang mga kahon. Ngunit ito ay lumiliko out sa isang database, maaari mong sabihin, ang isang tao ay maaaring opsyonal na ito ay may halaga. Ang hanay na ito ay walang sa tunay na maging doon. Ngayon, may drop down na menu. At napansin pa rin ako sa unang hilera doon, kaya ako pinag-uusapan username ngayon. At ito ay lumiliko out na ang isang database, hindi katulad ng isang simple lamang spreadsheet, may malakas na tampok na tinatawag na index. At isang index ay isang paraan ng pagsabi ng database in advance na ako ng mga tao am mas madunong kaysa sa iyo. Alam ko kung anong mga uri ng mga query, piliin o ipasok o tanggalin o i-update, na ang aking code ay pagpunta sa dulo up paggawa na ito sa database. Gusto kong basahin ng maraming data. Gusto kong ipasok ang isang pulutong ng data. Gusto ko na patuloy na tanggalin ang isang pulutong ng mga data. Kung alam ko na ako pagpunta sa maging pag-access ng isang patlang tulad ng Username ng isang pulutong, Maaari ko bang preemptively sabihin ang database, alam ko higit pa sa iyo, at gusto kong mag-utos na dapat sa iyo index patlang na ito. Saan pag-index ng isang patlang o isang haligi ay nangangahulugan na ang database ng maaga dapat humiram ng ilang mga ideya mula sa, tulad ng, apat na linggo at limang at anim mula sa CS50 at ang tunay na bumuo ng up isang bagay tulad ng isang binary paghahanap puno o isang bagay karaniwang tinatawag na isang B puno na iyong nais na malaman sa isang klase tulad ng CS124 sa Harvard, ang isang algorithm class, o anumang bilang ng iba pang mga lugar. Ang database at ang smart mga tao na ipinatupad ito ay malaman kung paano mag-imbak na talaan ng impormasyon sa memory upang ang mga paghahanap at mga iba pang mga operasyon ay napakabilis na. Hindi mo na kailangang gawin ito. Hindi mo na kailangang ipatupad linear paghahanap o binary search o sumanib uri-uriin o seleksyon uri, alinman sa mga iyon. Ang database ay ito para sa iyo kung sabihin mo sa ito preemptively sa index na ito field. At maaari mong makita ang masyadong, may ilang mga iba pang mga katangian maaari naming sabihin ang database upang ipatupad. Ano ang maaaring ibig sabihin kung pinili ko Natatanging na ito mula sa menu, intuitively lamang? Oo? Madla: [hindi marinig] David MALAN: Oo, ang username ay dapat na kakaiba. Ito ba ay isang magandang bagay o isang masamang bagay para sa isang database, para sa isang website na may mga gumagamit? Dapat username ay natatangi? Oo, marahil. Kung iyon ang kung ano ang field na ginagamit namin upang mag-log in, hindi mo talaga gustong mga tao sa pagkakaroon ang parehong pakiramdam o ang parehong username. Kaya, maaari kaming magkaroon ng database ipatupad na kaya na ngayon sa aking PHP code o anumang wika, Hindi ko na kailangang, halimbawa, suriin kinakailangang gumagana ang username umiiral bago ko ipaalam sa ibang rehistro? Ang database ay hindi nagpapahintulot sa dalawang tao na may pangalang David o Malans magrehistro sa kasong ito. At bilang isang bukod, kahit na ito Hinahayaan lamang menu kang pumili ng isa, isang natatanging index ay isang bagay na index para sa sobrang mabilis na pagganap, kundi pati na rin nagpapatupad ito natatangi. At kami ay bumalik sa kung ano ang dalawang iba pang ibig sabihin sa sandali lamang. Samantala, kung pumunta ako sa aking pangalawang hilera, na ay ang pangalan ng user, dapat ko bang tukuyin ang na dapat na natatangi ang pangalan? Hindi, dahil maaari mong tiyak have-- walang dalawang David Malans sa kuwartong ito, malamang. Ngunit kung pinili namin ang ibang pangalan, maaari naming tiyak na magkaroon ng banggaan. Isipin bumalik sa hash talahanayan at ang gusto. Kaya, kami ay tiyak na hindi nais upang gawin ang mga patlang ng pangalan na kakaiba. Kaya, lamang kami ay pagpunta sa iwanan na ang bilang gitling, gitling, gitling, wala. At ako pagpunta sa iwan lahat ng iba pa na nag-iisa. Sa katunayan, karamihan sa mga patlang na ito hindi namin ay may sa pag-aalaga tungkol. At kapag handa na akong i-save ito, kung ang internet ay nakikipagtulungan, I-click ang I-save, at tunay, tunay, tunay dahan-dahan ay ang database nai-save. At ngayon ako pabalik sa ito interface, na tinatanggap na, ay napakalaki sa unang tingin. Ngunit ang lahat ng ako ng pagpunta sa gawin ay i-click ang sa gumagamit ng salita sa kaliwang tuktok. Pupunta ako sa pumunta dito, i-click ang Ang mga gumagamit, at sa pamamagitan ng default, ito ay naisakatuparan ng ilang SQL, ngunit higit pa sa na sa isang sandali. Narito ang isang buod lamang ng kung ano ang ko. At huwag mag-alala na nakikita mo banggitin ng mga Latin at Swedish dito. Iyon ang mga default na lang ang setting, dahil MySQL orihinal, o PHP MyAdmin, isa sa dalawang mga nangyari na nakasulat sa pamamagitan ng ilang Swedish tao. Ngunit ito ay hindi kaugnay sa aming kaso dito. Lahat ng karapatan, kaya kung bakit ito kawili-wili ang lahat? Ito ay lumiliko out, maaari ko bang ipasok data sa isang database sa pamamagitan ng pagsulat code. At ako ay sige, at sa aking file dito, ako pagpunta sa sige at magpanggap tulad ito ay wired sa na database, na kung saan ito ay hindi sa sandaling ito, ngunit ito ay maging kapag kami makakuha sa hanay ng problema pitong. At ako pagpunta sa magpatuloy at magpatakbo ng isang function na tinatawag na query, na kung saan kami ay magbibigay sa iyo sa problema itakda pitong ni distribution code, na tumatagal ng hindi bababa sa isang argument, na kung saan ay lamang ng isang string. Ang isang string ng SQL code. Kaya, ikaw ay tungkol sa upang malaman kung paano isulat nakabalangkas Query Language. Kung gusto ko upang magsingit ng isang bagong hilera sa aking database dahil ang isang tao ay nagsumite isang form sa aking code, Gusto ko ng literal isulat maisingit gumagamit ng mga sumusunod na patlang: username, comma, pangalan, ang mga halaga, at ngayon ang kailangan ko upang ipasok isang bagay tulad ng Malan, at quote, magpanipi 'David Malan.' At ngayon kahit na para sa mga pamilyar sa SQL, bakit ako ay gumagamit ng single quotes sa loob ng mga ito green string? Kung ano ang maaaring maging dito ang dahilan? Pansinin ako co-mingling dalawang wika. Query ay isang function na PHP, ngunit ito ay tumatagal ng isang argumento. At na argument ay upang mismo ay nakasulat sa ibang wika na tinatawag na SQL, nakabalangkas na Query Wika. Kaya, ang lahat ng bagay na ako may lamang naka-highlight dito ay wikang ito na tinatawag na SQL. Kaya, ano ang single quote, tulad ng isang mabilis katinuan suriin? Sige lang. Ang mga ito ay mga string. So, quote, magpanipi Malan at quote, magpanipi David Malan ay mga string. At lamang iniisip intuitively ngayon, pag-alam kung ano ang iyong malaman tungkol sa C at PHP, bakit hindi ko gawin ito, na kung saan ako ay karaniwang ginamit na double quotes para sa mga string? Bakit hindi gusto ko bang gawin iyon? Oo? Madla: [hindi marinig] David MALAN: Eksakto. Dahil gumagamit na ako ng double quotes sa paraan sa labas ng argument sa function na PHP, Gusto ko lang malito ang interpreter. Hindi ito alam, ang mga ito pumunta nang sabay? Huwag ang mga pumunta nang sabay? Huwag ang mga pumunta nang sabay? Kaya, Ako kahaliling halip. O kaya kong gawin ang isang bagay na tulad nito, backslash quote o backslash quote. Lantaran, na lamang ay nagsisimula sa makakuha ng tunay na hindi mabasa at pangit. Ngunit na nais makamit ang parehong resulta pati na rin. Kaya, kung ako ay upang maipatupad ito Query sa ngayon, sabihin makita kung ano ang mangyayari. Pupunta ako sa magpatuloy ngayon at sa halip kaysa execute ang code sa PHP, na kung saan ay kung saan mo i-play sa hanay ng problema pitong, Pupunta ako sa halip na pumunta sa PHP MyAdmin. At mano-mano ako pupunta upang pumunta sa tab na SQL, at hayaan mo akong mag-zoom in sa interface. At ako pagpunta sa i-paste sa mga bagay ko lang type. At ang kulay coding ay nagbago nang kaunti ngayon, lamang dahil ang mga format ng programa mga bagay-bagay ng kaunti naiiba. Ngunit mapansin na ang lahat ng aking nagawa ay sinabi ko na, ipasok sa mga gumagamit. Ko na tinukoy, at pagkatapos, sa isang comma pinaghiwalay parenthesized list ang dalawang mga patlang na nais kong ipasok, at pagkatapos ay literal kong sinasabi na mga halaga sinusundan ng isa pang paren, at pagkatapos ay ang dalawang mga halaga Gusto kong mag-plug-in, at ngayon para sa mabuting pamamaraan, Kailangan ko bang ilagay ang isang semicolon sa dulo. Kaya, hindi ito ang C. Ito ay hindi PHP. Ito na ngayon ang SQL, at ako ng idikit ito sa ito web based interface na lamang ang pagpunta upang ipaalam sa akin, sa lalong madaling ko i-click Go, execute sa query na ito sa database tumatakbo sa loob ng CS50 IDE. Kaya ito ay mabuti. Pansinin na sinabi ng isang hilera nakapasok, nagpunta sobrang mabilis, 0.0054 segundo upang ipasok ang data na iyon. Kaya, na ang tunog medyo malusog. Ito reformat ang aking query para sa akin dito upang makita ang mga ito lamang sa uri ng kulay code na bersyon. Ngunit ngayon kung nag-click ako Mag-browse, mapapansin na, kahit kahit na may isang pulutong ng mga kalat ng mga basura sa screen, ang aking mga talahanayan ay mayroon na ngayong dalawang mga hanay. Kaya, hayaan mo akong magpatuloy at gawin ang isa pang. Sa halip na ito, ipaalam sa akin pumunta sa tab na SQL muli. At oras na ito kukunin ko na ipasok ang isang bagay tulad Rob at ang kanyang pangalan ay Rob Bowden. Bowden. Ni i-click ang I-save Hayaan. Oops, sa halip Go. I-click muli-browse, at paunawa ngayon ay mayroon akong dalawang mga hanay. Kaya, ito ay lamang ng isang paraan ng mas kumplikadong paraan ng pagbubukas up ang Google Spreadsheets at pag-type lamang ng isang hilera sa isang haligi. Ngunit kung ano ang key ay na na namin ngayon ang syntax na kung saan upang isulat ang code sa gayon ay sa huli, maaaring namin talagang gawin ang ilang at ito. Alalahanin na suporta PHP sobrang pangkalahatang variable. Ano ang nasa loob ng dollar mag-sign underscore GET sa PHP? Namin kinuha ng isang pagtingin sa isa o dalawang simpleng halimbawa. At sa PSet6, pagpapabalik ikaw kumusta dot PHP na kung saan ito ay gumagamit ng variable. Ano ang napupunta sa doon? O ano ito? Ang isang maliit na louder. Madla: [hindi marinig] David MALAN: Ito ay isang snow binhi ng array, na kung saan ay lamang ng isang magarbong paraan ng sinasabi ng array na may pangunahing mga pares ng halaga. At ang mga susi ay hindi numeric. Ang mga ito ay mga salita o mga string. At partikular, kung ano ay ang mga pangunahing mga pares ng halaga? Saan sila nanggaling? Paumanhin? Madla: [hindi marinig] David MALAN: Hindi? Saan ang mga key pares ng halaga mula sa darating? Sabihin muli? Muli? Ako ang isa lamang sa pagdinig ng isang bagay? [Tawa] Iyan ay karapatan, yes? Madla: [hindi marinig] David MALAN: Oo, ang mga ito nanggaling mula sa query string. Kaya, kung rewind sa iyo sa oras na kapag kami nag-play sa Google at kami ay wala na slash Google.com search question mark q katumbas pusa, kung ako ay upang pindutin ang Enter at kung Google ay ipinatupad sa PHP, PHP code na isinulat Google ay may access sa dollar sign salungguhit GET loob ng kung saan ay isang key na tinatawag na Q at isang halaga tinatawag cats na maaaring pagkatapos itong gamitin na ginamit upang gawin ang isang aktwal na paghahanap sa. Kaya, sa katunayan, kung ano ako ng pagpunta sa gawin ngayon ay bumalik sa aking code sa PHP na makikita mo ulit makita pa sa PSet7. At sa halip na i-plug sa hard-code na mga halaga na ay hindi mukhang tulad ng isang very dynamic website, Pupunta ako upang bigyan ka ng isang teaser ng ano ang gagawin sa iyong aktwal na code. Gusto mong ilagay sa dalawang marks tulad ng tanong na ito. Hindi ko alam kung ano ang username. Hindi ko alam kung ano ang pangalan ay magiging, ngunit ko alam kaya ko makuha ang mga ito dynamic. Kaya, kung ang code sumusulat kami ngayon ay ang code na tumatakbo sa mga server ng Google, o kung ito kumusta ang dot PHP, na kung saan ay dumating na may PSet6, Pupunta ako sa pumasa sa ang function query tulad ng printf, dalawang iba pang mga argumento. GET, quote, magpanipi username, at GET, quote, magpanipi name. At ngayon, pansinin kung ano ang mga pangkalahatang istraktura ay dito. Mayroon akong sa kaliwa bahagi ng kamay ang tawag, mga function na ito na tinatawag na query sa PHP. Mayroon pa akong mga bilang unang argument, isang string lang ng text. Ngunit na string ng teksto ay nakasulat sa isang wika na tinatawag na SQL. At lantaran, ito ay hindi isang malaking wika. Kami ay pagpunta lamang upang makipag-usap tungkol ito pormal na ngayon, tunay. At pagkatapos ay sa hanay ng problema pitong, may relatibong ilang mga tampok na hindi namin pagpunta sa pagkilos. Ang mga tandang pananong, bagaman, ang ibig sabihin ng plug in ang halaga dito at plug sa ibang halaga dito. At pansinin, na tinanggal ko kung ano ang mula sa buong quote-- sumpain it-- buong quotation minamarkahan ang oras na ito. Tinanggal ko na ang quotation marka sa paligid ng tandang pananong, Paumanhin, oras na ito sa paligid. Kaya, kung ano ang magaling tungkol sa mga ito tanong tampok mark na PHP ay may gawi na suportahan, Ruby at Sawa at iba pang mga wika, ito ay nangangahulugan lamang plug sa ilang Pinahahalagahan dito at alam mo kung ano? Sa kang malaman kung gamitin single quotes o double quotes. Huwag mag-abala sa akin ng mga intellectually hindi kawili-wili sa mga detalye. Subalit, siguraduhin na ito ay tama upang ang aking code sa huli ay pagpapatakbo at ligtas, na kung saan ay magkakaroon ng kahulugan bago ang haba. Ngayon, ilan arguments kabuuang, para lamang maging malinaw, ay ang function pagkuha query? Sinuman nais na bumoto para sa higit sa dalawa? Three? Oo naman, bakit? Bakit tatlo? Madla: [hindi marinig] David MALAN: Eksakto. Ang unang bahagi ay ang string. Ang pangalawang argumento ay dollar sign salungguhit GET username bracket. At ang ikatlong argument ay ang parehong bagay, ngunit lamang ang pangalan. Kaya sa ibang salita, ngayon kung ako ay isang web form na nagkaroon na patlang ng teksto, isa para sa username ng gumagamit, isa para sa kanyang pangalan, makatarungan tulad ng gusto mong makita sa isang website kapag ikaw ay magparehistro para sa ilang website, ito lakas maging ang code sa likod dulo na talagang gumagana ang insertion ngayon papunta sa database. Ngayon sa pamamagitan ng kaibahan, sabihin fast forward. Ipagpalagay na ang isang user ay ngayon pag-log in at nais mong na isulat ang code sa PHP na tseke kung ang tao na lang ang naka-log in ay talagang isang user, maaari mong gamitin medyo simple syntax. Maaari mong sabihin SELECT, sabihin natin lagyan ng star, kung saan star lahat-lahat. Hindi ko alam kung ano ang aking gusto, para lang bigyan ako ang lahat ng mga hanay mula sa talahanayan tinatawag na mga user kung saan, at ito ay napakabuti. Pumili ng sinusuportahan kung ano ang tinatawag na isang tambalan, na kung saan ay tulad ng isang paraan ng pag-qualify kung ano ang iyong gusto. Saan katumbas username quote, magpanipi Malan. Kaya dito rin, na naka-embed ko sa loob ng mga argument sa isang function na PHP, isang linya ng SQL code. At na SQL code na ito oras ay literal pagpunta upang maghanap para sa quote, magpanipi Malan. Ngayon na ang hindi lahat na kapaki-pakinabang, kaya ako pagpunta upang laktawan na at ako pagpunta upang ilagay ang layo ang tip na ito mula sa Brady, at pumunta at mga plug-in sa halip isang tandang pananong dito. Kaya, upang maging malinaw, kung ano dapat ang aking pangalawang argumento na kung ang isang tao ay naka-log lamang sa at ako nais na suriin kung siya ay talagang ang isang user? Madla: [hindi marinig] David MALAN: Oo. Ako marinig sign underscore dollar GET quote, magpanipi username. At iyon ay dapat na bumalik sa akin alinman sa mga hilera sa aking mga database na magkaroon ng isang username ng Malan. Ngayon sana, ako pagpunta upang makakuha ng bumalik zero kung Malan ni hindi pa dito, o isa kung siya ay may. Hindi ko dapat makabalik dalawa o tatlo o apat. Bakit? Madla: [hindi marinig] David MALAN: Aking sinabi natatangi, di ba? Simple dahilan. Dahil sinabi ko ito ay nakuha na maging natatangi, lohikal lamang, maaari ka lamang magkaroon ng zero o isa Malans sa mga partikular na database table. Ngayon bilang isang tabi, kaya lang na iyong nakita ito, kahit na panatilihing ako gamit GET at kahit na PSet6 ginagamit lamang GET, maaari mong tiyak na magkaroon ng POST. At isipin na Post ay isa pang pamamaraan para sa pagsusumite ng impormasyon mula sa isang form, ngunit ito ay hindi magpapakita sa URL. Ito ay isang maliit na mas ligtas na tiyak para sa mga bagay tulad ng mga username at password, saan PSet7 ay, sa katunayan, may kasangkot. Kaya, sabihin gawin ito sa PHP ipaalam MyAdmin at makita kung ano ang mangyayari. Pupunta ako sa pumunta sa tab MySQL. At mapansin na ang default na halaga para sa PHP MyAdmin, lamang na subukan upang maging kapaki-pakinabang, ay upang piliin ang mga bituin mula sa mga gumagamit na kung saan ang isa. Well, ang isa ay laging totoo, kaya ito ay ang mga uto-epektibong ng piliin lamang ang lahat. Ngunit ako pagpunta sa maging isang maliit na higit pedantic at mano-manong i-type ang SELECT star FROM gumagamit. Ngayon technically, maaari mong quote ang pangalan ng talahanayan. Ito ay bihira na mayroon ka na, ngunit napansin ang mga ito ay hindi iyong normal na mga quote sa US keyboard. Ito ay ang tinatawag na backtick, na ay karaniwang sa itaas na kaliwang kamay sulok ng iyong keyboard. Ngunit ito ay bihira na makikita mo ang tunay na kailangan sa pag-abala sa mga iyon, kaya kukunin ko na lang ligtaan pa din. Kaya ngayon, hayaan mo akong magpatuloy at pindutin ang pumunta. At kung gaano karaming mga hilera ang dapat kong makuha bumalik kapag ako ay piliin star mula sa mga gumagamit? Madla: [hindi marinig] David MALAN: Ang bilang ng mga hilera, sigurado. Ngunit kung gaano karaming sa kongkreto kuwento ngayon? Two, dahil nagkaroon sa akin at nagkaroon ng Rob. Kaya, kung nag-click ako Go, nakikita ko ang biswal na Nakuha ko na sa likod, sa katunayan, dalawang mga hanay. May isang pulutong ng mga kalat ng mga basura sa mga screen, ngunit lamang nakikita ko ang dalawang mga hilera. Sa pamamagitan ng kaibahan, kung gagawin ko ito muli at gawin SELECT star FROM mga gumagamit, na kung saan ang username ay katumbas ng quote, magpanipi Malan, ngayon kung ako mag-click Go, Lamang ako ng pagpunta upang makabalik sa isang hilera. At sa wakas, kung gagawin ko bagay na tulad nito, ipagpalagay na hindi ko pag-aalaga tungkol sa pagkuha ng lahat ng bagay, na kung saan ay uri ng walang kahulugan ngayon, dahil mayroong lamang ng dalawang mga hanay. Ito ay hindi tulad ako ng pagpili isang malaking halaga ng data. Ipagpalagay ko sige at huwag PUMILI pangalan MULA gumagamit, kung saan username katumbas Malan, kung ano ang magaling tungkol sa SQL totoo lang, ay na ito ay talagang lamang ano sabihin mo ito gagawin. Ito ay medyo maikli at malinaw, ngunit ikaw ay literal sabihin lamang nito kung ano ang gusto mong gawin. Piliin ang pangalan mula sa mga gumagamit na kung saan ang ang username katumbas Malan. At ito ay tunay na malinaw. Kaya, ngayon kung ako pindutin Go, kung gaano karaming hilera ako pagpunta upang makabalik? One, dahil ito lang ang Malan, sana. O zero kung siya ay hindi doon, ngunit isa maximally. At kung gaano karaming mga haligi ang makukuha ko? Gaano karaming mga haligi? Oras na ito, ako lamang ang pagpunta upang makakuha ng isa dahil ako ay hindi piliin star, na kung saan ay ang lahat. Ngayon ako ng pagpili ng pangalan lamang, kaya ko lamang makabalik isang hanay at isang hilera. At mukhang uri ng naaangkop walang katotohanan, just looking super maliit na tulad nito. Kaya, kung ano talaga ang nangyayari? Kapag execute ka ng isang SQL query gamit piliin, kung ano ang nakukuha pabalik mula sa database ay tulad ng isang pansamantalang table sa mga hanay at haligi, siguro, ngunit na ligtaan anumang bagay na ay hindi tunay na pinili mo. Kaya, ito ay tulad ng kapag ang isang tao ay nagkaroon ng isang malaking spreadsheet ng lahat ng mga mag-aaral nakarehistro para sa ilang grupo ng estudyante, at sabihin mo, bigyan ako ang lahat ng mga freshman na na nakarehistro para sa aming mga grupo ng estudyante, kung ano ang ang iyong mga kasamahan sa maaaring gawin sa grupo ng estudyante ay hindi na nila lamang ng kamay mo ang buong spreadsheet. Iyan ay tulad ng sinasabi piliin star. At ito ay isang maliit na nakakainis kung Nais mo lamang ang mga freshman. At kaya, kung ikaw sa halip ay nagsabi, piliin ang star mula sa database ng mesa na kung saan ang taong katumbas quote, magpanipi freshman, ito ay parang iyong kaibigan sa mag-aaral ng grupo literal na naka-highlight at kinopya lamang ang mga hilera freshman, ilagay ang mga ito sa isang bagong Google Spreadsheet o isang Excel file, at kamay mo sa likod ng nagreresulta file lamang. Iyan na ang lahat na nangyayari on conceptually dito. Kaya sa katapusan, maaari naming gawin ilang medyo fancy bagay sa pamamagitan ng pag-iimbak ng mga bagay tulad ng mga username at mga password at mga katulad. Ngunit, ito ay lumiliko out, na dapat nating gawin isang maliit na naiiba kaysa ito. Ito ay hindi na smart upang lamang tindahan ng isang username at password. May isang tao na mas maaga, sa palagay ko down dito, iminungkahi ng isang ID. Ngayon ng isang ID ay maaaring tulad ng isang Harvard ID o Net ID Yale, ngunit ito ay maaaring maging kahit na mas simple sa aming kaso database. At sa katunayan, ang mga karaniwang kaso ay ang magkaroon ng isa pang hanay. At ako pagpunta upang pumunta magpatuloy at i-edit ang aking table. At kung i-play mo sa paligid na may interface na ito para sa PSet7, makikita mo na maaari mong suriin ang ang pindutang ito dito at magdagdag isang patlang sa simula ng table. At ngayon, kung nag-click ako Go, ito ay pagpunta upang bigyan ako ng isa sa mga form mula sa mas maaga. Pupunta ako upang magdagdag ng isang patlang na tinatawag na ID. At ako pagpunta sa gawin ito ng isang numero na uri. Mayroon akong isang buong grupo ng mga halaga para sa numerics. Lamang ako ng pagpunta sa pumili ng isang int at mag-alala tungkol sa mga disparate sukat. Hindi ko na kailangang tukuyin ang isang haba o ng isang halaga, dahil ito ay magiging 32 piraso kahit na ano. Katangian, hindi namin nakita bago. Anumang interes sa alinman sa mga ito mga pagpipilian sa menu ng oras na ito? Para sa isang int? Ano ang ginawa ninyong imungkahi? Hindi? Gawin ang anuman sa mga ito gumawa ng kahulugan? Oo. Oo, unsigned, di ba? Sa pangkalahatan, kung kami ay pagpunta sa magbibigay lahat ng tao ng isang natatanging numero, na kung saan ay kung saan ang kwentong ito ay tuloy, ko talagang gusto lamang isang tao na magkaroon ng bilang tulad ng zero at isa at dalawa at tatlo at apat. Hindi ko na kailangan upang harapin ang may negatibong numero. Ito lamang tila tulad ng labis-labis na kumplikado. Gusto ko ng apat na bilyong mga posibleng halaga, Hindi apat na bilyong mga posibleng halaga, kaya lang nadoble ko ang kapasidad ng aking INT. Bilang isang tabi, kung gusto mong may kaugnayan ito sa isang bagay tulad ng Facebook, bumalik sa mga uri ng mga araw ng aking pagka Facebook unang dumating out, Naniniwala ako kung ano sila ay gamit sa kanilang MySQL database upang mag-imbak ng isang user identifier, ay lamang ng isang int. Ngunit siyempre, mayroong isang pulutong ng mga tunay na tao sa mundo. May isang pulutong ng mga pekeng Facebook mga account sa buong mundo. At kaya sa huli, umapaw Facebook ang laki ng isang int, isang apat na bilyong value. Kaya naman, kung titingnan mo paligid at may mga website na maaaring sabihin sa iyo kung ano ang ang iyong mga natatanging ID ay. At kung hindi mo na pumili ng isang username sa Facebook, makikita mo ang iyong mga natatanging ID. Sa tingin ko ito ang profile dot PHP ay katumbas ng tandang pananong ID ng isang bagay. Na ngayon ang isang bagay tulad ng isang malaking INT, o isang matagal na matagal na kung ikaw ay, kung saan ay isang 64-bit na halaga o isang bagay na maihahambing. Kaya, kahit na sa tunay na mundo ang mga mga isyu sa huli minsan mahalaga. At ito ay lumiliko out dito, kung hindi ako pagbibigay ng lahat ng aking mga gumagamit ng isang natatanging ID, Gusto kong maging tahasang super at minimally gumawa patlang na ito natatanging. Ngunit ito ay lumiliko out may isa piraso ng katawagan ngayon masyadong na ang isang pangunahing key. Kung ikaw ay pagdisenyo ng isang database table at alam mo nang maaga na isa sa mga haligi sa talahanayan na at dapat ay natatanging kilalanin hilera sa talahanayan, na nais mong tukuyin ito at sabihin sa mga database, ito ang aking pangunahing key. Maaaring may mga duplicate sa iba pang mga patlang, ngunit ako na nagsasabi sa mga database na ito ay ang aking primary, ang aking pinaka-mahalagang field, na garantisadong upang maging kakaiba. Ngayon, ito ay tila kalabisan. Ako ngayon minumungkahi na tayo magdagdag ng, sa pamamagitan ng pag-click ang I-save dito, isang patlang called-- at pupuntahan ko sige at i-click ang AI, kami ay bumalik sa na sa isang sandali, Save. Ako ipanukala ngayon na Tumingin aking mesa tulad nito. Mayroon akong isang field INT tinatawag ID, isang patlang char tinatawag Username, isang patlang VARCHAR tinatawag Name, ngunit ID, kung ito ay pangunahing at samakatuwid natatangi, bakit nag-aaksaya ko lang time na nagpapakilala kung ano mabisa ay isang pangalawang natatanging patlang na tinatawag na ID na ang isang int? Username, pagpapabalik, ay na natatangi, sinabi namin. Kaya lohikal lamang, hindi mo na kailangan anumang karanasan database na dahilan sa pamamagitan na ito, kung bakit Maaari ba akong magkaroon ipinakilala isang int bilang aking natatanging identifier pati na rin? Ano kaya ang this-- sabihin muli? Madla: [hindi marinig] David MALAN: Random access ay mas madali, bakit? Madla: [hindi marinig] David MALAN: Oo, ito ay pag-access lamang ng mga numero. Kaya, kung sa tingin mo ng mga ito ay tunay na ay isang table, tulad ng isang array, ngayon ay mayroon akong mga natatanging tagatukoy na maaari kong tumalon sa paligid. At mas mahusay kaysa sa na ay pa rin na gaano kalaki ang isang int pagpunta sa maging muli? 32 bits o apat na bytes. Gaano kalaki pagpunta ay ang aking username upang maging? Maximally? 16 bytes. Kaya, kung kayo ay tunay na pag-aalaga tungkol ang pagganap ng iyong code, sa tingin bumalik sa PSet5, ang gusto ninyo maghanap para sa isang halaga na apat byte o isang 16 byte halaga, di ba? Talagang ito ay isang pagpapasok na. Kailangan mong gawin ang apat na beses ng mas maraming trabaho upang maghanap para sa mga username dahil sa mga mga 16 bytes. Kaya, kailangan mong literal ihambing ang lahat ng 16 bytes upang maging bang oo, ito ay username na gusto ko. Sapagkat para sa isang int, maaari mong gawin ito sa bytes apat lang. At bilang isang bukod para sa mga interesado sa computer hardware, ito ay lumiliko out na maaari mong magkasya sa isang bagay tulad isang int o isang 32-bit na halaga sa isang bagay tinatawag na isang magrehistro sa isang computer CPU, na nangangahulugan na ito ay sobrang, sobrang mabilis, kahit na sa pinakamababang antas ng hardware ng computer. So, may lamang mga pakinabang sa buong paligid. Kaya, ano ang ibig sabihin nito? Sa katunayan, kapag ikaw ay pagdisenyo ng isang database table, halos lahat ng oras ikaw ay pagpunta sa may hindi lamang ang data na mahalaga sa iyo, kundi pati na rin ang isang bagay tulad isang natatanging identifier dahil ito ay pagpunta sa ipaalam sa amin gawin ang iba pang mga bagay. At ni trip sa ibabaw ng isa problema dito. Ipagpalagay na ang mga gumagamit ay may hindi mga username at mga pangalan lamang, ngunit mayroon din silang mga bagay-bagay tulad ng mga lungsod at mga estado at zip code, hindi bababa sa dito sa US. Kaya, ako pagpunta sa sige at mabilis lang sabihin, bigyan mo ako ng tatlong higit pang mga haligi sa dulo ng table. At ito ay magiging City, ito ay magiging Estado, at ito ay magiging Zip. Ngayon uri City, kung ano ang data dapat na ito, marahil? VARCHAR? Hindi ko alam kung ano ang pinakamahabang School pangalan ay. Sa isang lugar sa America, may marahil ilang ridiculously mahabang salita, kaya pumunta lamang kay 255 ipaalam, medyo kasaysayan o nagkataon. Estado, ano ang gusto mong gawin? Parusa call, di ba? Ano ang marahil ang pinaka-mahusay? Gaano karaming mga character? Siguro ay dalawa lamang, kung kaya namin lumayo sa paggawa lamang, tulad ng, MA para sa Massachusetts at iba pa. Kaya, ako pagpunta sa pumunta sa isang pansamantalang trabaho na halaga ng dalawang. Zip code ay isang nakawiwiling isa. Nandito kami sa 02138, upang Iminumungkahi namin ay dapat gamitin kung ano? Ito ay isang int, i-right? Int, int, maikling? Maikling gumagana. Hindi? Pansamantalang trabaho o limang, ngunit ko gusto ng isang int. Bakit uurong sa isang int? Akitin mo ako sa mga ito. Ano ang tangang tungkol sa isang int, ang aking mga ideya? Oo. Madla: Dumaan up ng mas maraming memory. David MALAN: Dumaan up ng mas maraming memory. Apat bytes, ngunit ikaw ay pagpapanukala ng isang zip code bilang ng limang bytes o ang isang tao ay bilang isang pansamantalang trabaho, na nararamdaman ko eh, iyan ay hindi tunay ang kaso. Well, masaya na kuwento. Taon na ang nakaraan, kapag ginamit ko upang gamitin Microsoft Outlook para sa aking mga email, Huli ko nais upang lumipat sa Gmail. At ito, nai-export ang lahat ng aking mga contact mula sa Outlook bilang isang CSV file. Comma separated values, na lang ako sinadya nagkaroon ng lahat ng aking mga pangalan ng mga kaibigan at mga huling mga pangalan at numero ng telepono at zip code at ang lahat ng iyon. At pagkatapos ay ako na ginawa ang pagkakamali ng pagbubukas ito sa Excel, na isang spreadsheet program na nauunawaan CSV file bilang nasaksihan namin. Ngunit pagkatapos, ako ay dapat na magkaroon ng hit, tulad ng, Command o Control S sa isang punto. At Excel tila sa oras ay nagkaroon ng isang tampok na kung saan anumang oras na ito Nakita ng isang numero, sinubukan ito upang maging kapaki-pakinabang. At kung number na nagsimula sa zero, ito ay lamang mapupuksa ang mga ito. Bakit kailangan mo ng nangungunang zero sa integer? Ang mga ito ay walang kahulugan, mathematically. Hindi ito mga walang kahulugan sa US Postal system. Kaya, ako ay para sa taon, sa araw na ito, ako pa rin may mga kaibigan na kapag ang bihirang kaso na kailangan ko ng isang tao tugunan ang mga araw, Kukunin ko pa rin makita na ako magkaroon ng isang kaibigan sa Cambridge, Massachusetts, 2138. At ito ay nakakainis na kung ikaw ay sinusubukan na ayusin ng programming bumuo envelopes o lista lang ito pababa. At iyon ay dahil sa mga kadahilanang ito, Pinili ko ang maling uri ng data. Kaya, ang pag-ibig ko ang iyong mga ideya. Gamitin natin ang isang patlang char Hayaan. Limang letra, maliban mayroong isang sulok kaso. Kung ikaw pa rin magpadala ng mail, minsan zip code ng mga araw na ito, na ang mga ito, tulad ng, kasama ang apat. Kaya, kailangan namin ng isang gitling at pagkatapos ay kailangan namin ng apat na higit pang mga numero. Kaya upang maging matapat, ito ay maaaring pumunta maraming iba't ibang paraan. Para sa ngayon, ako pagpunta sa panatilihin ito lamang ay simple at ako pagpunta sa sabihin na ito ay isang limang char halaga at hindi namin pagpunta upang laktawan ang buong dash plus apat. Ngunit ito ay ang mga uri ng mga tradeoffs. At maaari mong isipin ang parehong mga problema na sanhi na may mga numero ng telepono o iba pang mga patlang. At ngayon, ito ay tunay na isang mangmang kalsada upang pumunta down. Ipagpalagay parehong Rob at ako at Hannah at Maria at [? Davon?] At Andy at ang iba sa mga tauhan ng lahat ng nakatira sa Cambridge, Massachusetts, 02138. Ito ang tunay na pakiramdam tangang na ako pagdaragdag sa aking mga gumagamit ng talahanayan, lungsod, estado, at zip. Bakit? Madla: [hindi marinig] David MALAN: Sabihing muli? Madla: [hindi marinig] David MALAN: Sila ay palaging pagpunta sa pumunta magkasama, di ba? Kapag ito ay lumiliko out, ginamit namin sa tingin ito ay ang kaso hanggang sa kami exhaustively naghanap ang buong US, at lumiliko out na mayroong ang ilang mga hindi pagkakapare-pareho kung saan magkaroon ng maramihang mga bayan parehong zip, na kung saan ay kakaiba. Subalit, kung kami itakda para sa ngayon na ang 02138 ay palaging Cambridge, Massachusetts, bakit sa mundo ay iniimbak mo sa iyong database Cambridge at MA at 02138 para sa akin at para sa Hannah at para sa looban at para [? Davon?] At para sa iba na nakatira dito sa Cambridge, ito ay ganap na ganap na maulit. Dapat nating lumayo sa pamamagitan lamang ng pag-iimbak ng kung ano? Basta ang zip code. Ngunit pagkatapos, kung store lang namin ang zip code, ko nais, marahil, para sa aking website upang malaman kung saan 02138 ay. Kaya, kailangan ko ng isa pang table. At iyon ang OK. At sa katunayan, ito ay isa sa mga disenyo ng mga proseso ng pagdisenyo ng mga talahanayan na kailangan mong gawin sa PSet7 pati kung saan Gusto mong i-factor out karaniwang data. Tulad na lamang ng nai factoring out namin karaniwang code at factoring out karaniwang estilo mula sa CSS, dito masyadong sa database, kung kailangan ko lamang 02138 na natatanging makilala hometown ng isang tao, hindi nag-iimbak Cambridge, Mass para sa bawat darn user sa iyong talahanayan. Sa halip, magkaroon ng isang hiwalay na talahanayan na tinatawag na Zips na dapat magkaroon ng kung ano ang mga haligi? Marahil ng isang patlang ng ID, dahil lamang, para sa ang mga prinsipyo namin pinag-uusapan tungkol sa ngayon. Malamang na isang zip na larangan para sa 02138. At pagkatapos ay marahil kung ano ang iba pang mga hanay? City at ng estado, ngunit may isa lamang hilera para sa 02138, isang hilera para sa 02139, isang hilera para sa 90210. At iyon ay literal lahat ng mga zip code ng alam ko. Kaya ngayon, kung ano ang maaari mong gawin? Ito ay may problema, dahil ngayon Mayroon akong dalawang mga talahanayan. Kaya, ang aking mga user ay halos sa paglipas dito, ngunit ang impormasyon lungsod estado ng kanilang ay dito. Kaya, ito ay lumiliko out sa SQL, may talagang isang paraan upang sumali sa impormasyon, at makikita mo ito sa pset. Ngunit ito ay lumiliko out maaari mong gawin ang isang bagay tulad nito. SELECT star FROM gumagamit, SUMALI zips ON gumagamit dot zip katumbas zips dot zip. Aling ay isang maliit na labis sa mga salita, tinatanggap na, ngunit ito lamang nangangahulugan piliin ang lahat mula sa proseso ng pagkuha ng aking mga gumagamit ng talahanayan at ang aking mga talahanayan zips. Sumali sa mga ito sa isang field na mayroon sila sa column. Kaya, literal paggawa ng isang bagay tulad nito, at bigyan ako pabalik ng isang bagong pansamantalang talahanayan iyon ang mas malawak, na ang mas malaki, na mayroon ng lahat ng mga hanay mula sa pareho ng mga ito. At iyon, medyo simple, ang magiging syntax para sa paggawa ng isang bagay na katulad nito. Kaya, mayroong ito nang mas maaga, ngunit may pagpunta maging iba pang mga disenyo ng mga desisyon bibigyan ka may sa gumawa, hindi lamang sa mga ini-index kundi pati na rin ang tumatakbo sa mga hamon. Sa katunayan, may isang hamon sa anumang disenyo database kung saan minsan maaaring gusto ng dalawang tao upang ma-access ang parehong mga hanay ng database table. Kaya, ito ay isang bagay na bibigyan namin ng magkasalubong sa PSet7 rin. Ngunit naisip ko na gusto kong tumingin sa isa pag-atake na posible sa SQL. Ano ang ilan sa mga mga problema na maaaring lumabas dahil? Kaya, ikaw ay magkasalubong ito sa PSet7. At sinabi namin sa inyo nang labag sa batas kung ano ang coding na solusyon para sa problema na ito ay. Ngunit kung ikaw ay kumuha ng isang mas mataas na antas ng klase, lalo na sa mga operating system, ikaw ay pagpunta sa magkasalubong isang isyu ng atomicity, ang problema ng sinusubukan mong gawin maramihang mga bagay nang sabay-sabay nang walang sagabal. At naisip ko na gusto kong ipakilala ito ideya para PSet7 sa isang talinghaga na natutunan ko sa aking sarili sa Margo CS164 operating systems Seltzer ni klase ng mga taon na nakalipas. Ipagpalagay na mayroon kang isa sa mga dorm fridges sa iyong dorm room o bahay, at ikaw ay isang tunay na malaking para sa gatas. At ito, ikaw ay dumating mula sa mga klase isang araw, buksan mo ang refrigerator. Oh, mapapahamak ang mga ito. Walang gatas sa refrigerator. Kaya, ikaw ay isara ang refrigerator, i-lock ang pinto, lock ang iyong dorm, paglalakad sa paligid ng sulok sa CVS, kumuha sa linya, at simulan ang check out para sa ilang mga gatas. At ito ay pagpunta sa tumagal ng ilang panahon, dahil ang mga sumpain sarili checkout counter tumagal magpakailanman upang gamitin pa rin. Kaya naman pagdating sa bahay ng iyong mga kasama sa kuwarto. Siya o talagang may gusto siya gatas rin. Sila dumating sa dorm room, buksan ang refrigerator, oh, darn ito. Walang mas maraming gatas. Kaya, siya rin ay napupunta sa paligid ng sulok. Ngunit ngayon, dahil doon ay tulad ng dalawang o tatlo o apat CVSes malapit, nangyayari ang mga ito upang pumunta sa isa sa mga iba't-ibang mga sa square. At kaya ngayon, ng ilang minuto mamaya, pareho ng sa iyo umuwi at ugh, pinakamasama problema man. Ngayon ay mayroon ka ng masyadong maraming gatas dahil ito ay pagpunta upang pumunta maasim. At gusto mo ng gatas, ngunit ikaw hindi mo talaga gusto gatas. Kaya ngayon, ito ay isang mamahaling pagkakamali dahil pareho ng sa iyo ginawa ng isang desisyon batay sa estado ng ilang mga variable na ay nasa proseso ng ay binago sa pamamagitan ng sa iyo, ang initiator ng pagpunta upang makakuha ng gatas. Kaya, ano ay marahil isang tao solusyon sa problemang ito? Madla: [hindi marinig] David MALAN: Mag-iwan ng tala, tama? Palaging mag-iwan ng isang tala, kung ikaw ay pamilyar na ipakita. Oo, may mga dalawa sa amin. Kaya, palaging mag-iwan ng isang tala, o literal i-lock ang refrigerator na may ilang mga uri ng padlock o isang bagay sa ibabaw ng tuktok na tulad ng. Ngunit na ang aktwal na pagpunta sa maging key problema sa database ng disenyo, lalo na kapag maaari kang magkaroon ng maraming mga browser, ang maramihang mga laptop, maramihang mga gumagamit sa lahat ng sinusubukan mong i-update ang impormasyon sa isang beses. Lalo na ang sensitibong impormasyon tulad pinansyal na impormasyon, kung saan may stock na kalakalan website tulad ng makikita mo na gusali, ano kung nais mong suriin kung gaano karaming pera mayroon ka at pagkatapos ay kung ikaw ay may sapat na, bumili ng ilang mga stock? Ngunit paano kung may ibang tao na may isang pinagsamang account sa iyo ay sabay-sabay na sinusubukan bumili ng ilang mga stock? Kaya, siya ay pagsuri sa balanse sa account, pareho ng sa iyo makabalik sa parehong Ang sagot, walang gatas. O pareho kayong bumalik ang sagot, Mayroon ka ng $ 100 sa account. Pareho kayong subukan upang gawin ang mga desisyon upang bumili ng isa share ng ilang mga stock kumpanya. At ngayon, ano ang mangyayari? Mayroon kang dalawang mga namamahagi? Ikaw ay walang mga namamahagi? Problema mo na maaaring lumabas. Kaya, makikita nakatagpo namin iyon. SQL iniksyon atake, thankfully, ay isang bagay na kami ay makakatulong sa iyo ng, ngunit ang mga ito ay atrociously karaniwang mga araw pa rin. Kaya, ito ay isang halimbawa lamang. Gumawa ako nang walang pag-angkin na Harvard PIN sistema ay mahina laban sa mga ito partikular na pag-atake. Sinubukan naming. Subalit, alam mo na kami magkaroon ng isang patlang tulad nito. At Net ID Yale ay may isang katulad na naghahanap screen na mga araw. At ito ay lumiliko out, na siguro ang PIN sistema ay ipinatupad sa PHP. At kung were-- ito ito ay not-- sila ay maaaring magkaroon ng code na mukhang ganito. Sila ay may dalawang variable. Bigyan mo ako ng username at password mula sa mga post sobrang global variable na usapan natin ang tungkol sa mas maaga. Siguro Harvard ay may isang query tulad SELECT star FROM gumagamit kung saan username katumbas na at katumbas password na iyon. At pansinin na lang ako i-plug ang mga ito sa paggamit ng ang kulot suhay pagtatanda mula sa iba pang mga araw, na kung saan ay nangangahulugan lamang plug sa ang halaga dito. Hindi ko gamit ang tandang pananong pamamaraan. Hindi ko ay may anumang pangalawang o pangatlong argumento. Ako ay literal lamang paggawa sa mga string ng aking sarili. Ang problema, bagaman, ay na kung ang isang tao ay tulad ng isang scroob, kung saan ay isang reference sa isang film, nagla-log in sa isang bagay na tulad nito, at inalis ko na ang mga tuldok na karaniwang cover up mga password, kung ano kung siya ay lalo na malisyosong at ang kanyang mga password na siguro ay 12345, bawat ang pelikula na tinatawag na "Spaceballs," ngunit siya uri critically isang single quote pagkatapos ng limang, pagkatapos ay literal ang mga salita o sa puwang, at pagkatapos quote, magpanipi isa ay katumbas ng quote ng isa, ngunit mapansin siya ay tinanggal na ano? Siya ay tinanggal na ang quote sa kanan at siya ay tinanggal na ang quote sa kaliwa. Dahil kung attacker na ito aakala scroob ni ay na ang mga tao na sinulat ang code na ito PHP ay hindi kaya maliwanag, baka mayroon lamang silang ilang mga single quotes sa paligid ng agaw ng isang variable sa curly braces? At kaya siguro, maaaring siya uri ng makumpleto ang kanilang pag-iisip para sa kanila, ngunit sa isang paraan na ang nangyayari upang ipaalam sa kanya hacked sa PIN system. Sa ibang salita, ipagpalagay na ito ay ang code at kami plug ngayon sa kung ano scroob type. At ito ay pula, dahil ito ay masama. At ang kalakip na teksto ay kung ano siya nai-type sa, scroob maaaring linlangin server Harvard ni sa paggawa sa isang SQL query string na ganito ang hitsura. Ay katumbas ng Password 12345 o isa ay katumbas ng isa. Ang resulta ng kung saan, lohikal, ay na ito ay mag-log scroob sa kung ang kanyang password ay 12345 o kung ang isa ay katumbas ng isa, na kung saan ay siyempre palaging totoo, na nangangahulugan scroob laging nakakakuha in. At ito, ang mga paraan upang ayusin ito, tulad ng sa isang pulutong ng mga kaso, ay sumulat ng mas defensively. Upang gamitin ang isang bagay tulad ng ating aktwal na query function, na kung saan makikita mo sa PSet7, kung saan kami plug in isang bagay tulad ng tanong nagmamarka dito. At ang kagandahan ng query function na tayo magbibigay sa iyo ay ito ipinagtatanggol laban sa mga pag-atake sa tinatawag iniksyon SQL, kung saan ang isang tao ay tricking ang iyong code sa injecting kanyang sariling SQL code. Dahil kung ano ang function query bigyan namin sa inyo ay talagang gawin, kung gagamitin mo ang question mark syntax at isang pangalawang at ang ikatlong argument dito, ay kung ano ang ginawa ito idagdag sa input na ibinigay sa user? Ang mga backslash quotes. Kaya, ito escapes anumang maaring mapanganib na mga character. Mukhang ito kakaiba ngayon, ngunit ito ay hindi madaling matukso dahil ito ay hindi baguhin ang logic anymore dahil na buo password ay ngayon ng isang solong quote na hindi, sa katunayan, password scroob ni. Kaya, mayroong nangyaring ng ilang mga jokes tungkol sa mga ito sa paglipas ng mga taon. Kaya, ito ay kinuha ng isang larawan ng ilang mga geek sa isang paradahan kung saan maaari mong malaman na ang ilang mga lungsod at estado subukan na i-scan ang iyong lisensya plate upang singilin ka o upang ticket mo kung ikaw ay pupunta sa pamamagitan nang walang, tulad ng, ang E-Z Pass bagay. Kaya, ang taong ito ituring na siguro ang mga tao sa pagsulat ng mga E-Z Pass sistema ay hindi kaya maliwanag, at marahil sila lamang concatenated-sama ng isang string, upang hindi siya maaaring maliciously hindi lamang makumpleto ang kanilang pag-iisip, pero sa totoo magsagawa ng isang masamang command, na kung saan hindi pa kami nabanggit, ngunit maaari mong marahil hulaan. Na bukod sa tanggalin at ipasok at i-update at piliin, mayroong isang keyword drop tinatawag din na, na literal na tinatanggal ang lahat ng bagay sa database, na kung saan ay partikular na masamang. Maaari naming mag-zoom in sa mga ito kung ito ay isang maliit na matigas na makita. Ito, ngayon, ay isang sikat na cartoon iyan ay kamangha-mangha matalino ngayon at maliwanag. [Tawa] Oo, cool. Uri ng geeking out. Kaya ang mga ito, pagkatapos, ay Atake ng iniksyon SQL. At ang mga ito upang madaling upang maiwasan sa pamamagitan ng paggamit kanan code o ang karapatan ng mga aklatan. At makikita mo sa PSet7, na ang kung bakit namin sa iyo ang mga function na query. Kaya, isang pares ng mga teaser na naisip namin gusto namin bigyan ka dito sa aming natitirang minuto magkasama. Kaya, tandaan mo mula sa linggo zero, tayo ipinakilala ang dalawang mga bombilya ng ilaw na ay nice, hindi lamang dahil ang mga ito ay kaakit-akit at buhay na buhay, pero dahil sila ay sumusuporta sa isang bagay tinatawag na isang API, isang Application Programming Interface At sa CS50 kaya sa ngayon, hindi namin halos nakatutok sa GET at POST, ngunit ito ay lumiliko out mayroong iba pang mga HTTP mga pandiwa tulad PUT. At sa katunayan, ito ay isang slide mula sa linggo zero kung saan kung sumulat ka ng code na nagpapadala a la PSet6 isang HTTP na kahilingan na ganito ang hitsura nito na may ganitong bahagi ng teksto sa ibaba, na kung saan ay tinatawag na JSON, o JavaScript Bagay pagtatanda na makikita namin makipag-usap tungkol sa susunod na linggo, maaari mong i-on o i-off o pagbabago ang kulay ng ilaw tulad ng mga iyon. Kaya kung CS50 ay mayroon ding bilang karagdagan sa ilang ng mga bombilya ng ilaw dito sa New Haven kung nais mong humiram mga ito para sa huling proyekto, ilang din Microsoft Mga banda, na kung saan ay tulad ng relo na magsuot ka sa paligid ng iyong pulso na parehas ay may isang API upang ikaw maaaring isulat ang iyong sariling mga software para sa kanila. Kami ay may isang account na may IOS code ng Apple kaya na kung mayroon kang isang Apple Watch o isang iPhone o isang iPad o iPod, Maaari mong isulat ang code na aktwal na tumatakbo sa mga iyon. Mayroon kaming isang buong grupo ng Arduinos, na kung saan ay maliit na maliit maliit na mga computer walang kaso, mahalagang, na maaari mong kumonekta sa pamamagitan ng USB, kadalasan sa iyong sariling Mac o PC, isulat ang code na tumatakbo sa mga pisikal na aparato na madalas ay may mga sensor sa mga ito upang maaari mong makipag-ugnay sa tunay na mundo. Mayroon kaming isang buong grupo ng mga aparato Leap Motion, na kung saan ay USB device para sa mga Mac at PCs, dito at muli, sa New Haven. At kapag ikinonekta mo ito sa iyong Mac, Maaari mong aktwal na kontrolin ang iyong computer sa pamamagitan ng pagsusulat ng software na sa pamamagitan ng infrared beam, mga numero kung saan ang iyong mga kamay ng tao ay, kahit na walang pagpindot sa iyong keyboard. Naisip naming ibahagi ang isang mabilis na sulyap sa ito, halimbawa. [MUSIC nagpe-play] Kaya, kami ay isang buong grupo ng mga bagay na ito, masyadong, na tinatawag Myo braso banda na kung saan inilagay mo sa ibabaw ng iyong mga bisig at pagkatapos ay maaari mong kontrolin ang mga tunay na mundo o virtual na mundo na katulad nito. [MUSIC nagpe-play] O kaya naman, kami din ay may ilang mga Google Karton, na kung saan ay literal, gaya ng, isang karton na kahon na maaari mong ilagay sa iyong mukha, ngunit slide sa iyong telepono sa ito sa gayon ay ikaw ay ilagay ang baso ng iyong phone talagang malapit sa iyong mga mata. And Google karton ay medyo mura sa $ 10 o $ 20. At ito ay may maliit na lenses na bahagyang off shift ang imahe sa screen para sa iyong mga tao mata upang bigyan ka ng isang pakiramdam ng pagkakaroon ng malalim upang ang iyong aktwal na may isang 3D kapaligiran sa harap mo. Mayroon din kaming ilang Samsung Gear, na ay ang mas mahal na bersyon ng mga ito, ngunit na parehas maaari slide sa isang Android phone at magbigay sa iyo ng maling akala of-- o magbigay ng karanasan ng virtual katotohanan. At sa aming huling dalawang minuto, naisip namin na gusto naming subukan upang gawin ito. Kung ang maaari kong proyekto kung ano ay Colton dito lamang sa paghahasa iyong gana sa pagkain, hayaan mo akong magpatuloy at itapon up sa malaking screen dito. Hayaan akong patayin ang mga ilaw. Colton, mo nais na sige at ilagay sa iyong cell para sa isang sandali at dumating sa higit sa gitna ng entablado? At ang gusto mong project-- ito ay kung ano ang nakikita Colton. Ngayon, ang Wi-Fi sa mga dito ay hindi kaya malakas para sa aparatong ito na ito ay sobrang nag-uutos, ngunit Colton ay literal sa mahiwagang futuristic lugar. Siya lamang ang nakikita ng isang imahe. Nakikita mo ang kanyang kaliwa at kanang mata na ang kanyang mga utak ay stitching magkasama sa isang tatlong dimensional kapaligiran sa kanyang mukha. Lang ang napiling siya ng isang opsyon sa menu dito. At kaya muli, siya ang may suot ang headset na ito may Samsung phone sa mga ito na wireless project sa aming overhead. Ngayon, nag-on Mars, sa tingin ko? COLTON: tingin ko ito. Hindi ako sigurado [hindi marinig]. [Tawa] David MALAN: Ino-out Mars ay may mga menu. COLTON: [hindi marinig] ang ilang mga cool lugar kung gusto naming pumunta to-- David MALAN: Saan mo gusto naming pumunta? COLTON: [hindi marinig] David MALAN: Tingnan natin At hayaang kung saan Colton ni pagkuha sa amin ngayon. COLTON: [hindi marinig] David MALAN: Kaya, mayroong maraming mga iba't-ibang mga lugar na maaari mong gawin sa iyong sarili. May FAPIs pamamagitan ng na maaari mong magsulat ng mga laro o mga pakikipag-ugnayan na tumakbo, sa huli, sa telepono. Kaya, kayo ay talagang lamang pagsulat ng isang mobile phone app. Ngunit salamat sa software at ang mga kakayahan graphics, ngayon Colton ay nasa ito maliit na maliit maliit na maliit na bahay. At sa panganib ng tinatalo ang ating sarili, Colton at ko makikita stick sa paligid para habang sa dulo ng klase dito ngayon kung nais mong magkaroon ng at i-play. At kami ay dalhin ang mga ito bumalik sa susunod na linggo pati na rin. Wala nang paliguy-ligoy na ito para sa araw na ito. Kami ay makikita mo sa susunod na linggo. [MUSIC - RAGGA TWINS, "BAD MAN"]