To PM kai h filosofða tou



Σχετικά έγγραφα
(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων


Εργαστήριο 9: Αρχεία

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

MAJHMATIKH QRHMATOOIKONOMIA I

Εισαγωγή στην Πληροφορική

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

Μάθημα 10 ο ΔΙΑΧΕΙΡΙΣΗ ΕΙΣΟΔΟΥ ΕΞΟΔΟΥ (INPUT/OUTPUT)

Διάλεξη 18η: Διαχείρηση Αρχείων

EPL 034 Ergastărio 1: To leitourgikì sôsthma UNIX

Μετάδοση εδοµένων και ίκτυα υπολογιστών ΙΙ Εργαστηριακή Άσκηση 3. Σύνδεση υπολογιστών στα Windows

SÔgqronh nèa ellhnikă: problhmatikèc perioqèc tou graptoô lìgou B mèroc: perð sôntaxhc kai lexilogðou

Επεξεργασία Αρχείων Κειµένου

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Κεφάλαιο 5Β (επανάληψη) Εισαγωγή στην Πληροφορική. Τυπικοί χρόνοι πρόσβασης. Μέσος χρόνος πρόσβασης. Ταχύτητα µεταφοράς δεδοµένων

ΚΕΦΑΛΑΙΟ Web Services

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Κεφάλαιο 3 Λειτουργικά Συστήματα Β ΕΠΑΛ

Λειτουργικά Συστήματα (Λ/Σ)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Εισαγωγή στην Πληροφορική

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

Αρχιτεκτονική Υπολογιστών

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Οι δείκτες στη γλώσσα C

Εισαγωγή στο λειτουργικό σύστηµα Unix

Πρόβληµα : Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά?

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Βιβλιοθήκη stdio. Προγραμματισμός II 1

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

υναµικές οµές εδοµένων

2.2.3 Η εντολή Εκτύπωσε

Κεφάλαιο 12: Είσοδος και έξοδος δεδομένων σε αρχεία

Εφαρμογές Σειριακής Επικοινωνίας

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

H ΓΛΩΣΣΑ C. Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα. ηµήτρης Ψούνης

Βασικές Έννοιες της Πληροφορικής

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Σύντοµο Εγχειρίδιο Χρήσης. του Λογισµικού Στατιστικής Επεξεργασίας. SPSS for Windows v. 8.0

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Σύντοµες οδηγίες χρήσης atube Catcher

Προγραμματισμός Η/Υ (ΤΛ2007 )

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που

4.3. Γραµµικοί ταξινοµητές

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Προγραμματισμό για ΗΜΥ

Ενσωματωμένα Συστήματα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

H ΓΛΩΣΣΑ C. Μάθηµα 15: Είσοδος/Έξοδος: Συναρτήσεις Εισόδου. ηµήτρης Ψούνης

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 4 η. Βασίλης Στεφανής

Επιτεύγµατα των Λ.Σ.

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

Συστήματα Αρχείων (Σ.Α.)

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

TTRM: paragwgă pinĺkwn kai mhqană anazăthshc katĺ th dwdekafjoggikă anĺlush mousikÿn èrgwn

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Εισαγωγή στον Προγραμματισμό

Πληροφορίες. Εισαγωγή στην Πληροφορική. Κατηγορίες υλισµικού. Περίληψη µαθήµατος (συνέχεια) Επεξεργαστής Μνήµη. Χειµερινό Εξάµηνο

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Αντικειµενοστρεφής Προγραµµατισµός

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

Ανάπτυξη Plugins για το AgentSheets

Λιβανός Γιώργος Εξάμηνο 2017Β

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

Σύστηµα Αρχείων και Καταλόγων

είκτες και Πίνακες (2)

ΗΥ-150. Προγραμματισμός

Η γλώσσα προγραμματισμού C

Linux με τη χρήση κονσόλας

"ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ" (ΕΜ102), ΕΡΓΑΣΙΑ 1η

Κωστόπουλος ηµήτριος Μ.Π.Λ.Α. TAPE COMPRESSION (θεώρηµα 2.3 Παπαδηµητρίου)

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

ΜΑΘΗΜΑ: ΕΙΑΓΩΓΗ ΣΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 9o ΕΡΓΑΣΤΗΡΙΟ

Transcript:

To PM kai h filosofða tou Nikìlaoc Qristìpouloc nereus@freemail.gr Ekdosh 0.3 Ajăna, 28 AprilÐou 2004 Perieqìmena 1 To peribĺllon tou logismikoô 2 1.1 Η νέα συ ογική ανάπτυξη................................ 2 2 To prìblhma tou ădh grammènou kÿdika 3 2.1 Ι/Ο............................................. 3 2.2 Η είσοδο τη εξόδου................................... 3 2.3 Νεκρή φύση........................................ 4 2.4 Συµπεράσµατα....................................... 4 3 Ena eniaðo interface 4 4 En arqă ătan h SB 5 4.1 Το ιεραρχικό σύστηµα των αρχείων........................... 6 4.2 Πω έγινε όµω αυτό................................... 7 5 H idèa 8 5.1 Τα modulec ανεξάρτητα από το PM........................... 9 6 Teqnikèc anĺptuxhc tou PM 9 6.1 Σύνδεση αρχείου και κώδικα............................... 10 6.2 Εξέ ιξη σε module.................................... 10 6.3 VFS............................................ 12 6.4 Εκτό του VFS...................................... 14 6.5 PMFS........................................... 14 6.6 Ενα έτοιµο εικονικό σύστηµα αρχείων.......................... 14 7 Arqèc tou PM 15 7.1 ογική σχεδίαση..................................... 15 7.2 Ενιαίο interface...................................... 16 7.2.1 Οµαδοποίηση στο PM.............................. 16 7.3 Ενιαίο τρόπο µεταφορά δεδοµένων........................... 16 7.4 ιαχείριση modulec.................................... 17 7.5 Αυτόµατη συµπ ήρωση συναρτήσεων των modulec................... 17 8 Etoima paradeðgmata 17 8.1 vfstest........................................... 17 8.2 Συνοδευτικά παραδείγµατα εφαρµογέ......................... 19 8.3 Συνοδευτικά παραδείγµατα modulec.......................... 19 1

1 TO PERIB ALLON TOU LOGISMIKO U 2 9 JewrhtikĹ paradeðgmata 19 9.1 Ενα e-mail client που ειτουργεί σαν σύστηµα αρχείων................ 19 9.2 Ενα παντοδύναµο εργα είο µε ίγο κώδικα....................... 19 PerÐlhyh To PM eðnai èna sôsthma pou sqedðasa gia na lôsei sugkekrimèna problămata, ìpwc ton eniaðo trìpo epikoinwnðac ìlwn twn suskeuÿn allĺ kai diĺforwn bibliojhkÿn me to desktop peribĺllon tou arm0nia project. Eqei ìmwc polô megalôterec proektĺseic. To jewrÿ idiaðtera aplì, allĺ dustuqÿc o perissìteroc kìsmoc adunateð na to katalĺbei, kai edÿ èrqetai autì to èggrafo pou skopì èqei na exhgăsei autì to perðergo sôsthma pwc leitourgeð kai poiec eðnai oi dunatìthtèc tou. To PM ektìc apì èna uposôsthma, mporeð na qrhsimopoihjeð wc jewrhtikì prìtupo gia eniaðo interface, kajÿc epðshc kai gia uposôsthma tôpou OLE/CORBA k.a. 1 To peribĺllon tou logismikoô Εµεί οι προγραµµατιστέ γνωρίζουµε πο ύ κα ά την πο υπ οκότητα των πραγµάτων. Εχουµε να κάνουµε µε ένα χαοτικό περιβά ον στο οποίο εκατοµµύρια γραµµέ κώδικα, εκατοµµύρια εντο έ, ταξινοµηµένε συνήθω σε βιβ ιοθήκε, που α η επιδρούν και συνδυάζονται για να παράγουν το τε ικό έργο, είτε αυτό είναι µια εφαρµογή, είτε ένα ο όκ ηρο.σ. µε ό α τα συνοδευτικά αυτού. Υπάρχουν αστρονοµικά µεγέθη κώδικα, γραµµένα από διάφορου προγραµµατιστέ ανά τον κόσµο, για ένα επίση µεγά ο εύρο θεµάτων 1. Μια επίσκεψη στο sourceforge ή στο codeguru ή στο simtel και α ού, θα σα πείσει παρά το ότι είναι ένα µικρό µέρο του κώδικα που κυκ οφορεί στο internet! Μέσα σ αυτό το codespace 2 βρίσκουµε συχνά ύσει τι οποίε χρειαζόµαστε ή θα ήταν χρήσιµο ή θα ήταν όµορφο ή θα ήταν έξυπνο ή θα ήταν βο ικό για το µέ ον να τι προσθέσουµε. ύσει έτοιµε και δοκιµασµένε, ύσει που τι συντηρούν και αναπτύσσουν ά οι, ύσει που εκτοξεύουν την ίδια την ανάπτυξη του ογισµικού στα ύψη µέσω τη συ ογική πια εργασία. 1.1 H nèa sullogikă anĺptuxh Στο O Kajedrikìc kai to PazĹri ο Raymond προσπάθησε να εξηγήσει την δύναµη τη συ ογική εργασία από µια πα αβή[bazaar, 10 π.19], τυπική αµερικάνικη ( 1950) οπτική γωνία, δη αδή, ανύπαρκτη ή προπαγανδισµένη κοινικοπο ιτική φι οσοφία. Οπω και να έχει αυτό το έργο είναι σηµαντικό από πο έ π ευρέ και έχει ενδιαφέρουσε απόψει το σηµαντικότερο ό ων είναι ότι είναι ο οκ ηρωµένο και ο αναγνώστη που δεν έχει επαφή µε το open/free source µπορεί να αντι ηφθεί την επανάσταση στην ανάπτυξη του ογισµικού που συντε έστηκε τι τε ευταίε δεκαετίε 3 καθώ επίση και την δύναµη τη συ ογική εργασία που είναι γνωστή στο ευρύ κοινό σήµερα, µε το όνοµα Linux. Βάση αυτών, οιπόν, β έποµαι ότι υπάρχει ήδη υποδοµή, προσπάθειε α ά και µεγά ο έργο φτιαγµένο για να ειτουργεί για το σύνο ο, δη αδή για εµά. Οι περισσότεροι τη free source κοινότητα είναι ιδεο όγοι και βασίζουν τι κινήσει αυτέ στην ηθική, έτσι αποκα ούν του εκάστοτε προγραµµατιστέ που συνεισφέρουν ω εθε οντέ. Εδώ όµω θα διαφωνήσω διότι β έπω τον κώδικα διαφορετικά, τον β έπω σαν αντα αγή απόψεων 4 ή/και εργασία. Η αντα αγή των απόψεων είναι και η ρίζα τη ανάπτυξη τη επιστήµη και τη 1 Na jumðsw to prìgramma pou èggrafe poiămata :) 2 Enac prìqeiroc dikìc mou orismìc, antðstoiqoc tou dataspace, gia na dhlÿsw to sônolo tou kÿdika, public domain, open/free source allĺ kai kleidwmènou me kĺpoio nomikì trìpo, pou upĺrqei sto internet. 3 To open source arqðzei epðshma me to TEX apì ìso xèrw... 4 O kÿdikac eðnai èkfrash ìpwc ta majhmatikĺ kai o lìgoc kai ìsoi diafwnoôn s autì eðnai giatð den eðnai programmatistèc parĺ mìno kat ìnoma.

