About
Η επιστήμη της Πληροφορικής και ο κόσμος των Ηλεκτρονικών Υπολογιστών αποτελούν τα δύο βασικά ενδιαφέροντα μου.
Οι Πρώτες Εμπειρίες
Η πρώτη μου επαφή με H/Y έγινε το 1993. Φυσικά, αυτός ήταν ο IBM PC, ο οποίος χρησιμοποιούσε τον επεξεργαστή 8088. Επίσης, το λειτουργικό σύστημα το οποίο εκτελούνταν σε αυτόν ήταν το MS-DOS. Στις αρχές δεν με ενδιέφερε και πολύ λόγο του ότι στον ελεύθερο μου χρόνο ασχολούμουν με τις τότε διάσημες παιχνιδομηχανές.
Αν θυμάμαι καλά, από τότε μέχρι και σήμερα κατείχα τις ακόλουθες παιχνιδομηχανές: Game Boy, Sega Mega Drive, SNES, Sega Saturn, Nintendo 64, Sega Dreamcast, PlayStation, PlayStation 2. Φυσικά, το γεγονός ότι αυτή τη στιγμή δεν κατέχω καμία από τις παραπάνω είναι αξιοθαύμαστο. Κάποιες, σίγουρα χάλασαν, άλλες πουλήθηκαν και άλλες χάθηκαν. Τώρα πλέον, σπανίως παίζω ηλεκτρονικά παιχνίδια.
Όταν ξεκίνησα να ασχολούμαι λίγο πιο συνειδητά με τους H/Y (με αφετηρία τον IBM PC), άρχισα να αναρωτιέμαι για τον τρόπο με τον οποίο λειτουργούν. Φυσικά, αυτό το ερώτημα μου απαντήθηκε αρκετά χρόνια μετά. Μπορώ να πω πως για αρκετό καιρό έπαιζα στην γραμμή εντολών του MS-DOS με τις διάφορες εσωτερικές ή εξωτερικές εντολές, για επεξεργασία αρχείων, καταλόγων και την διαχείριση διαφόρων συσκευών εισόδου/εξόδου.
Κάποιες φορές, έτρεχα παιχνίδια και φόρτωνα οδηγούς για συσκευές που ήθελα να υποστηρίξω. Επίσης, δημιουργούσα σενάρια δέσμης για την αυτοματοποίηση εργασιών, ενώ μερικές φορές χρησιμοποιούσα τις γλώσσες προγραμματισμού Basic και Pascal για εκπαιδευτικούς σκοπούς.
Το 1995, όπου η Microsoft κυκλοφόρησε το λειτουργικό σύστημα Windows 95, άρχισα να το χρησιμοποιώ με πολύ ενθουσιασμό επειδή διέθετε ένα πρωτότυπο γραφικό περιβάλλον. Επίσης, μέχρι και σήμερα, έχω χρησιμοποιήσει σχεδόν όλα τα λειτουργικά συστήματα της Microsoft.
Κάποια στιγμή για κάποιο σχετικά μεγάλο διάστημα ασχολήθηκα με οπτικό προγραμματισμό χρησιμοποιώντας τις γλώσσες προγραμματισμού Microsoft Visual Basic, Borland C++, πάλι όμως για εκπαιδευτικούς σκοπούς.
Διαχείριση Υλικού & Αντιμετώπιση Προβλημάτων
Παράλληλα με τον προγραμματισμό σε Visual Basic και Pascal, ξεκίνησα να ασχολούμαι με την τεχνική διαχείριση του υλικού των Η/Υ. Έτσι, αφού πειραματίστηκα 5/10 φορές με διάφορους Η/Υ και αφού έκαψα μερικούς επεξεργαστές κατάφερα να διαχειρίζομαι το υλικό τους. Τότε, άρχισα να ασχολούμαι με τα διάφορα χαρακτηριστικά του υλικού των Η/Υ, με την διαμόρφωση των δίσκων, τον χωρισμό ενός δίσκου σε διαμερίσματα, την χρήση του BIOS, την ρύθμιση ενός δίσκου ως Master ή Slave, την εγκατάσταση/απεγκατάσταση υλικού (π.χ. μνήμες, επεξεργαστές, κάρτες επέκτασης) στην κεντρική μονάδα επεξεργασίας, την εκ του μηδενός συναρμολόγηση και αποσυναρμολόγηση Η/Υ, την εγκατάσταση Λ.Σ, την κατάλληλη διαχείριση του εσωτερικού του Η/Υ για την βελτίωση των επιδόσεων του, την αντιμετώπιση προβλημάτων στο υλικό, κ.λπ.
Εγκατάσταση & Διαχείριση Δικτύων Υπολογιστών
Μαζί με τον προγραμματισμό και την διαχείριση του υλικού των Η/Υ, ασχολήθηκα και με δίκτυα Η/Υ. Κυρίως σε επίπεδο τοπικών δικτύων. Έχω υλοποιήσει αρκετά δίκτυα τόσο σε λειτουργικά συστήματα της οικογένειας Windows αλλά και στο λειτουργικό σύστημα GNU/Linux.
Επίσης, στο παρελθόν ασχολήθηκα με την υλοποίηση: α) εξυπηρετητή αρχείων Samba (εξυπηρετητής: GNU/Linux, πελάτες: Windows), β) εξυπηρετητή σελίδων με: Windows (IIS), GNU/Linux (Apache, PHP, MySQL).
Ενδιαφέρον είχε το σύστημα αρχείων NFS, το οποίο χρειάστηκε να χρησιμοποιήσω για να είναι δυνατή η επικοινωνία μεταξύ GNU/Linux Λ.Σ.
Θεωρώ πως είναι σημαντικό να αναφέρω πως έχω ασχοληθεί και με την διαχείριση δικτύων. Συγκεκριμένα με: Περιορισμοί και δικαιώματα χρηστών (σε επίπεδο αρχείων, συσκευών, υπηρεσιών), Διαμοιρασμός πόρων, Διαχείριση υπηρεσιών και πρωτόκολλα δικτύων, Γενικές έννοιες δικτύων & επικοινωνιών, Τοπολογίες δικτύων, Πρότυπα, Πρωτόκολλα, Αρχιτεκτονικές δικτύων, Μοντέλα OSI & TCP/IP, Ταχύτητα μετάδοσης & Χωρητικότητα καναλιού, Μέσα μετάδοσης, Τεχνικές μετάδοσης, Αναγνώριση & διόρθωση σφαλμάτων, Ψηφιακή Μετάδοση Ψηφιακών Σημάτων, Κώδικες μετάδοσης σημάτων, Μεταγωγή & πολυπλεξία, Τοπικά δίκτυα, CSMA/CD, Ethernet, Token Rιng, FDDI, Ασύρματα δίκτυα, Συσκευές διασύνδεσης, Δίκτυα IP, Διευθυνσιοδότηση, Υποδικτύωση, κ.α.
Επιστήμη της Πληροφορικής & Αρχιτεκτονική Η/Υ
Μέχρι τότε όμως, δεν γνώριζα τον τρόπο με τον οποίο λειτουργούσαν οι Η/Υ. Μπορώ να πω, πως ενώ έπαιζα όμορφες μελωδίες με αυτούς σαν να ήταν μουσικά όργανα δεν γνώριζα την λειτουργία τους στο εσωτερικό. Για αυτό, άρχισα σιγά σιγά να καλλιεργώ γενικότερα τις γνώσεις μου γύρω από την επιστήμη της Πληροφορικής και πιο συγκεκριμένα γύρω από την αρχιτεκτονική τους, με απώτερο σκοπό την κατανόηση του τρόπου λειτουργίας αυτών.
Αφού λοιπόν κατανόησα την αρχιτεκτονική von Neumann, η οποία εισήγαγε τους Η/Υ αποθηκευμένου προγράμματος, άρχισα σιγά σιγά να μπαίνω στον μικρόκοσμο των Η/Υ. Χρειάστηκε να γνωρίσω το δυαδικό σύστημα αρίθμησης, την δυαδική λογική, την σχεσιακή άλγεβρα, τις αρχές των ψηφιακών κυκλωμάτων, την εσωτερική αναπαράσταση, αποθήκευση και διαχείριση της πληροφορίας από τους Η/Υ, τον τρόπο λειτουργίας των διαφόρων συστατικών των Η/Υ και τις βασικές αρχές του δομημένου προγραμματισμού.
Έτσι, μόλις κατανόησα τον τρόπο λειτουργίας των Η/Υ (εάν κάποιος επιθυμεί να κατανοήσει τον τρόπο λειτουργίας των Η/Υ θα πρέπει να ξεκινήσει από τα παλαιότερα συστήματα, λόγο του ότι ήταν απλούστερα των σημερινών), πιο συγκεκριμένα τον τρόπο εκτέλεσης των προγραμμάτων και την εσωτερική διαχείριση της πληροφορίας (κυρίως τον τρόπο λειτουργίας του επεξεργαστή, της μνήμης, και της συνεργασίας αυτών, όσο αφορά την εκτέλεση προγραμμάτων), είχα για πρώτη φορά την επιθυμία να συγγράψω προγράμματα σε χαμηλό επίπεδο.
Προγραμματισμός Χαμηλού Επιπέδου
Και έτσι έγινε, μετά από πολύ σύντομο χρονικό διάστημα ήμουν έτοιμος να συγγράφω προγράμματα σε χαμηλό επίπεδο, αφού πλέον οι γλώσσες υψηλού επιπέδου, μου ήταν περιττές (λόγο του ότι μπορούσα να μιλήσω πλέον στον Η/Υ απευθείας στην γλώσσα του).
Κυρίως, ασχολήθηκα με τον επεξεργαστή 8086 της Intel και με βάση αυτόν έγραψα στην συμβολική του γλώσσα μερικά προγράμματα. Κάποια στιγμή αργότερα ασχολήθηκα με τον 8088 της Intel στο αναπτυξιακό σύστημα BGC-8088. Θυμάμαι που είχα συγγράψει ένα πρόγραμμα το οποίο έπαιζε μελωδίες χρησιμοποιώντας το εσωτερικό μεγαφωνάκι του συστήματος, καθώς επίσης και ένα το οποίο χειριζόταν τις διόδους εκπομπής φωτός της μητρικής πλακέτας. Είναι ωραίο πράγμα η συγγραφή προγραμμάτων σε χαμηλό επίπεδο. Εύχομαι όλοι οι Πληροφορικοί να το ζήσουν, έστω και μια φορά.
Βέβαια, τότε διαπίστωσα και εκ πείρας πως οι Η/Υ δεν έχουν τελικά καθόλου νοημοσύνη. Ξέρετε, ανά τακτά χρονικά διαστήματα, εμφανίστηκαν άνθρωποι, όπου ανέφεραν πως οι Η/Υ έχουν πολύ μικρή νοημοσύνη. Όσοι όμως έχουν ασχοληθεί σοβαρά με τους Η/Υ και δεν είναι φαντασιόπληκτοι γνωρίζουν καλά πως οι Η/Υ δεν έχουν καθόλου συνειδητή νοημοσύνη και πως καθοδηγούνται απόλυτα από τους προγραμματιστές.
Προγραμματισμός Λειτουργικών Συστημάτων
Ένας άλλος κλάδος των Η/Υ με τον οποίο ασχολήθηκα είναι η ανάπτυξη και η σχεδίαση λειτουργικών συστημάτων.
Έτσι, μετά από πολύ μελέτη όσο αφορά των αρχών σχεδίασης Λ.Σ κατανόησα αρκετά ζητήματα των Λ.Σ, όπως: διεργασίες, νήματα, πυρήνας και κέλυφος, σύστημα αρχείων, διακοπές και σήματα, διαχείριση πόρων, κλήσεις συστήματος, χάρτης μνήμης, μεταγωγή περιβάλλοντος, στοίβα, κρυφή και εικονική μνήμη, χρήστες και ταυτοποίηση, δικαιώματα και ασφάλεια, καταμερισμός χρόνου, πολυεπεξεργασία και πολυδιεργασία, υπηρεσίες και θήρες, χρονοδρομολόγηση και αλγόριθμοι, ενδοδιεργασική επικοινωνία, προτεραιότητες, αμοιβαίος αποκλεισμός, κρίσιμα τμήματα, σηματοφόροι και σημαίες, αποκλειστικά κλειδώματα, αδιέξοδα, σελιδοποίηση, κατάτμηση, οδηγοί συσκευών, υποδοχές, κωδικοποίηση δεδομένων, πρωτόκολλα διαδικτύου, και πολλά άλλα.
Κατασκευή Μεταγλωττιστών Γλωσσών Προγραμματισμού
Αξίζει να αναφερθεί πως έχω ασχοληθεί αρκετά στο παρελθόν με την ανάπτυξη και την σχεδίαση μεταγλωττιστών. Συγκεκριμένα, έχω ασχοληθεί με την ανάπτυξη λεξικών αναλυτών, συντακτικών αναλυτών, σημασιολογικών αναλυτών και εικονικών μηχανών.
Επίσης, η ενασχόληση μου με το ζήτημα των μεταγλωττιστών μου καλλιέργησε την επιθυμία να αναπτύξω μια δική μου γλώσσα προγραμματισμού. Αυτό βέβαια προαπαιτούσε την ανάπτυξη ενός μεταγλωττιστή. Έτσι και έγινε. Ξεκίνησα το έργο `YAFL‘ το οποίο αναφέρεται στην ανάπτυξη μιας διαδικαστικής γλώσσας προγραμματισμού με το όνομα YAFL (Yet Another Free Language) καθώς και του μεταγλωττιστή αυτής.
Η γλώσσα προγραμματισμού YAFL αποτελεί εργαλείο για την εκμάθηση των βασικών αρχών του διαδικαστικού προγραμματισμού στους μαθητές της δευτεροβάθμιας εκπαίδευσης και γενικότερα στους αρχάριους.
Προγραμματισμός Πυρήνων Λειτουργικών Συστημάτων
Παράλληλα με τα παραπάνω, αξίζει να αναφερθεί, πως ασχολήθηκα σε προγραμματιστικό επίπεδο με τον πυρήνα Linux (ο οποίος μαζί με το σύστημα GNU συνθέτουν το Λ.Σ GNU/Linux). Λόγο του ότι ο πυρήνας Linux είναι Ελεύθερο Λογισμικό, μου έδωσε την δυνατότητα να ασχοληθώ και να κατανοήσω τον τρόπο με τον οποίο λειτουργούν τα διάφορα τμήματα ενός πυρήνα (στην συγκεκριμένη περίπτωση ενός μονολιθικού).
Προγραμματισμός Ενσωματωμένων Συστημάτων
Τα περισσότερα από τα παραπάνω τα έχω ήδη δει στην πράξη, ενώ κάποια από αυτά τα έχω αναλύσει μόνο σε θεωρητικό επίπεδο. Φυσικά, αναγκάστηκα να ασχοληθώ με την γλώσσα προγραμματισμού C λόγο του ότι ο προγραμματισμός Λ.Σ γίνεται κυρίως σε αυτήν (είναι η καταλληλότερη γλώσσα για προγραμματισμό συστημάτων). Οφείλω να ομολογήσω πως αυτός ο κλάδος είναι ο πιο συναρπαστικός. Βέβαια, η αγάπη μου για τα Λ.Σ δεν σταμάτησε αλλά επεκτάθηκε, αφού αργότερα ασχολήθηκα με την θεωρία του προγραμματισμού ενσωματωμένων συστημάτων σε C.
Μία πλατφόρμα στην οποία έχω δουλέψει αρκετά και έχω αναπτύξει κώδικα για διάφορες εφαρμογές ενσωματωμένων συστημάτων είναι το Arduino. Το Arduino είναι μια πλατφόρμα ελεύθερου λογισμικού για την ανάπτυξη αυτόνομων ενσωματωμένων συστημάτων. Η γλώσσα προγραμματισμού με την οποία γίνεται η συγγραφή των προγραμμάτων σε αυτό είναι η C. Μπορείτε να περιηγηθείτε στην σελίδα των έργων μου ώστε να εντοπίσετε τις διάφορες εφαρμογές που έχω αναπτύξει με αυτό.
Βέβαια, όσοι έχουν ασχοληθεί με ενσωματωμένα συστήματα η φαντασία τους κινείται γρήγορα και γνωρίζουν πως κάθε φορά υπάρχει κάτι νέο, κάτι καινούργιο που αξίζει να προσπαθήσεις να το βρεις και ακόμα περισσότερο να το υλοποιήσεις.
Σχεδίαση & Ανάπτυξη Εφαρμογών Χρήστη
Ένας ακόμη κλάδος με τον οποίο ασχολήθηκα και με ενδιαφέρει αρκετά, είναι η ανάπτυξη λογισμικού εφαρμογών. Για αυτό τον λόγο χρειάστηκε να ασχοληθώ με την C++, Python, με την θεωρία των αριθμητικών μεθόδων (κυρίως με μεθόδους εύρεσης ριζών γραμμικών εξισώσεων, επίλυσης γραμμικών συστημάτων εξισώσεων, αριθμητικής ολοκλήρωσης, ανάλυσης LU και εφαρμογές αυτής, πολυωνυμικής παρεμβολής, προσέγγισης σημείων, μέθοδος ελαχίστων τετραγώνων), των δομών δεδομένων και των αλγορίθμων, με τον οπτικό προγραμματισμό και με άλλες τεχνολογίες που χρειάζονται πάντοτε ως βοηθητικά εργαλεία. Όμως, αυτό που παίζει σημαντικότερο ρόλο, είναι οι τεχνολογικές γνώσεις που θα πρέπει να κατέχει κάποιος που ασχολείται με την ανάπτυξη λογισμικού.
Για αυτό το λόγο, ασχολούμαι μέχρι και σήμερα με την τεχνολογία λογισμικού, αφού προσπαθώ να αποκτήσω όσο γίνεται περισσότερο καλύτερες γνώσεις γύρω από το ζήτημα της ανάλυσης και της σχεδίασης συστημάτων. Όσο αφορά την τεχνολογία λογισμικού έχω ασχοληθεί με αρκετές και ενδιαφέρον κατευθυντήριες γραμμές που αυτή προτείνει, όπως για παράδειγμα τα προγραμματιστικά πρότυπα, τα μοτίβα σχεδίασης, τα πρωτότυπα, διαγράμματα UML, συστήματα τεκμηρίωσης, μεθοδολογίες ανάπτυξης (UP, XP), διαχείριση έργων, κλπ.
Προσωπικά, μου αρέσει να προγραμματίζω σύμφωνα με τα πρότυπα κωδικοποίησης του έργου GNU, λόγο του ότι πιστεύω ότι όποιος βασίζεται σε αυτά μπορεί να παράγει πολύ αποδοτικό λογισμικό.
Γενικότερα, για την ανάπτυξη εφαρμογών χρησιμοποιώ συχνά: C (POSIX και ANSI), C++ (ANSI και ISO), Python, GCC (GNU Compiler Collection), GDB (GNU Project Debugger), GNU Emacs, sed, GNU Awk, CVS (Concurrent Versions System), SVN, Indent, GNU make, Doxygen, Regular Expressions, cflow, cproto, GNU gettext, grep, GNU Bash, GNU Texinfo, Bash-Scripting.
Σχεδίαση & Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών
Επίσης, η σχέση μου με το Διαδίκτυο και τον προγραμματισμό διαδικτυακών εφαρμογών για τον ιστό είναι επίσης θερμή. Μπορώ να πω, πως οι βάσεις μου για τον διαδικτυακό προγραμματισμό εφαρμογών στον ιστό είναι θεμελιωμένες γερά. Αρχικά, ξεκίνησα την δημιουργία στατικών ιστοσελίδων χρησιμοποιώντας μονάχα την HTML και στην συνέχεια ασχολήθηκα με την μορφοποίηση των εγγράφων HTML με CSS. Μετέπειτα, παρατήρησα πως οι μεγάλες εφαρμογές απαιτούν διαχείριση δυναμικών δεδομένων. Έτσι αναγκάστηκα να ασχοληθώ με βάσεις δεδομένων και με δυναμικές διαδικτυακές γλώσσες προγραμματισμού.
Για αυτό, ασχολήθηκα με την θεωρία των σχεσιακών βάσεων δεδομένων και κυρίως με την γλώσσα επερωτήσεων SQL, έτσι ώστε να μου είναι δυνατή η σχεδίαση σωστών και αποδοτικών βάσεων δεδομένων. Αρχικά, για την υλοποίηση βάσεων δεδομένων χρησιμοποιούσα την Microsoft Access, ενώ για την δημιουργία δυναμικών ιστοσελίδων χρησιμοποιούσα την γλώσσα προγραμματισμού ASP, η οποία είναι επίσης προϊόν της Microsoft.
Σήμερα όμως, χρησιμοποιώ για την υλοποίηση βάσεων δεδομένων την MySQL, ενώ ως δυναμική γλώσσα προγραμματισμού την PHP. Οφείλω να ομολογήσω πως, μετά από αρκετή πείρα και στα δύο περιβάλλοντα, η ανάπτυξη διαδικτυακών εφαρμογών με MySQL και PHP είναι καλύτερη, αποδοτικότερη και ασφαλέστερη.
Βέβαια, οι γνώσεις μου επεκτάθηκαν περισσότερο, και έτσι ασχολήθηκα με την XHTML (είτε ως Transitional, είτε ως Strict) λόγο του ότι επιβάλλεται για την καλύτερη υλοποίηση μιας διαδικτυακής εφαρμογής. Επίσης, πολύ χρήσιμη φάνηκε η XML, με την οποία χρειάστηκε να ασχοληθώ για διάφορους λόγους. Ενδιαφέρον ήταν και η εκμάθηση της XSL για την μορφοποίηση των εγγράφων XML.
Ευρύτερα, για τον προγραμματισμό διαδικτυακών εφαρμογών χρησιμοποιώ συνήθως τις παρακάτω γλώσσες / τεχνολογίες: XHTML, CSS, XML, XSL, PHP, SQL, AJAX, Javascript, Perl, Python, XQuery.
Μέχρι και σήμερα, αναπτύσσω διαδικτυακές εφαρμογές είτε για προσωπική χρήση είτε για τρίτους. Έχω δοκιμασθεί πάνω σε αρκετές διαδικτυακές εφαρμογές, κυρίως ηλεκτρονικού εμπορίου και γενικότερα διαχείρισης περιεχομένου.
Επίσης, πέρα από τις εκ του μηδενός προσωπικές αναπτύξεις, έχω και διαχειριστικές ικανότητες πολλών γνωστών συστημάτων διαχείρισης περιεχομένου, όπως των ακόλουθων: Joomla, Drupal, WordPress, OScommerce, κ.λπ.
Αξίζει να αναφερθεί πως έχω αναπτύξει εκ του μηδενός ένα σύστημα διαχείρισης περιεχομένου, το έργο `vs-cms‘ (Very Simple Content Management System) το οποίο, χρησιμοποιείται για απλές εφαρμογές διαδικτύου και χρησιμοποιεί PHP και MySQL. Μια εφαρμογή διαδικτύου που βασίζεται στο έργο `vs-cms‘ είναι το έργο `ΙΧΘΥΣ‘ (Ἰησοῦς Χριστός, Θεοῦ Υἱός, Σωτήρ). Η ανάπτυξη του έργου `vs-cms‘ με προσέφερε αρκετά όσο αφορά την ανάλυση και την σχεδίαση διαδικτυακών συστημάτων διαχείρισης περιεχομένου.
Φιλοσοφικές & Ιδεολογικές Απόψεις
Αν και για αρκετά χρόνια χρησιμοποιούσα μη-ελεύθερο λογισμικό, κάποια στιγμή της ζωής μου, λόγο μιας φιλοσοφικής αλλαγής στον χώρο της επιστήμης της Πληροφορικής έπαψα να χρησιμοποιώ ιδιόκτητο λογισμικό και έγινα θερμός υποστηρικτής του Ιδρύματος Ελευθέρου Λογισμικού και του έργου GNU. Για αυτό, έπαψα να χρησιμοποιώ το Λ.Σ Windows, την ASP, το MS-DOS, την Visual Basic, την σουίτα γραφείου Microsoft Office και γενικότερα κάθε ιδιόκτητη εφαρμογή.
Έτσι, αφού έγινα υποστηρικτής της φιλοσοφίας του Ιδρύματος Ελευθέρου Λογισμικού και του έργου GNU θυσίασα αρκετά με τα οποία είχα ασχοληθεί και προσπάθησα να καλύψω εκείνα τα κενά με αντίστοιχες τεχνολογίες και εφαρμογές που υπήρχαν στο Ελεύθερο Λογισμικό. Αρχικά, βρήκα ένα πλήρες, πανίσχυρο και ελεύθερο από κάθε πονηρή ιδιοκτησία Λ.Σ. Αυτό, ήταν το GNU/Linux, το οποίο είναι η σύνθεση του συστήματος GNU και του πυρήνα Linux.
Επίσης, το κενό της ASP και της Microsoft Access, καλύφθηκαν με δύο πανίσχυρα εργαλεία, την PHP και την MySQL, τα οποία ήδη έχω αναφέρει παραπάνω. Όσο αφορά για τον οπτικό προγραμματισμό στην θέση της Microsoft Visual Basic και Borland C++ τοποθέτησα το GTK+ και το Qt, ενώ στην θέση της σουίτας Microsoft Office τοποθέτησα το OpenOffice. Παράλληλα, στην θέση του συστήματος διαχείρισης βάσεων δεδομένων Microsoft SQL Server τοποθέτησα το υπέροχο σύστημα PostgreSQL. Μερικές φορές όταν ο όγκος των δεδομένων που επιθυμούμε να αποθηκεύσουμε είναι μικρός αξίζει να χρησιμοποιούμε SQLite. Η SQLite χρησιμοποιείται σε αρκετές ιστοσελίδες σήμερα, αλλά κυρίως η χρήση της γίνεται σε εφαρμογές κινητών. Ξέρετε, υπάρχει μια πληθώρα πανίσχυρων εργαλείων στο κατάλογο του Ελεύθερου Λογισμικού.
Αξίζει να αναφερθεί, πως αρχικά, η μετάβαση μου στο Λ.Σ GNU/Linux δεν έγινε αμέσως. Στην αρχή, προσπάθησα να προμηθευτώ Ελεύθερο Λογισμικό το οποίο υπήρχε για τα Λ.Σ της Microsoft. Έτσι, αφού αντικατέστησα όλες τις ιδιόκτητες εφαρμογές με τις αντίστοιχες του Ελεύθερου Λογισμικού, δεν έμενε παρά να αλλάξω και το Λ.Σ της Microsoft. Φυσικά, σε πολύ σύντομο χρονικό διάστημα έκανα εγκατάσταση το GNU/Linux και βρήκα όλα εκείνα τα εργαλεία που χρησιμοποιούσα και στα Windows, οπότε δεν είχα ουσιαστικό πρόβλημα.
Με αφορμή το παραπάνω, θα ήθελα να αναφερθώ στο έργο `Ε.Λ.Γ.Ο‘ (Ελεύθερο Λογισμικό Για Όλους), το οποίο αποτελεί προσωπικό έργο (σε συνεργασία με τον καλό μου φίλο faif [FreeAsInFreedom]). Το έργο αυτό, έχει ως σκοπό να βοηθήσει του διάφορους χρήστες της Πληροφορικής να λειτουργήσουν με Ελεύθερο Λογισμικό στα Λ.Σ της Microsoft και στην συνέχεια να μεταβούν στο GNU/Linux δίχως ουσιαστικά προβλήματα.
Υποστήριξη Διεθνοποίησης & Ανάπτυξη Εγχειριδίων
Επίσης, όσο αφορά την ανάπτυξη εφαρμογών ασχολήθηκα και με γλώσσες ανάπτυξης εγχειριδίων και τεκμηρίωσης. Τόσο σε επίπεδο του πηγαίου κώδικα (π.χ. Doxygen), αλλά και σε επίπεδο οδηγιών χρήσης (π.χ. Texinfo, Man pages) της εφαρμογής. Παράλληλα με αυτά, ασχολήθηκα και με την υποστήριξη διεθνοποίησης στις εφαρμογές, η οποία υλοποιείται στο Ελεύθερο Λογισμικό με την χρήση των Locales.
Υποστήριξη Του Ιδρύματος Ελεύθερου Λογισμικού
Μέχρι και σήμερα, ασχολούμαι με μεταφράσεις στην ελληνική γλώσσα όλων των σημαντικών άρθρων του εξυπηρετητή του έργου GNU και αναπτύσσω ελεύθερο λογισμικό για το λειτουργικό σύστημα GNU/Linux. Μπορείτε να δείτε το έργο `www-el‘ (Hellenic GNU web translations), στο οποίο είμαι βασικό στέλεχος.
Σχεδίαση & Ανάπτυξη Δικτυακών Εφαρμογών
Αξίζει να αναφερθεί πως έχω ασχοληθεί και με δικτυακό προγραμματισμό (χρησιμοποιώντας υποδοχές). Καρπός αυτής της ενασχόλησης ήταν το έργο `gtrm‘ (GNU terminal random message). Το έργο αυτό, είναι βασισμένο στο μοντέλο πελάτη-εξυπηρετητή. Όπου, ο εξυπηρετητής στις διάφορες αιτήσεις των πελατών μετέδιδε τυχαία δεδομένα. Η δυνατότητα αυτή φάνηκε χρήσιμη όταν χρειάστηκε στο έργο `ΙΧΘΥΣ‘ (το οποίο επίσης αποτελεί προσωπικό έργο) να αποστέλλουμε τυχαία αποφθέγματα αγίων της Ορθοδόξου Εκκλησίας στους επισκέπτες του ιστότοπου. Βέβαια, αυτή η δυνατότητα αργότερα αντικαταστάθηκε με την χρήση της PHP και της MySQL.
Σχεδίαση & Ανάπτυξη Ηλεκτρονικών Παιχνιδιών
Τέλος, να αναφέρω πως έχω μεγάλο ενδιαφέρον για την ανάπτυξη και τον προγραμματισμό ηλεκτρονικών παιχνιδιών δύο διαστάσεων. Αυτός βέβαια είναι και ο λόγος για τον οποίο έχω ασχοληθεί με τις βιβλιοθήκες παιχνιδιών SDL και Pygame. Τελευταία, με τον καλό μου φίλο faif (FreeAsInFreedom) αναπτύσσουμε με Python, Pygame και Prolog το ηλεκτρονικό παιχνίδι αστυνομικής περιπέτειας `tct‘ (The Crime Tracer).
Τωρινά Ενδιαφέροντα
Αυτόν το καιρό ασχολούμαι με προγραμματισμό παιχνιδιών, ανάπτυξη-μελέτη πυρήνων Λ.Σ (Linux, GNU Hurd), αναγνώριση προτύπων, τεχνητά νευρωνικά δίκτυα, εξελικτική υπολογιστική, γενετικοί αλγόριθμοι, ασαφή συστήματα, Arduino, κατασκευή μεταγλωττιστών, κ.α.