‏הצגת רשומות עם תוויות soap. הצג את כל הרשומות
‏הצגת רשומות עם תוויות soap. הצג את כל הרשומות

יום שני, מרץ 11, 2013

טיפוס מוררכב שיוצר ב wsdl2h לא מכיל namespace

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

הבעיה הייתה שטיפוסים מורכבים (ComplexType) בהודעות לא הכילו את מרחב השמות (namespace) ברירת המחדל של הרכיב.

הפעולה התבצעה ע"י wsdl2h -c filename.wsdl

במקום לקבל :

<SOAP-ENV:Body>
  <ns1:typename>
    <fieldname>
      <ns2:typename1>text value</ns2:typename1>
      <ns2:typename2>true</ns2:typename2>
      <ns2:typename3>6308880000</ns2:typename3>
    </fieldname>
  </ns1:typename>
</SOAP-ENV:Body>

התקבל:


<SOAP-ENV:Body>
  <ns1:typename>
    <ns1:fieldname>
      <ns2:typename1>text value</ns2:typename1>
      <ns2:typename2>true</ns2:typename2>
      <ns2:typename3>6308880000</ns2:typename3>
    </ns1:fieldname>
  </ns1:typename>
</SOAP-ENV:Body>

הפתרון לבעיה פשוט - יש להכריז כי מרחב השמות ברירת המחדל יהיה qualified (תמיד יכיל את מרחב השמות).
פעולה זה מתבצעת ע"י שינוי בקובץ ההכרזה :

#define SOAP_NAMESPACE_OF_ns1   "http://myrtfm.blogspot.com/soap/ServiceName"
//gsoap ns1   schema namespace: http://myrtfm.blogspot.com/soap/ServiceName
//gsoap ns1   schema form:      unqualified
ל:
#define SOAP_NAMESPACE_OF_ns1   "http://myrtfm.blogspot.com/soap/ServiceName"
//gsoap ns1   schema namespace: http://myrtfm.blogspot.com/soap/ServiceName
//gsoap ns1   schema form:      qualified



נ.ב. קובץ הסכמה הגדיר את מרחב שמות המרחב כראוי :

 elementFormDefault="qualified"

יום רביעי, דצמבר 21, 2011

זיהוי ששדה מסויים לא הוגדר ב gsoap

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

ב gSOAP כאשר את מכריזים על חבר ב struct ברירת המחדל שלו היא optional ו nillable, זה אולי לא נשמע בעייה אבל זה נותן תחושה ממש לא טובה.

כאשר יש לכם שדה שהוא optional קשה לגלות עם השדה הוכנס או לא בהודעה (כלומר אין משהוא ברירת מחדל שיתן לכם את זה).
כל יחדת מידע שאנו עובדים איתה מאוכסנת באיזה שהוא struct (שקשור לWS איתו אנו עובדים).
לדוגמה :

typedef struct {
      char * field1;
      char * field2; 
      .
      .
      .
      time_t fileK;
      unsigned int fieldZ; 
} foo_t;

אנו נעבד את מבנה הנתונים בכניסה לפונקציה  - נעבור שדה שדה ונבדוק את תוכנו.
כלומר עבור פונקציה גנרית שתעבד כל WS אנו נעבור על שדה שדה.
לכן יש לנו offset גודל וטיפוס בשביל לעבד את המידע.

על מנת להתמודד עם התופעה:

עבור char * :  עם שדה לא הוגדר אז : 
NULL == *(char ** field_offset)
אם התנאי הזה מתקיים אז השדה שאתם עובדים עליו לא היה בהודעה.
כלומר missing element in xml

אם לעומת זאת הערך הוא ריק אז מתקיים:
'\0' == *((char ** )field_offset)
כלומר יש לכם : <node></node>

עבור ערך בסיסי תקבלו (חשוב לזכור ש field_offset הוא void *).
 
NULL == ((int *) field_offset)
NULL == ((double *) field_offset)

שימו לב שבמעבר על כל אחד מהשדות יש להזהר ולהשתמש בגודל האמיתי.

יום ראשון, דצמבר 11, 2011

שליפת נתונים ממכלול 3 ברופין

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

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

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

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

אצלי למשל זה :
APIUSERNAME ו APIPASSWORD אבל אצל כל שרת יהיה סיסמה ומשתמש אחרים.

את החיבור בודקים עם  curl (ותודה לבעל ה N900 על המחרוזת UA ):


