GUADEC 2014 – יומיים אחרונים

אוגוסט 10th, 2014 by yoseforb

בוקר טוב.

בשונה מהיומיים הראשונים שלי ב־GUADEC, היומיים האחרונים דווקא היו מהנים משהו. הקשבתי לשתי הרצאות (באחת נוספת הייתי מבלי להקשיב ;-)), דיברתי עם אנשים, שברתי את הארץ׳ שעל ה־Chromebook Pixel ואכלתי פיצה (כשרה) עם Carlos ו־Florian. התקנתי מחדש את ארץ׳.

Christian Hergert דיבר על Builder, ‏IDE עליו הוא עובד זה זמן מה בזמנו החופשי. בסוף ההרצאה הוא גילה שהוא מתעתד להתפטר מעבודתו ב־MongoDB כדי לעבוד על פיתוח Builder. אותי רק העובדה הזו הפתיעה, שאת ה־IDE עצמו ראיתי כבר לפני שנה. המשמעות היא שבתוך שנה לערך יהיה ל־GNOME סביבת פיתוח מאוד טובה, Christian הוא מפתח מאוד רציני.

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

14801258765_91d4d432d4_o

פרסומת למי עדן – צולם על ידי Jakub Steiner

אסיים בתודה לקרן GNOME, שמימנה אותי, יחד עם רבים נוספים. ותודה ל־Jakub Steiner על התמונה הזו. ואשמח אם מישהו יעזור לי בתעתוק שמות האנשים ברשומה זו.

בברכה,

יוסף אור

sponsored-badge-simple

GUADEC 2014

יולי 28th, 2014 by yoseforb

ערב טוב.

כאן מסתיים היום השני שלי ב־GUADEC, כנס משתמשי ומפתחי GNOME באירופה. הכנס החל יומיים לפני שהגעתי.

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

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

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

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

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

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

sponsored-badge-simple

נסיעה ל־GUADEC שבצרפת בצל המלחמה

יולי 21st, 2014 by yoseforb

ערב טוב.

רציתי לכתוב שאני נוסע ל־GUADEC, הכנס השנתי של מפתחי ומשתמשי GNOME באירופה, כמה שיהיה נחמד וכו׳. אך מי רושם בריש גלי שהוא טס לחו״ל כאשר בארץ מלחמה ? עוד אוסיף שהכנס יערך בשטרסבורג, צרפת, ובימים אלה די מסוכן להסתובב כיהודי ברחובות צרפת.

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

אך תושבי הדרום וחיילי צה״ל בראש. כעת בשעה 1:00 אזעקה במ״א בני שמעון, וחמש דקות מוקדם יותר, ב־00:55 נשמעו אזעקות בקריית גת ובמ״א חוף אשקלון, יואב, לכיש ושפיר. כך זה בדרום – מי שלא ישן במקלט, יאלץ להתעורר לאורך הלילה ולרוץ למקלט.

אצטט את דברי מח״ט הצנחנים, אל״מ אליעזר טולדנו, אמש לחייליו:

צנחנים!

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

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

לוחמים!

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

מדינת ישראל איננה עוד אפשרות, מדינת ישראל היא האפשרות היחידה!

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

הכו באויב, חזור והכה.
אל תניחו לו להרים את הראש!

שמרו זה על זה – צמד הברזל הוא הערובה להבטחה!
שמרו על רווחים גדולים, הירח עומד בשמיים ומביט בנו, האור יהיה רב.

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

הימנעו מכניסה לבתים בולטים אשר עלולים להיות פתיונות ממולכדים ומטרות נוחות לנ"ט.

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

לוחמים,

עם ישראל סומך עלינו, צה"ל סומך עלינו, נרדוף אויבינו ונשיגם ולא נשוב עד כלותם.

כבוד גדול להילחם עמכם.
בהצלחה!

„לוחמים, עם ישראל סומך עלינו, צה"ל סומך עלינו, נרדוף אויבינו ונשיגם ולא נשוב עד כלותם” - אני מבטיח, אנו סומכים עליכם !

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

רציתי להביא דברים שאמר מח״ט גולני, לאחר יום בו נפלו חיילים רבים מחטיבתו, אך לא מצאתי (ואם מישהו ימצא, שיביא ואוסיף).

גולני שלי

1:31 – נשמעה אזעקת צבע אדום במ״א שער הנגב.

