שבוע 16: אז... מה עכשיו?

המטרות של השבוע הזה:

  1. ללמד עבודה עם כלים של החיים האמיתיים.
  2. ליצור גיבוש אחרון של הקהילה שסיימה את הקורס.
  3. לתת לכם פוש קטנטון נוסף לתיק העבודות.
  4. להשתמש בכל מה שלמדנו עד עכשיו.
  5. ליצור כולנו משהו, ביחד.

מה עושים?

בונים ביחד אפליקציה (אתר) ללוח שנה – כשהרעיונות באים מכם.
אני בטוח שיחד נוכל לבנות משהו גדול, מגניב, חינמי ו־Open Source־י.
הפרויקט שנבנה יופץ תחת רישיון Apache2 (שימוש חופשי לכל מי שרוצה, בלי תנאים), ויפורסם ב־GitHub.
התרומות יהיו דרך Pull Requests שיעשו ל־GitHub של הפרויקט.

איפה הקוד של הפרויקט?

כאן.

באילו טכנולוגיות נבנה את הפרויקט?

כאמור, אנחנו בונים את הפרויקט ביחד.
אני הולך להיות ה־CTO של הפרויקט לצורך העניין – אקבל את ההחלטות הטכנולוגיות אחרי התייעצות עם כולכם.
אני אשתדל לתרום גם קוד איפה שיהיה צורך.

  1. שפת התכנות המרכזית תהיה Python, כמובן. יהיה גם HTML/CSS/JS – מקווה שיהיו עוד אנשים חוץ ממני שיתנדבו לכתוב (זה בסדר ללמוד תוך כדי) כדי שלא כל העומס יפול עליי.
  2. ה־Framework הפיתוחי שנשתמש בו לצורך יצירת האתר הוא Fast API. זה framework שמאוד דומה ל־Flask והוא יחסית חם בשוק. יהיה מעניין (גם עבורי) לבחון אותו.
  3. אנחנו נשתמש במסד נתונים רלציוני. בשרת הוא יהיה PostgreSQL, ובסביבה הלוקאלית שלכם הוא יהיה SQLite. זה יאפשר לנו להקים את הסביבה הלוקאלית בקלות בלי התקנות של postgresql. כדי לגשר בין הפער של שני הדיאלקטים וכדי לדאוג לאבסטרקציה, נשתמש ב־ORM המוביל עבור פייתון כרגע – SQLAlchemy.
  4. לצורכי מיגרציה, נשתמש ב־Alembic.

אם יעלה צורך בטכנולוגיות נוספות, נכניס אותן תוך כדי תוך התייעצות עם הקהילה.

מה שיעורי הבית של השבוע?

לפתור 3 “טיקטים” – באגים, הצעות לפיצ’ר, שיפור ארכיטקטוני או כל דבר שאתם מרגישים שאתם יכולים לתרום למערכת.

הדרישות מכל טיקט שכזה:

  1. גודל סביר. בבקשה אל תפתחו ואל תעודדו הצעות כמו “להוסיף favicon”. יש לכם בסך הכל שלושה טיקטים לפתור השבוע – לא יהיו עוד שיעורי בית. בואו נרים יחד משהו מכובד.
  2. לפחות טיקט אחד של פיצ’ר לכל אדם – מתוך 3 הטיקטים שלכם, 1 לפחות צריך להיות הוספת יכולת למערכת.
  3. מותר יותר מ־3 טיקטים – תמיד אפשר לתרום עוד אם תרצו. זה נחמד לראות את הפיצ’רים שלכם באוויר.
  4. דברים מועילים שיביאו Value למערכת.

איך זה יעבוד?

התהליך עובד כך:

שלב ראשון: הגשת הצעה לטיקט

כל אחד יכול להגיש הצעה לטיקט כאן – תחת הקטגוריה “הצעות לטיקטים”.
פתחו אשכול חדש ובו כתבו בפירוט:

  1. מה ההצעה כוללת?
  2. איך אתם מתכוונים לממש אותה?
  3. אם היא כוללת שינויים בקוד: אילו שינויים? איפה הם יכנסו?
  4. אם היא כוללת שינויים במסד הנתונים: אילו שינויים?
  5. האם היא דורשת frontend? איך הוא יראה? ציירו mock.
  6. אילו טסטים יגרמו לטיקט להיחשב כ"עובד", ויאפשרו לנו לסגור את הטיקט ולהגדיר את המשימה כהושלמה?

כדי למנוע את היותי צוואר בקבוק, תצטרכו לצבור 5 לבבות על האשכול שלכם לפני שאסתכל עליו.
עזרו לעצמכם ולאחרים: הסתכלו על הצעות של חברים שלכם והצביעו להן אם אתם חושבים שהן הצעות טובות.
תרגישו בנוח להעיר ולהציע הצעות לשיפור ולגימור טוב יותר של הרעיון.

