Δευτέρα, 25 Φεβρουαρίου 2008

Μετά από μια εβδομάδα αναζήτησης στο Σύννεφο, επιτέλους βρήκα την λύση! Χρειαζόμουν έναν εύκολο τρόπο να καλώ Functions που υπάρχουν σε DLL. Οπότε ήθελα να αποφύγω την χρήση του κλασσικού JNI, λόγω της δυσχρηστιας του.. οπότε σήμερα βρήκα το JNA [=Java Native Access]! Ίσως την καλύτερη λύση στο προβλημα μου και σας το προτείνω.. https://jna.dev.java.net/

Πέμπτη, 21 Φεβρουαρίου 2008

Check out my Facebook profile

facebook
George Anagnostaros
George Anagnostaros has:
9 friends
1 group

Check out my Facebook profile


I set up a Facebook profile with my pictures, videos and events and I want to add you as a friend so you can see it. First, you need to join Facebook! Once you join, you can also create your own profile.

Thanks,
George

Here's the link:
http://www.facebook.com/p.php?i=1057964466&k=S2DU2Z6544TF5AAEUJ4TU&r&v=2
This e-mail may contain promotional materials. If you do not wish to receive future commercial mailings from Facebook, please opt out. Facebook's offices are located at 156 University Ave., Palo Alto, CA 94301.

History of mind...

Τρίτη, 19 Φεβρουαρίου 2008

Γιατι XML-RPC;

Το XML-RPC έχει πολλά πλεονεκτήματα έναντι άλλων τυποποιήσεων που χρησιμοποιούνται για Web Services, όπως το SOAP.
Το πιο βασικό πλεονέκτημα είναι ότι είναι απλό και δεν επιδέχεται προσθήκης επεκτάσεων, όπως γίνεται με τα πιο σύγχρονα πρότυπα που σου δίνουν δυνατότητα να δημιουργήσεις custom complex τύπους και σε οδηγούν στο να φτιάξεις έναν κλώνο του μοντέλου του συστήματος. Αυτό μοιάζει να ειναι εύκολο και πολύ αντικειμενοστραφές, αλλά στην πραγματικότα καταλήγει να ειναι δύσκολα συντηρίσιμο. Εκτώς κι αν το σύστημα κατασκευάζεται για να λειτουργήσει αποκλειστικά και μονο με Web Services, οπότε το μοναδικό μοντέλο που θα υπάρχει ειναι αυτό των Web Services.
Το δεύτερο πλεονέκτημα ειναι ότι είναι πολύ απλό και ξεκάθαρο το τι μπορείς να κάνεις. Είναι σαφές ότι οι τύποι που μπορείς να χρησιμοποιήσεις ειναι Double, Integer, String, Boolean, Date, Base64, Array, Struct. Που είναι τύποι που υποστηρίζονται από όλες τις γνωστές γλώσσες προγραμματισμού κι όχι οτιδήποτε, όπως πχ Serializable που θα υποστηριζοταν μονο από Java. Οπότε Web Services γραμμένα σύμφωνα με το XML-RPC specification μπορούν να κληθούν [θεωρητικά] από οποιαδήποτε γνωστή γλώσσα προγραμματισμού, όσο περίπλοκα κι αν έχουν φτιαχθει. Αλλά επισης αυτοι οι τύποι ειναι αρκετοι, αν όχι και παραπάνω απο αρκετοι [ένα Integer μπορεί να γραφεί ως Double, ή ένα Array ως Struct κ.ο.κ.] ώστε να καλύψουν κάθε περιπτωση.
Τρίτον, αυτή η απλότητα το καθιστα πιο εύκολο για τον προγραμματιστή, αλλά και για το ίδιο το μηχάνημα το οποίο δε θα χρειαστεί να κάνει περιπλοκους "αυτοματοποιημένους" ελέγχους ορθότητας του μηνύματος, απλά θα το πάρει και θα το μετατρέψει σε αυτους τους στοιχειώδης τύπους που μπορεί να χρηισμοποιήσει ο Developer.

