DAVID מלאן: בסדר, אנחנו שוב. אז עבור המרגש לסיכום, בחלק האחרון שלנו על תכנות אינטרנט, אשר אני חשבנו להשתמש כמונח כללי כדי ללכוד כמה נושאים נותרים. אז בסוף של היום, אנחנו בעצם עושים קצת על הידיים תכנות אינטרנט עם שפה בשם JavaScript. ואני חושב שאנחנו נסתכל במשהו הקשור בתמונות ומגלה משהו חבוי בסתר בתמונה, וגם להעיף מבט על Google API מפות, תכנות יישומים ממשק, כמשהו נציג של סוג של תוכנה זה יותר ויותר בחופשיות זמינה כיום. אבל למה לא אנחנו נסתכל ב מרכיב לעולם הזה שאנחנו סוג של כבר לוקח כמובן מאליו קיימת במשך זמן מה, מסד נתונים. במשך היום עבר וחצי שמנו להניח כי יש לנו גישה למסד נתונים, אבל מה הבעיה אין מסד נתונים לפתור? מה זה עושה לנו? מה זה? קהל: [לא ברור] DAVID מלאן: משהה את כל המידע, מניח את הדעת, ואילו סוגים של מידע אולי אתה מכניס את זה? קהל: [לא ברור] DAVID מלאן: כל מידע אתה מכניס את זה, תקבל בחזרה. זה נכון. ובאתר מבוסס אינטרנט טיפוסי או אינטרנט יישום, אילו סוגים של מידע, במיוחד, אולי אתה מכניס? קהל: [לא ברור] DAVID מלאן: משתמשים. אז מה משתמש? קהל: [לא ברור] DAVID מלאן: מניח את הדעת, רשום המשתמשים של האתר. ומה זה אומר משתמש מאגר מידע "? מה מלחינת משתמש? משתמש יש מה? קהל: [לא ברור] DAVID מלאן: כן, אישי נתונים, וזה מצא חן בעיני. בואו להיות מדויק יותר. אז משתמש בדרך כלל יש שם, מה עוד יכול להיות למשתמש? קהל: [לא ברור] DAVID מלאן: An אישור addr--, כך שם פרטי, שם משפחה. זה טוב. למעשה, בואו לתקן זה, כי זה קורה להיפתח הזדמנות דיון, עדיין, עוד. שם פרטי, שם משפחה, מין. מזהה כלשהו. מה עוד? שמעתי משהו אחר לפני, מדי. דוא"ל, כתובת דואר. אז בואו להשהות שם ועכשיו לשקול לא מה שאנחנו אחסון במסד הנתונים, but-- ולא למה, כי זה אולי ברור כי ברגע שאתה רשום משתמש, אתה רוצה לזכור אותם במשך זמן מה. אתה לא רוצה שזה רק לאחסן RAM ולהיות forgotten-- כך בואו להתמקד איך. מתברר כי ב העולם של מסדי נתונים, יש לפחות שני סוגים בימים אלה. משהו שנקרא מסד נתונים SQL, שפת שאילתות מובנית, או, בשם שובב, NoSQL, אשר אינו SQL. ואת האחרון הוא למשל מה עלול להיקרא מונחה עצמים, או מאגר אובייקטים, מסד נתונים מאחסן חפץ, ולא, תירוץ לי, כמו שנראה מיד, שורות. אז נתמקד לרגע על הראשון שבהם, כלומר, SQL מסד נתונים, ולו רק משום שזה כך כבר מכיר, לאף אחד מי שהשתמש Excel או פחי גוגל או אפל מספרים או תקן כלשהו תוכנת הגיליונות האלקטרוניים, או, באופן שקול, או יותר מתוחכם, משהו כמו מיקרוסופט גישה או אורקל או MySQL או PostgreSQL, שכולן הם שמות מוצרים עבור יישומים הרעיון הבא. מסדי נתונים יחסיים הם פשוט משהו שיש לו שורות ועמודות. ועל ידי שורות ועמודות, אני ממש מתכוון למשהו ככה, אז איפה שאולי יש לנו את שם של שדה והסוג שלה לכאן. ולמעשה, תן לי עכשיו להתחיל למפות אלה. אז בעצם, אני לא יודע למה ציירתי תרשים נפרד. בואו לשמור על פשטות זו. יש לנו זכות כאן ראשיתה של שולחננו, שם זהו השם של השדה וזה סוג הנתונים, ולפי סוג כוון הבא. האם מדובר במספר, היא מקבלת מחרוזת, מחרוזת קצרה כמו מילה, זה פסק, הוא זה נתונים בינאריים, כמו תמונה? ובואו רק להקניט זה נפרד רק רגע. אז שמו הפרטי, מספר, מחרוזת, נתח גדול של text-- קהל: [לא ברור] DAVID מלאן: כן, אז מחרוזת. ובהקשר מסד נתונים, תהיה לנו בדרך כלל קוראים שדה char זה. אני רק אגיד char לעת עתה אבל אנחנו הולך לחדד ברגע זה. תווים בשדה. שם משפחה כנראה אותו דבר. מִין? זכר או נקבה, אז זה יכול להיות שדה char. זה יכול להיות או ציטוט, סוף ציטוט "זכר" או ציטוט, סוף ציטוט "נקבה" או שזה יכול להיות זכר או נקבה. אם אתה רוצה להיות כוללני יותר, ייתכן שיהיה עליך ערך שלישי או איזשהו תחום אחר לגמרי. וכך אתה יכול להשתמש שווא אמיתי. השדה יכול להיקרא זכר, אז אפשר להגיד אמת או שקר. אבל זה לא בהכרח ללכוד כל המידע ייתכן שתרצה. אז מתברר שיש עוד סוג שדה שעשויה להיות שימושי כאן במסד נתונים טיפוסי, נקרא enum, איפה זה שדה דמות, אבל אתה, המעצב, להגיע למנות את הערכים האפשריים, כמו ציטוט, סוף ציטוט "זכר", ציטוט, "נקבה" סוף ציטוט וכן הלאה. כך שכל מה ערך הוא באתר שלך, הוא אכן מבוסס-תווים, אבל זה חייב להיות אחד מערכים אלה. אנחנו כנראה לא היו רוצים enum עבור השם הפרטי או שם המשפחה. אחר היינו למנות, כפי שהשם נובע, פשוטו כמשמעו, כל שם פרטי אפשרי פרטים אישיים. אוקיי, אז מזהה מה צריך להיות מזהה? כן, אז אולי מספר. אז בואו נישאר עם כי לעת עתה, מספר. ולפי מספר, מספר זה קצת יותר מדי רחב עכשיו. עבור בתום השנה השנייה היום, אני מרגיש כאילו אנחנו צריך להיות קצת יותר מדויק. המספר יכול להיות כמו, זה יכול להיות משהו כמו 1.236. וזה כנראה לא למה אנחנו מתכוונים ידי מזהה. מה אנחנו כנראה מתכוונים מזהים? קהל: [לא ברור] DAVID מלאן: אה, אוקיי, אז אולי זה אפילו לא מספר. אולי זה בעצם מזהה ייחודי זה מחרוזת, כמו שם משתמש. אז בהחלט, יכול להיות. אני חושב שמישהו כנראה אמורים מספרים, אם כי. אז בואו נשארים עם זה. איזה סוג של מספר? מה זה יותר precise-- שלם. אז מספר כמו 0, 1, 2, 3, כך אנחנו נתקשר זה מספר שלם. וגם אז, יכולתי להיות nitpicking, זה לא באמת רק שלם בכלל אתה רוצה. אתה בטח לא רוצה ערכים שליליים, רק בגלל, זה פשוט מרגיש מוזר. אתה בטח רוצה מספרים שלמים וחיוביים. אז אתה יכול גם להביע כי בבסיס נתונים, אך לעת עתה, אנחנו נגיד שלמים. אֶלֶקטרוֹנִי? זהו כנראה פשוט- מה? קהל: [לא ברור] DAVID מלאן: זה דוא"ל, אבל זה תווים, נכון? זה פשוט בעל אופי פאנקי כמו של "ב" סמל או משהו אחר, אבל זה עדיין בשדה אופי. וכתובת דואר? תווים בשדה. אז זה התחלה יפה, אבל בואו נהיה קצת יותר מדויק עכשיו. אז מתברר כי ב מסד נתונים, לעיתים קרובות אתה יש ברירה מעל יותר מעודן גרסאות של הדברים האלה. למעשה, במסד נתונים SQL טיפוסית, SQL, או באופן כללי יותר, מסדי נתונים יחסיים, מסדי נתונים עם שורות ועמודות, לעיתים קרובות אתה פשוט לציין לא רק את הסוג של field-- תן לי לעשות קצת מקום כאן-- אלא גם את האורך. אז כמה זמן הוא שם פרטי? אני חושב, D-A-V-I-D. אוקיי, הבנתי שאני כנראה רק נעלב כמו חצי של האנשים בחדר, נכון, מאז שמותיכם הם יותר מחמש מכתבים, כך חמישה נראה אנוכי קטנה ותמים, אז מה זה שווה יותר? 10, בסדר, ואני חושב אנחנו בסדר בחדר. 13? 30? למה אני לא לוקח את הגישה של קודם לכן, כשבאנו דיברו על מערכים וזיכרון? למה אני לא רק אומר כמו 1,000? אין שם אחד לא הולך להיות יותר מ -1,000. להדוף. קהל: [לא ברור] DAVID מלאן: כן, זה בזבזן, נכון, במיוחד אם רוב השמות הם רק חמש או 10 או 15 תווים, זה בזבזני מאוד. אז אתה יודע מה? זהו סוג של שאלה קשה. עכשיו, אנחנו בהחלט יכולים לנתח אנגלית וכל השמות של שפה אחרת להבין, טוב, מה הוא ממוצע average-- לא ממש לעזור us-- מה המקסימום הוא כנראה מה שאנחנו באמת רוצים. אבל מתברר שאנחנו אפילו יש כמה בחירה על הסוג כאן. במסד נתונים SQL טיפוסית, אתה יש משהו שנקרא שדה char וגם varchar, V-A-R, עבור שדה char משתנה. וההבדל הוא זה. שדה char, אתה מעצב, יש לציין מראש את משך הזמן המדוייק של השדה. אז אולי את השם הפרטי כמו 20 מרגיש סוג של בטוחה. אולי צריך לעשות קצת googling כדי לראות אם זה באמת בטוח מספיק. מן הסתם יש שם עם 21 הדמויות, אך לעת עתה, נניח 20 בטוח. שדה char ירמז במסד נתונים שאתה הם באמצעות 20 תווים 20 ותמיד. עכשיו אם זה רק D-A-V-I-D, 15 מאותם רק הולכים להיות תווים ריקים, אבל אתה עדיין משתמש כל 20 בתים. שדה varchar, לעומת זאת, פירושו מחרוזת צריכה להיות עד 20 תווים אבל אם זה רק חמישה, אתה רק הולך להשתמש חמש, או אולי שישה עבור ערך מיוחד בסוף, כמו 0 שדנו כי מסמל את סופו של דמות רצף בזיכרון. לכן, כאשר אתה חושב ייתכן שתבחר char לעומת varchar, בהתחשב בכך trade-off? תו משתמש כי דמויות רבות, varchar אין צורך יותר מזה דמוי רב. קהל: [לא ברור] DAVID מלאן: מניח את הדעת, כאשר אתה יודע את אורך החוט די משכנע רק כדי להשתמש char, כי אם אתה יודע את זה, פשוט להניח אותו. ואולי זה נכון עבור zip קוד, בארצות הברית, לפחות, 02138, זה תמיד הולך להיות חמש דמויות עד שתוסיפו את המקף ארבעה. אבל ייתכן שיהיה כמה ערכים עבור שבו אתה תמיד יודע את האורך. או אולי סמלי המדינה, כמו ניו יורק לניו יורק, ומוסמך עבור מסצ'וסטס בארה"ב. אולי יש לך כמה מצבים איפה זה לגמרי סביר, אבל לפי ההיגיון הזה, למה הם אנחנו אפילו overthinking זה? למה אנחנו לא פשוט להשתמש varchar ואז אנחנו פשוט תמיד להשתמש בשתי דמויות בכל מקרה, או תמיד להשתמש חמישה תווים בכל מקרה? למה לא פשוט לשמור varchar עבור הכל, על ידי זה היגיון? בטח יש מלכוד. קהל: [לא ברור] DAVID מלאן: היה לכתוב משהו לא בסדר. אז זה נכון. אבל גם אז, הם לא יכולים להשתמש יותר זיכרון ממה שאני להקצות. עדיין יש לי את האחרון אומרים על פני אורך, ולכן הם לא יכולים בטעות לעשות הטעות הזאת, אבל מחשבה טובה. זה יותר מתוחכם, אבל זה מאוד קשור לדיוננו, למעשה, של מערכים וצמוד רשימות קודמות. מתברר כי מסד נתונים, אם הוא יודע שכל הערכים הם באורך קבוע, גם אם חלק מהערכים האלה ריקים, מעין אסתטית ריק, D-A-V-I-D ולאחר מכן 15 כדורי סרק, מתברר שאם כל שדה הוא באותו האורך, היה הרבה כמו מערך כל הדברים שלה גב אל גב אל גב אל גב, כך אתה יכול פשוט בתוספת 1 להגיע הבא ערך, אותו רעיון בתוך טבלת מסד נתונים. אם כל הדמות שלך מחרוזות הן באותו האורך, יש לך מה שנקרא גישה אקראית. אם בכל החוטים הם של אורך 20, אתה לא רק לעשות פלוס 1 אתה פשוט עושה פלוס 20, בתוספת 20, בתוספת 20, בתוספת 20, ואתה מאוד יכול במהירות לגלול או לחפש דרך כל הנתונים שלך. שדה char משתנה, לעומת זאת, אין תמיד 20 תווים. זה יכול להיות 20 ולאחר מכן 15 ואז 19 ואז 10, ולכן אם ברצונך לחפש באמצעות זה, אתה לא יכול פשוט עיוור להוסיף 20 בתים כדי לקבל אל השלב הבא. אתה ממש צריך לחפש דרך כי בקצה של מבנה הנתונים, אם תרצו, משונן. זה סוג של הולך פנימה והחוצה מבוסס על אורך בפועל של המחרוזת. לכן, כאשר אתה יודע את האורך, כמו כרים אומרים, להשתמש בשדה char, בגלל שאתה מרוויח כי היעילות של להיות מסוגל לחפש את זה מהר כאשר אתם מחפשים מידע, אחרת להשתמש משתנה. למרבה הצער, אין לי תשובה טובה כמה זמן את השם צריך להיות, אבל עבור משהו כמו שם, הייתי אומר varchar נפוץ כי זה לא הולך להיות באורך קבוע לכולם. 20, אני לא יודע, 20 מרגיש קטן וצפוף. בואו נגיד 50, 50. זה לא עולה לך הרבה יותר לומר 50 במקום 40, אבל בשלב מסוים, אתה צריך כדי לבצע שיחת שיפוט. נפוץ מאוד, בכנות, ל [? היסטורי?] סיבות, למרות שזה מוגזם, לפני כמה זמן הוא לומר 255, כי, ב מערכות מסדי נתונים פופולריות, כמו MySQL, כלי חופשי וקוד פתוח כי הרבה חברות כמו גם פייסבוק משמש, זה היה ברירת המחדל המרבית כך שאנשים פשוט הלכו עם זה. אז לא סביר, אבל אנחנו להשתמש באינטואיציה קצת יותר ולומר, בטוח 50, זה כנראה קצת מוגזם. מין, אני אוהב enum, וכך אנו יכולים אפוא למנות זכר או נקבה, או אולי ביעילות רבה יותר, זכר או נקבה או כמה סמלים אחרים, אבל enum מרגיש כמו בחירה טובה שם. כדי להיות ברור, מין רק יכול להיות varchar, ואנחנו יכולים פשוט כל מסכים כמו אנשים נחמדים, תמיד לשים אותם ערכים שיש. זכר או נקבה או מה שלא יהיה. אבל הבעיה היא אפוא כי יכולנו לטעות, כמו [לא ברור] מוצע קודם לכן בהקשר אחר. אם אנחנו עושים טעות, אנחנו יכולים לקבל ערכים שגויים באתר שלנו. אז מה שיפה מסדי נתונים כמו אורקל ו- MySQL ואחרים, הוא שיש לך את זה אחרון שכבת ההגנה שבו מנהל DBA, מסד הנתונים שלך, מי מתכנן את הטבלה כמו שאנחנו הם מילולית, יכול לשים למקומו enum כי מגן מפני כי על ידי ציון זכר, נקבה, ולכן אף אחד אחר לא מתכנת יכול בטעות להכניס כל ערך אחר. אז זה יהיה דבר טוב. זוהי תכונה. אז מזהה, בהנחה מזהה מספרים, זה כנראה צריך להיות מספר חיובי. ואנחנו עושים לפעמים יש הזדמנות לדון אורך. לא היית בדרך כלל לציין מספר כאן, היית במקום לציין מדובר int, או int גדול, כפי שהוא בדרך כלל נקרא. אבל בדרך כלל, מספר שלם יהיה, נניח, 4 בתים. ואם זה 4 בתים, וככה ביטים רבים? קהל: [לא ברור] DAVID מלאן: 32 סיביות. אז כמה משתמשים יכולים שיש לנו הנתונים שלנו אם לכולם יש מזהה זיהוי זה חייב להיות ייחודי? 32 סיביות אומר שיש לנו דפוסי של אחד, שתיים, שלוש, ארבע, five-- אז כמה דפוסים שונים של אפסים ואת אלה אתה יכול לקבל אם יש 32? זה אותו הדבר כמו לשאול מה שנתיים עד 32? זהו מספר גדול אני לא ממש יכול לקבל זכות, אבל אני יודע שזה בערך 4 מיליארד דולר. אז זה אומר טבלת מסד הנתונים שלך יכולה יש ארבעה מיליארד משתמשים וזהו. אז זהו מעניין משמעות עיצוב. מספר מכובד של חברות החליטו, אולי לא כל כך הרבה עבור שולחן המשתמשים שלהם, משום שיש 4 מיליארד משתמשים היא בעיה נדירה. זהו סוג של סגנון-פייסבוק בעיה, לא בעית החברה טיפוסית. אבל אולי אם יש לך יומני עסקה או איזשהו הנתונים כל הזמן מקבל כתוב לתוך מסד הנתונים שלך זה בהחלט יכול להיות מיליארדים ומיליארדים חתירות אתה משתמש מספר שלם עבור זה, מה יקרה ברגע אתה צריך לחתור מספר 4 מיליארד ואז אתה מנסה להכניס את מיליארדית 4 ו -1, אם אפשר לומר כך? אני לפשט את המספרים קצת. אתה יכול לקצץ, אני אומר שאתה צריך להתמודד עם זה איכשהו. ואיזה מחשב בדרך כלל יעשה, תחשוב על זה אפילו מהבוקר, אם יש לך ערך 4-bit 1 כמו, 1, 1, 1, אשר, רק לקשור בבוקר יחד אחר הצהריים, מה אין מספר זה מייצג בצורה בינארית? בסדר, אנחנו נעשה את זה יותר קל. מה עושה את המספר הזה מייצג בצורה בינארית? בסדר, אנחנו נעשה את זה קל יותר, מה האם מדובר ב בינארי? קהל: שלוש. DAVID מלאן: שלוש, כי יש לנו את אלה column-- [צחוק] אוף! היו לנו את אלה בעמודה והטור בזוגות. אז תניח כי, אכן, שלנו [? המגרש?] לא היו 32 סיביות, אבל זה היו שני ביטים, אנחנו יכולים לספור ממשתמש מספר 0, 1, 2, 3, ואז אנחנו סוג של בחזרה אל משתמש 00 שוב. אז זה מה שקורה בדרך כלל. אם אי פעם שמעת את expression-- יש לא כנראה, אבל אם אתה לכם-- גלישה נומרית, שבו אתה לשמור מרפרף כל הביטים שלך להיות הערכים האפשריים הגדולים, ואז אתה יוצא של ביטים, מה בדרך כלל יקר? למה אני אומר 00? ובכן, זה שלוש. כיצד ניתן לייצג 4? כיצד ניתן לייצג את עבור מספר 4 ב בינארי? קהל: [לא ברור] DAVID מלאן: One-- כן, לא אומרים 100 כשלעצמה, כי יש לו את הטועה קונוטציה, אבל 1-0-0. כך מספר 1-0-0 הוא אכן נכון, אבל אם יש לך רק שני ביטים, מה יש לך באמת לעשות? אתה כבר התהפך ל 00. ואכן, זה מה שיקרה. למעשה, אתה יכול לחשוב על יותר קרבה זו. אם אתה זוכר, מה, לפני 16 שנה, העולם היה אמור להסתיים כאשר הבעיה Y2K קרה. מה היה הסוד שלו? ובכן ברוב המחשבים, עבור החלטות סבירות, היו אחסון מספרים כמו שנת 1975 או שנת 1999 רק על ידי שימוש בשתי ספרות בזיכרון של המחשב. אז כמובן, מה קורה כשתגיע השינה 2000, אתה הולך זה, או ליתר דיוק, כן. אז אתה הולך שנת 2000, אבל אם אתה משתמש רק שתי ספרות זה נראה כמו בשנה 00 ו אז אתה כבר התהפך. ובגלל זה הרבה מערכות הצורך להתעדכן בזמן. אז עם זה אמר, חברות כמו פייסבוק נתקל זה. לכן הדרך היחידה להתמודד עם מצב, בכנות, הוא לצפות את זה. או הדרך הנקייה לטפל בבעיה זו היא לצפות את זה אז אתה לא יש לבצע שינויים מאוחר יותר. אז במקום 8 בתים, אתה יודע מה? אני הולך להיות חשיבה קדימה כאן, למרות שזה קצת אופטימי כי אנחנו הולכים יש 4 מיליארד ו 1 משתמש באתר האינטרנט שלנו. אבל בואו פשוט להשתמש 8 בתים, או 64 סיביות, אשר בדרך כלל להיות נקרא שלם גדול, טכני מאוד. וזה רק אומר שאתה יכול לקבל אפילו יותר ספרות המספר שלך. אבל זה חשוב החלטה עיצובית, כי אם תבחר מספר כי יש פיסות מעט מדי של הביטוי אתה באמת יכול ליצור באג בתוכנה שלך. בסדר, אז בואו לעטוף עם דוא"ל וכתובת דואר. אז דואר אלקטרוני, כמה זמן צריך כתובת דוא"ל להיות? 50. אני באמת אין לי מושג, אבל זה כנראה משהו כזה, כי אחרת אף אחד לא הולך לכתוב לך אם זה נהיה יותר מדי זמן, אז בן 50, בואו נלך עם זה לעת עתה. כתובת דואר, כמה זמן צריך להיות? קהל: [לא ברור] DAVID מלאן: זה לא רק מיקוד, אף. כתובת דואר, שמעתי. אז זה כמו ריבוע 1 ברטל, פסיק, קיימברידג 'מסצ'וסטס., פסיק, 02138. ואכן, תן לי רק למשוך עד גיליון עבודה קטנה כאן. זה מרגיש כאילו זה החמצה. אם יש לנו ריבוע 1 ברטל, פסיק, Cambridge MA 02138, אני מרגיש כמו שאנחנו יכולים לעשות טובים יותר מסתם כתובת דואר. למה אנחנו לא להתפוצץ זה קצת? מה אני חותר? מה עלינו במקום יש עבור שורותינו כאן, אולי? קהל: [לא ברור] DAVID מלאן: כן, אז בואו קוראים לזה street_number, ו בקו תחתון הוא רק משותף דרך שיש מה שנראה כמו חלל, אבל זה לא, באמת. רחוב, ולאחר מכן city-- מצטער? קהל: [לא ברור] DAVID מלאן: אפשר לעשות את זה. קו אחד, קו שני. למה אנחנו לא נשמור זה פשוט עבור החברה, אבל זה בהחלט החלטה מקובלת. ואז המדינה, ולאחר מכן בואו להיות בארה"ב ממוקדת מעט לעת עתה ופשוט לעשות מיקוד, רק בגלל זה יהיה להוביל טעות מעניינת או בעיה כאן. אז נניח כי עכשיו הכתובת שלנו. זה קצת יותר מעצבן כי יש לנו את כל שדות נוספים אלה, אבל עכשיו אנחנו יכולים לתייג דברים קצת יותר טובים. אז עכשיו מספר רחוב כנראה לא צריך להיות char, נכון שלא? מה זה צריך להיות? קהל: [לא ברור] DAVID מלאן: אולי, מספר כמו מספר שלם שוב? מספר שלם גדול? אתה כנראה לא חיית ב -4 מיליארד Main Street או משהו מטורף כזה. אז שלם הוא כנראה בסדר, אבל יש מישהו פעם חי בכתובת כמו 1A כיכר ברטל, או 1 ו 1/2? הדברים האלה קיימים, למרבה הצער, גם אם אתה לא גר שם, ישנם אלה אנומליות כמו דירה 1A, 1B, 1C. אז אתה יודע מה, אנחנו כנראה לא צריך ללכת עם שלם, אחרת אנחנו הולכים לאבד כמה מכירות. שדה צ'אר, אולי? אני לא יודע כמה זמן. זה כנראה לא הולך להיות ארוך, כך 10 או משהו. אף אחד לא הולך לכתוב מספר עוד, אולי. אבל שוב, אנחנו צריכים כנראה קצת יותר מחשבה זה. אולי google, לעשות קצת מחקר, אבל נלך עם האומץ שלנו לעת עתה. רחובות, char, 50, אני לא יודע. בשלב מסוים, אף אחד לא הולך לכתוב אותו על גבי מעטפה, גם כך יש כנראה כמה גבולות עליונים שם. עיר, אותו, בטוח, כך להשחיר 50. מדינה, יכולה להיות בארה"ב הממוקדת לעת עתה. אז זה יכול להיות רשימה, בטובך של של חוות דעת, מדינה. זה יכול להיות כשתי דמויות. אז בעצם, אולי, כל הזמן אמרתי char. אני מתכוון כנראה varchar, רק ליעילות מסוימת, אבל נצטרך לחזור כי ההחלטה בעוד רגע. יכול להיות char באורך 2 עבור המדינה. אם בארה"ב יש להם, כמו MA, מסצ'וסטס, ניו יורק, ניו יורק, ניו ג'רזי, ניו ג'רזי, וכן הלאה. אז זה יכול להיות קבוע בבית זה. DC עבור וושינגטון. אבל אני חושב, אוליבייה, אתה הציע גישה אחרת. קהל: [לא ברור] DAVID מלאן: כן, אז זה קצת מעצבן להקליד, אלא enum אולי הגיוני יותר, כי בדרך זו, לפחות בארצות הברית, אתה יכול למנות, אם לעייפה, אבל אתה עושה את זה רק פעם אחת במסד הנתונים ולעולם שוב צריך לחשוב על זה, בכל 50 קודי שני התווים. אז אני אוהב enum. בואו נישאר עם זה שם, כי זה סוג של אוכף יותר קשיח. ואז מספר מיקוד? אני חושב אנדרו היה מחשבה על זה קהל: [לא ברור] DAVID מלאן: כן, חמש או תשע. בואו פשוט לשמור את זה פשוט. פשוט תעשו את חמש לעת עתה. אבל אולי אני יכול רק לעשות מספר שלם, נכון? יכולתי, אבל אתה יודע מה, אני עשיתי את הטעות הזאת פעם אחת, במובן מסוים. לפני שנים, הייתי נודד מן ב- Microsoft Outlook ל- Gmail, יש ו- Outlook דרך ייצוא כל אנשי הקשר שלך כקובץ אקסל, קובץ CSV, מופרדים בפסיקים קובץ ערכים. ואני עשיתי טעות, אני חושב, של לחיצה כפולה עליו, פעם הורדתי את הייצוא, כדי לוודא שזה נראה כמו שציפיתי. כנראה פגעתי שמור או לתת שמירה אוטומטית בעיטה או משהו. כי כשאני מכן מיובא אותו לתוך Gmail, כל זה פועל. אבל במשך שנים, עד עצם היום הזה, ואת עשיתי חמש זה, לפני 10 שנים, אני עדיין למצוא חברים שיש להם כתובות שנראות כמו זה. למה? קהל: [לא ברור] DAVID מלאן: לקח ה -0, טוב, די, זה לקח את המיקוד כולו מספר, ולכן זה -0 מובילים שפירושו אין לו משמעות. וכך 2138 נראה המיקוד שלי. וזה, למען האמת, קובץ Excel מעצבן תכונה לפיה אני חושב כברירת מחדל, גם אם זה אמור רק הטקסט להיות, Microsoft Excel מחליט, תן לי להיות מועיל, אה, אני רואה מספרים בלבד. בואו לטפל כמו המספרים האלה. וזה מקצץ את האפסים המובילים. אני נשבע באלוהים, כל זוג של חודשים אני מוצא כתובת, ומתוך מעין OCD, אני חוזר ב ומוסיפים את 0, למרות שאני אף פעם לא לשלוח אנשי מכתבים או משהו כזה. אבל אני עדיין למצוא שרידים של זה. אז זהו לומר, האם זה רעיון טוב? בסדר, לא, כי אף אחד מסצ'וסטס, בתחום זה, הוא הולך להיות o מוביל אותם. אז בואו נלך עם כמו char, כנראה, חמש. והנה, אנחנו מבינים יכול להשתמש enum ואנחנו יכול למנות 10,000 מספרי מיקוד אפשריים, אבל זה מרגיש כאילו זה כנראה חציית קו של, כמו, הטבות. אם אתה צריך קלט נתונים רבים לתוך מסד הנתונים שלך על מנת להגן מפני משהו. אז char הבנתי שאתה יכול להקליד ב H-E-L-L-O המיקוד שלך, וזה כמובן לא מספרי. אז אין שום דרך, ב מסד נתונים טיפוסי, כדי לציין מספרים בלבד חמש רק תווים, אז אנחנו הולכים לעשות כדי לעשות את זה בקוד. אנחנו הולכים לעשות את זה ב- PHP או Java או כל שפה אנחנו באמצעות בשרת לאכוף זה סוג של אילוץ. וואו! בסדר, אז כל שאלות עדיין? בוא נעשה עוד החלטה עיצוב. מתברר כי אתה גם יכול לבחור, בעת תכנון מסד נתונים SQL, או database-- היחסי הטיפוסי שבו שוב, יחסי רק פירושו שורות ועמודות, וככה אתה לארגן data-- שלך ולהבין מה שזה אומר הוא, אני כבר מטעה כי, אני drawing-- זה הוא מה שנקרא הסכימה עבור טבלת מסד נתונים. זה כמו מפרטים עבור table-- אבל כשזה מגיע זמן כדי לאחסן נתונים בפועל, ואנחנו נעשה את זה רק על ידי דוגמא כאן. אני הולך לפתוח Excel, כי Excel ייתן לי שורות ועמודות. וזה בדיוק מה אורקל MySQL וכלים אחרים ינתנו לי. אז אני רק הולך להשתמש זה לצורך הדיון. תן לי ללכת קדימה ולפתוח מסמך נציג כאן, להתקרב קצת. כך למשל, הכותרות שלנו הן עכשיו שם פרטי, שם משפחה, מין, זהות, דואר אלקטרוני, מספר רחוב, רחוב, אופס. רחוב, עיר, מדינה, רק על מתאים על המסך. אז מה שזה אומר זה שכאשר משתמש הרושם ראשון עבור אתר האינטרנט שלי, זה הולך להיות משהו כמו דוד, מלאן, מ ', נניח 1, malan@harvard.edu, מספר הרחוב יהיה להיות כמו ריבוע 1 ברטל, Cambridge, MA, 02138, ולאחר מכן הלאה. לכן, כאשר אני אומר כי מסדי נתונים יחסיים או מסד נתונים SQL הוא שורות ועמודות, אני מתכוון לזה. נתונים בפועל זה מאוחסן בשורות ועמודות. זהו רק צירוף מקרים, שאנחנו מדברים, ואני רק ציור זה בשורות ועמודות. זוהי רק הסכימה, הגדרת העל. אז אחד מהתחומים הללו כאן, או באופן שקול, שם, אשר הם שדות שאתה חושב אני הולך לחפש אם אני משתמש או אם אני מנהל מסד הנתונים? כאילו, מה אני שדות באמת הולך לחפש? קהל: [לא ברור] DAVID מלאן: השם, אז כן אני אוהב את העובדה ש-- כן, הדוא"ל יכול להיות די נפוץ. מצטערים, אמרת שקוראים. אז maybe-- ושוב, אנחנו סוג של מדבר באופן מופשט. אני לא יודע למה אתה 'd מחפש שם, אבל זה מרגיש סביר אם אתה מחפש משתמש. אולי קובע, בטוח, מזהה. וזה חלקלק מדרון, מפני שיכולתי להמציא תרחיש שבו אולי הבוס שלי שאל אותי, כמה גברים יש לנו באתר שלנו? כמה נשים יש לנו באתר שלנו? וכך בשלב זה, ייתכן שתרצה לחפש על המגרש המגדר, מדי, ושום דבר אחר. אז יש trade-off כאן. שוב, אין תשובה נכונה, אבל יש תכונה היא במסדי נתונים SQL ביותר המכונה אינדוקס, לפיה אתה, המעצב, מנהל מסד נתונים, יכול להחליט מראש איזה שדות מסד הנתונים צריכים לייעל בחיפושים על. אתה יכול מאוד בתמימות לומר, לייעל זה, לייעל את זה, לייעל זו, לייעל את זה ואת זה, ובסיס הנתונים יהיו לעשות משהו קסום מתחת מכסה מנוע, ולעשות משהו בצורה כזאת כי בפעם הבאה שתחפש על כל אחד מהתחומים הללו, זה יהיה, למעשה, להיות מהיר יותר. זה אפשרי. זה לא מבטל את עצמו. אבל חייב להיות מחיר ששולם. אם בתמימות, או יתר בהתלהבות למשל, מדד כל אחד מהתחומים הללו, כביכול, לעשות את כולם ביעילות לחיפוש, מה המחיר הם כנראה אתה משלם? קהל: [לא ברור] DAVID מלאן: ביצועים. למה את מתכוונת? ובכן ביצועים, לפחות בהקשר שאני מדבר עליו, הוא יותר טוב עכשיו. זוהי ההגדרה של אינדקס. זה יגרום חיפושים מהירים יותר. אז זמן יורד, כביכול. קהל: [לא ברור] DAVID מלאן: שטח. אז שוב, אלה הם מסחריים נפוצים. אני יכול להאיץ את החיפושים שלך, אבל זה יעלה לך יותר בתים של שטח. למה? ובכן, כברירת מחדל, אם יש לנו אף אחד אלה כוכבים אדומים, אף אחד המדדים הללו, כמו שאני אומר, איך אתה עושה את החיפוש עבור שם באתר זה? אז בואו לצייר שלנו לב בדוגמה זו. אם יש לנו דוד סקאלי כרים ו Arwa ואחרים בשורות אלה, לדוגמה. אז בואו לעשות בדיוק את זה. סקאלי נמצא כאן, ולאחר מכן יש לנו כרים, ו Arwa, וכל השאר, אם לא הגדר אינדקס, אם אפשר לומר כך, הכי טוב שאתה יכול לעשות הוא לחפש ליניארי. אם אתה מחפש Arwa, אנחנו לא הולך להיות מסוגל לקפוץ ישר אליה בִּמְהִירוּת. אנחנו הולכים להתחיל עליונים ללכת כל הדרך עד לתחתית, שלא כמו המקורי שלנו מייק סמית למשל. אם, לעומת זאת, אני אומר, היי, מסד נתונים, מדד בשדה השם הפרטי, אז זה הולך לעשות משהו להשתכלל ולתמוך משהו כמו חיפוש בינארי. זה כנראה לא חיפוש בינארי כשלעצמה. מאגרים נוטים להשתמש אחר מבנה נתונים בשם עצי b, לא להתבלבל עם עץ בינארי, כי רק לעשות את זה מהר כדי לחפש משהו לוגריתמים בטבע. אבל המחיר שאתה משלם כדי לבנות כי תכונה, כי מבנה נתונים בזיכרון, יותר בתים. אז זה עלול לקחת כמה מגה בייט, כמה גיגהבייט, מי יודע? זה תלוי בנתונים. אז בשלב מסוים, אתה צריך להחליט, זה כנראה לא מקרה נפוץ. אז מה הם נפוצים בפועל מקרים, אם אתה באמת צריך לבחור, מה יכול להיות בתחומים האהובים עליכם? אֶלֶקטרוֹנִי. ואני אוהב הדוא"ל בגלל הדוא"ל, בתיאוריה, אמור להיות ייחודי. וכך בדרך כלל, כאשר אתה יודע מראש שאחד השדות שלך הוא או יהיה ייחודי, כי נוטה להיות טוב שדה לחפש על, כי ככה, כשאתה מחפש משהו, אתה הולך לחזור אחד או אפס תגובות אז תסיים. אתה לא צריך לשמור מחפש עדיין לאחרים. וכך במקרה זה כאן, דואר אלקטרוני, כל עוד אתה לא יכול להירשם פעמיים עם אותו דוא"ל, היא טובה. מזהה על פי הגדרתו, ב בעולם במדעי המחשב, אם אתה מדבר על ID, אשר להיות ייחודי יותר. זהו מעין הקונוטציה של זהות או מזהה. ושאר אלה עשויים להיות, בואו נכנה אותם נחמד שיהיה ברשותך, אבל לא באמת נדרש. וכך במסד נתונים, שתציין אינדקסים, אבל אתה יכול להיות אפילו יותר מדויק. אתה יכול להגיד, היי, מסד נתונים, ודא שכל מזהה בטבלה זו היא ייחודית. אפילו לא נתנו מתכנת בטעות להכניס דוא"ל כפולה או לשכפל מספר תעודת זהות. כל כך הרבה כמו enums להגן עלינו באופן דומה, אתה יכול להיות אלה הגנות ברמה נמוכה יותר. וכך עיצוב מסד נתונים, קצת שכל, הוא סוג של כיף, כי אתה עושה את זה מתוך התגוננות. אתה סוג של תניח כי אתה עם מתכנתים נורא, נורא ואתה רוצה לשים כמה הגנות ככל שתוכל כדי להגן על הנתונים שלך, אבל בו זמנית אתה רוצה כדי לשפר את הביצועים שלהן על ידי בחירה של שדות לבצע אופטימיזציה עבור. אבל אתה לא יכול בהכרח לעשות את זה בריק כמו שאנחנו סוג של נמצא כאן. אתה חייב לדעת מה הם אלה מקרים נפוצים להיות. אם המפתחים יישום פנקס כתוב, ייתכן מאוד רוצה להיות מסוגל לחפש כמעט בכל תחום, רק מטבעו של היישום. אז אולי אתה מבלה שטח נוסף זה. נכון, כל שאלות? כֵּן. קהל: [לא ברור] DAVID מלאן: מס ' קהל: [לא ברור] DAVID מלאן: אישור. קהל: [לא ברור] DAVID מלאן: הו, אז אנחנו מדברים בצורה עכשיו זה לגמרי בשפה אגנוסטי. אז אנחנו מדברים עכשיו על מסדי נתונים יחסיים באופן כללי יותר, או SQL מסדי נתונים באופן כללי יותר. קהל: [לא ברור] DAVID מלאן: מילה עדיפה להשתמש הוא, יכול להיות בשימוש על ידי כל שפה. אז אני יכול לכתוב קוד JavaScript, C קוד קוד, C ++, Java קוד, קוד רובי, שכולן לדבר עם שאילתות מסד נתונים ולבצע. למעשה, זה לא רע עניינו כדי שאילתא למשל. ושוב, אנחנו לא הולכים להיכנס Java או C ++ או שום דבר כזה יותר, אבל ב- SQL, השפה שבה אני כל הזמן בהתייחסו, שפת שאילתות מובנית, זו עצמה היא שפת תכנות, אבל זה אמור לשמש, לא הפתעה, מובנת שאילתות שאילתא. בכך אני מתכוון לזה. הדרך תבחר נתונים ממסד נתונים MySQL הוא שאתה ממש להקליד התוכנית שלך משהו כמו כוכב בחר ממשתמשים. אני מניח כי בטבלה זו, מעתה נקרא משתמשים. יכולתי לקרוא לזה כל מה שאנחנו רוצים, אבל זה סוג של הגיוני. וכך בחר הוא מאוד הפועל נפוץ, אם אתה יהיה, SQL, פשוטו כמשמעו שעושה את זה. מה אתה חושב כוכב אומר בהקשר זה? קהל: [לא ברור] DAVID מלאן: אני מצטער? קהל: [לא ברור] DAVID מלאן: לא נדרש, זה כוללני יותר מזה, בעצם. זה אופי הקלף. כוכב כמעט תמיד אומר משהו, אז זה אומר, במקרה זה, בחר הכל מסד הנתונים. אז כשאני אומר את זה, אני מתכוון להחזיר אותי בכל טור מהשולחן שלי התקשר משתמשת. אז תן לי סדרה מכך, כפי שהוא נקרא. במילים אחרות, לתת לי עותק של גיליון אלקטרוני, מה שאני מנסה להגיד. אבל אם אמרתי כוכב בחר ממשתמשים שם מזהה שווה 1, כיצד גדול סט התוצאה שלי להיות אז? או באופן שקול, כמה שורות צריכות אני אוחזר ממסד הנתונים? מסתבר שזו רק אחת, אם יש לי אכן מטופלים מזהים כמזהה ייחודית, ואם דוד כי יש מזהה ייחודי, אני צריך לחזור האחד והיחיד שורה אחת המכיל את כל המידע של הדוד. אם אמרתי לאן זה מזהה שווה 99, אני צריכה לחזור, בהקשר זה, אפס שורות, לפחות כרגע. עם זאת, אם אני לא באמת אכפת על כל המידע הזה, יכולתי רק לומר, מאיפה דוד חיים? מיקוד בחר משתמש שם מזהה הוא 1. זה יבחר לי רק zip של דוד קוד ולא המכלול של אותה השורה. איזו סיבה יכולה להיות אני עושה את זה במקום שאילתא הכוכב, הקלף? קהל: [לא ברור] DAVID מלאן: כן, אני יכול רק צריך את זה. אז ביצועים הם שוב את התשובה כאן. למה לבקש יותר מידע ממה שאתה צריך, כי גם אם זה בסדר יחד, אתה עדיין צריך להעתיק נתונים, זה היה נראה, ממסד הנתונים לתוכנית שלך איכשהו, וזה פשוט טיפשי אם אתה רק צריכים חמש הספרות האלה, לא את המכלול בשורה. אז איך אני מכניס משתמש? תניח שמשתמש יש רק רשום בפעם הראשונה. התחביר בדרך כלל ייראה כך. הכנס לתוך משתמשים, ו אז היינו אומרים ערכים, ואז היינו אומרים הערכים כמו, נניח, לורן סקאלי, videographer שלנו ממש כאן. והשדה הבא הוא מין. אז נגיד ציטוט, סוף ציטוט "F", אז יש לנו תעודת זהות ואני הולך say-- בואו להעמיד פנים שהיא לא ממש כאן, אז נצטרך אחורה בסיפור. אז 2 תהיינה הזהות שלה. ואז לשדה הבא הנה הדוא"ל שלה. אז זה הולך להיות כמו לורן סקאלי וכן הלאה, ואנחנו פשוט נקודת נקודה dot אותה מכאן על. עכשיו הוא יקבל קצת שאילתא מייגעת, אבל את הכנס בסופו של דבר ייראה ככה. אם אני רוצה להיפטר סקאלי, אה-אה, בוא deregister שלה, היא מוחקת את החשבון שלה, להסיר ממשתמשים שבו מזהים שווה 2, יהיה להיפטר סקאלי. או שאני יכול לומר משתמשים עדכון להגדיר, נניח, מה שאנחנו יכולים לשנות? נניח שהיא זזה. zip סט שווה 021-- לא, זה zip הנוכחי שלה. 90210. קוד ה- zip האחר רק אני יודע בעולם. אז שתשנה zip אותה code-- למעשה, כי לא הייתי משנה המיקוד שלה. מה עשיתי בדיוק? למרות שהתחביר הוא כנראה חדש. קהל: [לא ברור] DAVID מלאן: כן, עברתי את כולם לבוורלי הילס, קליפורניה. אז אני צריך בעצם לומר היכן מזהה שווה 2. וכן הלאה. אז SQL הוא על כל אלה מיני הוראות. בחר, להוסיף, למחוק, לעדכן, עם פרדיקטים אלה בסוף אלה הסעיפים שבו, אם אפשר לומר כך. ויש הרבה יותר אתה יכול לעשות, אבל זה באמת רק מסתכם פשוט, אם arcanely, להביע מה אתה רוצה את מסד הנתונים כדי לעשות. ואז את מסד הנתונים יהיה להבין, כאשר תכניס לורן סקאלי לתוך מסד נתונים, איפה לשים אותה בזיכרון כך שאנחנו מאוד יכול במהירות לקבל שלה מבוסס על כתובת הדוא"ל שלה או על פי מספר הזהות שלה וכדומה. כן, דן. קהל: [לא ברור] DAVID מלאן: שאלה טובה. האם התסריטים האלה להשתנות מעת מיקרוסופט הגישה אורקל כדי MySQL כדי PostgreSQL? התשובה הקצרה היא שזה תלוי. בתיאוריה, יש מאוד משנה משותף משמעותי של SQL מה המשותף בין כל של מימושים אלה. עם זאת, יצרנים שונים יש תכונות נוספות למאגרי המידע שלהם לעשות דברים מסוימים מעבר להיקף של תכונות אלה, כי יכול היה, למעשה, לשבור. אז היזמים בדרך גידור מפני זה, כי הוא במקום לכתוב גלם קוד SQL כמו שאני כותב כאן, הם במקום להשתמש בספריה, ספרייה משותפת כי עצם מעין היא גבוהה יותר רמת ותקצירים אשר משם המוצר אתה משתמש. וזה נותן לך פונקציות והליכים לקרוא, כך שאתה אף פעם לא למעשה לכתוב SQL גלם. בתיאוריה, אם כן, אתה יכול לשנות מוצרים מ- Oracle ל- Microsoft או להיפך או כל דבר אחר, ואתה ממש לשנות דבר על הקוד שלך. המציאות, לעומת זאת, הוא, אתה לפעמים לוותר תכונות כתוצאה מכך. ייתכן בחר מוצר בגלל זה חייב תכונות אלה ערך מוסף, ואתה פשוט עכשיו לא באמצעות אותם במודע. וגם באופן מזדמן, רוב החברות נוטות לא להתרחק ממסד הנתונים שלהם. אז בזמן הזה הוא נחמד יש תכונה, המציאות כלומר, אם אתה בשיפוץ מסד הנתונים שלך, אתה כנראה מה שהופך צרור של שינויים אחרים בכל מקרה, מה שאתה עושה לא בהכרח צריך לצפות את זה. אז זה ללא ספק יתר הנדסת הבעיה, אבל זה באמת תלוי בהקשר. אבל בתיאוריה, SQL משותף במוצרים השונים הללו. באמת שאלות טובות. כֵּן. קהל: [לא ברור] DAVID מלאן: כן, אז אתה יכול לחשוב מסד נתונים רק הוא שרת, בסוף היום, ובתוך של שרת היא חבורה שלמה של שולחנות, שורות ועמודות. וכאשר אתה שולח שאילתה ככה מהתכנית שלך, האתר שלך, שנכתב ב- Java, Ruby, Python, מה שלא יהיה, השרת מקבל פקודה זו ופירוש זה באותו פשוטו כמשמעו דרך שהזכרנו קודם לכן עם בשפות לפרש, ולאחר מכן ביצוע פעולה כלשהי על אפס או שורות נוספות אפס או יותר טבלאות. קהל: [לא ברור] DAVID מלאן: בדיוק, בדיוק. אז פסאודו קוד למשהו ככה שאולי זה. בקובץ PHP שלך או שלך קובץ Python או קובץ Java שלך, היית צריך קוד פסאודו קוד, או שריטות כמו בלוקים כמו, אם משתמש מבקר acme.com/register~~V לראשונה, אז להכניס לתוך משתמשים וכן הלאה. והיינו לתרגם את זה כדי קוד בטון יותר בסופו של דבר. אבל באמת, יש לנו את כל אבני הבניין כאן, למרות שאנחנו מדלגים כמה הצעדים ליישום. אז תנו לי למצוא פגם עם מה שאנחנו להפליא עשה רק לפני רגע. יצרת די טבלה מלאה למשתמשים. יש להודות, נוכל ליישם זה בעוד כמה דרכים שונות, אבל אתה בעצם הובלת אותנו במורד path-- ואני אומר לך, אבל זה כנראה fault-- שלי של למדי יישום מסד נתונים יעיל. זה לא תקין. ועל ידי מנורמל אני מתכוון יש הולך להיות, לאורך זמן, יתירות משמעותית, ולכן יעילות, כי הוא בזבוז של מקום. בהתבסס על רק מה שאתה רואה כאן, יכול אתה רואה איפה זה בזבוז של שטח הוא יגיע, לאורך זמן, ככל שיותר ויותר משתמשים לרשום עבור אתר האינטרנט שלך? אילו נתונים עשוי להיות מיותר? קהל: [לא ברור] DAVID מלאן: למה אתה מתכוון לזה? קהל: [לא ברור] DAVID מלאן: כן. ואם נניח לצורך של היום כי זה נכון. מסתבר, ולמדנו זה בדרך הקשה, זה לא נכון. יש איכשהו בערים מרובות, איכשהו, באותו מיקוד, אשר שובר האינטואיציה הנפלאה הזו. אבל נניח שזה נכון, כי זה כמעט תמיד נכון. אז תניח כי מיקוד הוא תמיד קשור באותה העיר ומדינה, שהוא סוג הנחה סבירה, אך אינו נכון, מתברר. אבל הנחה סבירה למטרות של היום. אז נניח שאני גר בקיימברידג ' MA, בהתאם לטבלה של משתמש זה, ונניח כי לורן סקאלי מתגורר Cambridge, MA, ונניח כי כרים מתגורר Cambridge, MA, ו Arwa חי בקיימברידג ' MA, כולנו 02138. למה אנחנו זוכרים קיימברידג, MA, 02138 עבור ארבעתנו? מה צריך להספיק לזכור? קהל: [לא ברור] DAVID מלאן: רק את המיקוד. רק כי 02138 קיימים, כי אתה יודע מה יכולנו לעשות? אנחנו יכולים לקבל עליו חמודים כאן ושוב כאן, להגדיר שולחן אחר לאן זה הולך להיות שם, זה הולך להיות סוג, זה הולך להיות אורך, ואילך, אני הולך לקרוא את טבלת הערים שלי. זה נקרא, של כמובן, שולחן המשתמשים שלי. אז מה כדאי להכניס לכאן עבור שולחן הערים שלי, לדעתך? קהל: [לא ברור] DAVID מלאן: כן. אז zip ומדינה ועיר. וכך לסוג כאן, נגיד זה הולך להיות char 5 שוב, בכפוף לדיון קודם לכן. זה יהיה enum, אולי כמו לפני כן, העיר תהיה varchar 50. אז עכשיו מה אני מקבל למחוק מלוח זה לחסל חוסר יעילות זה? קהל: [לא ברור] DAVID מלאן: נחמד. המדינה העיר להיעלם, אז אני כבר עכשיו בוטל היעילות הפוטנציאלית לזכור באופן מיותר, קיימברידג ', MA, Cambridge, MA, Cambridge, MA, Cambridge, MA, אשר, אני מקווה אף פעם לא הולך להשתנות. וגם אם כן, זה minorly מעצבן, עכשיו כי אני צריך לשנות אותו מספר שורות, ואילו כאן, יכולתי רק לשנות אותה במקום אחד. עכשיו מה trade-off, אולי? זה היה סופר נוח. האם כל הנתונים שלי יפה ביחד. אבל מה בבירור המקרה עכשיו? קהל: [לא ברור] DAVID מלאן: בדיוק, ואני שמח אפילו השתמשת במילה להצטרף, כי זה באמת מילת המפתח, בעולם של מסדי נתונים יחסיים ב- SQL, זה מילה ממש אתה אולי להקליד או לפחות להעביר. ואכן, מה שאנו צריכים לעשות לברור המידע המלא של הדוד הוא משהו כמו כוכב בחר משתמשים, להצטרף ערים, on-- ועכשיו אני הולך רק לעבור לשורה שנייה כך users.zip fits-- זה שווה cities.zip, שבו users.ID שווה 1. אז מה קורה? זה מכוער למראה, אבל אתה יכול סוג של לקרוא אותו משמאל לימין, מלמעלה למטה. כוכב בחר ממשתמשים היש כמו קודם, אבל זה לא ממשתמשים, כשלעצמה. זה ממשתמשים להצטרף הערים. מה אני מצטרף שני שולחנות על אלה? ובכן, ככל הנראה, שולחנות משתמשים zip שדה, ותקופה זה רק מיוחד תחביר לבטא רעיון זה, וזו שולחנות הערים zip שדה. אני רוצה את שני אלה להיות שווים, אבל אני רוצה בסופו של דבר לבחור רק אלה השורות שבהן מזהה בטבלת המשתמשים שווה 1, אשר קרה להיות שלי. ורק שיהיה ברור, מתכנת, בדרך כלל כאשר hardcode משהו כמו מספר 1, כי אחרת באתר בלבד תומך דוד או המשתמש הראשון מאוד, לך במקום יעשה משהו כמו ID, שם זה מייצג משתנה, משהו יכול להשתנות עם הזמן, דומה ברוחה מה שאמרתי קודם עם סוגים אלה של מצייני מיקום. אבל לעת עתה אנחנו פשוט hardcode זה כמו 1. אז מה זה אומר? ובכן, דרך נחמדה להמחיש זאת הוא שאם יד הלוח זה היא המשתמשים, והיד זהו רוכסנים שולחן, אנחנו סוג של finding-- וקצות האצבעות שלי הם zip כאן, ואת קצות האצבעות שלי הנה zip, אתה סוג של שלובים זה כך שאתה מקבל בחזרה שהתקבל טבלה מקורית, על ידי הצטרפות באמת שני שולחנות על המגרש המשותף. וזה לא חייב להיות zip. זה יכול להיות דבר אחר ביותר, אבל zip הוא נחמד, כי אחד, זה קצר, שני, זה תמיד באותו אורך, ולכן יש יעילות אמיתית למה אוליבייה המוצע כאן עם הפקטורינג את הרוכסן, ו [לא ברור] מציע שאנחנו להיפטר של העיר ומדינות. אז זהו התהליך המכונה נורמליזציה. כל שאלות על זה? ובכן תן לי להצביע זהו סוג של דברים, למרות שזה די ברמה נמוכה, הדיון הזה, כי היית חושב אתה סוג של מקבל לאיבוד העשבים, זו היא ביטוי של שפע הזדמנות למפתחים להיות רע. ואכן, גם כאשר אנחנו, ב קורסים שלמדנו, כאשר היו לנו, למשל, לא מנוסה מתכנתים ראשונים לבנות אתרי אינטרנט, במבט ראשון, האתרים עשויים להיראות נהדרים. ויש להם את כל פונקציונלי בקשנו, המפתחים עשו עבודה טובה. אבל הם לא בהכרח יודעים מספיק על עיצוב מסד נתונים או שהם לא חשבו קשה מספיק על סוגי נתונים ועל סוגי למשתמשים את האתר היה אמור להיות, ואנו מוצאים, אז, שישה חודשים מאוחר יותר, אחרי שהם כבר בוגרים או עברו על, כי לעזאזל, האתר שלנו הוא באמת, איטי באמת. ואני אפילו לא מדבר על כך מיליונים או אלפי משתמשים. אני מתכוון כמה מאות משתמשים בקמפוס, כולם רוצים, למשל, לקנות קורסים במקביל, הם באמצעות הקטלוג כי כמובן יישום שציינתי והדבר הוא מקבל באמת להאט כי לא היו אינדקסים. לא היו כוכבים אדומים, אם אפשר לדבר, או היו לנו לא בהכרח בחשבון את נתונים משותפים לקבל קצת חיסכון של החלל. וכך כאשר לדאוג לבדיקת מפתח או אדם מסד נתונים או משהו דומה, את סוגי השאלות לחשוב דרך הוא אפילו, בעת בדיקה, הקוד של מישהו לומר, לא בהכרח נראה דרך כל הקוד שלהם, אבל להגיד, בואו נסתכל דרך טבלאות מסד הנתונים. מה אתה מאחסן? ואז לומר, טוב, חכה רגע, למה אתה משתמש מספר שלם? מה אם יש לנו 4 מיליארד ו 1 של שורות אלה? וגם כאלה שאלות הן הזדמנות להדוף סוג של ו לקבל תחושה של, שם אם אתה לא בנוח לעשות זה, מישהו שיש יותר טכני לשאול את השאלות האלה, אם יש או אין האדם באמת יודע את החומר שלהם. וזהו סוג של הדבר הזה גם, כי אנשים באינטרנט אשר הם אוטודידקט, אולי ללמוד בתדירות נמוכה יותר, כי אתה לא בהכרח נתקל בו כמו הרבה, כי אתה יכול לקבל למעלה וריצת מסד נתונים, אבל אם קראת על הדרכות או היה ספר על נרמול בסיס נתונים ויצירת אינדקס וביצועים, אלה הם מיני דברים כי הם הולכים לפגוע בך. ואתה עלול לחשוב, או מהנדס רע אפשר לומר, נו, טוב, כדאי לשלם עבור מסד נתונים גדול או מסד נתונים מהיר יותר או סתם לזרוק כסף על זה, סולם אנכי, לא בהכרח כך. אם אתה רוצה ללכת ב-- ואתה יכול להיכנס לאחר אינדקסים fact-- ולהוסיף, וזה עלול לקחת כמה שעות עבור מסד נתונים לבנות כי נתונים חדשים המבנה שאני שהוזכר קודם לכן, אתה עדיין יכול לתקן את זה לאחר המעשה, כי זה המקום שבו אתה להתחיל להבחין מעצבים בין טוב לרע מעצבים, לא רק מבחינה אסתטית, אבל מבחינת ביצועים גם כן. יש שאלות? לא? אז עבור NoSQL, אשר היה סוג אחר של מסד הנתונים שעליו רמזתי קודם לכן, אין לך שורות ועמודות. במקום זאת, יהיה לך משהו זה נראה קצת יותר כמו זה. אני הולך להשתמש ובתחביר נפוץ. סוגריים מסולסלים לקרות לשמש לכאן די הרבה. ייתכן שיהיה משהו כמו השם הראשון הוא דוד, ייתכן שיהיה אחרון שם הוא מלאן, ציטוטים, ייתכן שיהיה מזהה הוא-- סלח לי, מזהה whoops-- הוא 1, הדוא"ל הוא malan@harvard.edu, ואני לא לטרוח להקליד את השאר, ולאחר מכן כמה דברים אחרים. במילים אחרות, זהו ייצוג טקסטואלי של מה שאנחנו בדרך כלל ניקרא אובייקט תכנית מחשב. משתמש באובייקט הוא בדרך כלל רק אוסף של זוגות ערך מפתח. אז שוב, מוטיב חוזר זה. ראינו זוגות ערך המפתח ב- HTML, ראינו זוגות ערך מפתח כעת בהקשר של מסדי נתונים, ואנחנו ראה זוגות ערך מפתח בהקשר של, אני חושב, שפה מוקדם יותר היום. השומר מתקרב. ואכן, זה ממש אילו נתונים מסתכם, נתונים ו metadata, או ערכים ומפתחות, בהתאמה. אז א-יחסי שאינו מסד נתונים, משהו מבוסס על אובייקטים, שבו אתה פשוט גוש הכל יחד ולשים אותו לזיכרון, היה בדרך כלל להיות כמו בתמונה, או חשב, כמו זה. ואני אשאיר את זה עכשיו כמו סוג של גישה חלופית. ואחד זה לא בהכרח טוב יותר מהשנייה. למעשה, מאוד באופנה בימים אלה הם מערכות מסדי נתונים כמו MongoDB ו Redis וכמה כלים כאלה אחרים, זמינים באופן חופשי, אבל הם יותר ויותר en אפנה. בין השאר משום שהם מציעים נוספים תכונות פני גישות הטבלאיות אלה, אלא גם משום שהם קל קצת להשתמש, כי אתה לא צריך לחשוב כל כך קשה על הרבה החלטות העיצוב הללו. אז הפלוסים והמינוסים. אז מבינים שיש אפשרויות מעבר למה שאנחנו פשוט בילינו זמן על. אז בוא נעשה את זה. בואו מעבר קצת בחזרה עכשיו כדי תכנות אינטרנט, כך שאנחנו סוג של להסיק היום עם משהו זה על הידיים קצת, מילוי בחלק פערים מאתמול. תן לי ללכת ראשון זה. אז לזכור כי אתמול היה לנו קצת HTML הקנונית דפים היו בתחילה, רק HTML, ולאחר מכן באופן משני היה CSS, גיליונות סגנון מדורג. זהו תג חדש שאנחנו לא לראות אתמול, או להתעכב על, מה שנקרא תג סקריפט. מסתבר שאתה באמת יכול להטביע שפה בשם JavaScript האינטרנט שלך דף ולעשות האינטרנט שלך דפים לעשות משהו. אז מה אני מתכוון לעשות את זה? ובכן, תן לי ללכת קדימה ופשוט ללוות את הקוד הזה לרגע. אני הולך להיכנס Cloud9, אין צורך ללכת לשם בעצמכם עדיין, ואני הולך להתקשר alert.HTML זה. אני הולך להדביק בקובץ שלי כאן. ורק כדי להבהיר מה שעשיתי, תן לי ללכת לכתובת זו וללכת להתריע, ואתה רואה את Hello World. אבל זה סוג של משעמם. אני רוצה לעשות משהו שונה קצת. אז אני הולך בעצם לעשות את זה. אני הולך להיכנס לפה דואר, ובין לבין תגי הסקריפט שלי, אומר התראה ( "שלום, עולם"); כך הודעה זה קצת מרושל, אבל יש לי HTML, בתוך אחד מהם הוא שפה בשם JavaScript, וזה מה שנקרא קריאה לפונקציה או קריאה לפרוצדורה. זהו הפועל, פשוטו כמשמעו, במקרה זה, ואני פנייה פונקציונלית קוד שמישהו כתב אחר. כך פונקציונלי הוא התראה, אז בואו נלך בדף זה עכשיו ולחץ רענן, ועכשיו אתה לראות קצת אינטראקטיביות מעט. זהו סוג של ספר זקן ומכוער. זה סוג של מזכיר לך את חלונות קופצים, אולי, של פעם אבל זה לא עושה משהו קצת יותר תכנותי. אז יותר מזה, בוא נעשה משהו יותר מעניין. תן לי ללכת לכאן להיפטר זה. ואני הולך קדימה ליצור צורה כמו שעשינו אתמול. בעצם, אתם יודעים מה? אני הולך להיכנס google.html, אשר אנו נכתב על אתמול, שנראה כמו זו, דרך אשר חיפשנו חתול אבל שם לב שיש סוג של באג בגרסה הנוכחית. זה עובד לחתולים, אבל יניח כי אני לא לשתף פעולה ואני להקליד כלום, ואני פשוט לוחץ להגיש. זה סוג של התנהגות מוזרה. לקח אותי Google אמיתי, לא נתן לי הודעת שגיאה. הייתי רוצה לספר את המשתמש אתה צריך לתת לנו ערך. אז איך נוכל לעשות זאת? ובכן תן לי לחזור לתוך Cloud9 ו תן לי ללכת אל החלק העליון של הדף שלי ולהוסיף תג סקריפט כזה, שבו אני הולך להקליד קוד JavaScript. ואני הולך לעשות את הדברים הבאים. אם (document.getelementByID-- וזכירה כי דיברנו על זה קודם לכן, פונקציה. מה מזהה אני רוצה להגיע? אני רוצה לקבל q, ואני הולך נניח שווה כלום, כמו זה- ממש הרשה לי להשתמש במרכאות כפולות רק consistency-- שווה כלום, אז התראה ( "אנא הקלד שאילתה") כאן. אז יש לי את מה שנראה משהו כמו מצב. ראינו הרעיון הכללי הזה Scratch. זה כמו אחד מאותם פאזל חתיכות שנראה ככה. ומה שאני אומר? ובכן, כאן למטה, לב שאני הולך לעשות את הדברים הבאים. אני הולך לתת בטופס זה שדה לא רק שם של q, אשר זה מה שגורם עבר ל- Google, אבל אני הולך לתת לו מזהה מקומי, המכונה גם q. אבל אני יכול להתקשר דבר זה אני רוצה, אני פשוט הולך להשאיר את זה פשוט וגם לקרוא לזה q, רק לפשטות. ועכשיו אני הולך לעשות משהו קצת יותר. על שדות הטופס כאן, אני הולך להוסיף מה שנקרא מטפל באירועים. ביום להגיש, אני רוצה לקרוא פונקציה הנקראת validate. זו אינה קיימת עדיין, זה מילה, או לאמת פועל זה, משום מה אני הולך לעשות הנה עכשיו הוא להוסיף קוד מסוים. אני הולך לומר אמת פונקציה. אני הולך להגביה זו ולהוסיף עוד סד מתולתל אחת פה ואחת כאן. חשבתי מה זה עושה כעת. יש לי now-- לחשוב על זה בתור נוצר שלי פיסת הפאזל עצמו כי לא בעבר קיים, כבר קראו לי חידה חתיכת פיסת הפאזל לאמת. המטרה בחיים שלה היא לבצע ארבע שורות הקוד בתוכו. אם document.getElementById כך מושגית, כי הוא הולך להיכנס האלמנט, אלמנט HTML אשר ייחודי הרעיון הוא פשוט q, ולאחר מכן אף המבנה נראה קצת מוזר, כי שווה שווה רק אומר שווה. אז זה אומר אם האלמנט עם מזהה ייחודי של q, כאשר קיבל, אין שום משמעות, זה פשוט שווה ציטוט סוף ציטוט, שום דבר שם, אז מה אני רוצה לעשות? אני רוצה לצעוק המשתמש. ואנחנו לא נלך בפירוט רב כאן. אני הולך להחזיר שווא. כלומר שגיאה. אחר, אני הולך להחזיר true. אז או זה עבד או לא. שקר או אמת. ועכשיו אם אני לא לעשות טעויות, תן לי לחסוך זה רענן. ותנו לי רק לבדוק פעמיים כי לא, למעשה, לעשות כל שגיאות הקלדה, אז אני לא להביך את עצמי. בוא נראה אם ​​זה עובד. אז עכשיו אני הולך להקליד חתולים. זה עדיין עובד, או עובד וחצי לפחות. עכשיו תן לי לטעון אותו מחדש, ועכשיו תן לי לנסות הגשה מבלי להקליד anything-- לעזאזל, זה שבר. רגע אחד. הרשו לי לפתוח את המסוף, [לא ברור] יומן, לטעון מחדש את הדף. תן לי לנסות את זה שוב. אה, לעזאזל. שכחתי. עשיתי טעות דפוס. אני זוכר מה זה. .ערך. התכוונתי לומר אם הערך של האלמנט מזהה אשר q שווה את זה, אז לצעוק המשתמש. אז עכשיו תן לי לעצור את הנשימה שלי שוב. מתחילים. הנה. אנא הקלד שאילתה. אז זה לא נותן לי דרך. אני יכול להיות סוג של שובבה עם זה, ובמקום בדיקה שום ערך, אני יכול לומר משהו כמו, לא עוד חיפוש לחתולים, ועכשיו אנחנו יכולים רק יותר בשובבות לתת חיפוש המשתמש לכלבים אם הוא או היא רוצה, או אם אני נכנסתי פה לחפש לחתולים, עכשיו אני לא יכול. אז מה takeaway כאן? אז אחד, שמנו מוחדר בעולם של HTML ו- CSS שלנו, פונקציונלי תכנות. אני ממש יכול עכשיו החלטות בקוד. בעבר, כל מה שיכולתי לעשות הוא לסמן תוכן טקסטואלי או תוכן גרפי ולספר אותו מה לחפש כמו והיכן להציג. עכשיו אני באמת יכול לשאול שאלות של דף האינטרנט ולקבל החלטות על על זה, לבקש מהמשתמש אם אני צריך לצעוק לו או לה. אז בואו ננסה משהו בכוחות עצמו עם זה. קדימה, תן לי לפתוח את השקופית הבאה כאן, ופשוט לציין דבר אחד. בדיוק כמו עם CSS, נוכל לחשב את קוד JavaScript שלנו לקובץ נפרד, אתה יכול לעשות את אותו הדבר עם JavaScript כמו עם CSS. ואתה משתמש ששימוש מקור מייחסים של תג סקריפט. אבל אנחנו לא נסבך דברים לעת עתה. במקום זאת, אם אתה יכול ללכת לא בדף זה, but-- תן לי לעבור ממקום למקום הזה order-- ללכת, אם זה היה אפשרי, בדף זה כאן. URL זה כאן. זה בשקופיות של היום. ייתכן שיהיה עליך לטעון מחדש כי הוספתי כמה דבר. אבל ללכת לשם שבו חידות כמה מחכים. וזה ייתן לנו הזדמנות, בהקשר כיף יותר מעט, להשתכשך עם כמה JavaScript. וכאשר אתה מגיע לשם, אני אסביר מה מחכה. קבל ירוק. גדר כחולה. סטים ירוקים, קובע אדום. אופס. מצטער. זהו ההיקף שלנו תיעוד עבור האתגר הזה. וזה יעבוד כדלקמן. אז מה יש לך על זה דף חבורה שלמה פאזלים תמונה על ידי חבר באוניברסיטת סטנפורד. אז מה שאתם רואים כאן הוא כמעט סוג של אחד מאותם חידות עין קסם, אבל אם אתה רק בוהה בה, שום דבר לא הולך יצוץ מולך. במקום זאת, משהו לא מוסתרים בתמונה זו. וזה מוסתר בדרך הבאה. תמונות, כפי שאתה ודאי יודע, יכול להיות מורכב רק של שלושה צבעים. כמה אדום, כמה כחול, וכמה ירוקים. ואנחנו יכולים לעשות את כל צבעי הקשת על ידי ערבוב צבעים שלושה אלה איכשהו. אז זה נראה בעיקר ירוק כחול, אבל כמו ניק אומר כאן, תמונת הפאזל ברזל זהו פאזל. הוא מכיל תמונה של משהו מפורסם, לעומת זאת, התמונה עוותה. מטרת המפורסם נמצאת את הספרות באדומה. עם זאת, את ספרות באדומה יש כל חולק ב -10. אז הם קטנים מדי בפקטור של 10. אז במילים אחרות, ניק לקח תמונה מקורית, והוא desaturated כל של אדום ממנו, צמצום הכמות אדום דיו, אם תרצה, בו. הערכים הכחולים וירוקים כולם נראים בדיוק חסר משמעות, ערכים אקראיים, aka רעש תוכנן כדי לטשטש את התמונה האמיתית. אז מה ניק עשה היה הוא מיתן את האדום ולאחר מכן הוא פשוט זרק אקראי כמויות של כחול וירוק על התמונה לסוג של מעורפל מה בעצם עדיין שם. עליך לבטל עיוותים אלה כדי להציג את התמונה. ראשית, להגדיר את כל הערכים הכחולים וירוקים לאפס להוציא אותם מן הדרך, ולהסתכל על התוצאה. לאחר מכן להכפיל כל ערך אדום ב -10, דרוג בחזרה עד כ הערך הסופי שלה. מהו האובייקט המפורסם? אז כל יש לך מלבן זה בדפדפן שלך עכשיו. ושימו לב שיש כמה קוד פתיחה, אם אפשר לומר כך. זהו קוד JavaScript ניק כתב בשבילך. ושימו לב שיש קו באמצע כי מתחיל עם קו נטוי נטוי, זה מה שנקרא בדרך כלל תגובה. זה אומר שזה מונח המתכנת יש כי אין משמעות תפקודית. זה רק סימן חזותי האדם. אז אתה יכול להמשיך למחוק רק את השורה הזאת, ולהיות סופר נזהר שלא למחוק או לשנות כל דבר אחר. ותנו לי רק לך ללכת דרך מה הקוד הזה עושה ואני אשאיר את זה בך כדי להבין את תמונת הסוד. השורה הראשונה זה כאן כי יש לי רק מודגשת נותנת לך את הדברים הבאים. בצד שמאל, יש לך מה שנקרא משתנה שניק באופן שרירותי, אבל סביר שנקרא im עבור התמונה. בצד הימני זה סימן שוויון, הוא אומר לתת לי חדש ציטוט, סוף ציטוט "תמונה פשוטה". תמונה פשוטה, בהקשר זה הוא מה שנקרא בכיתה, גם, זה כמו סוג של class-- טכני prototype-- אבל באמת, זה נותן לי אובייקט חדש, שתוכנם הם הקובץ, ברזל-puzzle.png. במילים אחרות, ניק יצר התפיסה הזאת של תמונה פשוטה כך שנוכל עבור פדגוגית מטרות, לשחק עם התמונה ולשנות אדום שלה, ערכי ירוק וכחול. ואיך אנחנו עושים את זה? תחביר נסתר מעט זה כאן סוג של הוא כמו הגוש חוזר שחלק שראה Scratch קודם לכן היום, שבו אתה יכול לחזור על 10 פעמים. במקרה זה, ניק לא hardcoded מספר כמו 10. במקום זאת הוא אומר, לאתחל משתנה בשם x 0, לבדוק אם x קטן מ הרוחב של התמונה. וכך להיות נכונה יותר, התמונה היא משתנים, נקודת פירושו ללכת בתוכו ולקבל את עובייה, ו אז פתחו סוגריים, סגר סוגריים הם רק הדרך של מתכנת לומר זה הוא פונקציה. זהו הליך. זוהי פונקציונלית שמישהו אחר כתב. השתמש בו ולתת לי בחזרה תשובה. ואז x ++ היא דרך מפוארת של אומר, אחרי שעשית את זה פעם אחת, להגדיל x ב -1. במילים אחרות, זה היא הדרך של מתכנת של גרימת לולאה זה הולך לחזר על כל העמודות בתמונה. תמונה היא רק רשת של נקודות, שורות ועמודות של נקודות. זוהי דרך של ולביקורות על כל העמודים האלה. וגם מבפנים, בינתיים, אנחנו iterating על הגבהים, כאן וכאן וכאן. אז זה רק דרך לשוטט, כמעט כמו מכונת כתיבת ספר ישנה, רק כדי לעבור על התמונה כולה באופן איטרטיבי. גם זה לא לגמרי מלא ברור, פשוט לקחת על אמונה לעת עתה, כי שלוש שורות אלה קוד יחד הם הולך כדי לאפשר לך להיראות איטרטיבי בכל פיקסל, כל נקודה בתמונה. מה זה פיקסל? ובכן, כדי להיות ברור, אם נסתכל בבית המקורי גדלה, אם אתה באמת לשים את העיניים למסך המחשב, זה רק חבורה שלמה של נקודות, מספר אלף נקודות ארוזות יחד שם. אז מה אתה עומד לעשות? כל אחד הנקודות האלה, הגדרה סופית, היא התוצאה של מה בדרך כלל RGB שנקרא, אדום, ירוק, כחול, אשר שוב, ניתן לשלב לתת לך כל מספר של צבעים. למעשה, אם אתה זוכר מן הרבים, לפני שנים רבות, מסכי מקרן כמו הדברים האלה פעם הייתה לי לא עדשה אחת אלא שלוש. אחד מהם לירוק אור אדום, אחד אותם לירוק אור ירוק, אחד מהם לירוק אור כחול. ואם היית בבית ספר תיכון כאילו הייתי שם הם היו מעולם כראוי מיושר, היית תמיד צפייה בסרטי ההיסטוריה שהיו מעוותים מעט, כי שלושת הצבעים היו לא שילוב כראוי. אבל מתברר שכל אחד אלה ערכים אדומים, ירוק וכחול, יכולים להיות מספר הקשורים בהם. לדוגמה, 0 אדום פירושו לא אדום, 0 עבור ירוק אומר שאין ירוק, ו -0 עבור כחול אומר שאין כחול. אז אם אין לך אדום, לא ירוק, ולא כחול, איזה צבע יש לך? קהל: [לא ברור] DAVID מלאן: אתה עושה כך מקווים, שהוא לבן. למרבה הצער, זה operates-- מצטער? קהל: [לא ברור] DAVID מלאן: אז אתה בעצם יש שחור, במקרה הזה. אז אם יש לך אף אחד מאלה צבעים מופעלים, אתה צריך שחור. עם זאת, אם יש לך, נניח הרבה מהם, כמו הרבה אדום, 255 של זה, הרבה ירוק, והרבה של כחול, כי הוא לבן. אז אלה הם שני הקצוות. אז על פי ההיגיון הזה, אם יש לי הרבה של אדום ולא ירוק ולא כחול, איזה צבע זה? קהל: [לא ברור] DAVID מלאן: צדקה, כמובן. ואז לא אדום, הרבה ירוק, לא כחול, ולאחר מכן אם אתה לכם-- טוב, אנחנו רק נגמור זה, רק בגלל, אבל זה, כמובן, עכשיו, הוא כחול. ועכשיו אתה יכול לשלב צבעים אלה. עכשיו במאמר מוסגר, אם מישהו מכם יש אי פעם לעשות איזה עיצוב אתר בפועל, אתה באמת עשוי לראות סימנים כאלה. FFF-- ולמעשה, זה כנראה אפילו לא זה. זה FFFFFF. מישהו ראה אי פעם F של ו- E של ו- A through-- כך מתברר, דיברנו אתמול על עשרוני, והיום, סוג של כ עשרונית. היום דיברנו על בינארי. מסתבר, הקסדצימלי הוא מאוד מערכת בסיס משותף להשתמש במחשוב. בינארי יהיה שני דירקטורים, עשרוני הוא 10, הקסדצימלי הוא 16. ומתברר, איך לעשות אתה סופר הקסדצימלי? אפס, אחת, שתיים, שלוש, ארבע, חמש, שש, שבע, שמונה, תשע, מה אתם משתמשים אחרי תשע? מהו המספר הבא? כבר השתמשנו אפס. אני צריך 16 של אלה. אפס, אחת, שתיים, שלוש, ארבע, חמש, שש, שבע, שמונה, תשע, אתה צריך קצת מוסכמה שרירותית. ומה האנושות החליט קצת זמן לפני שאחרי תשע מגיע המכתב A, ולאחר מכן .C ואז B אז הדרך בה אתה לספור הקסדצימלי הוא אפס, אחת, שתיים, שלוש, ארבע, חמש, שש, שבע, שמונה, תשע, A, B, C, D, E, F, וכי תספור איתך לאורך כל הדרך, מסתבר, עד 15. אז אפס עד 15 הוא אפס דרך פ עכשיו למה זה משמעותי? ובכן, כאשר יש לך שני F של, וככה אתם מביעים 255. אז אם לקצר את הסיפור, ב העולם של פוטושופ, כי תוכנת עיצוב גרפי, בעולם של התפתחות האינטרנט, שבו אתה צריך המון צבעים, כמובן, לשחק עם, לעתים קרובות מתכנתים יהיה לבטא אלה הקסדצימלי, רק משום שהוא נוטה להיות קצת יותר פשוט. למרות שבמבט ראשון זה הרבה יותר מורכב. אז בכל מקרה, זה חשוב כי ניק בסטנפורד נתן לנו שש חתיכות של פונקציונליות כי אתה, מתכנתי הניצנים, עכשיו יהיה לך את היכולת להשתמש. נבנה לתוך הרשת הזאת דף שש פונקציות, שישה נהלים שניק כתב. שלושה מהם יקבלו מספר, אדום, ירוק, או ערך כחול. שלושה מהם יהיה להגדיר ערך זה. וקו תחתי אלה הם רק מצייני מיקום, אז אתה צריך לדעת מהן הדרישות. אז עם שלוש פונקציות אלה, הראשון של הדברים האלה הולך להיות x-לתאם, והשני של הדברים האלה הולך להיות y לתאם. במילים אחרות, אשר dot, אשר פיקסל אתה רוצה לקבל את הירוק של, לקבל את הכחול של, לקבל את האדום של. ואז כאן, זה הולך להיות x, זה הולך להיות ערך y, וזה הולך להיות מספר. אז בואו לעשות את הראשון קו זה ביחד ואז אני אשאיר את זה לך כדי לנסות להסיק את השאר. אז בהתאם להוראות בדף זה, אנחנו צריכים כדי להגדיל את אדום בפקטור של 10, ואנחנו צריכים להסיר את ירוק ולהסיר את הכחול. בואו נתחיל עם התרחישים האחרונים. אז אם אני רוצה, ואני הולך להגביה באמצעות כמה חללים, אם אני רוצה להגדיר את אדום, הירוק, או הערך הכחול, אני הולך לעשות את הדברים הבאים. תמונה, im.setBlue, ולאחר מכן בהתבסס על ההוראות שלי כאן, מה שלושה דברים שאני צריך הקלד בתוך סוגריים עכשיו? אני צריך את ערך x, ערך ה- y, ומה מספר אני צריך לשים כאן אם אני רוצה להיפטר ביום בהיר, מבוסס על הסיפור הזה כאן? רק אפס. אם אני לא רוצה שום כחול, אני פשוט הולך לשנות את זה לאפס. עכשיו בואו פשוט לסכם את מה זה עושה. יש לי כאן על גבי אלה שורות שניות ושלישיות, טענתי שתי לולאות, לולאות מקוננות, אם אתה יהיה, כי הם הולכים להיות השפעה של התקדמות משמאל לימין, מלמעלה למטה על כל x ערכים וכל ערכי y. כי שוב, תמונה אחת רק רשת של שורות ועמודות. אז זה הוא הולך לקבל להיפטר מכל הכחול. תן לי לעזוב בקו לידך. איך אוכל להיפטר של כל הירוק? קהל: [לא ברור] DAVID מלאן: נחמד. קהל: [לא ברור] DAVID מלאן: נחמד. ואני הולך כדי להתרחק, ופשוט לקחת לשמור על כך כבר לא עשית שום שגיאות הקלדה. ואם אתה מרגיש בנוח עם מה שעשית, אתם מוזמנים ללחוץ על הכפתור הפעל / שמור ולראות מה אתה מקבל. ושוב, ביצענו רק שלושה שינויים. מחקנו כי ראשון להגיב והחליף אותו עם שתי שורות אלו של הקוד. וזה בסדר אם אתה צריך להכות כפתור ההפעלה / שמור כמה פעמים כדי לתקן משהו. הרשה לי גם להתמקד על שלי קוד כך שתוכל לתמלל. טוֹב. אז אני רואה אנדרו יש מה נראה כטעות. הוא רק צריך שחור גדול מלבן על המסך שלו. האם מישהו אחר יש מלבן שחור גדול? קהל: כן. DAVID מלאן: מלבן שחור גדול? אוקיי, אז בואו נחשוב לגבי משמעות השינוי. אמרנו כי אפס, אפס, אפס, כך לא ירוק, לא אדום, לא כחול, הוא הולך לתת לך שחור. ומתברר כי רוב המחשבים הניידים שלנו פשוט אין לי מספיק נאמנות. אתה לא יכול לומר בדיוק שם למעשה הוא משהו שם. ואם אתה סוג של אולי להישען המסך קדימה ואחורה, אולי אתם רואים משהו קטן שם? אולי, סוג של, סוג של? זה לא שחור בתכלית. קהל: [לא ברור] DAVID מלאן: ספוילר! יש כמה אדום שם, אבל זוכר מן המפרטים הבעיה, ניק מיתן את זה. הוא desaturated אותו מעט, אבל לא כל הדרך עד לאפס. אז אם אנחנו רוצים להגדיל את הכמות של אדום, הרשו לי להעלות את הטריק הזה. הרשו לי להתמקד על המסך שלי. ותנו לי באים ואומרים סכום שווה im.getRed (x, y). שורת הקוד היא נותנת לי משהו שנקרא משתנה. יש לי באופן שרירותי, אבל, ללא ספק, סביר שנקרא המשתנה שלי מה, ככל הנראה? כמות. סכום בדיוק. אני יכול כבר קראתי לזה כל מה שאני רוצה, אבל אני באמצעות תפקיד אחר זה כי שתיארתי קודם כדי לקבל את הכמות אדומה x פסיק y. למה עשיתי את זה? מה אתה רוצה לעשות כאן? אתה צריך add-- קהל: [לא ברור] DAVID מלאן: כן, אולי הכפל אותו ב 10. ואם אתה לא יודע את זה, אני הולך קדימה, לעשות זאת. אני הולך קדימה, נניח, אני רוצה בסך של אדום אני רוצה להיות מה הוא בבית האדום, פעמים 10, והכוכב, הכוכבית על שלך המקלדת היא לעזאזל-- לא להשתמש x. השתמש הכוכב. ככה אתה להכפיל דברים ברוב שפות התכנות. אז על פי האינטואיציה של כרים, מאוחסן במשתנה הזה שנקרא הסכום, הוא כמה אדום אני רוצה ב xy מיקום. איך, עכשיו, לעשות אני עושה את זה פיקסל יש את המספר? אתה כבר עשית את זה קודם. אתה קובע את הירוק ואת כחול ללא ערך, לאפס. קהל: [לא ברור] DAVID מלאן: כן, טוב אתה לא רוצה שזה 10. אתה כבר עשית את החשבון כאן. אז אנחנו מקבלים את הערך של אדום, שהוא מספר נמוך, ככל הנראה. אנחנו הכפלנו עד ב -10. מה אתה רוצה לעשות עם הסכום משתנה עכשיו? קהל: [לא ברור] DAVID מלאן: נחמד. אז im.set-- מה? קהל: setRed. DAVID מלאן: setRed, ב XY מיקום. כֵּן. ובדיוק הסכום. במילים אחרות, משתנה הוא מציין מיקום זמני כי אתה יכול לשים מה שאתה רוצה. במקרה אנחנו לשים מספר זה, כרגע. השם והכפיל אותו על ידי 10 כדי לעשות את זה גדול יותר. ועכשיו אני החלפה משתנה כמו טענה שלישית כי, או קלט להגדיר אדום. וכך כי ברגע שאתה אסיים את זה, לשים לב של נקודות-למחצה ואת בסוגריים. קדימה, לחץ על לרוץ / לשמור שוב, ואתה צריך לראות, קסם, מה היה באמת שם. [? Arwa,?] מה יש? מגדל אייפל מנוצה מלאה אדום, לא חושך גמור. זה צריך להיות יותר ברור עכשיו, כן? בסדר. ואנדרו, לא יותר קופסה שחורה? קהל: [לא ברור] DAVID מלאן: בסדר. אז אני אשמור את זה על המסך. אם אתה רוצה לשחק עם זה מאוחר יותר, אני אשחזר את זה בשבילך. אבל הקוד הזה כאן עשה בדיוק את זה. למה אנחנו לא עושים אחד אחר. תן לי לגלול למטה מעט. אז במקרה הזה, המקרן לא ממש עושה את זה צדק. אבל על המסכים שלכם, סביר להניח שאתה יש תיבה אדומה ומאוד מאוד שחורה. גם זה, הוא חידה כי מראה משהו מפורסם. עם זאת, התמונה עוותה. התמונה האמיתית, הפעם, היא בערכים הכחולים וירוקים. עם זאת, כולם כבר מחולק ב -20 אז הערכים הם קטנים מאוד. הערכים האדומים הם רק מספרים אקראיים, רעש. בטל העיוותים האלה כדי להציג את התמונה האמיתית. אז ניק ואז אומר לך מה לעשות. הגדר את הערכים האדומים לאפס אז לא לקלקל מה זה. ואז להכפיל את הכחול וערכים ירוקים ב -20. אז זה כמעט אותה תוכנית כמו קודם, אבל אתה היפוך התהליך. ואני אשים הקוד שלי לפני על המסך במקרה אתה רוצה לשוב ולעיין בו או לשחק עוד את מה שראו עיניו. הרשו לי להתמקד על זה. אבל לפתור תמונה נחושה פאזל, מספר שתיים. קהל: [לא ברור] DAVID מלאן: בסדר, אז זה אחד אני לא הולך לתת רמזים רבים. אז אני would-- הו, בוא לראות, יש לך טעות דפוס כאן. אז לזכור, זה כאן בעצם צריך ללכת לשם. אז מה הייתי מציע, אם אתה רוצה להתמקד על זה, יש את התשובה. אם אתה רוצה לתמלל כי, כי צריך לקבל את העבודה הראשונה. ואז אתה יכול להשתמש בזה בתור ההשראה השנייה. נֶחְמָד. טוֹב. ובשביל הסקרן, זו היא דוגמא פשוטה של מדע או אמנות קרא steganography, אמנות הסתרת המידע בתמונות. בדרך כלל, תמונות יכולות להיות מסומן באופן בוטה מאוד עם לוגו בתחתית בפינה, אבל ברור לך יכול להיות הרבה יותר מתוחכם על זה ולמעשה להסתיר תמונות אחרות התמונות איכשהו עם הטכניקה הזו. קח עוד 30 שניות, ולאחר מכן יהיה לנו לפחות להודיע ​​מה שאתה צריך לראות. ואני אשאיר את השלישי אחד כתרגיל ב- Home, אם תרצה יותר של לאתגר בסוף השבוע. ואני חושב אנדרו אולי מקבל את זה לראשונה. מהי התמונה השנייה, אנדרו? קהל: פסל החירות. DAVID מלאן: פסל החירות תהיה התשובה הפעם. אז שוב, רק כמה פשוט דוגמאות, שמטרתו הוא לתת לך תחושה של איך שמנו מתורגם Scratch תמונתי בלוקים כדי מעצבן יותר ויותר קוד מסובך, אבל כל הרעיונות עדיין בדיוק אותו הדבר, אם כי עם כניסתה עכשיו של המושג משתנה, להיות מסוגל לאחסן משהו זמני. בוא נעשה הידיים על אחד יותר, רק עכשיו לחבר את הנקודות למשהו קצת יותר בעולם האמיתי. כשתהיה מוכן, אם אתה יכול ללכת URL זה על המסך. זה גם את העותק של מגלשות, developers.google.com/maps~~V. בואו באמת לעשות משהו אמיתי, אם אפשר לומר כך, על האינטרנט באמצעות API של מפות Google, או ממשק תכנות יישומים, באופן הבא. Google, כמו חברות רבות, מספק הרבה פונקציונליות חינם כי אתה יכול להשתמש בו כדי לבנות שלך יישומים מעניינים משלו. למעשה, אם השתמשת אי פעם Uber להשיג מונית או מכונית, אתה בוודאי יודע כי יש סופר המפה וזה מראה מכוניות על זה. כלומר, ככל שאני יכול לספר, ב- Google Maps API. הם בעצם משתמשים מפות של גוגל, אבל סופר הוא לא חברה למיפוי, ולא היה זה להיות במיוחד בעיה מעניינת כדי לפתור על גבי שלהם בעית שירות מכונית. וכך הם עומדים, שוב, על הכתפיים של אחרים, Google במקרה זה. אז הם משתמשים במפות של גוגל אבל משלהם למוסך רכבים ותכונות כגון אחרים. אז אנחנו הולכים לנצל זה לבצע את הפעולות הבאות. ואם אני כבר הלכתי מהר מדי, קוראים לי מעל בעוד רגע. שמח לסכם חלק מן החומר התמונה. אתה צריך לראות את עצמך בכל דף כזה. אז נחמד של גוגל, הם מהטובים של מתן לא APIs בלבד, אבל APIs חינם שאתה יכול לשחק עם או לשימוש מסחרי. הם מתחילים לחייב אותך אם השימוש שלך הוא גבוה, אבל הלכתי קדימה מראש ונרשם אלינו לקבלת חשבון חינם כי, יש לקוות, 10 מחשבים לא יגרום לפסילה אותנו פתאום. אז אני מקווה זה הפגנה תעבוד. ושימו לב שיש להם APIs עבור אנדרואיד, iOS, אינטרנט, ושירותי אינטרנט, מה שזה לא יהיה. בואו להתמקד באינטרנט. אז ללחוץ על התיבה, אינטרנט ורוד, וכי יוביל אותך, אני מקווה, לדף כאן. ויש להם חבורה שלמה של ממשקי API. וזה יכול להיות קצת מוחץ בהתחלה, אבל אני מסיע אותנו דרך מה שאנחנו רוצים. בצד ימין למעלה הוא מפות Google JavaScript API, ה- API JavaScript. אז קדימה, לחץ על זה. וזה יוביל אותך עכשיו אל עוקב אחרי דף, הדגמות דוגמת קוד. תן לי להתרחק כאן. ותן לי להוציא אותנו עם-- לגלול למטה למקום שבו הוא אומר צעדים להתחלה מהירים. המסך שלך צריך להיראות כמו שלי. ויש שני צעדים, לקבל מפתח ולהתחיל לפתח. אני כבר עשיתי צעד אחד עבור לנו, מקבל מפתח שנקרא. וזה רעיון משותף. מפתח API הוא בדרך כלל רק מספר אקראי גדול או מחרוזת כי אתה אמור להדביק את הקוד שלך, כך שגוגל יודעת מי אתה כאשר אתה משתמש בשירות שלהם, ה- API שלהם. זה לא אומר שאנחנו מחויב כל דבר. ועכשיו, לחץ, במקום אחד, לחץ להתחיל לפתח. אם אתה יכול פשוט לנופף לי אם מעל לא בטוח איפה אנחנו. ככה שאנחנו נצטרך לגרד את שטח, כאן אבל מה חשבתי יהיה משכנע היא לקבל את כל מאיתנו באמת, באמצעות Cloud9 בחלון אחד הדרכה זו בחלון אחר, מאפשר למעשה לקבל משלנו ולהפעלתו יישום המטמיע מנהג Google למפות ב דף האינטרנט שלנו, ואז מוסיף תכונות אחד או שתיים. אבל אנחנו פשוט לשרוט את פני השטח של מה שאנחנו יכולים לעשות. אז רק בדיקה בסיסית מהירה. האם כולם בדף זה, API מפות JavaScript Google? צריך לומר התחלת עבודה. אנחנו לא הולכים לעבור העניין בשום צורה ואופן. אישור, בלשונית אחרת, אם לא יש את זה פתוח, הולך לתוך Cloud9 ולקבל את עצמך רק כרטיסייה חדשה, בסופו של דבר. אז שוב, c9.io מאתמול, c9.io, ופשוט ליצור קובץ חדש. וללכת קדימה שיחה זה מה שאתה רוצה. התקשרתי map.html שלי. תקרא לזה משהו המסתיים .html. ואתה צריך להיות בערך איפה אני בתהליך זה עם רק תמריץ ממצמץ ריק כרטיסייה בשם משהו כמו map.html. או קובץ, קובץ חדש הפעם. ועכשיו, על על API JavaScript מפות גוגל, שנדלג קריאה דרך כל הטקסט הזה. אבל שם לב כי העולם שלום הוא אכן בכל מקום, אתה רואה את זה עכשיו. שלום יש בעולם הגדול הזה צבעוני דוגמא חבורה שלמה של HTML. אתם מוזמנים להעתיק ולהדביק היחיד HTML, כך מן הסוג doc בראש כל הדרך אל תג HTML הקרוב, ללכת קדימה ולהעתיק את כל ש-- שוב, זה מתחת לעולם שלום, לדוגמה, בין ולהדביק את זה לתוך כרטיסיית Cloud9 שלך, כך שכעת המסך צריך להיראות בערך כמו שלי. ואתה יכול לחסוך את זה, אבל לא לטעון אותו עדיין. תנו מבט הראשון של ב את הקוד ולראות אם אנחנו לא ניתן להסיק או ללמוד ממה זה Google צפה לנו להעתיק ולהדביק בצורה עיוורת. הם רק רוצים לעזור, פשוטו כמשמעו, לשם התחלה, אבל אין כל כך הרבה מורכבות ממש שם. כל השאלות עדיין? אנחנו בטוחים כדי לפרוץ קדימה? בסדר. כל כך מהר, בואו פשוט לעשות כמה בדיקות שפיות מהירות. שורה אחת של מה שאני לראות, ואני מקווה, אתה אתה מבין, מה זה אומר, HTML doctype? כרים, זוכר? קהל: [לא ברור] DAVID מלאן: כן. הנה בא HTML 5. בינתיים, קו שני על מסך כאן פירושו היי דפדפן, הנה מגיע HTML בפועל. שורה שלוש היא היי דפדפן, הנה מגיע הראש. קו ארבע הוא, כמובן, היי דפדפן, הנה מגיע התואר. מה קו חמש לעשות? למעשה, זה לא באמת לעשות משהו בשבילנו. במקרה זה, זה פשוט משנה את הגודל הדף כברירת מחדל. קו שש, עדיין לא דיברנו על, אבל זה מציין את קידוד התווים. יש דרכים שונות כדי לקודד קבצים, במיוחד עבור שפות זרות. UTF-8 רק נוטה להיות ברירת המחדל. אז עכשיו אנחנו נראה בתור שבע עד 16, כמה CSS. ואף על פי שאנחנו לא ראינו את כל הדברים האלה לפני, אנחנו יכולים סוג של מסיקה. אז בשורת שמונה אמצעים, היי דפדפן, להחיל כל אחד מאלה שאליהם שני תגים, ככל הנראה? טקסט HTML וגוף. אז הפסיק מייצג את הדבר החדש שם. וזה רק דרך ציון תגים מרובים בבת אחת. אז יש לנו את הסוגריים המסולסלים. אז כנראה, זה אומר לדפדפן, להפוך את גובה הדף% 100. אז גם אם יש מעט מאוד תוכן, להפוך את הדף כולו, לעשות את הדבר למלא את הדף. הפוך את המפה בסופו של דבר למלא את הדף. שוליים, מה זה אומר? זה בדרך כלל כמו שרירותי שטח לבן מסביב לקצוות שחלק מעצב דפדפן פשוט צריך להיות החליטו שם, כי זה סוג של גורם לדברים להיראות נקיים יותר. אבל אנחנו לא רוצים את זה. אנחנו רוצים את המפה הולכת כל הדרך אל הקצוות. ריפוד, דומות ברוחן בשוליים. שולים מתכוונים בחוץ, אמצעי ריפוד בפנים, אבל זה אותו סוג של עסקה. זה קצת חיץ בינך לבין הקצוות. ואז קו 13 הוא טוב סיכוי סקירה מהירה. מה עושה מפת סימן חדה כלומר, או מפת hashtag מתכוונת? מה זה מתייחס, באופן עקרוני? קהל: [לא ברור] DAVID מלאן: בדיוק. מאפיין זה, רכוש CSS זה חל רק לדבר אחד, תג HTML יש כי מזהה של ציטוט, סוף ציטוט "מפה". או קדימה בואו עכשיו, גלילה עד לתחתית של הקובץ, אשר רחוק מדי הוא לא, והודעה על קו 19, אם תדביקו את זה בדיוק כמו שאני עשיתי, קו 19 יש רק div, שהינה חלוקת הדף, שבו אני אתמול נקרא אזור מלבני. אין לזה שום בו. זהו תג פתוח, תג סגירה. אבל בכל זאת יש לו מזהה ייחודי. אז מה שנראה קורה כאן הוא Google מכין בדף האינטרנט שלנו כדי יש לגובה 100% הושלם, וללא מרווח, ללא שוליים, כי מה אנחנו הולכים לשים בפנים של div הזה, אשר מזהה ייחודי הוא המפה, היא מפה מוטבעת בפועל. ואנחנו רוצים את זה כדי למלא בו ולא רק להיות חלק מלבן קטן באמצע. אז קו 14 מדגיש באופן דומה, המפה עצמה צריכה להיות בגובה של 100%. אז עכשיו להבחין בין קווי 20 ו -28, זה קוד JavaScript. וזה, למרות שזה מבחינה תחבירית קצת מוזר, אין כל כך הרבה קורה כאן. ב שורה 21, זה מכריז משהו שנקרא משתנה. במקום לקרוא את זה מסתכם, כמו שעשינו בעבר, אנחנו לייתר דיוק אומרים var, אשר רק אומר משתנה. יכולנו להשתמש כי הקוד של ניק, אך הוא לא עשה זאת, אז אני לא טורח לעשות את זה גם. זה משתנה בשם למפות ולאחר מכן יש פונקציה זו כנראה נקרא initMap. אז זהו כמו המנהג שלנו פיסת הפאזל ב Scratch. יצרנו חתיכה פונקציונלי שנקרא initMap, ואתה יכול מעין להסיק מה קורה פה. בצד שמאל, יש לנו משתנה, כך אנחנו הולכים לשים את הדברים הבאים דבר בתוך משתנה, מימין לשמאל. הצד הימני אומר, היי דפדפן, לתת לי מפת Google חדשה. ו google.maps.map היא רק דרך פאנקי של ציון כי הפונקציונליות הזו שייך ל- Google Maps. לאחר הסוגריים, ראינו זה לפני, היי דפדפן, לקבל לי האלמנטים בדף, תג בדף שאת מזהה ייחודי הוא-- קהל: [לא ברור] DAVID מלאן: --map. ומה קורה, טוב, הקו הזה ביחד, קו 23, אומר בעצם, היי דפדפן, לך לקבל אותי כי div ריק בדף אשר היא המפה מזהה ייחודי, כי אני רוצה להכניס אל it-- להזריק לתוכו, אם אתה will-- חבורה שלמה של תוכן מה שקורה מגיע מהאינטרנט, לְאַחַר מִכֵּן. וגוגל עושה את כל זה בשבילנו. אז שוב, ממש בסוף של יום, יש לנו בדוגמה זו של הפשטה. אין לי מושג מה היא המפה או כיצד ליישם API המפה. אנחנו לא צריכים. אנחנו רק צריכים להגיד את המפה איפה לשים את עצמו, ולהשאיר אלה יישום שבבסיס פרטים ל- Google. עכשיו יש כנראה שתי פיסות מידע כי בדוגמא זו היא מתן ל API של גוגל. כנראה במרכז המפה, ואת רמת הזום, אם אפשר לומר כך. והאם מישהו מזהה את אלה קואורדינטות, קווי אורך ורוחב? כנראה שלא, אבל אנחנו יכולים לחזור אל ההדרכה, לראות ממש. אבל נראינו אותו בעוד רגע. רמת זום היא ערך בין, אני לא יודע, אחד ב 13 או משהו כזה. זה פשוט קשור עד איזה סכום אתם גדלה או קטן, וזהו. ועכשיו ממש בסוף של בו, קו ההודעה 29-- זה קצת מכוער כי זה wraps-- שורת הקוד מה הוא מוריד אל הדפדפן API בפועל של גוגל. כל הקוד של גוגל מהנדסי כתביו מיישמים התכונה הזאת של מפות לשבץ. עכשיו בואו לא משנים כלום. אם אתה עוקב יחד, אתם מוזמנים רק לשמור את הקובץ כי, אם אתה אכן יש מה שיש לי. עבור אל כתובת האתר שלו. אתה יכול ללחוץ על כפתור ההפעלה למעלה וזה לא יגיד לך את הכתובת של שרת האינטרנט שלך שוב. וזה יוביל אותך כרטיסייה חדשה. אם תלחץ פתוח map.html, ואת רוב הסיכויים הם שאתה הולך לקבל התראה, הודעת שגיאה, כן? הודעת שגיאה, הודעת שגיאה? אז לצערי, את השגיאה המסר הוא לא כל כך מאיר עיניים אלא אם כן אתה בעצם לפתוח את מסוף, כי כרטיסייה מיוחדת אנחנו היה מפשק אתמול קצת מוקדם יותר היום. אבל נתקלתי זה מוקדם יותר, אז אני כבר הבנתי מה הוא הפתרון. בשקופיות של היום, או ליתר דיוק, ב Cloud9, הודעה כי אנחנו לא עושים משהו בכוונה. שימו לב כי תג סקריפט זה קו 29, אם אתה קורא את זה, זה כמו maps.googleapis.com/ משהו, משהו, משהו, אז מישהו שם לב, אחד היזמים, כתבתי כל ההון מכתבים, מפתח ה- API. אנחנו צריכים להדביק משהו שם. וזה היה הצעד עשיתי בשבילנו לפני, ושוב הם עלולים לאסור לנו אם פתאום, 12 או יותר מאיתנו להתחיל להשתמש באותו מפתח, אבל בוא נראה מה קורה. אז אם אתה נכנסת היום שקופיות, שקופית אחת מאוחר יותר, יש מאוד פאנקי למראה זה מחרוזת של טקסט. קדימה, פשוט להעתיק את זה ולהדביק אותו איפה שכתוב מפתח ה- API. זהו האחד נרשמתי. ובהחלט לא מנסה הקלדת אותה באופן ידני, כי זה מרגיש טעון עם שגיאות כתיב, באופן פוטנציאלי. אז פשוט להעתיק ולהדביק את זה. וזה הולך לסדר את השורה עוד, אבל עכשיו, רק שיהיה ברור, זה צריך להיראות קצת יותר ככה, איפה המפתח שווה לא מהוונת צועקת עליך. שמור את הדף שלך, לחזור אל הכרטיסייה האחרת, תטען מחדש ומקווה לראות מפה של איפה? קהל: אוסטרליה. DAVID מלאן: אוסטרליה. אז כנראה אלה הם קואורדינטות GPS של אוסטרליה. ותנו לי להסתובב רק לרגע ולעזור לכל מי לא ממש שם, אבל הרשו לי להעלות, באמצעות Google, למצוא ה- GPS קואורדינטות של עיר מולדתך או מדינת ביתך. וכנראה Google יכול להפוך את זה עד, או ויקיפדיה יכול להגיד לך. אבל לבחור שני ערכים שונים עבור קווי אורך ורוחב, לחזור ולהדביק אותם, ולאחר מכן טען מחדש את הדף לאחר השמירה ולראות אם אתה יכול לקבל למפות עבור עיר מולדתך. וכאשר תסיים עם כי, את המעקב challenge-- ואני אתן בכיוון קצת פחות, בכוונה, כך שאתה בכוונה יש להיאבק על זוג דקות עם התיעוד, לשנות את המפה כדי להיות לא זה ברירת מחדל כקריקטורה, אבל מפת לווין. אז אתה בעצם רואה לווין דימויים במקום צבעים יפים. והרמז אני אתן לך הוא לשנות את סוג המפה. לחזור לאותה מקבלת נכתב בדף כדי לקבל השראה. כפי שאולי שמתם ליקט, אם אתה מחפש, יש כל כך הרבה יותר דברים שאתה יכול לעשות. כמה מכם כבר יש שינה את סוג המפה. אבל אתה יכול לבצע-- למשל, תן לי ללכת למשהו שעשינו לקורס אני teach-- maps.cs50.net. אחד undergrads שלנו עשה את זה. לנו מרכז המפה שלנו מעל הרווארד יארד כיסוי כל שמות בניין אלה, והיינו לו להוסיף את זה. אז אם אני רוצה לחפש, למשל, הול מתיוס, יש לנו בתפריט הנפתח מעט. ואני חושב שהוא משתמש Bootstrap, את הספרייה שהזכרנו קודם לכן עבור זה. ואם אתה לוחץ על מתיוס הול, זה מיד קופץ על המפה כדי מסוים מופעי מיקום, וזה לך תמונה ב מוקפץ הקטן הזה. אבל גם זה קצת מוקפץ, לא הוספנו. אם אני לגלול למטה על שלנו מקבל נכתב דף ולחפש חלון מידע, תראה שחלק פונקציונלי אתה עצמך יכול להוסיף, אם כי מורכבות קצת יותר, משהו שנקרא חלון מידע. ואם אני לוחץ דוגמה כאן, וזה מה שכיף, אתה יכול לעשות דברים כאלה, לחיצה על סמן ואז voila, מידע צץ. אז יש לנו לא ממש הצגתי תכונות מספיקות של JavaScript כדי לצייר תמונה של איך בדיוק אתה יכול לחווט את כל הדברים האלה יחד, אבל אנחנו סוג של שרטנו את פני השטח. למעשה, מה בדיוק עשיתי כאשר לחצתי על סמן זה, היה מפעילת אירוע, מה שנקרא על האירוע לחץ. ואנחנו בעצם רואים אירוע מוקדם יותר היום, מה שנקרא להגיש אירוע, כאשר אנו מונעים מהמשתמש מחפש חתולים. אז אנחנו כבר הרים מעין ו choosed מבין כל תכונות שונות אלה, כדי לתת לך תחושה, אני מקווה, של מה שאתה יכול למעשה לעשות עם קצת יותר נחמה תכנות, ומשאבים לגמרי בחינם. יש שאלות? לא? זוהי ההזדמנות האחרונה שלך, לפחות היום, ביום שישי, כדי לקבל משהו מהלב כך שאתה יוצא מכאן מרגיש בטוח ונוח. כן. קהל: מדוע לא אתה מוסיף עוד דבר אחד? DAVID מלאן: אלוהים אדירים. אני צריך לנוח בסוף השבוע, אני חושב. שאלות נוספות? קהל: [לא ברור] DAVID מלאן: אתה can-- ב Internet Explorer, מנוחתו עדן, אתה אמור להיות מסוגל לשים VB תסריט, תסריט בסיסי ווירטואלי, אבל באמת אף פעם לא עלה על זה. אז התשובה הקצרה היא פשוט JavaScript. שאלות נוספות? בסדר, טוב, הרשו לי לעשות זאת. תן לי לתפוס עמיתינו בחוץ. יש להם כמה הערכה צורות שהם רוצים שכולם לבלות מילוי כמה דקות. הם רוצים לאסוף בצורה וכל ויתורים כי ייתכן שיהיה בחוץ. הוא יוכל גם תעודות. אני מנחש שיש עדיין כמה חטיפים בחוץ. תן לי להתעלף אלה, ואם אתה יש שאלות בינתיים, אני אסתובב יותר בנפרד ואנחנו יכולים להתחיל. כן כמובן. קהל: [לא ברור] DAVID מלאן: זה בדרך כלל נכון בימים אלה. אין ספק עם אינטרנט תוכנה, אתה נשען על אחרים או שאתה מבחינה אסתטית באמצעות דברים כמו Bootstrap, אז אתם לא יש ליישם את הרמה הנמוכה פרטים של תפריטים כפתורים וכל זה. אתה נשען על מישהו כמו גוגל, כך שאתה לא צריך לבנות את Uber עסקי עסק מיפוי, וכל מספר דומה יישומים, כמו גם. למעשה, כניסות פופולריות, מדי. אם השתמשת Spotify או כל מספר של אתרי אינטרנט, תוכלו להיכנס כמה אתרים באמצעות פייסבוק. אז מה נחמד, יש APIs מיועד כניסות בימינו, כך אין לך יש שולחן משתמשים משלך וכל מסד נתונים משלך בהכרח באותה מידה. אתה יכול לתת פייסבוק לעשות כל של כי מורכבות בשבילך. אז זה תקופה מרגשת, בכנות, בתכנות, כי יש כל כך הרבה צדדים שלישיים שירותים שאתה יכול לבנות על גבי. ושוב, המחיר שתשלם הוא או פיננסי או השבתה. אם Google יורד, כך גם סופר, ניתן לטעון, אבל אולי זה כבר תחלופה סבירה. ושוב, זה היה אחד הנושאים, בתקווה, עבור בני הזוג של הימים האחרונים, הוא קיזוזים כאלה. ולעתים רחוקות הוא שם הולך להיות תשובה נכונה. זה באמת יותר טוב של שתיים או יותר תשובות. לעבור האלה מסביב. וחשבונות Cloud9 אלה ימשיכו לעבוד, בתיאוריה, לנצח. אתה עלול למצוא אם תחכו כמה ימים או שבוע או יותר לחזור ולהיכנס אותם, זה עלול לקחת כמו אחד או חמש דקות כדי לפתוח לגבות, אבל זה רק בגלל שהם לשים אותו למצב שינה כדי לחסוך משאבים.