# IPC και Δικτύωση

## Πρόχειρα, σύρσιμο και απόθεση

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

Το πρόχειρο χρησιμοποιείται όταν ο χρήστης δίνει ρητή εντολή αντιγραφής σε μία εφαρμογή. Η εφαρμογή αυτή αποκτά αμέσως τον έλεγχο του προχείρου. Όταν ο χρήστης επικολλήσει τα δεδομένα σε διαφορετική εφαρμογή, η δεύτερη εφαρμογή ζητά τα δεδομένα του προχείρου από την πρώτη. Το πρόχειρο και οι ενέργειές του υποστηρίζονται πλήρως από τη GTK+.

Οι ενέργειες συρσίματος και απόθεσης μοιάζουν με τις προηγούμενες, αλλά απαιτούν συνεχή παρακολούθηση της θέσης του δείκτη, καθώς αυτός μετακινείται μεταξύ διάφορων πιθανών προορισμών για την απόθεση. Όταν μία εφαρμογή ειδοποιείται ότι ο δείκτης περνάει από πάνω της κατά τη διάρκεια συρσίματος, πρέπει να ενημερώσει την εμφάνιση του δρομέα, έτσι ώστε να φαίνεται αν μπορεί ή όχι να δεχτεί την απόθεση. Η GTK+ παρέχει υποστήριξη για τις ενέργειες συρσίματος και απόθεσης μέσω ενός προηγμένου API που διευκολύνει τη διαχείριση των προορισμών απόθεσης της εφαρμογής σας.

Τόσο οι ενέργειες προχείρου, όσο και οι ενέργειες συρσίματος και απόθεσης, υποστηρίζουν τη διαπραγμάτευση περιεχομένου. Όταν μια εφαρμογή είναι σε θέση να προσφέρει δεδομένα, δημοσιοποιεί τις μορφές στις οποίες διατίθενται αυτά τα δεδομένα. Οι εφαρμογές-παραλήπτες μπορούν να ζητήσουν τη μορφή που θεωρούν καταλληλότερη. Για παράδειγμα, αν ο χρήστης αντιγράψει κείμενο από τον περιηγητή του, ένας επεξεργαστής κειμένου μπορεί να διατηρήσει τη μορφοποίηση του πρωτοτύπου, ζητώντας να λάβει τα δεδομένα σε μορφή HTML, ενώ ένας επεξεργαστής απλού κειμένου μπορεί να λάβει το κείμενο χωρίς μορφοποίηση.

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

Για περισσότερες πληροφορίες, ανατρέξτε στα Drag-and-Drop Protocol for the X Window System, X Clipboard Explanation και Clipboard Manager Specification.

## D-BUS

Το D-Bus είναι ένας δίαυλος μηνυμάτων που λειτουργεί σε πολλαπλές επιφάνειες εργασίας και επιτρέπει την αποστολή μηνυμάτων μεταξύ εφαρμογών, επιφάνειας εργασίας και συστατικών χαμηλού επιπέδου του συστήματος. Το D-Bus παρέχει ένα απλό API για την αποστολή μηνυμάτων προς συγκεκριμένες υπηρεσίες και για τη μετάδοση των μηνυμάτων σε όλες τις ενδιαφερόμενες υπηρεσίες. Το D-Bus επιτρέπει σε διάφορους τύπους εφαρμογών να επικοινωνούν και να συνεργάζονται μεταξύ τους και με την επιφάνεια εργασίας, προσφέροντας στο χρήστη βελτιωμένη διαδραστικότητα και πλουσιότερες εμπειρίες.

Το D-Bus παρέχει ένα δίαυλο συνεδρίας και ένα δίαυλο συστήματος. Ο δίαυλος συνεδρίας χρησιμοποιείται από εφαρμογές σε συνεδρίες με έναν μοναδικό χρήστη, και τους επιτρέπει να μοιράζονται δεδομένα και ειδοποιήσεις για γεγονότα, καθώς και να ενσωματώνονται στην επιφάνεια εργασίας του χρήστη. Για παράδειγμα, η εφαρμογή αναπαραγωγής ταινιών μπορεί να στείλει ένα μήνυμα D-Bus για να εμποδίσει την ενεργοποίηση της προστασίας οθόνης, όταν ο χρήστης παρακολουθεί ταινία.

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

Το D-Bus αναπτύσσεται από το freedesktop.org· επομένως, μπορείτε να το χρησιμοποιήσετε σε διαφορετικά περιβάλλοντα και εφαρμογές. Επειδή το D-Bus λειτουργεί σε πολλαπλές επιφάνειες εργασίας, μπορείτε να το χρησιμοποιήσετε για να δημιουργήσετε φορητό και ευέλικτο λογισμικό που θα συνεργάζεται άψογα με την επιφάνεια εργασίας του χρήστη, ανεξάρτητα από το ποια θα είναι αυτή.

Για περισσότερες πληροφορίες σχετικά με το D-Bus, δείτε τα D-BUS Tutorial και D-BUS Specification.