Υλοποιήσεις για xml-rpc apis μπορείτε να βρείτε για πάρα πολλές γλώσσες προγραμματιμού, αλλά σίγουρα τα καλύτερα είναι για Java και .NET που θεωρουνται και οι πλέον δημοφιλείς.

Το api που χρησιμοποιώ εγώ ειναι της Apache http://ws.apache.org/xmlrpc/xmlrpc2/. Το οποίο προσφερει κάποιες επεκτάσεις, που καλό ειναι να χρησιμοποιηθούν με πολύ προσοχή. Αυτές οι επεκτάσεις προσφέρουν, μεταξύ αλλων, ένα πολύ χρήσιμο χαρακτηριστικό. Την συμπίεση των XML μηνυμάτων. Αυτό έχει ως αποτέλεσμα την σημαντική μείωση της κίνησης. Καθώς τα XML που δημιουργούνται είναι αρκετα μεγαλα, ενώ στην πραγματικότητα ειναι επανάληψη ενος πολύ μικρού λεξιλογίου. Να σημειωθεί ότι ο server τα στέλνει συμπιεσμένα μονο εαν στο header του request υπάρχει σχετική παραμετρος. Πράγμα που κάνει το συγκεκριμένο api να παραμένει συμβατο με το πρότυπο καθως μονο αν του δωθει η "εντολη" θα αξιοποιήσει το feature αυτο.

Αλλά επίσης υπάρχουν αρκετα ακομα, τα οποια δεν έχω χρησιμοποιήσεις καθώς η γλώσσα προγραμματισμού που χρησιμοποιώ είναι η Java. Οποτε και δε μπορώ να σας προτεινω κάποιο συγκεκριμένο! Αλλά ο φίλος μου ο Γούγλης ξέρει!

Κυριακή, 17 Φεβρουαρίου 2008

Easy Web Services XML-Rpc

