OpenBook

Κοινότητες ΕΛ/ΛΑΚ: ΟΠΑ, ΕΜΠ, ΕΚΠΑ

Revision History
Revision Version 115-01-2012Κ

Table of Contents

1. Εισαγωγή
1.1. Project OpenBook
1.2. Ελεύθερο Λογισμικό και Linux
2. Κοινότητες
2.1. Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών
3. Μέρος Α - Γενική Χρήση linux
3.1. Διανομές
3.2. Σουίτα γραφείου
3.3. Editors
3.4. Browsing
4. Μέρος Β - Εξειδικευμένες Εφαρμογές
4.1. Γλώσσα Μηχανής (Assembly) - Lia
4.2. Βάσεις Δεδομένων - MySQL
4.3. Μαθηματικά Εργαλεία - Scilab
5. Μέρος Γ - Γλώσσες Προγραμματισμού
5.1. C
5.2. C++
5.3. C Shell
5.4. Fortran
5.5. HTML
5.6. MIPS32 ASSEMBLY
5.7. Java
5.8. PHP
5.9. VHDL
6. Μέρος Δ - Συσχέτιση Μαθημάτων
6.1. Τμήμα Πληροφορικής Ο.Π.Α.

1. Εισαγωγή

1.1. Project OpenBook

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

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

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

[Warning]

Η συγκεκριμένη έκδοση περιέχει μόνο τα αποσπάσματα που αφορούν το Οικονομικό Πανεπιστήμιο Αθηνών! Μπορείτε να βρείτε την πλήρη έκδοση του βιβλίου εδώ.

1.2. Ελεύθερο Λογισμικό και Linux

images/Intro-freeSoftwareAndLinux-GnuLinux.png

Το ελεύθερο λογισμικό εδώ και πάνω από μία δεκαετία υπηρετεί εκατομμύρια χρήστες και επιχειρήσεις σε ολόκληρο τον κόσμο. Οι εφαρμογές του δεν εξαντλούνται στο διαδίκτυο αλλά επεκτείνονται στην εκπαίδευση, την έρευνα ακόμα και τις διαστημικές αποστολές της NASA. Συχνά χωρίς να το αντιλαμβανόμαστε χρησιμοποιούμε καθημερινά δεκάδες προγράμματα ελεύθερου λογισμικού. Όμως τι είναι ακριβώς το ελεύθερο λογισμικό και γιατί έχει τόση σημασία; Πώς βοηθάει την εξέλιξη της πληροφορικής και της τεχνολογίας γενικότερα; Και γιατί ένας απλός χρήστης υπολογιστών, πόσο μάλλον ένας μελλοντικός μηχανικός πληροφορικής ή αναλυτής/προγραμματιστής, πρέπει να ενδιαφερθεί για αυτό;

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

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

Η σημασία του ελεύθερου λογισμικού έχει γίνει αντιληπτή από πολλούς φορείς. Κυβερνήσεις, οργανισμοί, διεθνείς επιχειρήσεις και ιδρύματα χρηματοδοτούν και συμμετέχουν ενεργά στην ανάπτυξη του ελεύθερου λογισμικού. Η Γερμανία, η Γαλλία, οι ΗΠΑ, η HP, η IBM, η Google, η NASA, το Mozilla Foundation, το Πανεπιστήμιο του Berkley και το FSF είναι ένα ελάχιστο δείγμα των επώνυμων υποστηρικτών και χρηματοδοτών του ελεύθερου λογισμικού. Είναι χαρακτηριστικό ότι ένα μεγάλο μέρος της παγκόσμιας οικονομίας οφείλει την ανάπτυξή του αλλά και την ίδια του την ύπαρξη στο ελεύθερο λογισμικό.

Αν και ο περισσότερος κόσμος γνωρίζει τον Linus Torvalds, δημιουργό του linux kernel, η γένεση του ελεύθερου λογισμικού προέκυψε από αλλού. To 1985 με πρωτοβουλία του Richard Stallman ιδρύεται το Free Software Foundation (FSF). Το FSF θέσπισε 4 ελευθερίες κάτω από τη περίφημη άδεια χρήσης General Public License (GPL).

  • Ελευθερία στη χρήση του προγράμματος
  • Ελευθερία στη μελέτη του προγράμματος αλλά και την τροποποίησή του
  • Ελευθερία στην αναδιανομή
  • Ελευθερία στην αναδιανομή του τροποποιημένου προγράμματος
images/Intro-freeSoftwareAndLinux-Gpl-v3-logo.png

Η δυναμική που απορρέει από την άδεια GPL είναι, μεταξύ άλλων, ότι η οποιαδήποτε αλλαγή ή συμπλήρωση γίνεται στον πηγαίο κώδικα, τότε αυτή αυτόματα τίθεται στη διάθεση όλης της ανθρωπότητας, όπως περιγράφεται στο τέταρτο σημείο!

Από το 1985 μέχρι σήμερα και με τα μοντέλο ανάπτυξης της GPL, αλλά και πολλών άλλων ελεύθερων αδειών, έχουν δημιουργηθεί αμέτρητα προγράμματα. Πολλά από αυτά οποία έχουν διακριθεί και θεωρούνται σήμερα διεθνή industry standards. Ο Mozilla Firefox, ο Chromium Browser, ο πυρήνας linux και ο VLC media player είναι μερικά μόνο από τα παραδείγματα ελεύθερου λογισμικού. Λιγότερα γνωστά στο ευρύ κοινό, παρότι όλοι τα χρησιμοποιούμε καθημερινά, είναι το σύστημα BIND, ο Apache Web server, η Java (Java Runtime Environment), ο dhcpd, ο pppd και άλλα.

Στο ελεύθερο λογισμικό στηρίζονται μεγάλες επιχειρήσεις, διεθνείς οργανισμοί και κατασκευαστές προϊόντων πληροφορικής και τεχνολογίας. Δικτυακοί σκληροί δίσκοι, DVD players, τηλεοράσεις και πολλά άλλα προϊόντα χρησιμοποιούν ελεύθερο λογισμικό. Αν αυτό δεν υπήρχε η τεχνολογία σήμερα όχι μόνο θα ήταν πολύ πιο ακριβή αλλά θα ήταν και πολύ λιγότερο εξελιγμένη.

Από την πλευρά του χρήστη, το ελεύθερο λογισμικό έχει μεγάλη αξία και τον αφορά άμεσα. Χρησιμοποιώντας το ο χρήστης είναι σίγουρος ότι:

  • Δεν περιέχονται “κρυφές” λειτουργίες εν αγνοία του
  • Η ποιότητα των προγραμμάτων είναι πολύ υψηλή καθώς τα μάτια των έμπειρων προγραμματιστών που βλέπουν τον κώδικα δεν εξαντλούνται στους, συχνά ελάχιστους, υπαλλήλους που απασχολεί η εταιρία που αναπτύσσει αντίστοιχο κλειστό λογισμικό.
  • Το κόστος χρήσης του υπολογιστή τηρείται χαμηλά, αφού διατίθεται δωρεάν.
  • Το μηδενικό κόστος απόκτησης δίνει τη δυνατότητα να έχουμε πάντα την τελευταία έκδοση των εφαρμογών που χρησιμοποιούμε.
  • Τα όποια κενά ασφαλείας υπάρχουν εντοπίζονται εύκολα και διορθώνονται άμεσα. Χαρακτηριστικό παράδειγμα είναι ότι το 2006 έγινε γνωστό ότι ο Internet Explorer της Microsoft, ένα κατεξοχήν κλειστό πρόγραμμα, είχε ένα σημαντικό κενό ασφαλείας το οποίο η Microsoft δεν είχε φτιάξει για… 284 ημέρες!! Την ίδια περίοδο, το ίδρυμα Mozilla κατάφερνε σε ολόκληρη τη χρονιά να διορθώνει όλα τα κενά ασφαλείας του Firefox το πολύ μέσα σε 9 ημέρες!

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

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

