המטרות של השבוע הזה:
- ללמד עבודה עם כלים של החיים האמיתיים.
- ליצור גיבוש אחרון של הקהילה שסיימה את הקורס.
- לתת לכם פוש קטנטון נוסף לתיק העבודות.
- להשתמש בכל מה שלמדנו עד עכשיו.
- ליצור כולנו משהו, ביחד.
מה עושים?
בונים ביחד אפליקציה (אתר) ללוח שנה – כשהרעיונות באים מכם.
אני בטוח שיחד נוכל לבנות משהו גדול, מגניב, חינמי ו־Open Source־י.
הפרויקט שנבנה יופץ תחת רישיון Apache2 (שימוש חופשי לכל מי שרוצה, בלי תנאים), ויפורסם ב־GitHub.
התרומות יהיו דרך Pull Requests שיעשו ל־GitHub של הפרויקט.
איפה הקוד של הפרויקט?
כאן.
באילו טכנולוגיות נבנה את הפרויקט?
כאמור, אנחנו בונים את הפרויקט ביחד.
אני הולך להיות ה־CTO של הפרויקט לצורך העניין – אקבל את ההחלטות הטכנולוגיות אחרי התייעצות עם כולכם.
אני אשתדל לתרום גם קוד איפה שיהיה צורך.
- שפת התכנות המרכזית תהיה Python, כמובן. יהיה גם HTML/CSS/JS – מקווה שיהיו עוד אנשים חוץ ממני שיתנדבו לכתוב (זה בסדר ללמוד תוך כדי) כדי שלא כל העומס יפול עליי.
- ה־Framework הפיתוחי שנשתמש בו לצורך יצירת האתר הוא Fast API. זה framework שמאוד דומה ל־Flask והוא יחסית חם בשוק. יהיה מעניין (גם עבורי) לבחון אותו.
- אנחנו נשתמש במסד נתונים רלציוני. בשרת הוא יהיה PostgreSQL, ובסביבה הלוקאלית שלכם הוא יהיה SQLite. זה יאפשר לנו להקים את הסביבה הלוקאלית בקלות בלי התקנות של postgresql. כדי לגשר בין הפער של שני הדיאלקטים וכדי לדאוג לאבסטרקציה, נשתמש ב־ORM המוביל עבור פייתון כרגע – SQLAlchemy.
- לצורכי מיגרציה, נשתמש ב־Alembic.
אם יעלה צורך בטכנולוגיות נוספות, נכניס אותן תוך כדי תוך התייעצות עם הקהילה.
מה שיעורי הבית של השבוע?
לפתור 3 “טיקטים” – באגים, הצעות לפיצ’ר, שיפור ארכיטקטוני או כל דבר שאתם מרגישים שאתם יכולים לתרום למערכת.
הדרישות מכל טיקט שכזה:
- גודל סביר. בבקשה אל תפתחו ואל תעודדו הצעות כמו “להוסיף favicon”. יש לכם בסך הכל שלושה טיקטים לפתור השבוע – לא יהיו עוד שיעורי בית. בואו נרים יחד משהו מכובד.
- לפחות טיקט אחד של פיצ’ר לכל אדם – מתוך 3 הטיקטים שלכם, 1 לפחות צריך להיות הוספת יכולת למערכת.
- מותר יותר מ־3 טיקטים – תמיד אפשר לתרום עוד אם תרצו. זה נחמד לראות את הפיצ’רים שלכם באוויר.
- דברים מועילים שיביאו Value למערכת.
איך זה יעבוד?
התהליך עובד כך:
שלב ראשון: הגשת הצעה לטיקט
כל אחד יכול להגיש הצעה לטיקט כאן – תחת הקטגוריה “הצעות לטיקטים”.
פתחו אשכול חדש ובו כתבו בפירוט:
- מה ההצעה כוללת?
- איך אתם מתכוונים לממש אותה?
- אם היא כוללת שינויים בקוד: אילו שינויים? איפה הם יכנסו?
- אם היא כוללת שינויים במסד הנתונים: אילו שינויים?
- האם היא דורשת frontend? איך הוא יראה? ציירו mock.
- אילו טסטים יגרמו לטיקט להיחשב כ"עובד", ויאפשרו לנו לסגור את הטיקט ולהגדיר את המשימה כהושלמה?
כדי למנוע את היותי צוואר בקבוק, תצטרכו לצבור 5 לבבות על האשכול שלכם לפני שאסתכל עליו.
עזרו לעצמכם ולאחרים: הסתכלו על הצעות של חברים שלכם והצביעו להן אם אתם חושבים שהן הצעות טובות.
תרגישו בנוח להעיר ולהציע הצעות לשיפור ולגימור טוב יותר של הרעיון.
אחרי שצברתם 5 לבבות, פרסמו הודעה חדשה כתגובה לאשכול – “מבקש בדיקה”.
בשלב הזה אני אסתכל על האשכול ואאשר שהרעיון הוא רעיון טוב ושאפשר להתחיל לעבוד עליו.
בשלב הזה, פיתחו Issue ב־GitHub של הפרויקט עם כל הפרטים הרלוונטיים.
שימו לב: אם לא צברתם 5 לבבות תוך 72 שעות, האשכול ינעל ואנשים אחרים יוכלו להציע את אותו רעיון מחדש בצורה שונה. המנגנון הזה קיים כדי לא “לנעול” רעיונות לזמן בלתי מוגבל אצל אדם אחד.
שלב שני: כתיבת הקוד
איך תורמים קוד מבחינה טכנית?
- עשו fork לפרויקט, בעזרת הכפתור בפינה הימנית העליונה בעמוד הזה.
-
עשו clone מתוך עמוד המשתמש שלכם (לא מעמוד הפרויקט!) בעזרת
git clone url
. לדוגמה:https://github.com/yammesicka/calendar
. -
הוסיפו את ה־repo המקורי, כדי שתוכלו למשוך ממנו מידע כשהוא מתעדכן:
git remote add upstream https://github.com/PythonFreeCourse/calendar
. זה יאפשר לכל אחד לעבוד על ריפו בלתי תלוי משלו, אבל להיות מקושר לריפו שעליו כולם עובדים. - אם עבר זמן מאז שעשיתם clone, עדכנו את הקבצים בפרויקט:
git pull upstream develop
. -
צרו בראנץ’ חדש. תתחילו בלעבור ל־branch שנקרא
develop
, ממנו יצאו הפיצ’רים שלנו:git checkout develop
. אחרי שעשיתם את זה, התפצלו לענף חדש בו תכתבו את הקוד שלכם:git checkout -b branch_name
. ה־branch_name אמור לתאר במילה או שתיים את הפיצ’ר/באג שעליו אתם עובדים. אם זה פיצ’ר, השתמשו בתחיליתfeature/
– לדוגמה,feature/add-events
. תחיליות אפשריות נוספות:refactor/
,bugfix/
,/build
. שימו לב שלא יאושר קוד שנוצר על ה־master/main/develop, ולא תינתן תמיכה בהעברת המידע לבראנץ’ חדש. - כתבו את הקוד ואת הטסטים לקוד. ודאו שלא פגעתם ב־coverage של הפרויקט. הוסיפו דוקומנטציה ככל שיש בכך צורך.
- הוסיפו את הקוד בעזרת git add לקבצים הרלוונטיים, git commit עם הודעה מפורטת לפי Conventional Commits ואז git push. צרו Pull Request לפרויקט.
- כשאתם בוחרים לאיזה ענף לעשות Pull Request, בחרו develop. אל תשלחו PR־ים ל־main. להסברים לגבי שיטת העבודה הזו קראו כאן.
תרמתי קוד. מה עכשיו?
פתחו אשכול בפורום הזה (“בקשות ל־Pull Requests”) עם קישור ל־Pull Request שלכם, והמתינו ל־5 אנשים שקראו את הקוד שלכם ונתנו לכם לב.
קראו את הקוד שלכם לפני שליחת ה־PR, ומחקו קוד שמסומן בהערה והדפסות. ודאו שלא שכחתם typing ושדאגתם שהקוד שלכם נאה לקריאה ושהייבואים שלכם מסודרים בסדר הנכון.
אחרי שצברתם 5 לבבות, פרסמו הודעה חדשה כתגובה לאשכול – “מבקש בדיקה”.
בשלב הזה אני אסתכל על ה־PR ואאשר שהקוד הוא טוב, או אבקש שיפורים. אם הקוד טוב, אאשר אותו ואעשה לו deploy. את השינויים שהכנסתם תוכלו לראות באתר שכתובתו תפורסם בהמשך, ויריץ את המערכת שלנו.
מזל טוב, תפרתם טיקט
גילוי נאות
זו פעם ראשונה שאני עושה את הטירוף הזה, ולכן הפורמט עתיד להשתנות בכל שלב שהוא.
אני ממליץ לכם לזנק על הפרויקט כמה שיותר מוקדם, כדי לא להתקע בלי לבבות או עם טיקטים מסובכים מדי (מאוד כיף לעבוד על פרויקט בתחילת דרכו).
ההודעה פה היא wiki, כך שכולכם יכולים לערוך אותה. השתמשו בזה כדי להוסיף תשובות לשאלות נפוצות.
בבקשה אל תפנו אלי בפרטי עם שאלות. כל מי שסיפרתי לו על הרעיון הזה אמר שאני חולה נפש ולנהל 40 ג’וניורים זה רעיון גרוע בכל קנה מידה. אני מאמין שכשיש חניכים אדירים עם קהילה מדהימה זה אפשרי.
זה הזמן שלכם לתת כתף לחברים לקהילה (ולי) ולעזור ליצור פה מוצר מדהים.
בואו נגרום לזה לקרות