שרת Jabber

פתחתי שרת jabber על yadan.net (המחשב בסלון, לשעבר firefang.net, שגם מתפקד כשרת דואר).
jabber הוא שרת בפרוטוקול XMMP, שהוא פרוטוקל מסרים מיידיים נחמד ופתוח, מה שיפה זה שהוא גם מבוזר:
משתמשי ג'אבר בשרת אחד יכולים לדבר בצורה שקופה עם משתמשי ג'אבר בשרתים האחרים, למשל עם משתמשי Google talk.
עוד דבר נחמד זה שעם ג'אבר, לא צריך חשבונות שונים כדי להכנס מהעבודה ומהבית בו זמנית:
כל כניסה יכולה להשתמש במשאב שונה (בלינגו הג'אברי – Resource), למשל – מהבית אני נכנס תחת omry at yadan.net/Home ובעבודה דרך omry at yadan.net/Work. אם היה לי ג'אבר בסלולארי הייתי נכנס שם דרך omry@yadan.net/mobile או משהו. מה שנחמד זה שג'אבר יודע לנתב את ההודעות למקום הנכון (המשאב בעל העדיפות הגבוהה היותר שבו אני פעיל).
אז מי שרוצה לצ'וטט, אני omry at yadan.net בג'אבר. (@ במקום at).

ג'אבר מאפשר לכל אחד לשלוח מסרים למשתמשי Google talk (ולכל שרת ג'אבר אחר), פשוט יוצרים משתמש בשרת ג'אבר לבחירתכם ושולחים למשתמשי גוגל טוק. לא צריך כתובת ג'ימייל.
שרת מתבקש הוא כמובן jabber.org, כל מי שרוצה יכול להרשם שם ישירות דרך תוכנת הג'אבר הקרובה לביתו (שאינה Google talk, שכצפוי לא מאפשרת לבחור שרת).
אפשר להשתמש בPidgin, ואז ההרשמה נראית כך (כמובן שצריך להחליף את someone בשם הרצוי).
pidgin jabber

במקרה הזה, ברגע שנרשמתם, משתמש הג'אבר שלכם הוא user@jabber.org, ותוכלו לשלוח דרכו הודעות לכל משתמש ג'אבר בכל שרת ציבורי.

JWebcam נולד מחדש

לפני יותר משלוש שנים פתחתי פרוייקט בשם JWebcam בסורס-פורג'.
הפרוייקט היה הנסיון הראשון שלי לכתוב פרוייקט קוד פתוח, והיה מערכת שרת/לקוח להזרמת וידאו ממצלמת רשת.
התחלתי לפתח אותו אחרי שלא הייתי מרוצה מהאלטרנטיבות שהיו בזמנו.
הפרייקט היה נחמד, וכלל פונקציות נחמדות כמו זיהוי תנועה, הזרמת וידאו על גבי HTTP ויכולת לתמוך בכמה מצלמות שמשדרות לאותו שרת.
וברגע שעברתי לעבודה על לינוקס הפסקתי סופית את הפיתוח שלו, כי לא היה לי מספיק זמן לברר מה השינויים שאני צריך לעשות כדי לשאוב נתונים מהמצלמה תחת לינוקס.
לפני כשבוע פנה אלי schwarzer_peter שרצה להחיות את הפרוייקט; הוא התחיל לפתח משהו דומה וכשהוא ניסה לרשום אותו בסורס-פורג' – כנראה תחת אותו שם, הוא גילה שתפסתי את השם.
אחרי קצת אימייל-פונג החלטנו שהוא יקבל הרשאות מנהל ומנדט לעשות ככל העולה על רוחו, ושאני אייעץ ואעזור לו להתממשק אל הקוד שכבר כתבתי.
הוא פתח בלוג וורדפרס חביב לפרוייקט, ונראה שהוא עובד די במרץ.
כיף לראות שאחרי שלוש שנים מישהו מוצא שימוש לקוד שכתבתי ושהפרוייקט מתעורר.

ווידג'ט לוח שנה

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

הנה תמונה (התעצלתי לשלב את הדבר האמיתי):
רכיב לוח שנה

פיתוח PHP עם PDT

היסטורית, מפתחי PHP תמיד היו מקופחים.
בזמן שמפתחים לשפות אחרות נהנו מסביבות פיתוח מתקדמות, עם יכולות דיבאג (נקודות עצירה, בדיקת ערכי משתנים בזמן ריצה ועוד), השלמת קוד תלויית הקשר ועוד, הרוב המכריע של מפתחי הPHP השתמשו בעורכי טקסט פשוטים יחסית (ואני לא מזלזל בVIM ובEmacs).
את FireStats התחלתי לפתח כאשר לא ידעתי כמעט כלום על PHP, ובוודאי שלא ידעתי על סביבות הפיתוח המומלצות לפיתוח בPHP, כך שהתחלתי את הפיתוח בשימוש בVIM ישירות על שרת הפיתוח שלי (המחשב בסלון), והייתי מרוצה מהתוצאות.
לפני מספר חודשים נתקלתי בMylar, שאיפשר לי התממשקות נוחה למערכת ניהול הבאגים של FireStats, שעובדת על trac.
החלטתי שזה שווה את המאמץ של המעבר, והתחלתי לחפש פתרון PHP לEclipse.
בהתחלה מצאתי את PHPEclipse, פלאגין שעובד די טוב, אבל כמה באגים עיצבנו אותי, ושמתי לב שהפרוייקט די רדום, אז נטשתי אותו לטובת PDT שמפותח כתוסף רשמי של פלטפורמת Eclipse, בעיקר על ידי מפתחים של Zend.

