זה היה מלחיץ

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

והתפרסם שם עוד פוסט שלי.

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

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

ולגבי ההיסטוריה – נראה.

שחר

על מדיניות בניית API

תוכנות מחשב מבצעות את מה שהן מבצעות באמצעות פניות למערכת ההפעלה. מערכת ההפעלה חושפת פעולות לביצוע באמצעות “API”, או “Application Program Interface”.

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

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

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

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

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

בחלונות, מצד שני, יש פקודה בודדת שמבצעת את שתי הפעולות בבת אחת. הפקודה מקבלת את שם התוכנה להרצה, ומבצעת אותה בצורה מיידית. פשוט. כאשר אני מסביר את התהליך על לינוקס לאנשי חלונות, אני מקבל עיקום אף מלווה במשפט “זה הרבה יותר פשוט בחלונות”.

ההבדלים נהיים הרבה יותר מהותיים כאשר רוצים לבצע דברים יותר מתוחכמים. למשל, אם התהליך החדש צריך להיות אב לקבוצת תהליכים חדשה, בחלונות הדבר יתבטא אך ורק בעוד פרמטר שיימסר לפקודה הרלוונטית, בעוד שבלינוקס נצטרך להוסיף פקודה שלישית בין ה-fork ל-exec. לפקודה בחלונות, CreateProcess, יש עשרה פרמטרים, וניתן להניח שאם היינו צריכים את כל הפונקציונליות שהפקודה מאפשרת בלינוקס היינו צריכים כעשר פקודות במקום האחת.

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

בפרט, כחלק מהמרת rsyncrypto לעבודה על חלונות, אני צריך להריץ תוכנה אחרת, תוך שאני מפנה את היציאה של אותה תוכנה לתוכנה שלי. הדרך לעשות את זה היא באמצעות ייצירת pipe (צינור נתונים), וחיבורו ליציאה של התהליך לפני שהופכים אותו ל-gzip, התוכנה שאותה רוצים להריץ.

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

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

התהליך הזה:
– ארוך יותר
– פחות עמיד בהפרעות באמצע
– מבצע כמות גדולה של העתקות מיותרות
וכל זאת כי אין דרך להפריד בין ייצירת תהליך חדש לבין הרצת פקודה.

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

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

הסיבה שאני מעלה את זה היא הטענה הסטנדרטית של אנשי חלונות על “כל ה-Wizards” שאין בלינוקס. התחושה שלי היא שהתסריטים האילו כולאים את המתכנתים בתוך קופסה, וככל שהתסריטים עצמם קלים יותר, כך קשה יותר לצאת מהקופסה. אני משוכנע שיש אנשים שזה טוב להם, אבל אני, באופן אישי, אוותר.

שחר

הלכה קלטת גיבוי

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

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

לא הייתי מעלה את זה בכלל, אם לא היתה עולה השאלה האמיתית – הקלטת נכשלה רק כאשר הגענו לשלב ה-Verify, שלב שרוב האנשים מוותרים עליו! שלב רישום הנתונים הסתיים, ללא כל דיווח על שגיאות או בעיות.

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

שחר

עוד ספיח אחרון

התפרסמו ברשת הקלטות וידאו של המצגות מ-Wineconf. איכות מזוויעה, ולא שומעים את הדיון.

מי שמעוניין לשמוע אותי מסביר על מה זו מסיבת חתימת מפתחות של PGP, אבל, מוזמן להוריד:
http://wineconf.geldorp.nl/
החלק שבו אני מדבר הוא
הקטן ביותר (וגם הכי פחות רלוונטי לכנס).

שחר

WineConf 2005

השבוע חזרתי מהכנס. היה ממש מוצלח.

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

הכנס הכיל אוכלוסיה מעורבת. חוץ מהקהל הרגיל של האקרי Wine ו-ReactOS (שהגיעו השנה במתכונת מצומצמת מהרגיל), הכנס היה בסמיכות גיאוגרפית וקלנדרית לכנס של Samba. כתוצאה מכך, כל צוות הליבה של סמבה גם היה שם (כולל אנדרו טריג’דל, שהצליח להרגיז כל כך את לינוס לפני כמה זמן).

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

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

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

