ארכיון חודשי: נובמבר 2009

עבודה עם xmlrpc ברובי

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

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

הדוגמאות הרגילות מציגות את זה בצורה הבאה:

require 'xmlrpc/client'
server = XMLRPC::Client.new('127.0.0.1', '/', 80)
server.call('test',  'a','b')

אבל בשביל "שם" ו"ערך" אנחנו צריכים להשתמש בזה בצורה הבאה:

require 'xmlrpc/client'
server = XMLRPC::Client.new('127.0.0.1', '/', 80)
server.call('test', { 'a' => 'b'})

אני מקווה שזה יעזור לעוד אנשים.

תודה ללזרוס שהביאני עד הלום

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

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

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

למעט שורת select אחת (נשאר לי עוד ליצור שורות של update, insert ו delete), אין לי ולו שורת קוד אחת שכתבתי, ועדיין יש לי ממשק גרפי שמאפשר לי את כל זה !

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

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

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

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

חידה: מה עושה הקוד הבא ?

יצרתי את הקוד הבא במסד נתונים שלי שעובד עם Firebird SQL, מה הקוד עושה ? למה נבחרה הגישה הזו בשביל לממש את הקוד ואילו תשובות אקבל בהזנת 10 ערכים ראשונים למסד הנתונים עם הקוד הזה ?

IF ((NEW.ID IS NULL) OR (NEW.ID = 0)) THEN
NEW.ID = GEN_ID(GEN_PERMISSIONS_ID, 1);
ELSE
NEW.ID = GEN_ID(GEN_PERMISSIONS_ID, GEN_ID(GEN_PERMISSIONS_ID, 0));

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

טעויות מתקנים …

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

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

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

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