2. Κοινότητες

comminities

Οι ακαδημαϊκές κοινότητες που συνεργάστηκαν στο παρόν project είναι οι παρακάτω:

Στα site τους μπορείτε να αναζητήσετε περισσότερες πληροφορίες καθώς και να λάβετε τεχνική υποστήριξη ή βοήθεια. Προτείνουμε να αναφερθείτε στην κοινότητα της σχολής στην οποία ανήκετε.

Αν θέλετε να επικοινωνήσετε με την ομάδα συγγραφής του OpenBook, ή τη γενικότερη συνεργατική προσπάθεια των κοινοτήτων, χρησιμοποιήστε τη παρακάτω ηλεκτρονική διεύθυνση: <faa@foss.aueb.gr>

2.1. Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών

comminities

Η κοινότητα ΕΛ/ΛΑΚ του Οικονομικού Πανεπιστημίου Αθηνών (http://foss.aueb.gr/) έχει ιδρυθεί από το εαρινό εξάμηνο του 2009 και συνεισφέρει ενεργά στη διάδοση του ελεύθερου και ανοιχτού λογισμικού στα πλαίσια της σχολής.

Μερικές από της δραστηριότητες της κοινότητας είναι:

  • Ομιλίες για τεχνολογίες ΕΛ/ΛΑΚ
  • Συζητήση και υποστήριξη για θέματα ΕΛ/ΛΑΚ σε forum/irc
  • Διαγωνισμοί γνώσεων πάνω σε τεχνολογίες ΕΛ/ΛΑΚ
  • Συμμετοχή σε Πανελλήνια Συνέδρια ΕΛ/ΛΑΚ
  • Δημιουργία και συντήρηση package mirrors για τις διανομές ArchLinux και Gentoo

Για το χειμερινό εξάμηνο του 2011-2012 η κοινότητα συναντιέται κάθε Δευτέρα στην αίθουσα Α32 στις 5-7μ.μ..

3. Μέρος Α - Γενική Χρήση linux

3.1. Διανομές

Distro gallery

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

Μία διανομή, εκτός του πυρήνα linux, περιλαμβάνει και μία συλλογή από τα παραπάνω στοιχεία, καθώς επίσης και ένα πρόγραμμα εγκατάστασής της στον δίσκο και εργαλεία διαχείρισης των προγραμμάτων. Όλα τα παραπάνω στοιχεία (προγράμματα, εφαρμογές, κλπ) περιέχονται σε πακέτα που διαχειρίζεται η Διαχείριση Πακέτων Λογισμικού (Package Management System) της εκάστοτε διανομής.

Υπάρχουν πολλές διανομές του Linux γιατί υπάρχουν διαφορετικοί άνθρωποι και διαφορετικές ανάγκες. Απευθύνονται σε desktop συστήματα ή σε εξυπηρετητές, σε αρχάριους ή έμπειρους χρήστες, έχουν διαφορετικό προεπιλεγμένο περιβάλλον, περιλαμβάνουν διαφορετικά προγράμματα στη βασική εγκατάσταση και παρέχουν διαφορετικό τρόπο εγκατάστασης προγραμμάτων - διαχείρισης πακέτων (για παράδειγμα από πηγαίο κώδικα ή έτοιμα binary πακέτα). Τα γνωστότερα συστήματα διαχείρισης πακέτων είναι τα dpkg (Debian) και RPM (RedHat). Επιπλέον, κάθε διανομή διαθέτει τα δικά της αποθετήρια, τις δικές της δηλαδή πηγές πακέτων από όπου κατεβάζει τα πακέτα ο package manager. Έτσι, ένα πρόγραμμα είναι διαθέσιμο σε μία διανομή μέσω του package manager αν και μόνο αν υπάρχει το αντίστοιχο πακέτο στα αποθετήριά της. Αν όχι, η εγκατάσταση του προγράμματος πρέπει να γίνει χειροκίνητα, συνήθως με μεταγλώττιση από τον πηγαίο κώδικα. Ευτυχώς, όλες οι μεγάλες διανομές έχουν μία τεράστια γκάμα εφαρμογών στα αποθετήριά τους, τα οποία περιλαμβάνουν όλες τις γνωστές εφαρμογές που χρειάζεται ο μέσος χρήστης.

Stay Libre

Ένα ακόμα στοιχείο που χαρακτηρίζει μία διανομή είναι ο βαθμός στον οποίο είναι πιστή στην ιδέα του ελεύθερου λογισμικού. Πολλές διανομές για να παρέχουν όσο το δυνατόν καλύτερη εμπειρία στον χρήστη περιλαμβάνουν μέσα τους κλειστά προγράμματα και drivers (όπως Adobe Flash player, mp3 decoder, firmwares συσκευών), κάτι που δεν συνάδει με την ιδέα του ελεύθερου λογισμικού. Άλλες είναι περισσότερο πιστές στην ιδέα αλλά απαιτούν από τον χρήστη να προσπαθήσει ελαφρώς παραπάνω κατά την αρχική εγκατάσταση. Οι αυστηρές κριτικές που κατά καιρούς ασκούνται στις διανομές που δεν ακολουθούν πιστά την ιδέα του ελεύθερου λογισμικού έχουν βοηθήσει αρκετές από αυτές να απομακρυνθούν ελάχιστα μόνο από αυτή. Για τους ιδεολόγους, η παράμετρος αυτή αποτελεί κριτήριο επιλογής.

Οι κυριότερες και γνωστότερες διανομές που κυκλοφορούν αυτή τη στιγμή αναφέρονται παρακάτω. Ωστόσο, υπάρχουν εκατοντάδες άλλες διανομές που καλύπτουν με το παραπάνω ακόμα και τις πιο ιδιαίτερες ανάγκες.

  • Ubuntu (Debian based)
  • Fedora (RPM based)
  • openSUSE (RPM based)
  • Debian
  • Mandriva (RPM based)
  • Linux Mint (Debian based)
  • PCLinuxOS (Debian based)
  • ArchLinux (δικό του σύστημα διαχείρισης πακέτων)
  • Slackware (δικό του σύστημα διαχείρισης πακέτων)
  • Gentoo (δικό του σύστημα διαχείρισης πακέτων)
  • CentOS (RPM based)

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

3.2. Σουίτα γραφείου

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

Γι'αυτό το λόγο έχει αναπτυχθεί ελεύθερο λογισμικό ή λογισμικό ανοιχτού κώδικα που παρέχει τις παραπάνω λειτουργίες στους χρήστες του.

Συγκεκριμένα έχουμε τις εξής ολοκληρωμένες σουίτες γραφείου:

  • Calligra Suite
  • KOffice
  • LibreOffice

Εκτός αυτών υπάρχουν και επι μέρους εφαρμογές που κάνουν ένα μέρος των παραπάνω όπως π.χ. το AbiWord το οποίο είναι μόνο επεξεργαστής κειμένου.

Από τα 3 παραπάνω θα ασχοληθούμε με το LibreOffice το οποίο είναι το πιο διαδεδομένο και συμπεριλαμβάνεται σε πολλές διανομές Linux. Το LibreOffice είναι απόγονος του OpenOffice και διανέμεται υπό την άδεια GNU LGPLv3.

Οι εφαρμογές που μας παρέχει είναι οι εξής:

  • Writer : Επεξεργαστής κειμένου. Υποστηρίζει το δικό του μορφότυπο αλλά μπορεί να χειριστεί και μορφότυπα άλλων εμπορικών εφαρμογών.
  • Calc : Λογιστικά Φύλλα. Αντίστοιχα με το Writer έχει το δικό του μορφότυπο αλλά μπορεί να χειριστεί και μορφότυπα άλλων εμπορικών εφαρμογών. Παρέχει πληθώρα μεθόδων και ικανότητες σχεδιασμού γραφημάτων.
  • Impress : Δημιουργία παρουσιάσεων. Παρέχει δυνατότητα δημιουργίας τρισδιάστατων εφέ και μπορεί να εξάγει αρχεία SWF (Flash).
  • Base : Βάση δεδομένων. Πολύ χρήσιμη για χρήση δεδομένων σε διαφορετικό περιεχόμενο π.χ. δημιουργία φορμών κτλ. Επίσης μπορεί να χρησιμοποιηθεί για το χειρισμό άλλων γνωστών βάσεων δεδομένων όπως της MySQL.
  • Draw : Επεξεργαστής γραφικών και διαγραμμάτων.
  • Math : Μία εφαρμογή για τη δημιουργία και επεξεργασία μαθηματικών τύπων. Οι τύποι μπορούν να εισαχθούν σε άλλες εφαρμογές του LibreOffice.

Όλες οι παραπάνω εφαρμογές μπορούν να εξάγουν κατευθείαν αρχεία PDF.

3.3. Editors

Editor ή αλλιώς συντάκτης κειμένου είναι μία εφαρμογή με την οποία μπορούμε να συντάξουμε ή να τροποποιήσουμε ένα κείμενο που δεν περιέχει μορφοποίηση. Όταν λέμε μορφοποίηση εννοούμε π.χ. πλάγια, έντονη, υπογραμμισμένη γραφή, χρήση συγκεκριμένης γραμματοσειράς και μεγέθους της κ.τ.λ.

Με μια πρώτη ματιά λοιπόν ο συντάκτης κειμένου φαίνεται να είναι μία εφαρμογή παρόμοια ενός επεξεργαστή κειμένου όπως του Writer του Libre Office που αναφέραμε προηγουμένως αλλά με πολύ πιο περιορισμένες δυνατότητες.

Παρόλα αυτά είναι ιδιαίτερα χρήσιμος γιατί με αυτόν μπορούμε να επεξεργαστούμε αρχεία ρυθμίσεων του υπολογιστή μας (Linux configuration files) ή να συντάξουμε προγράμματα που αργότερα θα μεταγλωττίσουμε και θα εκτελέσουμε.

Για την ακρίβεια το μεγαλύτερο μέρος του OpenBook έχει συνταχθεί με έναν απλό συντάκτη κειμένου και έπειτα έχει μετατραπεί με το asciidoc σε ιστοσελίδα και pdf.

Οι συντάκτες κειμένου χωρίζονται σε 2 κατηγορίες. Αυτούς που δεν έχουν γραφικό περιβάλλον(graphical user interface - gui) και σε αυτούς που έχουν.

Μερικοί της πρώτης κατηγορίας (command line interface - cli) είναι οι:

  • ed
  • nano
  • vim
  • emacs

Μερικοί της δεύτερης κατηγορίας (gui) είναι οι:

  • gvim
  • gedit
  • kate
  • geany
  • emacs

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

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

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

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

3.4. Browsing

Ένας Web browser (φυλλομετρητής ιστοσελίδων, πλοηγός Web, πρόγραμμα περιήγησης Web ή περιηγητής Ιστού) είναι ένα λογισμικό που επιτρέπει στον χρήστη του να προβάλλει, και να αλληλεπιδρά με, κείμενα, εικόνες, βίντεο, μουσική, παιχνίδια και άλλες πληροφορίες συνήθως αναρτημένες σε μια ιστοσελίδα ενός ιστότοπου στον Παγκόσμιο Ιστό ή σε ένα τοπικό δίκτυο. Το κείμενο και οι εικόνες σε μια ιστοσελίδα μπορεί να περιέχουν υπερσυνδέσμους προς άλλες ιστοσελίδες του ίδιου ή διαφορετικού ιστότοπου. Ο Web browser επιτρέπει στον χρήστη την γρήγορη και εύκολη πρόσβαση σε πληροφορίες που βρίσκονται σε διάφορες ιστοσελίδες και ιστότοπους εναλλάσσοντας τις ιστοσελίδες μέσω των υπερσυνδέσμων. Οι φυλλομετρητές χρησιμοποιούν τη γλώσσα μορφοποίησης HTML για την προβολή των ιστοσελίδων, για αυτό η εμφάνιση μιας ιστοσελίδας μπορεί να διαφέρει ανάλογα με τον browser.

Mερικοί από τους πιο γνωστούς browsers είναι:

  • Mozilla Firefox
  • Chromium
  • Konqueror
  • Epiphany
  • Lynx

Αναλυτικότερα:

Mozilla Firefox

Ο Firefox (καθώς και το port του για το Debian o Ιceweasel) είναι ένας ελεύθερος και ανοικτού κώδικα φυλλομετρητής (browser) του παγκόσμιου ιστού. Προήλθε από το Application Suite της Mozilla και η ανάπτυξή του εξακολουθεί να γίνεται κατά μεγάλο ποσοστό από την Mozilla Corporation, ενώ συνεισφέρουν και μεμονωμένοι χρήστες σε μικρότερο βαθμό. Ο Firefox κατείχε το 25% της καταγεγραμμένης χρήσης φυλλομετρητών Ιστού για τον Νοέμβριο του 2009, κατατάσσοντας τον στην δεύτερη θέση των πιο δημοφιλών φυλλομετρητών παγκοσμίως, μετά τον Internet Explorer.

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

Στις λειτουργίες του Firefox περιλαμβάνονται φραγή αυτόκλητα αναδυόμενων παραθύρων(popup windows), περιήγηση με καρτέλες, ορθογραφικός έλεγχος, επιμέρους εύρεση, ενεργοί σελιδοδείκτες, διαχείριση των μεταφορτώσεων, ιδιωτική περιήγηση και ένα ενσωματωμένο πεδίο αναζήτησης με δυνατότητα επιλογής της επιθυμητής μηχανής αναζήτησης. Περαιτέρω λειτουργίες ενεργοποιούνται μέσω πρόσθετων που αναπτύχθηκαν από τρίτους (addons). Τα πιο δημοφιλή από τα πρόσθετα είναι το NoScript που απενεργοποιεί την JavaScript, ο ενσωματωμένος στην γραμμή κατάστασης media player FoxyTunes, το Adblock Plus που κάνει φραγή διαφημίσεων, το StumbleUpon, το DownThemAll και η γραμμή εργαλείων Web Developer.

Ο Firefox λειτουργεί σε αρκετές εκδόσεις των Microsoft Windows, στο Mac OS X, στο GNU/Linux, και σε πολλά λειτουργικά συστήματα που προήλθαν από το Unix. Ο πηγαίος κώδικας του Firefox είναι ελεύθερο λογισμικό και διακινείται ελεύθερα υπό την τριπλή αδειοδότηση GNU GPL/GNU LGPL/MPL.

Chromium

O Chromium είναι ο φυλλομετρητής ανοιχτού κώδικα από τον οποίον παίρνει τον πηγαίο του κώδικα ο Google Chrome. Οι κυριότερες προσθήκες στον δεύτερο είναι: το σήμα της Google, μηχανισμοί αυτόματης ενημέρωσης, παρακολούθηση χρήσης και ενσωματωμένος αναγνώστης pdf και flash player της Adobe. Ο Chromium χρησιμοποιεί την μηχανή διάταξης WebKit.

Το Chromium Project παίρνει το όνομα του απο το στοιχείο χρώμιο, απο το οποίο φτιάχνεται το αντίστοιχο μέταλλο. Ένας απο τους κύριους στόχους του project είναι ο Chrome να είναι ένας περιηγητής παραθύρων με καρτέλες ή μια διέξοδο προς το διαδίκτυο, αντί να είναι μια απλή εφαρμογή περιήγησης. Έχει σχεδιαστεί ειδικά για να έχει ένα μινιμαλιστικό περιβάλλον αλληλεπίδρασης με τον χρήστη ώστε, όπως δηλώνουν οι προγραμματιστές του, "η χρήση του να είναι εύκολη, διαισθητική και γρήγορη".

Konqueror

O Konqueror είναι ένας περιηγητής ιστού και περιηγητής αρχείων που προσφέρει δυνατότητες ανάγνωσης αρχείων στον τοπικό δίσκο, σε απομακρυσμένους δίσκους (μέσω ftp) και αρχείων σε εικόνα δίσκου (disk image). Είναι θεμελιώδες κομμάτι του περιβάλλοντος εργασίας KDE. O Konqueror αναπτύσσεται από εθελοντές και τρέχει στα περισσότερα λειτουργικά συστήματα τύπου Unix καθώς και σε Windows. Υπάγεται στην άδεια λογισμικού GNU General Public License version 2.

Το όνομα "Konqueror" είναι μια αναφορά στους δύο κύριους ανταγωνιστές την στιγμή της δημιουργίας της πρώτης έκδοσης του. "Πρώτα έρχεται ο Navigator, μετά ο Explorer, και μετά ο Konqueror". Επίσης ακολουθεί την σύμβαση ονοματολογίας του KDE: τα ονόματα των περισσότερων KDE προγραμμάτων ξεκινάνε με το γράμμα Κ. Υποστηρίζει τα πρωτόκολλα επικοινωνίας: FTP, SFTP, SSH, SAMBA, HTTP, IMAP, ISO και VNC.

Epiphany

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

Lynx

Lynx είναι ένας απλός περιηγητής ιστού φτιαγμένος για χρήση σε τερματικά χαρακτήρων. Η τωρινή έκδοση υποστηρίζει το πρωτόκολλο SSL καθώς και αρκετά χαρακτηριστικά της HTML αλλά όχι Javascript. Ο Lynx εξ'ορισμού δεν μπορεί να προβάλλει κομμάτια ιστοσελίδων που δεν είναι κείμενο (όπως εικόνες ή βίντεο) αλλά μπορεί να εκτελέσει εξωτερικά προγράμματα για να τα χειριστούν όπως εναν image viewer ή video player αντίστοιχα. Είναι ιδιαίτερα χρήσιμος για διάβασμα τεκμηρίωσης ή κατέβασμα αρχείων όταν είναι διαθέσιμο μόνο ενα τερματικό χαρακτήρων και δεν υπάρχει γραφικό περιβάλλον.

4. Μέρος Β - Εξειδικευμένες Εφαρμογές

4.1. Γλώσσα Μηχανής (Assembly) - Lia

Το Lia είναι ένας απλός προσομοιωτής υπολογιστή (όπως αυτός ορίζεται στο βιβλίο "Computer Science - A Modern Introduction", δεύτερη έκδοση των Les Goldschlager και Andrew Lister, Prentice Hall) και συντάκτης γλώσσας μηχανής γραμμένος σε Java.

Το Lia διατίθεται υπό την άδεια MIT.

Ομοίως, για τη μηχανή που παρουσιάζεται στο βιβλίο “Computer Science An Overview” του Glenn Brookshear μπορεί να χρησιμοποιηθεί η εφαρμογή BMach.

4.2. Βάσεις Δεδομένων - MySQL

Η MySQL είναι ενα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων που μετρά περισσότερες από 11 εκατομμύρια εγκαταστάσεις. Έλαβε το όνομά της από την κόρη του Μόντυ Βιντένιους, τη My. Το πρόγραμμα τρέχει έναν εξυπηρετητή (server) παρέχοντας πρόσβαση πολλών χρηστών σε ένα σύνολο βάσεων δεδομένων.

Ο κώδικας του εγχειρήματος είναι διαθέσιμος μέσω της GNU General Public License, καθώς και μέσω ορισμένων ιδιόκτητων συμφωνιών. Ανήκει και χρηματοδοτείται από μία και μοναδική κερδοσκοπική εταιρία, τη σουηδική MySQL AB, η οποία σήμερα ανήκει στην Oracle. Mερικές γνωστές εφαρμογές που αξιοποιούν την Mysql είναι: το TYPO3, το Joomla, το Wordpress, η MyBB, η phpBB, το Drupal καθώς και ως μέρος της υποδομής των Wikipedia, Google, filckr, Nokia.com, Youtube, Facebook και Twitter.

Χρησιμοποιείται συνήθως ως κεντρικό συστατικό του πακέτου λογισμικού LAMP (ακρώνυμο για το Linux, Apache, MySQL, Perl/PHP/Python. Είναι γραμμένη σε C και C++ ενώ υπάρχει πληθώρα βιβλιοθηκών που επιτρέπει την χρήση της MySQL σε προγράμματα άλλων γλωσσών.

Χρήση

Αφού εγκατασταθεί η MySQL μέσω του package manager της διανομής του χρήστη, είτε ξεχωριστά είτε ως μέρος του πακέτου λογισμικού LAMP, πρέπει να εκκινηθεί ο MySQL server για να μπορέσει να χρησιμοποιηθεί.

Σε Debian διανομές και παράγωγες του (π.χ. Ubuntu) ο server ξεκινάει με

# /etc/init.d/mysql start

Αφού ξεκινήσει ο MySQL server συνδέεστε σε αυτόν απο κονσόλα με

# mysql -u root

και αν συνδέεστε για πρώτη φορά πιθανότατα θα σας ζητήσει να δώσετε ενα νέο password για τον root χρήστη. Οι υπόλοιπες ρυθμίσεις για την MySQL βρίσκονται συνήθως στο /etc/mysql/my.cnf .

Υπάρχουν επίσης διαθέσιμα και εργαλεία με γραφικό περιβάλλον για την διαχείριση της βάσης δεδομένων. Μερικά απο τα πιο γνωστά είναι τα MySQL Workbench, phpMyAdmin και HeidiSQL.

4.3. Μαθηματικά Εργαλεία - Scilab

Το Scilab είναι μία εφαρμογή αριθμητικών υπολογισμών, αλλά και μία υψηλού επιπέδου γλώσσα προγραμματισμού προσανατολισμένη σε αριθμητικούς υπολογισμούς.

Μπορεί να χρησιμοποιηθεί για ανάλυση σήματος, στατιστική ανάλυση, ανάλυση εικόνας, προσομοιώσεις ρευστοδυναμικής κλπ.

Ο κώδικας του Matlab μοιάζει σε συντακτικό και μπορεί να μετατραπεί σε αυτόν του Scilab.

Το Scilab διανέμεται υπό την CeCILL άδεια που είναι συμβατή με τη GPL.

Συγγραφή Προγραμμάτων

Εκτελέστε το Scilab, και χρησιμοποιείστε τον επεξεργαστή κειμένου για να δημιουργήσετε ένα αρχείο πηγαίου κώδικα που μοιάζει με αυτό:

//
//  Print a fixed message to the screen.
//
function hello

  mprintf('Hello, world \n');

endfunction

Αφού γράψουμε το κώδικα μας, τον αποθηκεύουμε με κατάληξη .sci. Έπειτα μέσα από το διερμηνέα εντολών του Scilab τρέχουμε:

--> getf hello.sci  // το φορτώνουμε στη μνήμη
--> hello           // το εκτελούμε

Εναλλακτικές

Παρόμοια λειτουργικότητα παρέχουν και τα πακέτα λογισμικού Sage και Octave που διατίθενται υπό την άδεια GPL.

5. Μέρος Γ - Γλώσσες Προγραμματισμού

5.1. C

Βασικά στοιχεία

Η C είναι μια διαδικαστική γλώσσα προγραμματισμού γενικής χρήσης. Χαρακτηρίζεται για τη ταχύτητα της, καθώς και το γεγονός ότι είναι διαθέσιμη στα περισσότερα σημερινά λειτουργικά συστήματα. Η C είναι μια γλώσσα υψηλού επιπέδου, αν και θεωρείται από πολλούς mid-level γλώσσα προγραμματισμού και συχνά αποκαλείται "high-level assembly" (υψηλού επιπέδου συμβολική γλώσσα).

Κατά την ανάπτυξή της, έχουν γίνει προσπάθειες τυποποίησής της, με τo πρότυπο ANSI (ANSI C και αργότερα ISO C). Η τελευταία του έκδοση είναι το C99. Πoλλοί compilers ακόμα δεν υποστηρίζουν πλήρως (ή πλήρως σωστά) πολλά χαρακτηριστικά που περιγράφονται στο πρότυπο αυτό. Για το λόγο αυτό συνήθως ζητείται συμβατότητα με το πρότυπο C89/C90. Υπό-κατασκευή βρίσκεται και το νεότερο πρότυπο C1X.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την C σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου
  • Compiler για τη μετάφραση του κώδικα

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Μεταγλώττιση και Εκτέλεση (compilers and execution)

Για τη μετάφραση και μεταγλώττιση του κώδικά μας θα χρειαστούμε κάποιον compiler. Ο πιο ευρέως γνωστός είναι ο GCC (μέρος του GNU project).

Συγγραφή Προγραμμάτων

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}

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

$ gcc -o hello hello.c      # μετάφραση και μεταγλώττιση του κώδικα.
                            # παράγει το εκτελέσιμο αρχείο "hello"
$ ./hello                   # εκτέλεση του αρχείου
> Hello, World!

5.2. C++

Βασικά στοιχεία

Η C++ είναι μια γλώσσα προγραμματισμού γενικής χρήσης, υψηλού επιπέδου, αν και θεωρείται από πολλούς μέσου επιπέδου (mid-level) καθώς συνδυάζει στοιχεία από γλώσσες υψηλού και χαμηλού επιπέδου.

Η γλώσσα αναπτύχθηκε ως βελτίωση της ήδη υπάρχουσας γλώσσας προγραμματισμού C, και αρχικά ονομάστηκε C with Classes (C με κλάσεις).

Η γλώσσα ορίστηκε παγκοσμίως, το 1998, με το πρότυπο ISO/IEC 14882:1998. Το πρότυπο τροποποιήθηκε το 2003 από το τεχνικό επιμελητήριο, ISO/IEC 14882:2003. Η τρέχουσα έκδοση αυτού του προτύπου είναι αυτή του Σεπτεμβρίου του 2011, η ISO/IEC 14882:2011 (άτυπα γνωστή και ως C++11).

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την C σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου
  • Compiler για τη μετάφραση του κώδικα

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Μεταγλώττιση και Εκτέλεση (compilers and execution)

Για τη μετάφραση και μεταγλώττιση του κώδικά μας θα χρειαστούμε κάποιον compiler. Ο πιο ευρέως γνωστός είναι ο GCC (μέρος του GNU project).

Συγγραφή Προγραμμάτων

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, world!";
    return 0;
}

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

