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

כדי לתת מה שהספריה נותנת, חייבים להשתמש בקריאה לפונקציות של מערכת ההפעלה.
בלינוקס העניין היה פשוט יחסית: קטע הקוד המקומי (native code) הוא מינימלי ביותר ומסתמך על inotfiy. הAPI שלו מאוד פשוט אבל הוא לא תומך בהאזנה ריקורסיבית ולכן רוב הקוד כתוב בג’אווה ונועד להוסיף יכולת לקבלת ארועים על ספריות באופן ריקורסיבי (צפיה בתת ספריה על כל בניה).

בחלונות העניין הפוך, קריאת המערכת ReadDirectoryChangesW תומכת בהאזנה ריקוסיבית, אבל השימוש בה מורכב ברמות שלא יאמנו והתיעוד של מייקרוסופט מחורבן ביחס ישר למורכבות הAPI. ולכן על חלונות רוב הקוד כתוב בC++ (כי אין דרך פשוטה להתממשק אל הAPI המקומי מג’אווה) אבל קוד הג’אווה הספציפי לחלונות פשוט מאוד.

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

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

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

נודע לי מאותו משתמש שמישהו ביצע fork לספריה והוסיף לה תמיכה בMac.
פניתי אליו ונראה שהוא יצטרף לפרוייקט וישלב את התוספת שלו בקוד (שנכתב כך שיהיה קל מאוד להוסיף תמיכה במערכות הפעלה חדשות), ואולי גם יעזור עם באגים אחרים.

JNotify התעורר.

13 תגובות ל “JNotify 0.92”

  1. אריה ISRAEL Windows Vista Google Chrome 4.0.249.78 כותב/ת

    ב-C# החיים יותר קלים, אפשר להשתמש באובייקט FileSystemWatcher שיש לו ממשק נוח:
    http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(VS.85).aspx

  2. עמרי ISRAEL Windows 7 Mozilla Firefox 3.6 כותב/ת

    גם בג’אווה, מאוד קלים – פשוט משתמשים בJNotify :)

  3. ישראל ISRAEL Windows XP Mozilla Firefox 3.0.17 כותב/ת

    מהמידע והתוכן הכלול במאמרך ניתן להכיר את הספריה, אך לא להנות מהשימוש בה, פשוט כי אין במאמר זה קישור להורדת הקוד…
    לנוחות המחפשים הנוכחים והעתידיים, אני מצרף את הקישור להורדה, אליו הגעתי דרך הקישור למאמרך הקודם בנושא זה: http://sourceforge.net/projects/jnotify/?315

  4. עמרי ISRAEL Windows 7 Mozilla Firefox 3.6 כותב/ת

    עדכנתי את הלינק, תודה.

  5. שחר ISRAEL Windows Vista Mozilla Firefox 3.6 כותב/ת

    נראה שבג’אווה 7 תהיה תמיכה בקבלת הודעות על שנויים במערכת הקבצים (באמצעות המחלקה java.nio.file.WatchService).

  6. עמרי ISRAEL Debian GNU/Linux Mozilla Firefox 3.0.6 כותב/ת

    שחר, זה נכון – אבל:
    1. לא ברור מתי תצא ג’אווה 7 (ועם הסיפור של אורקל, לא ברור שהיא תצא בכלל).
    2. אל תתפוס אותי במילה, אבל אני חושב שWatchService לא יתמוך בהאזנה ריקורסיבית על ספריות.

  7. יונתן אורלב ISRAEL Windows XP Mozilla Firefox 3.0.5 כותב/ת

    עמרי, זה מרשים מאוד.

    יש לי הצעה: למה שלא תכין תוכנית “Hello World” פשוטה המדגימה את הספרייה? למשל תוכנית עם מסך פשוט (אפילו console application) שמספקים לו ספרייה כארגומנט, ואז כל פעם שנכתב קובץ לספרייה יופיע “נוצר הקובץ X”, או “שונה הקובץ X”, או “נמחק הקובץ X בספרייה Y” וכ’.

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

    מה דעתך?

  8. עמרי ISRAEL Windows 7 Mozilla Firefox 3.6 כותב/ת

    יונתן, רעיון טוב, רק שכבר עשיתי את זה, רק צריך לעדכן את התיעוד.
    אתה יכול להריץ את הספריה ככה:
    java -Djava.library.path=. -cp jnotify-0.91.jar net.contentobjects.jnotify.JNotify [DIR]
    זה יעקוב אחרי השינויים לDIR ויציג אותם (או הספריה הנוכחית אם DIR לא מוגדר).

  9. יונתן אורלב ISRAEL Windows XP Mozilla Firefox 3.0.5 כותב/ת

    תודה עמרי, אני אבדוק את זה.

  10. יונתן אורלב ISRAEL Windows XP Mozilla Firefox 3.0.5 כותב/ת

    אה, עוד משהו: אני חושב שהמקום הכי טוב לציין איך רואים דוגמת ה- Hello World הוא קובץ ה- README, כי אני מניח שזה הקובץ הראשון שאנשים קוראים (או אמורים לקרוא בכל אופן). אתה יכול להכין קובץ בשם Example.txt ולהפנות אליו בקוץ ה- README.

  11. יונתן אורלב ISRAEL Windows XP Mozilla Firefox 3.0.5 כותב/ת

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

  12. עמרי ISRAEL Windows 7 Mozilla Firefox 3.6 כותב/ת

    לא, כמו שאמרתי – רק צריך לעדכן את התיעוד.
    קובץ הREADME בCVS כבר מכיל את הדוגמא, וזה יכנס בגרסא הבאה (שתכלול גם תמיכה במק וכנראה גם תמיכה בJVM שרץ ב64 ביט על חלונות).

  13. יונתן אורלב ISRAEL Windows XP Mozilla Firefox 3.0.5 כותב/ת

    אוקיי.

השאר תגובה

FireStats icon ‏מריץ FireStats‏