2 TO PR OBLHMA TOU HDH GRAMM ENOU K WDIKA 3 φι οσοφία 5. Η αντα αγή δεν προ ποθέτει την θέ ηση χωρί αντά αγµα που απαιτεί ο εθε οντισµό για αυτό και περιµένω να µεγα ώσει ακόµα περισσότερο ο π ηθυσµό τη κοινότητα. Το free/open source είναι περισσότερο µια επιστηµονική κο εκτίβα παρά ένα φι ανθρωπικό ίδρυ- µα. Βοηθώντα ένα έργο που χρησιµοποιούµε, βοηθάµε τον εαυτό µα διότι το έργο αυτό, θα το χρησιµοποιήσουµε και στο µέ ον. Η ανάπτυξη ενό τέτοιου έργου είναι και δικό µα θέµα αφού βασίζουµε µέρο τη εργασία µα επάνω του. Περισσότερα για την σκ ηροπυρηνική ιδεο ογία του eleôjerou logismikoô θα βρείτε στι σε ίδε τη GNU, ενώ για την µετριοπαθή ιδεο ογία του logismikoô anoiktoô kÿdika, στι σε ίδε του OSI. Μια περιγραφή και για τα δύο από το Ε ΕΤ[Ε ΕΤ-Γ4], όχι και τόσο επτοµερεί, α ά χρήσιµη για του άσχετου. 2 To prìblhma tou ădh grammènou kÿdika Συµβαίνει η κάθε οµάδα ανάπτυξη ενό έργου να διαµορφώνει την επικοινωνία µε ά ο κώδικα ανά- ογα µε τι ανάγκε τη και συµβαίνει αυτή η επικοινωνία να είναι κάθε φορά διαφορετική από έργο σε έργο, ακόµα και όταν αναφέρεται στο ίδιο θέµα. Αυτό είναι φυσικό να συµβαίνει διότι η συ ογική εργασία παραµένει σε επίπεδο έργου και όχι συνό ου πράγµα έτσι και α ιώ πο ύ δύσκο ο. Αυτό όµω έχει σαν αποτέ εσµα, να αναγκάζει του προγραµµατιστέ να αποφεύγουν συχνά την χρήση τέτοιων έργων διότι: 1. Απαιτεί από αυτού να δώσουν χρόνο για την εκµάθηση του διαφορετικού interface. 2. Συχνά δεν ταιριάζει το interface µε την δοµή του ήδη υπάρχων κώδικα. 3. Είναι αναγκασµένοι να γράψουν ειδικό κώδικα για την υποστήριξη του καθενό µε αποτέ εσµα, εκτό από κουραστικό και χρονοβόρο, να είναι και ανασφα έ διότι ο κώδικα όσο πιο περίπ οκο είναι τόσο πιο πιθανό είναι να κάνει σφά µατα. 2.1 I/O Το κάθε πρόγραµµα χαρακτηρίζεται από την είσοδο και την έξοδο. Ω είσοδο ονοµάζουµε το σύστηµα εισαγωγή στοιχείων, όπου αυτό µπορεί να είναι µια συσκευή όπω το ποντίκι ή τα αποτε έσµατα κάποια επεξεργασία όπω ένα αρχείο, ή και ά α. Αντίστοιχα και η έξοδο είναι τα αποτε έσµατα του προγράµµατο τα οποία µπορεί να είναι ένα αρχείο, κάποια ή κάποιε γραφικέ παραστάσει στην οθόνη και πάει έγοντα. Στην σηµερινή κατάσταση τα συστήµατα εισόδου/εξόδου κατά κανόνα απαιτούν από υτα διαφορετικό τρόπο χειρισµού από το πρόγραµµα. Οταν για παράδειγµα σχεδιάζουµε ένα διάγραµµα στην οθόνη, χρειάζεται να γράψουµε και νέο διαφορετικό κώδικα για να το εκτυπώσουµε ή να το πάρουµε σε µορφή αρχείου. 2.2 H eðsodoc thc exìdou Τα πράγµατα γίνονται ιδιαίτερα πο ύπ οκα όταν θέ ουµε να επεξεργαστούµε τα αποτε έσµατα µια εφαρµογή, καθώ επίση και τα αποτε έσµατα τη δική µα εργασία να είναι δυνατό να επεξεργαστούν από ά ε εφαρµογέ. 5 Dhladă na perimènoume na pollaplasiasteð se ekplhktikì bajmì to ădh terĺstio codespace.