Ενδιαφέρεσθε να φτιάξετε Web Services; Ειτε ως server είτε ως client; Τότε το ακολουθω σας ενδιαφέρει. Το πλέον σημαντικό όμως πιστεύω οτι ειναι το κομμάτι που ειναι γραμμένο με ITALICS.
Τον τελευταίο καιρό έχω αρχίσει να ασχολούμε με Web Services, λόγω μιας ανάγκης που υπήρξε από έναν πελάτη για να του παρέχουμε την δυνατοτητα να φτιάξει Web Site που να αξιοποιούν το back office της εφαρμογής μας.
Όμως λόγω του μεγάλου πλήθους των λειτουργιών που παρέχει η εφαρμογή, έπρεπε να βρούμε έναν γενικό τρόπο ώστε να κάνουμε αξιοποιήσιμη όλη αυτή την λειτουργικότητα. Επίσης έπρεπε να μην γινει τελειως γενικά, γιατι αυτός που θα χρησιμοποιεί το back office μέσω Web Services θα πρέπει να έχει κάποιους περιορισμους. Οπότε καταλήξαμε στην δημιουργία ενός επιπέδου facade. Δηλαδή κλάσεων που έχουν μεθόδους που κάνουν κάτι το ολοκληρωμένο, πχ αναζήτηση διαθέσιμων ξενοδοχείων, ώστε να χρησιμοποιηθούν για τα Web Services 1:1. Οπότε το μονο που μας χρειαζοτανε ήταν ένας τρόπος να καλούμε αυτές τις μεθόδους.
Αρχικά όλες οι μέθοδοι χρησιμοποιούσαν primitive τύπους, δηλαδή String, Double, Boolean, Date, αλλά αυτό δεν ήταν αρκετό. Χρειαζόμασταν και σύνθετα αντικείμενα που χρησιμοποιούμε στο back office, όπως για παραδειγμα το αντικείμενο Customer. Το οποίο υπήρχαν δύο τρόποι να το παρουμε σε ένα Web Service, ο ένας ήταν να δημιουργήσουμε xsd που να το περιγραφει ως ComplexType, το οποίο θα σήμαινε ότι πολύ δύσκολα θα μπορούσαμε να το αλλάξουμε από την στιγμή που θα το δώσουμε στον πελάτη, ενώ ο άλλος ήταν να το παρουσιάσουμε ως ένα Map όπου το κλειδί θα είναι το ονομα του member και value η τιμή του. Προφανώς η δεύτερη λύση θεωρήθηκε καλύτερη καθώς το μοντέλο που χρησιμοποιούμε ειναι πολύ μεγάλο και υπάρχουν πολλά που δε θα θέλαμε να τα ξέρει καποιος που φτιαχνει Web Services. Αλλά οι ανάγκες για τύπους δε τελειώνουν εδώ. Χρειαστήκε και η υποστήριξη του αντικειμενου List. Για το συγκεκριμένο υπήρχαν δυο εναλλακτικές, ή θα έπρεπε να το αναπαραστίσουμε όντως ως λίστα, ή θα μπορούσαμε να το παραστίσουμε ως ένα Map όπου για κλειδι να είχε την θέση του αντικειμένου στην λίστα και για τιμή την πραγματική του τιμή. Αλλά προτιμίσαμε να μην το μπλέξουμε. Αλλά δε σταματήσαμε εκει, καθώς υπήρξε ανάγκη να στελνουμε ολοκληρες φωτογραφίες, πχ εικονες απο τοπία. Οπότε χρειαστήκαμε ακομα έναν τύπο, το byte[]. Το οποίο ούτε κατα διανοια δε σκεφτήκαμε να το υποκαταστίσουμε με κάτι αλλο.
Οπότε έπρεπε να βρούμε μια τυποποιηση που να υποστηρίζει τους εξείς τύπους: String, Double, Boolean, Date, Map, List, byte[]. Εξεταστηκαν διαφορα αλλά θέλαμε κάτι που να μην ειναι αποκλειστικά Java, να μην έχει WSDL και τυποποιήσεις που σχεδον κανεις δε χρησιμοποιεί αλλά κάτι απλό που ο καθένας μπορεί να αξιοποιήσει, οπότε καταλήξαμε στο XML-RPC, για το οποίο υπάρχει μια υλοποιηση απο την Apache
Το XML-RPC είναι μια τυποποιηση που χρησιμοποιείται στα Web Services απο το 1999, πράγμα που την κάνει απόλυτα συμβατή με κάθε γνωστή γλώσσα προγραμματισμού. Επίσης η υλοποιηση της ειναι τόσο απλή και γενική που διευκολύνει, διοτι σε αφήνει να δημιουργήσεις ότι θέλεις χωρίς να χρειαστεί να χρησιμοποιήσεις ένα τεράστιο και δυσνοητο specification. Όπως συμβαίνει σε άλλα specs, που σου προσφέρουν την δυνατότητα να ειναι πιο κατανοητό το XML που χρησιμοποιείται για την επικοινωνία, αλλά από την άλλη έχει αρκετά περίπλοκο τρόπο να τα χρησιμοποιήσεις, σωστά. Η βασική ιδέα του XML-RPC είναι ότι ένα Web Service δεν ειναι τίποτα περισσότερο από ένα remote call, κάτι σαν αυτό που έκανε παλιά η CORBA και το RMI. Οπότε τα μονα που χρειάζονται είναι:
α) Παραμετροι ειδόσου+Όνομα Μεθοδου=αίτηση προς την υπηρεσία
β) Παραμετροι εξόδου ήΛάθος=απάντηση της υπηρεσίας
Εμεις προκειμένου να το κάνουμε ακόμα πιο εύκολο αποφασίσαμε ότι θα δεχόμαστε μονο μια παράμετρο εισόδου που θα είναι ένα Map, όπου κλειδι θα έχει το όνομα της παραμέτρου και τιμή την τιμή της. Οπότε έτσι καταφέραμε να έχουμε named parameters που σημαίνει ότι δεν υπάρχει θέμα σειράς, που ειναι κάτι που δε μπορείς εύκολα να ελέγχθει στα Web Services. Επίσης αποφασίσαμε, κατα αντιστοιχία, να έχουμε μονο μια παράμετρο εξόδου, πάλι Map.
Οποτε, ουσιαστικά ο τρόπος λειτουργίας είναι "περνάς ένα Map παραμέτρων σε μια μέθοδο που σου επιστρέφει ένα Map παραμέτρων, ή ένα λάθος". Πράγμα που απλοποιεί πάρα πολύ την δουλειά και του client. Οπου για λόγους testing έχει χρειαστει να υλοποιήσω. Αυτή η ύπαρξη του Map ως κυριου τύπου με οδήγησε στο να δημιουργήσω μια κλάση που ονομα "Mapable" όπου πολύ απλά φτιάχνω subclasses αυτής στην μεριά του Client και δημιουργώ εύκολα και γρήγορα το μοντέλο μου, απλά προσθέτω getters και setters που απλά κάνουν get και put σε ένα private Map data, οποτε και προσομοιώνω αυτό που γίνεται γενικότερα στα Beans. Επισης η Mapable έχει δυο μεθόδους, fromMap(Map) που κάνει προσπέλαση ένα ενα τα κλειδια του Map και ελέγχει αν υπάρχουν οι απαραίτητοι getters, κι αν δεν υπάρχουν το τυπώνει στην κονσόλα ώστε ο προγραμματιστής να τους προσθέσει, κι αν οι getters αυτοι επιστρέφουν Mapable τότε πηγαίνει κι ένα επίπεδο πιο μέσα και ελέγχει και το member κ.ο.κ. Επίσης στην περίπτωση που γυρναει λίστα τότε ελέγχεται αν υπάρχει μεθοδος του τύπου getONOMA_MEMBER(int index) ώστε να ελεγχθει αν αυτο που γυρνάει ειναι όντως αυτο που έχει η λίστα.
Βέβαια ακόμα το έχω σε πειραματικό στάδιο, αλλά πιστεύω ότι θα μπορούσε να φανει πολύ χρήσιμο να μην βάζεις private members αλλά να τα κρατας όλα σε ένα private Map.

