מערכת רישום חניכים

שלום לכולם,

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

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

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

השלב הראשון היה עבודת מחקר קצרה. ביררתי מה התכונות שאנשים צריכים בתוכנה, מה הם מרגישים שחסר להם, מה הם היו מתים שיהיה ואין, מה יש וצריך לעבוד טוב יותר וכו’…

עלו המון רעיונות מצוינים והתחלתי בעבודה. הרעיון ההתחלתי שלי היה לפתח משהו דומה למה שכבר קיים, אבל וובי (ברשת), כדי שיהיה זמין, מיד, בלי התקנה, מכל מקום בעולם. זכיתי לעבוד עם כל מני טכנולוגיות, בינן PHP, JS, HTML5 ועם כל מני תכונות שהן כ”כ חדשות שבקושי יש להן תיעוד (והמון פוטנציאל!!!) כמו למשל Blob, או הפרמטר download בתגית a (שמעניין מתי פיירפוקס כבר יישמו אותו!).

בשלב כלשהו התחלתי לעבוד על החיבור בין הקוד שלי לווב סרוויס של השומר הצעיר, דבר שעשה לי חררה כי (ואני לא מאשים אותם) הם עובדים עם Windows Server, .NET, MSSQL וכל אותם דברים שאני כ”כ אוהב.
זמן עבר, נגמרת השנה, ולא ניכנס לפרטים אבל בחרתי לעבור לתנועה אחרת, ואני עובר עם הקוד שלי. אבל למען האמת אני אשמח אם גם השומר הצעיר ישתמשו במערכת, או כל תנועה כחולה אחרת שמקדמת את האינטרסים שלי, ולכן החלטתי להפוך את המיזם לקוד פתוח מן השורה. כלומר שאני אפתח את הקוד לתנועה בה אהיה פעיל, וכל שאר התנועות מוזמנות לקחת את הקוד ולעשות בו כרצונן.

כמובן שנשאלה השאלה תחת איזה רישיון אני מפיץ את הקוד. אז בקצרה התשובה היא BSD.
ולא בקצרה, חשבתי להשתמש ברישיון GPL הנפוץ, אבל חיפוש קצר באינטרנט נתן לי כמה נקודות למחשבה, ואתם מוזמנים לקרוא גם.

כמובן שהקוד היום מאוד מלוכלך, אז אני אשמח מאוד לביקורת (בונה!) או לתרומות קוד: https://github.com/Ddorda/Rishum-Khanikhim.
כמו־כן אתם מוזמנים להתנסות במערכת הדמו שהרמתי בכתובת: http://shmutz.co.il (פרטים: user / password).

נ”ב – כרגע אני עובד על להמיר את המערכת אל mysqli PDO. אם מישהו רוצה לעזור לי להבין את ההבדלים אני אשמח.

שבת שלום,
דור :)

Be Sociable, Share!

