תכנות חלונות – ייקס.

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

פרולוג וצבים אחרים.

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


parent(popo, koko).
parent(mima, koko).
parent(baba,mima).
parent(bebe,mima).
female(bebe).
female(mima).
male(koko).
male(popo).
male(baba).

אחרי שהם הוגדרו, אפשר לשאול דברים כמו:


?- female(koko)
no

?- male(koko).
yes

parent(X,koko).
X = popo ? ;
X = mima ?
yes

חוקים נראים ככה:


mother(Mother,Child) :-
female(Mother),
parent(Mother,Child).

father(Father,Child) :-
male(Father),
parent(Father,Child).

grandfather(Grandfather,Child) :-
make(Grandfather),
parent(Grandfather,X),
parent(X,Child).

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

אחרי שהחוקים האלו הוגדרו אפשר לשאול דברים כמו:


?- father(X,koko).
X = popo

?- mother(mima,X).
X = koko

ריקורסיה משמשת תפקיד מאוד מרכזי בפרולוג.
הנה הגדרה של אב קדמון:


predecessor(X,Y) :-
parent(X,Y).

predecessor(X,Y) :-
parent(Z,Y),
predecessor(X,Z).

הקורא המשקיע ינסה להבין מה קורה פה.
הנה דוגמאות לשאלות כאלו:

?- predecessor(baba,koko).
true

?- predecessor(baba,X).
X = mima
X = koko

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