Feeds RSS

יום רביעי 8 יולי 2009

simple XML-RPC server in perl

So you are in need for a fast way to implement an XML based service ?
Few months ago i got an assignment to write a test project (with all the SRS/STP/STD) since i just got some extra time recently i realized it could be a great time for learning new technologies.

The first find i remembers that it is time to sharpen my TAP and perhaps study a bit cucumber things.
Thanks to Ido i was able to find alot of info but i noted that it took me too much time ,
So i dropped the the cucumber and went back to TAP.
Wow developing in TDD after not doing so more then a year was a bit problematic but hey that was fun.

next was the real thing SOAP vs XML-RPC to bethe middle-ware protocol (gui <-> middle ware < -> db ).

After googling and reading and help (again from Ido) i choose XML-RPC you might ask "why ?"
The reason is simple - KISS plus it did exactly what i need (no need for object serialization ).
There are many other protocols but i wished an XML based and one that it would be relatively easy to work with.

The fun part came and there was the module to work with ,
I really don't know but allmost in all the tutorials i found there was use of Frontier or RPC2
while at first glance i didn't see anything bad in Frontier i start to work with.
Basically a standalone daemon would look like :

#!/usr/bin/perl -w
use Frontier::Daemon;
use DBI;

sub sumAndDifference {
my ($x, $y) = @_;
return {'sum' => $x + $y, 'difference' => $x - $y};
}


$methods = {'sample.sumAndDifference' => \&sumAndDifference};
Frontier::Daemon->new(LocalPort => 8080, methods => $methods)
or die "Couldn't start HTTP server: $!";

Simple right ?
Just returning a hash with the correct parameter values and all should be ok ?
The problem becomes when you need to use language as C# or C where strong types are used.
Then you will probably find your self searching for a way how to work with (to use the correct int or double).

While that was hard i found some hacks (using Frontier::RPC2) so you could do some thing like :
use Frontier::RPC2;
my $foo = Frontier::RPC2->new;
$int_object = $foo->int(42);
But again there was a but , how do i work with exceptions ?
Or even better what about function signatures ?
So if you don't need the signatures (call with unknown amount of parameters or unknown return type it is a benefit).
Just remember set the Return type using array / struct or void.

For instance i need to create a fault or an exception there is no documentation how to call it (using Frontier::Deamon).
I googled , ircd and what not.
Then I started to read the code and realized that in my tight schedule it will be too expensive (to find how to call it by reading all the connected modules).
So having only one spare day i started the search from scratch , i even thought about using cgi solution (Frontier::RPC2),
but then i stumbled on XML::RPC wow that was a relief.

the basic server look like :


use RPC::XML::Server; # The server
use RPC::XML; # will be used for functions

sub get_structure_by_string{
return
RPC::XML::struct->new(
{
"someString" => RPC::XML::string->new( $_[1] ),
"someInt" => RPC::XML::i4->new( 2 ),
"someDouble" => RPC::XML::double->new("3.14" )
}
);
}

$srv = RPC::XML::Server->new(port => 9000); #server object

$srv->add_method(
{
"name" => "makeFault", # calling this function will throw fault aka exception
"signature" => [''], #what are the return type and call parameters beware of the spaces!
"code" => sub { return RPC::XML::fault->new( 99999, "Test drive error" );}
}
);

$coder->add_method(
{
"name" => "get_structure_by_string",
"signature" => ['struct string'],
"code" => \&get_structure_by_string
}
);
$srv->server_loop; # Just work
in this example you see how to use both exception and return structure.
The receiving part (for instance XML-RPC.NET) could looke like :

using CookComputing.XmlRpc;

public struct Foo
{
public String someString;
public int someInt;
public double someDouble;
}

[XmlRpcUrl("http://192.168.0.135:8080/RPC2")]
public interface Interface
{
[XmlRpcMethod]
Foo get_structure_by_string(String parameter);
[XmlRpcMethod]
void makeFault();

}
As you see the signature has to be as the RPC::XML definitions (while in Frontier there is no check perhaps a feature in Frontier::Deamon ? ) .

Another benefit that i found in RPC::XML is the speed the same code work much faster on startup the Frontier::Daemon.

btw the project was released by MIT license (Connector.pm) the perl coding took me 14 coding hours (from 9 am till 11 pm) while the longest things was the switch from Frontier to RPC::XML.

יום ראשון 5 יולי 2009

זה לא פוסט פוליטי

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

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

בהתחלה הייתי סגור כי קיים שיתוף פעולה בן עמותת המקור לארגון הבן לאומי אולם היום נוכחתי לדעת כי הדבר לא נכון.
אם כן מהיא תוכנית ה Internship של הFSF שאליה שלחתי את הפרטים (ולא בטוח שהתקבלתי) -
למעשה מדובר בדבר דומה לBug Bounties ולתוכניות החברתיות שנעים בן הקהילות השונות רק שפה מגיע גג גדול יותר.
העבודה נעשית בחינם אולם בחו"ל (ובחלק מהאונבריסטאות בארץ) קיימים מספר מלגות שמאפשרות מחייה או עזרה בלימודים תוך כדי תרומה.

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

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

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