לילה טוב לתושבי ישראל, שקט ככל האפשר לתושבי הדרום ולחיילי צה״ל !

בברכה,

יוסף אור

יישום תכנות מונחה עצמים בשפת C – ‏GObject

מאי 25th, 2014 by yoseforb

ערב טוב.

לשם שינוי, לא אכתוב על שינויים ב־GNOME, על אף שיש רבים כאלה, אלא קצת על מה שנמצא מתחת למכסה המנוע בפיתוח GNOME.

יישומי GNOME וספריות התכנה שלה כתובים ברובם בשפת C, ומבוססים כולם על ספרייה בשם GLib, הכתובה גם היא בשפת C.

GLib מחולקת למעשה לשלוש ספריות:

  • GLib – ‏ API למטרות כלליות, כמו מבני נתונים שונים, טיפול ב־UTF-8, טיפול במחרוזות ועוד רשימה ארוכה של כלים
  • GIO – קלט פלט על גבי VFS, למעשה API נוח לשימוש מעל POSIX, או טיפול בתקשורת בין תהליכים (D-Bus וכו׳)
  • GObject – ‏מימוש תכנות מונחה עצמים בשפת C, מספק API מאוד נוח מסביב

ברשומה זו לא אגע ב־API המסופק על ידי GObject או במימוש המדויק בספרייה זו, אלא אביא את הרעיון הכללי.

מימוש תכנות מונחה עצמים בשפת C

שם המשחק הוא שימוש נכון במצביעים.

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

struct A
{
        int dum;
};

אין כאן שום דבר מעניין. רק הגדרתי מבנה עם משתנה דמה.

struct A *a;

a = malloc (sizeof (struct A) * 1);
a->dum = 0;

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

a->dum = 0;

כאשר אני מנסה לאתחל את המשתנה dum מהמבנה A, המהדר מחשב מהכתובת המתקבלת (המצביע, המשתנה a) את המקום של המשתנה dum מתחילת המבנה (0, המשתנה מופיע בתחילת המבנה), משם מחשב את הגודל של המשתנה dum (גודל של משתנה int), וכך יודע עד לאיזו כתובת מופיע המשתנה dum. ובקיצור: המהדר מוצא את הכתובת המתחילה והכתובת המסיימת את המשתנה dum, ומאתחל את המקום לערך 0, כפי שהתבקש.

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

*((int *) a) = 5;

בשורה זו ^ התייחסתי למשתנה a כאל מצביע למשתנה מסוג int (במקום למצביע למבנה A), והשמתי את הערך ל־5.

בדיקה קצרה (להלן קוד הניתן להידור) תראה שאכן הכל כאן נכון ו„חוקי”:

#include <stdlib.h>
#include <stdio.h>
 
struct A
{
        int dum;
};
 
int main (int argc, char **argv)
{
        struct A *a;

        a = malloc (sizeof (struct A) * 1);
        a->dum = 0;

        *((int *) a) = 5;

        printf ("%d\n", a->dum);

        free (a);

        return 0;
}

כעת אנסה לעשות משהו מועיל יותר מהקוד הנ״ל.

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

ברור כעת כי למצביע למבנה B ניתן להתייחס גם כמצביע למבנה A, או אף למצביע למשתנה מסוג int.

להלן הקוד המשחק עם זה.

#include <stdlib.h>
#include <stdio.h>
 
struct A
{
        int dum;
};
 
struct B
{
        struct A a;
        int dum;
};
 
int main (int argc, char **argv)
{
        struct A *a;
        struct B *b;

        b = malloc (sizeof (struct B) * 1);
        b->a.dum = 1;
        b->dum = 2;

        a = (struct A *) b;

        printf ("b->dum: %d\n", b->dum);
        printf ("a->dum: %d\n", a->dum);
        printf ("a.dum: %d\n\n", *((int *) b));

        printf ("a-pointer: %p\n", a);
        printf ("b-pointer: %p\n", b);
        printf ("int-pointer: %p\n", (int *) b);

        free (b);

        return 0;
}

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

להלן קוד שכתבתי במיוחד לכך, מחולק לקבצים.

#ifndef ___A___
#define ___A___

typedef struct _A               A;
typedef struct _APrivate        APrivate;

struct _A
{
        APrivate *priv;
};

A *     a_new     ();
void    a_init    (A    *a);
void    a_free    (A    *a);

int     a_get_dum (A    *a);
void    a_set_dum (A    *a,
                   int   dum);