$ g++ -o hello hello.cpp     # μετάφραση και μεταγλώττιση του κώδικα.
                             # παράγει το εκτελέσιμο αρχείο "hello"
$ ./hello                    # εκτέλεση του αρχείου
> Hello, World!

Περιβάλλοντα Εργασίας - IDE

Για αυτούς που θέλουν να χρησιμοποιήσουν κάποιο IDE υπάρχουν αρκετά αξιόλογα για τη C++. Μερικά γνωστά είναι το Code::Blocks, το Codelite και το Bloodshed Dev-C++.

Bloodshed Dev-C++

Το περιβάλλον εργασίας Bloodshed Dev-C++ είναι απλό στη χρήση και προσφέρει αρκετές λειτουργίες όπως αυτόματη συμπλήρωση, υποστήριξη CVS, λειτουργία αποσφαλμάτωσης κλπ.

Το Bloodshed Dev-C++ διανέμεται υπό την άδεια GPLv3 και διατίθεται μόνο για Windows.

Code::Blocks

Μία άλλη πολύ καλή επιλογή είναι το Codeblocks. Το Codeblocks περιλαμβάνει μία πληθώρα χαρακτηριστικών που συνεισφέρουν στη γρήγορη, εύκολη και αποδοτική συγγραφή κώδικα. Υποστηρίζει πληθώρα διαφορετικών μεταγλωττιστών και κάνει χρήση του GNU GDB για αποσφαλμάτωση του κώδικα.

