JavaRush /בלוג Java /Random-HE /איך מבחן ראיון הפך לספריית קוד פתוח
Roman Beekeeper
רָמָה

איך מבחן ראיון הפך לספריית קוד פתוח

פורסם בקבוצה
שלום לכולם, קהילת JavaRush! קצת על עצמי: אני עובד כמהנדס תוכנה ב-Java מאז אביב 2016. אני אוהב לבוא לכאן ולפתור בעיות שלא פתרתי במהלך הלימודים. היום אספר לכם על הספרייה - השוואת תמונות . זוהי ספריית קוד פתוח הזמינה לציבור ב- GitHub . כיצד הפכה משימת מבחן בראיון לספריית קוד פתוח - 1מטרת המאמר הזה היא להעביר שיצירת מוצר קוד פתוח היא לא רק בזבוז זמן, לא! מדובר בחוויה עשירה הנמשכת מצדדים שונים, כאשר יש לך שליטה על כל תהליך הפיתוח, כאשר אתה צריך להתעמק בכל פרט. קוד פתוח הוא העולם סביבך. אני לא צוחק, במהלך קיומה של הספרייה הזו, יצרתי קשר עם אנשים ממדינות שונות, כמו ארה"ב, הודו, סין, מצרים, רוסיה, גרמניה, אוקראינה, שוודיה, ניו זילנד, נורבגיה. כלומר, מדובר בניסיון אמיתי בפיתוח משותף, מציאת פשרות, בדיקת קוד וכדומה. זו הייתה ההקדמה, עכשיו נתחיל לפי הסדר:

מִבְחָן. תחילת אוגוסט 2017

הכל התחיל מזה שהיה לי ראיון עם אחת החברות, כשהשלב הראשון היה כתיבת משימת מבחן. המשימה הייתה לכתוב קוד שישווה בין שתי תמונות בגודל זהה, ימצא את ההבדלים ביניהן, יקבץ אותן ויצייר מלבן סביבן. יש את התמונה הראשונה:
איך משימת מבחן בראיון הפכה לספריית קוד פתוח - 2
יש תמונה שניה:
איך משימת מבחן בראיון הפכה לספריית קוד פתוח - 3
היה צורך למצוא את ההבדלים ולהקיף אותם כפי שמוצג להלן:
איך משימת מבחן בראיון הפכה לספריית קוד פתוח - 4
כפי שאתה יכול לראות, יש הבדל בשדה שם משתמש , אשר מוקף בעיגול במשולש אדום. תיאור מפורט יותר של המשימה . החלטתי שאני רוצה לעשות את זה לא רק מנקודת מבט פונקציונלית, אלא גם יפה, כדי שזה לא יהיה מביך. לשם כך, החלטתי שאפרסם את זה כפרויקט ב- GitHub . הרבה זמן רציתי ללמוד GitHub ולצבור ניסיון בעבודה איתו. לאחר מבט חטוף, מצאתי שיהיה טוב להוסיף שירותי צד שלישי לניתוח איכות קוד, יצירת כיסוי קוד עם בדיקות וכו'. הוסיפו את הכלים הבאים:
  • Codacy - איכות קוד. באמת שווה לשים לב אליו.

  • Travis CI הוא כלי CI (איטגרציה מתמשכת) שבונה פרויקט, מפעיל בדיקות ומספר אם הפרויקט נבנה בהצלחה. לדוגמה, אם אחד המבחנים לא עבר כתוצאה מהשינויים החדשים, הוא יגיד שבניית הפרויקט לא הצליחה ויצבע אותו באדום.

  • סרבל הוא כלי שמראה איזה אחוז מהקוד שלך מכוסה בבדיקות.

  • BetterCode Hub הוא כלי נוסף לניתוח איכות הקוד. דבר מאוד שימושי שלא רק יגיד לך מה רע, אלא גם יתאר למה ויתן קישור לספר שבו תוכל לצבור ידע על כך.

לכל אחד מהשירותים הללו יש תג משלו עם תוצאות נתונים, כגון פרויקט כיסוי קוד. ואת התג הזה אפשר להוסיף בתיאור הראשי של הפרויקט - קובץ README. המשימה הייתה מוכנה - שלחתי אותה לסקירה. לאחר הסקירה, מיד, מזיכרון רענן, יצרתי בעיה של Github עבור כל הערה , שתעזור לי לשפר את הפרויקט הזה. לא הייתה משימת שיפור מהמעסיק, אז שכחתי מהפרויקט לזמן מה...

נתיב הספרייה. יולי 2018

סֵמֶל