#endif
#ifndef ___B___
#define ___B___

#include "a.h"

typedef struct _B               B;
typedef struct _BPrivate        BPrivate;

struct _B
{
        A parent;
        BPrivate *priv;
};

B *     b_new     ();
void    b_init    (B    *b);
void    b_free    (B    *b);

int     b_get_dum (B    *b);
void    b_set_dum (B    *b,
                   int   dum);

#endif
#ifndef ___C___
#define ___C___

#include "b.h"

typedef struct _C               C;
typedef struct _CPrivate        CPrivate;

struct _C
{
        B parent;
        CPrivate *priv;
};

C *     c_new     ();
void    c_init    (C    *c);
void    c_free    (C    *c);

int     c_get_dum (C    *c);
void    c_set_dum (C    *c,
                   int   dum);

#endif

המימוש:

#include <stdlib.h>
#include <stdio.h>

#include "a.h"

struct _APrivate
{
        int dum;
};

A *
a_new ()
{
        A *a;

        a = malloc (sizeof (A) * 1);
        a_init (a);

        printf ("a_new\n");

        return a;
}

void
a_init (A *a)
{
        if (!a)
                return;

        a->priv = malloc (sizeof (APrivate) * 1);
        a->priv->dum = -1;

        printf ("a_init\n");
}

int
a_get_dum (A *a)
{
        return (a ? a->priv->dum : -1);
}

void
a_set_dum (A *a,
           int dum)
{
        if (a)
                a->priv->dum = dum;
}

void
a_free (A *a)
{
        if (!a)
                return;

        free (a->priv);

        printf ("a_free\n");
}
#include <stdlib.h>
#include <stdio.h>

#include "b.h"

struct _BPrivate
{
        int dum;
};

B *
b_new ()
{
        B *b;

        b = malloc (sizeof (B) * 1);
        b_init (b);

        printf ("b_new\n");

        return b;
}

void
b_init (B *b)
{
        if (!b)
                return;

        a_init (&(b->parent));
        b->priv = malloc (sizeof (BPrivate) * 1);
        b->priv->dum = -1;

        printf ("b_init\n");
}

int
b_get_dum (B *b)
{
        return (b ? b->priv->dum : -1);
}

void
b_set_dum (B *b,
           int dum)
{
        if (b)
                b->priv->dum = dum;
}

void
b_free (B *b)
{
        if (!b)
                return;

        a_free (&(b->parent));
        free (b->priv);

        printf ("b_free\n");
}
#include <stdlib.h>
#include <stdio.h>

#include "c.h"

struct _CPrivate
{
        int dum;
};

C *
c_new ()
{
        C *c;

        c = malloc (sizeof (C) * 1);
        c_init (c);

        printf ("c_new\n");

        return c;
}

void
c_init (C *c)
{
        if (!c)
                return;

        b_init (&(c->parent));
        c->priv = malloc (sizeof (CPrivate) * 1);
        c->priv->dum = -1;

        printf ("c_init\n");
}

int
c_get_dum (C *c)
{
        return (c ? c->priv->dum : -1);
}

void
c_set_dum (C *c,
           int dum)
{
        if (c)
                c->priv->dum = dum;
}

void
c_free (C *c)
{
        if (!c)
                return;

        b_free (&(c->parent));
        free (c->priv);

        printf ("c_free\n");
}

וכן תכנית קצרה העושה שימוש בקוד הנ״ל:

#include <stdlib.h>
#include <stdio.h>

#include "c.h"

int main (int argc, char **argv)
{
        C *c;
        B *b;
        A *a;

        c = c_new ();
        c_set_dum (c, 15);

        b = (B *) c;
        b_set_dum (b, 10);

        a = (A *) b;
        a_set_dum (a, 5);

        printf ("c: %d\n", c_get_dum (c));
        printf ("b: %d\n", b_get_dum (b));
        printf ("a: %d\n", a_get_dum (a));

        c_free (c);
        free (c);
        
        return 0;
}

נראה לי שההסבר למעלה מסביר מה בדיוק עושה הקוד (אם כי הוא כתוב בצורה רצינית ומסודרת יותר :-)).

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

valac main.c a.c b.c c.c && ./main

ברשומה הבאה אכתוב על מימוש ניהול זיכרון בשפת C, בשיטה פשוטה של ספירת הפניות, ובזו שאחריה אכתוב על השימוש ב־API של GObject.
אציין שהמימוש ב־GLib/GObject משוכלל ומסובך לאין ערוך מזה המוצג פה, המציג את הרעיון הכללי מאחור.