To Codeblocks είναι γραμμένο σε C++ και είναι επεκτάσιμο μέσω plugins. Λειτουργεί σε Linux, Mac και Windows και διανέμεται υπό την άδεια GPLv3.

5.3. C Shell

Βασικά στοιχεία

Το C shell (csh ή πιο πρόσφατα tcsh) είναι ένα κέλυφος (shell) Unix, δηλαδή ένας διερμηνευτής γραμμής εντολών για συστήματα τύπου Unix.

Το C shell εκτελεί εντολές συνήθως από ένα παράθυρο κειμένου αλλά μπορεί και να εκτελέσει εντολές αποθηκευμένες σε ένα αρχείο.

Η έκδοση csh που χρησιμοποιούν οι περισσότεροι σύγχρονοι υπολογιστές είναι το tcsh, μία βελτιωμένη έκδοση του csh. Το tcsh είναι συμβατό με το csh.

Ο στόχος του csh έναντι άλλων κελυφών Unix είναι ότι σχεδιάστηκε με σκοπό να μοιάζει στη γλώσσα προγραμματισμού C και να είναι καλύτερο για διαδραστική χρήση.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με το C shell σε μια διανομή Linux είναι τα παρακάτω:

  • Το tcsh για διερμηνεία των εντολών
  • Επεξεργαστής κειμένου αν θέλουμε να δημιουργήσουμε αρχεία εντολών

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Διερμηνεία Γραμμής Εντολών