curl http[s]://fqdn/wsm3api/MichlolApi.asmx \
           -A "mozila/5.0 (X11; Linux armv7i; en-US; rv1.9.2.3pre) Gecko/20100723 Firefox/3.5 Maemo Browser 1.7.4.8 RX-51 N900" \Gecko/20091102" \
           -H "Soapaction: "http://RashimApi.co.il/ProcessRequest"" \
           -H "Content-Type: text/xml; charset=utf-8" --data-ascii @request

fqdn - זה ה fqdn של שרת המכלול
את  הבקשה ממלאים לפי התיאור באתר.

והנה דוגמה :

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ProcessRequest xmlns="http://RashimApi.co.il">
<P_RequestParams>
<RequestID>27</RequestID>
<InputData>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;PARAMS&gt;
&lt;STUDENTID&gt;310123456&lt;/STUDENTID&gt;
&lt;BEGINDATE&gt;01/11/2011&lt;/BEGINDATE&gt;
&lt;ENDDATE&gt;05/12/2011&lt;/ENDDATE&gt;
&lt;/PARAMS&gt;
</InputData>
</P_RequestParams>
<Authenticator>
<UserName>APIUSERNAME</UserName>
<Password>APIPASSWORD</Password>
</Authenticator>
</ProcessRequest>
</soap:Body>
</soap:Envelope>

יום רביעי, דצמבר 07, 2011

להבין שאתה באמת צריך זה עוד מימוש של סיפריה

 זוכרים את הwsdl של אחת ממערכות ה CRM שנלחמתי בה לאחרונה ?
נו זאת אם ה WSDL שלא מתאים לצד השרת.

מאוד התלהבתי מהעובדה שעכשיו זה עובד והגעתי לנקודה שהבנתי שאני יכול לממש pim plugin שיעבוד עם thunderbird + lightining + provider/ kontact

התחלתי לממש את ה library שאוכל להכניס ואז ירד לי האסימון - אני ממציא מחדש את libgcal רק עבור CRM אחר. כמה שעות של טיול בקוד ואני מבין ש:
  • צריך ספרייה שתוכל לתת מידע מהקישור בין המכונה המריצה לבין מערכת ה CRM.
  • צריך להשתמש בספריות כמה שיותר גנריות וכמה שפחות תפורות למערכת (היה שלום MSXML).
  • צריך קוד ב C טהור - צריך להבין איך לעשות נכון את ניהול ועיבוד המידע  (pthread לא בא בחשבון)
  • צריך פתרון פשוט בשביל לא לגמור עם עוד רעיון שלא יהיה אפשרי לכתיבה (ראה ערך אקונדי ב thunderbird).

לא אמרתי נואש קפצתי לחבר שהוא כותב למערכות PIM כעבודה והוא שימח אותי בכלל : 
כמו שחשבתי עדיף לבצע הפרדה בין סיפריה שתבצע ניהול חיבור ויצרת איש קשר / יומן מאשר לקחת את הקוד ולהשתמש בהתאמה של כל אחד ממנגנוני הPIM.
צריך להזהר מלהשתמש בהתקני האיחסון היפים למידע (המחלקות של KDE , Evolution )  ולהשתמש במחלקות של vcard  , vcal / vcalendar וכן מעטות הסיפריות שמתנהגות בצורה זהה גם בויינדוס וגם בדביאן.

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

לבנתיים אני יושב על ה design אם כי gdata נראה ממש טוב. 

 

יום שלישי, דצמבר 06, 2011

למה אתה משתמש ב WSDL ?!

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

המבנה :

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="CALENDAR">
        <xsd:complexType>
            <xsd:sequence>
            <xsd:element name="SID" type="xsd:int" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="COURSE_ID" type="xsd:int" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="STARTDATE" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="ENDDATE" type="xsd:dateTime" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>


ע"פ ההגדרה המבנה הוא :

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]

אבל לא האיש שכתב את השרת החליט שהמידע צריך להתקבל בצורה :
DD/MM/CCYY

נשאלת השאלה : למה אתה מגדיר מבנה נתונים שהוא לא נכון.
אם מעבירים את המידע בצורה לפי ההגדרה אנו מקבלים ... נכון: unhandeled soap exception

ממשיכים הלאה יש תשובה שמשתמשת בשם שנותן הרגשה שמדובר בזמן :