בברכה,

יוסף אור

GNOME Developer Experience Hackfest, 2014

מאי 4th, 2014 by yoseforb

בוקר טוב.

בבוקר יום שלישי האחרון טסתי לברלין, גרמניה, להאקתון פיתוח של GNOME, ‏Developer Experience, ‏2014.

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

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

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

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

ואמנם ביום הראשון כלל לא כתבתי קוד. במחשב ה־Chromepixel (אחד משישה שנתרמו לקרן GNOME, כדי לאפשר פיתוח תמיכה במסך מגע ובהבחנה גבוהה) שעמנואלה בשיא הביא לי לשימוש בכנס, הייתה מותקנת מערכת Chrome OS (מערכת שנראית מגניבה ממבט ראשון, אך חסרת כל שימושיות לאחד דקה או שניים – מערכת שהיא כולה דפדפן), מה שהביא אותי להתקין את פדורה 20, דבר שארך זמן כיוון שקצת מסובך להפעיל תמונה חיה במחשבים אלה. לאחר ששדרגתי ל־Rawhide המערכת נשברה, מה שגרר בזבוז נוסף של זמן בניסיון לתיקון המערכת.

ביום השני התקנתי מחדש את פדורה 20, ולאחר מכן התקנתי את GNOME 3.12 מהמאגרים של ריצ׳רד, במקום לשדרג ל־Rawhide. כך יכולתי לכתוב קוד ויחד עם זאת להשתמש בסביבה לא מיושנת מדי.

יצא שכתבתי טלאי אחד (קטן ופשוט) והכנסתי טלאי אחר ל־Git. כלומר לא באמת כתבתי קוד.

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

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

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

מעבר לזה היו כמובן דיונים נוספים, הרבה שכתבתו קוד, אך על אלה ניתן לקרוא ב־Planet GNOME :-)

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

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

כך ישראל נראית מהמטוס:

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

בברכה,

יוסף אור
sponsored-badge-simple

GNOME 3.13 – תחילת הפיתוח

אפריל 25th, 2014 by yoseforb

צהריים טובים.

חודש לאחר שחרור GNOME 3.12.0 ושבוע לאחר שחרור 3.12.1, בעוד מספר ימים תשוחרר גרסת הפיתוח הראשונה במחזור פיתוח 3.13/3.14.

אסקור השינויים שכבר נכנסו ל־Git, וחלק שעוד ממתינים ב־Bugzilla (כלומר קיימים טלאים אותם ניתן לנסות).

GTK+‎

כבר ב־Git

הדבר הראשון שהוכנס הוא הוספת תמיכה בבחירה מרובה ביישומון GtkListBox, תכונה שיישומים רבים ממתינים לה (למשל לקוח הדוא״ל Geary). הקוד הועתק פחות או יותר מ־GtkFlowBox. נכתב על ידי ‏Matthias Clasen.

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

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

new-file-chooser-dialog-recent

new-file-chooser-dialog-home

new-file-chooseer-dialog-enter-location

טלאים ממתינים ב־Bugzilla

כחלק מהעיצוב המתעתד להחליף את כל התפריטים (כך נראה) בתפריטים דמויי בועה (GtkPopover) עם פריטים מורכבים יותר, ‏Matthias Clasen כתב מימוש אפשרי. כך זה נראה (הסרטה מתוך הבאג) ניסיתי את זה בעצמי – זה די מדהים:

דבר נוסף, אותו ראיתי אתמול, הוא הוספת תמיכה להוספת יישומוני פעולה (כפתורים) ביישומוני דו שיח (GtkDialog), או בשורת הכותרת (GtkHeaderBar) או בתחתית תיבת הדו שיח, בהתאם להגדרות המשתמש (או: בהתאם להגדרות הסביבה). כך ב־Xfce כפתורי הפעולה יופיעו בתחתית תיבת הדו שיח, ואילו ב־GNOME 3 הכפתורים יופיעו בשורת הכותרת.

עד כה הדבר התאפשר באופן ידני ולא נוח, בקוד בלבד, וכעת הוא מתאפשר ישירות מקובץ ה־‎.ui ללא צורך לבדוק באופן ידני את ההגדרות בקוד.

פרטים ניתן למצוא בבאג 728846. גם תיקונים אלה נכתבו על ידי ‏Matthias Clasen.