3 ENA ENIA IO INTERFACE 4 Κατά κανόνα, η επικοινωνία των προγραµµάτων γίνετε µέσω αρχείων, ενώ χρειάζεται ειδικό χειρισµό για την επικοινωνία τη κάθε εφαρµογή. Για παράδειγµα για ένα διανυσµατικό σχέδιο, είµαστε αναγκασµένοι να χρησιµοποιήσουµε διάφορε µορφέ αρχείων που χρησιµοποιούνται από τα προγράµµατα CAD, και αν θέ ουµε να κάνουµε κα ή δου ειά θα πρέπει να υποστηρίζουµε 2-3 του άχιστον τέτοιε µορφέ. 2.3 Nekră fôsh Τα αρχεία, εκτό των ά ων, είναι νεκρή φύση. εν κάνουν υπο ογισµού, δεν συµπεριφέρονται ανά ογα µε τι ανάγκε µα, α ά είναι στατικά, νεκρά κατά κάποιο τρόπο. Αυτό περιορίζει κατά πο ύ τι δυνατότητε εισόδου/εξόδου. Για παράδειγµα δεν µπορεί από ένα αρχείο διανυσµατικών γραφικών να του ζητήσει να µετατραπεί σε ά η ανά υση (χρήσιµο για επεξεργασία σε bitmap) ή σε ά ο σύστηµα αξόνων (+ψ επάνω ή κάτω), πρέπει να το κάνει στο πρόγραµµά σου. Αυτό είναι µια τυπική διεργασία - ρουτίνα που φαντάζοµαι πο οί από εµά την κάνουν βό τα από πρόγραµµα σε πρόγραµµα, αν και ογικό είναι να γίνετε σε ένα µέρο, επειδή η δοµή των στοιχείων διαφέρει αναγκαζόµαστε να αντιγράφουµε και να διορθώνουµε αυτή την ρουτίνα. εν θα γινόταν όµω αυτό αν µπορούσαµε από την είσοδο να ζητήσουµε το πω θέ ουµε τα στοιχεία. 2.4 SumperĹsmata Αυτά ακριβώ περιορίζουν στο ε άχιστο την δοκιµή (και χρήση) ενδιαφέρον έργων µε αποτέ εσµα τον περιορισµό τη τοπική και συνο ική ανάπτυξη του ογισµικού σε παγκόσµιο επίπεδο. η αδή µα δυσκο εύει να δοκιµάσουµε και να χρησιµοποιήσουµε έτοιµε ύσει, και αν αυτά τα προβ ήµατα διορθωθούν είµαι σίγουρο θα έχουµε εκτίναξη τη ανάπτυξη ογισµικού, εµπορικού και µη, σε παγκόσµιο επίπεδο. Θα δούµε ό α αυτά πω ύνονται και πω προωθούνται σε µια τε είω διαφορετική ογική χρήση και ανάπτυξη. Θα ασχο ηθούµε όµω σχεδόν αποκ ειστικά µε το εγόµενο VFS, δη αδή το εικονικό σύστηµα αρχείων, διότι είναι το πιο σηµαντικό α ά και το πιο απ ό τµήµα του PM. 3 Ena eniaðo interface Τα προβ ήµατα αυτά τα έχω νιώσει στο πετσί µου από την εποχή προ του DOS. Οσο όµω πέρναγε ο καιρό, και όσο µεγά ωνε η αθ ίοτητα του Windows API[CrqAPI] µε ανάγκασε πο έ φορέ να φτιάχνω C modules που ουσιαστικά δεν έκαναν τίποτα ά ο από το να προσφέρουν ένα ενιαίο interface ανάµεσα ίδιου θέµατο βιβ ιοθήκε ή τµήµατα του API! Στο arm0nia project βρέθηκα να είµαι σε θέση που έπρεπε να συνδέσω εκατοντάδε βιβ ιοθήκε γνωστέ και µη, τµήµατα κώδικα γνωστά και µη καθώ και την διασύνδεση ό ων αυτών µεταξύ του. Αυτό πίστευα, και επιµένω ότι πρέπει να γίνει και σε πο ύ µεγά ο βαθµό το PM τα κατάφερε. εν µε ενδιέφερε και τόσο το arm0nia αυτό διότι είχα και έχω περιορισµένο χρόνο κυρίω όγο τη εργασία µου και τη SB. Α ά το είδο του προβ ήµατο ήταν που µου κέντρισε το ενδιαφέρον.

4 EN ARQ H HTAN H SB 5 Output A Input Application Output B Input B Output C Input C Η ό η κατάσταση έµοιαζε µε το παραπάνω σχήµα. Τα προγράµµατα ήταν φτιαγµένα όπω το application τη εικόνα, δη αδή είχαν φτιαχτεί για µια συγκεκριµένη µορφή είσοδο ή για συγκεκριµένων µορφών σύνδεση µε βιβ ιοθήκε 6. Αυτό οιπόν που χρειαζόταν ήταν τα πάντα να οµι ούν την ίδια γ ώσσα, να έχουν δη αδή την ίδια υποδοχή σύµφωνα µε το σχεδιάγραµµα. i Το ενιαίο interface για τα πάντα είναι η βασική αρχή του PM. Είναι η αρχή όπου ξεδιπ ώνεται γύρω τη το υπό οιπο σύστηµα. Ω δια µαγεία, οιπόν, ό α τα προβ ήµατα θα υνόντουσαν αν υπήρχε κοινή υποδοχή καθώ επίση και η έξοδο ήταν όπω η είσοδο. Και αν για κάποιο όγο δεν µπορούσαµε να είχαµε κοινή είσοδο ένα τέτοιο πρόγραµµα που θα ανα άµβανε να έχει µια γνωστή έξοδο θα κά υπτε αυτό το κενό ώστε να έχουµε το ενιαίο τρόπο επικοινωνία. Ω δια µαγεία, οιπόν, ό α όσα δεν υνόντουσαν µε αυτό θα µπορούσαν να υθούν µε επιπ έον κώδικα. Στο PM η είσοδο και η έξοδο είναι σχεδόν πάντα κώδικα, δη αδή ζωντανό, ευµετάβ ητο πράγµα. Και αν κατά περίπτωση δεν τύχει, µπορεί να γίνει. 4 En arqă ătan h SB Ανάµεσα στα ά α, έχω φτιάξει και µια BASIC, την SmallBASIC (για συντοµία SB). Η SB έχει µεγά η σηµασία για το PM, διότι είναι ο σχεδιαστικά πρόγονό του. Η SB είναι ένα ιδιόµορφο έργο πρέπει να παρέχει την µέγιστη ευκο ία στον χρήστη µια και απευθύνεται εκτό των ά ων σε παιδιά, πρέπει επίση να ειτουργεί κάτω από διαφορετικά ειτουργικά συστήµατα όπω PalmOS, Linux, Windows κ. π. Ο α αυτά σηµαίνουν ότι έπρεπε η SB να προσφέρει ένα ενιαίο περιβά ον για µεγά ο αριθµό διαφορετικών πραγµάτων α ά και ταχύτατη ειτουργία διότι ειδικά στα Palms η ταχύτητα καθώ και οι δυνατότητέ του είναι ενοχ ητικά περιορισµένε. 6 Sto sqediĺgramma deðqnoume mìno thn eðsodo kai èxodo allĺ to Ðdio sumbaðnei kai me tic diĺforec bibliojăkec.

4 EN ARQ H HTAN H SB 6 Για να καταφέρω αυτά, πήγα πίσω στι πρώτε εκδόσει του Unix α ά και στο DOS (και CP/M) και αναρωτήθηκα γιατί δεν επιβ ήθηκε µια όµορφη σχεδιαστική δυνατότητα. Και στα δύο αυτά.σ. η σειριακή πόρτα ειτουργεί όµοια µε την κονσό α και τα δύο ειτουργούν µε εντο έ file I/O. Ναι, έχουν ένα ενιαίο interface, έστω και πρόχειρα φτιαγµένο. 1 fp_console = fopen("con:", "wt"); // Anoigma device consolas 2 fp_serial = fopen("com1:", "wt"); // Anoigma serial port 1 3 4 fprintf(fp_console, "Hello, world!"); // typwma sto monitor 5 fprintf(fp_serial, "Hello, world!"); // apostolh mesw serial Πιστεύοντα ότι σχεδόν ό α τα δεδοµένα µπορούν να οργανωθούν έτσι ώστε να διαχειρίζονται µε file I/O εντο έ, α ά και επειδή είχα ήδη αποκτήσει αναγκαστικά εµπειρία σε τέτοια θέµατα, αντί να προσθέτω εντο έ στην SB για κάθε driver, ά αξα τον κάθε driver να συµπεριφέρεται σαν filesystem. Ετσι σήµερα στην SB, µε τι τέσσερι εντο έ OPEN, INPUT#, PRINT# και CLOSE που χρησι- µοποιούνται για το κ ασσικό file I/O, µπορούν οι χρήστε να κάνουν τα εξή 1. Να χειρίζονται τα αρχεία του δίσκου του. 2. Να στέ νουν και να παίρνουν δεδοµένα µέσω σειριακή. 3. Να γράφουν και να διαβάζουν PDOC αρχεία (PalmOS database compressed documents). 4. Να γράφουν και να διαβάζουν memos από το memo database. 5. Να γράφουν και να διαβάζουν µέσω telnet protocol, δη αδή να επικοινωνούν µε τι περισσότερε υπηρεσίε του internet (POP3, SMTP, HTTP κ.α.) Η SB συνέβα ε βέβαια παραπάνω στο PM, διότι ο κώδικα για τα πρώτα δυναµικά modules καθώ και ά α, είναι αντιγραφή του αντίστοιχου κώδικα τη SB. 4.1 To ierarqikì sôsthma twn arqeðwn Το ιεραρχικό σύστηµα των αρχείων είναι µια κ ασσική και πάµπο α διαδεδοµένη δοµή που µπορεί να εκφράσει σύνθετε δοµέ δεδοµένων. εν νοµίζω ότι υπάρχει κάποιο που δεν µπορεί να περιγράψει την δοµή των δεδοµένων όπω ακριβώ σε ένα RDBMS. Οι σχέσει των στοιχείων καθώ και τα ευρετήρια, µπορούν να εκφραστούν µε πιο σύνθετου τρόπου α ά πάντα στα π αίσια του συστήµατο αρχείων καθώ επίση και οι ειτουργίε µέσω κώδικα. Για παράδειγµα τα συνδεδεµένα προγράµµατα (το #! στο Unix και η επέκταση στα Windows) και οι συνδέσει (links στο Unix). Πέρα από αυτά, οι διαδικασίε που χρειάζονται για να γίνει η ανάγνωση ή εγγραφή των στοιχείων, είτε έχουµε αρχείο, είτε socket, είτε database, είτε δυναµική ίστα, κ. π. είναι πάντα η ίδια. Α άζουν µόνο οι εντο έ ανάγνωση και εγγραφή. Τυπικό ψευδοκώδικα που εκφράζει µια τυπική διεργασία µε ανάγνωση και εγγραφή. 1 Păgaine sthn arqă twn stoiqeðwn 2 Efìson den teleðwsan ta stoiqeða 3 anĺgnwsh stoiqeðwn 4 epexergasða 5 eggrafă stoiqeðwn sthn èxodo 6 păgaine sto epìmeno stoiqeðo

