יש ארוחות חינם?

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

הקורס האחרון בתואר

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

סודוקו

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

פוסט עדכון שכזה

לא יצא לי לכתוב יותר מדי לאחרונה, אז הנה פוסט עדכון.
בשלושת החודשים האחרונים אני עובד על FireStats, כמו שאני בטוח שאפשר היה לשים לב מאחוז הפוסטים הגבוה בנושא.
FireStats התחיל כנסיון לשפר את Counterize, שדי קפא על שמריו, והפך לפרוייקט בפני עצמו די מהר, כשהבנתי שהקוד של Counterize הוא בעייתי למדי.
למי שלא בעניינים, FireStats זו מערכת סטטיקסטיקות לאתרי אינטרנט, שהתחילה כפלאגין לוורדפרס, אבל גדלה ועכשיו תומכת במדיה-ויקי, דרופל, טראק גרגריוס ובדפי PHP כלשהם באופן כללי. המערכת תומכת בריבוי שפות, וכבר יש תרגומים לספרדית, צרפתית והולנדית, וכמובן עברית ואנגלית – שנתרמו על ידי משתמשים.
למעשה למדתי תכנות ווב בPHP, Javascript, HTML וCSS תוך כדי שפיתחתי את FireStats, עד אז לא ממש התעסקתי בתכנות ווב.
הפרוייקט מצליח, מקבל תגובות חיוביות, ומורד די הרבה – הגרסא האחרונה הורדה מעל 1000 פעמים, וסך הכל יש קצת יותר מ3000 הורדות.

במהלך אותם שלושה חודשים, גם לקחתי את הקורס מבוא לבינה מלאכותית בפתוחה, קורס מהנה למדי עם הרבה תרגילים תכנותיים, אבל היה לי מעט מדי זמן להשקיע בו – עקב כמות הזמן שהשקעתי בFireStats. עשיתי את המבחן בקורס לפני כמעט שבועיים, ואני מצפה לציון בקרוב, בתקווה שהוא יהיה מספיק טוב.
באותו נושא, הסימסטר אני לוקח את רשתות ב' – שזה הסימסטר האחרון שהוא מועבר בפתוחה (הוא אוחד עם רשתות א' לקורס רשתות אחד, שמזכה ב6 נקודות זכות במקום 4+4, כמו שני הקורסים היוצאים), ואת תכנות מתקדם בשפת ג'אווה.
את תכנות מתקדם בשפת ג'אווה לקחתי כדי לנוח קצת, אני לא ממש צריך ללמוד אותו, אחרי הכל – אני מתכנת בג'אווה מ99 – אבל חשבתי שזה יכול להיות נחמד לקחת איזה קורס שאני יודע כבר :).

ביום שישי שעבר נודע לי ממשתמש של FireStats על hcoop, מעין קופרטיב של אכסון אתרים שמופעל על ידי גיקים, בשביל גיקים. הגשתי מועמדות מיד.
אותו סופש היה סופ"ש מחורבן במיוחד, מרובה הפסקות חשמל, מה שהדגיש את הצורך בפתרון אכסון אמיתי לאתרים שלי – ובעיקר לFireStats.
ביום ראשון התקבלה המועמדות שלי לאחר התקופה הסטנדרטית של יומיים, והתחלתי להעביר את האתר.
יום שני לקחתי חופש מחלה, אחרי שהשפעת המעיקה העיקה יותר מדי, וניצלתי אותו כדי לעבוד על האתר החדש.
העסק היה די קשה כי בניגוד למה שאני רגיל, למכונה ההיא לא היתה לי גישת root, אבל סך הכל קיבלתי את כל התמיכה שאני צריך מhcoop.
בתהליך למדתי להתקין את trac, שהוא התקנה לא טרוייאלית גם אם יש גישת root, כמשתמש רגיל, רק כדי לתת פרספקטיבה, מדובר בתהליך של כמה שעות, בו מקמפלים את פייתון, את subversion, ועוד אי אלו רכיבים שדרושים לtrac, ומתקינים אותם בספרית הבית.
אחרי יום יומיים זה עבד, ואז התחלתי לעבוד על subversion, ששוב הסתבר כהתקנה קשה במסגרת המגבלות של האתר.
אתמול, בשישי בצהריים – אחרי לא מעט עבודה, הרמתי את האתר לאוויר והעסק נראה מתפקד למדי, למרות קריסה אחת לא מוסברת של שרת הטראק.

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

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

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

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

וורד

ביום שני יש לי מבחן במבוא לבינה מלאכותית.
למרבה הצער המבחנים לדוגמא שמורים בפורמט DOC שלא נפתח טוב באופן-אופיס, ולכן אני נאלץ לפתוח אותם מתוך חלונות שרץ בVMWARE.
שמתי לב למשהו משעשע במקצת בוורד:
כשאני שומר קובץ, הוא מתכונן לשמור אותו ברקע:
stupid_word.png
מה אתה מתכונן? פשוט תשמור ברקע!

N המלכות

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

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


על טלפון, ADSL ורוחב פס.

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

סוף עונת המבחנים

היום היה המבחן בפרולוג, לא היה קשה במיוחד.
המבחן הזה סוגר את עונת המבחנים שלי הסימסטר.
תחושת החופש ממחוייבות שמתלווה לפרק הזמן שבין הסימסטרים היא חסרת מחיר ממש, כיף ללמוד בפתוחה, אבל זה לא קל ללמוד ולעבוד בו זמנית, ופרק הזמן שבין הסימסטרים ממש מרגיש כמו חופש גדול  – למרות שבדרך כלל  הוא חופש רק מהלימודים, ולא מהעבודה.
הפעם, לפחות בחלק מהתקופה, החופש שלי יהיה מוחלט – מחרתיים אני טס לקרנבל בברזיל לשבועיים.
הכל התחיל כשחבר בעבודה אמר, ככה כדרך אגב, "תראה איזה זול הכרטיס הזה לברזיל!".
החופש האחרון שלי (שלא למטרת לימוד למבחן, זה לא חופש), היה בקיץ 2003, לחוף המערבי בארצות הברית, שנתיים וחצי לחוצות ונטולות חופש עברו מאז, ככה שמיד חשבתי לעצמי שזו יכולה להיות הזדמנות יפה לשבור את התבנית. למחרת כבר הזמנתי כרטיס טיסה, עוד כמה ימים עברו, והבנתי שטעיתי בתאריכים של המבחנים שלי (הייתי בטוח שהמבחן בפרולוג היה אמור להיות ב22.2, ושהוא אחרון, אבל הסתבר לי שב22 היה אמור להיות המבחן באלגוריתמים, וב27 המבחן בפרולוג), מה שקצת הלחיץ אותי:
התקשרתי לפתוחה וביקשתי להקדים את המבחנים, ל16.2 ול22.2, הכל עבר חלק, למרות שהיו כמה ימים של אי וודאות עד שקיבלתי אישור סופי על השינוי, ועכשיו שהמבחנים מאחורי, הטיסה לפני.
לא היה לי יותר מדי זמן לתיכנונים, אבל אני מרגיש מוכן לגמרי.
לא ברור לי אם אני אוכל לעדכן פה בשבועיים וחצי הקרובים, אבל נשתדל. 🙂

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

one down, one to go

המבחן באלגוריתמים היה, ונקווה שלא יהיה שוב.
הבא בתור, פרולוג, ואז אני חוגג את סוף הסימסטר בקרנבל בברזיל.