מוקשים

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

מעטפת

הדבר העיקרי שבוצע הוא מיזוג הענף wayland לתוך ענף הפיתוח הראשי (master) במנהל החלונות mutter, מספר ימים לאחר מיזוג הקוד של Xwayland לתוך ענף הפיתוח הראשי של xserver. טרם הצלחתי להפעיל את GNOME על גבי Wayland.

דבר נוסף שראיתי הוא דווקא מאלעד אלפסה, הוספת צירופי מקשים (Supr+Home ו־Super+End) למעבר לשולחן העבודה הראשון והאחרון, בהתאמה.

יתכן ופספסתי דברים שהוכנסו ל־Git, ובטח דברים שממתינים ב־Bugzilla, אך כאן אנו בהחלט רואים רק את ההתחלה :-)

Developer Experience Hackfest – 2014

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

בברכה,

יוסף אור

GNOME 3.12 – סקירה

מרץ 28th, 2014 by yoseforb

ערב טוב.

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

מעטפת

  • נוסף מצב חיבור קווי לרשת, עם אפשרות להחליף בין פרופילי רשתות שונים
  • ניתן להוסיף פריטים לתפריט הנפתח, באמצעות קובץ התג „Actions” בקבצי ‎.desktop, להלן דוגמה מ־geary.desktop:

    Actions=Compose;
    [Desktop Action Compose]
    Name=Compose Message
    ...
    Name[he]=יצירת הודעה
    ...
    Exec=geary mailto:
    OnlyShowIn=X-Messaging Menu;Unity;

    gnome-shell-3-12-jumplist-geary
  • ניתן ליצור תיקיות מותאמות עם יישומים נבחרים באמצעות gsettings או באמצעות הממשק ב־GNOME Software. כיוון שבארץ׳ היישום אינו פועל, רק אפנה לרשומה של Matthias Clasen בנושא, וצילום מסך קטן (בכל זאת ניתן ניתן להתאמה באמצעות gsettings גם בארץ׳):
    gnome-shell-apps-folders
  • תמיכה בהבחנה גבוהה (ב־3.10 נוספה תמיכה ליישומים בלבד, לא למעטפת)
  • הפעלה מהירה יותר, עקב טעינת קובץ בינרי אחד במקום קבצי JavaScript רבים, כמו גם מעבר ל־mosjs24 והתייעלויות נוספות
  • הנפשה עם ריצוף חלונות:
  • הנפשה במעבר בין „הכול” ו”תדיר” בסקירת יישומים והנפשה בהתחברות (התקרבות)
  • ניווט בין חלונות בסקירה באמצעות המקלדת
  • התקדמות רבה בתמיכה ב־Wayland

יישומונים

  • עיצוב חדש ללשוניות (הצילום מרשומה קודמת):
  • שורת כותרת משולבת פקדים בתיבות דו־שיח (יישומון GtkHeaderBar):
    color-chooser-dialog-headerbarfont-chooser-dialog-headerbarfile-chooser-dialog-with-headerbar
  • תיבות דו־שיח המכילות הודעה בלבד עוצבו מחדש:
    new-message-dialog-hewaderbar
  • תמיכה בהדפסה דרך Google Cloud Print
  • תפריט דמוי בלון (GtkPopover):
    gedit-popover
  • גובה זהה לשורת כותרת משולבת פקדים (GtkHeaderBar) בכל היישומים
  • סמלים של מספר יישומים עודכנו. ראה הדף בוויקי. אצרף כאן אחד (512 × 512):

שיפור התמיכה בכיווניות

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

יישומים

סרטונים – עיצוב חדש של Totem

עיצוב כולל חדש לסגנון GNOME 3, יחד עם אפשרות לסייר ולחפש סרטונים שבתיקיית הבית או במספר ערוצים נתמכים (YouTube, Vimeo, Blip, קדימוני סרטי אפל ועד). ניתן ליצור רשימת השמעה מהסרטונים. להלן שני צילומים (מרשומה קודמת):

totem-overview

totem-watch-video-from-youtube

Gedit – עיצוב חדש