4 EN ARQ H HTAN H SB 7 Είτε είναι δυναµική ίστα, είτε database, είτε αρχείο κειµένου, πο έ φορέ και socket κ. π. αυτό ο ψευδοκώδικα εκφράζει κάτι που έχουµε βαρεθεί να το επανα αµβάνουµε. Η SB (και το PM κατ επέκταση) δεν υπόσχεται ότι δεν θα το γράψουµε, υπόσχεται όµω ότι έτσι θα γίνετε και µε τι ίδιε εντο έ για οποιοδήποτε θέµα. INPUT# για την ανάγνωση, PRINT# για την εγγραφή. Οι χρήστε τη SB είναι ευχαριστηµένοι µε την χρήση αυτών αντί να µαθαίνουν τι idiìthtec και τι mejìdouc του εκάστοτε class. 4.2 Pwc ègine ìmwc autì? Εχω το ε άττωµα να ατρεύω τα function-pointers, στην SB όµω τέτοια υ οποίηση ήταν δύσκο ο όγω των πο απ ών code segments που απαιτούσε το PalmOS. Ετσι αυτό υ οποιήθηκε µε τον π έον απ ό τρόπο, τον οποίο και θα δούµε αν θέ ουµε να κατα άβουµε αργότερα το ιδιαίτερα σύνθετο PM. Η εντο ή OPEN παίρνει παράµετρο το όνοµα του αρχείου για άνοιγµα. Στην BASIC, αντίθετα από την C, αυτή η εντο ή παίρνει ω παράµετρο και το file-handle. Οταν ο χρήστη, πέραν του συνηθισµένου sustămatoc arqeðwn, θέ ει να χρησιµοποιήσει κάποιον από του προκαθορισµένου οδηγού που προσφέρονται µε την SB, χρειάζεται αυτό να το δη ώσει στο ìnoma arqeðou. Ετσι χρησιµοποιώντα το σύµβο ο : διαχωρίζει το όνοµα του οδηγού και τι παραµέτρου του. Για παράδειγµα το onoma arqe iou myfile.txt σηµαίνει ένα απ ό αρχείο, το ìnoma arqeðou COM1:9600 σηµαίνει ότι η SB να χρησιµοποιήσει τον οδηγό τη σειριακή πόρτα 1 (COM1) αντί για το κ ασσικό sôsthma arqeðwn, στην ταχύτητα των 9600 BAUDs. 1 handle = 1 2 OPEN "COM1:9600" AS #handle SB source Ετσι το παραπάνω παράδειγµα µεταφράζεται από την SB στο παρακάτω κώδικα. 1 filename = "COM1:9600"; AntikatĹstash thc OPEN 2 drivername = filename.leftof ( : ); // drivername <- "COM1" 3 driverparams = filename.rightof( : ); // driverparams <- "9600" 4 if ( drivername == "COM1" ) { 5 filetable[handle].driverid = SERIAL; // use serial I/O library 6 filetable[handle].serialhandle = serial_open(driverparams); 7 } 8 else { 9 filetable[handle].driverid = DISK; // use file I/O library 10 filetable[handle].fp = fopen(drivername + driverparams); 11 } Το filetable φυ άσσει τα στοιχεία του κάθε file-handle, και ένα από τα στοιχεία αυτά είναι ποια βιβ ιοθήκη θα χρησιµοποιήσει (στο παράδειγµά µα, για serial port ή τυπικό file-system). Αυτή η π ηροφορία καταχωρείτε στο πεδίο driverid όπω είδαµε. Η συνάρτηση serial open µαζί µε την serial write string που θα δούµε παρακάτω, είναι µέρο του driver τη SB, για την διαχείριση τη σειριακή πόρτα. η αδή αυτό ο driver δεν είναι τίποτα ά ο από µια τυπική βιβ ιοθήκη (ή απ ό C module) που περιέχει του άχιστον αυτέ τι δυο συναρτήσει.

5 H ID EA 8 1 PRINT #handle; "Hello, world!" SB source Αντίστοιχα και η αποστο ή στοιχείων (PRINT) γίνετε µε το ίδιο τρόπο. AntikatĹstash thc PRINT 1 params = "Hello, world!"; 2 if ( filetable[handle].driverid == SERIAL ) 3 serial_write_string(filetable[handle].serialhandle, params); 4 else 5 fprintf(filetable[handle].fp, "%s", params); Οπω αντι αµβανόµαστε η διαδικασία είναι πο ύ απ ή. Ενα switch ή διαδοχικά if υ οποιούν αυτό το υποσύστηµα. 5 H idèa Οπω είδαµε ο χρήστη τη SB έχει ένα ενιαίο interface για µια π ηθώρα δυνατοτήτων. Τι θα γινόταν άραγε αν προσαρµόζονταν τα πάντα γύρω από δύο - τρία τέτοια interfaces και τι αν η εφαρµογή έπαιρνε παραµετρικά το αντίστοιχο driver αφού ο κώδικα τη θα ήταν ο ίδιο ενώ µόνο η παράµετρο τη εντο ή open() θα ά αζε και τι αν ο ένα driver φόρτωνε τον ά ο Και τι αν ο χρήστη (ή πρόγραµµα - γονιό ) επέ εγε ποιο είναι ο default driver για κάθε ειτουργία Απάντηση... τρε ά πράγµατα, χωρί να α άξει ούτε µια γραµµή κώδικα, τόσο τρε ά που ούτε η φαντασία µα δεν µπορούσε να συ άβει. Αυτό που ονειρευτήκαµε την ενοποίηση τεράστιου όγκου κώδικα. ii Στο PM δεν υπάρχει πια η έννοια του αρχείου, τη εικόνα, database, TCP/IP κ. π. υπάρχει µόνο αυτόνοµο κώδικα που συµπεριφέρεται µε προκαθορισµένο τρόπο. Η εφαρµογή ανοίγει ένα αρχείο όπω κάνει πάντα, µε τι ίδιε εντο έ πάντα, και φυσικά τον ίδιο τρόπο χειρισµού. Το τι κάνει όµω αυτό το αρχείο δεν το ξέρει διότι δεν έχουµε να κάνουµε µε αρχείο α ά κώδικα που συµπεριφέρεται σαν αρχείο. iii Αντίστοιχα µε τα εικονικά αρχεία η εφαρµογή χειρίζεται και ά α πραγµατικά ή εικονικά συστήµατα εισόδου / εξόδου ή επεξεργασία τα οποία παραµένουν άγνωστα στην εφαρµογή α ά µε γνωστό τρόπο διαχείριση αυτών. Μερικά τρε ά παραδείγµατα Ενα filemanager που να στέ νει email χωρί να έχει κώδικα για αυτό, δεν τον χρειάζεται, δεν χρειάζεται καν να ξέρει τι είναι socket! Ενα filesystem που να προσθέτει unix attributes σε FAT! Μια εικόνα που να αποθηκεύεται σαν ήχο και το αντίστροφο! Εχετε ποτέ τραβήξει γραµµέ σε ήχο Ενα γραφικό περιβά ον που να ειτουργεί το ίδιο κα ά σε graphics terminals όσο και σε ASCII terminals.

