[Powered by Google Translate] [კვირა 9]
[დევიდ ჯ Malan - ჰარვარდის უნივერსიტეტი]
[ეს არის CS50. - CS50.TV]
ყველა უფლება. კეთილი იყოს. ეს არის CS50, და ეს არის დაწყების კვირაში 9.
დღეს ჩვენ ფოკუსირება კერძოდ დიზაინი, აღარ კონტექსტში C
მაგრამ კონტექსტში PHP და ცოტა SQL და ცოტა JavaScript,
განსაკუთრებით მიმართ ბოლომდე ორივე pset 7 და ასევე თქვენი საბოლოო პროექტი.
რეალურად, თუ თქვენ იმ ეტაპზე თქვენს საბოლოო პროექტი
სადაც სავარაუდოდ, როგორც საათობრივად ან იმდენად წინ თქვენ მინიმუმ დაიწყო უკვე მისცა, აზრის
თქვენი საბოლოო პროექტი და თქვენ ფიქრი გსურთ ითანამშრომლებს 1 ან 2 თანაკლასელები,
თუ თქვენ მქონე უბედურება დაკავშირებულია განაცხადა თანაკლასელები,
მოგერიდებათ შეავსოთ ფორმა cs50.net/partners/form.
უბრალოდ სთხოვს ვინ ხარ შენ, რა სახის პროექტი თქვენ ფიქრი,
სადაც თქვენ ცხოვრობთ მხოლოდ ლოგისტიკური მიზეზებით.
ხოლო შემდეგ, თუ თქვენ გსურთ ადევნეთ თვალი მომდევნო კვირაში ცხრილების URL არსებობს,
შეგიძლიათ შემდეგ დაინახავთ წაუკითხავი ვერსია Google doc
რომელშიც ჩვენ შეგროვება, რომ ინფორმაციას.
ასე რომ, თუ გსურთ მუშაობა ვინმეს, აუცილებლად მოგერიდებათ მივაწვდინოთ ხალხს
მეშვეობით, რომ მექანიზმი.
მაგრამ უმრავლესობა FOLKS გავაკეთოთ მუშაობა სოლო. სწორედ მთლიანად ჯარიმა.
ასე რომ არ იგრძნონ, რომ ეს არანაირად სავალდებულო.
პარასკევს ეს მხოლოდ მე და რამდენიმე გუნდი აქ,
ცარიელი თეატრის ამისთვის დიდი ნაწილი.
იყო 3 ტურისტი იჯდა იქ, ასე რომ იყო ცოტა უხერხულია.
რა ჩვენ ვისაუბრეთ იყო მონაცემთა ბაზები და ჩვენ ვისაუბრეთ pset 7 ცოტა.
და თუ თქვენ ასე არ მოხდა დაიჭიროთ, რომ ვიდეო უბრალოდ არ არის, რომ ჯარიმა.
ვეცდები, რომ განსაზღვროს ნებისმიერი თვალსაზრისით, რომ ჩვენ სხვაგვარად თავისთავად
ეფუძნება პარასკევის ლექცია.
>> მაგრამ დღეს ჩვენ ვაპირებთ ცდილობენ თქვენ წერტილი
არა მხოლოდ კონკრეტდება გამოუვა რაღაც pset 7
მაგრამ ნამდვილად გასაგებად, რა ხდება ქვეშ hood,
განსაკუთრებით ზოგიერთი აბსტრაქციები რომ ჩვენ დასვა ადგილი functions.php ფაილში
რათა თქვენი ცხოვრების ცოტა ადვილი, მაგრამ ისე, რომ თქვენ საბოლოოდ მესმის
ასე რომ, როდესაც სასწავლო თვლები მოვა off რამდენიმე კვირაში თქვენ მაინც გადარჩება
რეალურ ცხოვრებაში და ამას ვაკეთებთ, პერსონალის გარეშე CS50 ფარგლებში ქვეშ თქვენ.
ეს $ _SESSION, იმ თქვენ ვინც იცნობს
ან ვინც უკვე დაიჭირეს ვიდეო პარასკევს, რას სესიაზე მოდით გავაკეთოთ
in PHP დაფუძნებული ვებ განაცხადის?
ეს არის superglobal ცვლადი, რაც იმას ნიშნავს, რომ ის მსგავსი სულისკვეთებით მიიღონ და პოსტ
და რამდენიმე სხვები, მაგრამ რა არის ეს რამ სასარგებლოა?
>> რა არის სესიაზე გამოიყენება? Yeah. [სტუდენტი] შემოსვლა სისტემაში
უკაცრავად? [სტუდენტი] შემოსვლა სისტემაში შემოსვლა სისტემაში მართლაც.
In pset 7 ჩვენ გამოყენებისას სესიაზე superglobal ხელი შეუწყოს ხე შემოსული
და რაც ლამაზი ამ superglobal არის, რომ ასოციაციურ მასივში.
ასოციაციურ მასივში, გაწვევას, მხოლოდ მასივი, მაგრამ რომლის ინდექსების აღარ უნდა იყოს ნომრები
მოსწონს 012. ეს შეიძლება იყოს ნომრები ან ისინი შეიძლება კი სიმები.
და თუ თქვენ dived შევიდა pset 7 ჯერჯერობით, თქვენ შეიძლება გავიხსენოთ, რომ ჩვენ შენახვის გასაღები მოუწოდა ID
შიგნით ამ ასოციაციურ მასივში, რომლის ღირებულება არის რაღაც 123 -
რასაც ამჟამად რეგისტრირებული მომხმარებლის ID არის.
მოტივაცია არის ის, რომ შემდეგაც კი მომხმარებელს უკვე მოინახულა Localhost
ან ჩემი ნახვა საზოგადოდ და შემდეგ ისინი შესული სისტემაში,
მაშინაც კი, თუ ისინი არ დააჭერთ ბმულს ან დაბრუნდეს ჩემი საიტი 5 წუთში
ან თუნდაც საათში ან თუნდაც დღეში მაგრამ დაეტოვებინა ბრაუზერის ფანჯარაში ღია,
მეშვეობით ამ superglobal შემიძლია გვახსოვდეს, რომ ისინი ხართ შემოსული
>> სხვა სიტყვებით, ის საშუალებას ჩემთვის შესანახად ოდნავ გრძელვადიანი არაფერი მინდა შესახებ მომხმარებელს.
და შეგიძლიათ წარმოიდგინოთ, რომ ეს მართლაც როგორც განსახიერება of კალათა.
მსგავს ადგილებში Amazon აშკარად მოგცემთ დააყენა რამ შევიდა კალათა,
მაგრამ HTTP, ოქმი რომ ძალაუფლება ვებ, არის მოქალაქეობის არმქონე
იმ გაგებით, რომ როდესაც თქვენ ესტუმრებით ნახვა,
ამისთვის დიდი ნაწილი თქვენ არ ზოგიერთი მუდმივი კავშირი
შორის თქვენი ბრაუზერის და სერვერზე.
როგორც კი თქვენ გადმოწერილი HTML და JPEGs და GIFs და ყველა რომ,
კავშირი მიდის და თქვენ უბრალოდ უნდა ასლი HTML და whatnot საწყისი სერვერზე.
მაგრამ თუ სერვერზე სურს გვახსოვს რაღაც თქვენს შესახებ,
ტვირთი სერვერზე რეალურად ჩანაწერის ინფორმაციას.
და ასე რომ თქვენ პროგრამისტის, რომელსაც აქვს კონტროლის სერვერი
შეგიძლიათ განათავსოთ საუკეთესო არაფერი გინდათ შიგნით ამ superglobal ასოციაციურ მასივში
და ის მუდმივად იქნება შემდეგი დროის მომხმარებლის ბრუნდება,
თუ არა ეს წუთი ან თუნდაც დღის შემდეგ, თუ ისინი დახურვა მათი ბრაუზერის ფანჯარაში,
სადაც წერტილი სესიაზე ქრება.
ასე რომ ეფემერული შენახვის, ეს არასამთავრობო დაჟინებული და ეს იმას ნიშნავდა, რომ მიდიან
როგორც კი მომხმარებლის ხურავს მათი ბრაუზერი - არა მხოლოდ, რომ tab, ხშირად მთელი ბრაუზერის,
რითაც ეფექტურად ხე მომხმარებლის გარეთ.
მაშ როგორ არის ეს საგანი რეალურად განახორციელა?
ავიღოთ სწრაფი შევხედოთ მარტივ მაგალითს ჩვენ შევხედეთ პარასკევს.
მათთვის უცნობ, ეს იყო როგორც მარტივი, როგორც ეს.
ეს არის ვებ გვერდზე, რომლის ერთადერთი მიზანი ცხოვრებაში არის მეუბნებოდა
რამდენჯერ მე ნამყოფი ამ გვერდზე.
ეს არის პირველი შემთხვევა, აქ ორშაბათს, რომ ვიყავი, ასე რომ წერია 0 ჯერ.
>> მაგრამ თუ დავიწყო გადატვირთვა ამ გვერდზე, ნათქვამია 1 დროს, 2, 3, 4, 5,
და ეს საბოლოოდ მხოლოდ გააგრძელოს დათვლის up, up, up, up, up
თითოეული დროს მე რეალურად დააჭირეთ ჩატვირთვა მასზე.
მაშ როგორ არის ამ სამუშაო? ნება მომეცით წასვლა შიგნით ამ ფაილის მოუწოდა counter.php.
ზედა ნაწილს ეს ყველა ლურჯი კომენტარი, მაგრამ საინტერესო ნაწილი არის აქ.
On line 13 ჩვენ მოვუწოდებთ ამ ფუნქციის session_start,
და ეს არის ფაქტიურად ყველა თქვენ მხოლოდ უნდა თუ გინდათ ჰქონდეს
ამ სპეციალური superglobal მოუწოდა $ _SESSION.
რომ ხდის ყველა შესაძლო, და ჩვენ ვხედავთ, როგორ მომენტში რომ ყველა შესაძლო.
შეესაბამება 16 notice რა ვაკეთებ.
თუ გასაღები, რომელსაც ეწოდება Counter - სხვა სიტყვებით, ინდექსი ფასი - "მთვლელი"
არსებობს შიგნით ამ მასივი მოუწოდა სესიაზე, მაშინ, რა ვარ მე აკეთებს ერთად ის ხაზის ქვემოთ?
რა არის ხაზზე 18 აკეთებთ?
>> [Inaudible სტუდენტი საპასუხოდ] რა არის რომ? [სტუდენტი] შენახვის ღირებულება. კარგი.
ეს შენახვის ღირებულება, რომელიც არის ამ სესიაზე ახლავე in new ადგილობრივი დროებითი ცვლადი,
$ Counter ყველა ამას.
გაითვალისწინეთ, რომ PHP უკვე პატარა ზარმაცი აქ.
გაითვალისწინეთ ჩვენ არ გვაქვს რაიმე ნახსენები int ან ათწილადი ან სიმებიანი ან არაფერი რომ
რადგან PHP არის სუსტად აკრეფილი, რომლის დროსაც თქვენ არ დააკონკრეტა ტიპის ცვლადი,
და ამ შემთხვევაში აქ მე კი არ გამოაცხადა ამჟამად.
მე გამოცხადების მას შიგნით ამ Curly braces და განსხვავებით C, ეს არის რეალურად okay.
რაც არ უნდა ღრმად წყობილი ცვლადი განცხადებას არის PHP -
შიგნით Curly გაუწიოს, შიგნით Curly გაუწიოს და მოსწონს -
იგი იმ მომენტში დროში არსებობს დარჩენილი პროგრამა,
უკეთესი ან უარესი.
ასე რომ, ეს დაუყოვნებლივ ხდება გლობალური, როგორც კი თქვენ განსაზღვრავს, როგორც ვაკეთებთ აქ.
>> წინააღმდეგ შემთხვევაში, თუ არ ნახავთ, რომ იქ არაფერი სესიაზე superglobal,
მე აშკარად ინიციალიზაციისას ამ ცვლადი counter 0,
ამით უბრალოდ ვთქვათ მომხმარებლის არასოდეს ყოფილა აქ ადრე.
და მაშინ ეს, რა თქმა უნდა არის დამატება counter როგორ?
მე განახლებაზე ღირებულების რომ შიგნით ამ ასოციაციურ მასივში
მიიღწევა ის ტოლია რასაც counter გაკეთებული არის + 1.
თუ მე გადახვევა ქვემოთ აქ HTML გვერდზე, ეს რეალურად საკმაოდ მარტივია.
ყველა მე გამაჩნია ორგანოს ეს გვერდი, "თქვენ არ მოინახულა საიტი ასე და ასე ჯერ."
და ეს არის PHP შენება.
თუ <? =, ეს არის ეკვივალენტი ეფექტურად რა ფუნქცია?
მართლაც ექვივალენტურია რაღაც printf, რომელიც ჩვენ ვნახეთ ბევრჯერ C,
თუმცა, როგორც მოგეხსენებათ უკვე სპეც წელს pset 7,
ბეჭდვითი ასევე ფუნქცია რომ ბეჭდავს რაღაც გარეთ, იგი ფაქტობრივად არ გამოიყენოთ ფორმატის კოდები,
და თქვენ შეგიძლიათ რეალურად ამბობენ ეხო ისევე.
ისინი ყველა ოდესმე ისე ოდნავ განსხვავებული, მიუხედავად იმისა, სუფთა ეფექტი არის საბოლოოდ იგივე.
ასე რომ, ეს გამოყენება ტოლობის ნიშანი მხოლოდ სახის ელეგანტური გზა ამის გაკეთება
მეტი succinctly ვიდრე თქვენ შეიძლება სხვაგვარად შეძლებენ.
ასე რომ ყველა საიტი არ. იგი ბეჭდავს out ღირებულება Counter.
როგორ ხდება ეს ყველაფერი რეალურად ხდება?
გაიხსენეთ კვირაში წინ დავიწყეთ ეძებს ქვეშ hood
როგორ ვებ გვერდზე მუშაობს გამოყენებით ამ ინსპექტორი tab.
>> Chrome აქვს ამ ორივე Mac ვერსია, Windows ვერსია, და კიდევ Linux ვერსია,
და Firefox და IE აქვს მსგავსი მექანიზმები, რომლითაც თქვენ ეს ჩამონტაჟებული debugger
შიგნით ბრაუზერში.
მოდით შევხედოთ შემდეგ.
გვაქვს მთელი თაიგული ჩანართების აქ, და გავიხსენოთ, რომ leftmost ერთი არის ელემენტები,
და არა აქვს მნიშვნელობა რამდენად godawful HTML და JavaScript არის გვერდი,
გავიხსენოთ, რომ ელემენტები tab შეგიძლიათ რეალურად ნავიგაცია HTML იერარქიულად
და ლამაზი და neatly.
ასე რომ, თუ თქვენ ცდილობთ ვისწავლოთ ნახვა, როგორიცაა Google ან Facebook
ან მართლაც ნებისმიერ ნახვა, გააცნობიეროს, რომ თქვენ ალბათ უკეთესი იქნება
ეძებს კოდის ამ გზით, როგორც ეწინააღმდეგებოდა ათვალიერებენ ნედლეული წყარო,
რაც შეიძლება იყოს არეულობა, როგორც ჩვენ ვნახეთ განსაკუთრებით Google-ის საიტი.
ასე რომ, თუ მე ნაცვლად დააწკაპუნეთ ქსელი tab აქ,
ვნახოთ რა ხდება, როდესაც მე ეწვევა ამ გვერდზე.
პირველი ნება მომეცით გარკვევას ჩემი ქეში.
მე ვაპირებ წასვლას პარამეტრების Chrome, შემდეგ კი ისტორია
და შემდეგ წმინდა ყველა განცხადება მონაცემები.
თქვენ შეიძლება გამოყენებულ იქნას ამით სხვა მიზნით, [სიცილის]
მაგრამ როდესაც საქმე განვითარებად საიტებზე, სინამდვილეში სასარგებლო -
თუ თქვენ იცინის თქვენ იცით. [სიცილის]
სინამდვილეში მართლაც სასარგებლოა, როდესაც განვითარებად საიტებზე რადგან რეალობა
რამ, როგორიცაა cookies და რამ, როგორიცაა ქეშირებული HTML ფაილი ქეშირებული JavaScript ფაილები
შეიძლება რეალურად გახდეს დიდი თავის ტკივილი, რადგან თუ სხვადსხვა მიზეზის გამო
ბრაუზერის გადაწყვეტს ქეში რამდენიმე ფაილი და ჯერჯერობით თქვენ ცვლილებები შეიტანა, რომ ფაილი სერვერზე
მაგრამ ბრაუზერი არ ნამდვილად მიხვდა, რომ ფაილი შეიცვალა
და ამიტომ ფაქტობრივად არ ხელახლა გადმოწეროთ მაშინაც კი, როდესაც თქვენ დააჭირეთ ღილაკს ჩატვირთვა,
ერთერთი ყველაზე surefire გზა უბრალოდ დარწმუნდით ბრალი არ არის თქვენი კოდი,
ეს ერთად ქცევის ბრაუზერი, არის წავიდეთ აქ თქვენს ბრაუზერში
და მხოლოდ გარკვევას მთელი ისტორია ისე, რომ არ არსებობს გაურკვევლობა.
>> ხოლო შემდეგ, თუ თქვენ ნამდვილად გსურთ იყოს Paranoid, დატოვა ბრაუზერის, გადატვირთეთ იგი,
და შემდეგ დარწმუნდით ყველა მუშაობს როგორც მოსალოდნელია.
ასე მოკლედ, გაწმენდის cache კარგია, როცა აკეთებს განვითარებას.
ასე რომ აქ გვაქვს ქსელი tab.
მე ადრე მოინახულა საიტი 9 ჯერ, მაგრამ ნება მიბოძეთ წავიდეთ წინ არის და დაწკაპეთ ჩატვირთვა.
და დავბრუნდი ქვემოთ 0.
მოდით რეალურად ვხვდებით, როგორ შეიძლება ის არის, რომ ამ სხდომაზე superglobal ხორციელდება.
მე ვაპირებ დააწკაპუნეთ 1 HTTP მოთხოვნის, რომ გაკეთდა,
და ამ გამართვის ფანჯარა საშუალებას ჩემთვის შიგნიდან რომ.
აქ მე ვხედავ მხოლოდ რეაგირება სერვერზე, რომელიც არ არის საინტერესო.
მე ვნახე ეს ნებისმიერი რაოდენობის გზები.
მაგრამ რა ტექნიკურად საინტერესოა headers.
თუ მე გადახვევა ქვემოთ აქ და ფოკუსირება მოთხოვნის ზედა და დააჭირეთ იხილე წყარო,
რა მე ვაპირებ ვხედავ არის სიტყვასიტყვით HTTP მოთხოვნის
რომ წავიდა, ჩემი ბრაუზერის სერვერზე,
GET მყოფი ოპერატიული სიტყვა და შემდეგ / counter.php მყოფი ფაილის სახელი,
HTTP/1.1 მხოლოდ კონკრეტდება ვერსია HTTP, რომ ჩემი ბრაუზერის იყენებს.
ეს ხაზი აქ არის პატარა შეხსენება საწყისი ბრაუზერი სერვერზე რა სახელით სერვერზე არის
რომ მას სურს გაიგო.
და შემდეგ დანარჩენი ეს არის ზოგჯერ საინტერესო მაგრამ არა შესაბამისი ახლავე.
>> ეს არის მხოლოდ სახის ცნობისმოყვარეობა.
Cryptic თუმცა ამ სტრიქონს, ნებისმიერ დროს თქვენი ბრაუზერის სტუმრობს ნახვა
იგი ინფორმირება სერვერზე რა ბრაუზერში თქვენ იყენებთ
და რა ოპერაციული სისტემა თქვენ იყენებთ და რა ვერსია მისი.
ასე რომ, თუ თქვენ ოდესმე გვაინტერესებდა, როგორ საიტებზე, როგორიცაა CNN და whatnot
ვიცით, რა პროცენტული არის Mac მომხმარებლებს ინტერნეტში, PC მომხმარებლებს,
IE მომხმარებლებს, Chrome წევრებს და მოსწონს, ეს იმიტომ, რომ ყველა ჩვენი ბროუზერები
ვეუბნებით თითოეული ნახვა out არსებობს, რაც ჩვენ ვართ.
ეს სულაც არ შეიცავდეს პირად ინფორმაციას,
მაგრამ ჯერ გეტყვით სერვერს რა თქვენი IP არის და რა ბრაუზერი და OS თქვენ იყენებთ.
ასე რომ, სადაც ეს ინფორმაცია.
მაგრამ რა არის უფრო საინტერესო არის, როდესაც საქმე ეს სხდომები არის საპასუხო header.
ნება მომეცით დააჭირეთ View Source შემდეგ რეაგირება.
რა არის საინტერესო აქ არის რამდენიმე რამ.
1, მივიღეთ უკან მდგომარეობა კოდი 200.
ჩვენ არასდროს ვხედავთ ამ სტატუსის კოდი რადგან ეს ნიშნავს, რომ ყველა კარგად არის.
ეს ნიშნავს სიტყვასიტყვით okay განსხვავებით რაღაც.
რა რაოდენობის ჩვენ ხანდახან ვხედავ, რომ არის ცუდი? [სტუდენტი] 404.
404, ფაილი ვერ მოიძებნა, 403 თქვენ შეიძლება stumbling საფუძველზე უკვე,
რაც აკრძალულია, რაც იმას ნიშნავს, თქვენ დაავიწყდა chmod რაღაც, სავარაუდოდ.
წინ კიდევ ერთი bunch of სხვები.
>> Down აქ, ეს არის პატარა გიჟები.
მე ნამდვილად უბრალოდ დაწერა ამ ფაილის რამდენიმე წუთის წინ მიერ pasting მას gedit.
რატომ ამ გვერდზე იწურება 1981 წელს ადრე მართლაც იყო საიტი?
რა ხდება იქ?
>> [Inaudible სტუდენტი საპასუხოდ] დრო შტამპი. მაგრამ რატომ?
ეს გარკვეულწილად თვითნებური, მაგრამ სინამდვილეში სასარგებლო.
რა ამ ამბობს ჩემს ბრაუზერს ამ PHP ფაილი თქვენ უბრალოდ მოითხოვა უკვე გაუვიდა.
ფაქტობრივად, ეს ვადა გაუვიდა 30 წლის წინ.
მაგრამ რას ნიშნავს?
ეს უბრალოდ ნიშნავს, შემდეგი დროის მომხმარებლის სტუმრობს ამ გვერდზე,
თუ არა მიერ გადატვირთვა ან აკრეფით URL განცხადებაში ბარი,
დარწმუნდით წასვლა და მოიტანონ ახალი ასლი.
ეს არის ერთგვარი მაგალითი cache busting,
სულელური სიტყვა, რომელიც მხოლოდ იმას ნიშნავს, ცდილობს დაუკარგავს ბრაუზერები
საწყისი რეალურად ქეშირების HTML რომ ჩამოვიდა სერვერი
ასე რომ თქვენ არ მოხვდა შემთხვევით განახლება და შემდეგ ვხედავთ იგივე ვერსია ფაილი.
თქვენ ნამდვილად გინდათ სერვერზე გააგზავნოს ახალი ასლი.
ასე რომ ის ფაქტი, რომ ეს 1981 უბრალოდ იმას ნიშნავს, რომ სწორედ ელექტრო მოწყობილობების არის არჩევის
როგორც თვითნებური თარიღი წარსულში.
მაგრამ რეალური წვნიანი ხაზი არის ამ ერთ.
ჯერ კიდევ 50 თქვენ ალბათ ბუნდოვნად იცნობს cookies.
როგორც ახლა, განსაკუთრებით იმ ნაკლებად კომფორტული ან შორის,
რა არის ფუნთუშა თქვენს გაგება ახლავე
მიუხედავად იმისა, რომ ჩვენ დაახლოებით რათა თქვენი გაგება უფრო ტექნიკური?
რა არის ბმული? Yeah.
[სტუდენტი] ინფორმაცია მომხმარებლის, ისევე როგორც, თუ ისინი დაწერილი მათი სახელი ან რაღაც.
>> კარგი. ეს ინფორმაციას მომხმარებელი, თუ არა ისინი აკრეფილი მათი მომხმარებლის სახელი უკვე.
ნაჭდევი გზა, რომლითაც სერვერებს მახსოვს რაღაც შესახებ მომხმარებელს.
და რა ფუნთუშა მართლაც არის ტექსტური ფაილი ან თანმიმდევრობა bytes
რომ დარგეს მიერ სერვერზე შიგნით ბრაუზერში
და შიგნით რომ ფაილი ან იმ bytes ერთგვარი იდენტიფიკატორი.
შეიძლება უფრო სიტყვასიტყვით თქვენი მომხმარებლის სახელი, მაგრამ უფრო ხშირად ეს რაღაც უფრო cryptic ორიენტირებული
მსგავსი რამ აქ - bo8dal3ct და ა.შ. - ეს მართლაც დიდი ალფანუმერული სიმებიანი
რომ მართლაც მხოლოდ ნიშნავს, რომ უნიკალური იდენტიფიკატორი თქვენთვის.
ან თქვენ შეგიძლიათ ვფიქრობ, რომ ეს ერთგვარი ვირტუალური მხრივ შტამპი.
თუ ზოგიერთ კლუბში ან გასართობი პარკი, უნდა გვახსოვდეს, რომ თქვენ რეალურად გადახდილი
და Gone in, ისინი პატარა წითელი სტიკერზე თქვენი მხრივ რაიმე სახის,
და რომ ახსენებს ადამიანს counter რომ თქვენ უკვე გადახდილი
და შეგიძლიათ დაბრუნდნენ, როგორც თქვენ, გთხოვთ.
Cookies ხართ პატარა მსგავსი სულისკვეთება რომ.
პირველად ვიყავი ამ ნახვა, როგორც მე, უბრალოდ გააკეთეს შემდეგ იღებენ ჩემი ქეში,
სერვერზე, ელექტრო ამ შემთხვევაში, დააყენოს ბეჭედი ჩემს მხრივ
რომლის სახელიც PHPSESSID სხდომის ID,
რომელთა ღირებულება არის ამ მართლაც ხანგრძლივი ალფანუმერული სიმებიანი.
>> ასე რომ, ახლა ერთგვარი emblazoned ჩემს მხრივ ისე, რომ მომავალი დრო მე მოხვდა განაახლეთ
ან ხელით ეწვევა ამ მისამართს ბრაუზერში,
ჩემი ბრაუზერის მიერ განმარტებას HTTP აპირებს წარმოადგინოს მხრივ შტამპი
ისევ და ისევ და ისევ.
ასე რომ მიუხედავად იმისა, რომ სერვერზე არ არის აუცილებელი იცის ვინ ვარ,
ისინი მინიმუმ იცოდეს, რომ მე ვარ იგივე მომხმარებლის ან თუნდაც, უფრო კონკრეტულად კი, იმავე ბრაუზერში.
და ა.შ. ეს არის საბოლოო ჯამში როგორ სესიაზე superglobal ხორციელდება.
სერვერზე არ არის იდეა ვინ ხარ შენ, როდესაც თქვენ დავუბრუნდეთ ნახვა მეორე ან მესამე
თუ თქვენ წარმოადგინოს ამ მხრივ შტამპი.
და როგორც კი თქვენ წარმოადგინოს, რომ მხრივ შტამპი,
სერვერზე არსებითად გადადის პატარა მონაცემთა ბაზის საკუთარი
და ამოწმებს, okay, მე ახლახან ჩანს მხრივ შტამპი მომხმარებლის bo8dal3ct და სხვ.
ნება მომეცით ვხედავ თუ რა ინფორმაციას პროგრამისტი არ ინახება
შიგნით superglobal ამ მომხმარებლის,
და მაშინ ნება მომეცით დარწმუნდით, რომ მონაცემები კვლავ შიგნით სესიაზე superglobal
ისე, რომ პროგრამისტი შეიძლება ხელახლა შედიხართ, რომ მონაცემები
თუნდაც ის შეიქმნა რამდენიმე წუთის ან საათის წინ.
ასე რომ, სხვა სიტყვებით, cookies, რომლებმაც მოიპოვეს ცუდი Rap გარკვეული დროის განმავლობაში
გამო insecurities წელს ბრაუზერები და მათ შეუძლიათ ნამდვილად არღვევს ჩვენი კონფიდენციალურობის და ამ ყველაფრისა,
სინამდვილეში გააჩნიათ დიდი კომუნალური ვინაიდან მათ გარეშე
თქვენ მუდმივად უნდა შესასვლელად ყველა Facebook გვერდზე თქვენ ეწვევა
ან ყოველ Gmail ელ წაიკითხოთ თუ ბრაუზერის არ გვაქვს გზა დამახსოვრების
რომ თქვენ უკვე დამოწმებული.
>> ასე რომ ამ გზით Cookies იგზავნება უკან და მეოთხე მასშტაბით მავთული.
კიდევ ერთი ცნობისმოყვარეობა შესახებ cookies, განსაკუთრებით აქ, არის, რომ ეს არის სრულიად cleartext.
იქ არ არის დაშიფვრის მიმდინარეობს აქ განაწილებაზე,
და მართლაც მე გამოყენებით HTTP მომენტში.
ერთი ჩვენი სანიშნეს მომენტია, CS50, რომელიც არის 2 წლის წინ,
იყო დაახლოებით დრო ინსტრუმენტი მოუწოდა Firesheep გამოვიდა.
ეს იყო თავისუფალი ნაჭერი პროგრამული უზრუნველყოფა, რომელიც გააკეთა უსაფრთხოების მკვლევარი
როგორც გაღვიძების მოწოდება თანამეგობრობას ვთქვა, თუ რამდენად atrociously განხორციელდა
გარკვეული ავტორიზაციის მექანიზმები Web იყო.
ასე რომ, გარკვეული დროის, Facebook იყო თითქმის მთლიანად მეტი HTTP, HTTPS არ.
და მაშინაც კი, თუ თქვენ არ ვიცი როგორ მუშაობს შიფრის, S არის უსაფრთხო
ეს იმას ნიშნავს, არსებობს მინიმუმ კოდირების ზოგიერთი ჩართული.
Facebook საერთოდ გამოყენებული დაშიფვრა მომხმარებლის სახელები და პაროლები,
მაგრამ, როგორც კი თქვენ შევხედე თქვენი pokes ან შეტყობინებებს, ან თქვენი ამბები feed,
ყველა რომ იყო unencrypted.
ასე იყო Gmail სანამ მხოლოდ წელიწადში ან 2 წინ.
ნებისმიერ დროს თქვენ ხართ შესული სისტემაში, დიახ, ისინი გამოყენებული უსაფრთხო შიფრირების,
მაგრამ შემდგომ ისინი არ გაჩერდნენ. და რატომ შეიძლება რომ იყოს?
რატომ არა მხოლოდ გამოიყენოს კრიპტოგრაფიის ყველა დროის გამოყენების შემთხვევებში ასე?
რა არის ეს? ვფიქრობ გავიგე რაღაც. [სტუდენტი] სიჩქარე.
სიჩქარე, არა? არსებობს გზები გარშემო.
მაგრამ თუ უბრალოდ სახის დაფიქრდით ლოგიკურად, თუ გაშიფრავს რაღაც,
ამისათვის მინიმუმ ცოტა მეტი მუშაობა.
In pset 2 როდესაც თქვენ განხორციელებული Caesar ან Vigenere ან თუნდაც კრეკი,
უბრალოდ ბეჭდვა სიმებიანი შედარებით ადვილი.
Encrypting და შემდეგ დაბეჭდვის სიმებიანი მინიმალურად მოითხოვს ცოტა მეტი მუშაობა.
>> იყიდება სუპერ პოპულარული საიტებზე, როგორიცაა Google და Facebook,
თუ თქვენ გაქვთ უფრო მეტი მუშაობის თითოეული მომხმარებლის ამისთვის თითოეული ვებ გვერდზე ისინი მოინახულებენ,
რომ მხოლოდ იღებს უფრო CPU დრო.
და თუ გჭირდებათ მეტი CPU დროს, თქვენ ალბათ საჭიროა მეტი სერვერები,
რაც იმას ნიშნავს, თქვენ ალბათ საჭიროა მეტი ფული.
და ასე მრავალი წლის განმავლობაში ამ უბრალოდ ნამდვილად არ იყო საუკეთესო პრაქტიკა.
ხალხი გამოიყენოთ SSL შიფრირების მხოლოდ მაშინ, როდესაც ისინი საჭირო.
მაგრამ აღმოჩნდა, და როგორც ამ თანამემამულე ერთად Firesheep გააკეთა სუპერ წმინდა,
როდესაც თქვენ ბიჭები რომლებიც ამჟამად Facebook-ზე ახლა -
აქედან ცნობისმოყვარეობა, ვნახოთ თუ თქვენ fess up.
თუ თქვენ წლის Facebook ახლავე ზოგიერთ tab, თუნდაც ეს არ foregrounded,
თქვენი URL HTTP ან HTTPS?
[მრავალჯერადი სტუდენტებს] S. S? [სიცილის]
Okay. ნებისმიერი HTTP? მხოლოდ 1? Okay.
ასე რომ ყველა ჩვენგანი შეიძლება hack რომ Guy Facebook-ის ანგარიშის ახლავე.
უმეტესწილად ეს გახდა ჩართული იყოს, ყოველ შემთხვევაში ზოგიერთი საიტებზე.
და გრძელი ამბავი მოკლედ, თუ თქვენი ვებ Traffic არ არის დაშიფრული,
არა მხოლოდ ამჯამად HTML უკან და მეოთხე მასშტაბით WiFis unencrypted,
ასე რომ რამ, როგორიცაა Cookies უკან და მეოთხე მთელი საჰაერო
ყოველგვარი ფორმის კოდირებით.
ასე რომ, თუ თქვენ გაქვთ უბრალოდ ცოტა პროგრამირების საზრიანი ან ცოტა Googling უნარები
მოძიების უფასო პროგრამული უზრუნველყოფის რომ აკეთებს ამას, ყველა თქვენ უნდა გააკეთოთ იჯდეს Starbucks
ან იჯდეს აეროპორტში, სადაც ის ჩვეულებრივ unencrypted WiFi
და მხოლოდ მიაქციოს Keywords მოსწონს Set-Cookie: PHPSESSID ან
რადგან თუ თქვენ გაქვთ ტექნიკური საზრიანი უბრალოდ უყუროთ WiFi
ყველა ბიტი, რომ ნაკადის მასშტაბით საჰაერო ამ ნიმუში,
შეგიძლიათ შემდეგ ამბობენ, რომ გაი ს PHPSESSID ხდება იყოს bo8dal და სხვ.
და მერე ისევ თუ თქვენ საკმარისად ტექნიკურად საზრიანი ან აქვს უფლება ინსტრუმენტი,
შეგიძლიათ შემდეგ მხოლოდ reconfigure თქვენი საკუთარი ბრაუზერის დაიწყოს წარდგენის რომ მხრივ შტამპი
to Facebook.com და Facebook უბრალოდ აპირებს ვივარაუდოთ, რომ თქვენ, რომ ბიჭს
რადგან ყველა იციან არ არის ვინ ხარ შენ, არამედ, რომ თქვენ ეს უნიკალური იდენტიფიკატორი.
ასე რომ, თუ თქვენ იპარავს, რომ უნიკალური იდენტიფიკატორი და წარადგინოს იგი სერვერზე როგორც საკუთარ,
ისინი უბრალოდ აპირებს აჩვენოს, რომ პირის ამბები Feed
ან რომ პირის შეტყობინებები ან pokes.
>> და მინდა Google ახლა როგორ გაააქტივოთ HTTPS Facebook-ალბათ.
მაგრამ ეს ნამდვილად არ არის, როგორც მარტივი, როგორც რომ.
და ასე Facebook და Google და მოსწონს არ მიღებული მართლაც კარგი ამ,
მაგრამ შენარჩუნება თვალის ყველა მეტი ნებისმიერი საიტებზე თქვენ ესტუმრებით, რომ არ იყენებენ HTTP
და გარკვეული სახის მგრძნობიარე ინფორმაციას მათ,
თუ არა ფინანსური ან პირადი ან ანალოგიური.
თუ ისინი არ იყენებენ ამ, საკმაოდ შესაძლოა შეიძლება Cookies მოსწონს ეს ძალიან ადვილად მოპარული
და შემდეგ ყალბი და ეს ზუსტად რა Firesheep გააკეთა.
თქვენ არ უნდა იყოს პროგრამისტი.
ყველა თქვენ უნდა გაეკეთებინათ იყო არ ინტერნეტ კავშირს, download this უფასო ინსტრუმენტი,
და რა იქნებოდა გააკეთოთ თქვენ შეხვიდეთ სისტემაში და მაშინ გაჩვენებთ Facebook სახელები
ყველას წელს Sanders, ამ კონკრეტულ დემონსტრირება, თქვენს გარშემო
და ყველა თქვენ უნდა გაეკეთებინათ იყო დააწკაპუნეთ მათი სახელი და პროგრამული ავტომატიზირებულია პროცესი
საქართველოს sniffing რომ ფუნთუშა, წარდგენის მას Facebook როგორც საკუთარ,
და, voila, თქვენ ხართ შემოსული
ასე რომ, ეს არის კიდევ ერთი იმ "არა ამ" ოფიციალურად.
თუ თქვენ გაქვთ თქვენი საკუთარი სახლის ქსელში და გსურთ Tinker, ყველა საშუალებით,
მაგრამ გააცნობიეროს ეს იმას გადაკვეთა ხაზი უნივერსიტეტის გარემოში.
>> მაგრამ მიზანი აქ მართლაც აღვნიშნო არ როგორ უნდა გააკეთოს ამ
მაგრამ როგორ დაიცვან წინააღმდეგ ასეთი რამ.
და ტრივიალური გამოსავალი აქ, მიუხედავად იმისა, რომ თავად არის სრულყოფილი,
არის ნამდვილად შეამციროს ნებისმიერი საიტებზე რომ არ იყენებთ HTTPS მუდმივად.
ამიტომ საიტებზე როგორიცაა Facebook და Google სულ უფრო აქვს checkboxes
სადაც შეგიძლიათ აირჩიონ წელს ამ სახის რამ,
და ბანკებს არ ჰქონდათ ამ წლების განმავლობაში, ამ მიზეზით.
ასე რომ მხოლოდ ცოტა შიშის ფაქტორი თუ შეგვიძლია. მაგრამ ეს მას მოკლედ.
ასე სერვერი ახსოვს ვინ ხარ შენ.
და როგორც კი მახსოვს ვინ ხარ შენ, ისინი მახსოვს არაფერი თქვენ
რომ პროგრამისტი არ ინახება შიგნით ამ სპეციალური superglobal მოუწოდა $ _SESSION.
და pset 7 ჩვენ იყენებს trivially უბრალოდ უნდა გვახსოვდეს, int,
კერძოდ უნიკალური პირადობის მომხმარებლის რომელმაც შესული სისტემაში,
ასე რომ, ჩვენ ვიცით, რომ ისინი უკვე იქ ადრე.
ნებისმიერი კითხვები შემდეგ სხდომებზე ან Cookies ან მოსწონს?
Firesheep არ მუშაობს ისევე აღარ,
და თქვენ უნდა დააყენოს თქვენი კომპიუტერის შევიდა სპეციალური Promiscuous რეჟიმი
ამიტომ თქვენ ფაქტობრივად მოსმენის სატრანსპორტო გარდა თქუენგან.
ასე რომ, თუ თქვენ გაკეთებული ჩამოტვირთვის Firesheep, გააცნობიეროს ეს არ საკმაოდ მარტივი
როგორც ეს ადრე იყო იმის დემონსტრირება.
ყველა უფლება. და არა ის Sanders. ამის გაკეთება სახლში.
მონაცემთა ბაზა.
ერთი რამ ჩვენ გააკეთა pset 7 სრულიად შეგნებულად
იყო ჩვენ გაძლევთ ნიმუში მონაცემთა ბაზა მაგიდა წევრებს, რომ აქვს გარკვეული მომხმარებლის პირადობის,
ზოგიერთი მომხმარებლის სახელები და ზოგიერთი დაშიფრული პაროლები მასში.
და როგორც თქვენ ნახავთ, თუ არ უკვე, თქვენ აპირებს აქვს შეცვალოს მაგიდასთან ცოტა.
თქვენ აპირებთ უნდა დაამატოთ რაიმე cache თითოეულ წევრებს ამ მაგიდასთან,
და თქვენ ვაპირებთ უნდა დაამატოთ კიდევ ერთი ისტორია მაგიდასთან, პორტფელების მაგიდა,
ან ალბათ ეძახით რაღაც.
მაგრამ თვალსაზრისით ფიქრი როგორ გააკეთებს, მოდით გახსენით ეს ინსტრუმენტი
რომელიც ჩვენ გამოყენებული პარასკევს, მაგრამ თუ უცნობ, ელექტრო გააჩნია ინსტრუმენტი
მოუწოდა phpMyAdmin რომელიც ერთსა დაწერილი PHP,
მაგრამ მისი მიზანი ცხოვრებაში, შემდეგ მე, შედით აქ როგორც jharvard ერთად ჟოლოსფერი,
არის მომეცი მოსახერხებელი გზა ათვალიერებენ და იცვლება ჩემი მონაცემთა ბაზა.
>> მონაცემთა ბაზა, რომელიც მე გაშვებული ელექტრო ეწოდება MySQL.
ეს არის ძალიან პოპულარული, და ეს უფასო ღია კოდის მონაცემთა ბაზა, რომელიც არის ულამაზესი მარტივი,
განსაკუთრებით წინა დამთავრდა მოსწონს ეს.
რა ამ ინსტრუმენტი საშუალებას ჩემთან გავაკეთოთ, მაგალითად, არის poke გარშემო მაგიდები.
ნება მომეცით წავიდეთ წინ და ამის გაკეთება.
პარასკევს შევქმენით მაგიდა მოუწოდა სტუდენტებს, რომ იყო სუპერ მარტივია.
მას ჰქონდა 3 მწკრივი - პირადობის მოწმობა, სახელის, და ელ - და მე ხელით ჩასმული რამდენიმე რიგები
მოსწონს დავით და მაიკ ამ კონკრეტულ მაგალითს.
ავიღოთ ეს ცოტა შემდგომი, და მოდით ვივარაუდოთ, რომ ჩვენ გვინდა გვახსოვდეს მეტი
ვიდრე უბრალოდ სახელი და ელექტრონული ფოსტის შესახებ მომხმარებელს.
ნება მომეცით დააწკაპუნეთ სტრუქტურა აქ ზედა.
ისევ და ისევ, pset დადის თქვენ მეშვეობით საჭირო ნაბიჯები აქ,
ასე არ ინერვიულოთ, თუ ზოგიერთი ამ ოდნავ სწრაფი.
მაშინ მე ვაპირებ დააწკაპუნეთ აქ.
მე ვაპირებ დაამატოთ ზოგიერთი მწკრივების რიცხვი შემდეგ ელ
რადგან მინდა დაამატოთ რაღაც სახლი.
დამავიწყდა ჩაწერას სტუდენტის სახლი.
ნება მომეცით დააჭირეთ წადი, და ახლა გვაქვს ამ ფორმით, რომ სამწუხაროდ არის პატარა ფართო მარცხნიდან მარჯვნივ,
მაგრამ მე ვაპირებ მოვუწოდო სახელი ამ სფეროში სახლი,
და მაშინ ტიპის მე ახლა უნდა აირჩიოთ.
მოდით აქვს მოკლე სტატისტიკა შესახებ სხვადასხვა ტიპის MySQL-ში
რადგან მაშინ როდესაც PHP არის სუსტად აკრეფილი და ეს ერთგვარი უკრავს სწრაფი და ფხვიერი ერთად ტიპის,
მონაცემთა ბაზაში განსაკუთრებით ეს სუპერ მნიშვნელოვანია რეალურად გამოიყენოს აკრეფით თქვენი უპირატესობა
რადგან ერთი რამ MySQL და სხვა მონაცემთა ბაზის ძრავები შეუძლია გააკეთოს თქვენთვის
არის უზრუნველყოფა, რომ თქვენ არ დააყენა ყალბი მონაცემები თქვენს მონაცემთა ბაზაში.
ეს არის ერთგვარი თავისუფალი შეცდომა შემოწმების ხელმისაწვდომი.
>> ბინის ჩვენ აშკარად არ გვინდა, რომ იყოს int, რომელიც 32-bit ღირებულების MySQL.
ჩვენ გაიგო მოკლედ პარასკევს შესახებ varchar, რომელიც დგას ცვლადი სიგრძის char.
რა არის ეს? ეს გაძლევთ საშუალებას, რომ გსურთ ეს უნდა იყოს სიმებიანი რაიმე სახის.
თქვენ ნამდვილად არ ვიცი წინასწარ რამდენი ხანი არის,
ამიტომ ჩვენ თვითნებურად ამბობენ სახლში სახელი შეიძლება 255 სიმბოლოს,
მაგრამ თქვენ შეიძლება წავიდეთ ერთად 32, 64 - ნებისმიერი რაოდენობის ნამდვილად.
მაგრამ უპირატესობა გამოყენებით varchar მეტი საველე მოუწოდა char არის რა?
უბრალოდ ინტუიციურად თუ გადახვევა ქვემოთ აქ, შეამჩნია იქ char და იქ varchar.
Varchar არის ცვლადი სიგრძის char; char არის ფიქსირებული სიგრძის char.
ასე რომ ემყარებოდეს მხოლოდ, რომ განმარტება, რა უპირატესობა ან მინუსი თითოეული ამ?
სხვა სიტყვებით, რომელიც ზრუნავს განსხვავება, ან რატომ უნდა იზრუნოს?
>> Yeah. [სტუდენტი] varchar აქვს მეტი მოქნილობა, მაგრამ იკავებს მეტი მეხსიერება.
კარგი. Varchar იკავებს მეტი - ვნახოთ. მე არ ვარ დარწმუნებული, თუ გავიგე, რომ უფლება.
შეგიძლიათ აცხადებენ, რომ კიდევ ერთხელ?
[სტუდენტი] მე ვთქვი varchar ალბათ უფრო მეტი მოქნილობა, მაგრამ ეს იკავებს მეტი მეხსიერება.
საინტერესო. Okay. Varchar ალბათ გაძლევთ მეტი მოქნილობა, მაგრამ იკავებს მეტი მეხსიერება.
ეს უკანასკნელი არ არის აუცილებლად ჭეშმარიტი.
ეს დამოკიდებულია კონტექსტში, მაგრამ მოდით, დაუბრუნდეს, რომ.
>> [Inaudible სტუდენტი საპასუხოდ] ზუსტად.
სინამდვილეში საქმე რომ char იქნება, როგორც წესი, გამოიყენოთ მეტი მეხსიერების
რადგან char, ისევე როგორც C, ჰგავს სიმებიანი, ეს მასივი სიმბოლო.
ასე რომ, თუ თქვენ ამბობთ char სფეროში სიგრძე 255,
მონაცემთა ბაზა სიტყვასიტყვით აპირებს მოგცემთ 255 სიმბოლო.
და თუ სახლი მთავრდება მყოფი Mather და 6 სიმბოლოს სულ,
თქვენ გაყვანაა დაახლოებით 200 სიმბოლო.
>> ამიტომ varchar ეფექტურად მხოლოდ იყენებს, როგორც ბევრი პერსონაჟების როგორც საჭიროა
მდე მაქსიმალური თანხა.
მაგრამ ფასი იხდით რეალურად შესრულება, პოტენციურად.
თუ იცით წინასწარ, რომ ყველა თქვენი სტრიქონები ვაპირებთ იყოს 8 გმირები -
მაგალითად, ვარაუდობენ, რომ გჭირდებათ პაროლები სიგრძის 8 -
Upside გამოყენების char სფეროში ხანდახან, თუმცა ხშირად არ,
არის დაზუსტება ფიქსირებული სიგრძე რაღაც მოსწონს დაგავიწყდათ
რადგან ახლა მონაცემთა ბაზაში შეიძლება იყოს თუნდაც სასურველი სტუმარი გახდებით.
თუ იგი დარწმუნებულია, რომ ყველა char სფეროში, ყოველ string in სვეტი არის იგივე სიგრძის,
თქვენ უკან თვისება შემთხვევითი წვდომის.
თქვენ შეგიძლიათ ხტომა გარშემო შორის სხვადასხვა სფეროებში char თქვენს მონაცემთა ბაზაში ცხრილის
რადგან ვფიქრობ მონაცემთა ბაზაში, როგორც სტრიქონები და სვეტები.
ასე რომ, თუ ყველა ერთი სიმები არის იგივე სიგრძის,
თქვენ იცით, რომ პირველი არის byte 0, შემდეგი ერთი არის byte 8
და შემდეგ 16 და შემდეგ 24 და სხვ.
ასე რომ, თუ ყველა სიმები არიან იმავე სიგრძის, შეგიძლიათ ხტომა გარშემო ბევრად უფრო ეფექტურად.
ასე რომ შეიძლება იყოს სარგებელი თვალსაზრისით შესრულების,
მაგრამ, როგორც წესი, თქვენ არ ფუფუნების იცის წინასწარ,
ასე varchar არის გზაა გასავლელი.
აქ არის კიდევ ერთი დეტალი, თუნდაც Facebook შეუვარდნენ საბოლოოდ.
Ints დიდი და ჩვენ ერთგვარი მათი გამოყენება იყოს ნებისმიერ დროს გვინდა ნომერი,
მაგრამ ეს მხოლოდ 32 ბიტი.
>> და მიუხედავად იმისა, Facebook ამჯამად არ აქვს საკმაოდ 4 მილიარდი მომხმარებლებს ახლა,
იქ აუცილებლად რაღაც ხალხი არსებობს მრავალი ანგარიშები
ან ანგარიშებზე რომ გაიხსნა და შემდეგ დაიხურა,
და ასე Facebook თავად მჯერა რამდენიმე წლის წინ იძულებული გახდა გადასვლას int
დან, როგორც ეს aptly მოუწოდა, bigint, რომელიც მხოლოდ 64 ბიტი ნაცვლად.
ასე რომ ესეც დიზაინი გადაწყვეტილება.
თქვენ იქნებოდა საოცრად გაუმართლა, თუ თქვენი საბოლოო პროექტის უხვევს ჩატვირთვის,
უკვე 4 მილიარდი და 1 მომხმარებლებს, მისცეს ან მიიღოს,
ამ შემთხვევაში გამოყენებით ints შეიძლება იყოს პატარა shortsighted.
მაგრამ სინამდვილეში, თქვენი მომხმარებლებს მაგიდასთან ალბათ ჯარიმა ints.
მაგრამ რაღაც pset 7, როგორიც თქვენი ისტორია მაგიდასთან,
თქვენ ალბათ ათასობით, მილიონობით მომხმარებლებს თუ განვითარება შევიდა etrade.com.
ასე რომ, მაშინ როდესაც თქვენ შეიძლება არ აქვს მეტი, ვიდრე 4 მილიარდი მომხმარებლებს,
იმ მომხმარებლებს თქვენ გვაქვს შეიძლება მეტი გვაქვს 4 მლრდ გარიგებების დროთა განმავლობაში -
ყიდულობს და ყიდის და რამ მათი ისტორიის.
ასე რომ თუ მოსალოდნელია - ისევ, ეს არის კარგი პრობლემებს აქვს თუ თქვენ გაქვთ ამ ბევრად მონაცემები -
თუ მოსალოდნელია მონაცემები აღემატება ზომა int,
მიმდინარეობს რაღაც bigint არის მიმართულებით არ ხშირად საკმარისი მიერ მიღებულ დიზაინერებს
რადგან ხალხი ფიგურა რომ არ იქნება პრობლემა,
მაგრამ ამ მარტივი ამოირჩიოთ უფრო დიდია, ვიდრე, რომ.
ათობითი ჩვენ უწოდოს pset 7, რომელიც განსაზღვრავს ფიქსირებული სიზუსტით
ასე რომ თქვენ შეგიძლიათ თავიდან ასაცილებლად საკითხები, რომლებიც ეხება მოძრავი და ორადგილიანი და reals და მოსწონს.
>> და მერე იქ რაღაც სხვა სფეროებში აქ. ჩვენ ტალღა ჩვენს ხელში მათ გარკვეულწილად.
მაგრამ ვადები, ჯერ ყველას გვაქვს დადგენილი ფორმატის MySQL,
და უპირატესობა შენახვის თარიღების როგორც თარიღები და არ varchars
იმას ნიშნავს, რომ მონაცემთა ბაზაში შეიძლება რეალურად reformat მათთვის სხვადასხვა ფორმატში,
თუ არა აშშ ფორმატში, ან ევროპულ ფორმატში ან ანალოგიური - თუმცა გნებავთ -
ბევრად უფრო ეფექტურად, ვიდრე თითქოს რამოდენიმე generic varchar.
და მერე იქ რაღაც სხვა ორობითი, varbinary, Blobs.
ეს არის ორობითი დიდი ობიექტები, და ასევე შეგიძლიათ შეინახოთ ორობითი მონაცემები
ისევე როგორც გეომეტრიული მონაცემების მონაცემთა ბაზაში.
მაგრამ ჩვენთვის ჩვენ ჩვეულებრივ აინტერესებს ints და varchars და მოსწონს.
მოდით დავამთავროთ ეს მაგალითი სახლი.
სახლი მე ვაპირებ თვითნებურად ამბობენ იქნება 255 სიმბოლო.
მაშინ, ნაგულისხმებია შეგვეძლო ამის გაკეთება.
ჩვენ შეგვეძლო იყოს დააყენა ყველას Mather სახლი, მაგალითად.
ასე ჩვენ შეგვიძლია დავაზუსტოთ, რომ მონაცემთა ბაზაში
უნდა უზრუნველყოს, რომ ვიღაცას ყოველთვის აქვს მნიშვნელობა. მაგრამ მე დავტოვებთ, რომ იყოს.
ფაქტიურად, ადამიანები, რომლებიც ცხოვრობენ off კამპუსში და არა სახლი,
იქნებ მე ნამდვილად გინდათ დააკონკრეტა, რომ ნაგულისხმები მნიშვნელობა სახლი NULL,
და მაშინ მე უნდა შეამოწმოთ ამ ყუთი და ვუთხრა მონაცემთა ბაზაში ეს okay, თუ მომხმარებლის სახლში არის NULL.
>> ისევ და ისევ, ეს არის კიდევ ერთი თავდაცვის მექანიზმი შეგიძლიათ დასვა ადგილი
ასე რომ თქვენ არც კი უნდა დააყენოს იგი თქვენს PHP კოდი აუცილებლად.
მონაცემთა ბაზა, რომელიც უზრუნველყოფს, რომ ყველაფერი ან არ ხართ null.
და მერე ბოლოს, ატრიბუტები.
არცერთი რეალურად შესაბამისი.
ორობითი, ხელმოუწერელი - არც იმ შესაბამისობაში varchar.
ინდექსი.
ვინმეს იცის ან გახსოვთ ან აქვს ამოიცნობთ, თუ რა არის ინდექსი
ამისთვის რაღაც სახლში?
ესეც რეალურად მნიშვნელოვანია და შედარებით ადვილი დიზაინი გადაწყვეტილება.
მათთვის, ვინც ჯერ არ მინახავს ეს, პარასკევს ჩვენ ვისაუბრეთ მოკლედ შესახებ პირველადი გასაღები.
მონაცემთა ბაზაში მაგიდა, პირველადი გასაღები არის საველე ან სვეტი
რომ ცალსახად განსაზღვრავს სტრიქონების მაგიდასთან.
ასე რომ, მიმდინარე მაგიდა გვაქვს პირადობის მოწმობები, გვაქვს სახელები და წერილებს.
რომელიც იმ არის საუკეთესო კანდიდატი უნდა იყოს ძირითადი გასაღები,
რომელთა როლი ცალსახად იდენტიფიცირება რიგები?
ალბათ ID.
სავარაუდოდ, ჩვენ შეგვიძლია აგრეთვე გამოიყენოს რა თუმცა?
იქნებ თქვენ შეიძლება გამოიყენოთ ელ რადგან თეორიულად ეს უნიკალური
თუ ადამიანებმა მათ გაზიარებას Email ანგარიშები.
მაგრამ რეალობა ის არის, რომ თუ თქვენ იყენებთ რიცხვითი ID მოსწონს 1234,
რომ მხოლოდ 32 ბიტი, ხოლო ელექტრონულ მისამართზე შეიძლება იყოს ამ ბევრი bytes ან ამ ბევრი bytes.
ამიტომ თვალსაზრისით ეფექტურობის უნიკალური identifiers,
ეს tends უნდა იყოს კარგი პრაქტიკის უბრალოდ გამოიყენოს int
მაშინაც კი, თუ თქვენ გაქვთ ზოგიერთი სიმებიანი კანდიდატი, რომელიც თქვენ შეიძლება გამოიყენოთ სავარაუდოდ.
>> რაღაც მოსწონს სახლი, ეს არ უნდა იყოს პირველადი გასაღები
რადგან მაშინ მხოლოდ 1 ადამიანს ცხოვრობენ Mather და 1 პირი კურიერის და მოსწონს.
ანალოგიურად, ეს არ უნდა იყოს უნიკალური.
სხვაობა პირველადი და უნიკალური ის არის, რომ იმ შემთხვევაში, თუ ჩვენი დღევანდელი სუფრის,
ID იქნებოდა პირველადი, არამედ ელ არ არის პირველადი მიზეზით ჩვენ მხოლოდ აღნიშნული -
სპექტაკლი - მაგრამ ეს უნდა კვლავ იყოს უნიკალური.
ასე რომ თქვენ შეგიძლიათ კვლავ აღასრულებს უნიკალურობა გარეშე მიღების პრეტენზია
რომ სუპერ მნიშვნელოვანია პირველადი სფეროში.
მაგრამ ეს ერთი საკმაოდ გამოსადეგი: ინდექსი.
თუ იცით წინასწარ თქვენი საბოლოო პროექტი, ამისთვის pset 7, ან ზოგადად,
რომ ამ სფეროში სახლში იქნება რაღაც ძიება ლოტი
გამოყენებით არჩევა სიტყვით ან რაღაც,
მაშინ preemptively გითხრათ ბაზაში მუშაობა მისი ჯადოსნური
და დარწმუნდით, რომ ეს ქმნის მეხსიერებაში ნებისმიერი ლამაზი მონაცემები სტრუქტურების აუცილებელი
რათა დააჩქარონ ძიება ეფუძნება სახლი.
ალბათ, გამოიყენებს hash მაგიდა, იქნებ გამოიყენებს დაკავშირებული სიაში.
სინამდვილეში, ეს tends გამოიყენოს ხე, ხშირად სტრუქტურა ეწოდება B ხე -
არ ორობითი ხე მაგრამ B-tree - რომელიც არის ძალიან ფართო ხე
რომ თქვენ შეიძლება ვხედავთ კლასის მოსწონს CS124, მონაცემები სტრუქტურების კლასი.
მაგრამ მოკლედ, თქვენ არ ფიქრი, რომ როდესაც გამოყენებით smart მონაცემთა ბაზის პროგრამული უზრუნველყოფა.
შეგიძლიათ უბრალოდ ვუთხრა მას, "ინდექსი ამ სფეროში, რათა შემიძლია ძიება იგი უფრო ეფექტურად."
>> თუ თქვენ დატოვეთ ეს off და თქვენ ცდილობენ ძებნის ყველასათვის მონაცემთა ბაზაში, რომელიც ცხოვრობს Mather,
იგი გადაეცემა შევიდა ხაზოვანი ძებნა.
და თუ თქვენ მოხვდით 6,000 undergrads ყველა მცხოვრები ზოგიერთი სახლი,
თქვენ აპირებს ძებნის მთელი მაგიდა მოძიების Matherites,
ხოლო თუ ვიტყვით, ინდექსი, იმედია ეს იქნება რაღაც ახლოს ლოგარითმული ძებნა
იპოვოს იმ სახის სტუდენტებს.
ეს არის მხოლოდ თავისუფალი ფუნქცია ჩართოთ,
მიუხედავად იმისა, რომ ამჯამად მოდის at ფასი ზოგიერთი თანხის სივრცეში.
და ბოლოს, auto-წუთობრივი, ამ AI სფეროში,
რომელიც უბრალოდ ნიშნავს, თუ ის int და არ გსურთ ზრუნვა უნდა იყოს იგი თავის
ყოველ ჯერზე იქ ახალი ხარ, შეამოწმეთ,
და ყოველი მომხმარებლის რომ იღებს ჩასმული ავტომატურად მიიღებთ ახალ ID.
მოდით დააჭირეთ Save და ახლა მოდით მოვძებნოთ ბრალია ამ დიზაინის.
თუ მე წასვლას დათვალიერება შეამჩნევთ, რომ ორივე მაიკ და ჩემი სახლი არის NULL.
შემიძლია phpMyAdmin რედაქტირება ამ ხელით.
შემიძლია წავიდეს აქ და ტიპის Mather და შემდეგ დააჭიროთ,
და ახლა შეამჩნია მაგიდა განსხვავებულია.
მაგრამ შეამჩნია მე შეეძლო რაღაც ისევე.
დავითის ID არის 1, ასე phpMyAdmin ერთხელ არის მხოლოდ ადმინისტრაციული ინსტრუმენტი;
ეს არ არის რაღაც თქვენი მომხმარებლებს ოდესმე აპირებს ვხედავ.
ასე რომ, თუ მე ნაცვლად დააწკაპუნეთ SQL tab up დაბრუნება -
და ისევ, pset 7 გააცნობს თქვენ მეტი ასეთი queries -
შემიძლია ხელით შესრულდეს SQL სტრუქტურირებული შეკითხვის ენა ბრძანება
UPDATE მომხმარებლებს SET სახლი = 'Pfoho "სად id = 1.
ეს SQL queries არიან, ლამაზად საკმარისი, საკმაოდ იკითხება მარცხნიდან მარჯვნივ.
განაახლოთ მომხმარებლებს მაგიდა, მითითებული სფეროში მოუწოდა სახლში Pfoho
სადაც მომხმარებლის ID არის 1.
ან შემეძლო ამის გაკეთება, სადაც ელექტრონული ფოსტის = 'malan@harvard.edu'.
ასე რომ სანამ რომ ცალსახად განსაზღვრავს ჩემთვის, რომ იმუშავებს ასევე.
მაგრამ ID tends უნდა იყოს უმაღლესი შესრულებით, ისე მოდით, რომ.
მოდით დააწკაპუნეთ გადავიდეთ. Okay, lecture.users არ არსებობს. რა არის ჩემი შეცდომა?
რა არის მაგიდა რეალურად აქ უწოდებენ?
ეს მოუწოდა სტუდენტებს მხოლოდ იმიტომ, რომ ის, რაც ჩვენ გავაკეთეთ აქ ზედა მარცხენა.
ეს მოუწოდა სტუდენტებს, არ მომხმარებლებს. ასე რომ დააჭირეთ გადავიდეთ არის.
1 row დაზარალებული. შეკითხვის აიღო 0.01 წამში.
თუ მე დააჭირეთ Browse ახლა არის Malan ცხოვრობს Pfoho.
ასე რომ კიდევ ერთი გემო SQL, მაგრამ pset იქნება ფეხით თქვენ მეშვეობით უფრო მეტს რომ.
>> არსებობს სულელური გადაწყვეტილების მე უკვე გააკეთა აქ.
მინდა ამტკიცებენ, რომ ეს მონაცემთა ბაზა დიზაინი არაეფექტური
რადგან მეტი ადამიანი დავამატო სტუდენტებს მაგიდა,
მეტი us დავიწყო დასძინა, უფრო TFs დავიწყო დასძინა,
ჩვენ ვაპირებთ დავიწყოთ რა redundancies ამ მაგიდასთან?
>> Yeah. [სტუდენტი] დაინახა, რომ ეს წელს სტუდენტები, ჩვენ იგივე [inaudible]
იგივე - მარჯვენა, ზუსტად.
ასე რომ, თუ 400 ადამიანი ცხოვრობს Mather, მისცეს ან მიიღოს,
საბოლოოდ, ამ მაგიდის აპირებს აქვს 400 რიგები, რომ ამბობენ "Mather", "Mather,"
"Mather", "Mather", "Mather".
ჩვენ გაყვანაა ყველა ამ ბაიტი, და იქ რამდენიმე takeaways არსებობს.
1, არსებობს გიჟები კუთხეში შემთხვევაში, თუ ვინმე იხდის ბევრი ფული
და სურს Mather, ჩვენ ახლა უნდა შეიცვალოს მთელი ჩვენი მონაცემთა ბაზის ცხრილს.
ეს არ მოხდება ხშირად, თუმცა Pfoho ერთხელ მოუწოდა ჩრდილოეთ სახლი 15 წლის წინ,
ასე რომ ხდება. მაგრამ ეს არ არის ყველა, რომ მყარი.
სხვა მყარი ვიდრე კუთხეში შემთხვევაში, როგორიცაა, რომ საქართველოს სჭირდება განახლება მონაცემები დაყრით
ამისთვის მონაცემთა ბაზა რატომ შენახვის Mather ისევ და ისევ და ისევ და ისევ?
სწორედ უამრავი სიმბოლო, 6 სიმბოლო.
ვერ ვაკეთებთ კი უკეთესად რომ, განსაკუთრებით Pforzheimer?
რა თქმა უნდა შეგვიძლია უკეთესად რომ ბევრი სიმბოლო.
რატომ არა მხოლოდ გაერთიანების უნიკალური იდენტიფიკატორი თითოეული სახლი
და მაღაზიაში რომ თითოეული ხარ? მოდით ცდილობენ ამ.
იმის ნაცვლად, რომ უბრალოდ გამოიყენოთ სტუდენტები მაგიდა, ნება მომეცით ახვიდეთ ჩემი ლექცია ბაზაში up აქ ზედა მარცხენა.
გაითვალისწინეთ აქ ნათქვამია შექმნა მაგიდასთან.
ნება მომეცით შექმნა ახალი ცხრილი მოუწოდა სახლები.
მწკრივების რიცხვი იქნება 2. შეიყვანეთ.
ახლა 2 სფეროებში.
მე ვაპირებ მოვუწოდო ამ სახელს, და ეს იქნება varchar სიგრძის 255,
>> მაგრამ ეს საკმაოდ თვითნებური. ნება მიბოძეთ ამ ქვევით აქ კონვენციას.
ასე დააყენა ID აქ. მოდით მივცეთ ყველა სახლი უნიკალური იდენტიფიკატორი.
მოდით მივცეთ ყველა სახლი სახელი.
მოდით დავაზუსტოთ, რომ იდენტიფიკატორი იქნება ხელმოუწერელი მხოლოდ კონვენციის მხოლოდ დადებითი ციფრები.
მოდით წავიდეთ წინ და მისცეს ამ auto-ნამატი სფეროში ახლა.
და გვჭირდება არაფერი?
მოდით წავიდეთ წინ და დააჭირეთ Save.
ახლა მეორე მაგიდასთან.
გაითვალისწინეთ როგორც განზე ეს ოდნავ cryptic SQL ბრძანება
რომ თქვენ არ მოუხდა ხელით თუ არ იყენებს ადმინისტრაციული ინსტრუმენტი, როგორიცაა phpMyAdmin.
ასე რომ კიდევ ერთი მიზეზი ვიყენებთ მას.
ეს შესანიშნავად სასარგებლო სახის pedagogically რადგან თქვენ შეგიძლიათ დააჭიროთ გარშემო
და გაერკვნენ, თუ როგორ რამ მუშაობა მხოლოდ გადაწერა და pasting რა phpMyAdmin გააკეთა.
მაგრამ CREATE TABLE ბრძანება არის ის, რაც იყო მხოლოდ შესრულებული, და აქ არის ჩემი მაგიდა.
ნება მომეცით წავიდეთ წინ ახლა და გამოიყენოთ ნედლეული SQL ვიდრე oversimplify დაწკაპვით ჩასმა tab.
ნება მომეცით არ INSERT INTO სახლები,
და მე ვაპირებ ვთქვა სახელით სახლში აპირებს აქვს ღირებულება 'Mather ".
ეს არის ის. ეს სინტაქსი არის ცოტა მეტი cryptic.
ეს არის სახელწოდება სფეროებში ჩვენ გვინდა ჩადეთ.
ეს არის ღირებულებები გვინდა INSERT INTO იმ სფეროებში. ნება მომეცით დააჭირეთ გადავიდეთ.
1 row ჩასმული აიღო 0.02 წამში. ნება მომეცით დააჭირეთ Browse არის.
>> გაითვალისწინეთ თუ დააწკაპუნეთ ნუსხა არსებობს Mather, რომლის ID არის ავტომატიზაციის ნომერი 1.
ნება მომეცით გავაკეთოთ კიდევ ერთი. ნება მომეცით წასვლას SQL tab.
INSERT INTO სახლები. სახელი სახლის აპირებს აქვს ღირებულება Pfoho და სხვ.
გადავიდეთ. და შემიძლია აკეთეთ ეს კიდევ ერთხელ და ისევ და ისევ.
ან თუ მოგწყინდება გამოყენებით phpMyAdmin, შეგიძლიათ უბრალოდ გამოიყენოთ ჩასმა tab
და არ უნდა აკრიფოთ ნედლეული SQL.
შეგიძლიათ უბრალოდ Bang ის უფრო სწრაფად აკრეფით, მაგალითად, კურიერის, მიუთითოთ,
და ახლა თუ ჩვენ დააჭირეთ ნუსხა არსებობს კურიერის ერთად პირადობის 3.
ასე რომ, ეს არის ის, რაც ჩვენ ვგულისხმობთ ავტო იყოს.
მაგრამ ახლა ჩვენ დაფიქსირება რაღაც სტუდენტებს.
სტუდენტთა რა უნდა მონაცემები ტიპის სახლი სფეროში ახლა?
ეს უნდა იყოს int, არა?
ასე რომ მიზანი აქ არის ფაქტორი გარეთ, წინააღმდეგ შემთხვევაში, ცნობილია, როგორც ნორმალურ, მაგიდები
ასე, რომ ჩვენ არ ინფორმაციის შესანახად redundantly ნებისმიერ ჩემი მაგიდები.
ისევ და ისევ, ბილიკი ვიყავით აქ თქმას Mather, Mather,
Mather, Mather, Pfoho, Pfoho, Pfoho, Pfoho, რომელიც ძალიან გადაჭარბებული
თვალსაზრისით wastefulness of სიმბოლო.
ნება მომეცით, წავიდეთ წინ და შეცვალოთ ეს დაწკაპვით სტრუქტურა,
და ნება მომეცით წავიდეთ წინ და შეამოწმოთ off სახლი სფეროში, დააჭირეთ ცვლილება,
და ახლა მე ვაპირებ, რომ შეიცვალოს ეს უნდა იყოს int.
255 აღარ არის შესაბამისი.
ნება მომეცით წავიდეთ წინ და აცხადებენ, რომ ჯარიმა, თუ ის კვლავ null. შენახვა.
არის მაგიდა სტუდენტები შეიცვალა წარმატებით,
და შენიშნავს, კვლავ სახლი int.
როგორც განზე, იგნორირება ხმების ფრჩხილებში როდესაც საქმე ints.
>> ეს არის მემკვიდრეობა მიზეზები.
უკან დღეს, როდესაც თქვენ არ ჰქონდათ GUIs, თქვენს ნაცვლად ჰქონდა ბრძანების გარემო,
10 და 11 შესაბამისად მითითებული რამდენი სიმბოლოები უნდა ვაჩვენოთ
წელს ტერმინალი ფანჯარა რეალურად არიან სფეროებში.
მას არაფერი აქვს საერთო ცოტა სიგრძით ფაქტობრივი სფეროში, ამიტომ ჩვენ უბრალოდ იგნორირება, რომ ახლა.
ახლა წასვლას ამ მაგიდასთან.
და თუ დავით ცხოვრობს Mather, სახლი არ უნდა იყოს 0,
რაც სტანდარტულად int ღირებულების ყველაზე ახლოს null.
მან უნდა იცხოვროს სახლში 1.
მოდით თვითნებურად ამბობენ, რომ მაიკ ცხოვრობს Pfoho, ამიტომ სახლის ნომერი 2.
არის ჩემი მაგიდა გამოიყურება ცოტა მეტი cryptic.
მაგრამ განიხილავს ეფექტურობას.
მე ახლა გამოყენებით მხოლოდ 32 ბიტი იდენტიფიცირება სახლი,
რაც იმას ნიშნავს, არსებობს მხოლოდ 1 კანონიკურ განმარტებას ჩემს სახლში Mather და Pfoho
და ეს სახლებში მაგიდასთან.
ასე რომ, თუ მინდა ახლა დავუბრუნდეთ ამ ჩამონათვალმა, ვფიქრობ ეს ამ გზით.
აქ მე მაქვს ჩემი სტუდენტები მაგიდა, და მარჯვენა მხარეს არის ამ ნომრებზე, 1 და 2.
1 არის Mather, 2 არის Pfoho.
ჩვენ გვყავს იმ იგივე ციფრები ამ მაგიდასთან, რომელსაც სახლები,
1 და 2 და 3 შეეხება იმ 3 სახლები.
ის, რასაც ჩვენ ახლა ჩვენ უნდა აქვს უნარი კოდის, PHP და SQL,
დასალაგებლად of დავუბრუნდეთ ამ ჩამონათვალმა, სადაც თუ ეს სტუდენტები და ეს სახლები,
ჩვენ გვინდა როგორღაც დააკავშიროთ მათ ისე, რომ 1 ხაზების ერთად 1,
2 ხაზი ერთად 2, და ასე, რომ ჩვენ შეგვიძლია გაერკვნენ, სადაც დავით
და სადაც მაიკ და სადაც ყველას ცხოვრობს.
ამისათვის ჩვენ შეგვიძლია შევასრულოთ SQL query მოსწონს შემდეგ.
SELECT * FROM სტუდენტები შემოგვიერთდით სახლები -
და ახლა რა სფეროებში გვინდა შეუერთდეს შესახებ?
ამიტომ students.house = houses.id.
>> პატარა cryptic, მაგრამ ამ ნაწილში ნიშნავს სიტყვასიტყვით შექმნას ახალი დროებითი მაგიდა
რომ შედეგი გაწევრიანების სტუდენტებისა და სახლები.
და როგორ გსურთ დააკავშიროთ რჩევები ჩემი თითები აქ?
უცნობია სტუდენტთა სახლი სფეროში ტოლია სახლები 'ID სფეროში.
და თუ ახლა დააჭირეთ წადი, არ დავიბრუნებ ზუსტად რა იმედი მქონდა რომ.
დავით არის Mather, მაიკ არის Pfoho, და მე ასევე ვხედავ უნიკალური identifiers.
მაგრამ საქმე ის არის, ახლა კი ისეთი სრული მაგიდასთან.
და ასე takeaway აქ pset 7 ან ნამდვილად საბოლოო პროექტი:
თუ თქვენთვის, რომ თქვენ შენახვა ნებისმიერი ნაჭერი ინფორმაციას redundantly,
თუ არა ეს სახლი, ალბათ ეს ქალაქი, სახელმწიფო, და ZIP
აქ ZIP შეიძლება ჩვეულებრივ, მაგრამ არა ყოველთვის იქნება გამოყენებული როგორც უნიკალური იდენტიფიკატორი,
არ გავლა exercise გონებრივად და შემდეგ რაღაც phpMyAdmin
საქართველოს ფაქტორინგი, რომ საერთო მონაცემები რადგან განსაკუთრებით როგორც თქვენი ნახვა უფრო კარგად გამოიყენა
და უფრო პოპულარული, ასე რომ თქვენ დარწმუნდით, რომ ყველაფერი სუპერ სწრაფი,
მიერ მიცემის მონაცემთა ბაზაში, როგორც ბევრი მინიშნებები როგორც უნიკალურობა რაც შეიძლება.
ეს იყო ბევრი.
ნებისმიერი კითხვები? ყველა უფლება. ავიღოთ 5 წუთიანი შესვენება და გადაჯგუფების.
ყველა უფლება.
შემდეგი არის მაგალითი იმისა, რომ გამოყენებული იქნა რამდენიმე წლის წინ, როდესაც მე მივიღე CS161,
რომელიც ოპერაციული სისტემა კლასის კოლეჯში
რომელიც ცნობილია, რომ საოცარი, მაგრამ გიჟები სამუშაოს მოცულობასთან დაკავშირებით,
და ეს აქცენტს ნამდვილად ზოგიერთ დაბალი დონის პრობლემები, რომლებიც წარმოიქმნება ოპერაციული სისტემები
და ასევე კი სამყაროში ბაზაში.
>> ამბავი რომ მითხრეს ჩემი პროფესორი, მარგო Seltzer, რომ წელს შემდეგნაირად.
დავუშვათ, რომ თქვენ გაქვთ პატარა dorm მაცივარი თქვენთვის და თქვენი roommate
და ორივე თქვენ ნამდვილად რძე.
ასე, რომ თქვენ მოვიდა სახლში კლასის ერთ დღეს, თქვენი roommate არ არის იქ,
თქვენ გახსნა მაცივარი, და ხვდები, "ო Damn, ჩვენ გარეთ რძე."
ასე, რომ თქვენ დახურეთ მაცივარი, ფეხით გასწვრივ ქუჩიდან CVS
და მიიღონ უფრო და უფრო ხანგრძლივი ხაზები შესაძენად გარკვეული რძის საათზე CVS.
ამასობაში, თქვენი roommate მოდის სახლში მისი კლასის,
ძალაში ოთახი, ხსნის მაცივარი ნამდვილად სურს ზოგიერთი რძე,
ხსნის მაცივარი, "Damn, არ რძე".
ასე რომ მას მთლიანად ან ნაწილობრივ ხურავს მაცივარი, დადის out კარი, და ღებულობენ ABP
ან სადმე, გარდა CVS სადაც თქვენ არ ვაპირებთ bump შევიდა ერთმანეთს
წასვლა მიიღოთ გარკვეული რძე.
რა თქმა უნდა, რამდენიმე წუთის შემდეგ, ორივე თქვენ სახლში
და ახლა თქვენ გაქვთ ორჯერ იმდენი რძე, როგორც თქვენ რეალურად სურდა.
და მიმდინარეობს რძე, ახლა კი აპირებს ცუდი რადგან მოგწონთ რძე
მაგრამ თქვენ ნამდვილად არ მოსწონს რძე, ისე ახლა თქვენ გაქვთ ძალიან ბევრი რძე, ამიტომ აპირებს Sour.
ეს არის საშინელი, საშინელი სიტუაცია.
რა შეეძლო მოგვარდება ამ predicament თუ იყო პირველი roommate სახლში? დიახ.
[სტუდენტი] თქვენ უნდა არ დაუტოვებიათ შენიშვნა. [სიცილის]
კარგი. თქვენ უნდა არ დაუტოვებიათ შენიშვნა.
თქვენ უნდა დააყენოს Post-ის შენიშვნა ან ანალოგიური სიტყვებით "Gone ამისთვის რძე,"
და შემდეგ თქვენი roommate კონცეპტუალურად იქნებოდა ჩაკეტილი გარეთ რეალურად აკეთებს, რომ.
ან თქვენ შეიძლება გადასვლა 1 ნაბიჯი შემდგომი.
თქვენ შეიძლება სიტყვასიტყვით ჩაკეტვა მაცივარი რამდენიმე სახის ბოქლომს,
და ახლა თქვენი roommate იქნება სიტყვასიტყვით იკეტება გარეთ მაცივარი.
თუ ჩვენ განზოგადება თავში პროგრამირება,
შეგიძლიათ თითქმის ვფიქრობ მაცივარი როგორც გარკვეული სახის ცვალებად და struct,
რაღაც კონტეინერი ინფორმაციაზე.
პრობლემის ძირეულად აქ არის ის, რომ ორივე თქვენგანი მიეცათ შეამოწმოს
ან წაიკითხა სახელმწიფო ამ მონაცემების სტრუქტურას,
მაგრამ თქვენ გახსნილია ის სხვადასხვა დროს და ჯერ ორივე მიიღე თუ არა გადაწყვეტილება
დაფუძნებული სახელმწიფო მსოფლიოს იმ სხვადასხვა მომენტები დროში.
ასე ჰქონდა თქვენ ჩაკეტილი მაცივარი, თქვენ იქნებოდა მინიმუმ აცილებული თქვენი roommate
საწყისი რომელმაც შეძლო შეამოწმოს სახელმწიფოს მსოფლიოში,
ამიტომ იგი ვერ გააკეთეს, რომ იგივე გადაწყვეტილება.
ასე მონაცემთა ბაზა, როგორც ირკვევა, ეს პრობლემა მუდმივად.
>> მოდით ვნახოთ, თუ შევძლებთ მშენებლობა სცენარი.
დავუშვათ, რომ თქვენ ერთგვარი ცუდი ბიჭი და მიდიხარ ბანკი ამერიკის
ან ერთი სხვა ადგილებში მოედანზე რომ აქვს რამდენიმე ბანკომატები თალიზში,
და რატომღაც თქვენ figured out როგორ დუბლიკატი ბანკომატის ბარათი - არა ყველა რთული.
უბრალოდ მაგნიტურ ზოლზე.
და ა.შ. რა გსურთ ცდილობენ გააკეთოთ ითამაშე
რომლითაც თქვენ დააყენა 1 ბარათი 1 მანქანა, მეორე ბარათი მანქანით,
და თქვენ არსებითად შევეცდები სახსრების მოხსნის პარალელურად,
რადგან ეჩვენება, რომ ამბავი მიდის შემდეგნაირად.
მანქანა მარცხენა იღებს ბარათი და თქვენი PIN,
და მაშინ ამბობენ, "მომეცი $ 100."
ბანკომატით არის პროგრამირდება პირველი გავაკეთოთ არჩევა თავის მონაცემთა ბაზაში ან ექვივალენტი -
რასაც მონაცემთა ბაზაში ის გამოყენებით - დაინახოს ამჯამად ამ მომხმარებლის მინიმუმ $ 100 მისი ანგარიში?
თუ ასეა, მაშინ Spit out $ 100 და სხვაობა 100 $ მათი ბალანსი.
მაგრამ, რა თქმა უნდა, თუ არსებობს მრავალი მანქანები აქ ან მრავალჯერადი გზები შემოწმების
სახელმწიფოს, რომ მსოფლიოში, საბანკო სარდაფით,, რამდენად ბევრი ფული გაქვთ,
ვარაუდობენ, რომ უბრალოდ შემთხვევით მანქანა მარცხენა და მარჯვენა
ორივე ვთხოვო, რომ კითხვაზე უხეშად იმავე მომენტში დროში.
>> და ეს შეიძლება მოხდეს, რა თქმა უნდა. ბანკომატები are კომპიუტერები ამ დღეებში.
ასე რომ, თუ მანქანა მარცხენა ამბობს: "დიახ, თქვენ გაქვთ მინიმუმ $ 100,"
ამასობაში მანქანა მარჯვენა ამბობს: "დიახ, თქვენ გაქვთ მინიმუმ $ 100,"
მაშინ ორივე მათგანი გაგრძელება დასრულება მათ პროგრამებს და ფაქტობრივად Spit out $ 100
და ვთქვათ, "წინასწარ გქონდათ $ 200."
"ნება მომეცით განაახლოთ ცვლადი ახლა $ 100 დარჩა ანგარიშზე."
მაგრამ თუ ორივე მათგანი შემოწმდება თქვენი ანგარიშის ბალანსი და აღმოაჩინა, რომ ის $ 200
და ორივე მათგანი მაშინ ნუ მათემატიკის და ამბობენ 200 - 100,
მანქანები არ პოტენციურად Spit ორი $ 100 გადასახადები თითოეულ მანქანა,
მაგრამ ისინი მხოლოდ ახლდება თქვენი თანხა ანგარიშის ბალანსი იქნება $ 100.
სხვა სიტყვებით, თქვენ ამოყვანა $ 200, არამედ იმიტომ, რომ დაათვალიერა სახელმწიფო მსოფლიოს
ერთდროულად და შემდეგ მივიღეთ გადაწყვეტილება ეფუძნება, რომ ღირებულება,
მათ, შესაძლოა, არ გააკეთებს მათემატიკის საბოლოოდ სწორად.
ასე რომ, ბანკი სიტუაცია ძალიან ნამდვილად გსურთ გარკვეული სახის lockout
ასე რომ როგორც კი თქვენ შემოწმდება სახელმწიფო ზოგიერთი ცვლადის
რომ მართლაც მნიშვნელოვანია, ისევე როგორც თქვენი ანგარიშის ბალანსი,
ნუ ვინმეს მიიღოს გადაწყვეტილება ეფუძნება, რომ სანამ თქვენ კეთდება აკეთებს თქვენი რამ,
აქ ამ შემთხვევაში თქვენ ბანკომატით მარცხენა.
Lock ყველას გარეთ.
თქვენ შეგიძლიათ რეალურად მივაღწიოთ ამ მიზნით რამდენიმე განსხვავებული გზები.
>> უმარტივესი გზა MySQL არის ხაზზე SQL რომ მივეცით თქვენ
პრობლემის კომპლექტი სპეციფიკაცია, რომელიც გამოიყურება ზუსტად მოსწონს ეს.
INSERT INTO მაგიდა - რასაც ეს მოუწოდა - პირადობის მოწმობა, სიმბოლო, და წილი, ნომერი აქციების,
შემდეგ ფასეულობებს, მაგალითად.
თუ არ წაიკითხა სპეც ჯერჯერობით, ეს არის მაგალითი, რომელშიც მონაწილეობას მიიღებენ როგორ დადიხართ შესახებ
ყიდულობენ 10 აქციები ამ Penny საფონდო პრეზიდენტ Skroob,
რომლის მომხმარებლის ID ხდება იყოს ნომერი 7?
ეს ამბობს INSERT INTO მაგიდასთან შემდეგ პირადობის მოწმობა, სიმბოლო, და ნომერი აქციების
7, 'DVN.V', და 10.
მაგრამ - მაგრამ, მაგრამ, მაგრამ - მეორე ხაზი არის მნიშვნელოვანი.
ON დუბლიკატი KEY UPDATE აქციების = აქციების + ფასეულობების (აქციების).
ამიტომ სრულიად cryptic-looking ერთი შეხედვით.
მაგრამ ის ფაქტი, რომ ამ SQL query, მიუხედავად იმისა, რომ დასრულდება გადატანა 2 ხაზი,
არის 1 ხანგრძლივი შეკითხვის, ეს ნიშნავს, რომ ატომურ
იმ გაგებით, რომ ამ შეკითხვის ან შესრულდება ყველა ერთად თუ არა ყველა.
და განმარტებას MySQL, ასე ისინი განხორციელდა ამ შეკითხვა.
ეს არის განმარტება სახელმძღვანელო გარანტირებული შეასრულოს ერთდროულად ან საერთოდ არ.
მოტივაცია ამ ასეთია.
თუ ამ შემთხვევაში თქვენ ცდილობთ ყიდვა 10 აქციების საფონდო,
ეს სახის იმავე ამბავს, როგორც რძე, ეს სახის იმავე ამბავს როგორც ბანკომატიდან.
>> თუ შეცდომა არ იყენებს ამ სინტაქსის
მაგრამ ნაცვლად შერჩევის მონაცემთა ბაზიდან რომ ნახოთ რამდენი აქციების ამ Penny საფონდო
ამჯამად პრეზიდენტ Skroob აქვს, და ვარაუდობენ, რომ მას აქვს 10 აქციები,
და შემდეგ რამდენიმე გაყოფილი მეორე მოგვიანებით თქვენ მაშინ UPDATE განაცხადი,
რაც კიდევ ერთი განცხადება SQL რომ ამბობს წავიდეთ წინ და დაამატოთ 10 მეტი აქციები
მისი ამჟამინდელი 10 ისე, რომ იდეალურად სულ არის 20,
პრობლემა ის არის, რადგან დღევანდელ მონაცემთა ბაზის სისტემები და რადგან დღევანდელ კომპიუტერები
თქვენ გაქვთ მრავალჯერადი პროცესორები, მრავალჯერადი ბირთვით -
სხვა სიტყვებით, კომპიუტერები შეგიძლიათ სიტყვასიტყვით უნდა აკეთებს მრავალჯერადი რამ ერთდროულად -
არსებობს არავითარი გარანტია, რომ თქვენი SELECT და თქვენი UPDATE ამ შემთხვევაში
ვაპირებთ მოხდეს უკან უკან.
ასე რომ ცუდი სცენარი იქნება, რასაც აკეთებთ SELECT
რომ ნახოთ თუ რამდენი აქციების ამ Penny საფონდო ამჯამად Skroob აქვს,
და შემდეგ მხოლოდ ნაწილობრივ სხვა მონაცემთა ბაზის მოთხოვნის შესრულებულია -
იქნებ მისი Skroob სხვა ბრაუზერის ფანჯარაში შესყიდვას ცდილობდა 10 აქციები
სხვა ფანჯარა საერთოდ, ჰგავს ბანკომატით -
და ვარაუდობენ, რომ კიდევ ერთი შეკითხვის იღებს შორის SELECT და UPDATE.
ეს შეიძლება იყოს საქმე, რომ Skroob ახლა კარგავს გარკვეული რაოდენობის აქციების
რადგან მეორე პროცესი შემოწმების სახელმწიფო მისი მსოფლიოში,
ან იგი იღებს უფრო მეტი იზიარებს, ვიდრე მას უნდა ჰქონდეს.
ჩვენ არ წასვლას რომლებიც საქართველოში სწორედ ის, რაც იმ კონკრეტულ ამბავს ხაზები იქნება,
მაგრამ საქმე ის არის, თუ თქვენ უნდა შეამოწმოთ ცვლადები ღირებულება და შემდეგ მიიღოს გადაწყვეტილება,
თუ არსებობს რისკი ვინმე აკეთებს რაღაცას შორის 2 განცხადებებს,
როგორც შეიძლება მოხდეს multiprocessor სისტემები, წელს multicore სისტემები,
კომპიუტერები უნარით გავაკეთოთ მრავალჯერადი რამ ერთბაშად, ცუდი რამ შეიძლება მოხდეს
მოსწონს საბანკო ანგარიშებზე მიმდინარეობს debited არასწორად, გაყიდვა ორჯერ იმდენი რძე,
ან ამ შემთხვევაში არასწორი რაოდენობის აქციების.
მაგრამ ადვილი გზა ფიქრი ამ.
>> თურმე SQL ასევე მხარს უჭერს, თუ თქვენ დააკონფიგურიროთ თქვენი მაგიდასთან სწორად,
რაღაც მოუწოდა გარიგებები, რომლებიც მინდა ამტკიცებენ სინამდვილეში კი ადვილია მესმის
ვიდრე ამ, მაგრამ ეს არ 1 ლაინერი, ამიტომ რეალურად უფრო მეტი ჩართული.
არსებობს სიტყვასიტყვით განცხადება SQL მოუწოდა START ოპერაციის.
ისევე როგორც არსებობს SELECT, განახლება, ჩადეთ, წაშლის და შეუერთდით და bunch of სხვები,
არსებობს საკვანძო სიტყვები მოსწონს START ოპერაციის.
და რას მაშინ ნუ კონტექსტში pset 7 -
თქვენ არ უნდა გავაკეთოთ ეს pset 7; ის მკაფიოდ იხსნის როგორც აუცილებელი არ არის,
მაგრამ საბოლოო პროექტების შეიძლება იყოს სასარგებლო -
თუ რეკავთ შეკითხვის დაწყების გარიგებას და შემდეგ კიდევ ერთი შეკითხვის
და შემდეგ კიდევ ერთი შეკითხვის და შემდეგ კიდევ ერთი, მეორე, და მეორე,
იმ შეკითხვებს არ რეალურად შესრულდება მანამ, სანამ თქვენ მოვუწოდებთ SQL განაცხადი ჩაიდინოს,
სადაც წერტილი, თუ არა ეს 2 განცხადებებს ან 20 განცხადებებს, ისინი ყველა შესრულდება ერთდროულად,
რაც იმას ნიშნავს, არავინ შეიძლება შემთხვევით ყიდვა ძალიან ბევრი რძე ან სადებეტო ძალიან ბევრი ფული
ან ყიდვა ძალიან ბევრი იზიარებს, რადგან ყველა თქვენს შეკითხვებს განახორციელებს
თავში დაბრუნება თავში დაბრუნება.
და ეს არის სუპერ მნიშვნელოვანია, განსაკუთრებით მაშინ, როდესაც თქვენ აკეთებთ რაღაც მსგავსი.
ეს არის თვითნებური მაგალითად რომ ამბობს მოდით განაახლოთ საბანკო ანგარიშზე
მიიღწევა ბალანსი ტოლია ბალანსი - $ 1000, სადაც ანგარიშის ნომერი არის 2.
და მაშინ მეორე განაცხადი არის მოდით შეიტანოს, რომ $ 1000
შევიდა სხვისი საბანკო ანგარიშზე, რომლის ანგარიშის ნომერი არის 1.
>> სხვა სიტყვებით, ეს არის მაგალითი თუ სად გვინდა დავრწმუნდეთ
რომ ორივე ამ განცხადებებს მოხდეს ან საერთოდ არ
რადგან სხვაგვარად მომხმარებელს აპირებს მისაღებად ბრალია
და თქვენ აპირებს საკუთარი ფული და არ შეიტანოს იგი სხვაგან,
ან ბანკი აპირებს მისაღებად ბრალია სადაც თქვენ აპირებთ შეიტანოს ფული
მაგრამ არა რეალურად სხვაობა ის მომხმარებლის ანგარიშზე.
ასე რომ გსურთ ორივე შეასრულოს ერთად.
ამდენად შედის მსოფლიოს ტრანზაქციებზე.
ასე რომ რაღაც შენარჩუნება უკან თქვენი აზრით,
არა იმდენად მიზნებისათვის მხოლოდ საბოლოო პროექტი,
მაგრამ თუ გსურთ თქვენი საბოლოო პროექტის სადღაც,
თუ გსურთ დავიწყოთ ზოგიერთი კომპანიის ირგვლივ,
თუ გსურთ გადაჭრის ზოგიერთი სტუდენტი ჯგუფის პრობლემაა კამპუსში
და რეალურად ცოცხალი, აქტიური ნახვა, ეს არის ერთგვარი დახვეწილი შეცდომები, რომ, შესაძლოა, წარმოიშვას
თუ თქვენ არ საკმაოდ ვფიქრობ მეშვეობით რა შეიძლება მოხდეს, თუ 2 ადამიანი
ცდილობთ თქვენი ვებ სიტყვასიტყვით იმავე მომენტში დროში,
რომლითაც მათ შეკითხვებს შეიძლება სხვაგვარად მისაღებად interwoven.
>> მზად არის, რომ JavaScript, teaser მისი?
ეს არის ჩვენი ბოლო ენის სემესტრში. ყველა უფლება.
საბედნიეროდ, JavaScript გამოიყურება ძალიან, ძალიან, ძალიან ჰგავს 2 ენებზე, C და PHP,
ჩვენ გავაკეთეთ დღემდე.
იქ არ არის JavaScript in pset 7, მაგრამ ეს წარმოუდგენლად სასარგებლო ინსტრუმენტი
როდესაც საქმე აკეთებს ვებ დაფუძნებული საბოლოო პროექტების ან მართლაც უბრალოდ ვებ პროგრამირების ზოგადად.
ამიტომ სწრაფი მიმოხილვა რაღაც მოუწოდა DOM.
აქ არის სუპერ მარტივი ვებ გვერდზე რომ მართლაც მხოლოდ ამბობს hello, world
როგორც სათაური და სხეულში.
როგორც წანაცვლება უკვე ვარაუდით, გარკვეული დროის,
იქ მართლაც იერარქიაში ვებ გვერდებზე.
მე ვერ გავამახვილო იგივე Snippet of HTML როგორც ხე,
ფიქრი თავში ჩვენი დისკუსიების მონაცემთა სტრუქტურების C, შემდეგნაირად.
მაქვს ზოგიერთი სპეციალური root node მოუწოდა დოკუმენტი კვანძში,
და ვნახავთ, ანალოგი ამ JavaScript რაღაც მომენტში.
პირველი შვილი და მხოლოდ ბავშვი, რომ ამ შემთხვევაში არის HTML ტეგი.
იქ არ არის პირდაპირი აგეგმვითი doctype.
სწორედ განსაკუთრებული რამ, ამიტომ ჩვენ უნდა ნუ მიაქცევთ ყურადღებას, როდესაც საქმე ამ DOM,
ამ დოკუმენტის ობიექტური მოდელის ხე.
გაითვალისწინეთ, რომ HTML ტეგი, რომელიც მე გამოსახული თვითნებურად როგორც მართკუთხედი,
ჰყავს 2 შვილი: უფროსი და სხეულის.
>> ეს არის ასეთივე შედგენილი როგორც ოთხკუთხედს.
ეს არის აზრიანი pictorially რომ ხელმძღვანელი არის მარცხენა სხეულის.
გავლენა არის, რომ უფროსი მოდის პირველი ხე.
ასე რომ სინამდვილეში შეკვეთით to ხე, როდესაც თქვენ მიაპყროს მას მოსწონს,
მიუხედავად იმისა, ფორმის და whatnot are თვითნებური.
უფროსი იმავდროულად აქვს ერთი ბავშვის მოუწოდა სათაური,
და სათაური რეალურად აქვს საკუთარი შვილი, რომელიც არის "Hello, World",
რაც მე განზრახ მიიპყრო როგორც ოვალური აქ რათა ის ოდნავ განსხვავდება მართკუთხედი.
ეს მართკუთხედების არიან ელემენტები, ხოლო hello, მსოფლიოში მართლაც ტექსტი კვანძში.
ასე რომ კვანძის in ხე, მაგრამ სხვადასხვა ტიპის კვანძში
ამიტომ მიიპყრო იგი თვითნებურად განსხვავებულად.
ანალოგიურად ამჯამად ორგანო აქვს ბავშვის მოუწოდა hello, world, ისევე,
ამიტომ სხვადასხვა კვანძის მიუხედავად იმისა, ისინი ერთსა და იმავე ტექსტს,
მაგრამ მე შედგენილი ეს იგივე ფორმის. ასე რომ, ვინც ზრუნავს?
ისე, რა ლამაზი შესახებ HTML არის ის, რომ აქვს ამ იერარქიული ბუნება.
და რაც ლამაზი შესახებ JavaScript და განსაკუთრებით ბიბლიოთეკების, რომლებიც თავისუფლად ხელმისაწვდომია
და პოპულარული მოსწონს jQuery, შეგიძლიათ ნავიგაციისათვის ხის სტრუქტურაში ისე საოცრად მარტივია.
ნებისმიერი პერსონალის ჩვენ გააკეთა C ერთად მაჩვენებლებისა და traversing ხეები და recursing on კვანძების
მარცხენა ბავშვის უფლება ბავშვის, უეცრად ჩვენ შეგვიძლია სახის თავისთავად
როგორც საოცრად საგანამანთლებლო თუ არა ცოტა იმედგაცრუებაა
მაგრამ არა თითქმის ეფექტური გზაა გასავლელი შესახებ პროგრამირების.
და ა.შ. ამ უმაღლესი დონის ენებს, როგორიცაა JavaScript
ჩვენ შევძლებთ ამ ნავიგაცია ხე გაცილებით უფრო ინტუიციურად.
>> მართლაც სინტაქსი იქნება საკმაოდ ნაცნობი.
თუ თქვენ არასოდეს მინახავს JavaScript ადრე, ეს მართლაც კარგია მინიშნება
საწყისი Mozilla FOLKS, ადამიანები, რომლებიც Firefox,
ასე რომ შეგიძლიათ დაათვალიეროთ, რომ თქვენს მოხერხებულობისთვის.
რა თქვენ იპოვით - და ეს სლაიდები იდენტურია, რაც ჩვენ გამოიყენება სხვა დღე -
ანალოგიურად, მთავარ გაქრა.
ასე რომ, როდესაც ვწერთ პროგრამის JavaScript, არ არსებობს მთავარ ფუნქციას.
თქვენ უბრალოდ წერა კოდი.
მაგრამ გასაღები განსხვავება შორის JavaScript და C და PHP
ის არის, რომ მაშინ როდესაც C და PHP დღემდე არ აღსრულებულა სერვერის მხარეს
მიერ ელექტრო ამ შემთხვევაში ან საერთოდ მიერ სერვერზე,
JavaScript მიერ დიზაინის ჩვეულებრივ ახორციელებს ბრაუზერში.
სხვა სიტყვებით, თქვენ ალბათ წერენ JavaScript კოდი, როგორც ჩვენ შესახებ,
on სერვერი ელექტრო მოწყობილობების, მაგრამ თქვენ, რომელშიც შედიოდა შორის თქვენი HTML, მათ შორის თქვენი CSS,
შორის თქვენი GIFs და თქვენი PNGs და თქვენი JPEGs
ასე რომ, როდესაც მომხმარებლის სტუმრობს თქვენს ვებ გვერდზე, თუ თქვენ იყენებთ JavaScript,
რომ JavaScript კოდი მოდის სერვერიდან ბრაუზერის,
და ეს ბრაუზერი, რომ რეალურად ახორციელებს მას.
ასე რომ, ეს აქვს გააზრებული გავლენა კი ინტელექტუალური საკუთრების.
ეს სახის სულელური კი ვიფიქროთ დაცვის თქვენი IP როდესაც საქმე JavaScript კოდი
რადგან ბუნებით ენის იგი იღებს შესრულებული ჩვეულებრივ ბრაუზერში მხარეს.
>> შეგიძლიათ obfuscate ის, რაც იმას ნიშნავს, შეგიძლიათ მას ასე გიჟური და უსახური
რომელზეც არ whitespace, საშინელებაა ცვლადი სახელები, რათა ის უფრო რთული ხალხს მოიპარონ თქვენი IP,
მაგრამ გასაღები არის, რომ ეს შესრულებული ბრაუზერის მხარეს.
მიუხედავად იმისა, რომ როგორც განზე JavaScript შეიძლება გამოყენებულ სერვერის მხარეს,
ყველაზე გავრცელებული გამოყენების შემთხვევაში ახლავე მაინც ბრაუზერში.
აქ არის ის, რაც გამოიყურება. აქ არის თუ-სხვაგან თუ-სხვაგან მშენებლობა ისევე, როგორც C, ისევე, როგორც PHP.
აქ არის ლოგიკური გამოხატულებაა, როდესაც თქვენ "ან" 2 რამ ერთად.
აქ არის, როდესაც თქვენ "და" 2 რამ ერთად.
აქ არის შეცვლა განაცხადი, რომელიც მსგავსია PHP
in, რომ თქვენ შეგიძლიათ გადახვიდეთ სხვადასხვა ტიპის ფასეულობები.
მარყუჟების ანალოგიურად აქვთ მარყუჟების აქ, რომელიც სტრუქტურულად იდენტურად რომ რასაც ჩვენ ვხედავთ ადრე.
მიუხედავად იმისა, მარყუჟების, გვაქვს გავაკეთოთ ხოლო მარყუჟების.
ცვლადები, ოდესმე ასე ოდნავ განსხვავებული.
თქვენ განაცხადოს ცვლადები თქვენნაირი გავაკეთებთ PHP და C,
მაგრამ ანალოგიურად არის JavaScript სუსტად აკრეფილი.
თქვენ არ დააკონკრეტა int ან ათწილადი ან სიმებიანი ან არაფერი რომ ჩვეულებრივ.
თქვენ შეგიძლიათ მიუთითოთ var.
თქვენ არ დააკონკრეტა var, მაგრამ მას გამოძახილი თუ არ.
ჩვეულებრივ თუ გამომრჩეს var, თქვენ შემთხვევით შექმნა გლობალური ცვლადი ნაცვლად ადგილობრივი.
ნება მომეცით, შესთავაზოს, რომ თქვენ თითქმის ყოველთვის უბრალოდ, ვამბობთ var და შემდეგ სახელს ცვლადი.
ეს არ არის ისეთი ტიპის, უბრალოდ var ამისთვის ცვლადი.
ეს იქნება მაგალითი, თუ არა ის 123 ან "Hello, World".
კოლექტორები იმყოფებიან და syntactically მსგავსი PHP.
მე ვთქვა var ნომრები და შემდეგ გამოვიყენო კვადრატულ ფრჩხილებში ერთხელ განაცხადოს ცვლადი
რომელთა ტიპის მასივი, რომელსაც აქვს ამ კონკრეტულ ნომრები მას მძიმით.
და მერე ბოლოს, ეს არის მხოლოდ ერთი, რომ მართლაც გამოიყურება სხვადასხვა.
შეგახსენებთ, რომ PHP-ში ჩვენ განვახორციელეთ ასოციაციურ მასივში ამისთვის სტუდენტი
მოსწონს Zamyla რომ შესაძლოა ასე გამოიყურება, სადაც ცვლადი ეწოდება სტუდენტი.
კვადრატულ ფრჩხილებში ნიშნავს აქ მოდის მასივი.
>> იმისა, რომ მე არ იყენებს რიცხვითი მაჩვენებლები, მაგრამ სტრიქონები - პირადობის მოწმობა, სახლი და სახელი -
ნიშნავს, რომ ეს არის ასოციაციური მასივი,
და ამ ისრებით ერთად ტოლობის ნიშანი და დახრილი bracket
იმას ნიშნავს, რომ გასაღები არის "id", ღირებულება არის 1;
გასაღები არის "სახლი", ღირებულება არის WINTHROP სახლი;
გასაღები არის "სახელი", ღირებულება არის Zamyla Chan.
ასე რომ არსებობს 3 გასაღებები შიგნით ამ ასოციაციურ მასივში, რომელთაგან თითოეული აქვს საკუთარი მნიშვნელობა.
ჩვენ ვხედავთ, რომ pset 7, ან თქვენ მალე, წელს JavaScript იგივე იდეა,
მაგრამ აპირებს ასე გამოიყურება.
ასე var სტუდენტი - არ დოლარის ნიშანი და არის ნახსენები ტიპის ჯერ კიდევ მაგრამ var -
შეადგენს და შემდეგ გახსნა Curly braces რადგან JavaScript როდესაც თქვენ გასაღები მნიშვნელობის წყვილის,
თქვენ ნამდვილად გამოიყენოს რაღაც მოუწოდა ობიექტი.
და იმ თქვენ იქ რომ მიიღოს APCS ან ანალოგიური შეიძლება გავიხსენოთ ობიექტების ჯავის
ან მსგავსი ენებზე.
JavaScript არ არის ჯავა, პირველ რიგში.
ეს იყო მიზანმიმართული დიზაინი გადაწყვეტილება წლის წინ დაარტყა off რაღაც რომ იყო პოპულარული,
მისი სახელი, მიუხედავად იმისა, რომ მას არ აქვს ფუნდამენტური ურთიერთობა ჯავის თავად.
JavaScript აქვს ობიექტების, და თქვენ შექმნით მათ გზით Curly გაუწიოს ნოტაცია.
ობიექტების JavaScript არიან საკმაოდ ბევრი ექვივალენტი ასოციაციურ მასივები PHP-ში
როდესაც საქმე შენახვის მონაცემები შიგნით მათ.
>> მაგრამ კიდევ უფრო ძლიერი in JavaScript შეგიძლიათ გაერთიანდნენ ძალიან ადვილად ფუნქციები
შიგნით ობიექტი, მიუხედავად იმისა, რომ შეგიძლიათ გააკეთოთ ეს სხვა ენებზე,
ეს საკმაოდ გავრცელებული პარადიგმა, როგორც ვნახავთ.
მოკლედ, ეს ობიექტი წარმოადგენს სტუდენტი, რომელიც განსაკუთრებით Zamyla,
და ეს მსგავსი კონცეპტუალურად, უბრალოდ syntactically განსხვავდება ამ.
მოდით რეალურად გამოიყენოს JavaScript in ფაილი.
თურმე არსებობს Script ტეგით.
ჩვენ ვხედავთ სტილის tag და ჩვენ ვნახეთ სხვა HTML tags.
Script tag რეალურად იქნება შეიცავს რამოდენიმე JavaScript კოდი.
ნება მომეცით წასვლას ელექტრო სადაც ჩვენ გვაქვს კოდის წინასწარ გააკეთა.
მე არ posted იგი ჯერ კიდევ ნახვა, მაგრამ მე გავაკეთებ, რომ მას შემდეგ კლასი.
მოდით გახსენით ეს ერთი, blink.html.
უკან 1990 იყო სიტყვასიტყვით HTML tag მოუწოდა blink tag,
და ეს იყო ერთ ერთი ყველაზე შესანიშნავად overused tags ინტერნეტში
რის ნეტავ ეწვევა ზოგიერთი 1990 სტილი ვებ გვერდზე და დაიწყოს ხედავს ტექსტი flashing თქვენ ასე,
შედეგები მარკიზ tag, რომელმაც ტექსტი აპირებს მოსწონს ეს.
ერთი რამდენჯერმე სადაც მსოფლიოს ფაქტობრივად შეთანხმდნენ ვებ სტანდარტი,
ყველას მთელს ფორუმში მოკლეს blink tag რამდენიმე წლის წინ.
მაგრამ ჩვენ შეგვიძლია resurrect იგი JavaScript როგორც დემონსტრირება ძალა გაქვთ
როდესაც თქვენ შეგიძლიათ დაწეროთ პროგრამა შიგნით ვებ გვერდზე.
პირველი მოდით გამოტოვოთ მეტი ახალი პერსონალის და ფოკუსირება მხოლოდ წლის.
>> აქ არის ძველი პერსონალის ამ მაგალითს.
მაქვს HTML tag, ხელმძღვანელი tag, და სათაური ტეგით.
მერე აქვს სხეულის tag აქ div, რომელიც გაწვევას მხოლოდ მართკუთხა სამმართველოს გვერდზე
რომ მე მოცემული უნიკალური ID თვითნებურად საქართველოს "მისალოცი", რათა,
უბრალოდ ასე მაქვს გზა ცალსახად მოიხსენიებს, რომ რაღაც ძალიან მარტივი ტექსტი:
hello, world.
ახლა ნება მომეცით გადახვევა მდე ზევით ამ ფაილის და ვნახოთ რა არის ახალი.
პირველი, რაც ახალი up დაბრუნება არის Script tag,
და შიგნით Script tag გაფრთხილების მე განაცხადა ფუნქცია.
განაცხადოს ფუნქციის JavaScript, საკმაოდ მსგავსი PHP,
თქვენ სიტყვასიტყვით წერენ ფუნქცია მაშინ სახელით ფუნქცია, ფრჩხილებში,
და შესაძლოა გარკვეული არგუმენტები, თუ იგი იღებს ნებისმიერი.
მაშინ მაქვს ჩემი Curly გაუწიოს, როგორც ყოველთვის, და ახლა ჩვენ გვაქვს ოდნავ ახალი კოდი,
მაგრამ ვნახოთ რას ნიშნავს.
ასე var div, ამ უბრალოდ ნიშნავს მომეცი ცვლადში DIV.
მე შეეძლო უწოდა foo, მაგრამ მე მინდოდა, რომ მას ეწოდოს div
მიზეზით, რომ იქნება ნათელი მეორე.
მაშინ გამოდის, წელს JavaScript - და ეს არის JavaScript კოდი ჩართული ჩემი ვებ გვერდზე -
არსებობს სპეციალური გლობალური ცვლადი of ჯიშები მოუწოდა დოკუმენტი.
JavaScript ფაქტიურად ობიექტის ორიენტირებული ენა.
ჩვენ არ წასვლას დეტალურად 50 რაც იმას ნიშნავს, რომ,
მაგრამ ახლა ვიცი, რომ ობიექტი საკმაოდ ჰგავს struct.
როგორც ჩვენ ვნახეთ უკანა გზაზე, როცა ერთი ყველაზე ადრეული პრობლემა ადგენს
სადაც ჩვენ დააყენა ბევრი ინფორმაციის struct,
ანალოგიურად არის დოკუმენტურად სპეციალური struct რომ გააჩნია ბრაუზერის,
გააჩნია ნებისმიერ ვებ გვერდზე. ეს არ არის რაღაც მე შეიქმნა.
Inside ამ დოკუმენტის სტრუქტურა, თუმცა, თქვენ არა მარტო მონაცემები
მაგრამ თქვენ ასევე აქვს ფუნქციები.
>> და ნებისმიერ დროს თქვენ გაქვთ ფუნქციის შიგნით სტრუქტურა, შიგნით ობიექტი,
ეს მოუწოდა მეთოდი. მაგრამ ეს იგივე.
მეთოდი ფუნქცია რომ მხოლოდ ასე ხდება, რომ იყოს შიგნით რაღაც.
ასე რომ, ეს იმას ნიშნავს, რომ ამ სპეციალური გლობალური ცვლადში დოკუმენტი
აქვს ფუნქცია მოუწოდა getElementById რომ სიტყვასიტყვით არ რომ.
იგი მიიღებს თქვენ ელემენტს საწყისი DOM, დოკუმენტის ობიექტური მოდელის ხე,
რომლის ID არის ამ შემთხვევაში მისალმებები.
სხვა სიტყვებით, ყველა მაშინ ჩვენ დახარჯული მონაცემები სტრუქტურების ძალაში პიესა აქ.
ეს სურათის DOM რომ გვქონდა მომენტი წინ,
მიუხედავად იმისა, რომ გვერდზე არის პატარა სხვადასხვა, თუ მქონდა div ამ სურათში,
რა document.getElementById დაბრუნდნენ ჩემთან რომ ეფექტურად იყოს მაჩვენებელი
to ოთხკუთხედს ხე, მინიშნება ოთხკუთხედს ხე.
ასე რომ თუ რას ნიშნავს სინამდვილეში ერთი იმ ფუნქციებს.
ამ შემთხვევაში ისევ ის DIV. ეს არ არის სხეულის ან სათაური.
ასე რომ ვნახოთ რა მაშინ ვუყოთ div არის, რომ მე მას შიგნით ამ ცვლადში DIV.
თურმე ერთად JavaScript თქვენ გაქვთ უნარი tweak CSS თქვენს გვერდზე დინამიურად ვითარდება.
დღემდე, ყველა CSS ჩვენ გავაკეთეთ, თუმცა შეზღუდული, არის სტილის ატრიბუტები,
ან სადაც სხვაგან არ ჩვენ CSS?
I ტიპის გაფუჭებული, რომ ერთი. სტილში tag ზედა ფაილი.
ან მესამე ადგილი უკვე?
>> გარე ფაილი, რაღაც. CSS.
ასე რომ ეს ის 3 ადგილებში ჩვენ გავაკეთეთ CSS ჯერჯერობით
მაგრამ დაჭერა არის ჩვენ რთული კოდირებული ეს ყველაფერი.
თქვენ გადაწყვიტეთ, როგორც თქვენ dove შევიდა pset 7, გადავწყვიტეთ ადრე ლექციათა რა არის ჩვენი CSS იქნებოდა.
მაგრამ თუ თქვენ გსურთ შეცვალოთ თქვენი CSS, შეგიძლიათ რეალურად გავაკეთოთ, რომ
ერთხელ თქვენ ფაქტობრივი პროგრამირების ენაზე.
CSS, HTML - არ პროგრამირების ენები. JavaScript არის.
გამოდის, რომ როგორც კი თქვენ გაქვთ ერთი იმ მართკუთხედების საწყისი ხე
მოუწოდა DOM, მას თავად აქვს გარკვეული მონაცემები შიგნით მას.
ამიტომ div რომ მე მხოლოდ მოგვეწონა საწყისი ხე აქვს რა ჩვენ მოვუწოდებთ ქონების შიგნით ეს
მოუწოდა სტილი და სტილი უძრავი ქონება თავად საკუთრების მოუწოდა ხილვადობას.
მინდა იცოდეს ამ მხოლოდ ეძებს up CSS მომხმარებლის სახელმძღვანელო.
თურმე არსებობს ხილვადობას CSS ქონება აკეთებს იმას ნათქვამია მოხსენებაში.
იგი ქმნის რაღაც ხილული თუ არა, ხილული თუ არა.
და როგორ გავაკეთოთ, რომ ეს.
მე გეკითხებით პროგრამულად თუ ხილვადობას ამ div იმალება,
რა შევცვალო იგი? ხილული.
Else თუ ხილვადობას ამ გვერდზე არ არის გადამალული, ლოგიკურად მე რათა ის ფარული.
წარმოდგენა არ მაქვს, რატომ არის ხილული და ფარული და არ ხილული და უხილავი.
ეს იყო ცუდი დიზაინი გადაწყვეტილება გასწვრივ გზა.
მაგრამ ეს მართლაც opposites in CSS: ხილული და ფარული.
ყველა ამ ამჯამად არის, ეს ნიშნავს, შეცვალოს CSS ჩემი ფაილის on და off, on და off
ამ კონკრეტულ DIV.
თუმცა ისევ და ისევ, ეს ფუნქცია მოუწოდა blink. როდის ხდება blink ფუნქცია მოუწოდა?
თურმე არსებობს კიდევ ერთი სპეციალური გლობალური ცვლადში ფანჯარა,
მსგავსი სულისკვეთებით, რათა დოკუმენტი, მაგრამ იმის გამო, რომ დოკუმენტი ეხება თქვენს ვებ გვერდზე,
მოსწონს DOM ხე, HTML თქვენ იგზავნება სერვერზე,
ფანჯრის ეხება Chrome გარშემო, მისამართზე ბარი, სათაურის ზოლში,
და ყველა რომ პერსონალის გარშემო თქვენს ვებ გვერდზე.
>> და აღმოჩნდება, რომ ფანჯარაში ობიექტს გააჩნია სპეციალური ფუნქციის შიგნით მას მოუწოდა setInterval
რომ აკეთებს იმას, ნათქვამია მოხსენებაში.
ეს იქნება მითითებული ინტერვალის - ამ შემთხვევაში ყოველ 500 მილიწამებში -
და მიიღოს ამოიცნობთ, თუ რა არის ის აპირებს ყველა 500 მილიწამებში?
იგი აპირებს შეასრულოს, რომ ფუნქცია blink.
და რაც ლამაზი აქ არის ის, რომ ჩვენ შეეძლო ამ დო, მიუხედავად იმისა, რომ ჩვენ არასოდეს გააკეთა.
C აქვს რაღაც მოუწოდა ფუნქცია პოინტერები სადაც შეგიძლიათ გაივლის ფუნქციების გარშემო
როგორც არგუმენტები.
ანალოგიურად in JavaScript შეგიძლიათ გაივლის სახელით ფუნქცია შევიდა სხვა ფუნქცია.
და შეამჩნია რა ვაკეთებ. მე არ აკეთებენ.
თუ მე ზუსტად ფრჩხილებში შემდეგ blink, რომ ნიშნავს მოვუწოდებთ blink ფუნქცია.
თუ მე გამომრჩეს მათ, რაც იმას ნიშნავს, აქ არის blink ფუნქცია
ასე რომ setInterval შეიძლება ეძახით ყოველ 500 მილიწამებში.
ასე რომ საბოლოო ჯამში, ბარბაროსულ თუმცა, ის არის, რომ თუ წასვლას Localhost და წასვლა blink.html,
მე ახლა ამ ხდება ისევ და ისევ.
და თუ რეალურად შეამოწმოს ელემენტის, ვნახოთ, თუ ვხედავთ ამ.
ნება მომეცით შეამოწმოს ელემენტის, ნება მომეცით გადახვევა ქვემოთ უბრალოდ ცოტა,
ნება მომეცით აირჩიოს ელემენტები აქ, და შეამჩნია DOM შიგნით Chrome-ს ინსპექტორი.
ეს სიტყვასიტყვით შეცვლას უკან და მეოთხე ყოველ 500 მილიწამებში.
თუ ჩვენ ჩვენს მეგობარს Nate,
თუ თქვენ ოდესმე გვაინტერესებდა, როგორ მუშაობს, ანალოგიური იდეა ინტერვალი,
მაგრამ Nate ფაქტობრივად მიღების ძალიან ეფექტური გამოყენება ფერი ამ შემთხვევაში აქ.
მერე რა მეტი შეგვიძლია რეალურად ვუყოთ?
მოდით გახსენით კიდევ ერთი მაგალითია და ძიებასა
რომ პროგრამულად კიდევ უფრო სასარგებლო, ვიდრე მიღების რამ blink.
ნება მომეცით წასვლას ჩვენი ფორმები დირექტორია დღეს და წასვლას form0.
ეს იყო ugliest შესაძლო ფორმით, რომ მე ვერ ამუშავება,
და ნება მომეცით უბრალოდ გაჩვენებთ თუ რას ჰგავს იმ ბრაუზერში.
>> ნება მომეცით წასვლას localhost / ფორმებს, და ეს არის form0.
ეს არის სუპერ მახინჯი HTML ფორმას, რომელსაც აქვს რამდენიმე ველების ელ, ამისთვის დაგავიწყდათ,
პაროლი, ხოლო შემდეგ პატარა ჩამრთველი დათანხმდეს გარკვეული პირობებით.
Catch არის თუ ვარ ამ ფორმით და არ მინდა გადმოგცეთ ჩემი ელექტრონული ფოსტის მისამართი,
მე არ მინდა, რომ წესებს და პირობებს იქნებ, შემიძლია დააწკაპუნეთ რეგისტრაცია
და ეს საშუალებას ჩემთვის მეშვეობით მაინც.
ეს ხდება წარუდგინოს სულელური PHP ფაილი სახელად dump.php.
ყველა ეს იმას არის ამობეჭდოთ შინაარსი $ _GET მხოლოდ დიაგნოსტიკური მიზნებისათვის.
ეს იყო, თუ რა იყო წარმოდგენილი მომხმარებლის ახლა.
მაგრამ ვარაუდობენ, რომ ჩვენ რეალურად გვინდა, რათა შეამოწმოს მომხმარებლის ფორმით წარდგენის.
ნება მომეცით წასვლას ვერსია 1.
ეს არის form1.html. როგორც ჩანს ესთეტიურად ისეთივე ცუდია, მაგრამ შეამჩნევთ, თუ როგორ ლამაზი ის არის.
თუ მე დააჭირეთ რეგისტრაცია გარეშე თანამშრომლობს, მივიღებ yelled დროს.
"თქვენ უნდა მოგვაწოდოთ თქვენი ელექტრონული ფოსტის მისამართი."
ყველა უფლება. ნება მომეცით, ვცდილობთ, რომ. ამიტომ malan@harvard.edu. მე არ გვჭირდება დაგავიწყდათ.
რეგისტრაცია. "თქვენ უნდა უზრუნველყოს პაროლი." ყველა უფლება.
ასე რომ, მე უზრუნველყოფს პაროლის ჟოლოსფერი. რეგისტრაცია.
"პაროლები ერთმანეთს არ ემთხვევა." მინდა ახლა აკრიფოთ ჟოლოსფერი აქ.
მე შემთხვევით შეამოწმეს, რომ. რეგისტრაცია.
"თქვენ უნდა დაეთანხმოთ პირობებს." ყველა უფლება. ვეთანხმები იქ. რეგისტრაცია.
და ახლა იგი აჩვენებს ჩემთან დიაგნოსტიკური გამომავალი იქ.
>> მერე რა უბრალოდ მოხდა?
ჩვენ გვქონდა ეს უნარი, რათა შეამოწმოს ფორმა წარდგინება.
რეალურად, თუ რა გააკეთეთ ჩაყვინთვის შევიდა pset 7, არსებობს ბოდიში ფუნქცია
რომ ხდის საკმაოდ ადვილი დაწეროთ საათზე მომხმარებელი გაგზავნა ეკრანზე.
მე გამოყენებით ოდნავ განსხვავებული მექანიზმი, alert ფუნქციის,
რომელიც არ არის ფუნქცია, რომელიც უღიმიან რადგან იგი იღებს ძალიან მახინჯი მომხმარებლის შეტყობინებები.
მაგრამ ვნახოთ რა მე აქ აკეთებენ.
ეს არის form1.html, და შეამჩნია, რომ მე გარკვეული საკმაოდ ნაცნობი სინტაქსი:
სხეულის tag, ფორმის ტეგი, action ატრიბუტის, მეთოდი ატრიბუტი.
მაგრამ შეამჩნია მე მოცემულ ჩემი ფორმა უნიკალური ID მოხერხებულობის.
მაშინ მაქვს ელ სფეროში, რომელთა ტიპის ტექსტი,
დაგავიწყდათ სფეროში, რომელთა ტიპის დაგავიწყდათ, დადასტურება სფეროში, რომელთა ტიპის დაგავიწყდათ,
და შემდეგ ჩამრთველი რომლის სახელიც შეთანხმების აქ, ტიპი არის ჩამრთველი.
და მაშინ მაქვს submit ღილაკს.
მაგრამ შეამჩნია ზედა რა მეტი მაქვს.
პირველ რიგში, არსებობს კიდევ ერთი გამოყენების სკრიპტის ტეგით.
თუ თქვენ გაქვთ გარკვეული JavaScript კოდი სხვა ფაილი, ისევე ცენტრთან შეგიძლიათ იგი.
და თქვენ რომ Script წყარო და შემდეგ შეამჩნევთ მე დამაკავშირებელი აშკარად
to googleapis.com რომ ძალიან გრძელი ბილიკი, მაგრამ რომლის ფაილის სახელი მთავრდება jquery.min
მინიმუმ. js.
jQuery არის სუპერ პოპულარული ბიბლიოთეკა JavaScript, რომ მხოლოდ ხდის JavaScript
ყველა უფრო მოსახერხებელი გამოყენება.
ის ეფექტურად გახდეს დე ფაქტო სტანდარტი.
ასე რომ, მიუხედავად იმისა, თუ რას უნდა ნახოთ არ არის სუფთა JavaScript თავისთავად,
ეს არის ბიბლიოთეკის თავზე JavaScript ჰგავს CS50 ბიბლიოთეკა ფენის
ყველაზე დაბალი დონის C კოდი; რეალობა თითქმის ყველას ინტერნეტში იყენებს.
ასე რომ ეს არ არის სასწავლო ბორბლები. ეს უბრალოდ საუკეთესო პრაქტიკის ამ დღეებში.
ახლა შეამჩნია ქვემოთ რომ არის ჩემი საკუთარი Script tag, და შეამჩნია რა მე ვაკეთებ აქ.
თურმე jQuery აკეთებს რაღაც პატარა ლამაზი.
JavaScript აქვს დოლარის ნიშნები, მაგრამ ისინი უაზრო.
>> ისინი არიან როგორც წერილში ან B ან C.
jQuery უბრალოდ მიღებული კონვენციის ან სახის დაგებულ პრეტენზია ფაქტი
რომ $ იქნება მათი სპეციალური სიმბოლო.
ამიტომ, როგორც კი თქვენ ჩატვირთვა ამ გლობალურ JavaScript ფაილის up აქ Script tag,
თქვენ გაქვთ სპეციალური გლობალური ცვლადი, რომ ე.წ. $.
ეს უფრო სწორად მოუწოდა jQuery, მაგრამ რომ არ გამოიყურება თითქმის როგორც sexy როგორც $.
მაგრამ $ ვიზიტორების განსაკუთრებული მნიშვნელობა. PHP-ში მას ჰქონდა განსაკუთრებული მნიშვნელობა.
თქვენ იძულებული გახდა იგი წინაშე ცვლადი.
ეს არის მხოლოდ sexy, რაც მათ შესახებ.
რა ხდება აქ?
გაითვალისწინეთ მე ავლით to jQuery ფუნქციის ჩემი გლობალური ცვლადი დოკუმენტი
და მაშინ მე მოუწოდებდა. მზად.
რა jQuery არსებითად ამჯამად არის ის საშუალებას გაძლევთ გარკვეული ვანილის JavaScript რამ
მოსწონს დოკუმენტის ობიექტი, ფანჯრის ობიექტი,
და თუ გაივლის ის, რომ jQuery ფუნქცია -
და ისევ, უნდა იყოს ნათელი, ეს ფუნქცია მოუწოდა jQuery -
თუ რას აკეთებს არის ის დააბრუნებს თქვენ სპეციალური ვერსია დოკუმენტი
რომ აქვს უფრო ფუნქციონალური ასოცირდება იგი.
ასე რომ დაუმუშავებელი JavaScript არ არსებობს მზად ფუნქცია,
მაგრამ თუ გაივლის დოკუმენტი jQuery ფუნქციის პირველი,
ის დააბრუნებს თქვენ სპეციალური ვერსია დოკუმენტის ობიექტი
რომ უფრო ლამაზი თვისებები.
და ამიტომაც მოსწონს ეს. ეს უბრალოდ იღებს რამ ადვილია ამის გაკეთება, როგორც ჩვენ შესახებ დაინახოს.
რას გვეუბნება ამ ხაზი კოდი ნიშნავს?
ეს ხაზი კოდი აქ ნიშნავს, როდესაც დოკუმენტი მზად არის -
სხვა სიტყვებით, ერთხელ ბრაუზერის კეთდება კითხულობს ამ ფაილის ყველაზე ქვედა -
წავიდეთ წინ და შეასრულოთ შემდეგი ფუნქცია.
რა არის მართლაც საინტერესო JavaScript - და PHP აქვს ამ ასევე -
არის ანონიმური ფუნქციები.
In JavaScript შეგიძლიათ განაცხადოს ფუნქციები რომ არ სახელი მაგრამ აქვთ სხეულის.
გაითვალისწინეთ, რა ხდება აქ.
>> ეს არის ფუნქცია მოუწოდა მზად, და ეს მხოლოდ იმას ნიშნავს, გავაკეთოთ შემდეგი
როდესაც მთელი ვებ გვერდზე მზადაა, როდესაც ეს ყველაფერი უკვე იკითხება საწყისი სერვერზე.
რა გსურთ? მინდა შეასრულოს ბლოკი კოდი.
გაითვალისწინეთ, რომ ჩვენ არ გვინდა, რომ შესრულდეს ამ კოდექსით დაუყოვნებლივ.
თუ მე გამოტოვებული ამ, ეს ნიშნავს, დაუყოვნებლივ დაიწყოს შესრულებაში ამ ხაზების კოდი.
მაგრამ ის ფაქტი, რომ მე ვამბობ, არა, არა, არა, გადაიტანოთ ეს ანონიმური ფუნქციის მოსწონს
საშუალებები არ შეასრულოს ეს ჯერ; ეძახით საბოლოოდ.
ჩვენ ვნახეთ ამ მომენტში წინ ჩვენს წინა ფორმას მაგალითად.
რა ფუნქცია ჰქონია ჩვენ მოვუწოდებთ საბოლოოდ, 500 მილიწამებში შემდეგ? Blink.
ამიტომ იმავე იდეას.
ერთხელ, თუნდაც ამ გამოიყურება პატარა უცნაური, უბრალოდ მიიღოს ამისთვის ახლა რწმენა
რომ განაცხადოს ანონიმური ფუნქცია რომ ე.წ. საბოლოოდ,
თქვენ უბრალოდ დაწერეთ function () {
მერე რა კოდი მივდივართ, რათა შესრულდეს საბოლოოდ? შემდეგ.
ეს ძალიან ჰგავს პატარა, მაგრამ ეს იმას ნიშნავს, აქ jQuery ფუნქცია,
და ეს ახლა არის კომბინაცია.
ეს Snippet of HTML ბოლოში ეკრანზე, რა თქმა უნდა აქვს გარკვეული ხის წარმომადგენლობა.
ეს არ არის ამ. ეს გვერდი არის უფრო საინტერესო ვიდრე ეს hello, მსოფლიოს მაგალითი.
მაგრამ ზოგიერთი ხე, რომელიც შეესაბამება ამ HTML.
კარგი იქნება, ტკივილი კისრის ჰქონდეს განახორციელოს გარკვეული რეკურსიული ფუნქცია
იწყება root node და შემდეგ მოვძებნოთ კვანძის რომლის ID არის რეგისტრაციას.
მერე რა jQuery ხდის სუპერ ადვილი ჩვენთვის არის სიტყვასიტყვით ეს.
წავიდეთ წინ და კიდევ ჩემთვის რასაც div ან ნებისმიერი ფორმით, მიუხედავად HTML-ის ელემენტი
ჰყავს ID რეგისტრაციის.
ეს არის ეკვივალენტი document.getElementById (რეგისტრაციის).
>> რატომ ადამიანს მოსწონს jQuery?
იმიტომ რომ მოკლეა შეიტანოთ. მაგრამ ეს ყველაფერი არის. ეს იმავე იდეას.
Get Me tag რომლის ID არის რეგისტრაციას.
და როცა ეს ტეგი, რომელიც ხდება უნდა იყოს ფორმით, არის წარმოდგენილი,
წავიდეთ წინ და შეასრულოს ამ კოდექსით.
მოდით ერთ გამოიყურებოდეს ახლა როგორ ვაკეთებთ ფორმა ძალადაკარგულია.
სინტაქსი არის admittedly cryptic თავდაპირველად, მაგრამ რა ხდება?
თუ ეს ხაზი კოდი მართალია, მე ვაპირებ დაწეროთ ზე მომხმარებლის უზრუნველყოს მისი ელექტრონული ფოსტის მისამართი.
რა არის ეს ხაზი კოდი?
$ ნიშნავს jQuery. ახლა შეამჩნია ეს.
ეს არის სახის მოსწონს CSS.
თუ თქვენ dived შევიდა CSS ჯერჯერობით, თქვენ იცით, რომ ეს ნიშნავს ელემენტს, რომლის ID არის რეგისტრაციას.
სივრცე ნიშნავს იპოვოს შვილი ან შთამომავალი რეგისტრაციის რომლის სახელიც შეყვანის.
და მაშინ ეს რამ კვადრატულ ფრჩხილებში არის პატარა ფილტრი.
და მაშინაც კი, თუ ეს გამოიყურება cryptic, ამ უბრალოდ ნიშნავს წასვლა ფორმა, რომლის ID არის რეგისტრაციის,
წასვლა შეყვანის ელემენტს შიგნით რომ რომლის სახელიც ელ,
და შემდეგ მიიღოს მისი ღირებულება, რაც მისი ღირებულება ხდება იყოს -
asdf თუ ეს ყველაფერი მე აკრეფილი ან malan@harvard.edu თუ არის ის, რაც მე აკრეფილი.
ასე რომ, თუ ღირებულების სახით ელექტრონული სფეროში == არაფერი, დაწეროთ საათზე მომხმარებელი.
Else თუ ღირებულება დაგავიწყდათ სფეროში == არაფერი, დაწეროთ საათზე მომხმარებელი.
>> Else თუ ღირებულება დაგავიწყდათ სფეროში არ გაუტოლდება ღირებულების დადასტურებას სფეროში,
რომელიც სხვა ფორმით ელემენტს, დაწეროთ საათზე მომხმარებელი.
და მერე ბოლოს - და ეს ერთი ძალიან რამდენიმე ახალი სინტაქსის საკუთარი,
მაგრამ ერთხელ თქვენ მინახავს ეს, ეს ცოტათი მაინც უფრო გონივრულად -
სხვაგან თუ ფორმით, რომლის ID არის რეგისტრაციის შეყვანის ელემენტს რომლის სახელიც შეთანხმებით
და იგი შეამოწმა, წავიდეთ წინ და დაწეროთ საათზე მომხმარებელი.
ამიტომ სრულიად აღიარებს ამ სრულიად დაუძლეველი ერთი შეხედვით.
ეს ბევრი ახალი სინტაქსის. მაგრამ ყველა jQuery შემდეგნაირად ასეთი შაბლონებს.
და პატიოსნად, მე კი არ ვიცი ამ იარსება რამდენიმე წუთის წინ.
მე Googled, "როგორ შეამოწმოს თუ ჩამრთველი არის შემოწმება jQuery?"
და ეს არის სინტაქსი, რადგან არსებობს სხვადასხვა გზა ამის გაკეთება
ფაქტობრივი ნედლეულის JavaScript კოდი.
ასე რომ, როგორც პირველივე გვერდზე პრობლემური Set 7 ხაზს უსვამს,
pset 7 არის ძალიან წვრთნები bootstrapping თავის
აქ ჩვენ პირობით, იმედია, კონცეპტუალურ ჩარჩოს რომელთანაც დაძლევის pset.
>> მაგრამ როგორც ხშირად შემთხვევაში ვებ დიზაინი, ეს მდე ნამდვილად to poke გარშემო,
ითვალისწინებდეს snippets კოდის და მაგალითები ვებ ცოტა ხნის როგორც თქვენ მოჰყავთ მათ
პოსტი პირობებით, რომ პირველი ფურცელი,
და გააცნობიეროს, რომ სწავლის HTML, CSS, JavaScript და კიდევ SQL
რეალურად ნიშნავს, რომ ამ at-home exercise როგორც ჩვენ ვიწყებთ მიიღოს ამ სასწავლო თვლები off.
და გააცნობიეროს ძალიან არსებობს ამდენი რამ რომ თქვენ ბრაუზერში.
შიგნით საუკეთესო ამ ელემენტების არსებობს სხვა რამ მოუწოდა ღონისძიების ელფოსტის.
და მიუხედავად იმისა, რომ ჩვენ უბრალოდ შევხედე პირობა მოუწოდა onsubmit და onready,
შეგიძლიათ გააკეთოთ რამ, როგორიცაა onkeydown, onkeyup,
მოეწონა, როცა მომხმარებლის გრძნობს გასაღები, მოისმენთ ამისთვის და გასაღები up.
Gmail აქვს კლავიშთა.
როგორ ამჯამად Google განახორციელოს კლავიშთა მოსწონს C ამისთვის დაკომპლექტებას?
მათ მოუსმინოს იმ მოვლენებს, როგორც ისინი უწოდებენ, როგორიც onkeypress ან onkeyup და onkeydown.
თუ თქვენ ოდესმე hovered თქვენი მაუსის მეტი ზოგიერთი მენიუ ვარიანტი
და უეცრად, voila, მენიუ, როგორც ჩანს ან გრაფიკული ცვლილებების ფერი,
როგორ აკეთებენ ისინი ამას?
იმის ნაცვლად, რომ მოვუსმინოთ ამისთვის onready ან onsubmit, თქვენ მოვუსმინოთ ამისთვის onmouseover ან onmouseout.
>> ასე მოკლედ, ამ ძალიან მარტივი საფუძვლების, რომ ჩვენ დავიწყეთ გადასაფხეკი ზედაპირზე დღეს
და ჩვენ ჩაყვინთვის შემდგომი to ოთხშაბათს, თქვენ გაქვთ, სულ უფრო და უფრო,
ძალაუფლების განსახორციელებლად სახის რამ, რომ თქვენ უკვე იცნობს.
მოდით დამთავრდეს იქ, და ჩვენ გავაგრძელებთ ამ ოთხშაბათს.
>> [CS50.TV]