% echo Hello, World!
> Hello, World!

Συγγραφή Προγραμμάτων

#!/usr/bin/env tcsh

echo Hello, World!

Αφού γράψουμε το κώδικα μας, αποθηκεύουμε το αρχείο με κατάληξη .csh ή .tcsh. Για να εκτελέσουμε το κώδικα μας τρέχουμε σε ένα τερματικό:

$ tcsh hello.csh            # εκτέλεση του αρχείου
> Hello, World!

5.4. Fortran

Βασικά στοιχεία

Η FORTRAN (FORmulae TRANslator) είναι μία από τις πρώτες γλώσσες προγραμματισμού υψηλού επιπέδου. Αρχικά η FORTRAN προοριζόταν για επίλυση μαθηματικών προβλημάτων και χρησιμοποιήθηκε σε επιστημονικές αλλά και εμπορικές εφαρμογές.

Το όνομα της FORTRAN γράφεται παραδοσιακά με κεφαλαία από τότε που η χρήση πεζών γραμμάτων για την αναπαράσταση λέξεων κλειδιών δεν χρησιμοποιούταν. Πλέον επίσημα αναφερόμαστε τη γλώσσα ως Fortran (από τη Fortran 90 και μετά). Αυτή η σύμβαση αντικατοπτρίζεται στην αναφορά με κεφαλαία της FORTRAN στα ANSI X3.9-1966 (FORTRAN 66) και ANSI X3.9-1978 (FORTRAN 77) πρότυπα και έπειτα ως Fortran στα ANSI X3.198-1992 (Fortran 90), ISO/IEC 1539-1:1997 (Fortran 95) και ISO/IEC 1539-1:2004 (Fortran 2003) πρότυπα.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την Fortran σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου
  • Compiler για τη μετάφραση του κώδικα

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Mεταγλώττιση και Εκτέλεση (compilers and execution)

