Ολο και κάτι έχω πάντα να πω και να γράψω για αυτά που συμβαίνουν στην πραγματική μου ζωή ή στο μυαλό μου.. I always find something to share with you..
Δευτέρα 25 Φεβρουαρίου 2008
Πέμπτη 21 Φεβρουαρίου 2008
Check out my Facebook profile
|
Τρίτη 19 Φεβρουαρίου 2008
Γιατι XML-RPC;
Το πιο βασικό πλεονέκτημα είναι ότι είναι απλό και δεν επιδέχεται προσθήκης επεκτάσεων, όπως γίνεται με τα πιο σύγχρονα πρότυπα που σου δίνουν δυνατότητα να δημιουργήσεις 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, λόγω μιας ανάγκης που υπήρξε από έναν πελάτη για να του παρέχουμε την δυνατοτητα να φτιάξει 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
Οπότε έπρεπε να βρούμε μια τυποποιηση που να υποστηρίζει τους εξείς τύπους: 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
Βέβαια ακόμα το έχω σε πειραματικό στάδιο, αλλά πιστεύω ότι θα μπορούσε να φανει πολύ χρήσιμο να μην βάζεις private members αλλά να τα κρατας όλα σε ένα private Map.
ΥΓ: Οποιος ενδιαφέρετε ή έχει καποια επιπλέον ιδέα, πολύ ευχαρίστως να μου την γράψει.
To MSN Messenger του Μάκη
Τετάρτη 13 Φεβρουαρίου 2008
Τι ακούει ο άντρας:... (joke)
"Το σπίτι είναι χάλια Γιώργο,
Πρέπει να το καθαρίσουμε μαζί,
Έλεος, όλα τα πράγματα σου είναι στο πάτωμα,
Μην παραπονιέσαι αύριο αν μείνεις χωρίς ρούχα,
Θα πρέπει να βάλω πλυντήριο τώρα!"
Τι ακούει ο άντρας:
Μπλα, μπλα, μπλα, μπλα ΓΙΩΡΓΟ
Μπλα, μπλα, μπλα, μπλα ΜΑΖΙ
Μπλα, μπλα, μπλα, μπλα ΣΤΟ ΠΑΤΩΜΑ
Μπλα, μπλα, μπλα, μπλα ΧΩΡΙΣ ΡΟΥΧΑ
Μπλα, μπλα, μπλα, μπλα ΤΩΡΑ
Δευτέρα 11 Φεβρουαρίου 2008
Ένας παπάς και μία καλόγρια (joke)
Δεν πειράζει σκέφτηκαν και πήγαν να κοιμηθούν, αλλά υπήρχε μόνο ένα κρεβάτι κι έτσι ο παπάς το παραχώρησε στην καλόγρια και θα κοιμόταν ο ίδιος στο πάτωμα μέσα σε έναν υπνόσακο.
Εκεί που είχε ξαπλώσει αυτός και είχε κλείσει και το φερμουάρ του υπνόσακου, του λέει η καλόγρια:
- Πάτερ, κρυώνω.
- Αδερφή, κάτσε στο κρεβάτι, θα πάω να σου φέρω εγώ να σκεπαστείς.
Πάει μέσα, ανοίγει τη ντουλάπα, της φέρνει μία κουβέρτα.
Ξαναπέφτει για ύπνο στο πάτωμα, όταν μέσα σε δύο λεπτά:
- Πάτερ, ακόμα κρυώνω.
- Αδερφή, μην ανησυχείς, θα σου φέρω εγώ κουβέρτα.
Πάει πάλι μέσα, ανοίγει τη ντουλάπα και της φέρνει κι άλλη κουβέρτα.
Ξαναπέφτει για ύπνο, οπότε γυρνάει σε ένα λεπτό πάλι η καλόγρια:
- Πάτερ, κάνει πολύ κρύο γιατί εγώ ακόμα κρυώνω.
- Αδερφή, κοίτα. Είμαστε μόνοι μας στη μέση του πουθενά και δεν μας βλέπει κανένας.
Θα σε πείραζε για απόψε να κάνουμε ότι κάνει ένα παντρεμένο ζευγάρι;
- Όχι πάτερ, δεν θα με πείραζε.
- Ε τότε σήκω πάνω και πάρε την μόνη σου την επόμενη κουβέρτα!
Σάββατο 9 Φεβρουαρίου 2008
Τρίτη 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