8 thoughts on “מערכת רישום חניכים

  1. המערכת נראית לא רע, ואני בטוח שגם למדת רבות במהלך הכתיבה שלה. בכל מקרה, יש לי מספר השגות על הבחירות הטכנולוגיות שלך:
    • מצד אחד, בחרת להחליף מערכת מבוססת תוכנה מקומית שמבוססת על dotnet, ומצד שני אתה משקיע כדי להפוך את אותה המערכת למתקדמת מאד עם שימוש בטכנולוגיות חדשניות ועשוי לאבד את אמון המשתמשים כשתכריח אותם לשדרג את הדפדפן העתיק במחשב שלהם. לדעתי מערכת כזו צריכה להיות תואמת לאחור ככל האפשר כך שגם משתמשי אינטרנט אקספלורר 6 או 7 יוכלו לעשות שימוש כלשהו בה, אם כי זו נראית לי דרישה סבירה להגביל את היכולות המתקדמות שלהם במידה שתאימות מולם תדרוש הרבה יותר מידי עבודה.
    • אתה באמת צריך להשתמש בטכנולוגיות חדשניות דוגמת <a download>? אני לא בטוח עד כמה בכלל התכונה הזו נחוצה, ועובדה שהצלחנו להסתדר לא רע בלעדיה שני עשורים בערך. כנ”ל לגבי יכולות מתקדמות נוספות שעדיין לא נכנסו לתקן. אני לא חושב שצריך לרוץ קדימה כמו עיוורים אם שוברים תאימות מול דפדפנים מגרסאות קודמות או משתמשים במפרטים שעדיין לא גובשו כתקן כי הם עלולים להשתנות בעתיד והשימוש בהם ישבר אם לא תנהל אחריהן מעקב מסודר ותעדכן את הקוד שלך בהתאם.
    • אני לא בטוח אם הייתי בוחר בעצמי לפתח מערכת חדשה מאפס על תשתית של PHP ולא משהו מודרני יותר, אבל בכל מקרה אם אתה הולך על PHP כדאי מאד שתשתמש בספריות עדכניות כלומר למשל ב־PDO במקום ב־mysql/mysqli.
    • אני לא בטוח אם אין מוצר מדף שיבצע את הצרכים שלך. מה שאתה מימשת נראה כמו מערכת לניהול כוח אדם, ואני די בטוח שיש כמותה מערכות רבות ברשת.
    • ממליץ לתת לפרויקט ב־github שם קצת יותר פשוט, ורצוי גם שהתוכן שלו יהיה באנגלית. בכל זאת, אתה יודע, יש סיכויים שאנשים שאינם בהכרח דוברי עברית יתעניינו בפרויקט הקטן שלך.

    ReplyReply
  2. @תומר
    * אני מבין מה עומד מאחורי המחשבה על IE6/7. מבחינתי אדם שיכל להתקין את התוכנה על המחשב יכול גם לשדרג את הדפדפן שלו.
    * מצאתי את download מאוד אפקטיבי. אני משתמש בו רק במקום אחד ככה שאי תאימות לדפדפנים אחרים לא פוגעת במערכת. הסתדרו בלעדיה בדרך עקומה רצח, חבל שהחבר’ה של פיירפוקס מתעקבים ליישם את התכונה הזאת.
    * נתקלתי ב־PDO רק אחרי היום, אני אקרא על אודותיה ונראה.
    * כן, באמת הסתבכתי קצת עם השם… אם יש לך רעיון יצירתי אני אשמח.

    ReplyReply
  3. לעניין הרישיון: אני מכבד את שיקוליך, בתור מי שכתב את הקוד, אבל כדאי שתסתמך על משהו קצת יותר רציני.

    נימוקים שמופיעים במאמר:

    1. GPL מפחיד משתמשים ארגוניים:

    אני מניח שאותם משתמשים ארגוניים נמנעים משימוש בוורדפרס, דרופל וגו’מלה.

    2. טענה נגד הרעיון שרישיון GPL יכול (בסכמת רישיון כפול) לאפשר לחייב משתמשים לשלם.

    אבל אתה ממילא לא רוצה להשתמש ברישיון כפול.

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

    4. דוגמת KHTML: אם הרישיון שלו היה מתירני, אפל לא הייתה כלל טורחת לשחרר את קוד המקור. מה שהוא כותב שם די שגוי.

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

    ReplyReply
  4. @צפריר: קודם־כל תודה על התגובה המושקעת. קיוויתי לתגובה בנוגע לרישיון.
    אני יוצא מתוך נק’ הנחה עם רישיון BSD אני יכול לעשות הכל עם הקוד וכולם יכולים לעשות אתו כרצונם.
    מה יתן רישיון GPL? למה אתה ממליץ להשתמש בו?

    דור.

    ReplyReply
  5. האמת היא שבתחומי ה-Web צריך גם להזכיר את AGPL (כמובן שאני מדבר על AGPL3). שהרי יש הרבה דרכים להשתמש בתוכנה ללא הפצתה. בתחומי הווב פיצול של תוכנה הוא דבר נפוץ מאוד (לדוגמה: התרגומים לעברית של וורדפרס, שהוחזקו בענפים נפרדים למשך זמן רב). יכול להיות שרישיון מהסוג של AGPL יכול לעודד את המשתמשים לא לשמור את השינויים שלהם לעצמם.

    ReplyReply
  6. קודם כל, רציתי להגיד כל הכבוד על היזמה והביצוע.
    אני לא מתכנת ל-Web, אז אין לי הערות טכניות לגבי הפרויקט, אבל אני מצטרף לדבריו של צפריר לגבי רישיון ה-AGPL.

    החשיבות שלו היא שהוא דואג גם לזכויות של מי שמשתמש בתוכנה דרך הדפדפן שלו, ולא רק של מי שמתקין ומתחזק את התוכנה בצד שרת.

    אני לא חושב שזה מקומי לנסות להשפיע על בחירת הרישיון שלך, אבל אני מקווה מאוד שאתה לא מבסס אותה אך ורק על המאמר עליו קישרת.

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

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

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

    ואני אישית, מעדיף GPL, בדיוק בגלל שהוא מגן גם על החופש של הבאים בתור.

    דוגמה יותר מפורסמת היא חברת Rovio מפתחת Angry Birds. הם לקחו את מנוע Box2D כדי ליצור את המשחק הפופולרי שלהם, אבל אפילו לא טרחו לעמוד בדרישה המינימלית של הרישיון ולא נתנו קרדית למפתחי הספרייה.

    עד שאחד המפתחים של Box2D קם במסיבת עיתונאים של Rovio והעמיד אותם על מקומם.

    בקיצור – מפתחים שרוצים לתרום בגלל האידאולוגיה שלהם, יתרמו גם לפרויקטי GPL, ומפתחים שלא מעוניינים לא ישנו פתאום את דעתם רק בגלל שהמוצר משרת את החברה שבה הם עובדים.

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

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

    עוד נקודה מוזרה אצל כותב המאמר היא שהוא משתמש ב-Apple כדוגמה.
    אבל Apple היא בדיוק הדוגמה למה כדאי להשתמש ב-GPL ולא BSD.
    היא משחררת רק את הקוד שהיא חייבת.
    למעשה, היא החליפה את הקומפיילר שבו משתמשים לבניית יישומי iOS רק כדי לברוח מהחובה לשתף את השינויים שלה עם הקהילה.

    אבל מה שהכי מעצבן אותי ב-Apple, זה שהם לקחו ליבה חופשית, את BSD עצמה, ויצרו בעזרתה את אחת המערכות הכי מגבילות והכי פוגעניות, הן כלפי משתמשים והן כלפי מפתחים, שאי פעם ראיתי – את iOS.

    ולבסוף, הטענה שיותר אנשים ישתמשו בתוכנה שלך אם תשתמש ברישיון BSD:
    זה כבר תלוי בסוג התוכנה שלך.

    במקרה של תוכנה כמו המערכת שלך, ששימוש בה פירושו אדם שעובד עם התוכנה, הרישיון לא משנה.
    אין שום חובה מיוחדת כלפי משתמשים ב-GPL לאומת רישיונות קוד פתוח אחרים.

    מצד שני, מי שכותב ספרייה, או רכיב תוכנה כלשהו, שהשימוש בו פירושו לבנות תוכנה אחרת שמתבססת עליו, אכן יש הבדל בין רישיונות מתירניים ל-GPL.

    אבל כאן עולה השאלה: מה חשוב לך יותר – שהתוכנה תהיה חופשית, או שיהיו יותר עותקים שלה בחוץ.
    אני תוהה כמה דיווחי באגים Rovio באמת שלחו למפתחי Box2D…

    ועוד נקודה לסיום:
    אין לי כוח לחפש את הקישור עכשיו, אבל בזמנו קראתי ראיון עם מהנדס בכיר במחלקת embedded של Intel.
    הוא סיפר, בין היתר, שהסיבה ש-IBM, Intel, Google ואחרות יכולות כולן להשקיע מליארדי דולרים מידי שנה בפיתוח Linux ללא חשש, היא דווקא שבזכות רישיון GPL כולן מרגישות בטוחות.

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

    GPL מיישר את שדה המשחק ומאפשר לכולן לעבוד ביחד.

    כאמור, זה ה-“שנקל” שלי (קצת יותר משני סנט, אבל זה המטבעה שיש ארץ :-P)

    בכל אופן, בהצלחה בהמשך הפיתוח!

    ReplyReply
  7. @לב – סחטיין על התגובה הרצינית. אני אקרא עוד קצת על AGPL ונראה, אולי באמת אעבור.

    דור.

    ReplyReply
  8. @לב – קראתי לא מעט על AGPL, ונראה שאני לא עומד לאמץ אותו.
    אם הבנתי נכון, שימוש ב־AGPL ֳחייב לשחרר את הקוד של כל דבר שנוגע בקוד שלי + לפרסם כל שינוי שעושים לקוד, וזה ממש לא מתאים לגישה שלי לגבי קוד פתוח או ספציפית לפרוייקט שלי, שיצטרך לעבור כל מני התאמות כדי לגשת לנתונים מסוימים באירגונים שונים.

    חשבתי אולי להשתמש ב־GPL שהוא יותר מתירני בקטע הזה, אבל אז ראיתי שהוא לא מתאים לקוד PHP, אלא רק לקוד בינארי. נו טוב, חבל.

    אז בינתיים הקוד נשאר ב־BSD. יש הצעות אחרות?

    ReplyReply

Leave a Reply

Your email address will not be published. Required fields are marked *