עיצוב כולל חדש לסגנון GNOME 3, הכולל שילוב פקדים בשורת הכותרת (GtkHeaderBar), שימוש ב־GtkPopover במספר מקומות, תפריט צד בכותרת, סרגל צד חדש וכן פתיחת מסמכים שנסגרו באמצעות צירוף המקשים Ctrl+Shift+T יחד עם שינוי צירוף המקשים למסמך חדש מ־Ctrl+N ל־Ctrl+T. נוסף לזה, ניתן לשנות גודל האותיות בתפריט הנפתח (אותיות רישיות, אותיות קטנות, החלפה, אות רישית בראש מילה) ועוד שיפורים רבים.

gedit-new-design-3-12

תמונות

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

מסוף

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

מוזיקה

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

דפדפן

עבודה רבה נעשתה בדפדפן GNOME (נקרא Web, בעבר גם Epiphany). להלן בתמצות:

  • תהליך נפרד לכל לשונית. ניתן לשנות בחזרה לתהליך אחד לכל הלשוניות באמצעות gsettings (לפני שבוע שונה בררת המחדל לתהליך נפרד לכל לשונית !).
  • שורת כותרת חדשה המשלבת את כותרת הדף ואת תיבת הכתובות.
  • הדף „הנצפים ביותר” הפך לדף HTML, עם לא מעט שיפורים. בוצע על ידי Loren. הדבר מאפשר התאמה קלה של ערכת הנושא, שבוצע על ידי Jakub Steiner.
  • מרבית תיבות דו־שיח עוצבו מחדש, בשילוב פקדים בשורת הכותרת (GtkHeaderBar). מדובר בהיסטוריה, ססמאות, העדפות, עוגיות, ססמאות, ניקוי מידע אישי, הוספת קידודים, הוספת סימניה ושמירה דף כיישורם רשת. אולי פספסתי משהו. בוצע על ידי William Jon McCann.
  • מצב גלישה בסתר קיבל מראה חדש. במקום שימוש בערכת נושא כהה, נעשה שימוש בערכת נושא מיוחדת. דומני גם זה עבודה של ג׳ון.
    epiphany-incognito-mode
  • נוסף ממשק לשינוי מנוע החיפוש (עד כה היה ניתן לעשות את זה באמצעות gsettings בלבד).
  • סרגל ההורדות עודכן, כמו גם עדכון לעיצוב דפי about: – גם אלה על ידי ג׳ון.
  • ספק החיפוש פוצל לקובץ בינרי נפרד.
  • מנועה החיפוש בברירת מחדל (DuckDuckGo) כעת גם משתמש ב־HTTPS בברירת מחדל.
  • סרגל חיפוש נפרד לכל לשונית. בוצע על ידי.

הרחבה של שני השיפורים הראשונים ניתן למצוא ברשומה קודמת שלי.

הגדרות

לוח Bluetooth חדש ואפשרות לקבוע רק מתמונות מ־Flickr.

משחקים

חלק גדול ממשחקי GNOME הוסבו לממשק (פריסת החלון, פקדים וכו׳) חדיש. כמו כן מנוע השח־מט נהיה „חכם” פחות. כך גם המנוע של שחקן המחשב ביאגנו. על זה האחרון אדווח באג, כיוון שאני לא מצליח להפסיד (בשחמט אני דווקא לא מצליח לנצח ;-)).

gnome-chess

יישום חדש – רשמקול

יישום הקלטות חדש, בעיקר יודע להקליט ולהשמיע הקלטות קודמות. ההקלטות מאוחסנות בתיקייה „הקלטות” בתיקיית הבית של המשתמש.

gnome-sound-recorder

יישום חדש – יומנים

מציג יומני systemd (בשונה מ־gnome-system-log). נקרא gnome-logs.

gnome-logs

יישם חדש – לקוח IRC חדש – Polari

לקוח IRC חדש, הכולל בין השאר:

  • השלמה אוטומטית
  • ממשק חדיש בעיצוב GNOME 3
  • תמיכה בהודעות פרטיות והצגת מידע על משתמשים
  • תמיכה בהדבקת טקסט גדול דרך fpaste (נראה לי הוסרה לפני כמה ימים מאיזו סיבה)
  • הצגת היסטוריה עם גלילה כלפי מעלה
  • שילוב עם המעטפת (gnome-shell)
  • תמיכה במספר פקודות בסיסיות

polari

תכנה

GNOME Software קיבל הרבה תכונות חדשות, אך כיוון שהיישום לא פועל על ארץ׳, רק אקשר לרשומה של Richard Hughes.

הגדרה ראשונית – gnome-initial-setup – עוצב מחדש

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

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

gnome-initial-setup-welcome-page