<xsd:element name="STARTTIME" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="ENDTIME" type="xsd:string" minOccurs="1" maxOccurs="1"/> 

ונחשו איזה מידע אני מקבל ?

<STARTTIME>1/1/1900 8:00:00 AM</STARTTIME>
<ENDTIME>1/1/1900 11:00:00 AM    </ENDTIME>

השאלה הראשונה שנשאלת למה יש תאריך (אם לשדה קוראים time) . השאלה השנייה למה יש רווחים בסוף enddate.
מה שעשיתי בסוף זה אוטמט שיודע לזהות מבני הצגת תאריך וזורק את כל ה whitespaces

בדוגמה הזאת רואים סיבה מצויינת למה אנו נאלצים לעבור ולעבד את המידע שנוצר מ   gsoap / wsdl2javakdoap ולעבור בצורה ידנית על כל פונקציה ולהתאים לאנשי ה .NET

השיטה שמצאתי כמתאימה לזיהוי בעיות כאלה היא שימוש ב curl / telnet (ובאמת תתפללו שאין איזה שהיא מערכת שמחייבת הזדהות לא נורמאלית).

ב curl יש אפשרות לבדוק במה אנחנו תומכים (איזה סוג הזדהות )לדוגמה ב דביאן :

curl 7.21.7 (x86_64-pc-linux-gnu) libcurl/7.21.7 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 libssh2/1.2.8 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

הצעד הבא הוא ווידוא איזה סוג של מכשור יכול להתחבר לדוגאות :

appname/1.2 CFNetwork/485.10.2 Darwin/10.3.1
Zune/4.7
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5


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

יום שני, דצמבר 05, 2011

הצרות שלי עם SOAP

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

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

הסיבה לפחות בארץ היא שליטת אחת מסביבות הפיתוח בשוק (מישהוא אמר .NET ?) ושם כברירת מחדל מופיע בשימוש ב SOAP (אם מישהוא רוצה להעביר מידע הדרך הפשוטה בשבילו ביותר היא SOAP) , אם לפני שנים אנשים למדו והבינו עם מה עובדים היום יש כמות אדירה של פקידים שלא זזים מילמיטר מהמקום הבטוח שלהם שפשוט מושכים תפריטים.
לא פעם שמעתי תגובות מה איך אתה משתמש ב webservices מתוך C++ ואיך בכלל אתה משתמש ב telnet - זה בטח האקינג... 

והחלק הנורא ביותר - הwsdl שלך אי אפשר לעבוד איתו.
לקח לי שבועות להבין שהרבה פקידים פשוט לא מזיזים את התוכס שלהם בשביל לכתוב קוד נכון שידע לעבוד גם עם encoded וגם עם literal.
אתם חושבים שזה הכול ? 
מתברר שהרבה צועקים שאי אפשר להשתמש ב soap ולהחזיר תשובה כאשר זו לא נמצאת בתוך  בקונטיינר (יש אלמנט תשובה ובתוכו עוד כלל התשובות שלכם).
משום מה ברירת המחדל של יצרת complex type אומרת שכולם צריכים לעבוד לפי החליל של MS (מי שעובד ב Java מקלל במיוחד את יצור הwsdl ).
לאלה מאיתנו שכותבים קוד ב C++ קל יותר יש לנו מספר חבילות שדואגות לנושא (הממ .. gsoap + libxml) , ברגע שיש דרישה אנחנו פשוט משנים את הפורמט בלי יותר מדי כאב ראש.

על כן יש לי (ולהרבה אחרים) כלל - 
במהלך ההכנה לחוזה אנו כותבים כי כלל הממשקים חייבים להציג את כי פעולת התקשורת אפשרית באמצעות אפליקציה צד שלישי מוכרת (soapui/telnet).

זה נשמע לכם כמשהוא מוזר אבל לפעמים מגלים שצריך איזשהוא dll בשביל לבצע עוד תקשורת ועיבוד של המידע (הממ... crms המממ...). כן כן אבל ה webserivce שלי דורש NTLMv2 יגיד המתכנת (לדוגמה בdynamics) - למצב כזה אנחנו יכולים להתמודד שלauthntication נדאג אחרי זה (כי gsoap לדוגמה מאפשר זאת ) וחוץ מזה שכבר זונחים את NTLM ועוברים לkerberos.
בגלל זה עדיף לחלק את העבודה בין עבודה עם רק webservices לעובדה עם מכלול אפליקציות אחרות שצריך לתקשר איתם.