Για τη μετάφραση και μεταγλώττιση του κώδικά μας θα χρειαστούμε κάποιον compiler. Θα χρησιμοποιήσουμε το GFortran (μέρος του GNU project).

Συγγραφή Προγραμμάτων

program hello
    print *, "Hello, World!"
end program hello

Αφού γράψουμε το κώδικα μας, αποθηκεύουμε το αρχείο με κατάληξη .f.FOR, .for, .f77, .f90, .f95). Για να μεταγλωττίσουμε το κώδικα μας τρέχουμε σε ένα τερματικό:

$ gfortran -o hello hello.f # μετάφραση και μεταγλώττιση του κώδικα.
                            # παράγει το εκτελέσιμο αρχείο "hello"
$ ./hello                   # εκτέλεση του αρχείου
> Hello, World!

5.5. HTML

Βασικά στοιχεία

Η HTML (HyperText Markup Language - Γλώσσα Σήμανσης Υπερκειμένου) είναι η κυρίαρχη γλώσσα σήμανσης για τη δημιουργία ιστοσελίδων και τα στοιχεία της είναι τα βασικά δομικά στοιχεία αυτών.

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

Για να συντάξει κάποιος ένα αρχείο HTML σε μια διανομή Linux χρειάζεται τα παρακάτω:

  • Επεξεργαστής κειμένου
  • WebBrowser

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Για WebBrowser μπορούμε να χρησιμοποιήσουμε οποιονδήποτε μοντέρνο WebBrowser που υποστηρίζει τα πιο σύγχρονα πρότυπα (HTML5, CSS3) όπως Firefox, Chromium κλπ.

Συγγραφή Προγραμμάτων

<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

Αφού γράψουμε το κώδικά μας, αποθηκεύουμε το αρχείο με κατάληξη .html. Για να δούμε πώς φαίνεται το ανοίγουμε με κάποιον WebBrowser.

Από γραμμή εντολών μπορούμε να το ανοίξουμε έτσι:

$ $BROWSER hello.html      # άνοιγμα της σελίδας με τον προεπιλεγμένο browser μας

5.6. MIPS32 ASSEMBLY

Η αρχιτεκτονική επεξεργαστών MIPS (Microprocessor without Interlocked Pipeline Stages) είναι μία αρχιτεκτονική υπολογιστή περιορισμένου συνόλου εντολών (RISK; Reduced instruction set computing).

Η αρχιτεκτονική MIPS έχει χρησιμοποιηθεί στη πράξη σε ενσωματωμένα συστήματα (embedded systems) όπως δρομολογητές, πύλες ή κονσόλες βίντεο παιχνιδιών όπως το Sony Playstation 2.

Assembly

Η συμβολική γλώσσα (assembly language) είναι μία γλώσσα χαμηλού επιπέδου, δηλαδή πολύ κοντά στη γλώσσα μηχανής και στο υλικό του υπολογιστή.

Κάθε αρχιτεκτονική επεξεργαστών έχει τη δική της συμβολική γλώσσα. Η αρχιτεκτονική MIPS32 χρησιμοποιεί ακέραιους ενταμιευτές (registers) μεγέθους 32bits.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με τη συμβολική γλώσσα MIPS32 σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου
  • Τον προσομοιωτή spim

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

SPIM

Το spim είναι ένας προσομοιωτής που εκτελεί προγράμματα MIPS32. Διαβάζει και εκτελεί προγράμματα συμβολικής γλώσσας για τον επεξεργαστή MIPS. Επίσης παρέχει έναν απλό αποσφαλματωτή (debugger). Το spim διατίθεται υπό την άδεια BSD.

Συγγραφή Προγραμμάτων

        .text
        .globl main
main:
        li $v0, 4
        la $a0, msg
        syscall
        li      $v0,10
        syscall

        .data
msg:    .asciiz "Hello, World!"

Αφού γράψουμε το κώδικά μας, αποθηκεύουμε το αρχείο με κατάληξη .s ή .asm. Για να εκτελέσουμε το κώδικά μας τρέχουμε σε ένα τερματικό:

$ spim                      # ξεκινάει το spim
> (spim) load "hello.asm"   # φορτώνει το αρχείο αρχείο "hello"
> (spim) run                # εκτέλεση του αρχείου
> Hello, World!
> (spim) exit               # τερματισμός του spim

Επίσης υπάρχει διαθέσιμη και η γραφική διεπαφή για το linux με το όνομα xspim, ενώ για Windows με το όνομα PCSpim.

5.7. Java

Βασικά στοιχεία

Η Java είναι μία αντικειμενοστραφής γλώσσα προγραμματισμού υψηλού επιπέδου.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την Java σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου (editor)
  • Compiler για την μετάφραση του κώδικα σε κώδικα byte (bytecode)
  • Java Virtual Machine (Εικονική Μηχανή) για την εκτέλεση των προγραμμάτων που δημιουργούμε

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Μεταγλώττιση και Εκτέλεση (compilers and execution)

Για να τρέξουμε προγράμματα γραμμένα σε Java χρειαζόμαστε το Java Runtime Enviroment (JRE).

Για να μεταγλωττίσουμε προγράμματα γραμμένα σε Java χρειαζόμαστε το Java Development Kit (JDK).

Και για τα 2 παραπάνω μπορούμε να χρησιμοποιήσουμε το OpenJDK που διατίθεται υπό GPLv2 with Classpath Exception.

Συγγραφή Προγραμμάτων

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

Μπορούμε να γράψουμε προγράμματα σε Java εύκολα με τον αγαπημένο μας editor όπως π.χ. το gedit ή geany ή vim.

Αφού γράψουμε το κώδικα Java τα εργαλεία του OpenJDK μας επιτρέπουν να μεταγλωττίσουμε και να τρέξουμε τα προγράμματα μας. Τα βήματα είναι τα εξής:

$ javac Hello.java # Μεταγλώττιση του κώδικα Hello.java σε bytecode
                   # και παραγωγή αρχείου Hello.class
