Next Previous Contents

7. Το Fetchmail Ενηλικιώνεται.

Να μια, λοιπόν, μ' ένα καλοφτιαγμένο και νέο σχεδιασμό, μ' έναν κώδικα που ήξερα ότι επεξεργάστηκα καλά επειδή τον χρησιμοποιούσα κάθε μέρα, και μία λίστα δοκιμαστών που μεγάλωνε. Βαθμιαία άρχισα να καταλαβαίνω ότι δεν έκανα πλέον κάποιον τετριμμένο προσωπικό προγραμματισμό που ίσως να ήταν χρήσιμος για μερικούς ανθρώπους. Είχα στα χέρια μου ένα πρόγραμμα που κάθε hacker με Unix και σύνδεση SLIP/PPP χρειαζόταν στ' αλήθεια.

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

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

Ο Andrew Tanenbaum είχε την αρχική ιδέα να δημιουργήσει ένα απλό τοπικό σύστημα Unix για 386, για να το χρησιμοποιήσει σαν διδακτικό εργαλείο. Ο Linus Torvalds ώθησε την ιδέα του Minix πιο πέρα απ' τον Andrew. Με τον ίδιο τρόπο (αν και σε μικρότερη κλίμακα) πήρα μερικές ιδέες των Carl Harris και Harry Hochheiser και τις ώθησα στα άκρα. Κανείς μας δεν ήταν "γνήσια" ιδιοφυία.

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

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

Αποφάσισα να κάνω μερική προσθήκη υποστήριξης multidrop επειδή μερικοί χρήστες διαμαρτύρονταν, αλλά κυρίως επειδή νόμιζα ότι θα ξεκαθάριζε τα ελαττώματα του κώδικα single-drop αναγκάζοντάς με να ασχοληθώ εξολοκλήρου με την διαδικασία διευθυνσιοδότησης / καταχώρησης. Κι έτσι αποδείχθηκε. Πήρα το RFC 822 και η εισαγωγή αυτής της παραμέτρου στην υπορουτίνα με καθυστέρησε αρκετό χρόνο, όχι επειδή τα ξεχωριστά κομμάτια της είναι δύσκολα, αλλά επειδή ενέπλεκε ένα σωρό από αλληλοεξαρτώμενες και ιδιότροπες λεπτομέρειες.

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

14. Κάθε εργαλείο θα πρέπει να είναι χρήσιμο με κάθε αναμενόμενο τρόπο, αλλά ένα πραγματικά σπουδαίο εργαλείο προσφέρεται για χρήσεις που ποτέ δεν θα περίμενες.

Η αναπάντεχη χρήση του multidrop fetchmail είναι η δυνατότητα λειτουργίας μιας λίστας αλληλογραφίας (mailing lists) που διατηρείτε στην πλευρά του client της σύνδεσης SLIP/PPP, και ταυτόχρονα σ' αυτή έχει γίνει η επέκταση του alias. Αυτό σημαίνει ότι, κάποιος που χρησιμοποιεί έναν προσωπικό υπολογιστή, μέσω ενός λογαριασμού σε κάποιον ISP, μπορεί να χειριστεί την λίστα αλληλογραφίας χωρίς να διατηρεί συνεχώς την πρόσβασή του στα αρχεία ψευδωνύμων του ISP.

Μια άλλη ενδιαφέρουσα αλλαγή που απαίτησαν οι δοκιμαστές ήταν η υποστήριξη λειτουργίας 8-bit MIME. Αυτό ήταν εύκολο να το κάνω, επειδή είχα προσέξει να διατηρήσω τον 8-bit κώδικα καθαρό. Όχι επειδή προέβλεψα την απαίτηση γι' αυτό το χαρακτηριστικό, αλλά μάλλον υπακούοντας σε έναν άλλο κανόνα:

15. Όταν κατασκευάζεις gateway λογισμικό οποιουδήποτε είδους, προσπάθησε να αλλοιώσεις το stream των δεδομένων όσο το δυνατόν λιγότερο-και ΠΟΤΕ μην πετάς πληροφορίες αν οι παραλήπτες σου δεν σε αναγκάσουν!

Αν δεν υπάκουα σ' αυτό τον κανόνα η υποστήριξη 8-bit MIME θα ήταν δύσκολη και γεμάτη bugs. Όπως ήταν τώρα, αυτό που έπρεπε να κάνω ήταν να διαβάσω το RFC 1652 και να προσθέσω τετριμμένα bits για δημιουργία κεφαλίδων.

$Μερικοί Ευρωπαίοι χρήστες μου ζητούσαν να προσθέσω μια επιλογή περιορισμού του αριθμού των μηνυμάτων που παραλάβαιναν σε κάθε χρήση του fetchmail (ώστε να ελέγχουν τα έξοδο σύνδεσής τους στα ακριβά τηλεφωνικά δίκτυα). Αντιστάθηκα σ' αυτή την απαίτηση για αρκετό καιρό, και δεν μπορώ να πω ότι είμαι χαρούμενος γι' αυτό. Αλλά όταν γράφεις για τον κόσμο πρέπει ν' ακούς τους πελάτες σου-αυτό δεν αλλάζει επειδή δεν σε πληρώνουν με χρήματα.


Next Previous Contents