קבוצה אחת שלא הגיעה השנה היתה Cedega (לשעבר Transgaming). כנראה ש-Wine כבר לא כל כך מעניין אותם.

בכנסים כאלו זה השיחות הלא רשמיות שחשובות באמת. במסעדה יצא לי לדבר עם אלכסנדר על התמיכה בעברית בתוך CrossOver Office. הוא אמר שאם זה זז ל-DLL נפרד, הוא יהיה מוכן ש-Code Weavers יקמפלו את ה-DLL בעצמם. מה שמטריד אותו במיוחד בשימוש ב-ICU זה התלות של ICU בספריות של C++, תלות שהוא לא מוכן להכניס ל-CrossOver Office. אלו חדשות ממש טובות, מכיוון שאין לי את האמצעים להוציא את ICU מהמשוואה, אבל אני כן אנסה להעביר את התמיכה בעברית ל-DLL שנקרא “Uniscribe”, שם היא נמצאת בחלונות ממילא. זה יאפשר לכולם לקמפל את התמיכה בעברית ל-Wine הרגיל, אבל להפיץ אותה רק למי שמעוניין.

ועד כאן הדיווחים מהשטח. בחזרה לביצה.

שחר

דיווחים מהירים מהשטח

אני נמצא בכנס Wineconf. כמה דיווחים מהירים:
בשיחה עם אלכסנדר, הדיקטטור הנאור של wine, הוא שאל אותי למה אני רוצה שיהיה לו מפתח PGP, והסברתי בגדול. השיחה משם התנהלה בערך כך:
אלכסנדר: “כך תדע שזה באמת אני שדוחה את התיקונים שלך ל-Wine”
שחר: “אבל אתה לא דוחה אותם, אתה שולח אותם ל-/dev/null”
א: כן, אבל כך אתה יודע שזה אני ששולח אותם לשם.
ש: למרבה הצער, לא היו הרבה תיקונים לדחות בזמן האחרון.
א: זה באמת חבל. אני אוהב לדחות את התיקונים שלך.

כמו כן, הכנס עצמו דיי מעניין. כרגע מדגימים את השיפורים ב-ReactOS, ואתמול היה הרבה דיון על איך סמבה ו-Wine יכולים לשתף פעולה.

עוד דיווחים בהמשך….

שחר

טיפ קטן למנויי אורנג’ הנוסעים לחו"ל, ומסקנות מעניינות באבטחת מידע

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

איך אני יודע? שני אירועים גרמו לי להחשף לעובדה זו:
1. לאחותי יש בית קטן ומאוד חמוד שם.
2. כנס Wine Conf 2005 מתרחש עוד מעט, ומהווה סיבה מצויינת לנסוע לראות את האחיין שליאחותי.

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

זה הולך כך. תסלחו לי שהמספרים לא לגמרי מדוייקים:
חיוג ישיר החוצה מצרפת – בין 5.5 ל-7.5 שקלים לדקה, תלוי במפעיל.
שיחה נכנסת לצרפת – כ-1.5 שקלים לדקה.
באמצעות השירות של אורנג’ – 2.5 שקלים לדקה.

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

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

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

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

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

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

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

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

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

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

שחר

עוד מישהו חושב כמוני על עיתונות ועיתונאים

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

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

In order to begin a conversation with one – and it should be viewed as a conversation, rather than a pitch – it is vital that you are well-acquainted with the interests of the blogger.

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

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

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

מי שקורא את קווי היסוד של ההנחיות ליחצ”נים רואה שם כמה דברים מאוד נכונים. בין השאר הם אומרים:
1. אל תסתירו את הסיבה שאתם מתקשרים, או מי הלקוח שלכם.
2. ייצרו עניין באמצעות שיחה, לא באמצעות מילים מפוצצות.
3. לא להפציץ בהמון בקשות לפירסום.

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

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

הצעות לכללים נוספים יתקבלו בברכה.

שחר

על שעון קיץ וחלונות

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

והפעם – למה חלונות לא תומך בשעון קיץ, ואיך לתקן את המעוות.

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

שחר

Bear