CS Final Project
- 3. 3
האפליקציה סקירת
האפליקציה תיאור
“VideoLoca”מיקום מבוססת וידאו סרטוני שיתוף אפליקציית הינה,לצפות למשתמש המאפשרת
וכמו הקרובה בסביבתו שצולמו בסרטונים-הנמצאים משתמשים עם ולשתפם סרטונים לצלם כן
הסרטונים צולמו בה בסביבה.
המש של מיקומו זיהוי עבור הנייד המכשיר של המיקום ביכולות משתמשת האפליקציהתמש,מנת על
בו המיקום את לזהות כדי וכן הקרובה בסביבתו האפליקציה באמצעות שצולמו סרטונים לו להציג
ו סרטון צולם"לנעוץ"זה במיקום אותו.
האפליקציה מטרת
הבאים לנושאים מענה לתת באה האפליקציה:
●כמו מדיה שיתוף פלטפורמותYOUTUBEלדוג,'האפשרות את למשתמש נותנות לאלחפש
ע סרטונים"מיקום פ
●הנוכחי למיקומו הרלוונטיים וידאו בסרטוני לצפות למשתמש יכולת מתן
●מוגבל גיאוגרפי ברדיוס סרטון של שיתוף
נוספת מידע בשכבת אותם להעשיר מנת על מסוימים במיקומים סרטונים הטמעת
באפליקציה השימוש תרחישי
●מתרחש או שהתרחש אירוע על שומע המשתמשבסרטונים לצפות ומעוניין הקרובה בסביבתו
למקום להגיע מעוניין והוא במידה האירוע היכן ולראות מהאירוע.
●שנמצא מי עם רק אותו לשתף ומעוניין צולם בו למיקום רק שרלוונטי סרטון צילם המשתמש
זה מיקום בסביבת.
●בסגנון במשחקים שימוש"המטמון את חפש"–עם סרטונים להשאיר ניתןוהנחיות רמזים
המשחק בתחנות.
●תיירותיים במקומות וירטואלית אינפורמציה שכבת הוספת–של וסקירה הסבר סרטוני
כעת נמצא המשתמש בו המיקום.
●המשתמש למיקום הרלוונטיות וידאו פרסומות הצגת–בסביבה ושירותים לעסקים פרסומות
הקרובה.
באפליקציה השימוש אופן
●לאפליקצ נכנס המשתמששלו הפייסבוק חשבון באמצעות יה.
●עם המשתמש של סביבתו של מפה המציג האפליקציה של הראשי למסך מגיע המשתמש
ע להגדרה הניתן ברדיוס שצולמו הווידאו סרטוני"המשתמש י.
●בהם לצפות מנת על הסרטונים סימוני על ללחוץ יכול המשתמש.
●הסרטון את לדרג יכול המשתמש בסרטון צפייה בעת,להבפרופיל ולצפות תגובות לו וסיף
הסרטון את שהעלה המשתמש של האישי.
●על-האפליקציה של הראשי המסך בתחתית הקבוע הצילום כפתור על לחיצה ידי,האפליקציה
של באורך וידאו צילום למצב עוברת15שניות.
●סרטון צילום לאחר,הסרטון את לסקור יכול המשתמש,ולהעלות תיאור לו להוסיףאותו
למפה.
- 5. 5
באפליקציה שיושמו תכונות
שרת צד
●של דירוג מנהל השרת ואיכותיים מעניינים סרטונים להעלות משתמשים לעודד מנת על
דירוג להם שיש אלו את רק במערכת ומשאיר לסרטונים סינון מבצע זמן פרק וכל הסרטונים
גבוהה.
●אמת בזמן התראות בשליחת תומך השרת.
●מספר אחרי מעקבסרטון כל של הצפיות.
לקוח צד
●שלו הפיסבוק פרופיל תמונת את המציג משתמש לכל אישי פרופיל,בסיסיים אישיים פרטים:
מין,קצר ותיאור לידה תאריך,שצילם הסרטונים את וכן.
●לסרטונים תגובות והוספת דירוג אפשרות.
●של באורך קצרים סרטונים צילום15שניות.
●המוצגים הסרטונים רדיוס להגדרת אפשרות(בין1ל-15ק"מ.)
●הסרטונים הצגת אופן הגדרת–ברצף וניגון אוטומטי ניגון.
●( התקבצותClusteringברדיוס הסרטונים )50.במפה הצפיפות את להוריד כדי 'מ
- 6. 6
המערכת ארכיטקטורת
שרת צד
Server.js:,הלקוח מצד מתקבלות אשר הבקשות כל את שמנהלת השרת של הראשית המחלקה
.בהתאם בהם לטפל כדי המתאימות למחלקות אותם ומחלקת
User.js:ללקוח שקשורה נתונים לעדכון/שליפת הקשורות הבקשות סוגי בכל המטפלת המחלקה
.התחברות בקשת בעת המשתמש קיום את כולל שזה ,מסוים
S3Service.jsלשירותי קשורות אשר בבקשות המטפלת המחלקה :Amazon S3מחזיקה היא ,וגם ,
.זה לשירות הקשורה הלוגיקה את
CoreAPI.jsהאחראית הבקשה ,כגון ,האפליקציה של הכללית הלוגיקה על האחראית המחלקה :
.המפה על מסוים ברדיוס הסרטונים טעינת על
VideoOperations.jsבבקש המטפלת המחלקה :לאינטראקציה הקשורות ותעם המשתמש של
.מסוים סרטון(like, comment, views count.)'וכו
- 7. 7
user.js
connect()
היא ,המשתמש התחברות ברגע לשרת מהאפליקציות הנשלחות הבקשות בסוג מטפלת הזו הפונקציה
למשתמש הקשורים הנתונים כל את לו מחזירה אז קיים אם ,במערכת המשתמש קיום את בודקת
מפרופיל הזה המשתמש על נתונים כמה שולפת היא אז לא ואם ,בהתאם אותם להציג כדי הזה
ורוש שלו הפייסבוק.במערכת אותו מת
getUserProfileDataFromDB(pUserId)
מקבלת היא ,אחר משתמש של לפרופיל או שלו לפרופיל נכנס המשתמש כאשר נקראת הזו הפונקציה
ה אתuser id,הזה המשתמש שללהציג כדי הזה למשתמש השייכים הסרטונים כל רשימת ומחזירה
.בפרופיל אותם
מח לא הזו (הפונקציה :הערהרשימת את אלא הסרטונים את זירהjsonsעל נתונים המכילים
.)האלו הסרטונים
updateProfileInfo()
המעודכנים הנתונים את מקבלת היא ,שלו הפרופיל את מעדכן כשהמשתמש נקראת הזו הפונקציה
ב אותם ושומרתdatabase.לא או בהצלחה התבצע העדכון אם למשתמש תשובה ומחזירה ,
getProfileAboutInfo()
כמו נתונים ,מסוים משתמש של הפרופיל נתוני את מחזירה הזו הפונקציהbirthday, gender, about
.'וכו
coreAPI.js
loadLikesAndComments(pVideoID)
ה כל שליפת על אחראית הזו הפונקציהcommentsוlikesמה מסוים סרטון שלdatabase.
איזשהו על לוחץ שהמשתמש ברגעהקשורים לנתונים טעינת בקשת שולחת האפליקציה במפה סרטון
.הזה מהסוג בבקשות שמטפלת מי היא הזו הפונקציה ולכן ,מהשרת הזה לסרטון
של רשימות שתי מחזירהjsonsה הראשונה ,commentsה של והשנייהlikes.
addNewVideoDataInDB(pUploadVideoJson)
חדש סרטון מעלה שהמשתמש אחריל עולה הזה הסרטון ,למפהS3בAmazonהועלה אם ואז
לשרת שולחת ישירות האפליקציה אז בהצלחהـJsonהזה לסרטון הקשורים הנתונים כל את המכיל
ל שלו הקישור ,הסרטון את העלה מי (כמוAmazonוכו’ב אותם לעדכן כדי )databaseולכן ,
מהסוג בקשות על אחראית היא הזו הפונקציה.הזה
getVideosByLocationAndRadius(xCoordinate,yCoordinate)
עד של ברדיוס הסרטונים כל רשימת את מחזירה הזו הפונקציה15.הנתונה מהנקודה קמ"ש
להציג כדי סרטונים רשימת קבלת בקשת שולחת האפליקציה ,בהצלחה התחבר שהמשתמש ברגע
לפונקצי מגיעה הזו הבקשה ולכן ,המפה על אותם.שצריך מה את למשתמש ומחזירה בשרת הזו ה
- 8. 8
s3Service.js
deleteVideoFromS3(pVideoId)
מה מסוים סרטון מחיקת על אחראית הזו הפונקציהdatabaseמה אותו למחוק וגםS3.
deleteVideoFromS3InTimeOut()
מתח שהוא לפני זה על לשרת מדווח הוא הסרטון את להעלות רוצה שהמשתמש בזמן.ההעלאה את יל
יוכל שהשרת כדי בתשובה אליו ויחזור ההעלאה את שיסיים עד מסוים זמן פרק למשתמש נותן השרת
ב לסרטון קישור (כולל הסרטון נתוני את להוסיףS3)לDatabase.
שקיימים מצב מונע ובכך ,)קיים (אם האמזון משירותי הסרטון את מוחק השרת אז חזר לא ואם
ב סרטוניםS3שב מצביע להם איןDatabase.
videoOperations.js
like()
ה בבקשות מטפלת הזו הפונקציהlikeאת ומעדכנת מסוים סרטון שלהdatabase.בהתאם
removeLike()
בבקשות מטפלת הזו הפונקציהremove likeמוריד היא כלומרlikeסרטון עבור מסוים משתמש של
ה את ומעדכנת ,מסויםdatabase.בהתאם
comment()
ה בבקשות מטפלת הזו הפונקציהcommentה את ומעדכנת מסוים סרטון עלdatabase.
removeComment()
ה בבקשות מטפלת הזו הפונקציהremove commentה את למחוק רוצה מסוים משתמש אם כלומר ,
commentהנתונים את ומוחקת נקראת הזו הפונקציה ,מסוים סרטון עבור שלומה הרלוונטים
database.בהתאם
addViewsNumber(pVideoId)
,המפה על סרטון באיזשהו צופה מסוים שמשתמש פעם כל נקראת הזו הפונקציהה את מקבלתidשל
ב הזה הסרטון של הצופים מספר את ומעלה הסרטון1בdatabase.
- 9. 9
כמו עדכונים לקבלת מיועד הזה המנגנוןview count / likes / comments.אמת בזמן
באותו סרטון באותו שצופים המשתמשים כל ,הסרטונים אחד על עדכונים שחל עת בכל ,כלומר
.מידי באופן העדכון את יקבלו ,רגע
( חדר כלRoom,נתון ברגע משתמשים מספר ידי על נצפה אשר מסוים סרטון מייצג )
בזמן עדכונים מקבלים ,מסוים לחדר השייכים והמשתמשים.החדר ידי על המיוצג לסרטון אמת
- 10. 10
לקוח צד
תבניתModel–View–Presenter(בקיצורMVPהמשמשת תוכנה בהנדסת עיצוב תבנית היא )
מבט ,מודל ,חלקים לשלושה היישום לחלוקת טכניקה מתארת התבנית .כלשהו יישום להפשטת
.אירועים מונחה רפוי בצימוד ביניהם המחוברים ,ובקר
-Modelהמ :להציג הולכת שהאפליקציה הנתונים את בתוכו שמגדיר הממשק הוא ודל
( המשתמש בממשקUI.)
-View,אלמנטים סוגי שני המכילות חבילות שתי מכיל :Activityו-Fragmentשני ,
( המשתמש ממשק את מהווים האלו אלמנטיםUI.באפליקציה )
-Presenterכל של הלוגי הצד הוא :viewהנתוני את מקבל ,מה האירועים או ם-viewמעבד
ה לעדכון הצורך ובעת אותם-UIל תשובה מחזיר הוא ,view.
- 11. 11
Object Diagram
( שלישיה כל ,האפליקציה של הכללי העיצוב מתואר הזה בשרטוטModel, View, Presenterמייצגת )
העיצוב תבנית של המימוש אתMVP.
- 12. 12
Login:
ה מסך-Login.לאפליקציה המשתמש התחברות או רישום על אחראי
ה ,ההתחברות כפתור על הלחיצה אחרי ,פייסבוק שירותי ע"י נעשית לאפליקציה ההרשמה-presenter
מה מקבל-viewומקבל פייסבוק לשירותי פונה .ההתחברות בקשת אתIDהמשתמש של ייחודי
ה ,התשובה קבלת בעת .לשרת התחברות בקשת ושולח-presenterה את ומעדכן בהתאם מתנהג-
view.
LoginActivity:
onLoginButtonהיא .ההתחברות כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
מה מבקשת-presenter.התחברות בקשת
openMapActivityה ע"י נקראת הפונקציה :-presenterלמסך המשתמש את מעבירה היא .
.באפליקציה המפה
showLoginErrorDialogה ע"י נקראת הפונקציה :-presenterבעת שגיאה הודעת מציגה היא .
.התחברות שגיאת
LoginPresenter:
onLoginRequestה ע"י נקראת הפונקציה :-viewמול ההתחברות תהליך את מבצעת היא .
.השרת
onLoginSucessכאשר מופעלת הזו הפונקציה :ו ,מהשרת חיובית תשובה מקבליםקוראת
ב המתאימה לפונקציה-view.
onLoginFailedכאשר מופעלת הזו הפונקציה :וקוראת ,מהשרת שלילית תשובה מקבלים
ב המתאימה לפונקציה-view.
- 13. 13
Map:
ה מסך-Mapהאישי לפרופיל ,ההגדרות למסך דרכו לגשת אפשר .באפליקציה המרכזי המסך הוא
קטעי לצילום המצלמה ולפתיחתווידאו.
קטעי קיימים איפה הסימנים עליה מופעים גביה שעל המפה מופיעה זה במסךווידאושנמצאים
ה קטע יפתח ,הסימנים אחד על בלחיצה .למשתמש הקרובה בסביבהווידאו.לצפיה
MapActivity:
onCameraButtonהיא ,המצלמה כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
onSettingsButtonהיא ,ההגדרות כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
onProfileButton,האישי הפרופיל כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
מדווחת היאלה-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
onMarkerIconעל שמופיעים הסימנים אחד על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת היא ,המפה-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
openCameraה ע"י נקראת הפונקציה :-presenterאת פותחת היא .fragment.המצלמה
openSettingsה ע"י נקראת הפונקציה :-presenterה את פותחת היא .-activity.ההגדרות של
openProfileה ע"י נקראת הפונקציה :-presenterה את פותחת היא .-activity.המצלמה של
openVideoFragmentה ע"י נקראת הפונקציה :-presenterפותחת היא .fragmentהווידאו
.בו ולצפיה לטעינתו
openVideoListFragmentה ע"י נקראת הפונקציה :-presenterפותחת היא .fragment
ממש במרחק שנמצאים הווידאו קטעי רשימת טועת גם היא ובנוסף ,בו ולצפיה לטעינתו הווידאו
.לשני אחד קרוב
addVideoMarkerה ע"י נקראת הפונקציה :-presenterסימן מוסיפה היא ,.המפה על ווידאו
addListMarkerה ע"י נקראת הפונקציה :-presenterקטעי רשימת של סימן מוסיפה היא ,
.לשני אחד שקרובים המפה על ווידאו
MapPresenter:
onCameraOpenה ע"י נקראת הפונקציה :-view,המצלמה לפתיחת ההרשאות את מבקשת ,
מה ומבקשת-view.המצלמה את לפתוח
- 14. 14
onSettingsOpenה ע"י נקראת הפונקציה :-viewמה ומבקשת ,השמורות ההגדרות את טוענת ,-
view.ההגדרות מסך את לפתוח
onProfileOpenה ע"י נקראת הפונקציה :-viewמה ומבקשת ,האישים הפרטים את טוענת ,-
view.האישי הפרופיל את לפתוח
onMarkerIconה ע"י נקראת הפונקציה :-viewנתונים כל טוענת ,ומבקשת ,לווידוא שקשורים
מה-viewאת לפתוחfragment.המתאימים הנתונים העברת כדי תוך הווידוא של
onVideoReceiveומעדכנת ,מהשרת עדכונים או תשובות מקבלים כאשר נקראת הפונקציה :
ה את-viewלפני הנתונים את מעבדת הפונקציה ,מהשרת סרטונים רשימת קבלת בעת .בהתאם
מע שהיאה את דכנת-view( התקבצות פעולת כולל העיבוד ,clustering.)
Hierarchical greedy clustering algorithm:
:כדלקמן הוא בו שהשתמשנו ההתקבצות אלגוריתם
סרטון לכלvבפחות רחוק הוא (כלומר הקיימות הקבוצות לאחת להשתייך יכול הוא אם בודקים
מ50:)הקבוצה מנציג 'מ
oאיזושהי נקח.הנתונה הנקודות מקבוצת נקודה
o.שבחרנו מהנקודה מסוים ברדיוס השכנים הנקודות כל נמצא
o.שמצאנו השכנים כל עם חדשה נקודות קבוצת נייצר
o.שייצרנו הקבוצות באחת שאינה כך המקורית הנקודות מקבוצת חדשה נקודה נקח
oבקבוצה נקודות לנו יישאר שלא עד ושוב שוב השלבים אותם על נחזור.המקורית
.סרטונים של )(רשימה קבוצות מציגים אנחנו צפופים במקומות ,ובך
Settings:
ה מסך-Settingsהאפליקציה הגדרות על האחראי מסך הוא.
SettingsActivity:
onLogoutButtonהיא ,ההתנתקות כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
onRaduisChangeמדווחת היא ,הרדיוס את משנה המשתמש כאשר מופעלת הזו הפונקציה :
לה-presenter.הרדיוס שינוי על
onAutoplayCheckedה כפתור של המצב את משנה המשתמש כאשר מופעלת הזו הפונקציה :-
Autoplay videoלה מדווחת והיא ,-presenter.המצב שינוי על
- 15. 15
onAutoplayListCheckedכפתור של המצב את משנה המשתמש כאשר מופעלת הזו הפונקציה :
ה-Autoplay listלה מדווחת והיא ,-presenter.המצב שינוי על
SettingsPresenter:
logoutRequestה את מוחקת הפונקציה :-sessionה את סוגרת .המכשיר מתוך המשתמש של-
sessionשל.הפיסבוק התחברות
changeRadiusבקשות שליחת ובעת ,המבוקש הרדיוס את באפליקציה מעדכנת הפונקציה :
.הבקשות עם נשלח זה רדיוס ,לשרת
changeAutoplayStateניגון להתחיל האם ,הסרטונים ניגון מצב את משנה זו פונקציה :
.המשתמש לבחירת אותה להשאיר או הסרטון טעינת אחרי אוטומטי
changeAutoplayListStateאת לנגן האם ,הסרטונים רשימת ניגון מצב את משנה זו פונקציה :
.ביניהם שידפדף למשתמש הבחירה את להשאיר או אוטומטי ברצף הסרטונים רשימת
Profile:
ה מסך-Profileהסרטונים כל ובנוסף ,עליו הנתונים כל ,משתמש כל של האישי הפרופיל את מציג
.שהעלה
ProfileActivity:
onEditProfileButton,ההתנתקות כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת היא-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
openEditProfileActivityה ע"י נקראת הפונקציה :-presenter,עריכת מסך את פותחת היא
.האישי הפרופיל
fillVideosListה ע"י נקראת הפונקציה :-presenterהסרטונים רשימת את מקבלת היא ,
.ברשימה אותם ומציגה ,למשתמש ששייכים
ProfilePresenter:
openEditProfileRequestה ע"י נקראת הפונקציה :-view,האישים הפרטים את טוענת ,
מה ומבקשת-view.האישי הפרופיל עריכת מסך את לפתוח
onUserVideosListReceiveאת ומעדכנת ,מהשרת עדכונים מקבלים כאשר נקראת הפונקציה :
ה-view.בהתאם
- 16. 16
EditProfile:
ה מסך-EditProfile.שלו האישי הפרופיל לערוך משתמש לכל המאפשר מסך הוא
EditProfileActivity:
onSaveButtonעל לוחץ המשתמש כאשר מופעלת הזו הפונקציה :היא ,הנתונים שמירת כפתור
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
EditProfilePresenter:
saveInfoה ע"י נקראת הפונקציה :-view.האישי בפרופיל והעדכונים השינויים את שומרת ,
Camera:
ה מסך-Camera.הסרטונים את מצלמים הממנו המצלמה מסך הוא
CameraActivity
onCaptureButtonהיא ,ההקלטה כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
openUploadActivityה ע"י נקראת הפונקציה :-presenterהעלאת מסך את פותחת היא ,
.ההקלטה סיום אחרי לשרת הווידאו
CameraPresenter
saveVideoה ע"י נקראת הפונקציה :-view,הסרטון את שומרת היא ,ההקלטה סיום אחרי ,
ל ומדווחת המכשיר של הפנימי בזיכרון-view.השמירה הצלחת על
- 17. 17
Upload:
ה מסך-uploadולשתף לשרת אותו להעלות אפשר ומפה ,שצלמנו הסטון את שרואים המסך הוא
.אותו
UploadActivity
onUploadButtonהיא ,ההקלטה כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
backToMapActivityה ע"י נקראת הפונקציה :-presenterה מסך את סוגרת היא ,-upload
.המפה למסך המשתמש את ומחזירה
UploadPresenter
uploadVideoה ע"י נקראת הפונקציה :-viewל שהוקלט הסרטון את מעלה היא ,-Amazon s3,
ל ומדווחת-view.סיום בזמן
Video:
סרטון של קיומו שמראה (סימן המפה על הסימנים אחד על לוחץ המשתמש כאשר נפתח זה מסך
.הסרטון את רואים זה במסך .)בסביבה
VideoFragment:
onLikeButtonה כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :-likeמדווחת היא ,
לה-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
onCommentButtonה כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :-comment,
לה מדווחת היא-presenterבהת בה שיטפל כדי המשתמש בקשת על.אם
onUserProfileClickשל הפרופיל תמונת על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת היא ,הסרטון את שהעלה המשתמש-presenterבה שיטפל כדי המשתמש בקשת על
.בהתאם
likeVideoה ע"י נקראת הפונקציה :-presenterה את מעדכמת היא ,-view.בהתאם
- 18. 18
openCommentFragment:ה ע"י נקראת הפונקציה-presenter.התגובות מסך את פותחת ,
openProfileFragmentה ע"י נקראת הפונקציה :-presenterשל הפרופיל מסך את פותחת ,
.הסרטון את שהעלה המשתמש
VideoPresenter:
onVideoLikeה ע"י נקראת הפונקציה :-viewהמשתמש פעולת על השרת את מעדכנת היא ,
(like/unlike.)
onVideoCommentה ע"י נקראת הפונקציה :-viewעם וחוזרת ,שקיימות התגובות את טוענת ,
ל הנתונים-view.
onProfileOpenה ע"י נקראת הפונקציה :-viewהמשתמש של האישי הפרופיל את טוענת ,
ל הנתונים עם וחוזרת ,הנבחר-view.
onNewVideoInfoReceiveמקבל כאשר נקראת הפונקציה :את ומעדכנת ,מהשרת עדכונים ים
ה-viewה מספר ,(כגון ,בהתאם-likes.)השתנה הצפיות או ,תגובות
VideoList:
סרטים של קיומם שמראה (סימן המפה על הסימנים אחד על לוחץ המשתמש כאשר נפתח זה מסך
מרחק עד ,לשני אחד שקרובים50.הסרטון את רואים זה במסך .)הקרובה בסביבה ,'מ
VideoListFragment:
onVideoClick,הסרטונים רשימת מתוך סרטון בוחר המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת היא-presenterבהתאם בה שיטפל כדי המשתמש בקשת על
openVideoFragmentה ע"י נקראת הפונקציה :-presenter.הנבחר הסרטון את פותחת ,
VideoListPrensenter:
openVideoה ע"י נקראת הפונקציה :-viewהנתונים עם וחוזרת ,הנבחר הסרטון את טוענת ,
לה-view.
- 19. 19
Comments:
.הנצפה הסרטון עבור תגובות )למחוק (או להוסיף ניתן זה במסך
CommentsFragment:
onSendButtonהתגובה שליחת כפתור על לוחץ המשתמש כאשר מופעלת הזו הפונקציה :
לה מדווחת היא ,החדשה-presenter.בהתאם בה שיטפל כדי המשתמש בקשת על
addCommentה ע"י נקראת הפונקציה :-presenterבה הסרטון על חדשה תגובה מוסיפה היא ,-
view.
CommentsPresenter:
newCommentה ע"י נקראת הפונקציה :-viewבשרת אותה ומעדכנת ,התגובה את מקבלת ,
ה את ומעדכנת-view.הצלחה בעת
onNewCommentReceiveסרטון על חדשות תגובות מקבלים כאשר נקראת הפונקציה :
ה את ומעדכנת ,בו צופים שאנחנו-view.בהתאם
- 20. 20
נתונים בסיסי
לטבלאות כללי פירוט
טבלתusers:
כל על הנתונים את מאחסנת היא .לאפליקציה שנרשמו המשתמשים רשימת מכילה זו טבלה.משתמש
ה שדה באמצעות המשתמשים בין מפרידים-userID(Primary Keyמשתמש לכל ייחודי ערך שהוא )
.לאפליקציה הראשונה ההרשמה ברגע מהפיסבוק אותו ששולפים
טבלתvideos:
באמצעות הסרטונים בין מפרידים .לאפליקציה שהועלו הסרטונים כל של רשימה מכילה זו טבלה
ה שדה-videoID(Primary Keyחדש סרטון הוספת בעת אוטומטית שמופק ייחודי ערך שהוא )
.לטבלה
טבלתlikes:
ה כל רשימת מכילה זו טבלה-likesה בין מפרידים .במערכת הסרטונים כל על שבוצעו-likes
ה שדה באמצעות-likeID(Primary Keyהוספת בעת אוטומטית שמופק ייחודי ערך שהוא )likeחדש
.לטבלה
טבלתcomments:
התגובות בין מפרידים .במערכת הסרטונים לכל שהוספו התגובות כל רשימת מכילה זו טבלה
ה שדה באמצעות-commentID(Primary Keyהוספת בעת אוטומטית שמופק ייחודי ערך שהוא )
.לטבלה חדשה תגובה
- 21. 21
הטבלאות בין הקשרים פירוט
1)Videos -> Users
ה טבלתVideosה את מכילהuserIDולכן ,באפליקציה הסרטון את שהעלה המשתמש של
ה לטבלת ניגשים אנחנו הזה המשתמש על מידע לשלוף שרוצים ברגעUsersה לפי ומחפשים
userID.עליו המידע כל את ומקבלים
הוא כאן הקשרM -> 1אבל ,המשתמש לאותו ששייכים סרטונים כמה שיש להיות יכול כי
יכול לא.משתמשים לכמה שייך סרטון שאותו מצב להיות
2)Likes -> Videos
ה טבלתLikesה את מכילהvideoIDה עליו שבוצע הסרטון שלlike.
איזה לדעת וכדי מסוים סרטון טעינת בעת ולכןlikesה בטבלת מחפשים אז ,עליו בוצעו
Likesה לפיvideoID.
הוא כאן הקשרM -> 1הרבה להיות יכול כיlikesשאותו להיות יכול לא אבל הסרטון לאותו
הlike.סרטונים לכמה
3)Likes -> Users
ה טבלתLikesה את מכילהuserIDה את שביצע המשתמש שלlike.מסוים סרטון עבור
הוא כאן הקשרM -> 1הרבה שקיימים להיות יכול כיlikesאבל ,המשתמש לאותו ששייכים
ה שאותו להיות יכול לאlike.משתמשים לשני שייך
4)Comments -> Videos
ה טבלתCommentsה את מכילהvideoID.התגובה שייכת שאליו הסרטון של
ה בטבלת מחפשים אז ,אליו הוספו תגובות איזה לדעת וכדי מסוים סרטון טעינת בעת ולכן-
Commentsה לפיvideoID.
הוא כאן הקשרM -> 1להיות יכול לא אבל הסרטון לאותו תגובות הרבה להיות יכול כי
.שונים סרטונים לשני שייכת תגובה שאותה
5)Comments -> Users
ה טבלתCommentsה את מכילהuserID.מסוים סרטון על שהגיב המשתמש של
הוא כאן הקשרM -> 1יכו לא אבל סרטונים לכמה הגיב מסוים שמשתמש להיות יכול כילהיות ל
.משתמשים לכמה שייכת התגובה שאותה מצב
- 22. 22
לקוח אינטראקציית-שרת
ה בצד-clientמנגנון מומשlistenersזה מנגנון .
( הצופה תבנית את מממשObserver Design
Pattern.)
צופה תבניתהייחוס אובייקט שבה עיצוב תבנית היא ,
אשר אליו מקושרים אובייקטים של רשימה מחזיק
הייחוס אובייקט .לגביו צופה נקרא מהם אחד כל
ידי על כלל בדרך ,צורך בעת עליו לצופים ""מודיע
.שלהם מהפונקציות לאחת קריאה
באפליקציה מסך שכל כך זה במנגנון השתמשנו
הוא ,אמת בזמן מתעדכן או מהשרת נתונים שמקבל
למחלקת נרשםClientכל את מעבירה בתורה שהיא
ו לשרת הבקשות.ממנו העדכונים כל את מקבלת
,מהשרת עדכונים או תשובות שמקבלים בזמן ,ואז
מחלקתClientה כל את מעדכנת-views)(הצופים
.אתחולם בזמן אליה שנרשמו
- 27. 27
פיתוח שיקולי
טכנולוגיותצד-שרת
Node.jsהיאשפהחדשהיחסית(2009)שהשימושבההתרחבמאודבשניםהאחרונותוהיה
לנוחשובללמודטכנולוגיותחדשותועדכניותדרךהפרויקט,לכןהעדפנואותהע"פשפותצד-
שרתאחרותוותיקותיותרכגוןPHP, JAVA, Pythonאע"פשהןמבוססותיותר.
מכיווןש-Node.jsכוללתבאופןמובנהספריותWeb,ניתןליצורשרתבסיסיבשורותקוד
ספורות,ללאצורךבתכנתשרתייעודיתוכבדה.
מהירותו-Scalability:Node.jsהיאשפהמונחיתאירועיםואסינכרונית,מהשמאפשרלה
לטפלבבקשותI/O,ובפרטבבקשותרשת,באופןמהיר,Non-Blocking,בתהליךיחידללא
צורךבת'רדנפרדעבורכלחיבורחדש,ולכןהשרתיכוללנהלאלפיחיבוריםבמקבילללא
יצירתעומסעלהמערכת.
שימושב-WebSockets:זהופרוטוקולתקשורתהמאפשרלבצעתקשורתדו-כיווניתעלגבי
חיבורבודדשנשארפתוחלכלאורךההתקשרותובוכלצדיכוללשלוחמידעלצדהשני(לאחר
שהלקוחיזםחיבור,)בניגודל-HTTPשבוהלקוחשולחבקשותוהשרתמגיבלהןבלבד,ואינו
יכולליזוםהודעותבעצמו.התקשורתמתבצעתישירותמעלפרוטוקולTCP(שכבת
התעבורה)ואינהמצריכהשימושב-HTTP.בפרויקטזההשתמשנובספרייתSocket.IO,
ספרייהפופולריתומהירההתומכתבמספרקבשלפלטפורמותומאפשרתתקשורתבזמן-
אמתבאמצעותWebSocketsומאפשרתביןהשארדחיפתנוטיפקציותללקוח.
עודכמהנתוניםמעניינים:
חברתPaypalהחליטהלעבורמ-Javaל-Node.jsבמסגרתעדכוןהמערכתשלהם.הם
החליטולהתחילעםהתכניתהאחראיתלהצגתמצבהחשבוןשלהמשתמשים–אחדהחלקים
העמוסיםיותרבאתרתועל-מנתלמזערסיכוניםהםהקצושניצוותיפיתוחמקבילים
למשימה–צוותפיתוחב-Node.jsוצוותפיתוחב-Javaלמקרהשמשהוישתבש.צוות
הפיתוחב-Javaהחלאתעבודתובחודשינוארומנה5מתכנתיםוהצוותהשניהחלאת
עבודתוחודשייםמאוחריותר,במרץ,ומנה2מתכנתיםבלבד.בחודשיוני,שניהצוותים
סיימואתעבודתםוהתבררכי:
1.אפליקצייתה-Node.JSנבנתהבמהירותכמעטכפולהמאפליקצייתה-Javaעםמספר
מפתחיםקטןבחצי.
2.התכניתמנתה33%פחותשורותקודלעומתJava.
3.מספרהקבציםהנדרשהיהקטןב-40%.
כמו-כן,החברהעשתהמבחניביצועיםלשתיהתכניותוהתוצאותהיו:
1.התכניתשנכתבהב-Node.jsהצליחהלטפלבמספרכפולשלבקשותלשנייהלעומת
התכניתשנכתבהב-.Java
2.זמןהתגובההממוצעהיהקטןב-35%(200msמהיריותר.)
(הנתוניםנלקחומבלוגהפיתוחשלPayPal–)בביבליוגרפיה קישור.
שמותבולטיםנוספיםחוץמ-PayPalשעברולפיתוחב-Node.jsעבורמערכותגדולות
ומורכבותהם:
Netflix, LinkedIn, Uber, Pinterest, Yahoo!, New York Timesועוד.
- 28. 28
טכנולוגיותצד-לקוח
FacebookSDK:כי פייסבוק בשירותי השתמשנו :
1.מבטיחכיוםהמשתמש,ובזהחוסךלנוכלענייןהווידויאםהמשתמשקייםאולא.
2.הסתמכנועלהנתוניםהבסיסיםשלכלמשתמשכדילבנותאתהפרופילהאישי(תמונה,
שם,וכו.)'
MapboxSDK:השתמשנובשירותיMapboxכי:
1.חיפשנושירותימפותקליםשלאיצטרכומשאביםגדולים(לעומתמפותגוגל.)
2.ניתןלערוךולעצבאותםכרצוננו.
אופןאחסוןוהגשתהסרטונים
התלבטנוביןמספראפשרויותעבוראחסון,העלאתוהגשתהסרטונים:
1.שימושבשרתיחידעבורניהולהנתוניםואחסוןהסרטונים.
2.שימושבשירותאחסוןחיצוניוהעברתהסרטוניםאליומהאפליקציהדרךהשרת.
3.שימושבשירותאחסוןחיצוניעבורהסרטוניםושמירתקישוריםבלבדבשרת.
אתהאפשרותהראשונהפסלנומהסיבהשפעולותההעלאהוההורדהשלהסרטוניםהיומעמיסותעל
השרתמאודמבחינתI/Oופוגעותבתקשורתהשוטפתעםהלקוחות.
האופציההשנייהעלתהמכיווןשלארצינולשלבהרשאותלשירותAWSשלאמזוןבקוד
האפליקציה,מהשיאפשרניצוללרעהשלהשירותע"יתוקפים,וכדילוודאשתהליךההעלאת
הסרטוניםיהיהמפוקחע"יהשרתכדילמנועחוסרעקביותבמערכתבמקרהשלכשלבאפליקציהאו
בתקשורתבזמןהעלאתהסרטון.אפשרותזונפסלהגםהיאמאותההסיבהשבגינהפסלנואת
האפשרותהראשונה.
לאחר"חפירה"בתיעודשלAWS,גילינושישנןאפשרויותלניהולומתןהרשאותבדרךבטיחותית
שאינהמחייבתשילובשלה-Credentialsבקודולכןהחלטנולממשאתהאפשרותהשלישית,כך
שהלקוחיעלהויורידאתהסרטוניםישירותמ-S3שלאמזוןוהשרתרקיפקחעלהפעולהויאחסןאת
הקישורלסרטוןבמסד-הנתונים.
בחרנולהשתמשבשירותS3אמזוןמכיווןשהואגמיש,יעילוזולעבוראחסוןותעבורהשלקבצים
גדוליםוכמו-כןמכיווןשהתנסינובשירותזהוב-AWSבכללבעבר.
- 30. 30
ביבליוגרפיה
SocketIO.והלקוח השרת בין להתחברות בה שהשתמשנו התקשורת ספריית היא :
http://socket.io/docs
Android developersהפיתוח כל לאורך בו שנעזרנו הרשמי האנדרואיד אתר :
https://developer.android.com/guide/index.html
Mapboxהמפות שירות :.בהם שהשתמשנו
https://www.mapbox.com/android-sdk
Hierarchical greedy clustering.אותו שממשנו ההתקבצות אלגוריתם זה :
https://www.mapbox.com/blog/supercluster
Paypal site:.פיתוח שיקולי לצרכי בו נעזרנו
https://www.paypal-engineering.com/2013/11/22/node-js-at-paypal
בה שהשתמשנו עיצוב תבניות.ן
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter
https://en.wikipedia.org/wiki/Observer_pattern