Kali idea gia m$ linux library.

Dimitrios Kamenopoulos el97146 at mail.ntua.gr
Wed Sep 11 23:02:01 EEST 2002


On Monday 09 September 2002 13:54, George Kourtis wrote:

> Το καλό του COM και DCOM είναι ότι δεν χρειάζεται να δηλώσεις το interface
> από πριν αλλά μπορεί ο πελάτης να το βρεί από το ίδιο το ActiveX.
> Αυτό θα ήθελα να χρησιμοποιήσω σε Linux.

Συγχώρεσε την άγνοιά μου, αλλά το ActiveX υποστηρίζει απομακρυσμένα (remote) 
αντικείμενα όπως το CORBA; Δηλαδή μπορείς να χρησιμοποιήσεις από το σπίτι σου 
ένα αντικείμενο ActiveX που "εκτελείται" στον υπολογιστή του γραφείου σου 
(προσοχή: όχι να κατεβάσεις από τον υπολογιστή του γραφείου σου ένα 
αντικείμενο ActiveX που θα κάνει αυτά κι αυτά); Νομίζω πως το γενικό 
συμπέρασμα είναι όχι. Άρα το ActiveX αποκλείεται (εκτός αν φτιάξεις ένα 
ActiveX που θα χρησιμοποιεί -αναγκαστικά- κάτι σαν sockets για να επικοινωνεί 
με το server). Εκτός πια κι αν είναι *τόσο* σημαντικό να μπορείς να έχεις 
δυνατότητα χειρισμού του server από ένα έγγραφο Word.

> Οχι !!! Δεν θέλω να χρησιμοποιήσω τις κλασσικές μεθόδους (Sockets ή ακόμα
> χειρότερα μοιρασμένο αρχείο εντολών).

Γιατί; Τι έχουν τα sockets; Ολόκληρο το Internet δουλεύει με Sockets.

> Καλύτερα να μάθω κάτι πιο γενικό όπως CORBA παρά να φτιάξω κάτι
> ultra-custom
 που ναι μεν είναι εύκολο στην υλοποίηση αλλά δύσκολο στην
> συντήρηση. 

Δύσκολο στη συντήρηση κάτι που έχει φτιαχθεί με καθιερωμένες πρακτικές για τις 
οποίες μπορείς να βρεις παραδείγματα/τεκμηρίωση/βοήθεια σε 10e10 μέρη;

Το CORBA είναι μια χαρά, αλλά στην περίπτωσή σου που θες έναν απλό 
τηλεχειρισμό ενός τηλεφώνου ουσιαστικά (δεν είναι δα και κανένας πυρηνικός 
αντιδραστήρας) είναι λίγο υπερβολικό. Το αυτό ισχύει κατά τη γνώμη μου και 
για το "S"NMP που είναι καλό, άγιο, χρήσιμο, προτυποποιημένο αλλά σίγουρα 10 
χρόνια από τώρα θα φιγουράρει στα κεφάλαια "How NOT to do it" όλων των 
εγχειριδίων απομακρυσμένης διαχείρισης.

Κατά τη γνώμη μου (και ενδέχεται να κάνω λάθος γιατί μόνο επιφανειακά γνωρίζω 
την αντίστοιχη τεχνολογία), μια καλή λύση που:
α) Είναι αντικειμενοστραφής
β) Είναι απλή
γ) Είναι μεταφέρσιμη

είναι το SOAP, που όπως λέει και το όνομά του είναι SIMPLE Object Access 
Protocol. Δεν ξέρω τι ζόρι απαιτεί να υλοποιήσεις το server κομμάτι (είπαμε 
μόνο επιφανειακά έχω ασχοληθεί), αλλά για το client κομμάτι κατ' αρχήν 
μπορείς να χρησιμοποιήσεις μία εκ των Java, C++, Python (που είναι πιο 
portable από τη Java αλλά δεν έχει τόσο καλό PR department) για τις οποίες 
υπάρχουν βοηθητικές βιβλιοθήκες. Περισσότερα στο http://www.www.org

Τώρα για το να κάνεις τον πυρήνα της εφαρμογής portable, δε χρειάζεται να 
μπλέξεις ActiveX και ιστορίες. Απλά ακολούθα μερικές βασικές αρχές:
-Χρήση όσο το δυνατόν πιο ουδέτερων και προτυποποιημένων χαρακτηριστικών. Π.χ. 
να χρησιμοποιείς το std::string αντί για το αξιολύπητο CString της Microsoft. 
-Απομόνωση των αναγκαίων platform-dependent τύπων με typedef. Π.χ. αν κάπου 
πρέπει να χρησιμοποιήσεις την κλάση WinPapari, βάλε ένα 
typedef WinPapari papari_type;
και γράψε κώδικα μόνο για papari_type.
-Σωστή σχεδίαση με απομόνωση του platform-specific κώδικα σε ανεξάρτητες 
κλάσεις με κοινά interface.
-Χρήση factory pattern (αν δεν ξέρεις τι είναι pattern μάθε οπωσδήποτε).
-...

Από εκεί και πέρα να ξέρεις ότι το portability είναι μεγάλο πακέτο. Αν είναι 
να φας τα νιάτα σου προκειμένου ο driver του υλικού για Windows να μπορεί να 
μεταφερθεί κάααααααποια στιγμήηηηη στο Linux, καλύτερα να τους πεις από την 
αρχή ότι δε γίνεται. Γράψε κώδικα αποκλειστικά για Windows με βάση τις αρχές 
που σου εξέθεσα παραπάνω και αν κάαααααποια στιγμήηηηηη στο μέλλον χρειαστεί 
να μεταφέρεις τον driver σε Linux, θα είναι πιο εύκολα τα πράγματα. Αλλά μια 
άλλη πλατφόρμα είναι μια άλλη πλατφόρμα και δεν θα αποφύγεις τη χοντρή 
δουλειά ό,τι και να γίνει. Δεν πρέπει βέβαια η δουλειά αυτή να γίνει τώρα, 
που πρέπει (υποθέτω) να παραδώσεις εγκαίρως μια λύση για Windows.
Τώρα το remote interface είναι τελείως άλλη φάση. Είναι σχετικά πολύ πιο 
εύκολο να έχουν δύο εντελώς διαφορετικά προγράμματα το ίδιο remote interface. 
Χρησιμοποιήσε CORBA, SOAP, Sockets ή ό,τι άλλο θες. 

Τσίρζ,
Δημήτρης
 



More information about the Linux-greek-users mailing list