PDT נמצא כרגע במצב די טוב, יש כמה באגים קטנים אבל הפרוייקט חי ומשחרר גרסאות חדשות כל כמה חדשים.
ההשלמה האוטומטית עובדת יפה מאוד, גם בהקשר של PHP, גם בהקשר של HTML ואפילו בהקשר של CSS וJavaScript.
בנוסף, במאמץ קטן יחסית ניתן לאפשר דיבוג באמצעות xdebug מתוך Eclipse (!), ממש סוף הדרך.

עבודה עם PDT:
pdt.png

דיבאג עם PDT:
pdt1.png

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

Tivo וGPL3

TiVO מזהירים שGPL3 יפגע בהם.
מסתבר שמערכות TiVO הן מבוססות לינוקס, ומתוכננות להפסיק לפעול אם הן מזהות שמשתמש מנסה לנטרל את מנגנון הDRM
TiVO מוסרים שאם GPL3 יאומץ, הם לא יוכלו להמשיך לכלול שיפורים עתידיים בגנו/לינוקס למערכת שלהם.

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

טריקל

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

ככה זה נראה בלי טריקל:

$ wget http://yadan.net/bulk.dat
–22:01:39– http://yadan.net/bulk.dat
=> `bulk.dat'
Resolving yadan.net… 10.0.0.2
Connecting to yadan.net|10.0.0.2|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 20,480,000 (20M) [chemical/x-mopac-input]
14% [=============> ] 6,966,584 11.07M/s

וככה עם:

$ trickle -d 50k wget http://yadan.net/bulk.dat
trickle: Could not reach trickled, working independently: No such file or directory
–22:04:33– http://yadan.net/bulk.dat
=> `bulk.dat.2'
Resolving yadan.net… 10.0.0.2
Connecting to yadan.net|10.0.0.2|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 20,480,000 (20M) [chemical/x-mopac-input]

1% [> ] 278,528 52.48K/s ETA 06:15

Antenna 0.9.5-beta