בשלב מסוים גיליתי שאנשים מרבים לבקר בפרויקט שלי, וזה קורה כל יום. נדהמתי מכך, ועוד יותר נדהמתי מכך שכעבור כשנה נוצרה ISSUE, בה נכתב שמעצב גרפי מסוים מציע לי ליצור לוגו לפרויקט שלי. הם אומרים שהוא אוהב לעשות זאת עבור מוצרי Opensource ויעשה זאת בחינם. התחלנו לשתף פעולה. הוצעו כמה אפשרויות, אבל בסופו של דבר הגענו לזה:
איך משימת מבחן בראיון הפכה לספריית קוד פתוח - 5
הייתי אז עדיין צעיר ולא הכרתי את קהילת ה-opensource, ועצם הצעה כזו הייתה פרועה בעיני ושאלתי, למה הוא עושה את זה? על כך הוא ענה: "לולז הו, פשוט כי אני אוהב לתרום לפרויקטים בקוד פתוח. סוג של עניין של מטרות חיים..." ( הנושא עצמו נמצא כאן ). אז הרגשתי לראשונה כמה זה נהדר כשאנשים שונים מוצאים אותך דרך פרויקטים של קוד פתוח ומציעים דברים כל כך מעניינים!

פגם צד ראשון

שמתי לב שמפתח מסוים מסין יצר לי בעיה , בה הוא תיאר שהוא מצא פגם בעבודה של הספרייה, שאם אתה משתמש בתמונות גדולות, אתה מקבל StackOverflowError . האיש החליט לנצל ומצא טעות. ולא סתם מצאתי את זה. וגם כתב עליה. זהו שלב חדש בפיתוח הספרייה. יתר על כן, לא ממש היה לי פתרון. בשלב מסוים אחד הבודקים מרוסיה הציע פתרון. אבל זה היה גולמי ולא עשוי כמו שצריך ולא קיבלתי את זה. וכשהגיע הזמן לפרסם את הספרייה ב-Maven Central, היה צורך לפתור משהו עם הפגם הזה; לא רציתי לפרסם אותו יחד איתו. בנוסף, היה פגם נוסף שמעולם לא תיקנתי והוא גם הביא הרבה אי נוחות.

שימוש בשורת הפקודה. סתיו 2018

השלב הבא בפיתוח היה תקשורת עם שוודי (רנאטו אתאידס), שרצה להשתמש בספרייה דרך שורת הפקודה ולשם כך היה צורך לבצע כמה שינויים ותוספות. שוב נדהמתי והופתעתי מזה. אחרי שהגרפיקאי כתב לי, ההפתעה שלי הייתה קצת פחות, אבל עדיין מאוד גבוהה. המחשבה שמישהו באמת צריך את הקוד שלי מילאה אותי ברגשות מדהימים. הוא ביצע את השינויים הנדרשים והכין את הקוד. ערכתי סקירת קוד, כלומר, הסתכלתי על השינויים, היו הערות ששונו והשינויים כבר היו בספרייה. ייעדתי את השינויים האלה כגרסה v2.0. השלב הבא היה הוספת הספרייה ל-Maven Central - מאגר מרכזי, ממנו ניתן להוריד אותה לכל פרויקט ולהשתמש בה כתלות. באותו זמן לא היה לי מושג איך עושים את זה, אפילו מרחוק, אז אמרתי שאני עסוק וביקשתי ממנו לבצע את כל השלבים הדרושים להקמת הפרויקט. אבל התברר שזה לא מספיק בכלל והדבר הכי מעניין היה ליצור קשר עם Maven Central. זה כאב פראי, שלא יכולתי לעשות בפעם הראשונה, ורק ב-15 באפריל הצלחתי לפרסם את הפרויקט ב-Maven Central. זה לא היה קל, אבל כמו שאחרים אוהבים לומר, "כל מי שרוצה לפרסם את קוד הג'אווה שלו עובר את זה". לפני שפרסמתי את הספרייה, סוף סוף מצאתי מה ואיך לעשות עם ליקויים שהיו כבר הרבה זמן והוצאתי גרסה חדשה v2.0.2 , בה הודיתי לכל מי שעזר לי, תיאר מה ואיך עשיתי .

פרסום ב-Maven Central. אביב 2019

כדי לפרסם ספרייה בצורה נכונה, אתה צריך להיות בעל הבנה טובה של ניהול גרסאות וכיצד להגדיר גרסאות בצורה נכונה. אני אצמד לתכנית הזו:
  • XX.YY.BBBB , כאשר XX הוא עדכון גרסה מרכזי הכרוך בשינויים שאינם תואמים לקודם (לדוגמה, שינוי התוצאה החוזרת בשיטות);
  • YY הוא עדכון מינורי - שינוי פנימי או הרחבה שלא משנה מה זה BBBB - אלו ליקויים שתוקנו.
  • לדוגמה, גרסה 2.0.2 פירושה שהגרסה העיקרית היא 2, לא היו עדכונים קלים, ויש שני עדכונים לפגמים.