gnome-initial-setup-layout-page

gnome-initial-setup-region-page

gnome-initial-setup-new-user-page

gnome-initial-setup-password-page

gnome-initial-setup-online-accounts-page

gnome-initial-setup-ready-for-use-page

במהלך פיתוח 3.11/3.12 הסתכלתי על שני הדפים הראשונים בלבד. היום, משראיתי את כל הדפים, אני חייב לומר שנעשתה כאן עבודה מדהימה.

ממשק ברור, פשוט, יפה, חדיש, מסודר. כל זה פשוט נראה טוב, יחד עם כל GNOME 3, כעת 3.12 :-)

רק אסיים עם סרטון רשמי המציג את GNOME 3.12. קריינות על ידי קארן סנדלר, היא מנכ״ל קרן GNOME כיום.

אחרית דבר – פתח דבר

GNOME 3.12 כבר זמין במאגר gnome-unstable של ארץ׳, וככל הנראה יגיע בשבוע הקרוב ל־testing ובהמשך ל־core.

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

אציין שכתיבת הרשומה לקחה לי שעה אחת יותר ממה שתכננתי, לכן אסיים בברכת קיץ נטול יתושים וערב טוב,

יוסף אור

GNOME 3.12 שוחרר !

מרץ 26th, 2014 by yoseforb

ערב טוב.

לאחר מחזור פיתוח בן שישה חודשים, שוחררה גרסה 3.12 של שולחן העבודה GNOME !

GNOME 3.12

GNOME 3.12

גרסה זו מכילה 34236 שינויים שנרשמו ב־Git על ידי 1140 תורמים, בהשוואה ל־34786 שינויים על ידי 985 תורמים ב־3.10.

אחוז התרגום עומד על 84% (36191 מחרוזות מתורגמות, 2971 מעורפלות ו־3879 שאינן מתורגמות), בהשוואה ל־84% (35956 מחרוזות מתורגמות, 2638 מעורפלות ו־3745 שאינן מתורגמות) ב־3.10, לעומת 83% ב־3.8. על התרגום אחראי ירון, ולאחרונה גם אני. אנו מקווים שנמצא זמן להעלות את אחוז התרגום לקראת 3.14.

כל המעוניין לעזור במלאכת התרגום יותר ממוזמן להתחבר לערוץ ‎#gnome-il ב־GimpNet ולתאם אתי מה הוא רוצה לתרגם, כדי לחסוך עבודה כפולה. לחלופין ניתן לשלוח לי הודעה לדוא״ל (yoseforb תחת gnome dot org).

יש לציין שהתרגום מתבצע לפי כללי התרגום של מיזם גֶּזֶר.

כמו כן אני שמח לבשר שאין עוד צורך בחשבון Git כדי לתרגם, החל מתחילת פברואר ניתן לעשות זאת ישירות דרך l10n.gnome.org.

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

להלן מוטמע סרטון המציג את GNOME 3.12. קריינות על ידי קארן סנדלר, היא מנכ״ל קרן GNOME כיום.

על כל פנים, מחזור הפיתוח הבא, 3.13/3.14 כבר מתחיל. לא אמתין במתח לראות מה יהיה, אלא אכניס בעצמי שינויים. מזל טוב ובהצלחה ל־GNOME !

בברכה,

יוסף אור

Developer Experience Hackfest – קיבלתי מימון !

מרץ 18th, 2014 by yoseforb

ערב טוב.

לפני קצת יותר מחודש הוספתי את השם שלי לרשימת המבקשים להצטרף ל־Developer Experience Hackfest, האקתון מאוד מעניין.

בשנה שעברה דנו בו על אי אילו דברים שרצו לראות בטווח הקרוב נכנס ל־GNOME, ואכן חלק גדול מהדברים כבר קיימים (לדוגמה כאן – Grid View, Notifications, Titlebars, Popovers, Revealer widget, Floating bar, Baseline text alignment – הכול כבר קיים).

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

הכנס יתקיים בתאריכים 30 באפריל – 2 במאי, בברלין, גרמניה.

אם מישהו מעוניין להצטרף אלי, אשמח מאוד.

בברכה,

יוסף אור

כמה תיקונים ל־RTL שנכנסו ל־GNOME 3.12

מרץ 5th, 2014 by yoseforb

ערב טוב.

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