שיעורי בית ברישיון חופשי

כחלק מהלימודים שלי לקחתי עשיתי קורס טסטינג (הידוע יותר בשם QA) , בחרתי לעשות חלק מהפרוייקט בפרל (את צד השרת) בגלל שזו אחת השפות שאני אוהב והיא נתנה לי מענה מספיק טוב למה שייתי צריך.
הפרוייקט מורכב משלושה חלקים :
בסיס נתונים mysql
ממשק xml-rpc הכתוב בפרל
ממשק gui הכתוב בשפה האסורה (דרישות הפרוייקט).

הפרוייקט משוחרר תחת שני רישיונות הקוד תחת רישיון MIT , והתיעוד תחת CC-BY-SA .

אחת הבעיות שהכי הפריעו לי זה חוסר באפליקציות שיתנו לי מענה אחיד לכתיבת התיעוד.
כלומר נכון שיש את rational של חברת IBM שהוא כלי יחסית טוב אבל אני רוצה את האפשרויות האלה בתוך פרוייקט קוד פתוח או לפחות התממשקות ל kdeveop

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

מקווה שזה יעזור למישהוא בעתיד.


נ.ב.
לא היה לי זמן לעשות חבילות התקנה (deb ו exe) בתקווה שאעשה זאת בקרוב.


יום רביעי 1 יולי 2009

אלפון במערכת ה HighLearn

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

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

התסריט משתמש HTML::TokeParser בשביל הפארסניג ומה שנשאר הוא רק לבצע את ה Vcard ופה אני די ניכנסתי לבעייה כי משום מה כאשר אני מייצר אובייקט חדש אני מקבל שגיעה :
Can't locate object method "real" via package "work"
טוב אין כמו קצת גיגול על הבוקר לא ? :-)

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

באם יש צורך למצוא את כל הקורסים צריך להשתמש בדף PortalNewsFrames.asp שם בתוך ה span totalRecordsTR02 צריך לעבור על הקישורים ולשלוף את המתודה onclick וממנה את מספר הקורס לדוגמ

onclick="OpenLESkin('/Eclass/CourseFrames.asp?vcCourseGUID=&vcCourseID=50627&language=972',0)"

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

יום שני 29 יוני 2009

תיבת מייל ובתמורה ויתור על זכויותיכם

עברה כחצי שנה שקיבלתי דוא"ל לתיבת הדואר הראשית שלי דרך המכללה אמרתי הגיע הזמן לבדוק את הנושא.
קודם כל גילתי ששרת לא נגיש יותר (post.sce.ac.il) מהסיבה הפשוטה שמישהוא פשוט שכח לעדכן את שרתי הDNS.
טוב גיגול עזרה של צפריר (ב #linux-il) ועוד מספר מדריכים ומצאתי איך להגיע לשרת ... ואז מה ? השרת בכלל לא מרשה לי להתחבר
אין כמו גיגול טוב בשביל למצוא עוד תוכניות עם עוד יתרונות.
אכשיו למדתי את השימוש המעניין של host -t mx וקצת יותר על nslookup.

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

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

רמי שלום ,

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

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

כמו כן נתון כי החברה בעלת הזכות להפיר את זכויתי הקנייניות (פרק 9 לחוזה) כמו קיימת הכרזה כי החברה רשאית לאסוף עלי פרטים ואף לגשת לפרטי האישיים (פרק 10 לחוזה) לשם הצורך העיסקי של החברה (קרי Microsoft) .
כמו כן יש הוראה כי ניתן האישור להעביר את המידע האישי שלי לגורם שלישי במדינות זרות ( פרק 10).
במהלך החוזה ישנה התייחסות לאישור להתקין במחשבי תוכנות צד שלישי (פרק 11) וע"פ החוזה אסור לי לבדוק מה החברה תתקין לי במחשב האישי שלי.
החוזה מציין בפירוש כי עלי להתחייב לחוקים האמריקאים כמו כן ישנה התייחסות להפעלת אמצעי DRM .
כמו כן החוזה מראה כי כל האחריות היא עלי (פרק 21).

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

בתשובה קיבלתי :

תיכנס לאתר של המכללה

ותבחר לסטודנט > דואר אלקטרוני

אם אתה לא מסתדר תתקשר אלי

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

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

מצד שני האם ליאור מסכים לתנאי הרישוי ? ;-)

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

משום אני בטוח שכמעט בכל מוסד אקדמי קיים לפחות שרת דואר אחד שיכול לטפל בנושאים בן אם זה exim או postfix אבל אלוהים למה להעביר את הניהול לחברה חיצונית ?

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

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