Antenna הוא פרוייקט ותיק לבניה של ישומי J2ME (ג'אווה לטלפונים סלולאריים), הפרוייקט היה בתרדמת די ארוכה.
לפני כמה שנים התחלתי לתרום קוד לפרוייקט, אבל התרדמת היתה כל כך עמוקה שהשיפורים לא שוחררו.
עד עכשיו.
קיבלתי הרשאות Commit לפרוייקט לפני כחצי שנה, הכנסתי את השיפורים שלי, כשגולת הכותרת היא Preprocessor חדש ורב עוצמה, שמגיע גם כפלאג-אין לEclipse (אבל כמובן מאפשר גם הרצה מסקריפט ANT) וכן Task שמאפשר חתימה על מידלטים.
את הTask שחותם פיתחתי מזמן, ואת הPreprocessor ממש לפני כמה חודשים, במסגרת העבודה שלי בחברת Vollee.
ביום שישי שחררתי גרסא חדשה (0.9.5-beta) שכוללת את הכל.

antenna preprocessor

הגשת פרוייקט על דיסק Knoppix

במסגרת קורס הפרולוג, נתבקשתי לכתוב פרוייקט.
בחרתי במנוע שחמט, וחיברתי לו ממשק משתמש שכתוב בג'אווה (Jin).
החיבור בין פרולוג לג'אווה מתבצע באמצעות API בשם JPL.
אחרי שסיימתי לפתח, גיליתי שלמרות שכל הרכיבים של הפרוייקט (SWI-Prolog, Java) כוללים גרסאת חלונות – העסק לא עובד בחלונות, עקב בעיה בJPL שגורמת למערכת להתקע בחלונות.
במקום לנסות לפתור את הבעיה החלטתי לעקוף אותה בכך שאני אגיש את הפרוייקט על לינוקס.
מכיוון שההתקנה של הפרוייקט לא טריויאלית – צריך להתקין ג'אווה, את הגרסא המתאימה של SWI-Prolog, ואולי גם לשנות מסלולי קבצים בקובץ ההרצה בהתאם, החלטתי להשתמש בגרסא מותאמת של Live CD, שמכילה התקנה מוכנה של כל העסק.
בדקתי את DSL, אבל הוא היה בסיסי מדי ולא היו בו מספיק כלים כדי שאני ארגיש איתו בנוח.
ניסתי את KNOPPIX, שבהחלט היה עשיר מספיק, ונראה מתאים מאוד.
לKNOPPIX יש הוראות מפורטות להכנה של דיסק מותאם על בסיס הקיים (Remastering).
בגדול, התהליך הוא כזה:
מתאחלים את הCD, מעתיקים את התוכן שלו לכונן הקשיח, עושים את השינויים הדרושים, יוצרים ISO חדש, וצורבים אותו.
כמובן שזה יותר מורכב מזה, אבל ההוראות די טובות.
אפשר לקצר תהליכים על ידי שימוש במכונה וירטואלית (VMware, QEmu, Xen) שחוסכת איתחולים.
נתקלתי בבעיות מוזרות בבמהלך איתחול מהISO בהתחלה, לא ברור לי מה פתר אותן, אבל אלו השינויים שעשיתי:
1. התחלתי את התהליך כולו מחדש, הפעם על מערכת קבצים מסוג EXT3 (בהתחלה השתמשתי בReiserFS).
2. נתתי למכונה הווירטואלית ששימשה ליצירת הISO יותר זכרון.

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

תכנות ממוקד משימות – Mylar

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

כששוטטתי בבאגים של Eclipse בזמן שחיפשתי מידע על משהו, נתקלתי בAttachment של קובץ מוזר שסיקרן אותי:
mylar/context/zip.
לא נתקלתי בזה בעבר, ולא ראיתי שום קשר בינו לבין הבאג.
חיפוש קצר בגוגל הביא אותי לדף הזה, שמכיל מאמר על "תכנות מונחה משימות עם מיילר".
חפרתי עוד קצת, ומצאתי גם את המצגת ווידאו הזו, שמתארת איך משתמשים במיילר ומה הוא עושה (40 דקות).
מסתבר שמיילר הוא פרוייקט Eclipse חדש, אחד מני רבים (Eclipse הפכה לחממה של עשרות טכנולוגיות חדשניות), שמתיימר לפתור את הבעיה של עומס מידע בזמן שעובדים עם Eclipse.
mylar screenshot
באופן הבסיסי ביותר, Mylar הוא רשימת משימות, למשימות מקומיות וכן למשימות/באגים ממערכות באגים כמו bugzilla, trac וJira
מה שיפה זה שמיילר מנהל הקשר (Context) לכל משימה בצורה אוטומטית, שמכיל את כל מה שקשור אל המשימה – איזה קבצים פתחת, איזה אלמנטים בתוך הקבצים מעניינים (במקרה של קוד ג'אווה – איזה פונקציות למשל) וכו'.
ברגע שעוברים לעבוד על משימה, מתחילים מיד מההקשר הקודם של המשימה (ריק בהתחלה), ואחרי שעוברים למשימה אחרת, ההקשר נשמר – מוכן להשלף אוטומטית ברגע שחוזרים לעבוד על אותה משימה.
דמיינו את הסיטואציה הבאה:
אתם עובדים על איזה באג/פיצ'ר לתומכם, ופתאום יש מקרה חירום וצריך לתקן באג חדש ולייצר גרסא חדשה של הdemo מאתמול.
לפני מיילר, מה שזה אומר זה שצריך להתחיל להזכר מה צריך כדי ליצר גרסא חדשה, לפתוח קבצים חדשים, כנראה גם לסגור את כל מה שקשור לבאג שעבדתם עליו.
עכשיו, נניח שהבאג הזה בכלל שייך למישהו אחר בצוות, אז צריך להעביר את העסק עליו ואז להזכר מחדש איפה הייתם ומה עשיתם, לסגור את הקבצים שקשורים לבאג בdemo, לפתוח את הקבצים של הבאג שעבדתם עליו ולהמשיך לעבוד.
כל הסחות הדעת האלו יגרמו לכך שגם תבלו איזה עשר דקות בynet בין המשימות, סתם כדי לנקות את הראש.
עם מיילר, אפשר לעבור בקלות בין ההקשרים, בלי לבזבז זמן ותאי זכרון יקרים.
מיילר מייעל גם עבודה בצוותים: את ההקשרים האלו, שכוללים בעצם ריכוז של ידע על אותו באג, אפשר לצרף לבאג עצמו, ככה שהמפתח הבא יוכל פשוט למשוך את ההקשר מהבאג ולהמשיך מאותו מקום שאתם עצרתם. (כל הקבצים פתוחים, כל הפונציות שרלוונטיות לדעתכם כבר יהיו בהקשר, וכו').
Eclipse הוא כבר מזמן לא כלי לפיתוח Java בלבד, כבר היום הוא תומך בC/C++, PHP, Prolog ועוד, מיילר אמור לתת ערך מוסף לתכנות בלי קשר לשפה, כל עוד אתם עובדים בתוך Eclipse – אם כי אני לא בטוח שהוא באמת מוכן לשפות אחרות עדיין.
יתרון נוסף הוא התמיכה האוטומטית בקבוצות שינויים (Changeset) כשעובדים מול מערכת ניהול גרסאות הקוד (CVS/SVN וכו').
מה שזה אומר זה שמיילר ינהל בצורה אוטומטית את הChangeset שקשור לבאג שאתם עובדים עליו, ואפילו יכלול הודעת Commit אוטומטית כשתעשו Commit!

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

יש לינקים עם עוד מידע פה.

פיתוח דרייברים ללינוקס בחינם

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

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