[השמעת מוסיקה] DAVID מלאן: זה CS50, ו זה הוא ההתחלה של שבוע שמונה. ואנחנו כל כך שמחים לקדם בברכה בחזרה, הפתעה גדולה, רמון עצמו CS50 Galvan, בכיר עולה שהיה הוצאות בחודשים האחרונים מאז יולי בלוס אנג'לס, בהוליווד, פשוטו כמשמעו עובד על טלוויזיה חדשה מופע נקרא מושבה, היוצר של אשר הוא למעשה אלום הרווארד עצמו. ולכן אנחנו מאוד נרגשים לראות את זה הבכורה ברשת ארה"ב בינואר. אז להישאר מכוון של, ול יותר רמון לשבועות הבא. יודע עכשיו שהסוף קרוב. ומה שזה אומר הוא שאין כל שנותר הרבה של CS50, עצוב לומר. יש לנו רק שלוש בעיה סטי left-- יש בעיה להגדיר six-- שהוא ב הידיים שלך עכשיו או בקרוב תהיה, בשל ההמשך week-- נועד לגשר העולמות של שורת הפקודה, בנו אנחנו כבר בילינו את רוב זמננו באמצעות C, והעולם של תכנות אינטרנט. ובכן, אתה תראה הרבה רעיונות בהשאלה מעבודת שורת הפקודה, אבל גם הרבה חדש ורעיונות מעניינים שגם הם הולכים להיות שַׁיָך ל יישומים ניידים ולטכנולוגיה, באופן כללי יותר, שבה אתה בחורים הם מוכרים בימינו על מחשבים ניידים וטלפונים וכדומה. אז אתה לא ליישם בדף אינטרנט, או באתר אינטרנט כשלעצמו, אבל שרת אינטרנט בפועל. אתה תכתוב את שאר שרת אינטרנט נכתב ב- C, שמטרתו בחיים הוא לקבל בקשות HTTP, אלה מעטפות הווירטואליות להמשיך לדבר על, ולמעשה להגיב או עם כמה content-- סטטי כמו הנקודה HTML קובץ, או נקודה JPEG או כל מספר אחר של קבצים, או אפילו קובץ PHP לפי האינטרנט שלך שרת הולך לפרש PHP ש קוד ולירוק את התוצאות. עכשיו, יש לנו בתנאי שאתה עם לא מעט מסגרת לit-- אכן קוד הפצה לבעיה להגדיר שש הוא ארוכים מעל 1,000 קווים, הרבה מהם הוא הערות, להיות fair-- אבל זה באמת התכוון להיות הזדמנות כדי לקבל את הידיים מלוכלכת צלילה לפרויקט גדול למדי שיש לנו באופן ספציפי מאוד חתיכות שגולף שלך, כך שבאמת כאשר אתה יוצא CS50 ו להיכנס לעולם האמיתי של תכנות ורוצה להשתכשך ב כל מספר של פרויקטים, יהיה לך הרבה יותר נוחות הורדת חלק המקור קוד, חלק בקוד פתוח פרויקט באינטרנט, וצלילה ובביצוע שינויים שאתה רואה לנכון. בעיה להגדיר שבע הולכים להיות על מה שהופך את היישום מבוסס אינטרנט משלך שלוקח קלט דינמי ו מייצר תפוקה דינמית בצורה של אתר כמו etrade.com. ובעיה להגדיר שמונה יתמקדו עדיין שפה אחרת הידועה כJavaScript. בינתיים, סופי פרויקט הוא באופק. לפני ההצעה שנקרא נובע שבוע מהיום. טרום proposal-- למפרט, אשר על website-- של CS50 היא הזדמנות די מזדמנת ל לך לשלוח דוא"ל די תמציתי לעמיתי ההוראה שלך רק כדי להודיע ​​לו או של מה שאתה חושב, ל להשתמש בו או שלה כלוח תהודה. ויש לי שפיות check-- אם אתה חושב על נוגס מדי הרבה או אולי קצת יותר מדי, או אולי יש לך מושג כלשהו ורוצה לעסוק בשיחה. לאחר מכן היא הצעה ודוח מצב, hackathon CS50 מה שנקרא כאן ב קיימברידג 'לסטודנטים באוניברסיטת הרווארד ואוניברסיטת ייל כאחד. של פרויקט הגמר יישום הוא אז עקב. ואז הוגן CS50 כאן, בקיימברידג ', כמו גם אחר בניו הייבן. אז ההצעה, תסתכל האתר לפרטים אלה. אבל יותר מרגש, יותר מדי, הוא הזדמנות לקבל את הידיים מלוכלכות, והדעה שלך פתוחה לכל חבורה של נושאים וכלים וטכניקות שאינן נלוות לתכנית לימודי הליבה של הקורס, אבל קשור בכל זאת. וגם אבני דריכה נפלאה ל עושה פרויקטי גמר ממש מגניבים ש הרבה מעבר חומר שכבר כיסו באופן רשמי בבעיה מגדיר או בהרצאה. אז ללכת לאתר של CS50 ל כל הסגל של סמינרים. אם אתה לא להירשם עדיין, זה בסדר. קדימה, להירשם ואנחנו עדיין יהיו מעקב עם קישור זרימה בשידור חי, את היום והשעה הוא באתר. וכל מה שיהיה נרשם ולשים באינטרנט אם אתה לא יכול לעשות ימים מסוימים ובזמנים. על מה שלפנינו thereafter-- גם, כמובן, יש hackathon CS50. תמונה זו, כזכור, בשבוע שצולמה אפס סביב 4 לפנות בוקר ערב בשנים האחרונה. הוגן CS50, אשר שוב יתקיים בשתי הערים. ואז, רק כדי לשתול זרע, למרות שאנחנו עדיין יש לי חודש בתוספת השמאלי של סמסטר, אם אתה רוצה להצטרף להוראתו של CS50 צוות, ואתה רוצה להתחיל חושב על להיות CA, או בחור הוראה, יודע ש נתחיל לדבר יותר על זה מאוחר יותר בסמסטר הזה. אבל בתמונה כאן רוב צוות של השנה. וכך, PHP-- והייתי כל כך עצוב בשבוע שעבר כי [? Allyse?] חביב הלכתי למאמץ של מקבל שלנו אבזרים נפלאים אלה כי אני לא משתמש בסופו של דבר, כך ש באמת רק שנראה טיפש שיש לנו את חפירה יושבת כאן כל יום רביעי כיום אחרון, וכפית קטנה. אבל זה היה שלי מטאפורי דרך של מנסה לצייר התמונה של למה אנחנו מעבר מC לשפה כמו PHP. ואפשר לומר את אותו מכל מספר Java languages--, Python, Ruby או צרורות של נוספות-- אבל בעוד שב C, למשל, כתיבת תכנית בשפת C אולי בדרך כלל להיות כמו לוקח כף כזה ולחפור בור ב קרקע, בחול או בעפר. PHP מאפשר לך לקחת הרבה עקיצות גדולות מהבעיה, כתיבה הרבה פחות קוד באמצעות כלי קטן בהרבה, בגלל שיש כל כך הרבה יותר פונקציונלי חבר ב. עכשיו, אם היינו באמת דרמטי, תהיה לנו משהו לגרוף כאן, אבל ניחא. בינתיים, אחר מטפורה באנו עם הוא, כמובן, שאתה יכול להשתמש במשהו כמו ברגים פטיש במשהו כמו מסמר. אבל כמובן, את הזכות כלי לשימוש הולך להיות לא כל כך הרבה שפה נקראת C-- ועכשיו אני פשוט מעוצבן [? סנדרס,?] כנראה, אנחנו נתקן את זה כל כך later-- הכלי הנכון לשימוש לעתים קרובות הוא לא הולך להיות כלי זה ברמה הנמוך ביותר. ואכן, C הוא לא שפה ש אי פעם רובכם הולכים להשתמש, או בהכרח צריך להשתמש שוב. ולמעשה, קטן secret-- הפעם היחידה אני משתמש בעצמי C הוא פחות או יותר בין ספטמבר ודצמבר של כל נפילה סמסטר. וזה בגלל שאנחנו להשתמש בו כהזדמנות ללמד את היסודות של תכנות, ועם זה מחשב יסודות מדע, נתונים מבנים, אלגוריתמים ו like-- אבל יהיה לך מהר מאוד רואה עכשיו שהתחביר והרעיונות שבבסיס C כל כך נפלא העברה ליותר מודרני שפות ברמה גבוהות יותר, כמו PHP ופייתון ופרל ו- Java וObjective-C-- למעשה, לא כל כך הרבה Objective-C-- אבל סוויפט, חדש יותר אלה שפות שרבים מכם אז להשתכשך עם פרויקט גמרך. אז בלי עיכובים נוספים, בואו למעשה להשתמש PHP כדי לפתור כמה בעיות. נזכיר כי בשלב מוקדם, שעבר IDE CS50 שבוע, אנחנו רק בשימוש, כתבנו תכנית קטנה ועלובה שרק אמר, "שלום עולם". ואז אני הצלתי אותו ב קובץ בשם hello.php. ואז רצתי בפקודה זו. ולמה? באנגלית, מה קורה כאן? מה אני עושה כש רצתי בפקודה זו? כן? קהל: יש כמה PHP הפונקציה שקורא את מה שin-- מבין ש. DAVID מלאן: טוב, יש כמה פונקציה PHP-- ותנו לי להיות יותר ספציפי, יש תכנית בשם PHP, מוכר גם בשם מתורגמן, שמבין התוכן של hello.php, ומפרש את זה מלמעלה למטה, משמאל לימין, ועושה את מה שפקודות אלה אומרים. פקודות בhello.php, כמובן, רק הוא מקור code-- פונקציות ומשתנים ולולאות ו כמו, שאנחנו בעצמנו החל בכתיבה ב- PHP. אבל שלא כמו C, שהוא שפת הידור, PHP אתה פשוט לכתוב אותו, ולהפעיל אותו. אתה לדלג כי צעד מתווך של המרת אותו לאפסים ואחדים, ולאחר מכן מפעיל אותו. ואז מה הוא הפוך של זה? למה אנחנו מדלגים הצעד? למה שפות מודרניות יותר נוטה לדלג על שלב זה? מה הייתה התועלת? או רק באופן אינטואיטיבי? גם אם יש לנו לא נכתב הרבה לפני PHP, מה מועיל על לא הידור הקוד שלך אתה חושב? לא? לא להתחייב? מגרד את הראש שלך? כן. קהל: יותר דינמי. DAVID מלאן: יותר דינמי? למה אתה מתכוון? קהל: [לא ברור] DAVID מלאן: בסדר, טוב, כל כך בהתאם לקלט, אתה לא צריך לקמפל אותו בכל פעם. וזה באמת כ פשוט כמו לראות-- מה היא הנקודה ממשיך לקמפל את הקוד שלך? זהו רק צעד זה making-- זה דורש, על העבר כמה שבועות, צעדים כפליים כפשוט להפעיל את תכנית. זה היה שימושי ברואה שאתה לראות כמה הודעות שגיאה וכן הלאה, אבל זה עדיין רק צעד מעצבן. וכך מתכנתים הבינו לאורך זמן, למה לא אנחנו להתחיל שפות שאינן כותב צריך שצעד די מכאני, כך שיכול רק לכתוב הקוד ו להפעיל אותו. אבל מה היה המחיר שראינו ששילמנו בשבוע שעבר, עם דוגמא אחת מסוימת? כן? מהירות. אז [? מה מתורגמנים?] קצת איטי יותר, שבאפסים ואחדים הם נחמד ומהיר למחשב להבין, כי אינטל מעבד, או מה שזה לא, רק מבין מה קורה עם אלה דפוסים של ביטים. ואילו מתורגמן היא תכנית שבאמת יש לקרוא את מקור Ascii קוד שכתבת, ולהמיר אותו, כביכול, או להבין איך הוא ממיר סופו של דבר לאפסים ואחדים. אז זה פשוט לוקח קצת קצת פגיעה בביצועים. אז זה קצת trade-off. עכשיו, אם נעשיתי את זה כאן, תן לי ללכת ולעשות את הדוגמא הבאה. אם אני הולך לכאן, קובץ חדש, אני הולך כדי להציל את זה שוב הוא hello.php. ועכשיו אני הולך קדימה ואומר, "שלום עולם הדפסה" - וזוכרים שאני יכול להשתמש בהדפסה, אני לא יש להשתמש בהדפסה-F. ועכשיו כאן למטה, אם אני עושה את PHP של hello.php, אני huh-- לא נראה לי לפרש אותו. מה עשה לא בסדר? קהל: צמידי הזווית. DAVID מלאן: כן, אתה צריך שראש הסוגר עד זווית. אז זה סוג של מעצבן, אבל אתה מתרגל אליו במהירות. אם אני צריך לכתוב קוד PHP, אני בדרך כלל צריך לספר את התכנית, או לספר המתורגמן, היי PHP, כאן מגיע חלק קוד PHP. ואז למען סדר טוב, אני היית לסגור זה לא עם זה, אלא עם זווית סימן שאלה רק תושבת, כך שעכשיו כאן למטה, אם אני מפעיל את זה שוב, עכשיו אני מקבל את התוצאה הרצויה. עכשיו בואו לעשות אופטימיזציה קלה, רק כדי שאתה ראית את זה לפני. זהו סוג של מעצבן שאני צריך לרוץ hello.php חלל PHP, כי בעבר אני רק יכל לכתוב לוכסן נקודה שם תכנית, שהוא סוג של נחמד. זה סוג של חווית משתמש טובה יותר. אז מתברר שאתה יכול לעשות זה בPHP עם אני following-- יכול להשתמש בזה די סתום לחש בראש כאן, אשר נקרא עֵסֶק בדרך כלל, לפי זה הוא סמל חד, כביכול, מדובר במפץ או סימן קריאה. וזה כרגע הוא בדרך לתכנית על מערכת לינוקס טיפוסית ש נקרא סביבה, או env. וזה סיפור ארוך line-- קו אחד short-- רק אומר, היי מחשב, למצוא את PHP מתורגמן לי בסביבה, תמצא אותו בזיכרון שלך, אם אפשר לומר כך. ומה נחמד עכשיו, כי אם אני יורד כאן, אני יכול לעשות קו נטוי נקודה שלום PHP נקודה, or-- הממ. ההרשאה נדחתה. ובכן, תראה אפילו יותר מזה עם בעיה להגדיר שבע, אם אתה לא כבר, עם הרשאות יש לי. מתברר שאני צריך לביצוע פקודה זו נקרא [? chamod?] לשינוי mode-- hello.php x בתוספת. אני צריך [לא ברור] זה אחד נוסף צעד שאומר המחשב שלי, להפוך את ההפעלה hello.php. ועכשיו לראות מה happens-- נקודה לקצץ hello.php, זה פשוט נגמר. אני לא צריך לציין המתורגמן יותר. ואני יכול לעשות את זה אפילו יותר יפה, עדיין, אם אשנה את שם הדבר הזה. אם אני מזיז רק hello.php Hello-- כך מבחין בפינה השמאלית העליונה, שם של התכנית הוא אכן עכשיו רק שלום. עכשיו אני יכול לגרום לזה להיראות כמו תכנית C, למרות שזה כתוב בPHP-- או כל מספר בכנות של שפות אחרות. אז שיפור שולי, אין הבדל פונקציונלי. אבל זה רק קצת סקרנות עכשיו, כך שאתה יכול לכתוב תוכניות בכל שפה, והמשתמש אינו צריך לדעת או אכפת לי מה הם אלה. ובכן, בואו נסתכל על יותר דוגמא משכנעת עכשיו שהצלפתי מראש. וזה נקרא quote.php. וזה זמין באינטרנט. ושים לב שזה די short-- אבל מדוברים בתכנית שורת הפקודה זה הולך לחפש את מחירי המניות בשבילי, שהוא למעשה הולך להיות רלוונטי לבעיה להגדיר שבע. אז בואו יראו את מה שאני עושה. בחלקו העליון יש לי PHP סימן שאלה פתוח הסוגר. אז יש לי את הקו הזה, שבו אני דורש קובץ שנקרא functions.php-- אנחנו הולכים לראות נוסף על זה קצת, אבל זה כמו C של גרסה של חד כוללת, שבו אתה רוצה ללכת כולל קובץ אחר. PHP קורא לזה דורש, למרות שזה יש גם כולל פונקציה. ומתברר שfunction.php הוא רק משהו שכתבתי לפני השיעור. אני שם את זה באותה הספרייה, כי רציתי גורם את קוד שאולי אנחנו רוצים להשתמש במקום אחר. בינתיים, כנראה שאתה יכול להסיק מה קורה כאן. זה קצת שונה מC-- אבל מה שאני מתכוון בלהבטיח שימוש נכון? לתרגם את זה יותר מבחינה טכנית. באילו נסיבות אני הפסקת התכנית, או יציאה? כן? קהל: כאשר אין לך שני טיעוני שורת הפקודה. DAVID מלאן: כאשר אין לי לפקד טיעוני קו. ולזכור שאחד מאותם טיעונים הוא השם של התכנית עצמה. והשני הולך להיות מילה אחרת אני מקליד לאחר ההנחיה. אז בדיוק כמו C, זה היא הדרך של בדיקה שלי, לא המשתמש לשתף פעולה ו להפעיל את התכנית כפי שהתכוונתי? עכשיו, יש משהו קצת שונה עם C-- קודם כל אנחנו יש סימן דולר זה, ומה עושה דולר לחתום לציין ב- PHP? רק משתנה. זה כל-- רק משתנה ואחריו מה שאתה רוצה באמת לקרוא לזה. שימו לב שיש משהו חסר מתכנית PHP שלי, בדיוק כמו שזה היה חסר אחרון שבוע, לעומת C, וזה מה ש? סוגים, אבל גם משהו אחר. אין משהו function-- פונקציה העיקרית. אין פונקציה העיקרית. אתה פשוט להתחיל לכתוב הקוד שלך מבלי לדאוג למדי שרירותי כנס של שמות כמה ברירת מחדל עיקרי פונקציה. אז C arg הוא פשוט באמת משתנה גלובלי שהמתורגמן מעמיד לרשותי. עכשיו, זה מעניין. אז לחפש דברים. מניית דולר סימן היא ב עזב, זה משתנה. בצד ימין, יש כנראה פונקציה ב PHP נקראת בדיקה ש אני מעביר את שורת הפקודה האחרונה שלי טיעון צריכה-- מה שהמילה היא. ואנחנו תראו איך זה עובד ברגע. ואז לבסוף אני דיווח המחיר. אני מדפיס את אחד חלקם של כך וכך. וזכור, זה הוא הדרך בPHP-- דרך בPHP-- שבו אתה לא צריך לעשות סימן הדולר S יותר. אתה פשוט יכול להשתמש בסוגריים מסולסלים וחבר בכמה משתנה. אתה לא צריך לדאוג באמצעות printf באותה הדרך. וכמו בצד, כאשר אתה שם משתנה בתוך מרכאות כפולות כמו זה, אתה משתמש בטכניקה מפוארת נקרא אינטרפולציה משתנה. זה רק אומר לחבר משתנה כאן. וכמו בצד, כמה מכם שבאים מרקע תכנות אחר, אתה לא יכול להשתמש בגרשיים בודדים סביב חוטים כדי לעשות את זה. עליך להשתמש במרכאות כפולות ל אינטרפולציה משתנה לעבוד. אחרת אתה ממש תמצאו ראה סוגריים מסולסלים אלה. אז לבסוף, בואו נלך קדימה ולהפעיל את זה. תן לי לעשות המסוף שלי קצת יותר גדול. תן לי ללכת קדימה ולרוץ בתוך ספריית הציטוט שלי. [? CDsource?] [? בבוקר?] [? ציטוט?] נקודת ציטוט PHP PHP, ואני הולך לחפש משהו כמו GOOG, שהוא סמל טיקר, ומניה אחת של שמו החדש, האלפבית Inc, תעלה 717 $, נכון להיום. בסדר, אם אנחנו רוצים להפעיל את זה שוב, אף אחד יש לי טיקר מניות אחרת הם רוצים לחפש? מיקרוסופט אני חושב שהוא זה אחד, MSFT-- $ 53. אני חושב שיאהו היא אולי ש. ופייסבוק הוא ש. אז מה היא תכנית זו עושה? הקסם נראה להיות מוטבע שבפונקצית בדיקה. אז בואו ניקח מבט מהיר. מתברר שלא באו עם PHP, זה בfunctions.php. ואנחנו לא נעבור זה בפירוט רב, אבל שים לב למילה האופרטיבית כאן שעל קו שש functions.php-- אני ממש אומר פונקציה. אני מציין את שמו של הפונקציה שלי. אני לאחר מכן ציינו כל טיעונים, או פרמטרים, אני רוצה פונקציה שלtake-- לא סוגים. ואז אני ליישם אותה. ואני אניף את היד שלי ביישום, מאז שזה נכון למדי מתקדם עכשיו, אבל אנחנו אראה את זה שוב למעשה בשבוע בבעיה להגדיר שבע. אבל אני יכול לנקות את זה, מדי. אני גם כלול ב הקוד של היום גרסה ציטוט, שאין לו קובץ PHP נקודה. משום מה הוא כנראה ב ראש התכנית בשם רק לצטט? כי מה שנקרא shebang-- לחש למדי נסתר שאומר למצוא PHP ולאחר מכן להפעיל אותו בקוד שלי כאן. בסדר, אז זה מביא שלנו למקום שבו הפסקנו time-- האחרון אם כי ב כמה דוגמאות מתקדמות יותר. כל שאלות עד כה על PHP או מה שאנחנו עושים? No-- בסדר. כן? קהל: בתוך קבצי HTML, לעשות אתם-- [? האם אתה ?] [? רק קוראים לזה?] קובץ PHP [לא ברור]? DAVID מלאן: שאלה טובה. בהקשר אינטרנט, שבו אנו נמצאים פשוטו כמשמעו, על המעבר ל, אתה לא משתמש נקראת עֵסֶק בראש, כי server-- האינטרנט לעתים קרובות תכנית בשם אפאצ'י או מיקרוסופט IIS, שרת מידע באינטרנט, או כל מספר של תוכנת שרת אינטרנט אחרת, יודע שכאשר הוא רואה קובץ PHP נקודה, שזה צריך להפעיל את הפרשן על זה. זה לא נראה שבשורה ראשונה. אז טריק השורה הראשון זה רק כשאתה שורת פקודת כתיבת programs-- שבו אנו לא נעשה סופר לעתים קרובות, אבל זה הדרך של גישור שלנו דוגמאות C שלנו לחברת PHP שלנו. אז בואו אכן לגשר העולם הזה מהעולם שורת הפקודה לאינטרנט ידי ביצוע פעולות הבא. תן לי ללכת קדימה ולצייר כאן רק לרגע. אז אם יש לנו שרת אינטרנט, או לייתר דיוק אם יש לנו המחשב הנייד שלי לכאן, שאני לצייר ככה. וכאן יש לנו את אינטרנט בצורה כלשהי. ואז לכאן, יש לנו שרת בbuilding-- זה איך האינטרנט works-- וכאן הוא שרת עם כמה אורות אולי. מה בעצם קורה בין שני החיבורים האלה? אז בבניין הזה הוא שרת אינטרנט. זה רק מחשב שרץ כמה הפעלה system-- אולי התוכנה החינמית בשם אפאצ'י, שCS50 IDE פועל. אז אתה בעצם יכול חושב על הבניין הזה כבניין ב שCSt0 IDE מאוחסן. זה מקום שבי כל מה שאתה צריך חשבונות, שבו כולכם יש שרת האינטרנט שלך ריצה, כולכם יש כתובות אינטרנט ייחודיים משלך, כשהתחלנו לדון, ואתה תראה יותר בפ להגדיר שש. הנה המחשב הנייד שלי איפשהו אחר באינטרנט. ולכן, כאשר אני מבקר את כתובת אתר ששייך לי, כי התנועה באינטרנט הולכת מעל לשרת, השרת של קבלת HTTP request-- כמו לקבל index.html וזה משיב לדף האינטרנט. אז זה הפרדיגמה הכללית. בעוד הכל עד עכשיו היום, כל מה ש קורה רק ב גבולות של הבניין הזה. אני משתמש המחשב הנייד שלי, אבל אני היה קשור לCS50 IDE, כך שכל התוכניות האלה אני רץ היה בתוך השרת ש, עצמו. אבל עכשיו, בואו נתחיל שימוש חוזר PHP לכתוב כמה תוכניות בפועל ש מוגשים על ידי שרת אינטרנט. וכדי לעשות את זה, אני מתכוון ללכת לחבורה של דוגמאות כל שמציג את הרעיון הזה כאן. אז זה סוג של דרך מפוארת של מתאר הפרדיגמה תכנות. ואכן, כפי שאתה לצאת CS50 או לעבוד על פרויקטי גמר, או לקחת קצת אחרי בכיתה, תתחיל כדי לראות שworld-- במיוחד שגדל עם שפות כמו C כי הם level-- סופר נמוך להבין שיש יותר טוב דרכים של כתיבת תוכנה. יש מסוימים אתה יכול לעקוב אחר דפוסים, דרכים מסוימות של ארגון הקבצים שלך ודרכים של שמות הפונקציות שלך, כל כך קצר שהסיפור ארוך, העולם יש לבוא עם חבורה של ראשי תיבות כל ושמות לדרכים של תכנות. אלה הם רק טכניקות שאתה יכול להשתמש. ואחד מהם נקרא MVC, לצפייה בדגם בקר. וזו רק, ל עכשיו, מסובך יתר על המידה דרך לומר איך אתה צריך להוציא אתר מבוסס PHP, במקרה שלנו. איך אתה לארגן את הקבצים שלך, איך אתה לארגן ההיגיון שלך, באופן שהופך אותו קל יותר ל לכתוב אתרים מורכבים יותר? ואכן, אנו מהירות ימצאו להגיע לשם עם p-להגדיר שבע. אז בעולם של MVC, אתה הולך כדי לראות שהקוד שלנו, בדרך כלל, יכול לאפיין גם מודל קוד, או קוד בקר, או קוד תצוגה. ואני הולך פשטנותו כfollows-- בקר הוא מוח של התכנית שלך, זה שבו כל היגיון מעניין קורה. אז כל מה שהיו כתיבה עד כה בכיתה, כמו סוג של בקר code-- זה שליטה התכנית שלך, הלולאות שלך, שלך תנאים, הפונקציות שלך ומשתנים וכל זה. צפיות, עכשיו, הולכים להיות קצת יותר ברור בעולם של האינטרנט. תצוגה היא האסתטיקה של האתר שלך. זה מה שהמשתמש sees-- התמונות, טבלאות HTML, תגי HTML, וכל כל אסתטי הרך ש, דברים שלא כל כך קשה לכתוב, אבל זה בדיוק מה שאתה מייצר, ההשקפה שנקרא, האסתטיקה. ומודל, סופו של דבר, הוא הולך להיות stuff-- בסיס הנתונים ש נתחיל לצלול לכל יותר ביום רביעי. אז הבקר הוא ההיגיון, תצוגה היא החומר האסתטי, והמודל הולך להיות בו אנו מאחסנים נתונים בפועל שלנו. אז בואו נסתכל על זה יותר קונקרטי עם הדוגמא הבאה. אני הולך להיכנס לספרייה שלי כאן של המקור של היום code-- כולם זמין באינטרנט. ואני הולך להיכנס לגרסת אפס. וכאן הוא-- בואו נקראים לזה גרסת אפס באתר האינטרנט של CS50. אין הרבה כאן בכלל. זה דף אינטרנט פשוט מאוד זה כנראה באמצעות מה HTML tags-- רק מניח מדוגמאות האחרונות? מה זה? H1-- כנראה שלגדול מודגש הכותרת, לוגו שלמעלה, CS50. ומה עוד במשחק? כן? קהל: רשימה לא ממוינת. DAVID מלאן: list-- לא ממוין כך תג UL ואולי כמה תגי LI. ואם אתה לא זוכר אלה, זה באמת לא משנה. אלה הם סוג רך של פרטי יישום HTML שאתה מסתכל במהירות ואתה בחזרה בדרך שלך. אנחנו נתמקד יותר בתכנות רעיונות שהם החתיכות עסיסיות. אז בואו פשוט לקחת מהיר מסתכל על HTML-- ואכן אם אני פותח את מקור התצוגה כאן, כן, זה בדיוק מה שקורה כאן. יש תג UL. מקונן בתוך של שהוא תגי LI. ואז שאלתי את כתובת האתר של תכנית הלימודים בפועל כאן. ולאחר מכן ב lectures.php הוא כנראה עוד דף באופן דינמי זה הולך להיות, בואו see-- אה, בשבועות הראשונים של הרצאה. אז בשבוע שאפס ושבוע אחד, בוא מסתכל על זה-- אם אני רואה במקור של דף, גם סופר פשוט. אלה מובילים לשני עמודים week0.php נקרא, וweek1.php. אז לשקול עכשיו מה שקורה. כאשר אני לוחץ על week0.php, המחשב הנייד שלי עושה בקשה לweek0.php. שרת האינטרנט, מוכר גם בשם, CS50 IDE, מקבל כי מעטפה וירטואלית. זה לראות את הודעה כמו, לקבל week0.php. לאחר מכן הוא מפרש את הקובץ, עליון למטה, משמאל לright-- הקובץ וweek0.php-- נקרא יורק את התוצאות. אז בתוך קובץ זה, week0.php, חייב להיות היגיון בקר שהוא יצירה HTML זה, ואנחנו בקרוב לראות את זה. אבל לעת עתה, הרשה לי ללחוץ על השבוע אפס, ועכשיו יש לנו יום רביעי ויום שישי, ועכשיו יש לנו את השקופיות לאט משבוע אפס. וייתכן שזוכר מדרך זו חזרה כאשר. אז זה כל אתר זה עושה. אז בואו לבחון כיצד הוא עושה את זה. אני הולך לחזור ל קוד מקור כאן, בCS50 IDE, ואני הולך לפתוח את index.php. בחלק העליון של קובץ זה הוא חבורה של תגובות. ואז באמצע קובץ זה, זה מתברר, הוא שאף קוד PHP שהיא. כי אם אין לך אף אחד מ תגי PHP סימן שאלת הסוגר פתוח, אתה חופשי רק כדי לשים HTML. כי מה שPHP הפרשן אמור לעשות, כאשר הוא קורא file-- זה מלמעלה למטה, מהשמאל לright-- זה רק מפרש קוד זה רואה בין סוגריים זוויתיים אלה סימן השאלה. וכל דבר אחר שהיא עושה לא מכיר כמו PHP, זה פשוט יורק החוצה. ו- HTML הוא בין הדברים זה פשוט לירוק. יש בקובץ זה אז יכול נקרא index.html, אבל אני כל שמות נקודת PHP כקרש קפיצה. Lectures.php-- דומה משעמם, זה רק חלק HTML. Week0.php, באופן דומה רק חלק HTML. אבל עכשיו בואו לשים על כובע הנדסת פתגמי, ולשקול כיצד אנו יכולים לשפר את זה. זה לא קשה לעשות את זה, אבל אני סוג devolved של להעתקה והדבקה. ולמעשה, אם אני עושה שבוע שני, יודע מה אני כנראה הולך לעשות? אני מתכוון ללכת לweek1.php, אני הולך לסמן את הכל. אני הולך להעתיק אותו, להדביק אותו לקובץ חדש בשם week2.php, לצבוט כמה כתובות אתרים, ולהיות בדרך שלי. אז על סמך מה יש לנו ראה בC כבר, זה לא מרגיש נכון, אני מקווה. העתק, רק לעתים נדירות הפתרון הנכון להדביק. אז מה אנחנו יכולים להתחיל לעשות כדי לשפר את זה? איפה ההזדמנויות לעיצוב טוב יותר? עד שאני מגיע ל שבוע שמונה, זה הולך להיות ממש מעצבן אם אני רוצה לשנות הגופן של כל אחד הדפים שלי, או אם אני רוצה כדי לשנות את המבנה של הפריסה. אז איפה את ההזדמנות לעיצוב טוב יותר? ובכן, הבה נבחן מה משותף לכל הקבצים הללו. הנה שבוע אחד, הנה שבוע אפס, הנה lectures.php, הנה index.php-- מה הוא אותו ו מה שונה, באופן כללי, בכל אחד מהקבצים הללו? כן? קהל: [לא ברור] DAVID מלאן: בסדר, טוב. אז יש דפוס, בוודאי, לפיה בכל פעם שאני בוחר אני הרצאה, אני צריך להיות יצירה דף מראה דומה מאוד. וכך אולי אני יכול למנף העובדה שבאמת, אנחנו בכוונה מספריים אינדקס lectures-- אם אני יכול לשים עוד יותר מילות בתשובה שלך. ומה הוא הדבר היחיד, באמת, זה משתנה בין השבוע one-- ותן לי לגלול למטה אז זה בערך באותו place-- אז הנה הוא השבוע אפס, בערך בחלק העליון. הנה שבוע אחד, שבוע אפס, שבוע אחד, שבוע אפס. אישור, פשוטו כמשמעו, אם אתה יודע אין תכנית שהיא, זה עכשיו בדיוק כמו משחק התאמת תבנית. אז מה שונה? כן? קהל: [לא ברור] DAVID מלאן: טוב, אז הכותרת משתנה, מעט שבמעט. אפס הולך, כמובן, לאחד. אותו דבר קורה בתג H1. ואנחנו לא ממש רואים את זה בקלות, כי כתובות האינטרנט הם קצת ארוכות. אבל כתובות אתרים אלה משתנים מעט. אבל מה שלא משתנה כלומר, אני מעז אומר, רוב התוכן של page-- תג HTML אותו הדבר, הראש הוא אותו הדבר, הכותרת היא כמעט אותו הדבר, הגוף הוא זהה, ו כמעט כל דבר אחר הוא אותו פרט ל אלה tweaks הקטן. אז איך אנחנו יכולים ללכת על פקטורינג כמה זה יוצא? ובכן תן לי להציע בדיוק כי בגרסה הבאה. אז הנה בגרסה אחת, יש לי מדויק אותם קבצים, בתוספת כמה אחרים. הנה index.php-- וגם אם שמעולם לא ראית לפני PHP, מה שאני כנראה אני עושה כדי לפתור את זה problem-- מבוסס על מה שאתה רואה כאן? כן, הוא שמחויבות קלות? לא? כן, ללכת על. קהל: [לא ברור] DAVID מלאן: כן. קהל: [לא ברור] DAVID מלאן: אני זקוק לך מדבר רק קצת יותר חזק. קהל: [לא ברור] DAVID מלאן: בסדר, טוב. ואני חושב-- זה היה קשה לשמוע אבל אני אתם-- חושב מה שאתה מקבל בהוא ש התגים שהיו נפוצים עד הראש, והתגים שהיו נפוצים ב תחתון, יש כעת בחשבון את, או נדחק למה קבצים? Header.php וfooter.php-- ואנחנו הולכים כדי לעשות קצת צובטים ל לטפל בדאגתך רק הועלה על שינוי המספרים, ל למשל, אם שמעתי אותך בצורה נכונה. אבל זה נראה את התמצית של זה. אם הייתה כמות עצומה של יתירות בחלק העליון של הדף, וכמות עצומה של יתירות בתחתית, בואו, פשוטו כמשמעו, רק שיא ולחתוך תוכן שיצא, לשים אותו בfile-- נפרד בדיוק כמו הרעיון של CSS, שבו אנחנו בחשבון את אסתטיקה דומה מאוד, לשים זה בקובץ נפרד PHP הנקודה, להשתמש בדורש mechanism-- ש כמו include-- החד C ש הוא למעשה כמו להגיד ללכת לתפוס את התוכן של header.php, ולהעתיק ולהדביק אותם כאן. אבל מה שזה אומר זה שעכשיו ב index.php, יש לי שני קווים אלה. בlectures.php, אני גם יש שני קווים אלה. בweek0.php, אני גם יש שני קווים אלה. אז עכשיו, אם אני רוצה לשנות הכותרת של כל הדפים שלי, או שאני רוצה לשנות את מבנה בסיסי, אני יכול לשנות את זה עכשיו רק מקום אחד, או שתיים כותרת עליונה ותחתונה places--, בהתאמה. עכשיו ההתחלה של הקוד להסתכל קצת מסתורי יותר, נכון? אבל אם אתה חושב על מה הדף הוא עשות-- אם אני מבקש week0.php, בדיוק כמו בציור על כאן-- כאשר week0.php מתבקש, מה הכוונה? פשוטו כמשמעו, קובץ זה הוא התבקש על ידי הדפדפן. מוכר גם בשם server-- האינטרנט CS50 ID-- תופס זה קובץ, week0.php, וקורא זה מלמעלה למטה, משמאל לימין. בשורה אחת, אותה מייד מפגשים PHP סימן שאלת הסוגר פתוח, דורש כותרת הנקודה PHP, וכל כך מה מתורגמן PHP does-- שבנוי לאינטרנט שרת, כי אנחנו מוגדרים מראש זה לזה באופן אוטומטי הולך אתם-- לheader.php, עותקי התוכן, מדביק אותם לכאן. אבל אז מפגשי המתורגמן סימן שאלה קרוב הסוגר, כך שכל זה נעשה חושב. עכשיו זה רק באופן עיוור יורק קווים את שני דרך שבע, כי זה פשוט HTML גלם. מקבל בשורה שמונה, ועושה את זה אותו קסם again-- פתיחת הקובץ, תופס את התוכן, ו לדרוש מהם או להדביק אותם באותו רגע או לשם. אבל אני רק רמזתי לבאג. זהו צעד חלקי לאחור, כי אם אנחנו מסתכלים בheader.php, אני כבר לחתוך סוג של פינה. מה תכונה שאני לוותר על מנת כדי לזכות בעיצוב טוב יותר לטעון את זה? כן? קהל: [לא ברור] DAVID מלאן: כן, אני סוג של לחתוך פינה טריוויאלי. אתה ציין כי מה שהשתנה הייתה הכותרת, המספר בכותרת, והמספר בH1. אז הפתרון שלי היה, אישור, בואו פשוט לשנות את שם הדף, ולא להתמודד עם זה בעיה שהיא. אז זה חלקי צעד אחורה בודאות. אבל מה הוא ראוי לציון כאן האם זה מה שעשה הוא בחשבון אחר את כל הדברים המשותפים. ובfooter.php, לבי בחשבון את כל זה, אם כי פחותים, דברים משותפים. אז אני צריך איכשהו עכשיו נוכל לקחת צעד נוסף קדימה, ולתקן שנושאי הכותרת. אז בואו נעשה את זה. תן לי ללכת לגרסה השנייה שלי כאן, אשר, שוב, יש את אותו קבצים למעט תוספת חדשה. וזה קצת יותר מפורט, אבל בואו תראו אם אנחנו יכול להפריד את מה שקורה כאן. אז במקום לדרוש header.php, וfooter.php, נדמה לי שיהיה צורך באחד בלבד file-- נקרא, כמובן, helpers.php. ותן לי לקבוע עכשיו, מה יש בפנים של helpers.php הוא פשוט חבורה של פונקציות שכתבתי, בדיוק כמו לפני. אבל התקשרתי helpers.php זה. עכשיו כנראה, ב קו שלוש ו -10, אני קורא שתי functions-- לדקלם כותרת, להבהיר תחתונה. אלה לא מגיעים עם PHP, כתבתי אלה בעצמי. ושמתי אותם בhelpers.php. עכשיו, שראינו תחביר זה רק פעם אחת, וזה היה סופר קצר. אבל זה כנראה טיעון כדי להבהיר כותרת, הפונקציה. למה אני יודע את זה? ובכן הנה סגור סוגריים, הנה סוגריים פתוחים. וכמובן, בדיוק כמו ב- C, משהו בין סוגריים אלה הוא input-- או טיעון לפונקציה. מהו סוג נתונים של טענה זו, על סמך מה שהדגשתי? מה לעשות סוגריים מרובעים אלה מצביע, המבוסס על בשבוע שעבר? כן, זה array-- במיוחד מערך אסוציאטיבי. ותחביר זה אמנם קצת פאנקי, אבל זה רק עובר בזוג ערך מפתח אחד. המפתח הוא, ציטוט סוף ציטוט הכותרת, והערך הוא CS50. אם היינו עושה את זה ב- C, במקום אולי זה נראה יותר כמו זה, רק ציטוט סוף ציטוט CS50-- או בעצם זה יהיה מתולתל פלטה, או משהו כזה ב- C, שבו המפתח הוא אפס, והערך הוא CS50. אבל שוב, ב- PHP, למרות ש תחביר הוא, שוב, קצת מוזר, זה מאפשר לך לעבור ב מילות במקום מספרים לשייך מפתחות עם ערכים. אז מה כל זה אומר? אם אני נכנסתי לhelpers.php, בואו נסתכל על פונקציה זו. renderHeader.php, ולא renderHeader היא הפונקציה שלי, ואני יודע את זה כי אני רואה מילת המפתח הפונקציה כאן. זה חדש מC-- זה כנראה לוקח טיעון נקרא data-- אבל אני יכול בשם זה שום דבר, אבל אני קראתי לזה נתונים, רק כדי להיות קצת clean-- ו פשוט לקחת ניחוש, במיוחד אם אתה כבר מתוכנת בחלק אחר שפה גבוהה יותר רמה לפני, משהו מעל C, מבחינה רעיונית. מה עושה הסוגר פתוח שווה הסוגר מרובע כנראה מתכוון? או מה שזה אומר? אנחנו כבר לא ראינו את זה בג כן? מערך ריק. באופן ספציפי, זה אומר שאם המשתמש אינו קורא renderHeader עם טיעון, אני עדיין הולך יש טענה שנקראת נתונים, אבל ערך ברירת המחדל שלו הולך להיות מערך ריק. אז זה רק נוחות נחמדה. אני לא צריך לצעוק על המשתמש, או לומר לך להשתמש בפונקציה שלי לא בסדר. אני יכול רק לתת למשתמש ברירת מחדל ערך, אם לא אכפת לי במיוחד. עכשיו בפונקציה זו, אני הולך לנופף את הידיים שלי ב. אבל פונקצית תמצית זו מאפשרת שלנו להעביר משתנה אלה בנתונים לheader.php באופן הבא. וזה החתיכה האחרונה, אני חושב, של תחביר פאנקי. הנה הגרסה החדשה שלי של header.php-- זה נהגתי לומר, פשוטו כמשמעו, פתוח כותרת CS50 הסוגר, וזה היה זה. ואותו דבר לH1. עכשיו זה אומר כנראה משהו די מגניב. ותנו לי לפשט את זה לרגע כדלקמן. זה מה שיש לי שינה הכותרת שלי להיות. עם זאת, זה מתחיל להיות קצת מכוער לסוגריים כל הזמן פתוחים עם PHP, ולאחר מכן להשתמש בפונקצית ההדפסה. מתברר שיש PHP קצרנות סימון לזה, שהוא רק סימן שוויון, שהוא מבחינה טכנית פונקציה שנקראת הד במקום הדפסה, אבל זה אותו הדבר, בצורה יעילה. זה פשוט נראה טוב יותר. זה פשוט תחבירי סוכר, אם תרצה, זה עושה את הקוד שלי נראה קצת יותר טוב. אבל מתברר, ו אנחנו אראה את זה שוב לפני זמן רב, יש לנו לקרוא לזה מעצבן פונקציה ארוכה שנקראה תווים מיוחדים HTML ב PHP, כי מתברר יש תשומות מסוימות שהמשתמש יכול לתת לנו, או שמשתמשים יכול לתת לנו, כי הם הולכים לשבור האתר שלנו. אבל נראה כי הבא שבוע עם JavaScript. אבל לעת עתה, רק יודע ש קובץ זה, headers.php, פשוט לוקח את התואר ש עברתי ב, זה לעשות בטוח שזה בטוח להיות מוזרק לתוך אינטרנט דף, וזה יורק את זה ככותרת שלי וכמו H1 שלי. אז אם אני נכנסתי לגרסה זו כעת, שם לב שיש לו הרצאות הכותרת שלו בחזרה, יש שבוע אפס הכותרת שלו בחזרה, ו אכן, HTML אני יצירה זהה למה שהגרסה הראשונה שלי was-- למעט הרווחים שלי, כי אני כבר התחלתי עיצוב הקוד שלי קצת אחר. אבל אני כבר נוצר כל הקוד אכפת לי. אז תן לי לעצור ל רק רגע ולראות אם יש שאלות או בלבול שנוצרתי. בסדר, אז בואו לסובב קצת יותר קשה כאן כדי לראות אם יש הזדמנות לשיפור. Helpers.php גם היה זה פונקציה, נקרא renderFooter. ומה ראוי לציון על renderHeader, וrenderFooter? ושוב, למטרות של היום, יודע שפונקצית התמצית היא רק הדרך של טיעונים החולפים שלי לheader.php וfooter.php. מצטער? קהל: [לא ברור] DAVID מלאן: כן, אני רק השתנה דורשים קו. אז, פשוטו כמשמעו, שבצעתי את החטא של העתקה והדבקה, שוב. זה לא מספר עצום של קווים, אבל לבוא on-- אם אני מעתיק ומדביק את הכל רק כדי לשנות מילה אחת קטנה, והמילה אחת קטנה שמצביעה אלן את הקצה תחתון כלומר כאן, לעומת הכותרת כאן. אחרת, כל מה שהוא זהה, למעט, כמובן, השמות של הפונקציה. אז מה אנחנו יכולים לעשות טובים יותר? ובכן תנו לי לפתוח את גרסה זו כאן, לפיה בhelpers.php, למה שלא פשוט לקבל קצת יותר חכם על זה? לכתוב קצת יותר מסובך קוד, אבל קורא לזה לדקלם? אז מה יש לי ביסודו השתנה? זה לוקח טיעון now-- שני טיעונים, הנתונים עדיין. ואז מה הראשון שם כנראה בשימוש ל, על סמך מה אתה קורא כאן? גם אם חלק מהתחביר הוא עדיין חדש. מה היא תבנית סימן דולר? מצטער? קהל: כותרת עליונה או תחתונה. DAVID מלאן: כותרת עליונה או תחתונה. אז כנראה, החלטתי שאם הדבר היחיד ששינוי זה מה שאני רוצה תבנית לprint-- ועל ידי תבנית אני מתכוון לזה הוא תכנית ל קוד שאני רוצה פלט, אבל אני רוצה לחבר כמה values-- כך שאם זה רק כותרת או תחתונה, למה אני לא parameterize ושקורא סימן דולר טיעון תבנית? ולאחר מכן תחביר פאנקי זה מאפשר לי כדי ליצור נתיב במשתנה כאן. אז דרך סימן דולר היא משתנה. מה עושה תחביר זה לעשות, אם אתה מכיר? כן? קהל: [לא ברור] DAVID מלאן: בדיוק. אם תבנית היא, ציטוט סוף ציטוט, כותרת, או אם תבנית היא, ציטוט סוף ציטוט, כותרת תחתונה, קו שיש כי אני כבר הדגיש, קו שמונה, פשוט לוקח את השם הזה, כמו כותרת, ושרשור זה עם PHP נקודה. אז לא היה לנו מפעיל זה בג מפעיל נקודה זו דבר מדהים בPHP-- אם אתה מכיר JavaScript או Java, אתה יכול להשתמש בתוספת לחתום לעשות שרשור. ב C, זה כאב בneck-- ואני מצטער כל כך, בהגדרת עמ 'שש, אתה הולך צריך לעשות זה-- זה כאב בצוואר ללשרשר מחרוזות. למה? ובכן, כי אם יש לך מחרוזת זה כל כך הרבה זמן, ועוד מחרוזת זה כל כך הרבה זמן, אתה לא יכול פשוט תקע אותם יחד. מה אתה במקום צריך לעשות בC? כן? קהל: [לא ברור] DAVID מלאן: אתה צריך malloc זיכרון, או להשתמש במערך על המחסנית. ואתה באמת צריך להפוך את המערך שגדול מספיק כדי להתאים את זה בתוספת זו, בתוספת הקו הנטוי אפס. אז לשרשר אותם יחד באמצעות מערבב חתול או ידני עם ללולאה, או כל מספר של טכניקות. ואנחנו מראים לך כמה בשישה להגדיר p-. זה כאב בצוואר. וזה באמת מה שאני אומר על זה לעומת זה-- כמו C לעומת PHP. אתה פשוט מקבל כל כך הרבה יותר פונקציונלי בחינם, כך שאתה יכול להתמקד, באופן אידיאלי, בכיף חלק מקידוד, פרויקט שברצונך לפתור, ולא בפרטי הפרטים ברמה הנמוכים. אז זה רק יוצר header.php או footer.php מבוסס על איזה מהם אני קורא. ואכן, אם אני הולך לindex.php, הודעה כל מה שchanged-- במקום קוראים להבהיר כותרת או להבהיר תחתונה, אני מתקשר לדקלם, ואחריו שם התבנית שאני רוצה לעשות. ואתה רואה את זה, גם, בבעיה להגדיר שבע, לפי שאנו מאפשרים לך להשתמש ב אותו תפקיד לעשות צרורות וצרורות של דפי אינטרנט שונים. אז במקום להתעכב יותר הרבה יותר על details-- אלה שתראה שוב ב סט הבעיה seven-- בואו נסתכל בחברה בתחילת פתרון לבעיה מעניינת יותר. עד כה, שום דבר שיש לנו עשה הנתונים השמורים. למעשה, הפעם היחידה שאי פעם הצילו משהו שעשינו בכיתה זו הוא כאשר היה לנו הדגמה פשוטה מאוד לזמן מה בחזרה, לפיה נהגנו קובץ IO ב- C, ואני חושב שאני הקלדתי את השם שלי, ו שמו של חנה, ושמו של מריה, או אולי את שמו של אנדי, ו אז אנחנו הצלתי file-- CSV מופרד בפסיקים קובץ ערכים. והשתמשנו fopen-- אני חושב ש השתמשנו fprintf כפי שאני זוכר, ואנחנו הצלתי קובץ. עכשיו, כי הוא הפשוט ביותר צורה של בסיס הנתונים. אם אתה רוצה להפוך את אתר ל תכנית פרוש IMs, לפיה תלמידי שנה א ' ניתן להירשם לספורט, אתה באופן אידיאלי רוצה לעשות משהו עם נתונים ש. בשבוע שעבר, לא עשינו דבר עם data-- אנחנו פשוט אמרו, אתה רושם, לא ממש. או שאולי אני בדוא"ל משגיח, וזה היה זה. אבל זה יהיה נחמד אם הייתי יכול לתת משגיח שקובץ CSV, כמו קובץ Excel. או יותר טוב, זה היה יהיה נחמד אם הייתי יכול את שמותיהם של המשתמשים ו מעונות שמות וכל זה לתוך מסד נתונים ש רק חי לנצח, עד שאבחר למחוק את הנתונים. מסד נתונים המאפשר שלי לשאילתא מידע. ואכן, זה מה שהוא מסד נתונים. אנחנו מציגים היום, ו בשבוע הבא, גם טכנולוגיה נקרא SQL-- שאילתה מובנה שפה, שהיא שפה אחרת. זה בעצם תכנות שפה, אבל למאגרי מידע. ומסד נתונים לעת עתה, רק חושב כמו גרסת סופר מפוארת של Microsoft Excel, או Google גיליונות אלקטרוניים, או מספרי אפל. זה בדרך כלל תכנית המאפשרת לך לאחסן חבורה של נתונים שלמה בשורות ועמודות, די כמו שאתה אולי ב- Excel. אבל מה זה נחמד, במיוחד אם אנחנו לא סופר מוכרים עם Excel, מה SQL מאפשר לך לעשות הוא שאילתא זו מידע על ידי כתיבת שורות קוד שבו אתה יכול, גם אם שלך יש מסד נתונים מיליון שורות בזה, אתה יכול למצוא דברים סופר מהיר. למעשה, Excel במיוחד רע בערכות נתונים גדולות. ולמעשה, עד כמה לפני שנים, התברר Excel רק יאפשר לכם לאחסן עד 65,535 שורות של data-- ש נשמע כמו הרבה, אבל ב זמן הייתי סטודנט לתואר, ואני זוכר שמעד על זה בגלל שיצירה קבצי CSV למחקר שלי ואני רציתי לנתח אותם במהירות רק על ידי פתיחה ב- Excel. כמובן, המחשב שלי פשוט התרסק, כי היה לי יותר מ -65,000 שורות. אבל איפה 65,535 באו? מה עושה מיקרוסופט, ככל הנראה? אם אתה טוב עם הכוחות של שני? כן, הם היו משתמשים 16-bit ערך לייצג את מספר השורה. ושני 16 הוא 65,536-- פחות אחד, כי אם אתה אפס מדד אומר שהיה רוב מספר השורות יש לי יכולים. וזה היה רק ​​החלטת עיצוב. על ידי שמירת 16 סיביות, הם המוגבלים 16,000 שורות, במקום 4 מליארד דולרים, שהיה יכול להיות לי באופן אידיאלי. אבל לעת עתה, אנחנו הולכים להציג את זה יותר בהקשר אינטרנט. ומה שיפה הוא שגם SQL למרות שזה די חזק ודי מתוחכם, זה באמת מסתכם עד ארבע פעולות עיקריות, ארבעה פונקציות מפתח, אם אתה will-- לבחור, לאחזור נתונים, חיפוש לנתונים; למחוק או מחיקה של נתונים; הכנס להוספת שורות במסד הנתונים; ועדכון. אז אם אי פעם השתמשת ב- Google גיליונות אלקטרוניים, מספרי אפל, מיקרוסופט Excel, שהוצאת להורג, ככל הנראה, כל פעולות אלה כאדם על ידי רק באמצעות המקלדת וmouse-- הכנסת נתונים, באמצעות העיניים שלך כדי לבחור או לחפש נתונים, או עדכון נתונים, או למחוק את הנתונים. אז מה זה אומר? ובכן, שהותקן מראש בCS50 IDE הוא תכנית בשם MySQL. זה קוד פתוח חופשי, מסד הנתונים שסופר פופולרי. פייסבוק, למשל, משתמש בו כדי זה יום, בין כלים אחרים שהם משתמשים. והרבה אתרים פופולריים מאוד להשתמש זה במידה רבה משום שהוא מהיר, ובגלל שזה בחינם. אם כי בהחלט קיימות חלופות. וכמה מכם עשוי להשתכשך עם חלופות לפרויקטי גמר. זהו צילום מסך, בינתיים, של כלי מבוסס אינטרנט שנקרא phpMyAdmin. זה צירוף מקרים ש כלי מבוסס אינטרנט זה הוא גם כתוב בשפה, PHP, אבל מה זה אמור לעשות הוא נותן לנו מבוסס אינטרנט ממשק למסד נתונים. בגלל MySQL בדרך כלל הוא משהו, מבחינה היסטורית, היה אינטראקציה עם רק עם שורת הפקודה. וזה יהיה סופר מעצבן ומסתורי שיש להקליד פקודות טקסטואלי כדי לבחור נתונים, להכניס נתונים, ולמחוק את הנתונים. אז כמה אנשים באינטרנט כתב תכנית מבוססת אינטרנט שרק תנו לנו לנהל את הנתונים במסד הנתונים שלנו. זה כמו לחיצה כפולה על Excel, ו פועל גרסה מבוססת אינטרנט שלה. ומה שאתה הולך להשתמש בזה ל סופו של דבר בשבוע הבא, לא בשש להגדיר p-, אבל הוא לבנות משהו נקרא CS50 האוצר, ש הוא הולך להיות בסיס הנתונים של משתמשים, עם שמות משתמש וסיסמאות, דולר הסכומים שהם יש בחשבונות הבנק שלהם. זה הולך להיות משהו שאתה משתמש כדי לאחסן הסמלים והכמויות משתמשים של מניות ש קנה באמצעות וירטואלי דולרים שתנתנו להם. וזה הולך כדי לאפשר למשתמשים להירשם לאתר שלך, כך שגם החברים שלך יכול לכוון לאתר האינטרנט שלך ולמעשה לרשום, להתחבר, ולשחק ולנסות למצוא פגם בקוד שלך, ולנסות למצוא באגים באתר האינטרנט שלך. והם פשוט לרשום על ידי הוספה עצמם, ביעילות, באמצעות קוד שאתה כותב למסד הנתונים שלך. לדוגמא, זה צילום מסך מהיר ממה שמסד נתונים עשויים להיראות. זה היה מאחד solutions-- של השנה שעברה זה כמו Excel מיני להגיש, יישמר במאגר המידע שלנו, מאוחסן בתוכנה זו נקראת MySQL. בצד שמאל, יש לי כנראה נתן לכל משתמש מספר ייחודי. בעמודה השנייה, שנתתי כל משתמש name-- שלי ביניהם. ועל צד ימין, אני כבר נתתי להם חשיש. עכשיו זה הוא למעשה סיסמא, אבל זה לא סיסמא טקסט רגיל. זה סיסמא מוצפנת, אם תרצה, או סיסמא חשיש. שאנחנו נחזור לזמן קצר. אבל אם אתה אי פעם לקרוא מאמר על איך הסיסמה שלך בכמה בנק או חלק אתר אולי נפגע, זה יכול בדרך כלל אומר אחד משני דברים. אז זה רק קטע של שישה משתמשים. כולכם עכשיו יכול להבין מתוך באמצעות פריצה או פיצוח מה הן סיסמאות של אנשי השישה. אבל אם אי פעם קיבל התראה או התנצלות מחברה או אמרה אתר, מצטער, האקר פרץ לבסיס הנתונים שלנו, אתה כנראה צריך לשנות אותך סיסמא, מה שאולי זה אומר? ובכן, אחד, יכול להיות החברה כבר מטומטמת יותר, וכבר אחסון הסיסמה שלך בטור כזה, לא מוצפן. מה שאומר היריב, מי גנב את בסיס הנתונים, ממש יודע שם משתמש וסיסמא. זה התרחיש הגרוע ביותר האפשרי. וכפי שתראה בעמ-סט שבע, כל כך קל להימנע. אין שום תירוץ של צורה של טיפשות באינטרנט של היום. Two-- ונמצא כמה מאמרים להעיד עובדה שזה עדיין קורה, nonetheless-- שני, אולי היריב גנב גרסה זו של מסד הנתונים. וזה עדיין סוג של רע, כי עכשיו הם יודעים שיש לי שישה לקוחות, אני יודע את שמות המשתמש ששת לקוחות אלה, ואני יודע מוצפן גרסאות, או הגרסאות מרוסקים, סיסמאות אלה שישה הלקוחות. אבל מישהו מכם אולי ש עשה [? האקר 2?] שבו אתה סדוק סיסמאות, או לקח מסתכל על גרסה זו של הבעיה סט, למה זה עדיין קצת מדאיג אם היריב יודע החשיש שלך סיסמאות? קהל: כי הם יכולים להיכנס לכל המילון לפונקצית החשיש. ואם הסיסמה שלך היא מילון מילה, [? הם פשוט יכולים match--?] DAVID מלאן: בדיוק, היריב רק יכול לכתוב קוד, כמו שחלקכם עשה ל[? האקר?] 2, לפיה אתה לחזר על כל המילים במילון, או כל שילובים האפשריים של עד Z ואחד דרך nine-- שנשמעים כמו הרבה, וזה. אבל למחשב, זה די מהר לעזאזל. ואכן, זה היה נקודה [? האקר 2,?] היה לקחת דברים ש ממש נראה כך, והנדסה לאחור מה זה בעצם היה. אז אנחנו נראים כיצד אנחנו יכולים לאחסן בצורה יעילה יותר זה. מתברר, לשמחתי בMySQL, יש הולכים להיות סוגי נתונים. ואחד החלקים מהנים על עיצוב מסד נתונים, אם להיות כנה, למעשה להחליט בעצמך איך אתה צריך לייצג את הנתונים? אתה צריך לייצג את מספר טלפון כ int, כמו מספר גדול, או ארוך? או שאתה באמת עושה את זה כרצף של תווים? ולא יכול להיות מאוד השפעות הלא טריוויאלי של זה. למעשה, אחד מ סיפורים מוקדמים, כיף שַׁיָך כאשר מארק צוקרברג היה בנייה פייסבוק, שנכתב במקור ב, ועדיין כתוב במידה רבה ב- PHP. ואחד מהאתגרים הגדולים ביותר הם מתמודדים בשלב מוקדם היה קנה מידה. כאשר הם הוסיפו בית ספר לאחר בית ספר אחרי הלימודים, למיטב ידיעתי, אחד הפתרונות המקוריים היה בעצם להעתיק ולהדביק חלק ממאגרי המידע וחלק מהקוד, כך שאוניברסיטת הרווארד הייתה פועל על שרת משלו, וMIT רץ על השרת שלה. וזו הסיבה, לכמה מכם שאולי זוכר, אתה לא יכול להיות חברים ברשתות אחרות. אתה כנראה לא צריך חברים ב MIT או הרווארד לפני 10 שנים בערך, אבל אתה לא יכול להקיף רשתות לחלקו מסיבה זו. ואחד האתגרים הגדולים ביותר עבור מארק ועבור חברות כמו פייסבוק הוא למעשה טיפול במאה ואלפים ומיליון בקשות לשנייה. אז הדברים נתחיל מדבר על זה שבוע באמת הולכים להיות רלוונטי ל כתיבת תוכנה טובה, ועממי כלים מוצלחים ש יכול להתמודד עם הרבה משתמשים. אז נדבר על דברים כמו אינדקס וחיפוש, אבל זה אותו להיום. אנחנו אראה אותך יותר ביום רביעי. [מוסיקה - נושא "סיינפלד"] DAVID מלאן: ניתן ל זה, ולגרוע ממנו. ואתה לא צריך להישאר עם כמה סכום שנקבע מראש של זיכרון. ובכן, מה שהולך להיות בשם? SPEAKER 1: ובכן, מה קורה? SPEAKER 2: מה זאת אומרת? הוא נותן הרצאה. DAVID מלאן: ואנחנו יכולים להשתמש פונקציה שנקראת malloc לmemory-- SPEAKER 1: מדוע אינן זרועותיו נעו? SPEAKER 2: ובכן that's-- אתה יודע, זה נורמלי. זה בדיוק כמו שיש לו רק נקניקיות גדולות תלוי שם. 1 דובר: זה נורמלי? SPEAKER 2: כן, אני חושב שאנחנו רק להניח שהוא בטעות החליף הדאודורנט שלו עם דבק מגע.