$ java Hello       # Εκτέλεση του κώδικα byte Hello.class
> Hello, world!

Περιβάλλοντα Εργασίας - IDE

Για αυτούς που θέλουν να χρησιμοποιήσουν κάποιο IDE υπάρχουν αρκετά αξιόλογα για τη Java. Τα δύο πιο ευρέως γνωστά είναι το NetBeans και το Eclipse. Μια επίσης ενδιαφέρουσα επιλογή είναι το BlueJ.

NetBeans

Το NetBeans περιέχει πάρα πολλά εργαλεία ενσωματωμένα που στοχεύουν να διευκολύνουν το προγραμματιστή και να αυξήσουν την αποδοτικότητά του.

Μερικά από τα χαρακτηριστικά του NetBeans είναι αυτόματη συμπλήρωση κώδικα, άμεση διόρθωση και επισήμανση συντακτικών λαθών, refactoring κ.α.

Το NetBeans διατίθεται υπό CDDL και GPLv2 with Classpath Exception.

Eclipse

Μία εναλλακτική επιλογή είναι το Eclipse. Το Eclipse μοιάζει πολύ στο NetBeans από πλευράς χαρακτηριστικών. Η μεγαλύτερη διαφορά έγκειται στην αρχιτεκτονική ανάπτυξης των δύο αυτών project. Το Eclipse έχει δομηθεί έτσι ώστε να προσφέρει ένα πολύ επεκτάσιμο σύστημα προσθέτων (plugins). Έχει ένα σταθερό πυρήνα, και προσφέρει όλες τις υπηρεσίες του μέσω προσθέτων. Κατά αυτό το τρόπο, το Eclipse δε περιορίζεται στην ανάπτυξη προγραμμάτων μόνο σε Java, αλλά μπορεί να χρησιμοποιηθεί και για την ανάπτυξη προγραμμάτων σε άλλες γλώσσες προγραμματισμού όπως C, C++, Ada, Perl, PHP, Python, Ruby, κ.α.

Το Eclipse διατίθεται υπό την Eclipse Public License.

BlueJ

Το περιβάλλον εργασίας BlueJ έχει αναπτυχθεί για διδακτικούς σκοπούς, με στόχο να στηρίξει και να διδάξει αντικειμενοστραφείς μεθόδους ανάπτυξης λογισμικού.

Το BlueJ προσφέρει γραφικές απεικονίσεις της δομής των προγραμμάτων υπο-κατασκευή, διαδραστικές διεπαφές πάνω στα διαγράμματα για τη παραγωγή αντικειμένων, τάξεων, μεθόδων και κώδικα.

Το BlueJ διατίθεται υπό την άδεια χρήσης GPLv2.

5.8. PHP

Βασικά στοιχεία

Η PHP είναι μία γλώσσα γενικού σκοπού για να εκτελείται από μεριάς εξυπηρετητή (server-side). Αρχικά σχεδιάστηκε για την ανάπτυξη διαδικτυακών εφαρμογών παράγοντας δυναμικές ιστοσελίδες.

Η PHP διανέμεται υπό την άδεια PHP.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την PHP σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου
  • Interpreter για τη διερμηνεία του κώδικα

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Εκτέλεση (execution)

Για την εκτέλεση του κώδικά μας θα χρειαστούμε την PHP την οποία και εγκαθιστούμε μέσω του package manager μας. Μετά την εγκατάσταση κάνουμε restart τον WebServer μας άν σκοπεύουμε να εκτελούμε τα php αρχεία μέσω ενός browser.

Συγγραφή Προγραμμάτων

<?php
    echo "Hello, World!";
?>

Αφού γράψουμε το κώδικα μας, αποθηκεύουμε το αρχείο με κατάληξη .php. Για να εκτελέσουμε το κώδικα μας το ανοίγουμε με κάποιον WebBrowser.

Για παράδειγμα από γραμμή εντολών μπορούμε να το ανοίξουμε δίνοντας:

$ $BROWSER hello.html      # άνοιγμα της σελίδας με τον προεπιλεγμένο browser μας
[Warning]

Για να ανοίξουμε τη σελίδα με WebBrowser πρέπει να κάνουμε χρήση ενός εξυπηρετητή διαδικτύου (WebServer) όπως του Apache.

Εναλλακτικά μπορούμε να εκτελέσουμε αρχεία php από τη γραμμή εντολών για να μας τυπώσει την παραγώμενη html εκεί. Έτσι το παραπάνω πρόγραμμα γίνεται:

#!/usr/bin/env php
 <?php
        echo "Hello, World!";
 ?>

και για να εκτελέσουμε τον κώδικα μας τρέχουμε σε ένα τερματικό:

$ php hello.php            # εκτέλεση του αρχείου
> Hello, World!

5.9. VHDL

Βασικά στοιχεία

Η VHDL (VHSIC hardware description language) είναι μία γλώσσα περιγραφής υλικού που χρησιμοποιείται για σχεδίαση ψηφιακών συστημάτων όπως ολοκληρωμένα κυκλώματα κλπ.

Τα βασικά εργαλεία που χρειαζόμαστε για να εργαστούμε με την VHDL σε μια διανομή Linux είναι τα παρακάτω:

  • Επεξεργαστής κειμένου (editor)
  • Έναν προσομοιωτή για VHDL
  • Προαιρετικά ένα πρόγραμμα που να απεικονίζει γραφικά τα σήματα

Ως επεξεργαστή κειμένου μπορούμε να χρησιμοποιήσουμε οποιονδήποτε προτιμάμε, πχ vim, nano, gedit, κλπ. Για κονσόλα επίσης κάνει οποιαδήποτε, πχ gnome-terminal, kterm, xterm, κλπ.

Προσομοίωση (Simulation)

Για τη προσομοίωση θα χρειαστούμε έναν προσομοιωτή VHDL. Μία επιλογή ανοιχτού κώδικα είναι ο GHDL.

Ο GHDL είναι βασισμένος στο GCC και λειτουργεί σε Linux, Mac και Windows. Διατίθεται υπό την άδεια GPL.

Γραφική Απεικόνιση Σημάτων

Για να ελέγξουμε το σχέδιο που έχουμε φτιάξει σε VHDL, πολλές φορές είναι χρήσιμη μία γραφική απεικόνιση των σημάτων μας.

Για τη γραφική απεικόνιση των σημάτων μπορούμε να χρησιμοποιήσουμε ένα πρόγραμμα που απεικονίζει γραφικά κυματομορφές. Μία επιλογή που είναι το GTKWave που μπορεί να συνδυαστεί εύκολα με το GHDL.

Συγγραφή Προγραμμάτων