ΥΓ: Οποιος ενδιαφέρετε ή έχει καποια επιπλέον ιδέα, πολύ ευχαρίστως να μου την γράψει.

To MSN Messenger του Μάκη

Την περασμένη εβδομάδα μου στειλανε ένα πολύ πετυχημένο email με μια εικονα του MSN Messenger του Μάκη!

Τετάρτη, 13 Φεβρουαρίου 2008

Τι ακούει ο άντρας:... (joke)

Τι λέει μια γυναίκα:

"Το σπίτι είναι χάλια Γιώργο,
Πρέπει να το καθαρίσουμε μαζί,
Έλεος, όλα τα πράγματα σου είναι στο πάτωμα,
Μην παραπονιέσαι αύριο αν μείνεις χωρίς ρούχα,
Θα πρέπει να βάλω πλυντήριο τώρα!"

Τι ακούει ο άντρας:

Μπλα, μπλα, μπλα, μπλα ΓΙΩΡΓΟ
Μπλα, μπλα, μπλα, μπλα ΜΑΖΙ
Μπλα, μπλα, μπλα, μπλα ΣΤΟ ΠΑΤΩΜΑ
Μπλα, μπλα, μπλα, μπλα ΧΩΡΙΣ ΡΟΥΧΑ
Μπλα, μπλα, μπλα, μπλα ΤΩΡΑ

Δευτέρα, 11 Φεβρουαρίου 2008

Ένας παπάς και μία καλόγρια (joke)

Ένας παπάς και μία καλόγρια χάνονται σε μία χιονοθύελλα κι εκεί που περπατούσαν εντελώς αποπροσανατολισμένοι ξαφνικά βλέπουν ένα ωραίο σπίτι. Ανοίγουν την πόρτα και μπαίνουν μέσα, αλλά δεν ήταν κανείς.