## Bonobo και CORBA

Σημειώστε ότι το Bonobo, το liblDL και το ORBit είναι πια πεπαλαιωμένα προς όφελος του D-Bus και άλλων τεχνολογιών. Δείτε πιο πάνω.

Το Bonobo είναι ένα πλαίσιο δημιουργίας επαναχρησιμοποιήσιμων συστατικών για εφαρμογές. Βασίζεται στο βιομηχανικό πρότυπο CORBA (Common Object Request Broker Architecture) και παρέχει όλες τις βασικές διεπαφές που απαιτούνται για τη δημιουργία και χρήση λειτουργικών και εύχρηστων συστατικών σε εφαρμογές GNOME.

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

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

Το Bonobo είναι βασισμένο στο CORBA· επιτρέπει λοιπόν στα συστατικά να εκτελούνται σε ξεχωριστές διεργασίες. Τα συστατικά ενδέχεται να έχουν γραφτεί σε διαφορετικές γλώσσες και να εκτελούνται από διαφορετικά runtimes· ο μόνος περιορισμός είναι να χρησιμοποιούν μία διεπαφή που καθορίζεται σε γλώσσα IDL (Interface Definition Language). Η ευέλικτη σχεδίαση του CORBA προβλέπει ακόμη και την εκτέλεση συστατικών από διαφορετικά μηχανήματα εντός του δικτύου.

Το GNOME παρέχει τη δική του γρήγορη και ελαφριά υλοποίηση του CORBA, το ORBit. Επίσης, τα εργαλεία και οι βιβλιοθήκες του GNOME επιτρέπουν και τη συγγραφή συστατικών σε C, μια γλώσσα που συχνά αγνοείται από άλλες υλοποιήσεις του CORBA. Το ORBit είναι μια εξαιρετικά γρήγορη υλοποίηση του CORBA.

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

Ίσως σας ενδιαφέρει η χρήση του Bonobo για την παροχή περίπλοκων γραφικών συστατικών που μπορούν να ενσωματωθούν σε εφαρμογές. Όμως, για την πλειοψηφία των αναγκών του σε IPC, το GNOME προτιμά πλέον το D-Bus, καθώς η ενσωμάτωση του D-Bus σε εφαρμογές είναι σαφώς ευκολότερη.

Για περισσότερες πληροφορίες σχετικά με το Bonobo, δείτε τα Libbonobo Reference Manual και LibbonoboUI Reference Manual. Για πληροφορίες σχετικά με το ORBit, την υλοποίηση του GNOME για το CORBA, ανατρέξτε στο ORBit2 Reference Manual.

## Ανακάλυψη υπηρεσιών

Η Ανακάλυψη Υπηρεσιών DNS, ή Zeroconf, είναι μία τεχνολογία για αυτόματο εντοπισμό των διαθέσιμων υπηρεσιών στο δίκτυο. Το Zeroconf επιτρέπει στους χρήστες να αποκτούν πρόσβαση στους πόρους του δικτύου χωρίς να δίνουν συγκεκριμένες διευθύνσεις ή να ρυθμίζουν με το χέρι τις εφαρμογές τους.

Η Ανακάλυψη Υπηρεσιών DNS χρησιμοποιείται ήδη σε διάφορα σημεία στο GNOME, και στο μέλλον πρόκειται να αυξηθεί η υποστήριξη. Για παράδειγμα, ο Ναυτίλος, ο διαχειριστής αρχείων του GNOME, χρησιμοποιεί την Ανακάλυψη Υπηρεσιών DNS για να εντοπίζει τους εξυπηρετητές αρχείων του τοπικού δικτύου. Το Ekiga, η εφαρμογή τηλεφωνίας και βιντεοδιάσκεψης του GNOME, τη χρησιμοποιεί για να εντοπίζει και να δημοσιοποιεί την παρουσία του χρήστη, καθώς και για να εντοπίζει άλλους χρήστες στο τοπικό δίκτυο.

Η βιβλιοθήκη Avahi παρέχει πλήρη υποστήριξη για την Ανακάλυψη Υπηρεσιών DNS. Για περισσότερες πληροφορίες σχετικά με την Avahi, επισκεφθείτε τον ιστότοπο της Avahi.

## XML και υπηρεσίες ιστού

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

Η πλατφόρμα GNOME υποστηρίζει τη χρήση υπηρεσιών ιστού από τις εφαρμογές σας, και παρέχει ολοκληρωμένες βιβλιοθήκες για την χρήση, διαχείριση και μετατροπή της XML, της γλώσσας του ιστού.

### SOAP

Μέσω της βιβλιοθήκης libsoup, το GNOME υποστηρίζει το SOAP, ένα ευρέως χρησιμοποιούμενο πρωτόκολλο για την αποστολή μηνυμάτων XML μέσω HTTP. Το SOAP επιτρέπει στους προγραμματιστές να εκθέτουν μια διεπαφή στον ιστό, ώστε να μπορεί στη συνέχεια να χρησιμοποιηθεί από εφαρμογές για την ανάκτηση πληροφοριών, την αποστολή δεδομένων, την εκτέλεση συναλλαγών και πολλές ακόμη λειτουργίες.

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

