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

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

Facebook Comments

דואר זבל

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

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

Facebook Comments

צב ריגול

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

בתמונה, צב ריגול במרוץ צביחים:

צביח בתמונה אופיינית

Facebook Comments

בקבוקומט.

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

bakbukomat

Facebook Comments

וסלטה לאחור

הסיבה שהקטנתי את מחיצת השורש היא כדי לפנות מקום ולהעביר אותו לשליטה של LVM.
LVM זה קיצור של Logical volume managment, וזה מאפשר שינוי דינמי של מחיצות (בלי איתחול), וכן יצירה של מחיצות לוגיות שפרושות על פני כמה דיסקים שרוצים.
נשמע טוב, מחיצה אחת גדולה של 350GB, שתכיל את כל הסרטים והמוסיקה שלי.
אז עשיתי את זה, הקטנתי, הגדלתי, פירמטתי, יצרתי, הזזתי, העתקתי ואז הכל עבד.
היתה לי מחיצת ענק של 350GB, שנפרשה על פני שני הדיסקים.
ואז חשבתי, מה אם אחד מהדיסקים ימות?
מסתבר שהתוצאה של דבר כזה, היא שכל המידע במחיצה, גם בחלקים שעל הדיסק שלא ניזוק, ילך קפוט.
הסיבה לזה היא שחתיכות ממערכת הקבצים יעלמו, וגם, אופציונלית, חתיכות מקבצים שעל הדיסק שלא ניזוק. כנראה אפשר לשחזר את זה, אבל ברור שהנזק יהיה גדול יותר מאשר אם המחיצה לא תשב על שני דיסקים.
אז החלטתי לבצע סלטה כמעט מלאה לאחור :
העתקתי, הזזתי, יצרתי, פירמטתי, הגדלתי והקטנתי ועכשיו המצב די דומה למה שהיה לפני כל הסיפור, כל מחיצה על דיסק בודד. אבל יש לי את הגמישות לשחק איתן כן הן תחת LVM.
אז מה יצא מכל הסיפור?
עכשיו אני מכיר את LVM יותר טוב, ובנוסף בזבזתי די הרבה זמן.
בהזדמנות אני אכתוב הסבר על איך מקטינים מחיצות על דיסק קיים בלינוקס.

Facebook Comments

והוא חזר!

קהל נכבד,
המשימה הוכתרה בהצלחה.
פיירפנג הקטין את מחיצת השורש, ולא ל30 ג'יגה, אלא ל20! (אופס).


Filesystem Size Used Avail Use% Mounted on
/dev/hde2 20G 6.0G 15G 30% /

מחר הסבר על למה זה היה טוב, ואיך זה הלך.

Facebook Comments

מעשה לולינות אימתני

קהל נכבד, קהל נכבד.
השרת שלפניכם, יבצע מהלך מסוכן מאוד, מהלך בעל השלכות פוטנציאליות קטסטרופליות.
לא רבים השרתים שיסכימו לבצע מהלך שכזה, מהלך מסוכן שעליו לא חלמתם גם בחלומותיכם האפלים ביותר!
פיירפנג האמיץ, הולך להקטין את מחיצת השורש שלו, מ180 ג'יגה בייט, טבין ותקילין (או כ200 ג'יגה בית, בלשון העם), לסך של 30 גי'גה בייט בלבד!
כל זאת, אם ירצה אלוהי השרתים, תוך ביעוט (boot) אחד בלבד.
אפילו השרתים של גוגל לא מעיזים לבצע דבר כזה, ולהם יש אחים רבים רבים שיתפסו את מקומם בלי להחסיר פעימה אם משהו ישתבש.
שימו לב, שימו לב, פיירפנג מתכונן. זה המצב לפני התרגיל המסוכן.


# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hde2 186G 6.0G 180G 4% /

את המצב אחרי תדעו אם פיירפנג יצליח לבצע את המהלך.
החזיקו אצבעות usb, הנה זה מתחיל!

Facebook Comments

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

אני תלמיד נצחי של האוניברסיטה הפתוחה, אני לומד שם מתחילת שנת 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), ממש חוכמת קדמונים.
לדעתי הקורס הזה יהיה מעניין, אני אעדכן בהמשך.

Facebook Comments