ANDI פנג: אנחנו כמעט דרך כל psets. למעשה, אנחנו ברוב של psets הקשה ביותר. אז אנחנו בעצם רק הולך סוג של רוח באמצעות כמה שבועות הבאים. אנחנו הולכים להתחיל לדבר עלינו פרויקטי גמר, האירועים מתקרבים בשבועות הקרובים. וחיים יהיו רוח. אז לא יותר מדי היום. יש לקוות, יהיה למעשה משב רוח דרך סדר היום להיום, ואז יהיה מכאן עם קצת זמן פנוי. כמו כן, אני רוצה להתנצל לחוסר ממתקים היום. אני לא יודע למה. אבל הוביל בשבוע ליל כל הקדושים, אני לא אשכח את הסוכריות. אז אני בעצם רק עצום אכזבה לך עכשיו. כי אני ממש זוכר את הממתקים לכל כיתה, אבל ליל כל הקדושים. אבל בשבוע הבא, אני אביא להכפיל את כמות הממתקים כדי לפצות על זה, כל זה בשבילך. זה יהיה נהדר. אז יש לי כמה הודעות לגבי חלק התזמון. יש לי כמה בעיות תזמון. אז אנחנו הולכים לעבור ל לדבר על מה שנקרא chmod. אנחנו הולכים לדבר על מהירות TCP / IP HTTP. ואז אנחנו הולכים לקוד שלנו אתר עצמו באמצעות HTML ו- CSS. ואז אני בעצם אולי אעזוב כמו 20 דקות לדבר על pset6. בגלל pset6 הוא למעשה הרבה דברים שאנחנו כבר ראינו בעבר, אבל רציתי לרענן חלק ממושגים אלה כמו גם ללמד את בני זוג פונקציות חדשות. לְהִתְקַרֵר. אז קודם כל, בברכה חזרה מהפסקה. אני מקווה שאתה ההפסקה הייתה מהנה. האם עשית להפסקה? קהל: נסע לניו יורק. ANDI פנג: אתה נסעתי לניו יורק? אני חושב שמחצית בית הספר שלנו נסעתי לניו יורק. הכל בסדר. אני ביליתי את רוב ההפסקה שלי בישיבה בNetflixing המיטה. וזה היה זמן טוב. אבל אנחנו עכשיו בחזרה, בחזרה ב פגישה, חזרה בתנופה של דברים. יש לנו pset עקב יום שישי בצהריים. אני חושב שיש לך כבר הרים החידון שלך, כן? אז כל מי שיש לו לא היה להם חידונים, בבקשה לבוא ולקבל החידונים שלך ממני בסופו של הסעיף. או לאתר אותי בקמפוס. אני אצטרך אותו איתי למקום. מראש הצעת פרויקט הגמר שלנו גם. אז לאלה מאתנו שמעולם לא נלקחו המעמד הזה לפני, אבן הראשה של CS50 הוא מאוד הגיעה לשיא בזה פרויקט גדול שתלמידים מציעים. ולפני ההצעה, רק רעיון כללי של מה שייתכן שתרצה לעשות להם פרויקט, הרעיון שנובע יום שני, ביום שני הבא בצהריים. אז פחות או יותר, דוד אני חושב שיהיה לדבר יותר על זה בהרצאה אם לא כבר יש לו. ויש דף מוצק באתר שלנו מסביר כל הדרישות של הפרויקט. אבל בעצם, לבחור כל נושא שיש לך כבר עניין ב לאורך הזמן שלך כאן במדעי המחשב, בין אם זה יהיה משחקים או עיצוב או וידאו או כל דבר. ואתה יכול באמת סוג של עכשיו ליישם חלק מהלקחים שלמדנו כאן בCS50-- היי, , ברוך הבא לביצוע די הרבה פרויקט גמר של הבחירה שלך. כל זה בגלל יום שני הוא רק פרסומת קצרה באמצעות דואר אלקטרוני לי, משפט מהיר, כמו, היי, אנדי, אני באמת מתעניין בעיצוב משחק שעושה את זה עבור iOS. לְהִתְקַרֵר. רק תן לי ראשוני הקצר שלך רעיונות לפרויקטי הגמר שלך. ונדבר דרך האם או לא שהוא למעשה רעיון טוב או לא, אם זה רעיון אפשרי או לא. אבל רק לפני ההצעה בשל יום שני הבא. pset6, web-- היפה שלנו שהוא בסדר. Pset7? pset6? זה pset6, נכון? pset6, שרת האינטרנט שלנו, נובע יום שישי בצהריים עם האיחור של היום. שעתי עבודה לחדש בדרך כלל מיום השני עד יום חמישי 8:00-11:00 השבוע. אני חושב Commons ל שלושה הלילות הבאים. לְהִתְקַרֵר. לפני שהיו לנו לחומר, עושה כל אחד יש לך שאלות, בדיחות, סיפורים? מה עשה להפסקת סתיו? קהל: מה אני עושה? ANDI פנג: כבר זה גילים לפני למעשה. קריסטבל נסע לניו יורק. אני נשארתי כאן וNetflixed. קהל: הו, כן הייתי כאן. ANDI פנג: אה, בסדר. קהל: אני לא זוכר מה במיוחד. ANDI פנג: זה בסדר. קהל: Netflixing כנראה. ANDI פנג: Netflixing. כן, זה זמן טוב. אוקיי. בסדר. כל שאלות לפני אנחנו קופצים לחומר? כמו כן, אנחנו הולכים לנסות להאיץ באמצעות היום סעיף, לא יותר מדי כדי לכסות. ואני מקווה, יהיה לנו כאן קצת מוקדם. מצטער על שלא ממתקים, גם. אני אכזבה, במיוחד בליל כל הקדושים. בסדר. לְהִתְקַרֵר. אז אנחנו הולכים להתחיל לדבר על טיעון שורת הפקודה נקרא chmod. chmod, כל זה הוא רק מערכת יוניקס קוראים נערך משורת הפקודה כדי לשנות את הרשאות קובץ. כך למשל, יש לנו כל נתקל בדף כמו זה כנראה מתישהו ב תוחלת החיים שלנו להיות באינטרנט למשתמש, שבו שרת האינטרנט שלנו יש נתן לנו את השגיאה של אסור. אין לך הרשאה לגישה, תאדה, תאדה, תאדה, בשרת זה. כל זה באמת אומר הוא שההרשאות שצורפו לכל מה ש דף שאתה מנסה לגשת לא היו פתוח בפניך. אז פחות או יותר, chmod היא הדרך שבה אנחנו יכולים לשנות את הרשאות מערכת אלה לתת לכולם, למשתמש, הקבוצה, או העולם, או כל שילוב של גישה אלה לקבצים מסוימים, ספריות, שום דבר באמת, כל סוג של מערכת ב מערכת הפעלה. אז אם כל בחורים שיש לי מחשבים אם אתה מרגיש כמו הבא יחד איתי היום, לגמרי מרגיש חופשי רק להקליד דברים ב. אם לא, אתה יכול פשוט להסתובב. אז אני הולך למשוך למעשה עד המסוף שלי עכשיו. אז את הפקודה להפעלה chmod, או לפחות רק לרשימת ההרשאות שלך ספריית קבצים, היא רק LS-L. כפי שניתן לראות, חבורה של דברים צץ שרובם חשוב לנו ב צד השמאל כאן. אתם רואים חבורה של RS, WS, / 1. כן. אלה הם בעצם רק כל הרשאות הקבצים להסביר מה ספריות מסוימות וקבצים במערכת שלך יש. אז בואו נחזור ל נקודת הכח כאן. אז בנוסף לשמות קבצים כאתם יכולים לראות מימין, אנחנו מחפשים לראות במהות רק העמודה משמאל. אז בנוסף לרק שמות קבצים, אנחנו יכול לראות את ההרשאות של קבצים, קבוצת בעלים, שם הקבוצה, התאריך שהקובץ היה אחרון שונה, וכולי. אתה יכול לראות הרבה דברים באמצעות chmod. לכן הדרך שאנו קוראים chmod היא ש המכתב הראשון שאנחנו פחות או יותר להתעלם במונחים של הרשאות קריאה. המכתב הראשון רק אומר לנו מה סוג של מערכת שאנחנו ניגשים. ד, במקרה זה, הוא תיקייה או ספרייה. אז אנחנו יודעים שכרגע סביבת העבודה שלי סעיף שבע היה ספרייה. ואז אתה רואה שלושה שלשות, בעצם רק שלושה סטים של שלוש דמויות. ואתה יכול לחשוב על כל כקצת. אז אתה רק צריך שלושה סטים של שלוש חתיכות, תשע חתיכות בסך הכל. אתה מתייחס אליהם בקבוצות של שלוש. אז הקבוצה הראשונה של שלוש היא תמיד הרשאות המשתמש שלך. הקבוצה השנייה שלך של שלוש היא תמיד הרשאות הקבוצה שלך. והקבוצה השלישית שלך של שלוש תמיד כמו בעולם, בכל מקום ההרשאות. אז אני מניח שקל שאלה שצריכה להישאל היא מה היא ההבדל בין משתמש וקבוצה. ההבדל העיקרי בין משתמש וקבוצה הוא שהמשתמש הוא רק באופן אישי גישה מה שזה לא עכשיו. קבוצה יכולה להיות אם יש לך מספר רב של משתמשים במחשב אחד, לדוגמא. כולם יכולים להתייחס אליהם כקבוצה. ואז העולם הוא רק העולם, כולם. כדי שנוכל לראות מאוחר יותר על איך אנחנו יכולים לשנות אותם לתוך הרשאות שונות. אז פחות או יותר, אנחנו הולך עדיין להתמקד בחלק משמאל, שבו לCS50 ספרייה אנו רואים drwx, שבו r רק אומר שזה קריא. W רק אומר שזה ניתנת לכתיבה. ואז x רק אומר שזה הפעלה. היית חושב שזה סוג של לא הגיוני. זה צריך להיות בדואר. אבל x בעצם סוג של עובד קצת יותר טוב, בגלל שאתה זוכר את זה טוב יותר. אז שלושה סוגים של דברים שאתה יכול לעשות, אתה יכול לקרוא קובץ, אתה יכול לקבל הרשאה לכתוב להגיש, או שיש לך יכול רשות לבצע קובץ. ולכן הדרך שאנחנו באמת מייצג אותם בחתיכות הוא המספרים 4, 2, 1 ו. אז כל דבר שהוא קריא הוא מיוצג על ידי מספר 4. דבר זה ניתנת לכתיבה מיוצג על ידי 2. וכל דבר שהוא הפעלה כפי שהוא מיוצג על ידי 1. אז במובן הזה, אנחנו גם יכולים מייצג אחר מספרים אלה היי, בברכה, בצורה שונה. מצטער. לפני כולם, אני הולך מתנצל בשם כולם כניסה לכיתה עכשיו. שכחתי ממתקים היום. אני מצטער שאני כישלון השבוע של ליל כל הקדושים. אני אביא כמות כפולה של סוכריות בפעם הבאה כדי לפצות על זה. אבל בכל מקרה, מצטער על זה בחורים, מצטער. אז הדרך שאנחנו באמת יכולים קלט על הפקודה שלנו הטענה היא ש יכול לעשות הרשאות הנטויים קבוצת chmod, שבו הקבוצה היא רק מה ש קבוצה שאנחנו מנסים לשנות. וההרשאות כל מה שאנחנו רוצים להוסיף לזה. כך למשל, בתוספת מוסיף הרשאות, ולחסר לוקח הרשאות. והסוגים של קבוצה יש לנו שלנו לכל, u עבור משתמשים, גרם לקבוצות, או O לאחרים. זה קצת מופשט עכשיו. אבל אנחנו נלך על כמה דוגמאות רק כדי להדגים מהיר אמיתי זה. כולם טובים בזה שקופיות, כך שאני יכול להמשיך הלאה? לְהִתְקַרֵר. כך למשל, rwx. לפני שנידבר על מה שהיא מייצגת, קודם כל מה rwx אומר? אם אתה רואה שזה בטוח יש קובץ הרשאות של rwx, מה זה אומר אדם יכול להיות מסוגל לעשות? קהל: לקרוא, לכתוב ולבצע. ANDI פנג: כן, בדיוק. אתה יכול לקרוא לכתוב ולבצע. כי כל שלושה מאלה דמויות הן הווה. אז אם אנחנו הולכים קדימה ודיבורים על זה במונחים של ביטים, rwx גם יכול להיות מיוצג כ-700. כי כפי שאתה יכול לראות בכל סוג של רשות ספריית קבצים, יש שלוש שלישיות. במקרה זה, רק ראשון יש שלישייה שם שום דבר. אז במקרה הזה, r הוא 4, w הוא 2, וx הוא 1. אם אתה מוסיף אותם יחד, זה 7. ולכן אם אתה להמיר זה לינארי, זה 700. מכיוון 7 היא השלישייה הראשונה. 0, אין שום דבר בהווה בשלישייה השנייה. ואז אין שום דבר בהווה ב השלישייה השלישית, כך שהתוצאה 0 אחר. אז באותו המובן, חבורה של שלישיות יכול להיות מיוצג רק בחתיכות, רק בינארי, כמו גם. אז 700 פירוש בדיוק את אותו הדבר כמו rwx ------ במונחים של הרשאות. כולם ברור שב? לְהִתְקַרֵר. וכך 111 chmod היו נותנים שהרשאות לקובץ? לתת לכם כמה שניות כדי להמיר את זה. זכור, הראשון שלישייה היא עבור המשתמש. השלישייה השנייה היא עבור הקבוצה. והשלישייה השלישית היא עבור כולם. וכך 111 chmod ייתנו ש סוג של הרשאות ולמי? קח כמה שניות כדי תחשוב על זה ויחזור. כן. קהל: אז כל אחד יכול לבצע את זה. ANDI פנג: כן, בדיוק. קהל: אבל אף אחד לא יכול לקרוא או לכתוב. ANDI פנג: ואל תהסס להסביר לכולם איך הגיע למסקנה ש. קהל: ובכן, עבור המשתמש, קבוצה, ובעולם, זה כל 1, אשר הוא הקוד להפעלה. ANDI פנג: כן, בדיוק. אז 1, במקרה זה, כל מה שאנחנו יודעים הוא שזה קוד ההפעלה. בגלל קריאה היא 4. כתיבה היא 2. וההפעלה היא 1. אז הוא כל שלוש השלשות הן 1, ש משמעות הדבר היא כי לעולם, למשתמש, ולקבוצה, הם כל ההפעלה. כולם טובים בזה? אוקיי. ולכן הדרך השנייה שבעצם אנחנו יכולים לכתוב גם זה אתה רק יכול לעשות chmod x בתוספת. אומר שכולם, כולם או. בתוספת פירושה מתן הרשאות ל. ואז x פירושו הפעלה. אז יש שתי פקודות זהים למעשה. אז אם אתה רוצה לרוץ זה במסוף שלך, אתה עושה chmod 111, שם הספרייה שלך או את הקובץ שלך. או שאתה יכול לעשות chmod x בתוספת, שמו של הקובץ בספרייה שלך. אותו דבר, רק דרך קלה יותר, אולי, לכמה לייצג או שינוי הרשאות קובץ. כל אישור אחד עם chmod לפני שאנחנו עוברים? לְהִתְקַרֵר. אז עכשיו אנחנו הולכים ראש לתוך כמה שקופיות של מושגים מופשטים מאוד כי אני די הרבה הולך רוח באמצעות. וזה בסדר לגמרי אם אתה לא מבין הכל. אפילו עכשיו, אני עדיין לא ממש מבין כל מה שלחלוטין. אבל זה יותר ממקבל ההבנה ברמה העליונה איך חלק מהדברים האלה עובדים. אז אנחנו הולכים לדבר במהירות על TCP / IP, וזה רק בקרת הילוכים פרוטוקול לקצץ פרוטוקול אינטרנט. נזכיר מהרצאה, דוד, שהוא ילמד אותך הדוגמא שבה הוא הייתי עובר ההערות במעטפה עד אוהב את החלק העליון של אולם ההרצאות? אז באולם בית הספר למשפטים דוד הפגין במהות איך TCP / IP עובד ב המובן שכל זה הוא הוא אמצעי להבטחת הנתונים ש נמסר על פני שרת או באינטרנט. אז בדוגמא של המעטפה וההודעה, המשתמש בסוף ניתן היה לראות ש, הו, אני צריך תקבל ארבע מנות של מידע. אבל אני באמת קיבלתי רק שלוש. שאומר שאני חייב להיות חסר אחד. ואחד מהם לא נמסר. וכך TCP / IP באינטרנט, באמצעות המחשב והשרת, עושה בדיוק את אותו הדבר. כל שהיא עושה היא לציין מסגרת שבה נתונים שאבדו ניתן להתרעם מנות וקיבלו. כמו באינטרנט כאשר אתה מנסה כדי לגשת לקבצים באינטרנט או לשלוח קבצים לחבר שלך או מסתכלים על אינטרנט דפדפנים, אלפים ואלפים מיליארדים ומיליארדים בתים מידע מועברים לאלפית שני. וזה באמת, באמת מבלבל. וזה ממש קשה למעשה יודע מה נשלח ומה לא נשלח. וכך TCP / IP רק מציין מסגרת מלוכדת שבו האינטרנט שלך דפדפן והשרת שלך סוג של יכול לתקשר אחד עם השני, רק לוודא שמנות הן כולם כאן ושום דבר לא אבוד ואת כל הנתונים שביקשתם למעשה מוצגות כראוי. כולם אישור על רק שמאוד רמה גבוהה קצרה מבינה? לְהִתְקַרֵר. אז אנחנו הולכים לעבור למדבר על HTTP, ש רק Hypertext Transfer Protocol. HTTP, כל זה הוא מה שכל דף או קבצים הוא גישה באתר שלך, שרת מחזיר HTTP קוד מצב בתגובה לבקשה לוודא ש או, אה, בקשה זו עברה. וכל מה ששלו מוצגות כראוי. או, אה, לא, 404. משהו השתבש. אה, אני לא יכול להציג. כל זה הוא שכל מה ש אתה מנסה לגשת, להשתמש כמשתמש מנסה לגשת, על internet-- רק לוודא כי אתה גם צריך בהצלחה מה שזה לא היה גישה או לא בהצלחה נצפה מה שזה לא היה. וכך מצב HTTP קוד רק מספק לך אמצעי של להיות מסוגל לדעת אם או לא זה היה מוצלח או לא. כך למשל, בקשת דוגמא. אתה יכול לראות כאן זה בדרך כלל בדרך כלל ארבעה קווים. יש לנו HTTP GET 1.1, שהוא רק כתובת אתר בקשת השיטה, הפרוטוקול גרסה, שם השדה, וערך השדה. כך שאין צורך לחלוטין לשנן שום דבר כאן. רק סוג של קראתי את עצמך עם איך האלה נראים. בדוגמא זו, בקשת השיטה כתובת אתר היא רק מה שבקשה אתה שולח את השרת. כמו, היי, שרת, אני באמת רוצה גישה יאדה, תאדה, תאדה, דף HTTP. גרסת הפרוטוקול היא רק מה ש המארח שלך גרסה או השרת שלך הוא משתמש כדי לגשת למידע. שם השדה הוא האתר או כתובת אתר שאתה מנסה לגשת, במקרה זה, www.apple.com. והוא ערך השדה רק בדרך כלל שם, ערך. וזה יכול להיות כל סוג של שילוב של אותיות או מספרים או משהו כזה. אז בקשה טיפוסית, כך מה המחשב שלך למעשה שולח לשרת שאומר, היי, אתה יודע למה אני צריך את זה מוצג, זה הסוג של בקשה שהם מקבלים בפועל. תגובת דוגמא למה ש השרת ישלח בחזרה אליך יהיה פחות או יותר את אותו הדבר, אלא בקוד מצב בחלק העליון. אז 200, 2 0 0 תמיד קוד המצב לאישור. כמו, אישור, בקשה זו עברה. הייתם יכול לגשת ל הכל נכון. החיים טובים. חיים יפים. הכל טוב לגמרי. ואז זה רק אומר לי הדפדפן ו השרת שלך, היי, טוב של הכל. יש לי את כל המידע שאני צריך. לְהִתְקַרֵר. אבל הבעיה היא לפעמים בעיות לבוא כאשר אתה נו-- תימשך אני חושב ש אני דיברתי על כפילויות. יש לך תגובות פחות טובות. כך למשל, 404 הוא הדף לא נמצא. לפעמים יש לך גישה אסורה. יש לך שונים אחרים קודי מצב שאני בטוח שכולכם ראית כשאתה מנסה לעשות מחקר באינטרנט. והדפדפן שלך נותן לך , לא, לא יכול לגשת. ואתה כמו, כן, שטויות. אז פשוט פחות או יותר, יש כמה קודי מצב די נפוצים. אולי קראתי בעצמך עם אילו אלה. הכי מצחיק זה ש אני חושב שאי פעם שמעתי ל-- אם יקרה לך נראה את כולם באינטרנט, מסיבה כלשהי יש למעשה קוד מצב אמיתי נקרא 418 אני קומקום. אני בגוגל בי מקורו של זה היה מ. וכנראה אחד אפריל טיפשים ' יום כמה עשרות שנים לפני, מישהו חשב שזה יהיה מצחיק כדי ליצור קוד מצב חדש בשם 418 אני קומקום. לגיטימי, את שמו של זה קוד נקרא אני קומקום. אני שוכח מה שיש לך דף ל ללכת בעצם לעשות תצוגה זו. אבל כנראה, שאתה באמת יכול להשיג קוד מצב אני קומקום איכשהו דרך לעשות משהו. אז יש מאות ו מאות קודי מצב. חלק מהם לעשות יותר תחושה יותר מאחרים. אבל פחות או יותר רק קראתי את עצמך עם אלה הנפוצים ביותר. גוף הישות המבוקש קצר ועבה, ככל הנראה. אז לפעמים יש יותר שגיאות מפחידות מאני קומקום. אבל זה אחד שאני מניח ש אתה סוג של מקווה להכות. אבל אני לא חושב שאתה לא. כולם טובים רק על מצב קודים, בקשות, תהליכים, קבלת מידע בטוח מועבר כראוי? אז עכשיו אנחנו הולכים למעבר לשל חלק מהנה של סעיף היום, שבו אנחנו מדברים קצת על HTML. HTML, כל זה הוא HyperText שפת סימון. זה רק השפה סטנדרטית אתה משתמש כדי ליצור את כל האינטרנט דפים באינטרנט. אז כל דף אינטרנט, מה דף האינטרנט האהוב עליך? מה דף האינטרנט האהוב עליך? קהל: [לא ברור]. ANDI פנג: מצטער? קהל: Tumblr. ANDI פנג: Tumblr. אז Tumblr כתוב ב- HTML. ואז אנחנו בעצם לעבור ו לשחק עם כמה מהדברים האלה מאוחר יותר. פחות או יותר כל מה שאתה צריך ללמוד, לדעת, לכתוב HTML אתה יכול כנראה רק גוגל באינטרנט. HTML, זה לא תכנית כמו C שבו אתה יכול ליצור משתנים ולעשות דברים מגניבים עם זה. זה יותר פשוט, אה, זה איך אני רוצה שדברים מופיעים באתר האינטרנט שלי. ואני רק הולך לשים את זה ב. וזה הולך לעצב אותו. אז HTML, במובן מסוים, זה בדיוק כמו שפת עיצוב או תבנית. זה הרבה יותר קל. זה הרבה יותר קל ללמוד, הרבה יותר קל לכתוב ב מ תכנות הטיפוסי שלך שפה, קלה מאוד, מאוד ידידותי לנגיש וידידותי. אז אנחנו למעשה הולכים לשחק מסביב, לכתוב הדפים שלנו היום. אבל לפני שנתחיל, אני רק רוצה לעבור על כמה שיטות עבודה מומלצות קצרה. בגלל HTML הוא כזה קל שפה וכי גם אם אתה עושה כמה דברים לא נכונים, לפעמים זה עלול שלא להבחין, אנחנו רוצים לוודא שאנחנו למעשה הקפדה על שיטות העבודה מומלצת שלנו כדי לוודא שדברים ש יכול להיות הולך מסביב אבל לא תמיד הולכים לא ללכת ימינה לוודא שהם ממוזערים. אז פחות או יותר, לוודא כל התגים שלך הסגירה שלך כאשר אתה כותב ב- HTML. אם אתה פותח גוף, לוודא שאתה סגירתו עם גוף במקום. אתה רוצה לוודא ש דף האינטרנט מאמת באמצעות מה שנקרא Validator W3. אתה יכול רק גוגל כי מקוון, ויש קישור אליו. ואז אתה רוצה HTML הנפרד, ש היא שפת הסימון שלך מהסגנון שלך, שהיא השפה CSS שדוד הוכיח שאנחנו גם הולך לשחק קצת עם הרצאה. לְהִתְקַרֵר. אז כל פעם שאתה רוצה לרוץ HTML על מכשיר CS50, אנחנו הולכים לרוץ תכנית בשם אפאצ'י, שכל זה הוא רק נבנה ב שרת אינטרנט שכולם בCS50 יש לו גישה ל. אנחנו קוראים לזה apache50 רק בגלל שאנחנו רוצה לקרוא את כל מה -50 בCS50. לכן הדרך שאתה מתחיל באינטרנט CS50 שרת הוא על ידי הקלדה על הפקודה שלך קו apache50 להתחיל נקודה. ואם אתה רוצה לסיים אותו בכל זמן, אתה בסופו של apache50 לא נקודה. ואתה פשוט לחץ על Enter. ואת זה צריך להיות כותרת כאן בקרוב. כן. אז רק אני הולך לעבור במהירות על דוגמא לדף אינטרנט באמת קצר. ואנחנו הולכים לבלות כמו 10, 15 דקות משחק סביב כתיבת דפי האינטרנט שלנו. אוקיי. אז הנה בIDE-- יכול כולם רואים את זה? לא באמת. הנה, אני להתקרב. רק שיש לי תבנית קצרה כאן עם שום דבר לא באמת בזה. אנחנו רק הולכים לכתוב במהירות תכנית HTML שבו אנחנו פשוט להגיד שלום לעולם. אז אותו דבר כמו ב- C, עכשיו אנחנו רק הולך לעשות את זה ב- HTML. האם מישהו רוצה בעצם רק נסה לתת לי את הדבר הראשון שאתה היה צריך לשים במסמך HTML? כן. קהל: בסוגריים, [לא ברור]. ANDI פנג: כן. אז משהו שהוא מאוד ייחודי ל HTML שאנחנו בדרך כלל באופן מסורתי לא נתקל בפקודה אחרת שפות תכנות ברמת הקו הוא שאנחנו באמת ל לציין את סוג הקובץ שזה הולך להיות בחלק העליון של הקוד שלנו. אז בinstance-- זה אני חושב ש זה הפקודה הנכונה, נכון? כן. בחלק העליון, אתה רק רוצה לכלול html DOCTYPE מפץ בסוגריים רק לספר המחשב, היי, תיזהר. ומסמך ה- HTML הוא בא. ואז איך אנחנו רוצים כדי להתחיל הקובץ שלנו? אם אנחנו רק רוצים להגיד שלום, יש לי דף האינטרנט שאומר שלום לעולם, איך אנחנו הולכים על בנייה זו? למעשה, בואו נפנה לגוגל. ואנחנו באמת יכולים לעשות את זה. כן. הנה. אז HTML. כפי שניתן לראות, הדפדפן שלי הוא למעשה באופן אוטומטי סטיילינג זה בשבילי. אותו דבר כמו ב- C, כאשר אתה ליצור סד מתולתל פתוח, הדפדפן שלך באופן אוטומטי מוסיף בסד מתולתל קרוב. למזלנו, IDE שלנו אוהב גם לעשות את זה בשבילנו. אז עכשיו אנחנו יכולים סוג של הזן תחילתו של תג, וזה הולך תמיד לומר לנו ל זוכר להקליד את סוף התג. אני חושב שזה צריך להיות מהוון. ולאחר מכן אנחנו רוצים להוסיף, תמיד, ראש שבהוא הכותרת. אנחנו רק רוצים אולי לקרוא שלום זה, ולאחר מכן גוף. והנה לך. שהוא למעשה מסמך ה- HTML שלנו. לכן הדרך שכל מסמך HTML תמיד מנוסח in-- אותו דבר עם החלל מרכזי int. אתה תמיד רוצה שיהיה לי HTML תג פתיחה וסגירה בחלק העליון והתחתון של הקוד שלך. אתה רוצה להיות ראש בתוך המכיל את הכותרת, רק מה ש הוא הולך להציג את הכרטיסייה שלך באינטרנט דף, ולאחר מכן גוף בתוכה יהיה למעשה להציג את התוכן של מה שאתה רוצה לעשות. אז אם אתה רוצה לרוץ למעשה זה, אני הולך להתמקד בחזרה החוצה. למעשה אתה יכול להתחיל apache50 להתחיל נקודה. לְהִתְקַרֵר. ואז כפי שאתם יכולים לראות, עכשיו קישור זה צץ. זה אומר שהאתר שלך עכשיו זמין בכמה קישור הבא. אז כולנו יש IDE done-- לא IDE, sorry-- כן, IDE שלנו עשה הוא ליצור אינטרנט קישור שעליו כל דפי האינטרנט שלנו ניתן לגשת בשרת. אז בואו נסתכל כאן. בואו ללחוץ על זה, ללכת לhello.html. ואתה רואה פשוט מאוד דף האינטרנט לעולם שלום. אוקיי. אנחנו בעצם הולכים רק יש לי everyone-- כן, מה קורה? קהל: יש לי שאלה בסיסית. ANDI פנג: כן. קהל: איך אתה לחסוך הקובץ שלך כHTML? ANDI פנג: כן. אז אם אני היה ליצור קובץ חדש, אם אני עושה את הקובץ חדש, Untittle, אם אני עושה, section.html, בום, זה כל מה שאני צריך לעשות. קהל: [לא ברור]? ANDI פנג: מס ' קהל: [לא ברור]. ANDI פנג: מס ' קהל: [לא ברור]. ANDI פנג: כן. פחות או יותר, הארכה על הקובץ שנמצא בתוך ה- IDE שלך, המספר את המחשב, ש אומר לדפדפן, היי, ייזהר. זה הולך להיות קוד נכתב בשפה זו. כך למשל, במיקרוסופט מילה, מה שעושה את כל מסמכי Word בסופו של עם, מה סיומת? .doc או .docx, נכון? כל מה שעושה הוא מציין ל מערכת הפעלה שלך, היי, יש לך מסמך Word מתקרב. לפתוח אותו עם Word. אותו דבר עם קבצי PDF. הוא יודע, הו, אני צריך כדי לפתוח את הקובץ הזה עם Adobe Reader או Adobe Acrobat. וכך פועלות הרחבות אותו אופן כמו במחשב שלך. אם תציין בדף הקוד שלך להיות שם HTML, אז הוא יודע, אה, יש לך קוד HTML. אני הולך להתייחס אליו כקוד ה- HTML. אז זה סופר חכם במובן זה. אז כולם, בואו ניקח כמו 10 דקות ורק ליצור אתרי האינטרנט שלנו. בואו נוסיף בדברים היפים. תרגיש חופשי להגיד מה שאתה רוצה. אני רק רוצה לוודא ש השרתים של כולם פועלים בצורה נכונה לפני שנשחרר אותך לpset. כי אם השרתים שלך לא לרוץ לpset, שיהיה באמת, באמת רע. אני רק הולך לרחף ו לראות מה שכולם עובד על. איך הולך? קהל: אני רק הדלקתי את המחשב שלי. ANDI פנג: זה בסדר. קהל: [לא ברור]. ANDI פנג: רק IDE שלך. כן. קהל: [לא ברור]. ANDI פנג: זה בסדר. קהל: [לא ברור]. ANDI פנג: לגמרי בסדר. האם כולם גישה אישור השרת שלהם באינטרנט? האם apache50 פועל בסדר? אני חושב שבחלק הסעיפים האחרים, אנחנו היו בעיות עם אנשים לא להיות מסוגלת לגשת לשרת. כן. אז אתה פשוט להפעיל apache50 החלל להתחיל תקופה החלל. קהל: [לא ברור]. ANDI פנג: כן. טוֹב? קהל: [לא ברור]. ANDI פנג: אה, בסדר. אז אתה אמור להיות בחלל. אז apache50-- קהל: אני עשיתי. ANDI פנג: חלל --start. קהל: הו, נקודה בחלל. ANDI פנג: כן, נקודה בחלל. הנה לך. אז אם יש לך דף HTML שנוצר, אז אתה יכול פשוט ללכת ישירות לקישור שהוא מציין. ואתה אמור להיות מסוגל לגשת אליו. כולם היה מסוגלים גישה לדפי האינטרנט שלהם בסדר? קהל: [לא ברור]. ANDI פנג: אה, זה בסדר. קהל: [לא ברור]. ANDI פנג: כן. אני חושב שאתה ממש יכול לפתוח זה בתוך הדפדפן, הדפדפן שלך ולא רק דפדפן IDE שלך. כן, אני חושב שאם אתה מעתיק ומדביק אותו. קהל: ואז איך אנחנו לכבות אותו? [לא ברור] ANDI פנג: כן, אתה עושה apache50 לעצור ללא התקופה. כן. קהל: [לא ברור]. ANDI פנג: ללא התקופה. כן. הנה. כן. אנחנו יוצרים את דפי האינטרנט שלנו. קהל: הו, מגניב. ANDI פנג: כן. קהל: יש לי שאלה. אז אפאצ'י 50-- ANDI פנג: 50, כן. קהל: [לא ברור]. ANDI פנג: מה? זה מוזר. ראה, שהיה סוג של הבעיה שקורה לפני. אוקיי. לראות אותי אחרי הסעיף. בגלל שיש לנו כמה בעיות עם השרת. ואתה רוצה לעשות בטוח שהשרת שלך הוא לפני שמתחיל לרוץ pset. בגלל שאתה הולך צריך את זה. כן. האם יש עוד מישהו שלא היה תוכל לקבל השרת שלהם להתחיל? לאלו מכם שרוצים להוסיף סגנון נוסף לדפי האינטרנט שלך, אנחנו באמת יכולים לעשות מה ש גם דוד עשה בהרצאה, אשר הוא ליצור סגנון נוסף גיליון, שהוא נקודה CSS, מדורג גיליון סגנון ולמעשה רק להוסיף אותו ב. כך למשל, אני פשוט יצרתי פחות או יותר כמעט באותם אחד דוד עשה בהרצאה. אתה יכול פחות או יותר פשוט לעשות את הגוף. יש לך מה שנקרא תגים שב ניתן להחיל על IDE מה קטע אתה רוצה בתוכך בפועל לדף HTML. אז הגוף של הדף, אתה יכול לעשות ליישר למרכז טקסט. ואז אני יצירתי עליון תג נקרא בתוך שאני רוצה את הדברים האלה ל יקרה, להקצות גודל פיקסל גדול יותר לגופן. אני רוצה את משקל הגופן להיות נועז. ואני רוצה את הצבע ל להיות כחול, רק שרירותי ערכים שהחלטתי לבחור. אני יכול ליצור תג נוסף הנקרא אמצע. גודל גופן, לעשות את זה קצת יותר קטן. ואז אני יכול ליצור תג אחר תחתון בשם שבו אני רוצה את גודל הגופן להיות קטן עוד יותר עדיין. וכך פחות או יותר זה הוא רק דוגמא גיליונות סגנון קוד המקור או מקור כי זה מאוד קל רק גוגל. אם אתה אומר, אה, אני רוצה הגופן שלי להיות מודגש וירוק כהה, כנראה שאתה יכול גוגל, ואז הוא יגיד לך התגים או תעודות זהות המתאימים ליצירה. ולכן הדרך שאתה בעצם היית סוג של יש לי זה במסמך HTML או להשתמש בו הוא כל מה שיש לך לעשות כאן הוא בראש להוסיף קישור לגיליון הסגנונות. אז אתה יכול פשוט לקשר שווים href מה שמו של גיליון הסגנון שלך הוא. ולאחר מכן את מערכת היחסים הוא גיליון סגנונות. אז בתוך כל מסמך HTML, כל עוד כפי שאתה כולל גיליון CSS נקודה זו, אתה צריך להיות מסוגל לגשת ל ויש לי הנכסים שם. כך למשל, כאן יש לי רק ליצור דף אינטרנט אחר דוגמא. זה מוזמן סעיף CS50 ימי שלישי 2:00-03:30 איתי. ואז אני הוספתי תמונה יפה ש אנו עלולים להיות אמורים להיות מסוגלים לראות. אז אם אתה תסתכל כאן, אם אתה הולך לstyle.html, יצרנו דף אינטרנט עם גורים. בגלל החתלתול הם מדהים. אז הוספת תמונה רק img קישור SRC. די הרבה, אם יש כל סוג של תכונה ברצונך להוסיף לך website-- כך נניח, ברצונך להוסיף תפריט או סרגל חיפוש או כמו image-- רק גוגל איך לעשות את זה. ואתה רק פלופ בפורמט זה. רק ואתה יכול די הרבה רק להוסיף אותו ב. זה ממש, ממש קל. אנחנו יוצרים דפי אינטרנט עכשיו. אם אתה רוצה-- קהל: [לא ברור] ANDI פנג: מצטער? קהל: [לא ברור]. ANDI פנג: אה, div הוא רק החלוקה אומר ש, הו, יש לי אותי סעיף מסוים נקרא אמצע שבו אני מיישם התג שלי CSS, ולאחר מכן חלוקה אחרת שלי עם התחתית. זה כל מה שזה אומר לך. כי זה נחמד לשמור דברים מסודרים לפי סדר, כך התכנית יודעת בדיוק לרוץ. וחושב שאני יכול להעתיק ולהדביק את זה בדפדפן שלי בפועל גם כן. זה אמור להיות בסדר. כן. יש. אז אם כולם רוצים רק נסה ליצור דף אינטרנט, ניקח עוד שניים עד שלוש דקות. אני רק רוצה לוודא השרתים של כולם פועלים וכל אחד יש רעיון של איך לעשות את זה. אם אתם רוצים להוציא את המחשבים שלך. עדיין לא עובד? קהל: אני רק [לא ברור]. ANDI פנג: אולי תנסה לעדכן את 50 גם כן. כן. קהל: [לא ברור]. ANDI פנג: כן. לכן הדרך שאתה מתחיל חדש שרת האינטרנט בIDE הוא פשוט לעשות apache50 נקודת התחלת מרחב החלל. אני רק רציתי לוודא ש השרתים של כולם פועלים על אישור. קהל: כאן, במסוף? ANDI פנג: כן. קהל: [לא ברור]. ANDI פנג: אפאצ'י. למעשה, אני חושב שאתה ריצת משהו כבר. כן, אתה בעצם פועל שרת אחר. כן, אתה טוב. כל עוד זה עובד, אתה בסדר. קהל: אישור. ANDI פנג: יש שני דרכים להפעלת שרתים. אז כל עוד אחת מהדרכים עובד, שזה בסדר. אנחנו ניקח עוד דקה רק כדי לסיים את סוג של הגימור של כל מה ש דף האינטרנט שאתם רוצים לעשות. האם כולם עובדים דרך אגב? השרתים של כולם פועל מלבד לך? אנחנו להבין את זה. ו- HTML של פשוט למדי. אז אני חושב שכולנו טוב. כן. אני אחזור. קהל: [לא ברור]. ANDI פנג: אישור. קהל: אז זה רק התחיל להעמיס. ANDI פנג: אין בעיה. אז HTML, יש קוד מקור ש יהיה מקוון לאחר סעיף. כמו כן, יש דוד שלם חבורת האינטרנט, כמו גם. רק סוג של מבט על זה ל לראות איך דפי HTML נכתבים. זה קל למדי. כל דבר שאתה לא יודע, אתה די הרבה רק גוגל ואתה טוב. אני רק רוצה לוודא ש השרתים שלך פועלים. קהל: האם זה עושה את זה לעתים קרובות? ANDI פנג: זה אף פעם לא קרה לי. אני לא ידעתי שזה יכול אפילו שינה. קהל: [לא ברור]. ANDI פנג: אני חושב everyone-- שלי מעולם לא hibernated לפני. ואני לא יודע למה. זה מוזר. קהל: [לא ברור]. ANDI פנג: האם שנת החורף? קהל: [לא ברור]. ANDI פנג: כן. קהל: זה בסדר. אז ברגע שהוא פתוח. ANDI פנג: אישור. אנחנו נתמודד עם כמה שרת בעיות לאחר סעיף. אתה אמור להיות בסדר. אמנם, אתה רוצה לוודא שאתה תפתור אותם לפני שאתה עוזב. כי אם של השרת שלך לא פועל, אז אתה לא הולך להיות מסוגל לעשות pset, כמו כל חלק של pset. אז אתה רוצה לוודא שזה עובד. לְהִתְקַרֵר. בסדר. אומר גורי שלום. ביליתי זמן רב מחפשים כי תמונת החתלתול לשים על. אז, בכל מקרה. קהל: [לא ברור]. ANDI פנג: מצטער? קהל: [לא ברור]. ANDI פנג: אני חושב שזה באתר. כמו המפרט? קהל: [לא ברור]. אני חושב שהמפרט הוא רק באינטרנט בשבוע שבעה. אני חושב שזה נקרא pset6, אפילו למרות שאנחנו בשבוע, שבעה ש הוא מחשוב קצת. קהל: אבל אני מתכוון אם אתה רוצה להיראות at-- אם אתה רוצה למשוך את הגרסה שלנו אתר האינטרנט מהסבר שלנו? אז כמו server.c הוא pset, נכון? אם אתה רוצה להסתכל על זה, כמו איך הוא בודק את? ANDI פנג: הו, אז בעצם pset, כל מה שאנחנו עושים כאן implementing-- כאן, אני אלך על זה לרגע. אז לכולם שפשוט קיבל לסעיף, אתם נמצאים במזל. יש חומר מעט מאוד כדי לכסות בעצם היום. אני רק הולך לבלות הבא 20 דקות הולכים על העזרה pset. כי יש כמה שימושי פונקציות שיעזרו לי החיים שלך. ואני מקווה, נהיה מחוץ מכאן בכמו 20 דקות. אוקיי. אז pset7 לא בסדר. למרות שאנחנו בשבוע שבע, זה pset6 למעשה. אני אשנה את זה. כל מה שאנחנו עושים בpset6 יוצר שרת אינטרנט. זה נשמע סופר מפחיד. ובמיוחד עבור אלה מכם שיש לי כבר הסתכל על קוד ההפצה, יש הרבה קוד, הרבה קוד. אבל זה בסדר לגמרי. בגלל המתוסבכים חלק מיצירה למעשה השרת נעשה על ידינו. כל מה שאתה באמת שאלת לעשות בpset זה הוא רק כדי לעשות קצת מניפולציה מחרוזת בקובץ I / O. זה בעצם כמו פשוט למדי. לכן, כאשר אתה מוריד ראשון לראות-- ש כאן למעשה כבר הורד pset ולקחת מבט? בסדר. כן. אין כמו 500 שורות קוד כי אתה הולך להיות כמו, מה הולך? וזה לגמרי בסדר. ודא שאתה צופה בהליכה על המודעות. בגלל דוד and-- אני לא יודע. אני לא חושב שזה Zamyla של, זה אחד. אבל אני חושב שכמה אחר ללכת על המודעות למדי מועיל במונחים של רק מאפשר לך לדעת מה קורה בתוך הקוד שלך. וזה בסדר לגמרי. בגלל הפונקציות ארבע שאתה ביקשתי ליישם למעשה יש אפס לעשות עם השרת בפועל. כל מה שהם צריכים לעשות הוא פשוט ניתוח מחרוזות שונות, חיפוש דרך מיתרים, כדי לעשות דברים בטוחים עושים מה הם אמורים לעשות. אז להשפעה ש, יש כמה פונקציות מאוד, מאוד שימושיות, במיוחד עבור מחרוזת מניפולציה, שכולנו צריכים הולכים על זה חשבתי שאולי להיות מאוד שימושי עבורכם ללמוד לפני שתנסה pset. וכולם כלולים בתוך ספריית string.h. יש כנראה יותר שימושי פונקציות שאינו כלולות כאן, כי אני גם לא להשתמש בם או אולי אני פשוט לא יודע שהם קיימים. אתה מוזמן להציץ דרך student.h. כי יש הולך להיות הרבה של פונקציות שהם מאוד שימושיים. אז שש שאני משתמש ביותר בי pset כאשר אני עושה את זה בשבוע האחרון היה strtok, strchr, strrcher, strstr, strcasecmp, וstrcpy. וכך שני האחרונים אולי נראים די מוכר לרובכם. מקרה Str להשוות, כל שהיא עושה הוא להשוות מחרוזות כדי לבדוק אותם לשוויון, כולל מקרה. וstrcpy רק עותקים מחרוזת אחת לחיץ. וכך שני אלה צריכים להיראות מאוד מוכר לכם בשלב זה. מפני שהשתמשנו בהם הרבה, במיוחד עבור psets האחרון. אבל ארבעה הראשונים אולי שלא ראה עד עכשיו. אבל אני הולך רק כדי לעבור אותם. בגלל שהם הולכים להפוך את חייך באמת, באמת קל for-- לא קל, אבל הרבה יותר קל לpset הקרוב. אוקיי. אז char * strtok, זה הפונקציה הגדרה לפונקציה זו כלולה בתוך המחרוזת, ספריית שעות. אם אתם מקבלים קלט של char * מחרוזת, הנמצאת במרחק מחרוזת, או char קבוע * deliminator, סימן מפריד בקיצור, כל זה עושה הוא שבירה גדול יותר מחרוזת לסדרה של מה שאנו מכנים אסימונים מופרדים על ידי ערך מסוים. אז במובן מסוים, אם הייתי נותן לי אתה section.7.php, זה הוא מחרוזת. אז זה יהיה אם הייתי עובר כבstr זו, str * char שלי, אם deliminator היה נקודה, כל זה היה לעשות הוא לחפש דרך מחרוזת. והפעם הראשונה שהוא רואה נקודה, זה יחזור רק למצביע לאסימון האחרון מצא במחרוזת לפני זה. אז זה הייתי הולך ממש כאן. וזה ייתן לי רק 7.php. ואם הייתי קורא לתפקד עוד פעם אחת, זה ייתן לי רק .php. וכך כל פונקציה זו עושה הוא פירוק המחרוזת הגדולה יותר למחרוזות קטנות יותר בהתאם על מה שאתה מחפש. וכך לדוגמא, ב הפונקציה חפש אם אתה רוצה להסתכל על מה ש תווים מסוימים באים על או אם נקודות לקרות או הרחבות לקרות, פונקציה זו תהיה שימושית למדי. כן. אין דאגות. זה כל להיות-- כן, מה קורה? קהל: אז בשורה הראשונה, אם היינו משתמשים בדוגמה זו, מה היינו להכניס לתוך זה? ANDI פנג: כן. אתה הייתי קורא רק סימן מפריד פסיק מחרוזת strtok. ומחרוזת שווה לsection.7.php. ואז אתה סימן מפריד יכול להיות שווה רק כדי נקודה. קהל: אישור. ANDI פנג: כן. בדיוק כך. כל הפונקציות האלה הן די דומה כאשר אנו עוברים אותם. הם פשוט עושים דברים מעט שונים. אבל הם כולם הולכים להפוך את החיים שלך הרבה יותר קלים. פונקציה שנייה, אחד של זה כמו סופר, סופר, סופר חשוב, הוא כל-- להחזיק. אופס. חיפושי Strchr לראשון occurrence-- למעשה, כן. Strchr היא הפונקציה ש בהחלט רק הלכתי. אז להתעלם ממה שאמרתי לפונקציה הראשונה. זה בעצם נקרא strchr. אז מה היה קורה כאן הוא אם ניתנו לך מחרוזת בג char, זה ייתן רק אתה כל מה שהיה. כן. אז תחשוב על זה כעל str, ש הוא מחרוזת, וChr כchar. אז כל מה שאתה מנסה לעשות הוא חיפוש לשם char הוא בתוך מחרוזת. ואז זה מחפש הראשון מופע של האופי ג בstr המחרוזת. קהל: [לא ברור]. ANDI פנג: כן. ואז אם זה לא מוצא זה, זה הולך לחזור NULL. אז משהו שהולך להיות מאוד שימושי עבורכם בעושה pset אם, לומר, שחיפשת סיומת כמו .docx לWord מסמך או .pdf למסמך PDF, סוג של אתה יכול להשתמש בו כדי להסתכל לכל מה שלאחר מכן בכל פעם שאתה רואה נקודה, נכון? וכך פחות או יותר, אם אתה לרוץ כי באמצעות הפונקציה, אם הוא חוזר NULL, אז אתה יודע שזה לא מוצא את זה נקודה, מה שאומר שזה ברור שאין סיומת קובץ חוקית. או אם הוא חוזר משהו, אז אתה יודע זה הולך לחזור כל מה של למעשה לאחר ההארכה. אז אלו מכם שהיו לי התחיל לחפש דרך בדיקה ולנתח, פונקציה זו של הולך להיות סופר שימושי. אז אנחנו למעשה הולכים כדי להדגים באמצעות זה. למה שלא ינסו לכתוב בחורים char משפט בול פונקציה * ים ש רק מחזיר אמת אם s הוא משפט ושקר אחר. אז לרמוז, אתה הולך כנראה להשתמש strchr. או שאתה פשוט לחפש ב מחרוזת לאופי מסוים. וכך במשפט, מה שמפריד בין משפט מאינו משפט, מה אופי ספציפי? קהל: חלל. ANDI פנג: חלל, נכון? ואז מה שאנחנו כנראה הולכים רוצה לעשות בתוך פונקציה זו כאן? קהל: [לא ברור]. ANDI פנג: אנחנו הולכים לרוצים strchr מחרוזת להופעתו של החלל. כי אם הוא חוזר משהו, אז אנחנו יודעים שזה חייב להיות משפט. זה אומר שאנחנו חייבים יש מקום במחרוזת זו. אם אין חלל, אז אנחנו יודעים כי, היי, מניח שזה לא מחרוזת. זה כנראה רק מילה באמת ארוכה. אז אני אתן לכם כמה דקות כדי לכתוב פונקציה זו. כן. קהל: האם אתה מקבל מחרוזת זו מהמשתמש? ANDI פנג: כן. אז זה רק פונקציה. אז לדמיין בתוך הפונקציה העיקרית שלך אתה כבר נו-- בוא נלך כאן. אוקיי. אז אני כתבתי תכנית שבה זה יש לי הפונקציה שבו העיקרית שלי רק יצרתי שתי מחרוזות. הראשון הוא היי, השם שלי הוא Andi-- ברור, משפט. השנייה אחת שלי הוא פשוט אנדי, ברור שלא לגזור. ואז אני רץ שני אלה מחרוזות באמצעות פונקציה זו. אני רוצה שבחורים לכתוב משפט קר. ואני אחסון ערכים אלה, ואז פשוט להדפיס אותם. אז תחשוב שהמשתמש הוא הולך לעבור במחרוזת. ואז אתה הולך למהות להבין אם זה משפט או לא ולחזור אמת או שקר בהתאם. אם אתם רוצים לתת ל אגודלים כלפי מעלה או ראש בראש, הנהון ראש, מישהו מוכן להתחיל זה, זה יהיה טוב. אולי כמו 30 שניות יותר? בסדר. בואו תראו אם אתה יכול לנסות כתיבת פונקציה זו. אז פסאודו coding-- אני רק הולך ל סוג של ללכת דרך את זה עכשיו. די הרבה, אנחנו יודעים פונקציה שאנחנו צריכים להשתמש. אנחנו הולכים לקרוא לפונקציה שעל המחרוזת שלנו וחיפוש אחר מקום. אם הוא חוזר משהו, אז אנחנו חייבים יודע את זה, באופן ברור, זה משפט. כי יש חללים. אז אנחנו הולכים לחזור אמיתיים. אחר, אנחנו הולכים לחזור שווא. האם מישהו רוצה לתת לי שלי בשורה הראשונה של קוד שאנחנו בעצם הולכים להשתמש כדי לכתוב את זה? זה בעצם הכי קשה כמו גם שורת קוד. כן. קהל: אם strtok s-- ANDI פנג: רק strchr. קהל: [חציצת קולות] החלל הוא לא שווה ל null. ANDI פנג: מגניב. בדיוק נכון. כולם מבינים ששורה ראשונה? אנחנו הולכים לקרוא strstr, שהיא פונקציה שמחפשת מחרוזת של לתווים של החלל. ואם הוא מוצא אותו, זה הולך לחזור מצביע למקום שבי שהוא. אם זה לא מוצא אותו, זה הולך לחזור NULL. אז אם הוא חוזר שום דבר אחר מאשר NULL, אז אנחנו יודעים שזה מצא מרחב. האם זה הגיוני? לְהִתְקַרֵר. בסדר. אז אם אנחנו יודעים שזה מצא חלל, מה שאנחנו רוצים לעשות? קהל: חזור אמיתי. ANDI פנג: כן. חזור אמיתי. ולאחר מכן, מישהו רוצה לסיים את התפקיד בשבילי? כן. אחר, כמו שרק. ולנסות להרכיב את זה. כן. אז כפי שאתם יכולים לראות מ פלטים, זוכרים Booleans בC תמיד באו לידי ביטוי בינארי. 1 הוא נכון. 0 הוא שקר. אם היינו להפעיל את זה פונקציה על מיתר אחד, ש הוא הי, של שמי Andi-- ברור, התוצאה sentence-- הדפיס עד 1 מה שנכון. השנייה אחת, שהוא רק מילה, תוצאה הדפיסה 0, שהוא מזויף. סוג ברור לכולם של על איך פונקציה זו נכתבה? כן. קהל: האם אנחנו יכולים גם לעשות, במקום לא שווה שום, שווה שווה 0, כך שזה שווה ל? ANDI פנג: מס ' בגלל strchr היא פונקציה. אני הולך לחזור על זה. אז מה סוג התמורה של פונקצית strchr? קהל: אה, בסדר. או NULL. ANDI פנג: כן. זה char * שאומר לי שכל מה ש פונקציה זו הולכת לחזור, זה הולך להיות מצביע. כך או המצביע הולך להיות מצביע למקום שבו מצא אותו, או שזה הולך לחזור מצביע null. בכל נסיבות, זה הולך לחזור מצביע למשהו. ולכן אם היית להשוות זה שווה, שווה, 0, אתה הולך לקבל שגיאת הידור. בגלל שזה הולך לחזור מצביע. ואתה הולך לנסות להשוות מצביע למספר שלם. והמחשב לא הולך רוצה את זה. כן, בדיוק. לְהִתְקַרֵר. כולם טובים? ושנית, אנחנו הולכים ללכת על strstr פונקציה שנקראת. אל דאגה, אם אלה פונקציות מבלבלים אותך. הם מבלבלים אותי. ככזה, אתם יכולים לראות, כולם נשמעים די דומה. רק בכל פעם שאתה מבולבל, למשוך את ספריית string.h. ואתם יכולים למיין שדרכו של אשר. אז strstr, כל מה שעושה הוא חיפושים מחרוזת למחרוזת אחרת לגמרי. אז איפה בדיוק strchr חיפושים לתו בודד, חיפושי strstr לכל מחרוזת. אז אני רוצה להיראות ב, אני לא יודע, היי, השם שלי הוא אנדי. ושמו של החבר הכי טוב שלי הוא גם אנדי. אם אני רוצה לחפש בזה משפט לכל המילה של אנדי, המחט שלי הייתה כל מה שאתה מחפש. וערימת השחת שלך היא כל מה ש אתה מחפש אותו ב. אז אם אתה מחפש מילה ספציפית בתוך משפט, המילה שהולכת להיות המחט שלך. ולאחר מכן את המשפט עצמו הולך להיות ערימת שחת שלך. ואז זה פשוט מחפש המופע הראשון של מחט המחרוזת בערימת שחת המחרוזת. זה מחזיר את המצביע למופע הראשון. מלבד, זוכר במקרה זה, זה המופע הראשון של כל המחרוזת שאתה מחפש ל, לא רק אופי. ואז זה כמעט אותו דבר כמו הפונקציה רק שעשינו, רק עם קצת יותר ספציפי. מכיוון שאתה מחפש יותר מאשר רק דמות אחת. והשימוש הוא אותו הדבר כאחד שעשינו כרגע. כולם בסדר עם זה? אוקיי. אחרון שאנחנו הולכים על strrchr הוא, שהוא לא מבולבל עם strstr או עם strchr. יש strrchr r נוסף שם. היזהר כאשר אתה מקליד. אתה עלול למצוא את עצמך כולל r נוסף או לא כולל r, ואז הפונקציה שלך הוא קיבל לא הולך לעבוד. ואתה הולך להיות מבולבל. היזהר שאתה איות כל הפונקציות האלה נכונה. אז strrchr הוא מדויק אותו דבר כמו strchr חוץ מזה שמחפש לא הראשון מופע של דמות מסוימת, אלא המופע האחרון. וכך, במובן זה, זה כמעט אותו הדבר. אבל במקום להעביר להעביר במחרוזת, אתה הולך להיות מרגש אחורה במחרוזת. אותו דבר בדיוק, אתה פשוט חיפוש בצו שונה. ואז זה יכול להיות סופר, סופר שימושי לבדיקה שלך פונקציה, הראשונה פונקציה על pset. בואו נעמיד פנים שאנחנו צריכים לכתוב פונקציה של הארכת החלל שבו אנו עובר שם קובץ char * קבוע, רק מחרוזת, שם קובץ, שלוקח שבשם והדפסים את הסיומת של קובץ ש. כך למשל, אם הייתי לעבור במחרוזת של pset7.zip, זה הולך להדפיס רק הסיומת, אשר היא ה- zip. וזה יעבוד ל כל סוג של הרחבה, .docx עבור Word או .pdf ל- PDF להגיש או html לקובץ HTML. די הרבה, לכתוב פונקציה שיכול לעשות את זה. בעצם אני הולך ל לעבור לIDE. זה לא load-- שם אנחנו הולכים. אז כל מה שעשיתי כאן הוא נוצר char *, מחרוזת ראשונה, נקרא pset7.zip. אני הולך להתמקד ב. יצרתי מחרוזת שנייה נקרא finalpaper.docx. ולכתוב לי פונקציה שכאשר נקרא הולך רק כדי להדפיס את הסיומות של שמות קבצים. אולי לקחת כמה דקות לחשוב על איך אתה הולך לעשות את זה. מעט יותר מאתגר יותר מקודם, אבל השימוש הוא כמעט בדיוק אותו הדבר. כן. אז לכתוב הארכת פונקציה שנקראת כי, אם אני נותן לך את השם של קובץ, אם הייתי נותן לך pset7.zip-- אני רוצה שלהדפיס רק zip. אם אני נותן לך אוהב finalpaper.docx, רק להדפיס את .docx, רק הרחבה של מה שקובץ. זה בעצם רק לוקח שתי שורות של קוד. כדי לנסות לראות אם אתה אולי יכול לעשות את זה שב. למעשה, זה רק לוקח שורה אחת של קוד. אבל שני קווים הוא כנראה יותר סטנדרטי. מה פונקציה אנחנו כנראה הולך רוצה לקרוא? קהל: strrchr. ANDI פנג: strrchr, תקין. בגלל שאנחנו מחפשים מהשמאל הנכון. אני לא אתן לך חבר ' דוגמא כמו זה, אבל אם נתתי לך דוגמא כמו www.apple.com ורק רציתי .com, שזה יהיה דוגמא למקום שבי אתה רוצה לקרוא את המופע האחרון התקופה ולא הראשון, נכון? אם היית שיחת strchr, זה היה נותן לך את apple.com. אם אתה נקרא strrchr, זה היה נותן לך .com. וכדי להיות זהיר שב ways-- בדוגמא שלי, כנראה יכול אתה יכול להיות רק כתבת אותו באמצעות strchr, מאז שיש רק נקודה אחת. אבל במקרים אחרים, זה לא יכול להיות המקרה. וכך תמיד מנסה לעצב הקוד שלך טוב, כל כך לראות-- כן? קהל: אז ב דוגמא שאמרת, כאשר אתה strrchr זה היה תיתן לך .com או פשוט לבוא? ANDI פנג: זה ייתן לך את .com. קהל: אישור. ANDI פנג: כן. הוא מצביע למקום שבו מצא אותו. כן. 30 שניות אולי? כן. כולם טובים או אולי קצת יותר זמן? הרמת ידיים? הצג של ראשים? לְהִתְקַרֵר. כל אחד רוצה לתת לי ראשון שורת קוד לתכנית זו? קהל: [לא ברור]. ANDI פנג: אז קודם כל, בואו אולי לשבור את זה. אז מה הוא הסוג של חזרה strrchr? בוא נחזור. strrchr, מה הוא סוג התמורה? קהל: תו * ANDI פנג: זה char *, נכון? מה שאומר שאתה כנראה הולך לרוצה ליצור char * אחר לסוג של חנות בכל פעם שזה חוזר ל, נכון? כי אם אתה קורא strrchr הפונקציה, זה הולך לתת לך מצביע ל בכל מקום בו נמצא כי התקופה האחרונה, יָמִינָה? אבל אתה הולך רוצה לאחסן במקום זה, נכון? ואז איך אנחנו קוד זה לתכנית שלנו? קהל: אתה עושה * char [לא ברור]. ANDI פנג: כן. קהל: [לא ברור]. ANDI פנג: strrchr. כן. אה, פספס r שם. קהל: שם קובץ [לא ברור]. מה זה? אה, זה פשוט זה. ANDI פנג: אה, זה פשוט זה. כן, מצטער. טעות שלי. דוגמאות לא תאמו. קהל: ואז נקודה. ANDI פנג: כן. היזהר כאשר אתם הן-- כאן, תן לי להתמקד ב. הנה. היזהר כאשר אתם מקלידים, במיוחד כאשר אתה עושה רק char. זה ממש קל בטעות רק לעשות מרכאות כפולות ולא בודד. זה לא יעבוד. מהדר שלך הולך להתלונן. והתפקוד שלך הוא פשוט לא הולך לרוץ. וכדי להיות זהיר כאשר אתה עושה דברים עם תווים שזה גרשיים בודדים. וכך גם הקו הזה של קוד הגיוני לכולם? אנחנו יוצרים את מצביע * char. בגלל תשואות strrchr משהו של מצביע סוג. וכך אנחנו הולכים לקרוא strchr בים, שהוא המחרוזת, הקובץ שם, שאנחנו עוברים ב. ואנחנו מחפשים האחרונים מופע של התקופה, שהוא רק ציטוט אחד dot ציטוט אחד. כן. קהל: מתי אנו משתמשים במרכאות כפולות וכאשר אנחנו משתמשים בגרשיים בודדים? ANDI פנג: כן. ציטוטים אז כפולים הם תמיד כשאתה יש שורה של יותר מאשר רק אחד. אז אם אתה עושה strstr, אשר הוא אחד שאתה חיפוש מחרוזת למחרוזת, יעבור את זה במרכאות כפולות. אבל כל זמן זה רק דמות אחת, אתה רוצה לעשות בגרשיים בודדים. זה דבר טוב לזכור. אז עכשיו שיש לנו שלנו מצביע, מה אנחנו עושים עם זה? אני מבקש מכם ל הדפסתו, נכון? אז [לא ברור], אתה רוצה תן לי את שורת קוד? קהל: printf-- ANDI פנג: כן. קהל: --you צריך בעל מקום. ANDI פנג: כן. קהל: הדפס את בעל המקום. אני לא יודע מה המקום בעל הוא אך נקודה אליה. אוקיי. בואו נדלג על זה עכשיו אז. קהל: ואז comma-- ANDI פנג: פוינטר, נכון? קהל: פוינטר, יאפ. ANDI פנג: אז סוג של שאלה מכשילה, יש לעשות עם מצביעים ומחרוזות שאנחנו כבר סוג של כבר דיברנו על. איזה סוג של בעל מקום לעשות צריך למצביע לchar *? קהל: [לא ברור]. ANDI פנג: כן. זה יותר קל ממה שאתם חושבים שזה. קהל: מחרוזת? ANDI פנג: זה רק מחרוזת, בדיוק. בגלל לזכור מחרוזות לא קיימים באמת. * Char הוא המדויק אותו דבר כמו מחרוזת. ואז באמת זה מה שזה היה צריך להיות בשימוש לכל אורך הדרך. אוקיי. בואו תראו אם אנחנו יכולים לנסות לרוץ זה. בואו לעשות הארכת איפור. לְהִתְקַרֵר. אתם רואים איך אני עובר ב psset7.zip וfinalpaper.docx, וזה פשוט מדפיס .zip ו.docx? הגיוני? אוקי אז אני חושב במבט אותך פונקציה בpset אתה הולך להיות שאלו אם מחרוזת סיום מסוים, אתה צריך לתת קוד שגיאה מסוים. ואז זה יהיה די נורא. כי אם אתה יכול להבין מה היא הרחבה, אז אתה יכול להשוות את זה הארכה כדי לראות אם היא תואמת את עם סיומת מסוימת. ואז אתה יכול לחזור הודעת שגיאה, נכון? כן. קהל: אז אנחנו לא צריך להוסיף 1 או משהו? המצביע ילך כל-- ANDI פנג: לא ולא. קהל: --point אחרי זה. ANDI פנג: כן. הוא מצביע בדיוק ל שבו ההתרחשות הייתה. כך למשל כאן, אנחנו מחפש את התקופה. אז זה הולך לחזור מצביע לתקופה. ואז זה הולך להדפיס את מתחיל בתקופה. אז אתה לא צריך להוסיף 1. אמנם, זה לגמרי בסדר, אם אתה לא בטוח, רק סוג של לבדוק את זה בעצמך. לבנות תכנית לדוגמא. לבדוק את זה בעצמך ו לראות איפה זה דפוס. זה גם דרך לא רע לעשות את זה. לְהִתְקַרֵר. וזה פחות או יותר כל הייתה לי בשבילכם היום. עשינו הרבה דברים pset היום. אז במקרה של ספק, כמו אמרתי, תמיד להסתכל למעלה ספריית string.h לpset זה. יש הולך להיות הרבה פונקציה שם שעשויה להיות שימושית. חלקם עשויים לא להיות שימושיים. אני לא ממש יודע. ווייד דרכו, יש חבורה שלמה שלהם. strstr, strchr, strrchr הם סופר, סופר מועיל, כמו גם strcpys וstrcasecmps שאנחנו כבר בשימוש. זה פשוט הרבה להתעסק עם מחרוזות, קביעה אם הם שווים, מקבל דברים מחוטים, ו יכולת לפתוח קבצים בצורה נכונה. זה הרבה אני קובץ / O. pset באמת לא כל כך רע. אתה הולך לקחת תסתכל על זה, להוריד אותו, ולראות חבורה של קוד כולו. אין דאגות, את הקוד ש למעשה לכתוב הוא לא רע בכלל. אם למישהו יש בעיות עימם שרת, לבוא לראות אותי אחרי הסעיף. מתנצל שוב על שלא מביא ממתקים לליל כל הקדושים. אני לא יודע מה לא בסדר איתי. אבל תהיה לנו כפול הסוכריות בפעם הבאה. ומזל טוב בpset שבוע. כן.