אחרי שצברתם 5 לבבות, פרסמו הודעה חדשה כתגובה לאשכול – “מבקש בדיקה”.
בשלב הזה אני אסתכל על האשכול ואאשר שהרעיון הוא רעיון טוב ושאפשר להתחיל לעבוד עליו.
בשלב הזה, פיתחו Issue ב־GitHub של הפרויקט עם כל הפרטים הרלוונטיים.

שימו לב: אם לא צברתם 5 לבבות תוך 72 שעות, האשכול ינעל ואנשים אחרים יוכלו להציע את אותו רעיון מחדש בצורה שונה. המנגנון הזה קיים כדי לא “לנעול” רעיונות לזמן בלתי מוגבל אצל אדם אחד.

שלב שני: כתיבת הקוד

איך תורמים קוד מבחינה טכנית?

  1. עשו fork לפרויקט, בעזרת הכפתור בפינה הימנית העליונה בעמוד הזה.
  2. עשו clone מתוך עמוד המשתמש שלכם (לא מעמוד הפרויקט!) בעזרת git clone url. לדוגמה: https://github.com/yammesicka/calendar.
  3. הוסיפו את ה־repo המקורי, כדי שתוכלו למשוך ממנו מידע כשהוא מתעדכן: git remote add upstream https://github.com/PythonFreeCourse/calendar. זה יאפשר לכל אחד לעבוד על ריפו בלתי תלוי משלו, אבל להיות מקושר לריפו שעליו כולם עובדים.
  4. אם עבר זמן מאז שעשיתם clone, עדכנו את הקבצים בפרויקט: git pull upstream develop.
  5. צרו בראנץ’ חדש. תתחילו בלעבור ל־branch שנקרא develop, ממנו יצאו הפיצ’רים שלנו: git checkout develop. אחרי שעשיתם את זה, התפצלו לענף חדש בו תכתבו את הקוד שלכם: git checkout -b branch_name. ה־branch_name אמור לתאר במילה או שתיים את הפיצ’ר/באג שעליו אתם עובדים. אם זה פיצ’ר, השתמשו בתחילית feature/ – לדוגמה, feature/add-events. תחיליות אפשריות נוספות: refactor/, bugfix/, /build. שימו לב שלא יאושר קוד שנוצר על ה־master/main/develop, ולא תינתן תמיכה בהעברת המידע לבראנץ’ חדש.
  6. כתבו את הקוד ואת הטסטים לקוד. ודאו שלא פגעתם ב־coverage של הפרויקט. הוסיפו דוקומנטציה ככל שיש בכך צורך.
  7. הוסיפו את הקוד בעזרת git add לקבצים הרלוונטיים, git commit עם הודעה מפורטת לפי Conventional Commits ואז git push. צרו Pull Request לפרויקט.
  8. כשאתם בוחרים לאיזה ענף לעשות Pull Request, בחרו develop. אל תשלחו PR־ים ל־main. להסברים לגבי שיטת העבודה הזו קראו כאן.

תרמתי קוד. מה עכשיו?

פתחו אשכול בפורום הזה (“בקשות ל־Pull Requests”) עם קישור ל־Pull Request שלכם, והמתינו ל־5 אנשים שקראו את הקוד שלכם ונתנו לכם לב.
קראו את הקוד שלכם לפני שליחת ה־PR, ומחקו קוד שמסומן בהערה והדפסות. ודאו שלא שכחתם typing ושדאגתם שהקוד שלכם נאה לקריאה ושהייבואים שלכם מסודרים בסדר הנכון.
אחרי שצברתם 5 לבבות, פרסמו הודעה חדשה כתגובה לאשכול – “מבקש בדיקה”.
בשלב הזה אני אסתכל על ה־PR ואאשר שהקוד הוא טוב, או אבקש שיפורים. אם הקוד טוב, אאשר אותו ואעשה לו deploy. את השינויים שהכנסתם תוכלו לראות באתר שכתובתו תפורסם בהמשך, ויריץ את המערכת שלנו.
מזל טוב, תפרתם טיקט :slight_smile:

גילוי נאות

זו פעם ראשונה שאני עושה את הטירוף הזה, ולכן הפורמט עתיד להשתנות בכל שלב שהוא.
אני ממליץ לכם לזנק על הפרויקט כמה שיותר מוקדם, כדי לא להתקע בלי לבבות או עם טיקטים מסובכים מדי (מאוד כיף לעבוד על פרויקט בתחילת דרכו).

ההודעה פה היא wiki, כך שכולכם יכולים לערוך אותה. השתמשו בזה כדי להוסיף תשובות לשאלות נפוצות.

