Τρίτη 29 Απριλίου 2014

Πρόγραμμα σε Μ2000 με αγγλικούς χαρακτήρες

M2000 Script SINGCODE.GSB

Module SIGN {
                ' no GUI --- using only open file dialog and message box.
                folder$ = "C:\Program Files\DevStudio\VB\NewM2000\"
                {
                      Flush
                      ok = False
                      EXEORCAB folder$
' multiline variable assignment
                      singtoolpath$ = {signtool.exe sign /a @@
}
                      Try ok {
                            Read f$
                            If f$ = "" Then Error 100 ' make ok as false;
                      }
                      If ok Then {
                            f$ = quote$( f$ ) ' place inside quotes " "
                            singtoolpath$ = Replace$( "@@", f$, singtoolpath$ )
                            Report singtoolpath$ ' this is a special print command
                            Dos singtoolpath$ ;  ' execute dos command and wait
                            Wait 500  ' wait 500 miliseconds for filesystem to flush buffers
                            ? "ok"  ' this is as a normal Print command
                      }Else Exit ' exit  from block { } so here we don't have any after else;
                      folder$ = File.Path$( f$ )
                      If Ask( "Another Sign - Press Ok for Yes" ) = 1 Then Loop
                      }
                }
Module EXEORCAB {Read f$
                Open.File "", f$, "Files for signature", "Application (*.exe)|*.exe| Cabinet File (*.cab)|*.cab"
          }
 SIGN : End

Παρασκευή 25 Απριλίου 2014

Από το Πρόγραμμα στο Διαδίκτυο!

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

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

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

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

Έρχεται λοιπόν η εποχή όπου σκέφθηκαν οι πληροφορικάριοι (κατά το βιβλιοθηκάριοι), να περάσουν τα αρχεία τους σε κοινή θέα, μέσα από ένα δίκτυο, το οποίο θα λειτουργούσε ως πίνακας ανακοινώσεων. Κάθε αρχείο θα εμφανίζονταν ανάλογα τη σκοπιμότητά του, ως ανακοίνωση, με άμεση ανάγνωση, ή θα αποτελούσε μήνυμα ή θα μπορούσε να ήταν «κλειστό» και να το κατέβαζε κανείς στον υπολογιστή του για περαιτέρω ανάλυση. Αρκεί λοιπόν να μπορούσε κανείς να εξασφαλίσει ένα όνομα χρήστη και το απαραίτητο συνθηματικό και με τον κατάλληλο εξοπλισμό έμπαινε στη BBS. Δεν μιλάμε για διαδίκτυο. Αν και φαίνονται αυτά που περιγράφω ότι σήμερα τα κάνει το διαδίκτυο. Αυτό είναι φυσικό γιατί ένα δίκτυο μεταγενέστερο των BBS δεν μπορεί να υπολείπεται σε λειτουργικότητα. Αυτό που δεν υπήρχε στη BBS ήταν το γραφικό περιβάλλον και η ταχύτητα σύνδεσης. Επίσης έπρεπε κανείς να συνδεθεί απ΄ ευθείας με το πάροχο της BBS. 

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

Σήμερα όχι μόνο έχουμε τύπους αρχείων ανοικτούς και κοινούς, αλλά έχουμε δωρεάν πλατφόρμες εφαρμογών και χώρος καταχώρησης αρχείων όπου μπορούμε να δώσουμε δικαιώματα ανάγνωσης και επεξεργασίας! Και φυσικά προχωρήσαμε ακόμα περισσότερο. Δώσαμε περιθώρια να έχουμε προσωπική ανάδραση για εκείνα που κάνουμε στο διαδίκτυο, από ένα like στο Facebook μέχρι το σχόλιο στο blog. Δεν μείναμε λοιπόν στο αρχείο και στο πώς θα το «χαρούμε» αύριο ή σε πέντε χρόνια, αλλά τα δεδομένα μας είναι περισσότερο πιο ζωντανά, και επιζητούν και την επικύρωση των άλλων.

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

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

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

Ναι υπάρχει και αυτό προέκυψε λόγω ακριβώς της ύπαρξης της παραπάνω ευκολίας. Ενώ στον υπολογιστή έχει κανείς μια τάξη, μια οργάνωση θέσεων για τα αρχεία του, και ελπίζει ότι όταν λέει C θα εννοεί τον δίσκο C, στο διαδίκτυο όλα είναι ρευστά. Ένα αρχείο μπορεί να βρίσκεται σε πολλά μέρη, σε πολλές εκδόσεις (άρα ουσιαστικά να είναι τροποποιήσεις ενός αρχικού, είναι άλλα αρχεία). Πρέπει δηλαδή κανείς να αναζητήσει το αρχείο που θέλει. Προφανώς για τα δικά του αρχεία γνωρίζει που θα τα βρει, αλλά εδώ βλέπουμε ότι η τριβή στο διαδίκτυο γίνεται κατά κύριο λόγο με αρχεία άλλων. Αλήθεια ποιος βλέπει μόνο την δική του σελίδα στο διαδίκτυο; Έτσι φεύγουμε από την δικτατορία του χρήστη, που αποφασίζει τι και που θα βάλει κάτι στο δίσκο του, και πάμε στην δημοκρατία του κυβερνοναύτη. Κυβερνοναύτης λέγεται ο χρήστης του διαδικτύου, από την επιστήμη που λέγεται «κυβερνητική» και το «ναύτης» αυτός που «πλέει» στο χώρο της «κυβερνητικής». Το διαδίκτυο θεωρήθηκε χώρος της κυβερνητικής, γιατί αυτή η επιστήμη δίνει τα εργαλεία για τη διαχείριση της πληροφορίας.

Η Κυβερνητική είναι η επιστήμη που «αναζητεί» τα σημεία αυτοκαταστροφής σε συστήματα κάνοντας αλλαγές στους κανόνες τους πριν αυτά εκδηλωθούν, άρα χρειάζεται την πληροφορία για να προσδιορίσει το τι θα αλλάξει! Με απλά λόγια η επιστήμη αυτή δεν φαίνεται να έχει σχέση με το διαδίκτυο, πέρα από την σχέση που έχει ο μαθηματικός με το καλό φαγητό. Το καλό φαγητό στηρίζεται σε σωστές μαθηματικές αναλογίες, κάτι που χειρίζεται και ένας μαθηματικός! Το διαδίκτυο στηρίζεται στην πληροφορική κάτι που χρησιμοποιεί και ο επιστήμονας της Κυβερνητικής! Έτσι ενδιαφέρον παρουσιάζει το γιατί καταλήξανε κάποιοι μεγάλοι επιστήμονες να μιλάνε για κυβερνοναύτες!

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

Συνοψίζοντας, η διαχείριση της πληροφορίας, των δημοσιευμένων αρχείων, αλλάζει την ζωή μας. Αυτά που συμβαίνουν γύρω μας έχουν πάρει το δρόμο τους κατά ένα βαθμό μέσα από τα συμβάντα στο διαδίκτυο. Το αποτέλεσμα του διαδικτύου είμαστε εμείς! Το διαδίκτυο είναι ο χρήστης μας, ο ελεγκτής μας (όπως ο υπολογιστής που παίζει το ρόλο ελεγκτή, όπως αναφέρω στη προηγούμενη ανάρτηση). Το διαδίκτυο είναι αυτοματισμός, αυτορύθμιστος!


Πέμπτη 24 Απριλίου 2014

Από τα Δεδομένα στο Πρόγραμμα


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

Σε έναν υπολογιστή λοιπόν το δεδομένο κάθεται ως αριθμός σε ένα φυσικό χώρο, όπως τη μνήμη. Ο χρόνος του συμβάντος που ορίζει το δεδομένο εξαρτιέται από το πόσο θα παραμείνει στο φυσικό του χώρο. Ένα πάτημα του πλήκτρου Enter είναι μια εισαγωγή δεδομένου. Αυτό το δεδομένο πριν γίνει εντολή θα πάρει μια σειρά σε ένα χώρο υποδοχής. Αυτό γίνεται για να δώσει χρόνο στο σύστημα να κάνει και άλλα πράγματα. Η αποθήκευση σημαίνει χρόνος στον υπολογιστή. Κάποια στιγμή το συμβάν "πάτημα πλήκτρου Enter" θα ολοκληρωθεί. Τότε το δεδομένο θα χαθεί, ενώ θα υπάρχει το αποτέλεσμα. Κάθε αποτέλεσμα περιλαμβάνει την εκκίνηση ή τον τερματισμό ενός άλλου συμβάντος, δηλαδή επίδραση στο χρόνο διαδικασιών!

Μπορούμε λοιπόν να βλέπουμε το τι γίνεται σε έναν υπολογιστή αναγνωρίζοντας τις διαδικασίες που εκτελούνται ή κατανοώντας το τι αποθηκεύεται και πού!  Το πρώτο είναι πολύ δύσκολο. Είναι μια γνώση που την κατέχει ο προγραμματιστής και για το τμήμα  του τύπου των δεδομένων που δούλεψε. Το δεύτερο είναι πιο εύκολο αν το απλοποιήσουμε, αν δηλαδή από την γνώση της αποθήκευσης εξαιρέσουμε τους τυχόν χώρους υποδοχής (προσωρινή μνήμη) και ασχοληθούμε με τους χώρους όπου τα δεδομένα μένουν για πολύ χρόνο.

Ένα αρχείο στο δίσκο είναι δεδομένα που μένουν για αρκετό χρόνο. Ένα αρχείο mp3 μουσικής είναι σειρά από δεδομένα που μπορούν να παράγουν ήχο!  Όχι μέσα στο αρχείο, εκεί είναι απλά αριθμοί! Αποτελείται από αριθμούς εντολές για το πρόγραμμα που ελέγχει το σύστημα παραγωγής ήχου. Τα δεδομένα δεν είναι η διαδικασία! Και αυτό φαίνεται με την απλή σκέψη ότι το αρχείο mp3 μπορεί να ξαναπαίξει μια οποιαδήποτε άλλη φορά. Τα δεδομένα δηλώνονται ως όρισμα στη διαδικασία αναπαραγωγής. Ορίζουμε δηλαδή ότι ο "παίκτης" μουσικής θα παίξει αυτό το αρχείο, αυτά τα δεδομένα.

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

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

Όπως είδαμε ένα αρχείο μουσικής είναι δεδομένα που αποτελούν εντολές ενός προγράμματος που παράγει μουσική. Είδαμε ότι μαζί με αυτά τα δεδομένα υπάρχει το όνομα και η θέση του. Χωρίς να πάμε στο πώς τελικά ξεκινάμε μια διαδικασία σε λεπτομέρειες, θα πρέπει να σκεφθούμε ότι μια διαδικασία παραγωγής μουσικής πρέπει να ζητάει δεδομένα όπως όνομα αρχείου και θέση. Επίσης πρέπει να βρει σε αυτό το αρχείο δεδομένα! Ενώ λοιπόν το όνομα και η θέση αποτελούν παράμετροι για να ξεκινήσει η διαδικασία, τα δεδομένα στο αρχείο δεν είναι απαραίτητο να βρίσκονται εκεί. Κάθε αρχείο έχει επίσης ένα μέγεθος. Όπως κάθε δεδομένο έτσι και το μέγεθος έχει το μηδέν που δηλώνει την έλλειψη (διάβασε παραπάνω που εξηγώ τη απουσία ή έλλειψη). Έτσι ένα αρχείο μπορεί να έχει όνομα και θέση αλλά να μην έχει μέγεθος, ή όπως πρέπει να λέμε, έχει μέγεθος μηδέν. Υπάρχει όμως ένας τρόπος αναφοράς για όλα τα αρχεία όπου το μέγεθος έχει κοινή μονάδα. Δηλαδή το μέγεθος ένα σημαίνει ακριβώς το ίδιο πράγμα σε όλα τα αρχεία. Αυτό είναι η ψηφιολέξη ή η ομάδα δυαδικών ψηφίων, αριθμημένα μάλιστα από το μικρότερης σημαντικότητας ψηφίο έως το υψηλότερης σημαντικότητας ψηφίο (bit, μπιτ, τιμές 0 ή 1). Η ψηφιολέξη αν είναι των οκτώ ψηφίων τότε ονομάζεται byte (μπάιτ). Έτσι κάθε αρχείο μπορεί να εκφραστεί σε μέγεθος μπάιτς, και περιλαμβάνεται και το μέγεθος μηδέν. Μάλιστα μας αρέσει να το λέμε το μέγεθος,  κοινό σε όλα τα αρχεία, ως μήκος αρχείου. Μηδενικό μήκος έχει όποιο αρχείο δεν έχει δεδομένα (μπορεί να πάρει σε άλλο χρόνο), αλλά υπάρχει ως όνομα σε κάποια θέση. Ουσιαστικά η περιγραφή ενός αρχείου με όνομα, θέση και μήκος είναι δεδομένα που θα γίνουν όρισμα για τη διαδικασία παραγωγής μουσικής. Αν δεν υπάρχουν δεδομένα μέσα στο αρχείο τότε η διαδικασία δεν θα παίξει τίποτα! Αν όμως δίναμε όνομα που δεν υπήρχε ή θέση που δεν υπήρχε...τότε η διαδικασία  δεν θα έπαιζε τίποτα και θα γύρναγε μήνυμα λάθους. Δηλαδή τα λάθος δεδομένα είναι εντολές που αντιλαμβάνεται η διαδικασία και προκαλούν το αποτέλεσμα της επίδοσης μηνύματος σφάλματος.

Μια σκέψη για ένα πράγμα που πρέπει να ξεκαθαρίσουμε. Μια ομάδα δεδομένων  είναι ένα σύνολο αριθμών που θα βρίσκονται σε μια μνήμη για κάποιο διάστημα, και αυτοί οι αριθμοί αποτελούν εντολές για εκείνη τη διαδικασία που θα οριστεί να "επεξεργαστεί" τα δεδομένα. Τα δεδομένα μπορούν να αλλάζονται ή όχι, αλλά μπορούν και να σβήνονται. Σβήσιμο σημαίνει δυο πράγματα στον υπολογιστή. Αν κάτι αναφέρεται με όνομα, να μην υπάρχει πια αυτό το όνομα και αυτό λέγεται σβήσιμο αναφοράς. Το άλλο σβήσιμο είναι η αλλαγή! Δηλαδή αν ένα δεδομένο έχει ένα αριθμό έστω το δέκα με την αλλαγή του σε οκτώ...σβήσαμε το δέκα. Κάθε αλλαγή προκαλεί την απόρριψη ενός δεδομένου και την δημιουργία ενός νέου.

Ένα παράδειγμα του τι πραγματεύομαι στο προηγούμενο έχει να κάνει με το συρτάρι και το μπαλάκι. Το δεδομένο δεν είναι το μπαλάκι που βάζω στο συρτάρι, αλλά το συρτάρι μαζί με το μπαλάκι. Η όποια επεξεργασία για να γίνει χρειάζεται να ξέρω το συρτάρι, και για το τι θα γίνει θα το κατευθύνει το μπαλάκι! Αν αφαιρέσω το μπαλάκι από το συρτάρι με την διαδικασία "σκούπα", όταν πάω να παίξω το μπαλάκι με την διαδικασία "παίξε μπαλάκι"...δεν θα γίνει το προσδοκώμενο. Εδώ έχουμε την περίπτωση αλλαγής δεδομένων! Η πρώτη διαδικασία έκανε την αλλαγή, ή το σβήσιμο! Ο άλλος τρόπος να μην ξεκινήσει η διαδικασία "παίξε μπαλάκι" ενώ δεν έχει προηγηθεί σβήσιμο, είναι να δώσουμε άλλο συρτάρι ως όρισμα!

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

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


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

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

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

Πέμπτη 17 Απριλίου 2014

Από τον Αριθμό στα Δεδομένα


Πώς από τον αριθμό φθάσαμε στα «δεδομένα» ή data; Σε αυτό το ερώτημα θα προσπαθήσω να απαντήσω.
Στην εκμάθηση των υπολογιστών αυτό που παίζει περισσότερο είναι η πλευρά του δεδομένου και όχι του αποτελέσματος. Το αποτέλεσμα είναι προϊόν επεξεργασίας άρα αποτελεί γνώση της διαδικασίας, άρα γνώση της εισαγωγής δεδομένων. Η πρώτη εργασία κάποιου σε υπολογιστή είναι το data entry, ή πέρασμα δεδομένων.
Στους υπολογιστές υπάρχουν τέσσερις βασικοί διαφορετικοί συμβολισμοί αριθμών ανάλογα με τη χρήση. Η απεικόνισή ενός αριθμού έχει να κάνει και με το είδος του αλλά δεν θα μας απασχολήσει εδώ. Για αυτό το κείμενο η απεικόνισή ενός αριθμού θα είναι μια σειρά συμβόλων (ψηφία και ειδικοί χαρακτήρες), με μια από τις παρακάτω ιδιότητες. Αυτός ο αριθμός μπορεί να δηλώνει ποσότητα «πόσα από ένα είδος», το οποίο μπορεί ή όχι να μεταβληθεί ανάλογα το τι είναι το είδος, ή να δηλώσει όριο «ταβάνι» ή «οροφή» ή «κατώφλι» (τα όρια δεν μεταβάλλονται στη χρήση), ή να δηλώσει δείκτη (π.χ. το στοιχείο 5), ή το επιπλέον (ο σταθερός αριθμός σε έναν μεταβαλλόμενο αριθμό, το λεγόμενο offset).
Θα ξεκινήσω από το τέλος γιατί έχει τη μεγαλύτερη σημασία, και ελάχιστοι το «μαθαίνουν» αφού όλα αυτά μένουν κρυφά μέσα στα προγράμματα «εφαρμογές»
Το «επιπλέον» μας λέει για μια απόσταση όπου αυτή δεν μεταβάλλεται, για έναν άλλο αριθμό που αυτός μεταβάλλεται. Από μόνο του ένα επιπλέον δεν μπορεί να υπάρξει, όμως έχει τη δική του αξία, γιατί βάσει της πρόσθεσης «δείκτη» και «επιπλέον» στρώνουμε τα δεδομένα μας (το οποίο δεν μπορούμε να το αντιληφθούμε άμεσα). Π.χ. σε μια μοτοσυκλέτα υπάρχει μια θέση για τον οδηγό και μια επιπλέον. Η επιπλέον εδώ είναι η δεύτερη θέση, και βγαίνει με τύπο! Αν η 1η θέση είναι του οδηγού και μία θέση επιπλέον υπάρχει για τον συνοδηγό, τότε αυτή η θέση θα είναι η 1+1=2...η δεύτερη. Εδώ προσθέτω το δείκτη (1η θέση) με το επιπλέον (1η ΘΕΣΗ) και λαμβάνω τον δείκτη (2η θέση). Τα«θέση» με μικρά είναι δείκτες. Το «ΘΕΣΗ»είναι το επιπλέον (offset), δεν είναι δείκτης αλλά αν τον προσθέσουμε σε δείκτη τότε προκύπτει δείκτης! Όταν κάποιος στρώνει ένα τραπέζι βάζει σε όλες τις θέσεις από ένα πιάτο (1ος δείκτης) και βάζει αριστερά ένα πιρούνι (1ο επιπλέον) και δεξιά ένα μαχαίρι (2ο επιπλέον). Στο μυαλό του δηλαδή δεν έχει μόνο τη θέση του κάθε πιάτου αλλά και την σχετική θέση του κάθε επιπλέον πράγματος. Το επιπλέον λοιπόν είναι η σχετική θέση, ή δείκτης, αλλά μπορεί να νοηθεί ως μια «σταθερή» απόσταση, και πως θα είναι πάντα εκεί..(δεν αλλάζει). Φυσικά κάποιος αν σερβίρει σούπα θα βάλει άλλο πιάτο και ένα μόνο κουτάλι. Αυτό όμως είναι άλλο σερβίρισμα. Το ότι έχει κοινά στοιχεία δεν μας λέει ότι «αλλάξαμε» το σερβίρισμα «πιάτο με μαχαίρι και πιρούνι». Αν θέλουμε αλλάζουμε σχέδιο πιάτου και μαχαιροπίρουνων και πάλι θα έχουμε το ίδιο σερβίρισμα. Επίσης για εκείνον που «διαφωνεί» με την χρήση των «επιπλέον» θα μπορούσε να δει τον σερβιτόρο να στρώνει το τραπέζι σε τρεις φάσεις, από μια για κάθε είδος, μια για πιάτα, μια για μαχαίρια και μια για πιρούνια, και να πει ότι δεν υπάρχει «επιπλέον». Ακριβώς το λάθος είναι σε αυτό που παραβλέπει...ότι αφού έβαλε ο σερβιτόρος τα πιάτα...όταν πήγε να βάλει τα μαχαίρια δεν τα έριξε πάνω στα πιάτα αλλά τα έβαλε σε απόσταση από τα πιάτα (να το επιπλέον). Όπως και να κάνει κανείς δεν γίνεται να μην χρησιμοποιήσει το επιπλέον σε «ομαδοποιήσεις» δεδομένων.
Σε μια στοίβα πιάτα κάθε πιάτο πάνω από το πρώτο αποτελεί το επιπλέον. Εδώ θα παρουσιάσω το σφάλμα του 1+1. Η πληγή των πληροφορικών είναι το σφάλμα του 1+1. Στο παράδειγμα με την στοίβα, κάθε πιάτο αντιστοιχεί σε ένα δείκτη, και έχουμε δέκα πιάτα. Μπορούμε να ξεκινήσουμε από το 1 ή από το 0, αρκεί να το γνωστοποιήσουμε. Επειδή το παράδειγμα έχει πιάτα, θα πούμε ότι το πιάτο στη βάση της στοίβας είναι το 1 ή πρώτο. Το δέκατο πιάτο θα είναι επιπλέον του πρώτου το ένατο, γιατί το 10ο (δείκτης) είναι το 9ο επιπλέον (1ος δείκτης +9ο επιπλέον =10ος δείκτης). Αν ξεκίναγα με δείκτη 0 τότε το δέκατο πιάτο θα είναι επιπλέον του πρώτου...το όγδοο, στο 1 πήραμε το επιπλέον 9ο, στο λιγότερο θα πάρουμε ακόμα πιο λίγο. Άρα για να λέμε ότι το δέκατο είναι το επιπλέον 10, δοκιμάζουμε το 1+1, αφού το 1 δεν βγήκε, και το προς τα πίσω τα χειροτέρεψε θα πάμε μπροστά! Δηλαδή ότι το πρώτο έχει δείκτη 2. Αλλά έτσι γίνεται το εξής: Δείκτης 2+επιπλέον 10..θα πάρουμε Δείκτη 12...πέσαμε έξω δυο θέσεις που δεν έχουμε πιάτα. Σε καμία περίπτωση δεν βγαίνει επιπλέον δέκα! Για να μιλάμε για το επιπλέον δέκα πρέπει να έχουμε έντεκα πιάτα! Το επιπλέον δέκα είναι το 11ο στη σειρά. Το πρώτο είναι πρώτο ανεξάρτητα το νούμερο του δείκτη του. Το νούμερο του πρώτου είναι απλά σύμβαση, θα το λέγαμε 0 ή 1. Το επιπλέον 0 δείχνει το πρώτο πάντα της ομάδας, και δεν είναι θέμα σύμβασης, είναι ανεξάρτητο από το όποιο νούμερο του δείκτη! Με απλά λόγια το επιπλέον (offset) χρησιμοποιείται ως «σχετική θέση» και «σημαδεύει» την ίδια θέση για οποιοδήποτε ομάδα πληροφορίας ανεξάρτητα από το που είναι το πρώτο μέλος της ομάδας. Αυτή η πρόταση περικλείει τη ιδέα της αρχειοθέτησης στους υπολογιστές. (ειδικά αν σκεφτεί κανείς ότι κάθε πρώτο μέλος βρίσκεται ως το επιπλέον ενός άλλου...και όλα τελικά έχουν μια αρχή...όπως η βάση μιας ρίζας)
Όταν συζητάμε για ποιότητες καμία φορά γίνεται αναφορά με αριθμούς. Π.χ. ξενοδοχείο «5 αστέρων». Ουσιαστικά όμως πρόκειται για δείκτη, που δείχνει σε ένα πίνακα «αστέρων» και αυτός κάπου έχει την ξεχωριστή ένδειξη 5. Άλλο παράδειγμα... στη φράση «έκανε τριπλή τούμπα» δηλώνουμε πλήθος, ποσότητα, ενώ «έκανε την στροφή 3» σημαίνει πέρασε από τη στροφή με δείκτη 3. Η ύπαρξη του δείκτη έρχεται από μια σύμβαση. Κατά τη δική μας σύμβαση έχει έννοια ο δείκτης και μόνο. Πολλές φορές χρησιμοποιούμε αριθμό σειράς. Εδώ τα πράγματα είναι λίγο πιο συγκεχυμένα. Π.χ. για ένα αγοραστή ενός είδους ο αριθμός σειράς δεν του λέει τίποτα, αφού μόνο με το όνομα είδους και εταιρείας παραγωγής είναι ικανοποιημένος, ή ακόμα και με το χρώμα της συσκευασίας, αν μπορεί να παίξει το ρόλο αναγνωριστικού. Αν όμως υπάρξει πρόβλημα με την παρτίδα του εμπορεύματος ο αριθμός σειράς είναι ο δείκτης στην ουσία, απ όπου μπορούν να βρεθούν παρόμοια εμπορεύματα για έλεγχο. Ο αριθμός αυτός δηλαδή παίζει ένα ρόλο αναφοράς μόνο σε ειδική περίπτωση, είναι όμως ένας αριθμός αναφοράς - ταυτότητας. Ξεκάθαρα όμως αυτό που μας κάνει άμεσα να αναγνωρίζουμε κάτι είναι το όνομά του. Ένα όνομα είναι μια συμβολοσειρά χαρακτήρων με περισσότερους χαρακτήρες από έναν αριθμό και με όχι προκαθορισμένο μέγεθος (πλήθος χαρακτήρων). Αν υπολογίσουμε και το διάστημα μέσα στους χαρακτήρες μιας συμβολοσειράς τότε σε μια τέτοια θα μπορούσαμε να βάλουμε ολόκληρη παράγραφο. Αν μάλιστα βάλουμε και έναν ειδικό χαρακτήρα, αυτόν της αλλαγής γραμμής, τότε θα έχουμε πολλές παραγράφους. Οι χαρακτήρες αντιστοιχούν σε δείκτες που δείχνουν στα γράμματα που βλέπουμε (και το διάστημα είναι δείκτης). Ουσιαστικά οι δείκτες είναι σαν τις εντολές...λένε «δες αυτό θέλω» σε ένα πρόγραμμα που ανταποκρίνεται σε αυτό. Έτσι για να ζητήσουμε την αλλαγή γραμμής πρέπει να δώσουμε τον δείκτη που δείχνει την αλλαγή γραμμής.
Εμείς βλέπουμε στην οθόνη μας χαρακτήρες «με τάξη» και έχουν νόημα για μας, ο υπολογιστής βλέπει δείκτες που είναι εντολές για εμφάνιση γραμμάτων. Σε κάθε περίπτωση, ο καθένας, εμείς και ο υπολογιστής, έχει το δικό του πινακάκι ανάγνωσης «δεικτών». Όπως όμως είδαμε παραπάνω η σύμβαση για τους δείκτες είναι δική μας! Εμείς έχουμε δώσει τις γραμματοσειρές στον υπολογιστή! Κάθε δεδομένο λοιπόν που δίνουμε στον υπολογιστή το θέτουμε σε μια σύμβαση και από αυτή βγαίνουν προγράμματα που επεξεργάζονται τα «κατά σύμβαση» δεδομένα. Π.χ. ένας επεξεργαστής κειμένου δεν επεξεργάζεται ένα «οποιοδήποτε» κείμενο, αλλά ένα κείμενο που περιέχεται στη σύμβασή του, μια σύμβαση που έχει υλοποιηθεί με το πρόγραμμα και περιγράφονται στο εγχειρίδιο της βοήθειας. Στη δεκαετία του 1970 δεν υπήρχε το «αυτό που βλέπεις αυτό θα τυπώσεις» στους επεξεργαστές κειμένου. Έφτιαχνες ένα κείμενο αλλά έπαιρνες αυτό που τύπωνες..ανάλογα τον εκτυπωτή που τύπωνες! Ο εκτυπωτής είχε δική του μήτρα χαρακτήρων και τύπωνε τη δική του γραμματοσειρά. Και αυτή είναι η πιο μικρή «διαφορά»!
Συνοψίζοντας τα δεδομένα αποτελούν «εντολές» ως αριθμοί που κατευθύνουν τα προγράμματα όπως ο προγραμματιστής τους έχει αποφασίσει να το κάνει, και το έχει κάνει γνωστό στο χρήστη! Αν δώσουμε λάθος δεδομένα θα πάρουμε λάθος αποτέλεσμα..αφού αυτά θα το κάνουν για μας!