Δεν πειράζει σκέφτηκαν και πήγαν να κοιμηθούν, αλλά υπήρχε μόνο ένα κρεβάτι κι έτσι ο παπάς το παραχώρησε στην καλόγρια και θα κοιμόταν ο ίδιος στο πάτωμα μέσα σε έναν υπνόσακο.
Εκεί που είχε ξαπλώσει αυτός και είχε κλείσει και το φερμουάρ του υπνόσακου, του λέει η καλόγρια:
- Πάτερ, κρυώνω.
- Αδερφή, κάτσε στο κρεβάτι, θα πάω να σου φέρω εγώ να σκεπαστείς.
Πάει μέσα, ανοίγει τη ντουλάπα, της φέρνει μία κουβέρτα.
Ξαναπέφτει για ύπνο στο πάτωμα, όταν μέσα σε δύο λεπτά:
- Πάτερ, ακόμα κρυώνω.
- Αδερφή, μην ανησυχείς, θα σου φέρω εγώ κουβέρτα.
Πάει πάλι μέσα, ανοίγει τη ντουλάπα και της φέρνει κι άλλη κουβέρτα.
Ξαναπέφτει για ύπνο, οπότε γυρνάει σε ένα λεπτό πάλι η καλόγρια:
- Πάτερ, κάνει πολύ κρύο γιατί εγώ ακόμα κρυώνω.
- Αδερφή, κοίτα. Είμαστε μόνοι μας στη μέση του πουθενά και δεν μας βλέπει κανένας.

Θα σε πείραζε για απόψε να κάνουμε ότι κάνει ένα παντρεμένο ζευγάρι;
- Όχι πάτερ, δεν θα με πείραζε.
- Ε τότε σήκω πάνω και πάρε την μόνη σου την επόμενη κουβέρτα!

Τρίτη, 5 Φεβρουαρίου 2008

ΜΙΑ ΦΥΣΙΟΛΟΓΙΚΗ ΜΕΡΑ ΕΝΟΣ ΕΜΟ

5:00πμ :Ξύπνησα...Είδα εφιάλτη! Ειχα χασει,λεει,το μολυβι που βαφω τα
ματια μου.Ταραχτηκα...

05:15πμ :Ξανακοιμηθηκα...
07:30πμ :Ξυπνησα.Εφαγα μια ωρα μπροστα στον καθρευτη να βαφω τα ματια
και τα νυχια μου,και να φτιαχνω την μωβ φρατζα μου.
(Σημειωση:Τι κουκλος που μαι...αλλα κανεις δεν με θελει.Ολοι με μισουν)
09:00πμ :Τελικα εχασα την πρωτη ωρα...
09:45πμ :2ο διαλειμμα.Ζητησα απο τη Σονια(την κοπελα με τις μωβ
αφελειες) να φασωθουμε στις τουαλετες.Μου πε οχι,ειχε περιοδο.
Αλλα λεει ψεματα.Το ξερω...Ολοι με μισουν εμενα.
10:37πμ :3ο διαλειμμα.Ζητησα απο τον Νικο να φασωθουμε.Δεχτηκε.
(Κριμα ειχα ξεχασι την βαζελινη σπιτι)Να και καποιος που με αγαπαει.
14:05μμ : Σχολασα.Γυρισα με το skate...Oλο επεφτα και τα παιδια με τα
φαρδια στην πλατεια με κοροιδευαν παλι.Γ@μημενοι χιπχοπαδες.
14:15μμ :Εφτασα στο σπιτι αναστατωμενος και παραλιγο να πεσω στην πισινα.
14:25μμ : Ακομα ημουν θλιμμενος...Εκοψα το χερι μου με ξυραφακι και
εριξα απο πανω αλατι.Ηδονιστηκα.

16.30μμ :Πέθανε ο κυρ-Ιπποκράτης στα 98 του. Πήγα με την παρέα στη κηδεία.

Ήταν υπέροχα. Κλάψαμε με την ψυχή μας. Δυστυχήσαμε στο full.
19:00μμ :Πηγα με την παρεα Starbucks
21:00μμ :Πηγα με την παρεα mc donalds
21:30μμ :Φασωθηκα με τον Ηλια
21:40μμ :Φασωθηκα με την Δημητρα
22:10μμ :Πειραζαμε και τρομαζαμε γριουλες στο παρκο.Ειμαστε και πολυ μαγκες.



Καληνύχτα. ελπίζω να δω κανενα εφιάλτη...



--
George J Anagnostaros

LinkWithin

Blog Widget by LinkWithin

Mobile edition