Αυτό το commit περιλαμβάνεται σε:
infl00p 2022-03-23 20:14:33 +02:00
commit 8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές

51
content/articles/25/01_editorial.md Κανονικό αρχείο

@ -0,0 +1,51 @@
+++
title = 'Editorial'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Παπαδογιαννάκης Βαγγέλης(mailto:papas@hellug.gr)'
issue = ['Magaz 25']
issue_weight = 1
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Καλώς ορίσατε στο magaz, τεύχος παραλαβής (ωχ!).*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Και νάμαι λοιπόν από αυτή τη θέση, μια θέση που φέρει ένα σωρό ευθύνες. Και αυτή δεν είναι μόνο δική μου άποψη, αλλά και του Μιχάλη. Εξάλλου, πως να μη νοιώθω
γεμάτος ευθύνες όταν στο προηγούμενο editorial ο Μιχάλης με παρουσίασε σαν τον super αρθρογράφο και linuxa και ξέρω γω τι άλλο;
Τέλος πάντων, ας μπούμε στα θέματά μας τώρα.
Σε αυτό το τεύχος έχουμε ένα άρθρο από τον [DJ Art](mailto:djart@hellug.gr) που αποτελεί μετάφαση του **the html hell page** (
<http://www.tuxedo.org/~esr/html-hell.html> ) του [Eric S. Raymond](mailto:esr@thyrsus.com) , και το οποίο είμαι σίγουρος ότι πολλοί θα έπρεπε να το διαβάσουν
και να αναθεωρήσουν τις απόψεις τους περί html design.
Επίσης, διαβάστε τη συνέχεια για την **xbasic**, ένα άρθρο του [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr). Αν έχετε παραλείψει να διαβάσετε στο προηγούμενο
τεύχος το άρθρο για την xbasic διαβάστε το [εδώ](/24/02_xbasic.html).
Σε αυτό το τεύχος, επίσης, έχουμε μια από τις μεγαλύτερες δημοσιογραφικές επιτυχίες στον ηλεκτρονικό τύπο για τα δεδομένα της Ελλάδας :) Αναφέρομαι στην
συνέντευξη που ο παλιός αρχισυντάκτης του **magaz** [Καμπριάνης Μιχάλης](mailto:kabrianis@hellug.gr) πήρε από τον πρόεδρο του OSI (Open Source Initative), τον
Eric Raymond ( <http://www.tuxedo.org/~esr/> )
Ένα άρθρο από τον παλιό (και μη εξαιρετέο) αρθρογράφο μας, τον [Θρασύβουλο Κοτσιφάκη](mailto:tkots@SoftHome.net)), που μετά από ένα πολύ μεγάλο ταξίδι επέστρεψε
στα πάτρια εδάφη (Χανιά) και φυσικά δε μας ξέχασε εμάς εδώ στο **magaz** :). Το άρθρο καταπιάνεται με μια σουίτα πρωτοκόλλων που όλα μαζί απαρτίζουν το γνωστό
σε όλους μας TCP/IP (**Transfer Control Protocol/Internet Protocol**). Όπως είναι αυτονόητο, δεν αναφέρεται αποκλειστικά σε linux, μια και το TCP/IP είναι το
πιο διαδεδομένο στον κόσμο και χρησιμοποιείται από όλα τα λειτουργικά. Είναι πάντως μια φοβερά καλή εισαγωγή στον κόσμο των πρωτοκόλλων, και οι αρχάριοι θα το
εκτιμήσουν πολύ, αφού εξηγεί με απλά λόγια τα κυριότερα χαρακτηριστικά του TCP/IP.
Να συμπληρώσω επίσης ότι πλέον κυκλοφορεί ένα έντυπο περιοδικό στο χώρο του linux, το **dilima** (dilima is a linux magazine, κλασική περίπτωση κυκλικής
αναφοράς). Και εκεί και εδώ, στο **magaz**, πολλοί από τους αρθρογράφους είναι ίδιοι. Σε καμία περίπτωση δεν είμαστε ανταγωνιστές (μια και κάτι τέτοιο θα με
έκανε αντίπαλο με τον εαυτό μου, και δόξα το Θεό, τέτοιου είδους ανησυχίες δεν έχω), και αυτό να σημειωθεί γιατί δε γουστάρουμε να δημιουργηθούν αντιπαλότητες
κ.λπ. Αυτό που είναι σίγουρο είναι ότι εμείς (ως magaz) δεν απειλούμαστε από κανένα, και φυσικά το **dilima** δεν απειλείται από εμάς. Όσοι είναι να διαβάσουν
το **magaz** θα το διαβάσουν σίγουρα γιατί και τζαμπέ είναι, και ότι ώρα γουστάρεις το βρίσκεις, και διαφημίσεις δεν έχει, και δεν πιάνει και χώρο στο γραφείο.
Από την άλλη, όποιος γουστάρει να πάρει το **dilima** θα το πάρει γιατί μπορεί να μη γουστάρει να είναι online ή μπορεί να το θέλει τυπωμένο, ή να έχει κάποιο
άλλο λόγο. Άντε τώρα\... (α, και αν δεν βλέπετε στην λέξη\`\`Άντε\'\' το Α το τονούμενο, γυρίστε την κωδικοσελίδα σας σε iso8859-7. ΚΑΙ ΚΑΝΤΕ ΤΗ DEFAULT!!!)
Η **ψηφοφορία** αυτού του τεύχους, αναφέρεται στη μορφή του **magaz**. Μην ξεχάσετε να [ψηφίσετε](/cgi-bin/poll25.cgi) για να μπορέσουμε να βελτιώσουμε (όσο
μπορούμε και εμείς) το περιεχόμενο του περιοδικού ώστε να ανταποκρίνεται στις \`\`αναγνωστικές\'\' σας ανάγκες :)
Τέλος, θα ήθελα να ξέρετε ότι εγώ σαν Βαγγέλης από τη θέση του αρχισυντάκτη θα κάνω ότι περνάει από το χέρι μου ώστε αυτό το **e-zine** που με τόσο κόπο
καταφέραμε να στήσουμε να συνεχίσει την καλή του παρουσία, και να συνεχίζει να αποτελεί πηγή πληροφόρησης για τους χρήστες του Linux στην Ελλάδα.
Καλή ανάγνωση, και μην ξεχνάτε, μπορείτε να κατεβάσετε όλο το τεύχος πατώντας [εδώ](/files/magaz.25.tgz)

213
content/articles/25/02_tcpip.md Κανονικό αρχείο

@ -0,0 +1,213 @@
+++
title = 'TRANSMISSION CONTROL PROTOCOL / INTERNET PROTOCOL'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Κοτσιφάκης Θρασύβουλος'
issue = ['Magaz 25']
issue_weight = 2
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Επιστροφή μετά από πολύ καιρό στα παλιά καλά λημέρια.Αν και ο χρόνος μου λίγος θα επιχειρήσω να σας μυήσω λιγάκι στις βασικές έννοιες των δικτύων και της πιο
διαδεδομένης σε εμάς συλλογής πρωτοκόλλων το **TCP/IP***
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Τι είναι δίκτυο και τι είναι το TCP/IP;**
----------------------------------------------------------------------
- [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !](#ss1.1)
**2. Τα χαρακτηριστικά του TCP/IP**
-----------------------------------------------------------
- [2.1 Logical Addressing.](#ss2.1)
- [2.2 Routing](#ss2.2)
- [2.3 Name Resolution](#ss2.3)
- [2.4 Error Checking / Flow Control](#ss2.4)
- [2.5 Application Support](#ss2.5)
**3. Τα Utilities του TCP/IP**
------------------------------------------------------
- [3.1 ftp](#ss3.1)
- [3.2 lpr](#ss3.2)
- [3.3 ping](#ss3.3)
- [3.4 telnet](#ss3.4)
- [3.5 traceroute](#ss3.5)
### [1. Τι είναι δίκτυο και τι είναι το TCP/IP;]{#s1}
**Δίκτυο** είναι το σύνολο από υπολογιστές και συσκευές που ομοιάζουν με υπολογιστή, τα οποία επικοινωνούν μεταξύ τους μέσω ενός μέσου μεταφοράς των δεδομένων.
Αυτό το μέσο μεταφοράς μπορεί να είναι καλώδιο, η τηλεφωνική μας γραμμή ή κάποιο άλλο π.χ. κάποιος ασύρματος μεταδότης.
Σε ένα δίκτυο ο κάθε υπολογιστής πρέπει να είναι ικανός να επικοινωνεί με τους υπόλοιπους και μάλιστα αμφίδρομα, δηλαδή να δύναται να διοχετεύσει πληροφορίες
αλλά και να λάβει. Για να γίνει τώρα αυτό θα πρέπει να οριστούν εξ αρχής ο τρόπος επικοινωνίας του με το υπόλοιπο δίκτυο. Θα πρέπει δηλαδή να οριστούν κάποιοι
κανόνες για την ασφαλή και απρόσκοπτη μεταφορά των δεδομένων.
Οι συσκευές σε ένα δίκτυο δεν είναι απαραίτητο (αλλά ούτε και εφικτό πολλές φορές) να ακολουθούν τα ίδια πρότυπα ως μεμονωμένοι σταθμοί εργασίας (workstations),
δηλαδή δεν είναι απαραίτητο να εκτελούν τις εντολές κάτω από το ίδιο λειτουργικό σύστημα ή να χρησιμοποιούν το ίδιο Hardware. Για τα παραπάνω όπως καταλαβαίνετε
είμαστε αναγκασμένοι να ορίσουμε κάποια standards έτσι ώστε οι ανόμοιες αυτές συσκευές να μπορούν να συνεργάζονται αρμονικά και να εκτελούν τις αιτήσεις μας σε
συνεργασία με τις υπόλοιπες συσκευές που σχηματίζουν το δίκτυο.
Ας ορίσουμε τώρα το **TCP/IP**. Όλοι περιγράφουμε το TCP/IP σαν ένα πρωτόκολο, αυτό δεν είναι απόλυτα σωστό. Στην πραγματικότητα είναι μία ολόκληρη σουίτα από
πρωτόκολα η οποία έχει σαν βασικό της ρόλο να βοηθήσει την ομαλή συνύπαρξη των συσκευών που βρίσκονται συνδεδεμενες μεταξύ τους και επιπλέον να ορίσει τους
κανόνες που θα ισχύουν κατά την επικοινωνία των συσκευών ετσι ώστε η πληροφορία που θα περνάει από τη μία συσκευή στην άλλη να μεταφράζεται σωστά.
### [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !]{#ss1.1}
- **LAN**:(**L**ocal **A**rea **N**etwork) Είναι μία ομάδα υπολογιστών και σχετικών συσκευών οι οποίες είναι συνδεδεμένες μεταξύ τους, επικοινωνούν και
μπορούν να ανταλλάσουν πληροφορίες ή πόρους του δικτύου (π.χ. εκτυπωτές που μπορεί να είναι συνδεδεμένοι επάνω στο δίκτυο)
- **WAN**:(**W**ide **A**rea **N**etwork) Είναι τα δίκτυα τα οποία συνδέουν χρήστες μεταξύ μεγάλων αποστάσεων οι οποίες πολλές φορές ξεπερνούν τα γεωγραφικά
όρια των χωρών. Το Internet π.χ. είναι ένα WAN.
- **MAN**:(**M**etropolitan **A**rea **N**etwork) Είναι δίκτυα υψηλής ταχύτητας τα οποία περιορίζονται σε υπολογιστές οι οποίοι είναι συνδεδεμένοι σε
αποστάσεις όχι μεγαλύτερες από 80 χιλιόμετρα.
- **ETHERNET**: Είναι ένας ευρέως διαδεδομένος τρόπος διασύνδεσης μεταξύ υπολογιστών το οποίο χρησιμοποιεί ως μέσο μεταφοράς το καλώδιο (ομοαξωνικό twisted
pair ή οπτική ίνα) και μια κάρτα η οποία αναλαμβάνει τον ρόλο της διασύνδεσης και ορθής μεταφοράς των πακέτων δεδομενων που αποστέλλονται ανάμεσα στους
υπολογιστές και τις συσκευές του δικτύου.
### [2. Τα χαρακτηριστικά του TCP/IP]{#s2}
Το TCP/IP έχει ορισμένα ενδιαφέροντα χαρακτηριστικά τα οποία χρησιμοποιεί για να παρακάμπτει προβλήματα που προκύπτουν στα δίκτυα. Ας εξετάσουμε όμως διεξοδικά
πια είναι αυτά τα προβλήματα και να δούμε πως το TCP/IP αναλαμβάνει να τα επιλύσει.
### [2.1 Logical Addressing.]{#ss2.1}
Κάθε κάρτα δικτύου από κατασκευής δια8έτει μία μοναδική και μόνιμη φυσική διεύθυνση (physical address). Σε μικρά δίκτυα η παράδοση των δεδομένων γίνεται με βάση
αυτή την φυσική διεύθυνση. Π.χ. σε τοπικά δίκτυα τύπου ethernet ένας υπολογιστής μεταδίδει τα δεδομένα κατευθείαν στο μέσο μεταφοράς (καλώδιο). Κάθε υπολογιστής
που βρίσκεται στο συγκεκριμένο δίκτυο παρακολουθεί όλες τις μεταδώσεις και επιλέγει να κρατήσει τα δεδομένα που έχουν διεύθυνση την φυσική διεύθυνση της κάρτας
δικτύου που βρίσκεται εγκατεστημένη σ\' αυτόν. Σε μεγαλύτερα δίκτυα φανταστείτε τι θα γινόταν αν κάθε υπολογιστής παρακολουθούσε όλα τα πακέττα δεδομένων που
αποστέλλονται μέσω του μέσου μεταφοράς.
Στα μεγάλα δίκτυα για αποφύγουμε την διαρκή παραλαβή άχρηστων δεδομένων τα χωρίζουμε σε άλλα μικρότερα υποδίκτυα (subnetworks) τα οποία κάτω απο μία ιεραρχική
σχεδίαση και δομή μπορούν να παρακολουθούν τις αποστολές και να επιλέγουν τα πακέττα δεδομένων που προορίζονται για τις συσκευές που τα αποτελούν.
Για να επιτύχουμε την παραπάνω λειτουργία τα υποδίκτυα θα πρέπει να έχουν διευθύνσεις που να τα χαρακτηρίζουν για να γίνονται αναγνωρίσιμα. Η διευθυνσεις αυτές
περέχονται από το λογισμικό και στην προκυμένη περίπτωση από το TCP/IP και ονομάζονται λογικές διευθύνσεις (logical address).Στο TCP/IP οι συγκεκριμένες
διευθύνσεις λέγονται IP adresses.Η διεύθυνση IP τωρα με την σειρά της μπορεί να περιέχει:
- Την ταυτότητα ενός δικτύου.
- Την ταυτότητα ενός υποδικτύου.
- Την ταυτότητα ενός υπολογιστή μέσα σε ένα υποδίκτυο.
Οι ταυτότητες που αναφέρουμε παραπάνω, ουσιαστικά αντιστοιχούν σε συνδυασμούς αριθμών που χαρακτηρίζουν και την κλάση του δικτύου.Ανάλογα με το είδος δικτύου
που έχουμε, έχουμε και την αντίστοιχη κλάση. Εν περιλήψει οι βασικότερες:
- **Κλάση A**: Εδώ οι ταυτότητες είναι 8-bit για τα δίκτυα και 24-bit για τους κεντρικούς υπολογιστές σ\'αυτά. Τέτοιοι αριθμοί αποδίδονται σε οργανισμούς,
εταιρείες ή χώρες δηλαδή σε περιπτώσεις που απαιτούνται μεγάλος αριθμός διευθύνσεων IP αφού θεωρητικά τα δίκτυα κλάσης A μπορούν να υποστηρίξουν περίπου
16.7 εκατομμύρια υπολογιστές.
- **Κλάση Β**: Εδώ η ταυτότητες τών δικτύων και των κεντρικών υπολογιστών είναι 16-bit. Οι διευθύνσεις αποδίδονται σε δίκτυα μεσαίου μεγέθους και είναι ικανές
να υποστηρίξουν την αναγνώριση μέχρι 65.5 χιλιάδων υπολογιστών περίπου.
- **Κλάση C**: Στην τρίτη κλάση οι ταυτότητες του δικτύου είναι 24-bit και των υπολογιστών 8-bit. Mε αυτόν τον τρόπο αποδιδουμε διευθύνσεις σε μικρά δίκτυα με
έως 254 υπολογιστές.
- **Κλάση D**: Οι διευθύνσεις εδώ δεν αποδίδονται σε υπολογιστές αλλά χρησιμοποιούνται για multicasting δηλαδή σε περιπτώσεις που θέλουμε να ορίσουμε ομάδες
υπολογιστών σε ένα δίκτυο που θα πρέπει να τους αποσταλλεί ένα συγκεκριμένο πακέττο δεδομένων ταυτόχρονα.
### [2.2 Routing]{#ss2.2}
Πιο πάνω είπαμε ότι μπορούμε να χωρίσουμε ένα δίκτυο σε άλλα μικρότερα και να αποδόσουμε λογικές διευθύνσεις σε αυτά.Πως όμως αποκόπτουμε τα άχρηστα πακέττα και
πως όμως το μικρότερο αυτό δίκτυο 8α αντιληφθεί ότι κάποιο πακέττο δεδομένων απευθύνεται σε αυτό;Η τεχνική λέγεται routing και οι συσκευές που αναλαμβάνουν την
αναγνώριση των πακέττων routers.
Με απλά λόγια ένας router διαχωρίζει το subnet από το υπόλοιπο δίκτυο και δεν επιτρέπει να περάσουν πληροφορίες στο σύνολο οι οποίες είναι άχρηστες. Πληροφορίες
οι οποίες αφορούν τους υπολογιστές του υποδικτύου και κατευθύνονται από υπολογιστή μέσα σε αυτό σταματούν στον router και δεν βγαίνουν προς τα έξω. Οι
πληροφορίες πάλι που απευθύνονται σε υπολογιστές εκτός του subnet ο router τις προω8εί εκτός. Γενικά ο τρόπος πού λειτουργεί ένας router είναι ο εξής:
- Παραλαμβάνει τα δεδομένα από ένα από τα προσαρτιμένα σε αυτό δίκτυα
- Ελέγχει τον προορισμό του πακέττου. Αν το πακέττο έχει προορισμό συσκευή μέσα στο δίκτυο από το οποίο απεστάλλει τότε το απορρίπτει αφού αυτό έχει φθάσει
ήδη στον προορισμό του.
- Αν το πακέττο κατευθύνεται σε συσκευή έξω από το δίκτυο απ\' όπου προέρχεται τότε ο router συμβουλεύεται εναν πίνακα που ονομάζεται routing table έτσι ώστε
να δει που θα προωθήσει το πακέττο
- Αφού βρεθεί που θα προωθηθεί το πακέττο ο router αναλαμβάνει την αποστολή του μέσω του λεγόμενου NETWORK ACCESS LAYER software
Το TCP/IP περιέχει πρωτόκολλα τα οποία καθορίζουν πως ένας router θα βρει διαδρομή για να κατευθύνει τα πακέττα στον προορισμό τους. Αυτά είναι τα: a)**Routing
Information Protocol (RIP)** Το οποίο είναι το παλαιότερο routing protocol. Με απλά λόγια οι routers στέλνουν πληροφορίες γι\' αυτούς και επίσης αποστέλλουν το
λεγόμενο **hop count** δηλαδή πληροφορία σχετικά με το πόσο απομακρισμένοι είναι. Με αυτόν τον τρόπο οι routers μεταξύ τους γνωρίζουν ποιοι απ\' αυτούς είναι
διαθέσιμοι και να εκτιμήσουν την συντομότερη διαδρομή για να αποστείλουν το πακέττο στον προορισμό τους.b)**Open Shortest Path First (OSPF)** είναι νεότερο
πρωτόκολλο το οποίο σταδιακά πέρνει την θέση του RIP. Η μεγάλη διαφορά του από το RIP είναι ότι εδώ οι Proxies δεν χρειάζεται να κάνουν υπολογισμό του hop απλά
αποστέλλουν πληροφορίεσ σχετικά με την κατάσταση τους στους proxies που βρίσκονται απ\' ευ8είας συνδεδεμένοι μαζί τους. Με αυτόν τον τρόπο μειώνεται το συνολικό
bandwidth που 8α πρέπει να δεσμευ8εί για την αποστολή πληροφοριών. Ως αποτέλεσμα τι OSPF μπορεί να υποστηρίξει δίκτυα μεγάλα σε όγκο και ανάγκες.
### [2.3 Name Resolution]{#ss2.3}
Φανταστείτε να σας έλεγαν 111.121.131.156 και την φίλη σας 111.121.131.158, μπέρδεμά έ; Ναι έχετε δίκιο. Καλοί οι αριθμούλιδες αλλά εμείς έχουμε μάθει να
αναγνωρίζουμε τους άλλους από το όνομα τους και όχι από τον αριθμό της ταυτότητας τους. Για να μας κάνει την ζωή πιο εύκολη λοιπόν το TCP/IP χρησιμοποιει εν
παραλλήλω με τα IP numbers και ένα πιο ανθρωπινο τρόπο για να αναγνωρίζεται ο αποστολέας και ο παραλήπτης ενός πακέττου τα ονόματα αυτά λέγονται **domain
names** και η υπηρεσία **Domain Name Service**.Με αυτόν τον τρόπο δεν χρειάζεται να γνωρίζουμε το IP number κάποιου υπολογιστή σε ένα δίκτυο αλλά μόνο το όνομα
του.Έτσι για να αποστείλουμε π.χ. ένα email στην αγαπημένη μας δεν χρειάζεται να ξέρουμε το IP number του mail server που της έχει παραχωρίσει χώρο αλλά μόνο το
domain name που συνή8ως είναι όνομα της μορφής \"companyname.com\" του και φυσικά το όνομα που χρησιμοποιεί αυτή σαν αναγνωριστικό.
Πως γίνεται τώρα και τα domain names μεταφράζονται σε IP numbers; Με απλά λόγια υπάρχουν κάποιοι εξυπηρετητές οι οποίοι αναλλαμβάνουν την αποθήκευση των domain
names και την αποκωδικοποίηση τους σε IP numbers. Αν θέλετε τώρα να δείτε πως περίπου γίνεται το name servicing ρίξτε μια ματιά στο **/etc/hosts** του κουτιού
σας για να δείτε με ποια σύνταξη ορίζονται domain names σε IP names.
### [2.4 Error Checking / Flow Control]{#ss2.4}
Κατά την μεταφορά αρχείων είναι λογικό ότι δεν πάνε πάντα τα πράγματα όπως τα θέλουμε. Λάθη κατά την μεταφορά ή πακέττα δεδομένων που για κάποιο λόγο δεν
παρελήφθησαν ακέραια είναι συχνό φαινόμενο. Γι αυτόν τον λόγο οι σχεδιαστές του TCP/IP φρόντισαν να του ενσωματώσουν διαδικασίες οι οποίες ελέγχουν την χωρίς
λάθη παραλαβή ενός πακέττου και την αποστολη του στον σωστό παραλήπτη. Οι διαδικασίες αυτές ενσώματωνονται στο ονομαζόμενο **Transport Layer** του TCP/IP.
### [2.5 Application Support]{#ss2.5}
Σε όλους είνα γνωστό ότι για να αποκτήσουμε πρόσβαση στο δίκτυο χρησιμοποιούμε εφαρμογές οι οποίες ουσιαστικά με τρόπο «αδιαφανή» μας παρέχουν την πρόσβαση αλλά
και τις ζητούμενες υπηρεσίες. Δηλαδή δεν χρειάζεται π.χ. να γνωρίζουμε τι είναι το SMTP για να στείλουμε ένα email.
Το TCP/IP αναλαμβάνει την παροχή ενός interface για τις εφαρμογές μας έτσι ώστε αυτές να μπορούν να έχουν πρόσβαση στο λογισμικό του δικτύου και να διευκολύνει
την προσπέλαση στο δίκτυο. Για να γίνει αυτό, η σουίτα χρησιμοποιεί ένα σύστημα από \"λογικά κανάλια\" τα οποία ονομάζονται **ports**. Κάθε port διαθέτει ένα
port number το οποίο χρησιμοποιείται για την αναγνώριση της port και ουσιαστικά και για την αναγνώριση της εργασίας που καλείτε να εκτελέσει. Με απλά λόγια (και
λίγη φαντασία) τα ports είναι αυλοί επικοινωνίας που μέσα τους κυκλοφορούν τα δεδομένα και οι αιτήσεις από την αφαρμογή προς το δίκτυο.
Το ίδιο το TCP/IP περιέχει μερικές εφαρμογές οι οποίες χρησιμοποιούνται για να διευκολύνουν τις διάφορες διαδικασίες. Αυτές οι εφαρμογές είναι οι γνωστές στους
περισσότερους **ftp lpr ping telnet** και **traceroute** των οποίων την χρησιμότητα θα εξηγήσουμε παρακάτω.
### [3. Τα Utilities του TCP/IP]{#s3}
### [3.1 ftp]{#ss3.1}
Το ftp είναι εφαρμογή (ουσιαστικά ένα κέλυφος εργασίας) η οποία χρησιμοποιεί το **File Transfer Protocol** για την μεταφορά αρχείων από και προς έναν υπολογιστή
ο οπoίος παίζει τον ρόλο του ftp server. Με την εντολή ftp εκκινούμε την εφαρμογή client η οποία μας παρέχει το περιβάλλον για να συνδεθούμε και να εργαστούμε
με υπολογιστές οι οποίοι τρέχουν τον λεγόμενο **ftp daemon** ο οποίος είναι μία εφαρμογή που τρέχει σε έναν ftp server στο παρασκήνιο και όταν της ζητη8εί από
τον client κάποιου υπολογιστή στο δίκτυο, αναλαμβάνει την διεκπεραιρέωση της αιτήσεως.
Η εκκίνηση της ftp μπορεί να γίνει είτε δίδοντας την εντολή σκέτη ή προσθέτοντας το **IP adress** ή το **domain name** του εξυπηρετητή που θέλουμε να
συνδεθούμε. Μπορούμε επίσης να προσθέσουμε παραμέτρους οι οποίοι να καθορίζουν τον τρόπο και το είδος της σύνδεσης που θέλουμε να πετύχουμε. Μία ματιά στην
**man page** της ftp θα σας κατατοπίσει καλύτερα για το ποιες παράμετροι μπορούν να σας φανούν χρήσιμες.
Αφού επιτύχουμε την σύνδεση με το ftp site που μας ενδιαφέρει μία σειρά εντολών μπορεί να δωθεί για την εργασία μας. Πολλές απ\' αυτές είναι ήδη γνωστές από την
εργασία μας στα linux shells **(pwd mkdir cd chmod)**.
### [3.2 lpr]{#ss3.2}
Είναι εντολή η οποία χρησιμοποιείται για την δρομολόγιση και μορφοποίηση αιτήσεων προς έναν εκτυπωτή. Όταν υπάρχουν πολύ εκτυπωτές πάνω στο δίκτυο η lpr μπορεί
να εκτελεστεί με την παράμετρο **-P** και το όνομα του εκτυπωτή που θέλουμε να μας εξυπηρετήσει. Επίσης μια πλιάδα από παραμέτρους μπορούν να χρησιμοποιηθούν
για ικανοποιητικότερη χρήση της.
### [3.3 ping]{#ss3.3}
Utility το οποίο χρησιμοποιείται ως διαγνωστικό. Όταν εκτελέσουμε την εντολή ping domainname τότε αποστέλλουμε ένα διαγνωστικό πακέττο κάτω από το **ICMP
protocol** (Internet Control Message Protocol) αιτώντας ταυτόχρονα απάντηση **(ICMP echo)** από τον παραλήπτη. Η ping έχει σχεδιασθεί έτσι ώστε να βοηθά τον
έλεγχο, την αποσφαλμάτωση, και μέτρηση της ανταπόκρισης μεταξύ δύο υπολογιστών σε ένα δίκτυο.Όταν παραλειφθεί το ICMP echo από τον υπολογιστή που εκτελέσαμε την
ping, μας εμφανίζεται στην οθόνη το μέγεθος του πακέττου που απεστάλλει (56bytes για το linux) ο χρόνος σε milliseconds ο οποίος χρειάστηκε για να αποσταλλεί
και να επιστρέψει όπως επίσης και το **TTL** (Time To Live), δηλαδή μία τιμή η οποία μας δείχνει πόσους επιπλεόν routers μπορούσε το πακέττο να περάσει μέχρι να
απορριφθεί. Αν το ποσό που επιστρέφει ως ένδειξη στην TTL είναι κοντά στο μηδέν (1,2 κλπ) τότε θα πρέπει να υποψιαστούμε ότι σφάλματα στο δίκτυο.
### [3.4 telnet]{#ss3.4}
Το telnet είναι κέλυφος εργασίας το οποίο ενσωματώνει διάφορες λειτουργίες για την εργασία μεταξύ δύο υπολογιστών εκ των οποίων ο ένας εκτελεί χρέη εξυπηρετητή
τρέχοντας τον **telnet daemon**. Το telnet επίσης είναι και αυτόνομο πρωτόκολλο επικοινωνίας. Σκοπός του telnet είναι να μας παρέχει ένα περιβάλλον εργασίας
όπου οι εντολές που εμείς πληκτρολογούμε να περνούν στο δίκτυο και να εκτελούνται στον απομακρυσμένο από εμάς υπολογιστή. Για να εκκινήσουμε μία telnet session
χρησιμοποιούμε την εντολή:
- telnet *hostname*
Οι εντολές που δίνουμε από εκεί και πέρα εκτελούνται στον απομακρυσμένο υπολογιστή
### [3.5 traceroute]{#ss3.5}
Είναι utility το οποίο μας δείχνει την διαδρομή που ακολουθει ένα πακέττο δεδομένων έως ότου καταλήξει στον προορισμό του. Εάν δοκιμάσουμε την traceroute σε
κάποιο domain στο INTERNET θα καταλάβουμε από τα domain names και την γεωγραφική διαδρομή που έκανε το πακέττο εως ότου φτάσει στον προορισμό του.

150
content/articles/25/03_htmlhell.md Κανονικό αρχείο

@ -0,0 +1,150 @@
+++
title = 'The HTML Hell Page'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Eric S. Raymond(mailto:esr@thyrsus.com) Μετάφραση: DJ Art(mailto:djart@hellug.gr)'
issue = ['Magaz 25']
issue_weight = 3
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Το άρθρο αυτό αποτελεί την μετάφραση του άρθρου The HTML Hell Page του Eric S. Raymond, το οποίο μπορείτε να βρείτε στην διεύθυνση
<http://www.tuxedo.org/~esr/html-hell.html>. Οι απόψεις του είναι απόλυτα δικαιολογημένες (θα μπορέσετε να διακρίνετε την αγανάκτηση) και διατυπώνονται με
εξίσου \"χαρακτηριστικό\" τρόπο :-)*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**Καλως Ήρθατε στην HTML σελίδα της κόλασης**
**Ξέρετε πως βρίσκεστε σε σχεδιαστική κόλαση όταν βλέπετε\...**
**Κείμενο που αναβοσβήνει (blinking)**\
Το κείμενο αυτό καθιστά αδύνατη την προσοχή (του επισκέπτη) σε οτιδήποτε άλλο στην σελίδα. Ρίχνει το 87% των επισκεπτών σε μιά αβοήθητη κατάσταση καθηλωμένου
και \"κλειδωμένου\" εγκεφάλου, περίπου όπως ένα κουνέλι που τυφλώνεται από τους προβολείς της διερχόμενης νταλίκας. Αυτό δεν είναι καλό. Αν το *παρακάνει*
κανείς με το blink tag, τότε δικαιούται να τον πυροβολήσουν. *Στοιχείο:* αν **χρησιμοποιείτε** το blink tag, τότε ήδη το *παρακάνετε*.
**Περιττό animation**\
Χρησιμοποιώντας περιττά animations πετυχαίνετε όλους τους \"*υπέροχους τραυματισμούς*\" του blink tag συν την \"*δημόσια προσβολή*\" του χρόνου που απαιτείται
για το κατέβασμα αυτών. Άνθρωποι που το παρακάνουν με τα animations θα έπρεπε να τους εμβολίσουν με βιβλία σε κάθε \"στόμιο\" του σώματός τους μέχρι να
καταλάβουν πως γεμίζοντας δύο ή και τρία frames μόνο με animations είναι ακόμα πιο δυσάρεστο από την *κατάστασή τους*.
**Marquees**\
Λοιπόν, μπορεί να νομίζετε πως το blink tag και τα animations είναι η χειρότερη κατάχρηση που θα μπορούσαν να κάνουν οι \"γιδοβοσκοί\". Μπαααααα. Σε τέτοιες
περιπτώσεις όπου η κατάχρηση απλά δεν είναι αρκετή, ο Μεγάλος Σατανάς του Redmond μας έδωσε το \<MARQUEE\>, το οποίο επιτρέπει σε κάποιον να δημιουργήσει
animated και κυλιόμενες \"τέντες\" μέσα σε αγκύλες (\[\]). Αυτός ο μπάσταρδος ξάδελφος του blink tag μπορεί να προκαλέσει ίλιγγο και αποπληξία σε ευεπηρέαστους
ανθρώπους, μειώνοντάς τους στο σημείο του γλυκοσαλιάσματος, το οποίο παρεμπιπτόντως είναι και αναγκαία προϋπόθεσις για να αγοράσει κανείς προϊόντα της
Microsoft. Σύμπτωσις; Εμείς πιστεύουμε πως όχι.
**Φανταχτερά (=κακόγουστα) backgrounds**\
Την επόμενη φορά που θα \"σκοντάψουμε\" σε μιά σελίδα φτιαγμένη από κάποιον που νομίζει ότι είναι ωραίο (=cool) να χρησιμοποιεί φλόγες που ξεπηδούν ή επτά
αποχρώσεις του ρόζ για background, ορκιζόμαστε πως θα περάσουμε μέσα από την οθόνη για να φτάσουμε και να ξεριζώσουμε το λαιμό του υπεύθυνου για το ξέρασμα. Αν
υπάρχει χειρότερος διοργανωτής υπερκόπωσης των ματιών και ημικρανιών από το blink tag, τότε είναι αυτό.
**Μη αναγνώσιμος συνδυασμός χρώματος κειμένου/background**\
Ο κόσμος είναι γεμάτος από κλόουν που νομίζουν πως οι σελίδες τους φαινόνται καλύτερα με makeup για κλόουν, με αφθονία αντιθετικών χρωμάτων (αυτό το κάνει και ο
κακόγουστος με τα φανταχτερά backgrounds). Οι μαγικές λέξεις που αυτοί οι χαμένοι πρέπει να μάθουν είναι \"καθαρή αντίθεση/contrast\". Το γούστο χρωμάτων
στηρίζεται μεταξύ εσάς και των Θεών της Κακογουστιάς, αλλά εάν δεν χρησιμοποιήσετε φωτεινό κείμενο σε σκούρο background, ή το αντίθετο, τότε θα χάσετε
επισκέπτες που τους αρέσει να διαβάζουν χωρίς να καταλαβαίνουν τον κόπο που χρειάζεται για να γίνει αυτό.
**Επιβλητικές επικεφαλίδες**\
Οι επιβλητικές επικεφαλίδες είναι \"αγενείς\". Εκτός αν νομίζετε πως κάθε επισκέπτης λαχταρά την ευκαιρία να περιμένει τόσο πολύ που να διακρίνει τα νύχια των
ποδιών του να μεγαλώνουν ενώ περιμένει να κατέβει το GIF απλά και μόνο για να φανεί η επικεφαλίδα, η οποία θα μπορούσε να δημιουργηθεί με μία ωραία, *γρήγορη*,
γραμματοσειρά.
**\"κάντε resize το browser σε \...\" οδηγίες**\
Σωστά. Λες και θέλαμε να καταλαμβάνουν οι browser μας τόσην επιφάνεια. Αλλά αυτό που πραγματικά είναι ενοχλητικό είναι ότι τις περισσότερες φορές οι
\"γιδοβοσκοί\" το αντιλαμβάνονται λανθασμένα. Λες και στους δικούς τους browsers αντισταθμίζονται 8 pixel, εμάς μας τρώει 20, αλλά ξεχνούν να ενεργοποιήσουν τα
scroll bars, οπότε έχουν βγεί έξω τουλάχιστον 30 pixels, αν και η σελίδα ήταν έτσι κι αλλιώς για τα μπάζα.
**Ξέρετε πως βρίσκεστε σε κόλαση περιεχομένου όταν βλέπετε\...**
**Μετρητές**\
\"Είστε ο υπ\' αριθμόν 2.317 επισκέπτης\". Ναι, λες και μας νοιάζει. Μέσω Yahoo ή Altavista μπορεί κανείς να βρεί χωρίς κόπο κάθε σελίδα του δικτύου με θέμα
\"τυροπιτάκια\" ή \"το καναρίνι μου\". Σε αυτόν τον γενναίο νέο κόσμο, οι μετρητές δεν είναι τίποτα άλλο παρά μιά μορφή επίδειξης εγωισμού, εντυπωσιάζοντας μόνο
αυτούς που φέρουν μυαλό από lemming\*. Οι μετρητές θα σας δείξουν πόσα κορόιδα διάβαζαν με τις ώρες αυτές τις σελίδες, αλλά δεν θα σας δείξουν πόσα άτομα σε
κλάσματα δευτερολέπτου μουρμούρισαν \"γιδοβοσκοί\" και είχαν ήδη φύγει. Οι μετρητές είναι κακό εργαλείο για την στατιστική επισκεπτών μιας σελίδας, βαραίνοντας
ακόμα περισσότερο τα \"καλώδια\" του Δικτύου.\
**\* σημείωση από τον μεταφραστή:** επειδή υπάρχουν φήμες πως πολλά άτομα του χώρου μας εδώ, δεν έχουν ασχοληθεί με παιχνίδια, να αποσαφηνίσω τί είναι το
lemming. Υπήρχε κάποτε ένα ωραίο παιχνίδι, τα Lemmings, όπου είχες υπό τον έλεγχό σου μιά αγέλη από μικροσκοπικά ανεγκέφαλα όντα, που το μόνο που ήξεραν να
κάνουν ήταν να περπατάνε ΜΟΝΟ ευθεία και να εκρήγνυνται (αν τους διέταζες). Ο χρήστης λοιπόν, έπρεπε να διαμορφώσει κατάλληλα την πίστα ώστε τα ηλίθια αυτά όντα
να φτάσουν (περπατώντας ΜΟΝΟ ίσια) στην πόρτα που βρισκόταν στην άλλη μεριά της πίστας. Δεν ξέρω αν καταλάβατε πόσο ανεγκέφαλα είναι αυτά τα όντα (άλλο να σας
το λέω και άλλο να το βλέπετε ;-)
**Μπαγιάτικα links**\
Τα μπαγιάτικα links είναι lame. Άτομα που έχουν πάρα πολλά μπαγιάτικα links είναι lamers. OK, ο καθένας έχει έναν δείκτη \"εξάτμισης\" των links πού και πού \--
αλλά δεν έχετε παρατηρήσει ότι τα μπαγιάτικα links εμφανίζονται κατα γενική ομολογία σε σμήνη, σαν κατσαρίδες; Κι αυτό γιατί άτομα με καλές σελίδες
χρησιμοποιούν links, αλλά τα προσέχουν και διορθώνουν τα μπαγιάτικα links γρήγορα χωρίς να το καταλάβει κανείς. Μία σελίδα που έχει πολλά μπαγιάτικα links
μιλάει από μόνη της: \"Ο δημιουργός μου είναι τεμπέλης, χαμένο κορμί, ιδιοκτήτης τρώγλης που συντηρεί ένα παλάτι κατσαρίδων\".
**Σελίδες που βρίσκονται αιώνια υπο κατασκευή**\
Οι surfers του δικτύου διαπιστώνουν γρήγορα πως για κάθε 10 σελίδες υπο κατασκευή, ίσως δύο τρείς μόνο από αυτές να καταργηθούν πρίν από το ολοκαύτωμα του
Σύμπαντος. Αυτό είναι ηλίθιο. Η html δεν είναι επιστήμη πυραύλων και η κατασκευή σελίδων δεν είναι μιά αργή διαδικασία. Όποιος δεν μπορεί να αφαιρέσει τις \"υπο
κατασκευή\" ταμπέλες από τις σελίδες του, θα έπρεπε αμέσως να τις παρατήσει και να βρεί ένα hobby που ταιριάζει καλύτερα στις ικανότητές του, όπως ας πούμε να
σαλιαρίζει(=ανοηταίνει) ή να κοιτάζει τον τοίχο.
**Ξέρετε πως βρίσκεστε σε αισθητική κόλαση όταν βλέπετε\...**
**Ανούσιες εγωκεντρικές σελίδες**\
Αν μας δίναν μία δραχμή για κάθε σελίδα του στύλ \"Γεια, σε αυτήν την φωτογραφία βλέπετε εμένα και σε αυτήν βλέπετε το σκύλο/τη γάτα/τον γκόμενο/την γκόμενά
μου\" τότε αύριο κιόλας θα παίρναμε σύνταξη και θα ζούσαμε στην Aruba μαζί με μιά παρέα από supermodels. *Στοιχείο:* αν δεν έχεις κάτι να πείς, τότε σκάσε. Και
κράτα το μακριά από το Internet, η ζωή είναι πολύ σύντομη για βαρεμάρα.
**Εταιρική logό-ρεια**\
Όλοι τις έχουμε δεί \-- σελίδες κάποιων εταιρειών που ξεκινούν κατεβάζοντας κάποιο θηριώδες logo από την κόλαση. Και αφού περιμένετε κανα εκατομμύριο χρόνια να
τελειώσει, η υπόλοιπη σελίδα διακατέχεται από έναν τόνο λόγια για το πόσο υπέροχη είναι η εταιρεία κλπ, αλλά *καθόλου περιεχόμενο*. Συμβουλή για τους
marketroids: αυτό *δεν* είναι καθόλου αποτελεσματικό, εκτός εάν ο σκοπός σας είναι να κάνετε την εταιρεία να μοιάζει με όλες τις άλλες που νομίζουν πως έχοντας
μιά Web διεύθυνση είναι \"κάποιες\". Κι όμως !!
**Διαφημίσεις από την κόλαση**\
Δεν αγαπάτε τις διαφημίσεις στο πάνω μέρος των σελίδων που αλλάζουν κάθε φορά που διαβάζεται η σελίδα; Αν πηγαίνετε μπρος-πίσω ανάμεσα σε μιά κύρια σελίδα και
σε μιά άλλη, ψάχνοντας δεδομένα σε μιά συγκεκριμένη υποκατηγορία, τότε κερδίζετε την αμφίβολη ευχαρίστηση να περιμένετε κάθε φορά να φορτώσει ένα καινούριο
γραφικό!
**Ανυπαρξία e-mail διεύθυνσης για feedback**\
Αυτοί οι τύποι αρέσκονται στο να τους επισκέπτεστε, να τους βλέπετε και να τους ακούτε, αλλά οι ίδιοι δεν επιθυμούν να ακούσουν εσάς. Δεν είναι ιδιαίτερα
ενδιαφέρον ότι οι μισές Web σελίδες εταιρειών με μεγάλα ονόματα δεν σας αποκαλύπτουν ποιά είναι η e-mail διεύθυνσή τους; Αυτό δείχνει πόσο αυτές οι εταιρείες
*πραγματικά* εκτιμούν τους πελάτες τους. Συμβουλή για τους marketdroids: αυτή η κατάσταση κάνει την εταιρεία να μοιάζει ακριβώς τόσο αλαζονική, ηλίθια και
αδιάφορη για τους πελάτες, όσο πραγματικά είναι. Σκεφτείτε το θέμα της e-mail διεύθυνσης για feedback ως απαραίτητη μεταμφίεση.
**Ξέρετε πως βρίσκεστε στην προέκταση της κόλασης όταν βλέπετε\...**
**broken HTML**\
Η υπερβολική κακογραμμένη και λάθος HTML είναι μάστιγα για τον κόσμο γιατί τυχαίνει να προσπερνάει τον βλαμμένο-εγκεφαλικά \'parser\' του αγαπημένου web browser
του καθενός. Ο σχεδιαστής του site κερδίζει το βραβείο διαστροφής εάν μπορεί να προκαλέσει ριζοσπαστικά διαφορετικές συμπεριφορές σε διαφορετικούς browsers ή
browsers διαφορετικής έκδοσης.
**μή σταθερές επεκτάσεις**\
Πολύ αγαπάμε τη στιγμή όταν ο browser παγώνει καθώς φορτώνει μιά σελίδα, μένει εκεί για λίγο και μετά ατιμωτικά πετάει coredump. Όταν συμβαίνει αυτό, μπορείτε
να στοιχηματίσετε χρήματα ότι η σελίδα χρησιμοποιεί κάποια \"άχρηστη\" επέκταση, την οποία κανένας ποτέ δεν προβληματίστηκε να κάνει κάνει debug σωστά (υπάρχει
σχεδόν ακριβής αριθμός αυτών). Ο χειρότερος εφιάλτης είναι χωρίς αμφιβολία ο \...
**frames**\
Τα frames είναι για τους ηλίθιους. Δεν δουλεύουν σε αρκετούς browsers, αλλά ευθύνονται για το core-dump σε πολλούς άλλους, οι οποίοι θεωρητικά υποτίθεται πως
υποστηρίζουν frames. Καταλαμβάνουν υπερβολικά πολύ χώρο στην οθόνη και, όταν χρησιμοποιούνται υπέρμετρα, τότε καθιστούν σχεδόν αδύνατο να καταλάβεις πού ήσουν
και πώς να πάς πίσω, εκεί από όπου ήρθες.
**Καλυτερεύοντας την σελίδα**
\"Οκ,\" σας ακούω να λέτε, \"μου έδωσες καλές συμβουλές στο πώς να μην τα κάνω θάλασσα. Έχεις να πείς κάτι πιό θετικό; Όπως, σωστά πράγματα και πώς να κάνω
καλύτερη μιά σελίδα;\"
Για σένα, φίλε μου, έχω τρείς λέξεις. Περιεχόμενο, *περιεχόμενο* και **περιεχόμενο**. Δώσε στο \"ακροατήριο\" έναν λόγο για να νοιαστεί. Υπάρχουν τόσες πολλές
σελίδες που μοιάζουν σαν \"ιστορίες που διηγούνται ηλίθιοι\", γεμάτες από ήχο και μανία, μη σημαίνοντας κάτι. Θέλεις να προκαλέις το ενδιαφέρον; Τότε ξέχνα τα
γραφικά και τη λάμψη. Πρώτα και κύρια, *να έχεις κάτι να πείς*.
**Ευχαριστίες**
\...στον Pete Glasscock για την έμπνευση αυτής της σελίδας.
\...στον Patrick Campbell-Preston \<patrick\@chaos.org.uk\> για τα περισσότερα στην ενότητα \"προέκταση της κόλασης\".
\...στον Rob Novak \<rnovak\@ibm.net\> για το \"διαφημίσεις από την κόλαση\".
Πολλοί άλλοι έχουν συμβάλλει στην δημιουργία αυτής της σελίδας και επιθυμούν να **μην** τους επιδοθούν ευχαριστίες.
**Άλλες Καλές Συμβουλές**
Υπάρχει μια μεγάλη \"φλυαρία\" για web page design από τον [C. J. Silverio](http://www.spies.com/~ceej/Words/rant.web.html). Φριχτά παραδείγματα κακής τεχνικής
βρίσκονται στο [Web Pages That Suck](http://www.webpagesthatsuck.com). Η στήλη του Jakob Neilsen [Top Ten Mistakes in Web
Design](http://www.useit.com/alertbox/9605.html) είναι πολύ καλή. Επίσης δείτε τα [Ten Commandments of Web
Design](http://www.mcs.net/~jorn/html/terrorist.html).

343
content/articles/25/04_xbasic.md Κανονικό αρχείο

@ -0,0 +1,343 @@
+++
title = 'XBASIC'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Κ. Τσακάλογλου Tsakf@hellug.gr(mailto:%20Tsakf@hellug.gr)'
issue = ['Magaz 25']
issue_weight = 4
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Σε αυτό το τεύχος του magaz Θα κάνουμε μια πρώτη προσπάθεια θα γράψουμε ένα πάρα πολύ απλό πρόγραμμα για να δούμε πως λειτουργεί το περιβάλλον και μελετήσουμε
τα βασικά στοιχεία που αποτελούν τη δομή ενός προγράμματος Xbasic.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
**1. Αρχικές ενέργειες**
-------------------------------------------------
**2. Το πρόγραμμά μας**
------------------------------------------------
**3. Ανάλυση προγράμματος**
----------------------------------------------------
**4. Δεδομένα: Μεταβλητές και σταθερές.**
------------------------------------------------------------------
- [4.1 Μεταβλητές](#ss4.1)
- [4.2 Αριθμητικές μεταβλητές](#ss4.2)
- [4.3 Σκοπός μεταβλητών](#ss4.3)
- [4.4 Σταθερές](#ss4.4)
**5. Επίλογος 2ου μέρους**
---------------------------------------------------
### [1. Αρχικές ενέργειες]{#s1}
Ξεκινάμε δίνοντας την εντολή στο περιβάλλον εργασίας της Xbasic για κατασκευή νέου προγράμματος επιλέγοντας από το **File\>New**. Θα εμφανιστεί παράθυρο για να
επιλεγεί το είδος του κειμένου που θέλουμε να δημιουργήσουμε. Επιλέγουμε την επιλογή program και το περιβάλλον δημιουργεί τις αρχικές εντολές που απαιτούνται
για το νέο πρόγραμμα.
Θα δούμε ότι έχουν δημιουργηθεί δύο ενότητες.
- 1\. PROLOG
- 2\. ENTRY
Μπορούμε να επιλέξουμε ποια θα βλέπουμε με την επιλογή **view\>function** και εμφανίζεται παράθυρο επιλογών από όπου διαλέγουμε την επιθυμητή ενότητα.
Επιλέγοντας το PROLOG βλέπουμε ότι το περιβάλλον έχει δημιουργήσει κάποιες εντολές για να μας βοηθήσει στο στήσιμο του νέου προγράμματος μας.
### [2. Το πρόγραμμά μας]{#s2}
Θα κατασκευάσουμε ένα απλό πρόγραμμα για να δούμε την δομή του αναλυτικά. Ο κώδικας που θα δούμε περιέχει αριθμούς γραμμής που στην πραγματικότητα δεν
χρειαζόμαστε. Μπήκαν απλά για να μπορεί να γίνει κατανοητή η εξήγηση των ενοτήτων.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1. '
2. ' ####################
3. ' ##### PROLOG #####
4. ' ####################
5. '
6. PROGRAM "multiply" ' 1-8 char program/file name without .x or any .extent
7. VERSION "1.0000" ' version number - increment before saving altered program
8. '
9. ' You can stop the PDE from inserting the following PROLOG comment lines
10.' by removing them from the prolog.xxx file in your \xb\xxx directory.
11.'
12.' Programs contain: 1: PROLOG - no executable code - see below
13.' 2: Entry function - start execution at 1st declared func
14.' * = optional 3: Other functions - everything else - all other functions
15.'
16.' The PROLOG contains (in this order):
17.' * 1. Program name statement PROGRAM "progname"
18.' * 2. Version number statement VERSION "0.0000"
19.' * 3. Import library statements IMPORT "libName"
20.' * 4. Composite type definitions TYPE <typename> ... END TYPE
21.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args)
22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args)
23.' * 7. Shared constant definitions $$ConstantName = literal or constant
24.' * 8. Shared variable declarations SHARED variable
25.'
26.' ****** Comment libraries in/out as needed *****
27.'
28.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT...
29.' IMPORT "xcm" ' Complex library : complex number library (trig, etc)
30. IMPORT "xst" ' Standard library : required by most programs
31.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs
32.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs
33.'
34.
35.DECLARE FUNCTION Entry ()
36.DECLARE FUNCTION multiply (numa%,numb%)
37.'
38.'
39.' ######################
40.' ##### Entry () #####
41.' ######################
42.'
43.' Programs contain:
44.' 1. A PROLOG with type/function/constant declarations.
45.' 2. This Entry() function where execution begins.
46.' 3. Zero or more additional functions.
47.'
48.FUNCTION Entry ()
49. STATIC prompt$,inpu$
50. STATIC numa%, numb%,numc%
51. inpu$=INLINE$("Enter a number 1..100 ")
52. numa%=SSHORT(inpu$)
53. inpu$=INLINE$("Enter a number 1..100 ")
54. numb%=SSHORT(inpu$)
55. numc%=multiply(numa%,numb%)
56. PRINT numc%
57.
58.END FUNCTION
59.'
60.'
61.' #########################
62.' ##### multiply () #####
63.' #########################
64.'
65.FUNCTION multiply (numa%,numb%)
66.STATIC p1%
67.
68.p1%=numa%*numb%
69.
70.END FUNCTION p1%
71.END PROGRAM
----------------------------------------------------------------------------------------------------------------------------------------------------------------
### [3. Ανάλυση προγράμματος]{#s3}
**Γραμμές 6-7** Χαρακτηριστικά προγράμματος
Γράφουμε το όνομα του προγράμματος και την έκδοσή του.
**Γραμμές 28-32** Βιβλιοθήκες
Γράφουμε τα ονόματα των βιβλιοθηκών που θα συμπεριληφθούν στο πρόγραμμα. Η εντολή είναι:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
IMPORT όνομα βιβλιοθήκης
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Οι βιβλιοθήκες είναι ξεχωριστά αρχεία στον σκληρό δίσκο και προστίθενται αυτόματα στον κώδικα που έχουμε γράψει κατά την εκτέλεση του. Μαζί με την Xbasic έχουν
έρθει οι βιβλιοθήκες.
**xma** για μαθηματικά, **xcm** για πολύπλοκες μαθηματικές πράξεις, (τριγωνομετρία κλπ.) **xst** είναι η βιβλιοθήκη που χρησιμοποιούμε πάντα και έχει τις
βασικές εντολές, **xgr** και xui που χρησιμοποιούνται όταν κατασκευάζουμε προγράμματα με γραφικό περιβάλλον (φόρμες, κουμπιά κλπ.). Η εντολή IMPORT είναι κάτι
αντίστοιχο της \#include της γλώσσας C.
Στο συγκεκριμένο παράδειγμα χρησιμοποιείται μόνο η βιβλιοθήκη xst έτσι μπροστά από την εντολή δεν υπάρχει το \"\'\" που δηλώνει ότι η εντολή πρέπει να αγνοηθεί.
**Γραμμές 35-36** Ορισμός παραμέτρων συναρτήσεων του προγράμματος
Για να μπορεί να εκτελεστεί μια συνάρτηση που κατασκευάζουμε στο πρόγραμμα μας πρέπει να ορισθούν το όνομα, τυχόν παράμετροι κλπ. Εδώ δεν βάζουμε τον κώδικα της
συνάρτησης αλλά απλά τον ορισμό της. Ο κώδικας της συνάρτησης μπαίνει παρακάτω όπως θα δούμε στις γραμμές 65-70.
Αυτά τα τρία κομμάτια κώδικα αποτελούν το PROLOG όπως αναφέρεται και στο παράθυρο του γραφικού περιβάλλοντος. άλλα στοιχεία του PROLOG που δεν τα χρησιμοποιούμε
στο παράδειγμά μας είναι:
- Ορισμός τύπων μεταβλητών.
- Ορισμός εσωτερικών μεταβλητών (του κώδικα που έχουμε και γράφουμε).
- Ορισμός εξωτερικών μεταβλητών (του κώδικα που υπάρχει σε άλλο αρχείο).
- Ορισμός σταθερών.
**Γραμμές 48-58** Η κύρια συνάρτηση Entry
Η πραγματική δουλειά της Xbasic γίνεται εδώ. Οι εντολές της γλώσσας εμφανίζουν μηνύματα στο παράθυρο κονσόλας, δέχονται είσοδο από το πληκτρολόγιο, εκτελούν
μαθηματικές πράξεις, καλούν άλλες συναρτήσεις, διαβάζουν ή γράφουν σε αρχεία στον δίσκο και οποιαδήποτε άλλη εργασία ένα πρόγραμμα χρειάζεται να εκτελέσει.
Οι εντολές που βλέπουμε εδώ είναι οι:
**Γραμμές 51,53** INLINE\$
Αυτή η συνάρτηση εμφανίζει ένα μήνυμα στο παράθυρο κονσόλας και περιμένει εισαγωγή αλφαριθμητικών χαρακτήρων, συνοδευόμενη από το ENTER.
**Γραμμές 52,54** SSHORT
Αυτή η συνάρτηση μετατρέπει την σειρά αλφαριθμητικών χαρακτήρων σε αριθμητική μεταβλητή για να μπορούν να γίνουν μαθηματικές πράξεις.
**Γραμμή 55** κλήση συνάρτησης
Εδώ γίνεται η κλήση της συνάρτησης multiply που ορίζεται στις γραμμές 65-70.
**Γραμμή 56** PRINT
Αυτή η συνάρτηση εμφανίζει μηνύματα στο παράθυρο κονσόλας.
**Γραμμές 65-70** Η συνάρτηση multiply
Οι συναρτήσεις είναι ανεξάρτητα κομμάτια κώδικα που γράφτηκαν να κάνουν μια συγκεκριμένη δουλειά. Κάθε συνάρτηση έχει όνομα, παραμέτρους και τιμή επιστροφής. Ο
κώδικας της συνάρτησης εκτελείται μόλις σε κάποιο άλλο σημείο του προγράμματος την καλέσουμε με το όνομά της. Το απολύτως απαραίτητο για μια συνάρτηση είναι το
όνομά της ενώ μπορεί να μην έχει παραμέτρους ούτε τιμή επιστροφής.
**Γραμμή 68** Πολλαπλασιασμός
Στο παράδειγμά μας η συνάρτηση υπολογίζει το γινόμενο των μεταβλητών numa% και numb% και το τοποθετεί στην μεταβλητή p1%.
**Γραμμή 70** END FUNCTION
Εδώ τελειώνει ο κώδικας της συνάρτησης. Μπορούμε να βάλουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει η συνάρτηση. Στο παράδειγμά μας θέλουμε, να
επιστρέψουμε στην καλούσα συνάρτηση το γινόμενο, γι\' αυτό γράφουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει.
**Γραμμές 1-5,8-29,31-33,37-47 και 59-64** σχόλια
Σε αυτές στις γραμμές υπάρχει το σύμβολο \"\'\" που δηλώνει ότι η γραμμή αυτή είναι γραμμή σχολίων και έτσι δεν εκτελείται τίποτα απλά υπάρχει για να μπορεί ο
προγραμματιστής να βάζει σχόλια και να θυμάται μετά από καιρό τι έχει κάνει.
### [4. Δεδομένα: Μεταβλητές και σταθερές.]{#s4}
Στο παράδειγμά μας στις γραμμές 49,50,66 γίνεται ο ορισμός μεταβλητών. Τα προγράμματα συνήθως χρησιμοποιούν διαφορετικής μορφής δεδομένα και χρειάζεται ένα
τρόπο να τα αποθηκεύει. Αυτά τα δεδομένα μπορεί να είναι ή αριθμοί ή γράμματα (χαρακτήρες). Η Xbasic έχει δύο τρόπους να αποθηκεύει δεδομένα -μεταβλητές και
σταθερές- όπου κάθε περίπτωση έχει τις ιδιότητές της.
### [4.1 Μεταβλητές]{#ss4.1}
Οι μεταβλητές χρησιμοποιούνται για να αποθηκεύσουμε δεδομένα του προγράμματος και να τα χρησιμοποιήσουμε σε κάποιο άλλο σημείο τους. Οι μεταβλητές στην
πραγματικότητα δείχνουν σε κάποια θέση μνήμης στον υπολογιστή που είναι αποθηκευμένα τα δεδομένα που αντιστοιχούν στην μεταβλητή. Τα ονόματα των μεταβλητών
ξεκινάνε πάντα με τουλάχιστον ένα πεζό αγγλικό γράμμα. Τα κεφαλαία τα χρησιμοποιούμε αποκλειστικά να γράφουμε τις εντολές της Xbasic. Είναι απαραίτητο να γίνει
αυτό γιατί εντολή που έχει έστω και ένα πεζό γράμμα δεν αναγνωρίζεται. Στα ονόματα των μεταβλητών η γλώσσα δεν μετατρέπει σε κεφαλαία ή πεζά ότι μοιάζει και
έτσι οι μεταβλητές numa και numA είναι διαφορετικές. Τα ονόματα μεταβλητών δεν μπορούν να περιέχουν σύμβολα εκτός από το την υπογράμμιση (Underscore \_).
### [4.2 Αριθμητικές μεταβλητές]{#ss4.2}
Στην Xbasic υπάρχουν διάφορα είδη αριθμητικών μεταβλητών. Ανάλογα με το είδος της μεταβλητής υπάρχουν διαφορετικές απαιτήσεις μνήμης και διαφέρουν ως προς τον
τρόπο που γίνονται οι μαθηματικές πράξεις σε αυτές. Π.χ. Μικρές αριθμητικές τιμές 1,10,100,-5 χρειάζονται λιγότερη μνήμη για να αποθηκευθούν από ότι οι τιμές
3.14 ή 312.45687632 και λιγότερη ώρα για τον υπολογισμό τους. Με την κατάλληλη χρήση των μεταβλητών εξασφαλίζεται η γρήγορη και αποτελεσματική λειτουργία του
προγράμματός μας. Οι αριθμητικές μεταβλητές διακρίνονται σε τρία βασικά είδη:
- Ακέραιες μεταβλητές όπου και αυτές διακρίνονται σε δύο ομάδες (με πρόσημο και χωρίς πρόσημο).
- Μεταβλητές κινητής υποδιαστολής όπου τα περιεχόμενά τους μπορούν να είναι κει δεκαδικοί αριθμοί.
- Μεταβλητές συστήματος.
Παραθέτω ένα πίνακα με τα είδη των ακεραίων αριθμητικών μεταβλητών που διαθέτει η Xbasic με το επίθεμά τους, το όνομα τους, το χώρο (σε bits) που καταλαμβάνουν
στην μνήμη, και τις ελάχιστες και μέγιστες τιμές που μπορούν να έχουν.
- Μεταβλητές με πρόσημο (signed).
----------------------------------------------------------------------------------------------------------------------------------------------------------------
@ SBYTE (8 bits) -128 έως 127
% SSHORT (16 bits) -32768 έως 32767
& SLONG (32 bits) -2147483648 έως 2147483647
----------------------------------------------------------------------------------------------------------------------------------------------------------------
- Μεταβλητές χωρίς πρόσημο (Unsigned).
----------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ UBYTE (8 bits) 0 έως 255
%% USHORT (16 bits) 0 έως 65535
&& ULONG (32 bits) 0 έως 4294967295
----------------------------------------------------------------------------------------------------------------------------------------------------------------
- Μεταβλητή συστήματος XLONG
Η μεταβλητή αυτή μπορεί να είναι 32 ή 64 bit ανάλογα με το σύστημα που χρησιμοποιούμε.
Οι μεταβλητές κινητής υποδιαστολής είναι δύο τύπων.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
! SINGLE (32 bits) σύμφωνα με την κωδικοποίηση IEEE
# DOUBLE (64 bits) σύμφωνα με την κωδικοποίηση IEEE
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Οι μεταβλητές κινητής υποδιαστολής ανάλογα με το είδος τους μπορούν να έχουν ακρίβεια 8 δεκαδικών ψηφίων ο τύπος SINGLE και 16 δεκαδικών ψηφίων ο τύπος DOUBLE.
### [4.3 Σκοπός μεταβλητών]{#ss4.3}
**AUTO AUTOX STATIC SHARED (/όνομα ομάδας/) EXTERNAL (/όνομα ομάδας/)**
**EXTERNAL** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο για οποιοδήποτε κομμάτι προγράμματος ακόμη και αν αυτό είναι σε βιβλιοθήκη και
γίνεται σύνδεση (link) μετά την μεταγλώττισή του (compile).
**SHARED** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο σε όλες τις συναρτήσεις του τρέχοντος προγράμματος.
**STATIC** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και κρατούν τις τιμές τους για διαδοχικές κλήσεις της συνάρτησης.
**AUTO** και **AUTOX** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και για κάθε κλήση της συνάρτησης κάθε φορά παίρνουν νέα τιμή.
Οι μεταβλητές **SHARED** και **EXTERNAL** συνήθως ορίζονται στο τμήμα PROLOG όπως αναφέρθηκε προηγούμενα.
### [4.4 Σταθερές]{#ss4.4}
Όπως οι μεταβλητές έτσι και οι σταθερές καταλαμβάνουν κάποιο χώρο στην μνήμη. Οι σταθερές διαφέρουν από τις μεταβλητές στο ότι τα περιεχόμενά τους δεν αλλάζουν
κατά την εκτέλεση του προγράμματος. Οι σταθερές έχουν όνομα όπως και οι μεταβλητές και οι περιορισμοί στην ονοματολογία τους είναι ίδια με αυτή των μεταβλητών
όπως αναφέραμε παραπάνω. Οι σταθερές είναι χρήσιμες όταν γράφουμε προγράμματα που έχουν κάποια βασική παράμετρο που δεν αλλάζει. Π.χ. ο αριθμός π=3.14\...
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Λ.χ.
perim=3.14*(2*R)
emb=3.14*R*R
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Αντί να γράφουμε τον αριθμό 3.14 κάθε φορά που θέλουμε να βάλουμε τον αριθμό π στους υπολογισμούς μας ορίζουμε σαν σταθερά την pi=3.14
Έτσι το πρόγραμμα διαμορφώνεται σε:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
$pi=3.14
perim=$pi*(2*R)
emb=$pi*R*R
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Με αυτόν τον τρόπο ο κώδικας είναι ευανάγνωστος και εύκολα κατανοητός. Εκτός όμως από την πιο εύκολη αναγνωσιμότητα του προγράμματος μπορούμε πολύ εύκολα να
αλλάξουμε την σταθερά π μόνο σε ένα σημείο στο πρόγραμμα και αυτό θα επηρεάσει όλα τα σημεία του προγράμματος που έχουν την σταθερά ενώ αν δεν την είχαμε
χρησιμοποιήσει θα έπρεπε να αλλάξουμε σε κάθε σημείο τον αριθμό 3.14.
Οι σταθερές στην Xbasic είναι δύο ειδών.
- Οι τοπικές σταθερές που ορίζονται αρχικά μέσα σε μια συνάρτηση και στο όνομά τους προηγείται ένα \$ Π.χ. \$YES
- Οι σταθερές που αφορούν όλο το πρόγραμμα και ορίζονται στο κομμάτι PROLOG στην αρχή του προγράμματος και στο όνομα τους προηγούνται δύο \$. Π.χ. \$\$READ
Υπάρχουν και οι σταθερές συστήματος που τις δίνει η Xbasic και είναι διαθέσιμες σε όλα τα προγράμματα όπως \$\$TRUE και \$\$FALSE.
### [5. Επίλογος 2ου μέρους]{#s5}
Είδαμε μέχρι στιγμής πως μπορούμε να κατασκευάσουμε ένα πρόγραμμα Xbasic. Πρέπει να προσεχτεί ιδιαίτερα από τους έμπειρους σε άλλες BASIC η σημασία της ενότητας
ENTRY. Εκεί αρχίζει η εκτέλεση του προγράμματος και στο END FUNCTION τελειώνει. Αυτό βέβαια για τους προγραμματιστές C είναι γνωστό από την συνάρτηση MAIN.
Πιστεύω ότι για κάποιον που έχει συνηθίσει BASIC και θέλει να αλλάξει γλώσσα και να πάει στην C, καλό είναι να περάσει πρώτα από την XBASIC. Θα έχει τις γνωστές
εντολές (BASIC) με μικροδιαφορές αλλά η δομή του προγράμματος μοιάζει πιο πολυ με την C. Έτσι αφού εξοικειωθεί με την δομή της XBASIC τότε η αλλαγή στην C θα
είναι πάρα πολύ εύκολη.

147
content/articles/25/05_esr.md Κανονικό αρχείο

@ -0,0 +1,147 @@
+++
title = 'Διευκρινήσεις για το Open Source'
date = '2000-07-01T00:00:00Z'
description = ''
author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)'
issue = ['Magaz 25']
issue_weight = 5
+++
----------------------------------------------------------------------------------------------------------------------------------------------------------------
*Κάποιοι προβληματισμοί για την αποδοχή του open source στην ελλάδα, και μία συνέντευξη που ξεκαθαρίζει ορισμένα πράγματα, από τον Eric Raymond.*
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Στην Ελλάδα έχουμε μία θλιβερή πρωτοτυπία. Σύμφωνα με τα αποτελέσματα της τελευταίας (πιο πρόσφατης) [έρευνας του open
letter](http://www.open.gr/survey/991231/web-soft.html) το λογισμικό των Web servers στην Ελλάδα κατανέμεται ως εξής:
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ **Ποσοστό χρήσης**
**Web-server software**
Apache 47,2%
MS IIS 40,7%
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Την ίδια περίοδο, σε αντίστοιχες μετρήσεις παγκοσμίως που διενεργήθηκαν από την [Netcraft](http://www.netcraft.com), η κατάσταση είναι εντελώς διαφορετική, με
τον (open source) Apache να \"νικάει\" τον (closed-source proprietary) Microsoft IIS κατά κράτος:
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
\ **Ποσοστό χρήσης**
**Web-server software**
Apache 55,5%
MS IIS 22,9%
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Αυτό δείχνει ότι η έννοια του open source δεν έχει πιάσει στην Ελλάδα τόσο όσο στο εξωτερικό. Τόσο σε επίπεδο επιχειρήσεων, όσο, δυστυχώς, και σε επίπεδο
developers (δεν είδα και πολλά open source προγράμματα από Έλληνες τελευταία :-). Ίσως αυτό να είναι επειδή το open source έχει μία φήμη. Προσπάθησα να
αξιολογήσω ποιο είναι το πρόβλημα. Ξεκίνησα από το ότι κάποια στοιχεία είναι γνωστά και αδιαμφισβήτητα. Για παράδειγμα η ποιότητα του open source δεν μπορεί να
φταίει και να τίθεται υπό αμφισβήτηση. Η έλλειψη εξειδικευμένου προσωπικού ίσως είναι ένα πρόβλημα, το οποίο θα προσπαθήσω να αναλύσω σε άλλο άρθρο. Αυτά για
τις επιχειρήσεις. Για τους developers το πρόβλημα είναι βιοποριστικό συνήθως. Και πως θα ζήσουμε; Διαβάζοντας κείμενα στο Internet, βρήκα στο \"σπίτι\" του
[Open Source](http://www.opensource.org) διάφορες πληροφορίες για το γιατί το open source είναι καλύτερο (πληροφορίες που να απευθύνονται σε επιχειρηματίες αλλά
και απαντάνε ορισμένα ερωτήματα των developers) αλλά δεν βρήκα πραγματικές απαντήσεις σε ερωτήματα που δέχομαι ο ίδιος συχνά από ανθρώπους που ανησυχούν να
βγάλουν τα προγράμματά τους Open Source, ή από εταιρείες που δεν χρησιμοποιούν Open Source αισθανόμενες απειλούμενες, και, δεν είχα κάτι να απαντήσω\... Επειδή
ο σωστός advocator είναι ο ενημερωμένος advocator, και επειδή η αναπαραγωγή ανακριβών ιδεών τελικά κάνει κακό στην κοινότητα, αποφάσισα ότι αξίζει τον κόπο να
ενημερωθούμε. Μάζεψα λοιπόν αυτές τις ερωτήσεις, και τις έστειλα στο OpenSource υπό την μορφή συνέντευξης. Η απάντηση ήρθε απ\' ευθείας από τον [Eric S.
Raymond](http://www.tuxedo.org/~esr).
O Eric Raymond είναι ο πρόεδρος του OSI (Open Source Initiative) και ο άνθρωπος που έγραψε το (θρυλικό πια) κείμενο \"The Cathedral and The Bazaar\" για την
μορφή ανάπτυξης των open source προγραμμάτων. Ο Eric Raymond εργάζεται σαν σύμβουλος για την εταιρεία Thyrsus Enterprises και πρακτικά, γυρνάει τον κόσμο
δίνοντας διαλέξεις για το Open Source.
Η συνέντευξη προφανώς δόθηκε στα αγγλικά. Έκανα μία μετάφραση αλλά για οποιαδήποτε απορία, διευκρίνηση, διαφωνία, πρέπει πρώτα να συμβουλευτείτε το πρωτότυπο
αγγλικό κείμενο επειδή μπορεί κατά την μετάφραση να μην απέδωσα σωστά κάποιο κομμάτι. [English text - Αγγλικό κείμενο](#engl)
- Ελευθερία και επιχειρήσεις.
1. Τι πιστεύει το OSI ότι θα έπρεπε να είναι ελεύθερο; Είναι μόνο το software ή αυτή η έννοια συμπεριλαμβάνει υποστήριξη, υπηρεσίες, εκπαίδευση
(πληροφορικής και όχι) κλπ;
*E.R.: Αν και μέλη του OSI ατομικά μπορεί να έχουν θέσεις για την \"ελευθερία\" άλλων υλικών, η αποστολή μας είναι αυστηρά να προωθήσουμε την ελευθερία
στο software.*
- Προβλήματα παραγωγής και άδειας χρήσης των open source προγραμμάτων.
1. Καλή πρακτική ανάπτυξης λογισμικού προϋποθέτει ότι πρέπει να υπάρχει (μεταξύ άλλων) μία περίοδος στην οποία η ομάδα ανάπτυξης παίρνει συνεντεύξεις από
τους (εν δυνάμει) τελικούς χρήστες και τους δοκιμαστές, με σκοπό να διευκρινιστούν οι πραγματικές ανάγκες που βρίσκονται κρυμμένες πίσω από τα παράπονα
του τύπου \"δεν δουλεύει\". Αυτό είναι κάτι που δεν μπορεί να γίνει στον ελεύθερο χρόνο κάποιου (τόσο εύκολα όσο η συγγραφή κώδικα), συνεπώς ποια είναι
η προτεινόμενη λύση, αν υπάρχει κάποια, για αυτό το πρόβλημα;
*E.R.: Το software ανοιχτού κώδικα, ελέγχεται από την ανασκόπηση άλλων (peer-review) καθ\' όλη τη διάρκεια της ζωής του. Στην πραγματικότητα κάνουμε πιο
πολλούς ελέγχους, αναλογικά, απ\' ότι γίνονται στο περισσότερο proprietary λογισμικό, απλά διανέμουμε το φόρτο διαφορετικά. Αυτή η τακτική φαίνεται να
δουλεύει. Τα ανοιχτού κώδικα λειτουργικά συστήματα έχουν μεγάλα διαστήματα μεταξύ σφαλμάτων (mean times between failure).\
Ένα τμήμα το οποίο είναι δύσκολο να αντικαταστήσουμε για τυπικούς ελέγχους, είναι στην ρύθμιση της χρηστικότητας για όχι τεχνικούς, τελικούς χρήστες.
Δεν είμαστε πολύ καλοί σε αυτό ακόμα.*
2. Αν και το να πουλήσεις λογισμικό δεν είναι παράνομο στις Ελεύθερες άδειες, φαίνεται να υπάρχει ένα πρόβλημα με αυτό. Μία μεγάλη εταιρεία που θα αγοράσει
λογισμικό από έναν προγραμματιστή, έχει το marketing και την αναγνώριση (γνωστό όνομα εταιρείας) που ο προγραμματιστής δεν έχει, και έτσι είναι
ευκολότερο για την εταιρεία να πουλήσει το λογισμικό. Αυτό είναι ένα γεγονός της αγοράς. Το τελικό αποτέλεσμα θα είναι ότι η μεγάλη εταιρεία θα πουλήσει
όλα τα πακέτα, ενώ ο πραγματικός προγραμματιστής θα έχει πουλήσει μόνο αυτό το αρχικό κομμάτι. Δεν είναι αυτό άδικο για τον προγραμματιστή (και υπέρ της
μεγάλης εταιρείας);
*E.R. Οι προγραμματιστές που θέλουν να πουλήσουν λογισμικό δεν το βγάζουν open source. Αυτοί οι οποίοι το βγάζουν open source επιλέγουν να αποζημιωθούν
με άλλους τρόπους από την απ\' ευθείας πώληση (πουλώντας σχετικά προϊόντα ή υπηρεσίες, ή απλά σε φήμη). Σε οποιαδήποτε περίπτωση δεν υπάρχει αδικία,
απλά διαφορετικές επιλογές.\
Το ελεύθερο λογισμικό θα ήταν \"άδικο\" μόνο αν οι προγραμματιστές αναγκάζονταν να συμμετάσχουν σε αυτό. Κανείς δεν το υποστηρίζει αυτό, και, είναι
γεγονός, εγώ υπερασπίζω το δικαίωμα των προγραμματιστών να κάνουν οποιοδήποτε συμβόλαιο μπορούν να διαπραγματευτούν για να διαθέσουν την πνευματική τους
ιδιοκτησία, συμπεριλαμβανομένης μίας άδειας κλειστού κώδικα αν έτσι επιλέξουν.*
- Γενικές διευκρινήσεις
1. Εμείς πιστεύουμε ότι όλο το λογισμικό θα έπρεπε να είναι ελεύθερο. Από την άλλη πλευρά, δεν πιστεύουμε ότι έχουμε το δικαίωμα να αναγκάσουμε κάποιον να
παράγει ελεύθερο λογισμικό. Αν αυτός θέλει να το διανείμει υπό μία μη ελεύθερη άδεια χρήσης, είναι ελεύθερος να το κάνει. Συμφωνεί το OSI με αυτό; Αν
όχι, είναι αυτό που οι μεγάλες εταιρείες ονομάζουν \"πειρατεία\" δικαολογημένο;
*E.R. Η θέση του OSI σε αυτό είναι η ίδια με την προηγούμενη ερώτηση. Οι προγραμματιστές έχουν το δικαίωμα να κάνουν τις επιλογές τους και δεν
υποστηρίζουμε την πειρατεία.*
2. Free-speach και free-beer. Καθώς ο χρόνος περνάει όλο και περισσότερο free-beer λογισμικό εμφανίζεται για το Linux. StarOffice, Sybase για να αναφέρω
κάποια παραδείγματα. Θα έπρεπε η κοινότητα να υποστηρίζει αυτά τα προγράμματα για την γρηγορότερη εξάπλωση του Linux ή θα έπρεπε να τα αγνοεί; (Για
παράδειγμα, εμείς σαν Hellug σκεφτόμαστε να γράψουμε έναν ελληνικό διορθωτή για το StarOffice αλλά εχουμε καταλήξει σε αδιέξοδο. Και αυτό, φοβάμαι,
είναι μόνο το πρώτο πρόβλημα).
*Το OSI δεν έχει θέση σε αυτό.*
[]{#engl} **English original text of the interview**
- Freedom and business.
1. What does the OSI consider that should be open? Is it only for the software, or does that include support, services, education (computer-related or not)
etc?
*While individual OSI members may have positions on the \"openness\" of other kinds of goods, our mission is strictly to promote openness in software*
- Open source producing/licensing problems
1. Good software enginnering practice (as tought in Greek colleges that is, of course, but I don\'t think it will be different there :-) says that a
software should have among others a period on which development team interviews the (potential) users and the testers, in order to recognize the real
needs behind the \"it doesn\'t work\" nagging. That is something that cannot be done on someone\'s free time (as easy as coding) so what is the
recommended solution, if any, for that situation?
*Open-source software is tested by peer-review throughout its lifetime. We actually do more testing, proportionately, than most proprietary software
gets; we just distribute the load differently. This tactic seems to work; open-source operating systems have very long mean times between failure.\
The one area where it\'s hard to substitute for formal testing is in tuning the usability of interfaces for non-technical end-users. We\'re not very
good at that yet.*
2. While selling software is not illegal in Open Licenses, there seems to be a problem with that. A big company byuing an open source software from a
freelance developer, has the marketing resources and the society recognition (=Well known Company Name) that the developer doesn\'t, so it\'s easier for
the company to sell the software. That\'s a fact of the market (at least in Greece but I don\'t think it will be different there again). The final
result will be that the big company will sell all the packages to be sold, while the developer will have that one initial piece sold. Isn\'t that unfair
for the developer (and on favor of the big company?)
*Developers who want to sell software don\'t go open source. Those who do are choosing to be compensated in some other way than direct sale value
(through selling associated goods or services, or simply in reputation). Either way, there is no unfairness, just different choices.\
Open source would only be \"unfair\" if developers were forced to participate in it. Nobody advocates that \-- and, in fact, I defend the right of
developers to make any contract they can negotiate to dispose of their intellectual property, including a closed-source license if they so choose.*
- Those who still don\'t get it (modified to generic clarifications)
1. We (and you of course) beleive that all software should be free. On the other hand, we don\'t think that we have the right to force someone to produce
free software. If he/she wants to distribute it under a non-free license he is free to do so. Does OSI agree with that? If not, is, what big companies
name as \"piracy\", justified?
*OSI\'s position on this is similar to the one I implied in answering the previous question. Developers have the right to make their own choices, and we
do not support piracy.*
2. Free-speach and free-beer. As the time goes by, more free-beer software appears for Linux. StarOffice, Sybase to name just a few. Should the community
support these products for the earlier adoption of Linux, or should it ignore them? (for example, we as Hellenic LUG are thinking about writing a greek
speller for StarOffice, but we\'ve come to an endpoint. And that\'s, I\'m afraid, only the beggining).
*OSI has no position on this.*