בבקשה אל תפנו אלי בפרטי עם שאלות. כל מי שסיפרתי לו על הרעיון הזה אמר שאני חולה נפש ולנהל 40 ג’וניורים זה רעיון גרוע בכל קנה מידה. אני מאמין שכשיש חניכים אדירים עם קהילה מדהימה זה אפשרי.
זה הזמן שלכם לתת כתף לחברים לקהילה (ולי) ולעזור ליצור פה מוצר מדהים.

בואו נגרום לזה לקרות :slight_smile:

22 לייקים

בהצלחה לנו! אנחנו יכולים!

8 לייקים

האם הלוח שנה מוגדר כלוח שנה עברי?

לייק 1

כיוון שהפרויקט הוא Open Source גלובלי, שפת הפרויקט היא אנגלית וברירת המחדל היא לוח שנה לועזי.
נשמע לי נהדר לאפשר בחירה ביניהם בהגדרות, זה נשמע כמו רעיון מצוין לפיצ’ר.

לייק 1

מה מייחד את הלוח שנה שלנו מהקיימים בשוק?
או שהמטרה היא לא לייחד אלא להתנסות בעבודה צוות?

לייק 1

בגדול את מחליטה מה מייחד אותו, אני חושב שזה חלק מהיופי בפרויקט.

אולי הלוח שלנו יאפשר לשים slot־ים לפגישות, ויאפשר לנו ליצור מערכת ניהול תורים?
אולי הוא יאפשר למשתמש להכניס CSS ולהחליט איך יראה לוח השנה שלו?
אולי הוא יהיה הלוח היחיד שתומך בהמרה ללוח המאיה?

זה ביידיים שלכם :slight_smile:

כשאומרים פיצ׳ר, מה הוא כולל?
לדוגמה ברעיון של מתן אפשרות לבחירת לוחות שנה שונים (לועזי, עברי וכד׳), האם הפיצ׳ר כולל רק קוד או לדאוג לכל המסביב(ייבוא הלוחות השונים, הפרונט שמשתנה בעקבותם וכד׳ וכו׳?

אני אשמח להצטרף לעיצוב הממשק הכללי של המערכת, זה גם בטיקט לעשות? או שזה כבר יש מולך ים?

את יכולה לנסות לזקק מהרעיון שלך משהו שאנחנו קוראים לו בתעשייה MVP, או Minimum Viable Product. מינימום דברים שאת צריכה לעשות כדי שזה יהיה פיצ’ר עובד שיהיה אפשר להראות שעשית את זה, זה עובד עבור המשתמש וסימנת V על המטרה.

כרגע הכל יתנהל בטיקטים כיוון שאני מוצף בפניות. אם נראה שהמצב נהיה טוב יותר עם הזמן נעביר משימות ל־offline.

לייק 1

שאלה -
למה לא לעשות CLONE על הMAIN REPO ולעבוד עליו עם בראנצ’ים שונים?

לא בטוח שהבנתי את השאלה.

למה לעשות FORK ואז CLONE,
ולא ישירות CLONE מעמוד הפרויקט ועל גבי הCLONE הזה לעשות את כל הBRANCHES

לייק 1

ככה נהוג.
זה מאפשר לי לא לתת לכם גישות כתיבה לפרויקט (צריך כאלו לצורך פתיחת PR־ים על חלק מה־branch־ים).
ר’ גם How to make a clean pull request

מגניב,
ושאלת עניין אחרונה - מה עומד מאחורי הבחירה עם הלעשות לבבות פה בפורום ולא REVIEW בPR עצמו?

הנחתי שאנשים ירגישו יותר בנוח להתנסח ולהצביע בפלטפורמה מוכרת

3 לייקים

שאלה נוספת, מקווה שלא מעיק:
אמרנו לעשות בראנץ’ מdevelop
ברגע זה main נמצא 10 commits קדימה מdevelop -
עדיין לעשות בראנץ’ מdevelop?

לייק 1

כן :slight_smile: זו בעיה שלי ואני אשלם עליה אח"כ, אבל חשוב להקפיד על עבודה נכונה

אתה יכול להוריד את הקוד ממיין לדבלופ בבקשה?

אני רואה שיש פער של כ-50 קומיטים בין הבראנצ’ים main ו-develop, ובבראנץ’ develop יש קבצים כמו config.py.example שראיתי התייחסות מצד ים לעבוד לפיהם/איתם.
האם אנחנו אמורים לעדכן את הקבצים לוקאלית מהבראנץ’ develop במקום main/לעשות מרג’ בין הבראנצ’ים או שאני פשוט מפספס משהו?

בדיוק רשמתי בקבוצת טלגרם, כן צריך למשוך כרגע מDEVELOP בשביל להשתמש במה שכולנו עובדים עליו כרגע.

4 לייקים