6 TEQNIK ES AN APTUXHS TOU PM 9 Μια εφαρµογή που να εµφανίζεται κατά επι ογή σε PDF αρχείο αντί για οθόνη, είτε επειδή ορίστηκε έτσι στην εφαρµογή, είτε επειδή ο χρήστη διά εξε για driver οθόνη το PDF driver! Ο ηµήτρη, είχε πει ότι το PM είναι η αποθέωση του εικονικού, το virtual του virtual. Και είχε δίκιο, διότι το σύστηµα αυτό προσφέρει ένα εικονικό περιβά ον, µε εικονικά ή µη δεδοµένα, από εικονικέ ή µη συσκευέ όπου το ένα µπορεί να βασίζεται στο ά ο. Για παράδειγµα, είναι δυνατό να φτιαχτεί ένα ο όκ ηρο GUI περιβά ον του οποίου η είσοδο και έξοδο καθορίζεται δυναµικά από τον χρήστη, δη αδή να εκτε είται στην µνήµη, και αν και όταν συνδέσουµε ένα module εξόδου όπω η κάρτα γραφικών, ο εκτυπωτή, τερµατικό, βιβ ιοθήκη avi ή pdf να παίρνουµε τα αποτε έσµατα στην οθόνη, εκτυπωτή, σε οθόνη ά ου τερµατικού ή αρχείο. Αντίστοιχα ω είσοδο αυτού του συστήµατο θα µπορούσαµε να έχουµε ένα ά ο πρόγραµµα ή το π ηκτρο όγιο ή το ποντίκι, ή συνδυασµό αυτών. iv εν πρόκειται για κάτι πο ύπ οκο, επανα αµβάνω ότι έχουµε να κάνουµε µε πο ύ απ ό σύστηµα, µε απ έ τεχνικέ, που είναι έτσι σχεδιασµένο ώστε να ενοποιεί µε ικανοποιητικό τρόπο άσχετα µεταξύ του κοµµάτια ογισµικού α ά και να αποτρέπει του περιορισµού τη ίδια τη φύση του κάθε κώδικα. Το αποτέ εσµα αυτού είναι ό ε αυτέ οι δυνατότητε. Εφόσον το ποντίκι (pointing device interface) µπορεί να αντικατασταθεί από κώδικα, η οθόνη (graphics device interface) από κώδικα και το ταχυδροµείο από κώδικα που συµπεριφέρεται σαν σύστηµα αρχείων (virtual file system interface). Εφόσον ό α αυτά µπορούν να γίνουν χωρί να α άξει ούτε µια γραµµή κώδικα, τότε δεν θα έπρεπε να σα παραξενεύουν τα αποτε έσµατα α ά αντίθετα να µα κριτικάρετε για έ ειψη φαντασία. 5.1 Ta modules anexĺrthta apì to PM Το arm0nia project όµω είναι, του άχιστον προ το παρών, ευά ωτο. Σήµερα υπάρχει, αύριο µπορεί και όχι. Το έργο όµω πάνω στι αρχέ του PM έπρεπε και πρέπει να επιζήσει. Ο όγο είναι απ ό. Εµεί θα κάναµε και κάνουµε ήδη µια εργασία. Αυτή η εργασία προσφέρει ένα τυποποιηµένο µοντέ ο ειτουργία για διάφορα πράγµατα η οποία µπορεί να χρησιµοποιηθεί και από τρίτου, και θα πρέπει να γίνει αυτό ή έστω να απαιτηθεί να γίνει αυτό. Το PM οιπόν προσφέρει εκτό του συνο ικού συστήµατο και ένα τρόπο ètsi ÿste anexĺrthtec efarmogèc me to PM na eðnai ikanèc na prosjèsoun ta modules tou PM ston kÿdikĺ touc qwrðc na qreiĺzontai to Ðdio to PM ă thn bibliojăkh autoô. Η ανεξαρτητοποίηση των modules αυτών είναι για µένα σηµαντικό θέµα. Το πω γίνετε πράγµα απ ό και εύχρηστο αυτό δεν θα το ανα ύσουµε εδώ, α ά το βρίσκω από υτα απαραίτητο να ειπωθεί. 6 Teqnikèc anĺptuxhc tou PM Θα εξηγήσουµε παρακάτω µε τον π έον τυπικό τρόπο τι τεχνικέ που χρησιµοποιήθηκαν για να επιτευχθεί η ανάπτυξη του PM. Ο α αυτά είναι ενσωµατωµένα στο υποσύστηµα και είναι αόρατα στον τε ικό χρήστη - προγραµµατιστή.

6 TEQNIK ES AN APTUXHS TOU PM 10 6.1 SÔndesh arqeðou kai kÿdika Οπω είδαµε στην SB, η επι ογή των ρουτινών για το άνοιγµα ή την ανάγνωση ή την αποστο ή στοιχείων γινόταν µε διαδοχικά if. Αυτή η διαδικασία στο PM έπρεπε να γίνετε αυτόµατα και το πω αυτό είναι δυνατό θα το ανα ύσουµε τώρα. Αν αντί για µια σειρά από if, συνδέσαµε το εικονικό αρχείο µε την βιβ ιοθήκη που είναι ικανή να το διαχειρίζεται... 1 filename = "COM1:9600"; AntikatĹstash thc OPEN 2 drivername = filename.leftof ( : ); // drivername <- "COM1" 3 driverparams = filename.rightof( : ); // driverparams <- "9600" 4 if ( drivername == "COM1" ) { 5 filetable[handle].openfuncptr = serial_io_open; 6 filetable[handle].writefuncptr = serial_io_write; 7 } 8 else { 9 filetable[handle].openfuncptr = file_io_open; 10 filetable[handle].writefuncptr = file_io_write; 11 driverparams = drivername + driverparams; 12 } 13 14 // open file 15 filetable[handle].systemhandle = 16 filetable[handle].openfuncptr(driverparams); η αδή ο πίνακα filetable, στο νέο αυτό σχήµα, φυ άσσει τι διευθύνσει των ρουτινών αντί για το ποια βιβ ιοθήκη να χρησιµοποιήσει, ενώ οι συναρτήσει για το serial I/O και για το file I/O έχουν προσαρµοστεί έτσι ώστε να έχουν την ίδια σύνταξη. Αυτό έχει φι οσοφικέ προεκτάσει διότι προσθέτει µια τε είω διαφορετική ογική και δυνατότητε στην αντιµετώπιση του θέµατο. Ενώ πριν είχαµε ένα πίνακα από στοιχεία για κάθε αρχείο, τώρα στο αρχείο αυτό το συνδέουµε µε τον αντίστοιχο κώδικα για τον χειρισµό του (function pointers). Αυτό ο αντίστοιχο κώδικα µπορεί πράγµατι να αναφέρεται στην χρήση ενό αρχείου α ά µπορεί και σε οτιδήποτε ά ο (π.χ. σειριακή πόρτα, sockets, ή κάποια επεξεργασία κ. π.). v Με αυτή την τεχνική ο υπό οιπο κώδικα δεν χρειάζεται να ξέρει τι είναι το αρχείο για να το χρησιµοποιήσει. Απ ά κα εί τι προκαθορισµένε συναρτήσει, µε προκαθορισµένη σύνταξη, συναρτήσει που είναι ορισµένε µέσα στο filetable[handle]. Στην ακό ουθη αντικατάσταση τη PRINT β έπουµε καθαρά ότι το πρόγραµµα δεν χρειάζεται πια να ξέρει ότι το υποτιθέµενο αρχείο είναι σειριακή πόρτα ή κανονικό αρχείο. 1 params = "Hello, world!"; AntikatĹstash thc PRINT 2 filetable[handle].writefuncptr(filetable[handle].systemhandle, params); 6.2 Exèlixh se module Στην προηγούµενη διαδικασία η open γέµιζε το filetable µε τι διευθύνσει των ρουτινών για τι µεθόδου open, close και read, write. Είδαµε επίση ότι για να γίνει αυτό χρειαζόταν κάθε βι-

6 TEQNIK ES AN APTUXHS TOU PM 11 β ιοθήκη να συµπεριφέρεται µε τον ίδιο τρόπο, δη αδή να έχει µια προκαθορισµένη σύνταξη για τι προαναφερθέντε εντο έ. Οµω µέχρι τώρα ό α αυτά γινόντουσαν στο ίδιο το πρόγραµµα - εφαρµογή. Αυτό που µα ενδιαφέρει είναι οι βιβ ιοθήκε αυτέ να φορτώνονται κατά επι ογή από την εφαρµογή. Αυτό είναι δυνατό να γίνει αν χρησιµοποιήσουµε τον µηχανισµό δυναµική διασύνδεση βιβ ιοθηκών που παρέχεται στα σηµερινά.σ. Για να γίνει αυτό, αντί να έχουµε µια µεταβ ητή τύπου filetable, φτιάχνουµε εµεί ένα structure στο οποίο αποθηκεύουµε τι διευθύνσει των ρουτινών. 1 struct module { AntikatĹstash tou filetable 2 void *dlhandle; // handle of dynamic linked library 3 int (*open) (const char *filename, const char *mode); 4 void (*close)(int handle); 5 int (*write)(int handle, char *buffer, int size); 6 int (*read) (int handle, char *buffer, int size); 7 }; Ετσι, οιπόν, καθορίζουµε το ενιαίο interface ό ων των βιβ ιοθηκών, που από τώρα ονοµάζονται modules, όπου συµπεριφέρονται σαν αρχεία. η αδή, χειρίζονται µε τι κ ασσικέ εντο έ του file I/O 7. 1 module serial_io_lib; 2 module file_io_lib; Dunamikì fìrtwma module 3 4 serial_io_lib.dlhandle = dlopen("my_serial_io_lib.so", RTLD_LAZY); 5 serial_io_lib.open = dlsym(serial_io_lib.dlhandle, "open"); 6... 7 file_io_lib.dlhandle = dlopen("my_file_io_lib.so", RTLD_LAZY); 8 file_io_lib.open = dlsym(file_io_lib.dlhandle, "open"); Περισσότερα για τι δυναµική σύνδεση βιβ ιοθήκε στο [LPLib]. Με αυτό τον τρόπο είναι δυνατό να φορτώνουµε πο ά τέτοια modules και κρατώντα τον ίδιο κώδικα - εφαρµογή να ενα άσσουµε την έξοδο/είσοδο απ ά α άζοντα τον deðkth του module όπω ακριβώ β έπουµε στο παρακάτω παράδειγµα. 1 module *current_module; 2 ParĹdeigma me dôo modules 3 //current_module = &serial_io_lib; 4 current_module = &file_io_lib; 5 int handle = current_module->open("myfile", "w"); 6 current_module->read(handle, buffer, 1024); 7 current_module->close(handle); Οπω β έπουµε, αν απενεργοποιήσουµε την γραµµή 4 και ενεργοποιήσουµε την 3, τότε ο κώδικα αυτό αντί να διαβάζει από ένα αρχείο θα παίρνει στοιχεία από την σειριακή πόρτα. 7 open(), read(), write(), close(), eof(), seek(), fgets(), etc

6 TEQNIK ES AN APTUXHS TOU PM 12 Σ αυτό το σηµείο θα πρέπει να αντι αµβάνεστε πόσο εύκο ο θα ήταν, α άζοντα µια µόνο γραµµή κώδικα στην εφαρµογή, αυτή να χρησιµοποιεί συµπιεσµένα ή όχι αρχεία µε την χρήση τη zlib. 6.3 VFS Το VFS σηµαίνει Virtual File System δη αδή εικονικό σύστηµα αρχείων. Το ονοµάσαµε έτσι διότι η εφαρµογή νοµίζει ότι διαχειρίζεται ένα σύστηµα αρχείων, α ά αυτό το σύστηµα µπορεί να εκφράζει τε είω διαφορετικά πράγµατα. Κ ασσικά δείγµατα, είναι τα zip αρχεία όπου περιέχουν κατα όγου και αρχεία σε συµπιεσµένη µορφή, το registry των Windows, κ.α. Το VFS υποσύστηµα του PM, εκφράζει δύο καταστάσει. 1. Επίπεδο αρχείου. η αδή όταν έχουµε να κάνουµε µε εικονικά αρχεία όπω η σειριακή πόρτα. 2. Επίπεδο κατα όγων. η αδή όταν έχουµε να κάνουµε µε ο οκ ηρωµένο περιβά ον, µε κατα- όγου, αρχεία και file-attributes. Υποθέτω ότι η έξη file ακόµα σα περιορίζει την φαντασία στα κ ασσικά αρχεία. Αυτό είναι σηµαντικό άθο, δεν πρόκειται για αρχεία α ά για κώδικα! Η έξη file εκφράζει τον τρόπο επικοινωνία µε το module και όχι τι κάνει το module. Το αρχείο στο VFS θα µπορούσε κά ιστα να είναι µια ρουτίνα που στέ νει πίσω στην εφαρµογή τα αποτε έσµατα µια επεξεργασία ή οποία έγινε την ώρα ακριβώ που η εφαρµογή ζήτησε να ανοίξει το αρχείο. Α δούµε ένα απ ό παράδειγµα. Υποθέτουµε ότι έχουµε ένα µετρητή θερµοκρασία στο PC µα ο οποίο επιστρέφει την θερµοκρασία σε βαθµού Kelvin. Αυτή την συσκευή την διαχειριζόµαστε από την βιβ ιοθήκη που µα παρέχει ο κατασκευαστή, η οποία βιβ ιοθήκη έχει µια και µόνη συνάρτηση, την curtherm(). Ενα τυπικό πρόγραµµα θα έκανε τα παρακάτω για να µα εµφανίσει την θερµοκρασία σε βαθµού Kelvin και Celsius. 1 main() 2 { 3 double t = curtherm(); 4 5 printf("%f Kelvin\n", t); 6 printf("%f Celsius\n", t - 273); 7 } thermometer Επειδή όµω εµεί θέ ουµε να β έπουµε αυτέ τι µετρήσει σε ένα file-manager έτσι ώστε όταν κάνουµε κ ικ σε ένα αρχείο που ονοµάζεται /thermometer/kelvin και ένα που ονοµάζεται /thermometer/celsius να β έπουµε την τρέχουσα µέτρηση στην αντίστοιχη κ ίµακα φτιάχνουµε ένα αντίστοιχο VFS module. 1 char strkelvin[32]; 2 char strcelsius[32]; thermometer vfs module 3 4 int therm_open(const char *filename) 5 { 6 if ( strcmp(filename, "Celsius") == 0 ) {

6 TEQNIK ES AN APTUXHS TOU PM 13 7 sprintf(strcelsius, "%f", curtherm() - 273); 8 return 1; 9 } 10 else if ( strcmp(filename, "Kelvin") == 0 ) { 11 sprintf(strkelvin, "%f", curtherm()); 12 return 2; 13 } 14 return -1; // error 15 } 16 17 int therm_read(int handle, char *buf, int size) 18 { 19 int len = 0; 20 21 switch ( handle ) { 22 case 1: // Celsius-file data 23 len = strlen(strcelsius); 24 strncpy(buf, strcelsius, len); 25 break; 26 case 2: // Kelvin-file data 27 len = strlen(strkelvin); 28 strncpy(buf, strkelvin, len); 29 } 30 return len; 31 } 32 33 void module_init(module *mod) 34 { 35 mod->open = therm_open; 36 mod->read = therm_read; 37 } Αυτό το module είναι ένα εικονικό σύστηµα αρχείων. Βέβαια το έχουµε απ οποιήσει εδώ α ά δεν έχει και µεγά η διαφορά από την πραγµατικότητα. Στο module init όπω β έπουµε καθορίζουµε ποια συνάρτηση ανα αµβάνει να κάνει το open και ποια το read. Α δούµε τι και πω ακριβώ θα συµβεί 1. Η εφαρµογή file-manager ζητά από τον PM να φορτώσει το module. 2. Το PM εκτε εί την module init ώστε να ξέρει ποιε συναρτήσει είναι υ οποιηµένε στο module και ποια ανα αµβάνει να κάνει τι. 3. Η εφαρµογή ζητά από το PM να ανοίξει το εικονικό αρχείο Celsius. 4. Το PM εκτε εί την therm open("celsious") και επιστρέφει τον εικονικό handle (επιστρέφεται από την therm open() ) πίσω στην εφαρµογή. 5. Η εφαρµογή ζητά από το PM να πάρει τα περιεχόµενα του αρχείου µε µια τυπική κ ήση στην fgets() ( module->fgets(...) ). 6. Το PM, µέσω τη δική του fgets() κα εί την therm read() για να πάρει τα στοιχεία και τα επιστρέφει στην εφαρµογή.

6 TEQNIK ES AN APTUXHS TOU PM 14 6.4 Ektìc tou VFS......κ ειδιά... 6.5 PMFS Ωραία ό α αυτά α ά θα έπρεπε η εφαρµογή να µπορεί να ξέρει τι modules υπάρχουν στο σύστηµα για ποιο interface. Ετσι το deamon του PM, ανέ αβε να παρέχει αυτέ τι π ηροφορίε µέσω ενό εικονικού συστήµατο αρχείων, το ονοµαζόµενο pmfs. 1 main() 2 { 3 pm_vfs_module_t *pmfs; 4 strlist_t *list; 5 int i; 6 7 pm_init(); // initialize PM 8 LÐsta ìlwn twn vfs modules 9 // load PM virtual-file-system module 10 if ( (pmfs = pm_vfs_load("vfs/pmfs")) == NULL ) 11 panic("pm_vfs_load(): failed"); 12 13 printf("the following VFS modules found:\n\n"); 14 list = pmfs->list(pmfs->mid, "/vfs/*"); 15 for ( i = 0; i < list->count; i ++ ) 16 printf("%d: %s\n", i+1, list->str[i]); 17 18 strlist_destroy(list); 19 pm_vfs_release(pmfs); 20 } Η µέθοδο list είναι µια πιο προχωρηµένη έκδοση των opendir()/closedir(), και επιστρέφει µια ίστα µε τα ονόµατα των αρχείων. η αδή το αντίστοιχο των εντο ών ls ή/και dir που γνωρίζουµε από την κονσό α. 6.6 Ena ètoimo eikonikì sôsthma arqeðwn Α υποθέσουµε ότι έχουµε ένα file-manager ο οποίο ειτουργεί µε modules αντίστοιχα µε αυτά που περιγράψαµε παραπάνω, α ά προσθέστε και οιπέ κοινότυπε εργασίε όπω opendir()/closedir() και chdir()/rmdir()/mkdir(). Εχουµε ήδη φτιάξει τέτοιο πρόγραµµα - εφαρµογή που ειτουργεί άψογα, το vfssh, το οποίο είναι ένα shell σαν τα bash και tcsh µόνο που αντί να ειτουργεί µε το σύστηµα αρχείων του.σ., αυτό ειτουργεί αποκ ειστικά µε modules του PM. Σκεφτείτε όµω τώρα, πω θα φτιάξουµε ένα vfs module για την παρουσίαση των στοιχείων του κάθε χρήστη έτσι όπω αυτά αναφέρονται στο /etc/passwd.

7 ARQ ES TOU PM 15 Το συγκεκριµένο module, αν και όχι ακριβώ το ίδιο, υπάρχει στα παραδείγµατα και µπορείτε να το δείτε να ειτουργεί µέσω του vfssh. Εχουµε τα παρακάτω στοιχεία από τα κ ασσικά αρχεία του Unix (todo: passwd structure, groups) Τώρα πρέπει να φανταστούµε πω θα θέ αµε να υπάρχουν σε µορφή αρχείων. ογικά θα θέ αµε ένα κατά ογο για του χρήστε και ένα για τι οµάδε. Κάθε το κάθε αρχείο στον κατά ογο του χρηστών, θα πρέπει να περιέχει τα στοιχεία του χρήστη και φυσικά το όνοµά του να είναι το αντίστοιχο username. /users/ --- root --- nikos --- dimitris +--- yannis /groups/ --- root +--- users IerarqÐa eikonikoô sustămatoc Και να πω θα έπρεπε να εµφανίζεται ένα τυπικό εικονικό αρχείο. Nicholas Christopoulos Perieqìmena arqeðou /users/nikos User-ID : 501 Group-ID : 100 Home directory: /home/nikos Shell : /bin/tcsh Μπορείτε να τα δείτε αυτά µέσω του vfssh εκτε ώντα τι εντο έ ls και cat όπω ακριβώ θα κάνατε αν ήταν πραγµατικά αρχεία. Προσθέσαµε οιπόν στο PM µια βιβ ιοθήκη η οποία χτίζει ένα εικονικό σύστηµα αρχείων στην µνήµη. Το µόνο που χρειάζεται, οιπόν, να κάνει το module µα είναι να επεξεργαστεί τα στοιχεία των /etc/passwd και /etc/groups, και να τα γράψει στο εικονικό σύστηµα αρχείων, πράγµα που επιτυγχάνετε µε τι τυπικέ, file I/O, εντο έ, όπω θα κάναµε αν τα γράφαµε στο δίσκο. Από εκεί και πέρα το vfslib, η βιβ ιοθήκη αναφέραµε, ανα αµβάνει την διαχείριση του module κατά επι ογή βέβαια του προγραµµατιστή. 7 Arqèc tou PM 7.1 Logikă sqedðash Η ογική στο PM έχει µεγα ύτερη σηµασία από την δυνατότητα, διότι ο προγραµµατιστή και ο κάθε άνθρωπο βο εύεται µε τυποποιηµένε ογικέ ύσει και όχι µε ακροβατικέ δυνατότητε - προχειρότητε. Οταν ένα πράγµα είναι φτιαγµένο για να κάνει µια συγκεκριµένη ειτουργία, έτσι πρέπει να παραµείνει και όχι να προσφέρεται µέσω αυτή τη ειτουργία άσχετε δυνατότητε. Κατά την γνώµη µου, ο σωστό σχεδιασµό έχει να κάνει µε αυτό, δη αδή ο προγραµµατιστή να µην χρειάζεται να ανοίξει το βιβ ίο για να βρει πω θα κάνει τι, α ά αυτό να είναι αυτονόητο. Αν

7 ARQ ES TOU PM 16 χρειαστούν ποτέ εξτρά δυνατότητε αυτέ µπορούν να γίνουν µε µια παραπάνω συνάρτηση κατά κανόνα, αυτά τα εξτρά δεν χρειάζονται παρά µόνο σε εξαιρέσει. Το ακριβώ αντίθετο του σωστού σχεδιασµού µπορείτε να το µε ετήσετε στο Windows API, ή απ ά να διαβάσετε τον πο ύ κα ό σχο ιασµό του Σπινέ η[crqapi]. 7.2 EniaÐo interface Οταν γράφουµε κώδικα για µια εικόνα τύπου bmp, είναι αυτονόητο να απαιτούµε ο ίδιο κώδικα να ειτουργεί και για εικόνε τύπου jpeg. Οταν έχουµε µια βιβ ιοθήκη γραφικών που γράφει/διαβάζει την Video RAM, είναι αυτονόητο να απαιτούµε να διαχειρίζεται και memory bitmaps. Οταν γράφουµε και διαβάζουµε στο default file-system είναι αυτονόητο να απαιτούµε µε τον ίδιο τρόπο να διαχειριζόµαστε και memory sticks. Αυτά είναι από τα π έον τυπικά παραδείγµατα που ανα αµβάνει το PM να ύσει. Οµω δεν σταµατά εδώ, α ά επεκτείνετε στο ότι εφόσον κάτι µπορεί να δοµηθεί µε την κ ασσική ιεραρχική δοµή των συστηµάτων αρχείων τότε είναι αυτονόητο ότι πρέπει να ειτουργεί και έτσι µε τι ίδιε εντο έ όπω το κ ασσικό σύστηµα. Οταν έχουµε µια εικόνα είναι αυτονόητο ότι η εικόνα αυτή µπορεί να επεξεργαστεί µε την βιβ ιοθήκη γραφικών που προσφέρει το ίδιο το PM, και δεν χωρά αντιθέσει σ αυτό, εφόσον είναι εικόνα θα πρέπει να αποθηκεύεται / διαβάζεται σε / από ό ε τι µορφέ µε τον ίδιο τρόπο, εφόσον εµφανίζεται στην οθόνη µπορεί και να εκτυπωθεί και να καταγραφεί σε αρχείο. 7.2.1 OmadopoÐhsh sto PM Ποια όµω τµήµατα του ογισµικού ταιριάζουν σε τι είδου interface Το file I/O β έπετε, µπορεί να ενσωµατώσει σχεδόν τα πάντα, α ά δεν µπορεί να ικανοποιήσει ό ε τι απαιτήσει ούτε να κάνει το σύστηµα τόσο ευέ ικτο. Για παράδειγµα πω θα σχεδιάζουµε γραµµέ µε εντο έ read/write Σίγουρα µπορούµε, και µπορούµε να έχουµε ένα παραπάνω επίπεδο, που έτσι και α ιώ ήδη υπάρχει στο pml, για να χρησιµοποιούµε line αντί για write α ά δεν θα µπορούσαµε να εκµετα ευτούµε τον επιταχυντή τη κάρτα γραφικών. 1. VFS (virtual file system interface). Το αντίστοιχο module θα έπρεπε να υποστηρίζει τι file I/O εντο έ. Το interface αυτό έχει δύο επίπεδα, α) σαν αρχείο, β) σαν file system. 2. GFX (bitmap and vector graphics interface). Το αντίστοιχο module θα έπρεπε να υποστηρίζει εγγραφή και ανάγνωση pixels. 3. SND (sound interface). Το αντίστοιχο module θα έπρεπε να υποστηρίζει εγγραφή και ανάγνωση wave. 4. PTD (pointing devices interface). Το αντίστοιχο module θα έπρεπε να υποστηρίζει θέση και κατάσταση π ήκτρων. 5. KBD (keyboard interface). Το αντίστοιχο module θα έπρεπε να υποστηρίζει π ήκτρα-χαρακτήρε και συνδυασµού αυτών. 7.3 EniaÐo trìpoc metaforĺc dedomènwn Το ενιαίο interface δεν ύνει όµω ό α τα προβ ήµατα. Αν υποθέσουµε ότι έχουµε µια εικόνα σε µορφή png και θέ ουµε να την µετατρέψουµε σε µορφή jpeg, θα πρέπει αυτά τα δύο να συνεργάζονται, πράγµα που σηµαίνει ότι χρειαζόµαστε και ενιαία µορφή δεδοµένων. Για παράδειγµα ό ε οι εικόνε που επιστρέφονται ή στέ νονται στα modules είναι απαραίτητο να έχουν συγκεκριµένη µορφή, και αυτή καθορίστηκε να είναι όπω στην Video RAM α ά µε προκαθορισµένο

8 ETOIMA PARADE IGMATA 17 header που αναφέρει την ανά υση και το βάθο χρώµατο. Ετσι ό α τα σχετικά µε γραφικά modules ή βιβ ιοθήκε ξέρουν επακριβώ µε τι και πω να εργαστούν. Αντίστοιχα και για τα διανυσµατικά γραφικά (ξέρουµε πο ύ κα ά ότι κάθε βιβ ιοθήκη έχει δικό τη ορισµό για το διάνυσµα). Αντίστοιχα και για τον ήχο. 7.4 DiaqeÐrish modules Κατ αρχήν έπρεπε να φτιαχτεί ένα σύστηµα που να φορτώνει και να ξεφορτώνει του drivers µε όσο τον δυνατό ταχύτερο τρόπο και αυτό έγινε µε την χρήση ενό daemon ( pmd ) και µια βιβ ιοθήκη ( pml ) που συνδέεται µε την εφαρµογή. Οι drivers από την ά η µετατράπηκαν σε shared libraries (dynamic linked libraries) γι αυτό και αποκα ούνται modules. Για ό α τα modules θα έπρεπε να ισχύουν και συγκεκριµένοι κανόνε, όπω 1. Οι drivers να φορτώνονται και να ξεφορτώνονται δυναµικά ανά ογα µε τα κέφια τη εφαρµογή. 2. Οι drivers να µπορούν να ορίζονται και εξωτερικά, από τον χρήστη. η αδή αν ο χρήστη θα ήθε ε η έξοδο µια εφαρµογή αντί για την οθόνη να είναι το jpeg driver αυτό να είναι δυνατό να γίνει. 3. Ο ε οι εικόνε που στέ νονται ή επιστρέφουν από ένα driver να είναι πάντα µε συγκεκριµένη µορφή και µά ιστα µε την π έον απ ή. Αυτό επιτρέπει την µετακίνηση και επεξεργασία των δεδοµένων από κοινό κώδικα. 4. Ο α τα δεδοµένα ήχου που στέ νονται ή επιστρέφουν από ένα driver να είναι πάντα µε συγκεκριµένη µορφή και µά ιστα µε την π έον απ ή. Το PM έχει και ά α πράγµατα καθώ και υποστηρίζει ειτουργία ανά έκδοση του κάθε interface (όπου το module αναφέρει ποια έκδοση και τι interface υποστηρίζει) καθώ και δικτυακή επικοινωνία κ.α. εν θα επεκταθούµε όµω σε αυτά, θέ ουµε εδώ να δώσουµε την φι οσοφία του έργου και όχι τον ανα υτικό σχεδιασµό του. 7.5 Autìmath sumplărwsh sunartăsewn twn modules Πο ά πράγµατα που πρέπει να απαιτούνται από το interface µπορούν να αντικατασταθούν από κοινότυπο κώδικα. Για παράδειγµα η γραµµή στα γραφικά. εν χρειάζεται κάθε GFX module να περιέχει τον α γόριθµο αυτό, παρά µόνο αν υποστηρίζει κάποιον επιταχυντή. Ά ο ένα παράδειγµα είναι το fgets() στο VFS, το οποίο υ οποιήται µε κ ήσει στην αντίστοιχη read(), είναι όµω απαραίτητο να υποστηρίζεται από το VFS interface. Σ αυτέ τι περιπτώσει το PM ανα αµβάνει να συµπ ηρώσει αυτέ τι συναρτήσει αν αυτέ δεν έχουν οριστεί µέσα στο module. ογικό είναι να περιµένουµε ειδικά από τα γραφικά σε κάποιε περιπτώσει το module να περιέχει µόνο τι getpixel / putpixel ενώ σε ά ε να θέ ει να αντικαταστήσει το µεγα ύτερο µέρο τη βιβ ιοθήκη γραφικών. 8 Etoima paradeðgmata 8.1 vfstest Το ακό ουθο πρόγραµµα είναι µια τυπική εφαρµογή που χειρίζεται VFS modules. εν κάνει τίποτα παραπάνω από το να φορτώνει το αντίστοιχο module που παίρνει σαν παράµετρο και να τυπώνει τα

8 ETOIMA PARADE IGMATA 18 περιεχόµενα ενό από τα εικονικά αρχεία. Το module-key και το όνοµα του αρχείου δίδονται από τον χρήστη σαν παράµετρο από την κονσό α. 1 // vfstest.c 2 #include <pm_app.h> 3 4 int main(int argc, char *argv[]) 5 { 6 int handle; 7 pm_vfs_module *m; 8 9 pm_init(); // initialize PM 10 11 if ( argc!= 3 ) // arguments 12 panic("usage: vfstest module-key open-file"); 13 14 // load the module 15 if ( (m = pm_vfs_load(argv[1])) == NULL ) 16 panic("can t load the %s module", argv[1]); 17 18 // open the "file" 19 if ( (handle = m->open(m->mid, argv[2], 0)) == -1 ) 20 panic("can t open the %s file", argv[2]); 21 22 // display theirs contents 23 while ( m->gets(m->mid, handle, buf, 256) ) 24 printf("%s", buf); 25 26 m->close(m->mid, handle); // close "file" 27 pm_vfs_release(m); // unload the module 28 return 0; 29 } Μπορούµε τώρα να δούµε εύκο α µερικέ από τι δυνατότητε του PM. Θα προτιµούσαµε να είσαστε συνδεδεµένο σαν διαχειριστή (root) διότι ορισµένα modules-παραδείγµατα έχουν φτιαχτεί για να ειτουργούν µε π ήρη δικαιώµατα στο σύστηµα. ParĹdeigma 1 Χρησιµοποιήστε το vfstest για να δείτε την ώρα από ένα τοπικό ή εξωτερικό (internet) διακο- µιστή. # vfstest vfs/telnet localhost:13 Αν η σύνδεση αποτύχει, αυτό σηµαίνει ότι δεν έχετε ενεργοποιήσει το timegen service στο σύστηµά σα. Φορτώστε µε ένα editor το αρχείο /etc/inetd.conf και βγά τε το # από την γραµµή του timegen. αναφορτώστε το inetd και προσπαθήστε ξανά. ParĹdeigma 2 Χρησιµοποιήστε το vfstest για να συνδεθήτε µέσω σειριακή πόρτα µε ένα ά ο µηχάνηµα. # vfstest vfs/serial /dev/ttys1:57600 Στο Palm µου, το δοκίµασα τρέχοντα το πρόγραµµα sertest.bas που είναι παράδειγµα τη SB και... έστει α χαρακτήρε στο PC. Αν το δοκιµάσετε θυµηθήτε ότι το vfstest µόνο διαβάζει δεδοµένα άρα το πρόγραµµα που θα συνδεθεί (π.χ. Minicom, Telix, Procomm, Hyperterminal) θα πρέπει να αποστέ ει δεδοµένα (π ήκτρα που πατάτε).

9 JEWRHTIK A PARADE IGMATA 19 ParĹdeigma 3 Χρησιµοποιήστε το vfstest για να πάρετε τα στοιχεία ενό χρήστη. # vfstest vfs/users users/root Π ηροφορίε, όπω το home directory και το επι εγµένο shell του χρήστη root θα πρέπει να εµφανιστούν στην κονσό α σα. 8.2 SunodeutikĹ paradeðgmata ` efarmogèc Από το CVS µπορείτε να κατεβάσετε περισσότερα παραδείγµατα. Τα παραδείγµατα αυτά βρίσκονται στον κατά ογο apps....( ίστα και µια περιγραφή)... 8.3 SunodeutikĹ paradeðgmata ` modules...( ίστα και µια περιγραφή)... 9 JewrhtikĹ paradeðgmata Προσωρινά τα ονοµάζουµε θεωρητικά διότι απ ούστατα δεν έχουµε κάτσει ακόµα να τα φτιάξουµε. η αδή δεν έχουµε αµφιβο ία ότι µπορούµε, απ ά δεν το έχουµε κάνει ακόµα. 9.1 Enac e-mail client pou leitourgeð san sôsthma arqeðwn... 9.2 Ena pantodônamo ergaleðo me lðgo kÿdika... Anaforèc [Bazaar] The Cathedral and the Bazaar, Eric S. Raymond, 1998/08/11 20:27:29 [CrqAPI] A Critique of the Windows Application Programming Interface, Diomidis Spinellis, University of the Aegean, Dec. 1997 [Ε ΕΤ-Γ4] EleÔjero Logismikì / Logismikì AnoiktoÔ Kÿdika (EL/LAK) sthn EkpaÐdeush, th Dhmìsia DioÐkhsh kai stic Epiqeirăseic MikroÔ / MesaÐou Megèjouc., Οµάδα Εργασία ΟΕ Γ4, Εθνικό ίκτυο Ερευνα & Τεχνο ογία, Αθήνα, Ιαν. 2003 [LPLib] Program Library HOWTO, David A. Wheeler, LDP, ver 1.07, 30 December 2002

ANAFOR ES 20 EuqaristÐec Dhmătrio KoukorĹba kai GiĹnnh BlaqogiĹnnh Το πείσµα του ηµήτρη πάνω στο PM είχα και έχω σκοπό να µην ασχο ούµαι µε το arm0nia project α ά και η εκνευριστική επιµονή του, είναι ο όγο ύπαρξη αυτού του εγγράφου. Για τα κρασιά που κεράσανε, και για τι ιδέε που αναπτύξαµε και οι τρει από κοινού κάτω από αρκετέ ώρε αµπε οφι οσοφία (το αγαπηµένο µου σπορ).