--  Hello world program.
 use std.textio.all; --  Imports the standard textio package.

 --  Defines a design entity, without any ports.
 entity hello_world is
 end hello_world;

 architecture behaviour of hello_world is
 begin
        process
           variable l : line;
        begin
           write (l, String'("Hello world!"));
           writeline (output, l);
           wait;
        end process;
 end behaviour;

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

 $ ghdl -a hello.vhdl   # παράγει αρχείο που περιγράφει την αρχιτεκτονική
 $ ghdl -e hello_world  # παράγει το εκτελέσιμο αρχείο

 $ ghdl -r hello_world  # εκτέλεση του αρχείου
 > Hello world!

 # Εναλλακτικά για γραφική απεικόνιση των σημάτων
 $ ghdl -r hello_world --vcd=hello_world.vcd
 $ gtkwave hello_world.vcd

6. Μέρος Δ - Συσχέτιση Μαθημάτων

6.1. Τμήμα Πληροφορικής Ο.Π.Α.

  • Α' Εξάμηνο

    • Μαθήματα κορμού πληροφορικής

      • Εισαγωγή στην Επιστήμη των Υπολογιστών
      • Εισαγωγή στον Προγραμματισμό Υπολογιστών
    • Μαθήματα κορμού μαθηματικών

      • Διακριτά Μαθηματικά
      • Μαθηματικός Λογισμός
    • Μαθήματα οικονομικών

      • Εισαγωγή στην Οικονομική Επιστήμη
  • Β' Εξάμηνο:

    • Μαθήματα κορμού πληροφορικής

      • Προγραμματισμός Υπολογιστών με JAVA
      • Σχεδίαση Ψηφιακών Συστημάτων
    • Μαθήματα κορμού μαθηματικών

      • Γραμμική Άλγεβρα και Εφαρμογές
      • Υπολογιστικά Μαθηματικά
    • Μαθήματα οικονομικών

      • Λογιστική
  • Γ' Εξάμηνο:

    • Μαθήματα κορμού πληροφορικής

      • Δομές Δεδομένων
      • Οργάνωση Συστημάτων Υπολογιστών
      • Προγραμματισμός Υπολογιστών με C++
    • Μαθήματα κορμού μαθηματικών

      • Πιθανότητες
  • Δ' Εξάμηνο:

    • Μαθήματα κορμού πληροφορικής

      • Αλγόριθμοι
      • Αυτόματα και Πολυπλοκότητα
      • Βάσεις Δεδομένων
      • Λειτουργικά Συστήματα

Αναλυτικά

Σημείωση: Δείτε τη τελευταία γραμμή κάθε παραγράφου για τις τεχνολογίες που χρησιμοποιούνται.

Α' Εξάμηνο

Εισαγωγή στην Επιστήμη των Υπολογιστών

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

Για την εισαγωγή στις έννοιες του προγραμματισμού σε συμβολική γλώσσα μπορείτε να χρησιμοποιήσετε το Lia και το BMach.

Εισαγωγή στον Προγραμματισμό Υπολογιστών

  • Εισαγωγικό μάθημα στον προγραμματισμό. Γνωριμία με θεμελιώδεις έννοιες τύπων δεδομένων και εκτέλεσης αλγορίθμων, δομές ελέγχου ροής προγράμματος, πράξεις, χρήση και δημιουργία συναρτήσεων και βασικό χειρισμό αρχείων.
  • Εισαγωγή στην Java

Β' Εξάμηνο

Προγραμματισμός Υπολογιστών με Java

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

Σχεδίαση Ψηφιακών Συστημάτων

  • Αρχές δυαδικής αριθμητικής. Άλγεβρα Boole και λογικές πύλες. Μέθοδοι απλοποίησης συναρτήσεων και κυκλωμάτων με πίνακες Karnaugh.
  • Σχεδίαση συνδυαστικών κυκλωμάτων. Δισταθή παλμοκυκλώματα (flip flops). Σχεδίαση σύγχρονων ακολουθιακών κυκλωμάτων.
  • Υλοποίηση μονάδων ελέγχου μικροεπεξεργαστών (ALUs).

Χρησιμοποιείται το πακέτο CAD Quartus II της Altera χρησιμοποιώντας την γλώσσα VHDL.

Υπολογιστικά Μαθηματικά

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

Στα εργαστήρια διδάσκεται προγραμματισμός σε Fortran και SciLab.

Γ' Εξάμηνο

Δομές Δεδομένων

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

Για την υλοποίηση των δομών δεδομένων χρησιμοποιείται η γλώσσα προγραμματισμού Java.

Οργάνωση Συστημάτων Υπολογιστών

  • Δομή και λειτουργία του υλισμικού υπολογιστών. Οργάνωση και δομή κύριας μνήμης, αποθήκευση και παράσταση δεδομένων.
  • Αριθμητική υπολογιστών. Σωλήνωση και παράλληλοι υπολογιστές.
  • Λειτουργία και έλεγχος των περιφερειακών συσκευών. Μαγνητικές και οπτικές συσκευές. Δευτερεύουσα μνήμη και ιεραρχία μνήμης. Παγίδες, διακοπές και συστήματα ελέγχου εισόδου/εξόδου.
  • Προγραμματισμός σε επίπεδο γλώσσας μηχανής και συμβολικής γλώσσας.

Χρησιμοποιείται η γλώσσα υπολογιστών MIPS32 και ο εξομοιωτής SPIM.

Προγραμματισμός Υπολογιστών με C++

  • Εισαγωγή στο προγραμματισμό με C++. Διαδικαστικός προγραμματισμός, αντικειμενοστραφής προγραμματισμός. Λέξεις κλειδιά της γλώσσας. Δείκτες και θέσεις μνήμης.
  • Τάξεις, κατασκευαστές, καταστροφείς. Pass by value, pass by reference. Ελευθέρωση μνήμης.

Το περιβάλλον εργασίας είναι το BloodShed DevC++.

Δ' Εξάμηνο

Αλγόριθμοι

  • Bασικές αρχές αλγορίθμων. Διαίρει και βασίλευε. Αναδρομή. Ταξινόμηση. Γράφοι και γραφήματα.
  • Αποστάσεις, αναζήτηση σε βάθος ή πλάτος. Συντομότερες διαδρομές. Δυναμικός προγραμματισμός.
  • Βάρη ακμών. Γραμμικός προγραμματισμός. NP-πληρότητα. Εφαρμογές παράστασης γράφων σε Java.

Αυτόματα και Πολυπλοκότητα

  • Πεπερασμένα αυτόματα, Αυτόματα στοίβας, Μηχανές Turing, Επιλύσιμα προβλήματα,
  • Μη επιλύσιμα προβλήματα (κλάσεις P, NP, NP-complete προβλήματα).

Βάσεις Δεδομένων

  • Διαγράμματα Οντοτήτων-Συσχετίσεων. Αρχές Σχεδιασμού. Σχεσιακά Μοντέλα. Εισαγωγή στην MS-SQL και MS-SQL-Server. Σχεσιακή Aλγεβρα.
  • Ανάπτυξη εφαρμογών Ιστού οδηγούμενων από Βάσεις Δεδομένων.
  • Constraints και Triggers. Transactions. Indexing. Τεχνικές εξουσιοδότησης. Μη σχεσιακές γλώσσες επερωτήσεων.

Χρησιμοποιείται: MS-SQL 2008, MS-SQL-Server 2008, xPath, xQuery.

Λειτουργικά Συστήματα

  • Επικοινωνία Διεργασιών (IPC, pipes). Παραλληλία (Concurency). Αμοιβαίος αποκλεισμός, σηματοφορείς, race conditions, συγχρονισμός διεργασιών. Deadlocks, detection and recovery.
  • Οργάνωση πυρήνα. Μονολιθικά και Αποκεντρωτικά συστήματα. Χρονοπρογραμματισμός CPU. Διακοπές και παγίδες.
  • Επικοινωνία με περιφεριακές συσκευές, τερματικά, εκτυπωτές, μνήμη, σκληροί δίσκοι (IO Management).
  • Διαχείρηση μνήμης, σελιδοποίηση, τεμαχισμός, πολιτικές. Εφαρμογές σε UNIX συστήματα. Βασικά προγράμματα και εντολές.

Εισαγωγή σε shell-scripting. Εισαγωγή στη C.