זה הזמן לסכם השינויים הנוגעים לשפה העברית, כלומר תיקונים לשפות המוצגות מימין לשמאל (RTL – Right to Left).

יישומי GNOME שונים

שני תיקונים עיקריים:

חצים הפוכים

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

ריווח נכון ב־RTL

מדובר בשינוי ב־GTK+‎. עד עכשיו הריווח בוצע באמצעות המאפיינים margin-start ו־margin-left, כאשר אלה היו שגויים בעברית ונכונים רק לשפות משמאל לימין.

הוספתי ל־GTK+‎ המאפיינים margin-start ו־margin-end, אשר מוסיפים את הריווח בצד שמאל או ימין, בהתאם לכיווניות הממשק.

ראה באג 710238.

GNOME Shell

שני תיקונים עיקריים הנוגעים לעברית נכנסו ל־GNOME Shell:

תיקון יישור שגוי במספר מקומות

בבאגים מס׳ 712579, 712594, 712596, 712638 ו־712600 תיקנתי מספר מקומות ב־GNOME Shell בהם דברים הוצגו בצורה הפוכה, ולעתים מעוותת לחלוטין.

אחד מהטלאים נכתב על ידי Florian Müllner, את השאר אני כתבתי. Jasper St. Pierre טרח לסקור את הטלאים ולאשר לי להכניס אותם ל־Git. יצוין שאלה תיקונים פשוטים מאוד. כל כך פשוטים, שכתבתי אותם על אף שאני מתכנת C ולעולם לא למדתי לפתח ב־JavaScript.

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

מסך כניסה – לפני התיקון

מסך כניסה – אחרי התיקון

דו שיח להזנת פקודה – לפני התיקון

דו שיח להזנת פקודה – אחרי התיקון

ניתן למצוא בבאגים המקושרים למעלה תמונות נוספות.

תיקון יישור טקסט בתיבת הזנה

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

התיקון של Florian Müllner היה ליישר טקסט בתיבת הזנה על פי כיוון הממשק הכללי. כלומר יישור לשמאל בממשק משמאל לימין, ויישור לימין בממשק מימין לשמאל. תיקון זה כמובן אינו מושלם. תיקון זה הוכנס ל־GNOME 3.10.

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

Emmanuele Bassi, מתחזק Clutter (הבאג הועבר ל־Clutter, כיוון שהבעיה היא ב־Actor של Clutter ולא ב־GNOME Shell עצמו) ביקש שאשנה דברים, שאביא תיקון נכון יותר ובסופו של דבר עשה את זה בעצמו, כאשר הוא גם מתייחס לכיווניות של פריסת המקלדת במקרה בו לא הוזן דבר (מה שלא פועל כרגע) ועוד כמה דברים (ראה בבאג). התיקונים שלו הוכנסו לגרסת הפיתוח הנוכחית של Clutter (ענף clutter-1.18), אשר בעוד מספר שבועות תהפוך לגרסה יציבה ומשם תיכנס להפצות השונות.

אגב, תיקון זה מתקן גם את באג 725060.

צירופי מקשים פועלים בפריסה עברית

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

הבאג לא חדש, תוקן על ידי Rui Matos לפני מספר ימים. כעת ניתן, לדוגמה, לנעול את הכניסה הנוכחית באמצעות הצירוף Super+L, גם כאשר הפריסה הנוכחית בשימוש היא פריסה עברית. זהו עוד שיפור קטן לנוחות השימוש.

תיקונים נוספים ?

יש עוד לא מעט בעיות הדורשות תיקון:

  • יישור הודעות קופצות ב־GNOME Shell. באג מס׳ 711349, קשור במעט להודעות הקופצות
  • יישור נכון בתיבת השיחה הצפה ב־GNOME Shell, שם המצב גרוע להחריד (לעתים טקסט בעברית מיושר לשמאל וטקסט באנגלית מיושר לימין)
  • תמיכה ב־RTL בלקוח הדוא״ל Geary
  • יישור נכון של הודעות בלקוח ה־IRC ‏Polari, גם כאשר ההודעות כתובות בעברית
  • קישורים המכילים תווי יוניקוד בדפדפן GNOME מוצגים בצורה שגויה. כתבתי שני טלאים פשוטים (שלא עושים את העבודה באופן מושלם), אולי יכנסו לפני 3.12. ראה באג 710004

הרשימה עוד ארוכה. נקווה שהיא תקוצר לקראת GNOME 3.14 :-)

בברכה,

יוסף אור