הרי בשביל מה יש ממשק וובי / webservices אם צריך עוד אפליקציה בשביל לעבוד זה (ראה ערך dynamics crm / owa בלי outlook שמותקן על המחשב המקומי).

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

(עדיין תקוע עם webservice בשביל לגרום לCRM לעבוד עם akonadi :-( )

יום שישי, דצמבר 02, 2011

Kontact on an exchange 2007 SP2

איזה אושר אפשר לגשת ולקבל גישה מלאה לאלמנטים של שרת exchange מתוך kde (בלי davmail) :
  • את שירותי ה email קיבלנו כבר מזמן (פשוט הגדירו את שירותי ה imap/pop3 בתוך kmail)
  • פעם הגישה היחידה לאנשי הקשר היתה שימוש בldap , אבל עכשיו יש פתרון נוסף כפלאגין של אקונדי.
  • גישה ליומן הארגוני באמצעות אותו הפלאגין.
על מנת להשתמש בזה יש ליצור חשבון באמצעות mapiprofile.
להוריד ולהתקין את הפלאגין : 
svn co svn://anonsvn.kde.org/home/kde/trunk/playground/pim/akonadi/exchange

cmake exchange

make && make install


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


חשוב לזכור שמוצרי dynamics לא מסונכרנים כברירת מחדל כך שחברה שמתשמשת ב dynamic crm לא תוכלו לגשת אליה באמצעות הפלאגין הזה.

יום שבת, נובמבר 26, 2011

האם אקונדי היא התשובה שאנחנו מחכים לה בנושאי CRM?

 היום כל חברה מייצרת ומשתמשת באיזה שהיא מערכת CRM.
בין עם זה Microsoft Dynamic Crm  / Sugar Crm / HighLearn / Rashim systems או כל מוצר אחר, לרוב המערכות היתה תמיד את אותה הבעיה :
הם מותאים מאוד לממשק וובי (ובמקרה הטוב יפתחו ויצגו במשהוא שונה מ IE על גבי וינדוס).
בשנים האחרונות אפשר לראות פתיחה לעוד אפשרויות גישה בצורת webservices או ממשקי REST.

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

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


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

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

יום שלישי, ספטמבר 06, 2011

לזכור להתקשר בשביל מזל טוב

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

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

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

לאחר שהוספת מספר יומנים / ספרי אנשי קשר (kfacebook , google ו אולי kwhatsup ברגע שחזור היומן) יש להוסיף לאותו האוגדן anniversary  & birthday.

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

 BEGIN:VCARD
ADR;TYPE=home:;;חוות אינטרנט של בזק לאומי;;;;Israel
BDAY:2002-02-23T00:00:00
FN:Whatsup
N:Whatsup;;;;
UID:1UGx1gnzEp
URL:www.whatsup.co.il
VERSION:3.0
X-KADDRESSBOOK-X-SpousesName:linux-il
END:VCARD

החלק היפה מתחיל לאחר שהוספת את כל אנשי החיבורים לשירותי הציבוריות (משתמשי google, facebook וכו').

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

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

יום שבת, יולי 09, 2011

באג מעצבן באקנודי

בשידרוג האחרון של אקנודי  בדביאן (4.6.4) שמתי לב שהמערכת הופכת ללא שמישה:
kmail לא עובד , אין תגובה מממשק המשתמש (תנודות עכבר לא מרונדרות) בקיצור המערכת תקועה.

אחרי קפיצה לtty0 אני מגלה שהתהליך akonadi_maildir טופס 100% מעבד וחוסם את akonadi_server , אם זה לא מספיק כמעט כל resource שהיה בעל יכולות קאשינג תקוע.

חיפוש גיגול והפתרונות :
להעיף resourceים שאתם לא משתמשים בהם: maildir , mbox , maildispatcher
אם זה לא עובד לאתחל את תיקיית הconfig

יום שבת, מאי 29, 2010

קטילה לeclipse

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

למה אני לא אוהב שמלמדים להשתמש בסביבה ? כי סביבת פיתוח לא אמורה לפגוע ביכולת שלי לפתח קוד מהר:
זה נכון שיש לסביבה הרבה תוספות נחמדות (refactoring לדוגמה), הבעיה שבהרבה פרוייקטים שאתה כותב אתה מוצא את עצמך מטפל בהגדרות הסביבה ולא בקוד שלך. כשאתה לומד שפה אתה מצפה ללמוד שפה ולא עם איזה סביבה המוסד נהנה לעבוד ,יש הרבה מאוד סביבות אבל את אקליפס אני ממש לא מחבב מהסיבות הבאות :
  • יש עומס נתונים בהצגה , יש פשוט יותר מדי אפשרויות ותתי אפשרויות. הסביבה לפעמים מאיימת.
  • זה באמת נחמד שהיו הבדלי בנייה בין גירסאות אבל זה לא אמור להשפיע על קבצי הבנייה - כן פרוייקט שנוצר ב3.2 לא בהכרח יעבוד ב3.5 (מעצבן אבל קיים). הדבר מפריע מאוד כאשר עובדים בעץ svn ואז צריך מספר קבצי פרוייקט בשביל לעבוד על אותו עץ קוד.
  • עם כל הכבוד יש סיבה לשמור הגדרות לא בworkspace יש את /etc ויש את תיקיית הביית אבל תיקיית הפרוייקטים זה המקום האחרון לשמור בהם הגדרות:
    זה לא שאפשר פשוט להעתיק את ההגדרות האישיות שלי לכל פרוייקט זה תוקע את היכולת לשים פרוייקט בעץ פיתוח (כן אני יודע שאפשר לתת הגדרות בסיס ולשים דגל בינארי אבל זה עקיפה מכוערת).
  • הבאג המעצבן שמצביע שיש שגיאה בקוד אבל ברגע שמבצעים שמירה אין יותר שגיאה, אני לא יודע עם דווח אבל הדבר הזה פשוט מעייף.
  • חוסר התמיכה בהפצות (העובדה שeclipse ללא תמיכה נורמאלית בדביאן למשל) מפריע רק שהפעם לא הסביבה אשמה , זה אשמתה של ההפצה - בדביאן לא מזמן 3.5 ניכנסה למאגרים (כי לא היה maintainer).
  • העובדה שהתוספים בתוכנה באים בתוכה ולא כקבצי deb/rpm/tgz אם כבר קיים תוסף אני מצפה לתת למערכת ניהול החבילות לטפל בנושא ולא לאקליפס- למה ? כי אני לא סומך על התוכנה להתקין דברים נוספים שהmaintainer לא היה מודע עליהם - כי גם הסרה של האפליקציה לא תסיר את הפלאגינים.
  • העובדה שאני לא יכול לשמור שינויים בקוד תוך כדי debug. ובאמת הdebuger של אלקיפס מצליח לשגע אותי - אני מעדיף להשתמש בGDB כבר (והנה הסבר ישן).
  • עם כל הכבוד לP2 (ולי אין עליו כבוד) - אני מבין שקשה לתת שגיאה מפורשת אבל שגיאה בצורה של : Cannot satisfy זו גם אחת הסיבות שאני מצפה שapt או מנגנון דומה יטפל בבעיה: יש מערכות שיודעות לטפל בהתקנה רק בשביל זה הם קיימות.
  • Eclipse dance - בונים ומקבלים שגיאות מוזרות ? אין כמו איזה make clean && build שיפתור את הנושא. ומה קורה עם אני מחליף JRE ? כל הרעיון של Java לא היה שמקפלים פעם אחת וזה עובד בכל מערכת הפעלה ?!
  • ואין כמו תיכון הUI , למען האמת למה כפתורי הcopy & paste נמצאים כל כך רחוק בתפריט ? אני יודע שיש הרבה אפשרויות שצריך להציג אבל צריך להיות מנגנון שיקבע כי בתפריט קודם כל צריכים להיות דברים שהם בשימוש רב..
    זה אמנם לא דרישת פיתוח זה רק נושא של נוחות עבודה, אבל לי זה מפריע (ניסיתי לחפש בקוד איפה אני משנה את הסדר אבל ראיתי שזה לוקח המון זמן וויתרתי).
למעשה כשאני עובד עם אקליפס אני מרגיש שאני עובד עם emacs עם קביים המערכת עושה כמעט הכול אבל בשונה מemacs היא עושה קצת מכל דבר, מלאה שעות הגדרה עבור על plugin ופשוט משגעת בפיתוח.

כיום אני יודע שכשאני כותב בJava משהוא יחסית קטן אני אעבוד ב Vim ולא באקליפס:
  • אותי מעניינת כתיבת קוד וביצוע ולא איך לגרום שהפרוייקט יטען / שקבצי ה jar נמצעים במיקום ושפתאום eclipse מחליט שהוא לא רוצה לתמוך בJOGL כי יש עידכון שחוסם את הסיפרייה.
  • עוד לא הגדרתי את Vim שיתמוך כמו שצריך בJava.

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

יום ראשון, מרץ 21, 2010

וכרגיל kde4win עושה לי צרות

מרפי , או מרפי מדוע אתה מציק לי ?! (ולמה אני עדיין ער ?!)

לפני שבוע כמה אנשים ראו אצלי בטויוטר סטטוס משעשע בנושא של KDE. הסיבה אני כרגיל מנסה לדחוף את kde4win בסביבת עבודה עיסקית כי אוהב להשתמש בKDE גם על וינדוס. הבעיה ? ב4.4 בשונה מ4.3 יש דרישה שaknodi ירוץ .
התוצאה ? 85% ניצול מעבד תקיעה של כל המערכת ביטול והפלת על מה שקשור לkde. וזה בדיוק כשהבוס מגיע.

בקיצור אני לא הולך להריץ את kontact על המכונה (מהסיבה הפשוטה שאין לי יום שלם להשקיע). אני מאוד מופתע כי עד עכשיו שימוש ב4.3 היה גם מהר וגם ללא תקלות מיותרות חוץ מהעובדה שהחליטו להוציא את השימוש ב ldap - כלומר חסל סדר רשימות כתובות של AD בשימוש מkmail בוינדוס.

אני מאוד מקווה שיהיו תיקונים (במיוחד בנושא של aknodi) בkde4win כי אני די אוהב להשתמש בזה (כשאין באגים).
אני צריך להראות את ה"פתרון מהקופסא" לשימוש של כל הנושא המשרדי :
אימייל
IM
פנקס כתובות
יומן

שני המתמודדים שלי תמיד הם thunderbird+firefox+pidgin לעומת kontact רק שהפעם kontact הפסיד טכני.
מה הופתעתי לגלות שowa sync עדיין לא מוכנס לעבודה בkontact הייתי מצפה שפתרון שהוא לא פארסינג לאתר יהיה כבר קיים בחבילת תוכנה מתקדמת. לדעתי הפיתצר הזה יחסית חסר אבל בגלל כל הנושא של akonadi אני אפילו לא ניכניס לנסות לפתוח את הפיטצר הדרוש (יש המון מה ללמוד ואין לי כרגע את הזמן הדרוש לכך). אני אישית מצפה לקבל תפריט בחירה להגדרה של כל מה שקשור ל owa בהגדרה. אני יודע שאפשר להגדיר ידנית את תיבת המייל , את חיפוש הכתובות (LDAP) אבל זה סיפור לחפש כל פעם את ההגדרה המדוייקת (וזה עוד לפני הסיפור של לקבל גישה דו כיוונית לshared folder שמוגדר בשרת). כן אני יודע שזה בניגוד לתקן IMAP4 אבל מה לעשות אני מצפה מתוכנה שפשוט תעבוד. כן כן אתה אמור למצוא את התסריט שעושה עבורך את העבודה


יום שני, פברואר 01, 2010

איך להמנע מצרות ב gsoap

לפני מספר חודשים עסקתי בנושא הXML-RPC ואכשיו חזרתי לשחק עם gSOAP (וכן תודה לidkn על ההמלצה).
בשונה מהעברה רגילה יש סכנה בשימוש בפרוטקולי העברה:
ישנה אפשרות למידע פגום או יצאה מהtypeים.

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

דבר ראשון שצריך לשים לב שSoap בשונה מפרוטוקולי העברה אחרים (ולמעשה ביחד עם XML-RPC) כפוף לכל מגבלות הHTTP (לדוגמה אין מידע בינארי). אמנם נכון שקיים פרוטוקול bXML אבל משום עוד לא נתקלתי במימוש של gSOAP שתומך בזה כברירת מחדל (למעשה לא נתקלתי בשום חבילה שעושה את ההמרה בצורה שקופה). נכון שקיימת אפשרות אולם לפי הבנתי לא כברירת מחדל (וזה חבל לדעתי).

עקרונית לא צריכה להיות בעיי


Here is the beginning of my post. And here is the rest of it.

יום שלישי, מאי 12, 2009

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

בזמן אני יושב ועובד על מודול הפרל שמטפל בנושא Rashim (יש עוד מודול שמטפל בHighLearn ) ונתקלתי בנקודה מאוד מסוכנת.

בעוד כולנו רגילים לעובדה שביצוע עיסקאות חיוב צריך להתבצע בצורה מוצפנת (TLS , SSH וכו' ) או אפילו בשימוש ב PKI בסיסי מתברר שכמה אנשי IT שכחו מזה.


בעוד מרבית אפשרויות הסליקה ממליצות בחום שימוש בצורה מאובטחת (אומנם ב ubercart אומרים כי ייתכן ועדיף כי כל האתר יהיה מוצפן ולא רק חלקים ממנו) במספר מוסדות אקדמים אנשים בחרו להתעלם מההמלצה החמה (של להשתמש בסוג כל שהוא של הצפנה בעת ביצוע מעברים כספים) והרימו את כל המערכות בצורה בלתי מאובטחת (חלק מהסעיפים לא כולם) :
  • ללא שינוי הגדרת ברירת המחדל בשרת בסיס הנתונים.
  • אפשרות של התחברות שלא מהרשת הפנימית ללא שימוש במפתחות הצפנה בהתחברות למערכת:
    לעובדים בעלי הרשאות יתר (מנהלי מערכות , אופרטורים , מרצים , מזכירות ) מומלץ בחום רב ללמוד על מפתח פרטי וציבורי והצפנה אסינכרונית וכן במידע ויש VPN הוא חייב להיות מוצפן אחרת כל ילד בן 12 יעשה במערכת מה שהוא רוצה.
  1. משום מה מניחים כי יש אנשים שצריכים לקבל את כל הנתונים מבסיסי המערכת - "נו הוא מנהל אגודת הסטודנטים הוא צריך את ההרשאות " או המזכירה צריכה יכולת קריאה של כל המיילים של מנהל המחלקה.
  2. משתמשים מבקשים להיות Super adminstrators (מושג שמאוד הפתיע אותי האמת) או בכלל בהרשאות בשביל סמל סטטוס.
  3. הרשאות root לפקידים או למהנדסי מערכת (שאין שום סיבה שיהיה להם הרשאות כאלה).
  • לא קיימת נעילת משתמש לאחר מספר ניסיונות התחברות לבסיס הנתונים.
  • בסיסי הנתונים (לאו בהכרח של המערכות הכספיות ) לא מאובטחים ומאפשרים לבצע שאילתות לאנשים לא מורשים.
  • לא קיים שרת Syslog מרוחק ומאובטח בו יאוכסנו כל הלוגים של המערכת.
  • ללא שימוש בהגנה מהתקפות Man in the middle.
  • מערכות ששולחות VB למשתמשים (קוד צד לקוח) דורשות מהמשתמש לקרוא את הקוד ולהבין מה לא בסדר באתר בשביל שגם הוא יוכל להשתמש בו (מהסיבה ש VB לא עובד על מרבית המערכות) או להתקין תוכנות צד שלישי בשביל שהאתר יעבוד אצלו לדוגמה תסריט greace monkey .
  • שימוש בסיסמאות פשוטות.
  • שימוש בשמות משתמש מרונדרים (כלומר שניתן להבין מה יהיה שם המשתמש לפי השם פרטי ושם המשפחה).
  • שליחת השגיאה המדוייקת למשתמש (אם זה שאליתת SQL לא נכונה לדוגמה).
  • שימוש בשירותי TelNet במקום ssh.
  • העברת מידע כלכלי ב plain text XML במקום במוצפן (בן עם באמצעות מפתח ציבורי של משתמש או אפילו שימוש ב SSL).
  • חוסר הפרדה פיזית (ולא שימוש בחוקי iptables זה לא הפרדה פיזית) בן הרשתות.
  • אתרים שכתובים בניגוד לתקני W3C אלה בצמוד לדפדפן כלשהוא (IE6 לדוגמה) ומסתמכים על טוב ליבם של המשתמשים (מכיוון שהאתר לא עובד בדפדפנים בעלי התוכנה מניחים שהלקוחות לא ינסו להשתמש במשהוא שיגרום לאתר לעבוד).
  • שימוש בדואל שלא עבר חתימה (GPG) מאפשר זיוף של דואל בשמם של האנשים.
צריך לזכור שכמעט כל החברות שמתעסקות בגביה דורשות שימוש בהצפנה - וכמו שהוגב בבלוג שלי ע"י עובד חברת ראשים הפעלת אבטחה היא החלטה של המוסד ולא של החברה.

אמנם קיימות חברות שלא יאפשרו שימוש במוצריהם ללא שימוש בהצפנה (לפחות ע"פ הכתוב באתרי החברה).

כל אדם בעל ידע בסיסי במחשבים ידע להשתמש בתוכנת האזנה (WireShark) בשביל להאזין לרשת ועם ידע בסיסי בתקשורת (Wi-Fi ) יוכל להתחבר במרחקים שלא יאפשרו את זיהוי.
הוא אינו צריך את כל המידע בשביל לקבל גישה גם חלק ארי מהמידע יעזור.
אפילו אם ניקח NTLM ונשתמש בו וסיסמת המשתמש קצרה יחסית (פחות מ6 תווים) תוך מספר שעות (~45) על cluster של 16 מחשבים סטרנדרטים הסיסמה נפרצת.
גם הצפנה של התעבורה לא מונעת את הבעייה מהסיבה הפשוטה שאם המידע מאוכסן שלא בצורה מאובטחת (מוצפן לדוגמה) אז אין שום בעייה לקבל את הנתונים.

זיהוי פיזי של החודר -

הוכחתי ב2005 שבתנאי עיר ניתן להתחבר במרחק של 1.2 ק"מ ב 2006 באחד הקיבוצים בדרום התחברו למרחק של 12 ק"מ.

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

כל הנקודות הן כאשר יש LOS פנוי.

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

ברמת התוכנה -

בגלל שכמה מערכות יכולת להיות מותקנות על מערכות הללו מתעוררת בעיה רצינית :

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

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

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

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

אני כבר לא מדבר על SQL Injection שיאפשר לקבל את כל המעברים הכספים שכבר נעשו .
כאשר מתבצעת שימוש ב 3D-secure יש שרתים ששומרים את המידע על כל הטרנזקציות שאי פעם היו כלומר אם אתר כלשהוא משתמש בשירות סליקה "מאובטח" אין הדבר מצביע בצורה כל שהיא על אבטחת המידע של השרת המארח.
שימוש ב SSL או TLS או כל סוג של הגנה מ MITM לא מצביעה בשום צורה על אבטחת השרתים.

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

צריך לזכור שכל עוד אין הפרדה פיזית בן הרשתות הפנים אירגוניות תמיד יהיה אפשר להגיע למידע:

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

חשוב לזכור שמרבית גנבות האשראי אינם מהאזנה אלה מאבטחה לקוייה של השרתים המארחים.

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

מערכות אחרות מניחות שאף אחד לא ירצה להתחבר בתור משתמש אחר ומשאירות פתח לSQL injections.

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

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

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

טוב אז מי צריך לדאוג בנושא ?

כאשר יש מערכת חיוב אלקטרונית במערכת שאיננה מאובטחת ו :

סטודנטים שמוסדות שלהם מותקנת מערכת מכלול 2000 (מכלול-נט) ואין שימוש ב SSL (וזה ההתחלה).
סטודנטים שבמוסדותיהם מותקנות מערכות סל"ע (HighLearn ) כאשר אין שימוש ב SSL.

יום ראשון, אפריל 12, 2009

איזה כיף שיש עזרה מהקהילה

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

אז מצד אחד אני מוצא את עצמי קורא RFCים ורשימות תפוצה בנושאים מוזרים (מישהוא אמר IMAP/SIP/SSH אופן מוקו כל מני דברים שלא ממש קשורים אחד בשני) .
הבעיה היא שאני מבזבז על זה המון זמן (ולא לא הגעתי למסקנה הזאת לבד) , בת הזוג כועסת אני מתעקב בעבודה (כי החלטתי שאני לא כל כך בטוח איך TCP מתמודד עם פאקטים בצורת א-ב-ג) , ובכלל אנשים אומרים שאני מסתבך לחינם (אני סתם חופר ).
ובסוף עוד אנשים חושבים שאני יכול לעזור להם בLDAP (טוב נו אז קראתי כמה RFCים , כתבתי כמה שטויות ב פרל) .
אתמול התחלתי לעבור על פרוייקטים שאני צריך להגיש במסגרת האקדמיה וחשבתי "הממ יש פה איזה שיעורי בית משעמים אולי נוסיף קצת פלפל ? " והנה התוצאות.



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

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

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

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

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