לאחר מכן, היה חשוב להבין כיצד להגדיר נכון groupId ו- artifactId . היה צריך לבחור אותם פעם אחת ולהשתמש בהם עוד יותר. והם מרכיבים את החבילה שבה הקוד מאוחסן. היה: ua.comparison.image עכשיו: com.github.romankh3.image.comparison וזה ברור יותר טוב, מכיוון שכולם יודעים שזהו פרויקט מבית GitHub וניתן למצוא אותו מאדם עם הכינוי romankh3. כשעשיתי את כל זה, הוצאתי גרסה חדשה v2.1.0 .

תקשורת עם השבדים. מאי 2019

לאחר שפרסמתי את הספרייה, שבדיה אחרת (מיקה Kytöläinen) שלחה לי מייל וביקשה מחברו לבצע שינויים בספרייה שלי. הוא אומר שהוא באמת צריך את זה והוא ישמח מאוד אם נעשה את זה ונעשה את זה מהר. כמובן, לא הייתי נגד השינויים הנדרשים. הוא הציע להוסיף תצורת עובי קו שמציירת מלבן. כאילו, עבור אלה שיש להם ראייה לקויה, זה יהיה שינוי שימושי. הכין את הקוד . לאחר שהוספתי עוד כמה שינויים, הוצאתי גרסה 2.2.0

תקשורת עם גרמני. מאי 2019

לאחר מכן, גרמני אחד יצר בעיה שבה הוא אומר שהוא רוצה להשתמש בה לבדיקה, אבל היא חסרה פונקציונליות. הוא הציע הרבה הצעות שהיו מאוד מעניינות, הוא הציע שבמקום להחזיר רק את התמונה המתקבלת עם התוצאה כתוצאה מהשוואה, להחזיר סט נתונים: מה הושווה, התוצאה (במידת הצורך) והמצב שבו יש יהיה MATCH, MISMATCH, SIZE_MISMATCH . אפילו ביצע את השינויים. אבל הם כלל לא לקחו בחשבון את הקוד הקודם ונעשו בחופזה. דחיתי אותם והצעתי לבצע אותם כראות עיניי. למרות זאת, הוא הגיב יותר והחלטתי שאעשה זאת בעצמי ואוציא גרסה חדשה. במקביל, Mika Kytöläinen הציעה פונקציונליות מעניינת נוספת - הוספת אזורים שלא ייכללו בהשוואה. זהו מקרה אמיתי. וכל זה שוחרר בגרסה 3.0.0

השתמש בפרויקט אמיתי

בסוף מאי כתב לי בודק אוטומציה מקייב שהתעניין בספרייה ורוצה להשתמש בה בפרויקט אמיתי שמכניס כסף. זו הייתה פריצת דרך! השימוש בו איפשהו בפרויקט חיות מחמד הוא דבר אחד, אבל השימוש בו בפרויקט אמיתי הוא עניין אחר לגמרי. דנו במה ואיך זה עובד. האפליקציה מאוד מעניינת: באפליקציה שלהם יש צ'קים מודפסים והיה צורך לבדוק שהצ'קים נוצרים לפי תבנית מסוימת והיא לא משתנה. אבל הייתה בעיה שסעיפים כמו תאריך ושעה תמיד השתנו והיה צריך להתעלם מהם. כבר הוספנו פונקציונליות כדי להתעלם מכמה תחומים, אבל התברר שזה עדיין גולמי מאוד לשימוש אמיתי ועדיין עבדנו יחד פוריות במשך כמה שבועות על זה. התוצאה הייתה שחרור גרסה v3.1.1

מציאת נישה

לאחר מכן, הבנתי שהנישה האמיתית של הספרייה שלי היא השימוש בה בבדיקות. לשם כך החלטתי למצוא איזשהו פורום לבודקים ולכתוב להם על כך כדי לקבל קצת פידבק ולהגדיל את התהילה. מצאתי פורום בשפה הרוסית ופרסמתי שם מאמר: ארגון תמונות בדיקה - השוואה בין שתי דומות . בו קיבלתי משוב אמיתי על הקוד והפונקציונליות, אותם יישמתי ושחררתי גרסה חדשה v3.2.0 , ולאחר מכן v.3.3.0 .

עַכשָׁיו

לספרייה יש כיום 60 כוכבים ב-Github ויש לה 33 מזלגות. אני חושב שזה מאוד מגניב בהתחשב בעובדה שלא קידמתי את זה בשום אופן למעט מאמר בפורום האוטומטיים. תודה לכל מי שקרא עד הסוף. למעשה התברר שזה מאמר ארוך בהרבה ממה שציפיתי. מאמר על איך לפרסם ספרייה ב-Maven Central. אם יש לך מה להוסיף תכתוב! אם יש לך משהו להציע לשיפור הספרייה, כתוב! אני אקרא הכל ואקדיש לזה זמן ראוי. כל מי שאהב את המאמר ומצא בו שימוש - דרג אותו וכתוב בתגובות. כמו כן, הירשם לחשבון github שלי romankh3 ראה גם מאמרים אחרים שלי:
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION