Όπως λέει και ο τίτλος άχρηστες γνώσεις για τους υπολογιστές, που δε σας ενδιαφέρουν και ίσως δεν πρόκειται να σας χρησιμεύσουν ποτέ αλλά παρόλ'αυτά θεωρώ σημαντικό να μείνουν κάπου γιατί μου πήρε χρόνια να τις αποκτήσω. Το άρθρο θα είναι χαοτικό, θα γράφω οτιδήποτε μου έρχεται στο νου. Ξεκίνησα στις 01:02 πμ.
Ο τρόπος με τον οποίο λειτουργεί η τεχνολογία και η επιστήμη είναι να παρατηρούν ένα φαινόμενο και για να το ποσοτικοποιήσουν να χρησιμοποιούν κάποια μοντέλα (μπορεί κάποιος να μου βρει μια σωστή λέξη για το μοντέλο). Συνήθως η περιγραφή αυτή απαιτεί μαθηματικά. Τα μαθηματικά, παρεπιμπτόντως, είναι τέλεια. Τα πραγματικά μαθηματικά δεν έχουν καμία σχέση με αυτά που μαθαίνουμε στο σχολείο ή στο πανεπιστήμιο (δε ξέρω τι μαθαίνουν οι μαθηματικά), αλλά τα πραγματικά μαθηματικά είναι απλώς φανταστικά. Και ναι μπορεί ένας μαθηματικός να μη δουλέψει ως καθηγητής. (Όχι δεν είμαι μαθηματικός)
Επί του θέματος όμως. Τα προβλήματα που εμφανιζονται στην πράξη είναι πολλές φορές πολύ πιο δύσκολα από αυτά που μπορούμε να λύσουμε με χαρτί και μολύβι. (Ακόμη ένα κενό της ελληνικής παιδείας. Στο πανεπιστήμιο λύναμε μόνο ασκήσης-παιχνίδια χωρίς καμια πραγματική εφαρμογή.) Γι'αυτό χρειαζόμαστε τους υπολογιστές. Και υπάρχουν πολλά ελεύθερα προγράμματα που μπορούν να μας βοηθήσουν ακόμη και σε πεδία που δε πάει ο νους μας, όπως υπολογισμός ομάδων συμμετρίας (τι είναι αυτό; δε ξέρω, αλλά ακούγεται ενδιαφέρον, ας ψάξω στο διαδίκτυο--στα αγγλικά λέγεται symmetry group--δε χρειάζεται να καταλάβω σήμερα όλα οσα λέει η http://en.wikipedia.org/wiki/Symmetry_group αλλά ας διευρύνω λίγο τους πνευματικούς μου ορίζοντες, ίσως μου φανεί χρήσιμο στη μουσική ή τη ζωγραφική).
Το απλό θέμα που μαθαίνουμε στις φυσικομαθηματικές-τεχνικές σχολές είναι οι διαφορικές εξισώσεις (τι είναι; ξανά http://en.wikipedia.org/wiki/Differential_equation και ό,τι δε ξέρω χτυπάω το μεσαίο κουμπι και το ανοίγω σε καινούριο tab για να το διαβάσω μετά, έτσι λειτουργώ εγώ). Αλλά μας έμαθε κανείς στο πανεπιστήμιο πώς να τις λύσουμε στον υπολογιστή; Μαθαίνουμε να λύνουμε στο χαρτί μια εξισωση με έναν άγνωστο, αντε αν είναι κανένα δύσκολο θέμα 3x3, αλλά τι κάνουμε με 1000x1000, εεε δε ξέρω. Υπάρχουν διάφορα εργαλεία όπως τα octave/scilab, python με scipy, maxima για αναλυτικούς υπολογισμούς, μετά υπάρχει η http://netlib.org/ μια άπειρη βιβλιοθηκη για fortran (εεε fortran το 2010, σημασία στις γλώσσες προγραμματισμού δεν έχει η σύνταξη, αυτή μαθαίνεται σε μία εβδομάδα/μήνα/χρόνο σημασία έχει ο τρόπος σκέψης) Αλλά αυτά είναι τόσο απλά για τις συνήθεις διαφορικές εξισώσεις, τι γίνεται με τις μερικές;
Α εκεί χρειαζόμαστε πρώτα πλέγμα. Το πρόβλημα είναι το εξής: έχουμε μια πηγή θερμότητας, το καλοριφερ, και θέλουμε να δούμε πως είναι η κατανομή της θερμότητας στο δωμάτιο. Όσο παράξενο κι αν ακούγεται κάτι τέτοιο μπορούμε να το υπολογίσουμε με open source εργαλεία. Μπορούμε ακόμη να υπολογίσουμε το μαγνητικό πεδίο μέσα σε ένα μαγνήτη αν βάλουμε ένα ξένο σώμα μέσα στο μαγνητη. Αυτό δεν είναι τίποτε άλλο από το μαγνητικό τομογράφο. I am no kidding.
Υπάρχουν ελεύθερα προγράμματα που σχεδιάζεις τη γεωμετρία, και έπειτα δημιουργείς το πλέγμα, το οποίο δεν είναι τίποτε άλλο από μια διακριτοποίηση, και επειτα λύνεις την εξίσωση με πεπερασμένο πλήθος αγνώστων.
Tα τρισδιάστατα γραφικά είναι κι αυτά μαθηματικά αντικείμενα τα οποία ειναι έτσι προγραμματισμένα ώστε να κάνουν αυτά που κάνουν. Όταν μεταφέρουμε με το ποντίκι ένα παράθυρο από εδώ εκεί αυτό δεν είναι τίποτε άλλο από μερικούς γραμμικούς μετασχηματισμούς των pixel.
Τα προγράμματα επεξεργασίας ήχου δεν εφαρμόζουν τίποτε άλλο από αλγόριθμους ψηφιακών φίλτρων (digital filters) σε μία χρονοσειρα (η χρονοσειρά δεν είναι καμια άλλη από το μουσικό κομμάτι). Παρόμοια και με την επεξεργασία εικόνας, μόνο που εκεί τα πράγματα είναι 2D, ενω σε μία ταινία είναι 3D (2D λόγω χώρου και 1 διάσταση ο χρόνος) Αλήθεια τι μέσο θα είχε παραπάνω από 3 διαστάσεις;
Και μετά έχουμε σε μία τελείως διαφορετική κατεύθυνση τα συστήματα διαχείρησης πελατών (crm), αποθήκης και λογιστηρίο (ERP) και άλλα πολλά. Αυτά πώς μπορούμε να τα συνδέσουμε με τα μαθηματικά; Ιδέες; Να βάλουμε τα ψηφιακά φίλτρα να τρέχουν στη χρονοσειρά των αποθεμάτων ή των παραγγελιών;
Μετά από αυτόν τον καταιγισμό ιδεών θα μείνω στο αντικείμενο του μεταπρογραμματισμού. Και πάλι δε χρειάζεται κανείς να είναι προγραμματιστής για να διαβάσει. Μπορεί να πάρει ιδέες για άλλες εφαρμογές. Η λέξη μέτα ως πρώτο συνθετικό χρησιμοποιήθηκε για πρώτη φορά από τον Αριστοτέλη για το βιβλίο του "μετά τα φυσικά". Στο βιβλίο αυτό διαπραγματευόταν τη σήμερα γνωστή μεταφυσική. Αλλά η μεταφυσική ως λέξη σήμαινε απλώς ότι ήταν το βιβλίο αφορούσε σκεψεις και προβλήματα που έπονταν το βιβλίο της φυσικής. Και από τότε η λέξη μέτα χρησιμοποιείται στα μεταμαθηματικά, μεταλογική, μεταπρογραμματισμό, μεταnumerics, μεταγλώσσα, κ.α. Παρεπιμπτόντως μεταγλώσσα είναι η γλώσσα όπου εκφέρουμε την αληθεια ή ψεύδος μιας πρότασης. Τη χρησιμοποιούμε καθημερινα ακομη κι αν δεν το συνειδητοποιούμε γιατί αποτελείται από το ίδιο αλφάβητο όπως η γλώσσα. "Σήμερα έβρεξε" ανήκει στη γλώσσα, ενώ "Η πρόταση σήμερα έβρεξε είναι αληθής" ανήκει στη μεταβλώσσα. Αλλά το θέμα μας είναι ο μεταπρογραμματισμός. Τα εργαλεία lex και yacc (υπάρχουν και στο linux) είναι μεταγλώσσες, προγραμματιστικές, τα οποία δημιουργούν κώδικα. Άρα ένας ορισμός του μεταπρογραμματισμού είναι κώδικας που γράφει κώδικα. Το εργαλείο configure χρησιμοποιεί κι αυτό μεταπρογραμματισμό γιατί δημιουργεί τον κώδικα του Makefile τον οποίο θα τρέξει το make. Ta templates της c++ κάνουν την ίδια δουλειά. Και φυσικά στις interpreted γλώσσες κάτι τέτοιο είναι ακόμη πιο εύκολο.
Που ήθελα να καταλήξω; Α ναι. Στο FEniCS. http://www.fenicsproject.org/wiki/FEniCS_Project Κατά τη γνώμη μου είναι ΤΟ ελεύθερο λογισμικό μετά ίσως τον πυρήνα του linux. Όσοι ασχολούνται επιστημονικά με κάποιο αντικειμενο το συνιστώ ανεπιφύλακτα. Χρησιμοποιεί φυσικά τεχνικές μεταπρογραμματισμού. Αλλά και μεταnumerics. Δε μπορώ να μπω σε λεπτομέρειες αλλά δημιουργεί τον κώδικα κατά το runtime. Ουσιαστικά μπορεί να λύσει οποιαδήποτε εξίσωση μπορείτε να φανταστείτε. Φυσικά σε python και C++. Είπα ότι υποστηρίζει και parallel computing;
Σίγουρα έχουμε ακούσει για parallel computing. Και το cloud τι είναι; Shared memory vs distributed memory; Και οι κάρτες γραφικών που κάνουν υπολογισμούς μέχρι να πεις κίμηνο; Μία ώρα τώρα εδώ και με έπιασε πονοκέφαλος. Αλλά δεν τελειώσαμε ακόμη.
Με τον υπολογιστή μπορούμε να ελέγξουμε και ηλεκτρονικές συσκευές (και κατά συνέπεια και ηλεκτρικές). Ο πιο απλός τρόπος είναι η παράλληλη θύρα (θα υπάρξουν στο ubuntistas 2 άρθρα επί του θέματος). pyserial είναι ο τρόπος που ξέρω εγώ, έδινα εντολή σε κάτι κινητηρακια ενός δείκτη στάθμης να πα΄ρουν στροφές αλλά θα μπορούσε κανείς με open source να ελέγξει ολόκληρο πυρηνικό αντιδραστήρα (ευτυχώς που δεν έχουμε στην Ελλαδα, αλλά βιομηχανία πετρελαιου σίγουρα). Και όλος ο έλεγχος θα μπορούσε να περαστει σε ένα server και να γίνεται από το σπίτι μου. Και τι θα συμβεί αν χαλάσει ο server; Δε θα λειτουργεί η εγκατάσταση;
Γι'αυτό υπάρχει ο πυρήνας linux high-availability (HA) oπου πολλά μηχανηματάκια μπορούν να λειτουργουν reduntantly (πάλι μου λείπει η λέξη) Α και προηγουμένως ξέχασα να πω ότι σε ένα σύστημα ελέγχου χρειάζεται πυρήνας real-time που φυσικά υπάρχει και σε linux! Γιατί αν δεν ήταν real-time τότε η εντολή ξεκινα του κινητήρα θα έπρεπε να περιμένει πρώτα να φορ΄τωσει μια σελίδα, πράγμα που φυσικά δε θέλουμε. Tι μας λείπει τότε; Τίποτε. Οι περιορισμοί υπάρχουν μόνο από τη φαντασία μας.
Ερωτήσεις; Ευχαρίστως να τις απαντήσω. Θα ήθελα τέλος να προκαλέσω και άλλους να μοιραστούν τη γνώση τους, στην ίδια φιλοσοφία του ελεύθερου λογισμικού γιατί από το κράτος δεν πρόκειται να βρούμε προκοπή. 02:14 πμ.