Η βιβλιοθήκη libsoup περιέχει μια υλοποίηση του HTTP και μια ομάδα API για τη δημιουργία και χρήση μηνυμάτων SOAP. Επίσης, υποστηρίζει ασφαλή πιστοποίηση, επιτρέποντάς σας να χρησιμοποιείτε υπηρεσίες ιστού για να αποκτάτε πρόσβαση σε ιδιωτικούς λογαριασμούς μέσω ασφαλούς σύνδεσης. Η χρήση του libsoup απλοποιεί τη χρήση υπηρεσιών ιστού, καθώς δεν απαιτεί να αναλύετε και να ερμηνεύετε μόνοι σας τα μηνύματα που αποστέλλονται μέσω SOAP.

Για περισσότερες πληροφορίες σχετικά με το libsoup, ανατρέξτε στο libsoup Reference Manual.

### Επεξεργασία XML

Από το 1988, που έκανε την επίσημή της εμφάνιση, η XML (eXtensible Markup Langauge) χρησιμοποιείται σε συνεχώς αυξανόμενο αριθμό εφαρμογών. Και έχει πολλές διαφορετικές χρήσεις, από τις μορφές εγγράφων όπως τα XHMTL και DocBook, μέχρι τα πρωτόκολλα διαδικτύου όπως το SOAP και το Jabber. Η XML διαθέτει μια απλή και καθαρή βασική σύνταξη, που επιτρέπει σε κάθε εφαρμογή να εστιάσει στις δικές της ανάγκες.

Το GNOME συμπεριλαμβάνει τη βιβλιοθήκη libxml2 και τη χρησιμοποιεί εκτενώς σε όλη την επιφάνεια εργασίας. Η βιβλιοθήκη libxml2 είναι μια γρήγορη και απολύτως σύμμορφη με τα πρότυπα βιβλιοθήκη επεξεργασίας της XML, που σας προσφέρει όλα όσα χρειάζεστε για να χρησιμοποιήσετε XML στην εφαρμογή σας.

Η βιβλιοθήκη libxml2 προσφέρει μια σειρά από API για εργασία με XML, παρέχοντάς σας τη δυνατότητα να επιλέξετε αυτό που καλύπτει τις προγραμματιστικές σας ανάγκες. Πέρα από το API του εγγενούς δέντρου, η libxml2 παρέχει επίσης το βασισμένο στην επανάκληση (callback) SAX2 API, διεπαφές ανάγνωσης και εγγραφής ροών XML και πλήρη υποστήριξη του XPath.

Η libxml2 υποστηρίζει μεν το DTD, αλλά υποστηρίζει πλήρως και την επικύρωση (validation) εγγράφων μέσω του RELAX NG, που διαθέτει πιο ευέλικτο μοντέλο επικύρωσης, παραμένοντας απλό στη χρήση. Επίσης, υποστηρίζει μερικώς την XML Schema, τη νέα γλώσσα του W3C.

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

Για περισσότερες πληροφορίες σχετικά με τη libxml2, δείτε τα Libxml Tutorial και Reference Manual for libxml2.

### Μετατροπή XML μέσω XSLT

Η XSLT είναι μια γλώσσα βασισμένη στην XML για τη μετατροπή της XML σε άλλες μορφές. Η XSLT είναι μια γλώσσα που βασίζεται σε πρότυπα (templates), που σας επιτρέπουν να αντιστοιχίζετε συγκεκριμένους τύπους στοιχείων XML και να παράγετε την κατάλληλη έξοδο. Βασισμένη στην XML και την XPath, η XSLT επιτρέπει στους προγραμματιστές να παράγουν καθαρά πρότυπα σε αυτοτελείς μονάδες (modules) για τη μετατροπή διαλέκτων XML σε μορφές καταλληλότερες για την εκάστοτε εφαρμογή.

Το GNOME συμπεριλαμβάνει τη βιβλιοθήκη libxslt, μια πλήρη υλοποίηση της XSLT. Η βιβλιοθήκη libxslt έχει χτιστεί πάνω από την υποστήριξη XML και XPath της libxml2, κάτι που της επιτρέπει να είναι γρήγορη και να συμμορφώνεται απολύτως με τα πρότυπα.

Αν επιθυμείτε να μετατρέψετε έγγραφα XML, χρησιμοποιήστε την libxslt. Αν και η XSLT δεν είναι πάντα η κατάλληλη λύση για την επεξεργασία της XML, απλοποιεί σημαντικά τη διαδικασία ανάπτυξης. Επίσης, η libxslt σας επιτρέπει να προσθέτετε επεκτάσεις στοιχείων και συναρτήσεων, για να μπορείτε να την προσαρμόζετε στις ανάγκες της εφαρμογής σας.

Για περισσότερες πληροφορίες σχετικά με την libxslt, ανατρέξτε στο XSLT C library for Gnome.