Γλώσσα Προγραμματισμού Μ2000 έκδοση 8

Ξεκίνησε από bugman, 24 Ιουλ 2015, 11:59:33 ΜΜ

« προηγούμενο - επόμενο »

bugman

Μετά από 15 χρόνια με μια δεκαετία σε παύση, η γλώσσα Μ2000, (Μαθητής 2000) έφθασε στην έκδοση 8 με χειρισμό αντικειμένων. Οι εντολές είναι σε δύο γλώσσες, ελληνική και αγγλική, όπως και τα μηνύματα λάθους.
Στα πλεονέκτημα της είναι η χρήση κλάσεων, ομάδων, τμημάτων και συναρτήσεων, ρουτινών, νημάτων (για παράλληλη διεργασία), καθώς και ένα ολοκληρωμένο περιβάλλον εκτέλεσης, με γραφικά, 2 διαστάσεων, με καρτεσιανές και πολικές συντεταγμένες, χρήση εικόνων, αρχείων ήχου και βίντεο, χρήση βάσεων δεδομένων και ODBC, χρήση συνθεσάιζερ φωνής και παραγωγή μουσικής με νότες, σε 16 φωνές και 128 όργανα, χρήση σωληνώσεων για δημιουργία πελάτη εξυπηρετητή, και τέλος επικοινωνία με αντικείμενα εφαρμογές όπως το Word και το Excel.
Η γλώσσα Μ2000 είναι γραμμένη σε Visual Basic 6 και δεν χρησιμοποιεί κάποιες ιδιαίτερες βιβλιοθήκες αλλά κοινές του συστήματος. Έχει δε δικό της σύστημα διαλόγων οι οποίοι προσαρμόζωνται στο μέγεθος μαζί με το μέγεθος των γραμμάτων.
Ο κώδικας είναι ανοικτός
Δείτε αναφορές εδώ georgekarras.blogspot.gr

Σκοπός μου είναι να μπεί η γλώσσα στην δημόσια εκπαίδευση. Προς το παρόν την μαθαίνω σε παιδιά δημοτικού.

bugman

Αυτή την εποχή γράφω το Language Definition στα αγγλικά. Αμέσως μετά θα το γράψω στα Ελληνικά, εφόσον όλες οι εντολές είναι στα ελληνικά.
Για να τρέξει το περιβάλλον της γλώσσας χρειάζονται δυο αρχεία το m2000.exe και το Help2000.mdb. Με την πρώτη εκκίνηση Ctrl+U ή Ρυθμίσεις για να ρυθμίσετε χρώματα και μέγεθος γραμμάτων καθώς και διάστοιχο (line spacing). Θα τα βρείτε στον κώδικα (κατεβαίνουν με zip). Το αρχείο m2000.exe είναι υπογεγραμμένο οπότε δεν υπάρχει θέμα "παραβίασης". Το ca.crt που υπαρχει στο κώδικα μπορεί να χρησιμοποιηθεί ως πιστοποιητικό ρίζας.

Ο κώδικας είναι ανοικτός εδώ και για όσους θέλουν να κάνουν αλλαγές χρειάζονται την Visual Basic 6 Enterprise Εdition και  μια αναφορά στην Idispatch.tlb που περιλαμβάνεται στο κώδικα.
Αυτή τη στιγμή είναι στην έκδοση 8 και αναθεώρηση 18. Προφανώς θα έλθουν και άλλες αναθεωρήσεις. Επίσης το αρχείο Help2000.Mdb εμπλουτίζεται ακόμα (έχει περίπου 400 εντολές σε ελληνικά και αγγλικά και λείπουν ακόμα)



bugman

Παράδειγμα "σκακιέρες"...ή πως να σχηματίσεις σκακιέρα με πιόνια σε τρία μεγέθη στην οθόνη (αυτό δεν μπορεί να το κάνει η ΓΛΩΣΣΑ).

http://georgekarras.blogspot.gr/2015/08/2000_24.html

bugman

Ευχαριστώ τον Alkis, για αυτόν τον χώρο!
Βεβαίως και δεν θέλω να καταχραστώ το χώρο. Και σε καμία περίπτωση να κάνω Pagerank (αυτό δεν το είχα σκεφτεί Alkis...είσαι φοβερός...όλες ιδέες).
Θα αναρτήσω κάτι μόνο αν δω ότι ενδιαφέρει το προσωπικό των δημοτικών-γυμνασίων και λυκείων, ή και μαθητές,  το πεδίο εφαρμογής του Φόρουμ. (Αλλιώς θα λεγόταν το Στέκι της Πληροφορικής)...
Και πάλι ευχαριστώ!


alkisg

Παράθεση από: bugman στις 03 Νοε 2015, 01:47:59 ΜΜ
Ευχαριστώ τον Alkis, για αυτόν τον χώρο!
Βεβαίως και δεν θέλω να καταχραστώ το χώρο. Και σε καμία περίπτωση να κάνω Pagerank (αυτό δεν το είχα σκεφτεί Alkis...είσαι φοβερός...όλες ιδέες).
Θα αναρτήσω κάτι μόνο αν δω ότι ενδιαφέρει το προσωπικό των δημοτικών-γυμνασίων και λυκείων, ή και μαθητές,  το πεδίο εφαρμογής του Φόρουμ. (Αλλιώς θα λεγόταν το Στέκι της Πληροφορικής)...
Και πάλι ευχαριστώ!

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

bugman

Ένα μικρό πρόγραμμα που φτιάχνει τρία καταγραφικά με είσοδο από τρεις ταλαντωτές. Σε κάθε ένα σχηματίζουμε μια ταλάντωση από ένα σχήμα ακολουθώντας την αλλαγή ύψους σε σχέση με καθένα από τα 120 τμήματά του. Δεν υπάρχει γλώσσα με τόσες λίγες γραμμές εντολών να φτιάξουμε κάτι ανάλογο. Είδα και το MicroWorlds το οποίο σαν προτέρημα έχει την χρήση στοιχείων ελέγχου όπως sliders για πέρασμα τιμών, αλλά οι εντολές περιορίζονται μέσα σε μια εκπαιδευτική φόρμα με ελάχιστες δυνατότητες παραμετροποίησης της εξόδου. Σε αντίθεση η Μ2000 όπως φαίνεται και από το παράδειγμα εστιάζει στη διαμόρφωση της οθόνης με πλήρη έλεγχο σε επίπεδο γραφικών. Τα καταγραφικά δουλεύουν με αποθήκευση τμήματος εικόνας και στο επόμενο δέκατο του δευτερολέπτου την επανατοποθετούν κατά ένα βήμα που έχουμε ορίσει, και έτσι πετυχαίνουμε οριζόντια ολίσθηση σε τρία τμήματα στην οθόνη. Αν το δει κανείς πιο τεχνικά, η αποθήκευση εξόδου και η επαναχρησιμοποίησή  της, είναι μια λειτουργία ανάδρασης, με την οθόνη να γίνεται στοιχείο εισόδου. Κάθε νέα εμφάνιση είναι αποτέλεσμα τριών ταλαντωτών και της ανάδρασης της οθόνης.
http://georgekarras.blogspot.com/2015/11/blog-post_10.html

bugman



Από το facebook...(δεν ξέρω αν βγαίνει...το έβαλα δοκιμαστικά).
Αν θέλει κανείς να επικοινωνήσει για θέματα της Μ2000 είμαι εδώ: https://www.facebook.com/Lightmotion

bugman


bugman

Ένα θέμα που σίγουρα θα έχει απασχολήσει καθηγητές πληροφορικής είναι το πώς μπορεί κάποιος να δείξει δυαδικά νούμερα και να τα χειριστεί, π.χ. με ολίσθηση, περιστροφή, να αλλάξει κάποια bit, και επιπλέον να δει τη διαφορά του Sign από τον Unsign ακέραιο
Αυτές γίνονται με εργασίες με δυαδικό εδώ  (και οι μεταβλητές που χρησιμοποιώ είναι πραγματικές, οι συναρτήσεις για το δυαδικό δουλεύουν "λογικά" και όχι άμεσα σε bits στην μνήμη - αφού έχουμε πραγματικούς εδώ)
http://georgekarras.blogspot.gr/2015/12/blog-post_21.html

bugman

Ο κώδικας είναι και στο github. (αλλά τα ελληνικά μου τα χαλάει - κάτι δεν έχω ρυθμίσει μάλλον- πάντως κατεβαίνει κανονικά, τα αρχεία είναι οκ. Κάθε νέα αναθεώρηση θα τη βάζω και εκεί και στο dropbox.

https://github.com/M2000Interpreter/Version8/

bugman

Πιανάκι στη Μ2000 (με κλαβιέ..ζωγραφιστό)
Εδώ είναι η εικόνα: http://4.bp.blogspot.com/-SqXPhDJBOlo/VoLSr2ILqYI/AAAAAAAAD_A/tQ8MNzEhGMI/s1600/piano.png
Παίζει σαν πιάνο, με συγχωρδίες, και εμφανίζει τα πατημένα πλήκτρα στο κλαβιέ. Όταν σηκώνουμε το πλήκτρο απελευθερώνεται η "φωνή"
http://georgekarras.blogspot.gr/2015/12/004.html


bugman

Αναθεώρηση 135.
Ανέβασα και παραδείγματα ένα πολύ δυνατό με πίνακα κατακερματισμού, και ένα με συνδεδεμένη λίστα (όπου μαζί δίνω και ένα αντικείμενο ΜΕΜ που παρέχει Malloc και MFree σε εσωτερική μνήμη για αντικείμενα.

bugman

Αφού έφτιαξα με Μ2000 το αντικείμενο ΜΕΜ που δίνει μια Malloc για αντικείμενα, συμπλήρωσα τα παραδείγματα με ένα δένδρο αναζήτησης (μάλιστα στο ίδιο αντικείμενο "μνήμης" έβαλα δυο δένδρα).

bugman

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

bugman

#14
Οι αναθεωρήσεις σταματούν στην 147..και για την ώρα βγαίνει η 147 ως stable και η 151 δίνεται ως unstable. Χρειάζεται να εξεταστεί και άλλο. Στην 150 άλλαξε εσωτερικά ο τρόπος καταχώρησης, αναζήτησης, διαγραφής..μεταβλητών, πινάκων, τμημάτην, συναρτήσεων, αντικειμένων, με χρήση πινάκων κατακερματισμού. Αν και η σειριακή αναζήτηση για πρόσφατες μεταβλητές είναι γρήγορη, ο τρόπος καταχώρησης στη 147 έχει λογαριθμική απόκριση, ενώ με το πίνακα κατακερματισμού  έχουμε γραμμική.

bugman

#15
Η γλώσσα Μ2000 ολοκληρώθηκε με την εισαγωγή ιδιωτικών και δημόσιων μεταβλητών/πινάκων/τμημάτων/συναρτήσεων/ομάδων στις ομάδες (αντικείμενα της Μ2000).

Εδώ είναι ένα δείγμα κώδικα. Δείχνει πως φτιάχνουμε μια κλάση, πως φτιάχνουμε ένα αντικείμενο Α, ποιος φτιάχνουμε ένα πίνακα με αντικείμενα. Η Μ2000 χωρίζει τα αντικείμενα σε επώνυμα και ανώνυμα. Στους πίνακες έχουμε ανώνυμα αντικείμενα. Τα ανώνυμα αντικείμενα μπορούν να αντικατασταθούν, ή να πάρουν πρόσκαιρα όνομα και να επεκταθούν με κάποιο άλλο. Τα επώνυμα (ή στατικά θα έλεγε κανείς), μπορούν να επεκταθούν, να αντιγραφούν (η Κλάση Αλφα { } δημιουργεί μια συνάρτηση που επιστρέφει ομάδα, επιστρέφει μια ανώνυμη ομάδα, και αν θέλουμε τη δίνουμε σε στοιχείο πίνακα ή σε μεταβλητή).
Στη Μ2000 οι συναρτήσεις μπορούν να επιστρέφουν πίνακες και αντικείμενα. Επίσης επειδή ελέγχουμε τον σωρό τιμών (την είσοδο στο τμήμα και στην συνάρτηση, μπορούμε να ρυθμίζουμε τη απόκριση ανιχνεύοντας τι είσοδο έχουμε. Στη κλάση άλφα έχουμε τον κατασκευαστή, τμήμα άλφα, που κοιτάει αν έχει κάτι ο σωρός και εδώ δεν ελέγχει αν είναι αριθμός - θα μπορούσε να το κάνει και αυτό).
Ότι έχει δηλωθεί στο μέρος με την ετικέτα ιδιωτικό: είναι ορατά μόνο στις συναρτήσεις και τα τμήματα του της κλάσης (αλλά όχι σε τμήματα και συναρτήσεις που μπορούμε να ορίσουμε σε αυτές).

Το παρακάτω πρόγραμμα τρέχει κανονικά στο περιβάλλον του διερμηνευτή της Μ2000. Θα μπορούσε κάποτε αυτή η διάρθρωση να περιλαμβάνει και τύπους αντικειμένων, αλλά δεν έχουν για την ώρα (τα αντικείμενα στη Μ2000 δεν έχουν τύπο. Η μόνη περίπτωση "τύπου" είναι η κοινή συνύπαρξη σε πίνακα που έχει δηλωθεί με ένα αντικείμενο, όπου οι συναρτήσεις και τα τμήματα  γίνονται πάγια για όλα τα στοιχεία, όμως μπορούμε να έχουμε πίνακα με διαφορετικές ομάδες σε σύνθεση, δεν είναι ανάγκη να δηλωθεί κοινή τιμή). Οι πίνακες στη Μ2000 είναι δυναμικοί, δηλαδή αντί να χρειαζόμαστε κάποια ειδική malloc για να κάνουμε χώρο για αντικείμενα, μπορούμε να κάνουμε επέκταση σε ένα πίνακα. Δείτε όμως ότι ένα αντικείμενο μπορεί να έχει πίνακες και σε αυτούς άλλα αντικείμενα.
Γενικά στην Μ2000 προβάλλεται η ελευθερία σκέψης και όχι οι περιορισμοί που έχουν την αξία τους βέβαια σε μεγάλα έργα ώστε να αποφεύγονται λάθη, ειδικά όταν ταιριάζουμε κώδικα από διάφορες πηγές.
Εδώ η Μ2000 απευθύνεται σε εκείνους που ενδιαφέρονται για τις ιδέες περισσότερο, να τις αναπτύξουν, και μετά φτιάχνουν κάποια απλή εφαρμογή. Στο Blog έχω δώσει παραδείγματα, με δυαδικά δένδρα, πίνακες κατακερματισμού, ακόμα και μια malloc για οποιοδήποτε αντικείμενο, γραμμένη σε Μ2000.

Κώδικας: javascript
\\ Παράδειγμα Κλάσης στη Μ2000
Κλάση Αλφα {
Ιδιωτικό:
      χ=1, ψ=1
      παράγοντας=1, παλιά_τιμή
      Συνάρτηση Μηδεν {
            = (.χ=0 και .ψ=0) ή .παράγοντας=0
      }
Δημόσιο:
      Τμήμα  παράγοντας {
              Διάβασε .παράγοντας
      }
      Τμήμα Φύλαξε {
            άλλαξε .παλιά_τιμή, .παράγοντας      
      }
      Τμήμα Αλφα {
            Αν όχι κενό τότε Διάβασε .παράγοντας
      }
      Τμήμα ΆλλαξεΧΨ {
            Διάβασε χ1, ψ1
            .χ<=χ1/.παράγοντας
            .ψ<=ψ1/.παράγοντας
            Αν .Μηδεν() τότε Λάθος "Μηδέν"
      }
      Συνάρτηση ΔώσεΧ {
            =.χ*.παράγοντας
      }
      Συνάρτηση ΔώσεΨ {
            =.ψ*.παράγοντας
      }
}

Α=Αλφα(10)
Α.ΆλλαξεΧΨ 100,50
Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
Α.παράγοντας 5
Τύπωσε Α.ΔώσεΧ(), Α.ΔώσεΨ()
\\ καμία από τις παρακάτω δεν είναι έγκυρες εκφράσεις
\\ οι μεταβλητές είναι ιδωτικές
Τύπωσε Έγκυρο(Α.παράγοντας), Έγκυρο(Α.χ)   \\0  0
Πίνακας Α(100)=Αλφα()
Για ι=0 έως 99 {
      Α(ι).ΆλλαξεΧΨ ι**2+1, ι**3+1            
}
Τύπωσε "οκ"
Για ι=5 έως 6 {
      Για Α(ι) {
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .Φύλαξε
              .παράγοντας 10
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .παράγοντας 50
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
              .Φύλαξε
              Τύπωσε .ΔώσεΧ(),.ΔώσεΨ()
      }
}

bugman


Από την αναθεώρηση 157 η Μ2000 τρέχει χωρίς να χρειάζεται να ρυθμίσουμε τα Ελληνικά ως γλώσσα για προγράμματα που δεν υποστηρίζουν Unicode (υπήρχάν δυο τρία λάθη που απέτρεπαν την δυνατότητα αυτή).
Το παρακάτω πρόγραμμα τρέχει σε οποιοδήποτε υπολογιστή με Windows από Xp και πάνω (με οποιαδήποτε γλώσσα). Με την λέξη "Ευρεία" χρησιμοποιούμε Unicode UTF16LE.
Το τρίτο παράδειγμα γράφει το BOM το χαρακτήρα που δηλώνει τι είναι (UTF-16LE), ώστε με διπλό κλικ στο αρχείο να ανοίξει στο Notepad ως unicode.

Κώδικας: javascript
\\ Παράδειγμα 1
κ=1
\\ αρχείο unicode με διαχωρισμό εξαγωγής σε αριθμούς-γράμματα
\\ https://en.wikipedia.org/wiki/Comma-separated_values
Άνοιξε "αλφα.cvs" για ευρεία εξαγωγή ως κ
Γράψε #κ, "Ένα όνομα", 100, 3213, "Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.cvs" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Εισαγωγή #κ, Α$,Α, Β, Β$
      Τύπωσε Α$,Α, Β, Β$
}
Κλείσε #κ
\\ Παράδειγμα 2
κ=1
\\ χωρίς χρήση BOM (ενδεικτικού χαρακτήρα)
Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
Τύπωσε #κ, "Γεια χαρά ! == Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Γραμμή Εισαγωγής #κ, Α$
      Τύπωσε Α$
}
Κλείσε #κ
\\ Παράδειγμα 3
κ=1
\\ με χρήση BOM (ενδεικτικού χαρακτήρα)
Άνοιξε "αλφα.txt" για ευρεία εξαγωγή ως κ
Τύπωσε #κ, χαρκωδ$(0xFEFF)+"Γεια χαρά ! == Привет игровая площадка!"
Κλείσε #κ
Αναμονή 100
Άνοιξε "αλφα.txt" για ευρεία εισαγωγή ως κ
Ενώ όχι Τέλος(#κ) {
      Γραμμή Εισαγωγής #κ, Α$
      Τύπωσε Μεσ$(Α$,2)
}
Κλείσε #κ

bugman

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

Εγχειρίδιο της Μ2000 σε τεύχη

bugman

Έβαλα γεγονότα Events στη  Μ2000. Μπορεί κανείς να βάζει ή να βγάζει συναρτήσεις σε ένα Γεγονός, και όταν στέλνουμε δεδομένα πάνε σε όλες, ας πούμε συναρτήσεις εξυπηρέτησης του γεγονότος (multicast λέγεται αυτό). Μπορούμε να περνάμε και με αναφορά ώστε να επιστρέφουμε τιμές από το σημείο που σηκώσαμε ένα γεγονός (καλέσαμε μάλλον). Το παράδειγμα είναι γραμμένο με τις αγγλικές εντολές της Μ2000, μπορεί να γραφτεί και με τις ελληνικές. Εδώ σηκώνουμε ένα OnSpaceBar γεγονός που έχουμε δημιουργήσει, και ένα νήμα ξεκινάει μια εργασία, πρώτα όμως απενεργοποιεί  (hold) το αντικείμενο OnSpaceBar για να μην δεχτεί άλλα μηνύματα και μετά συνεχίζει (ενώ παράλληλα το Main.Task εξυπηρετεί, π.χ. μπορούμε να διακόψουμε τη διεργασία), και στο τέλος ενεργοποιεί (release) ξανά το γεγονός. Συνάμα για να έχει ενδιαφέρον, ένα αντικείμενο έχει δυο γεγονότα και μέσα από αυτά καταγράφει πόσες γραμμές εμφανίζουμε και πόσες ολοκληρωμένες εργασίες έκανε το νήμα. Το νήμα απλά μας δείχνει το ποσοστό ολοκλήρωσης (το μοιράζουμε σε 30 διαστήματα). Για το νήμα και το κύριο έργο που είναι νήμα και αυτό δίνουμε ένα αριθμό, σε χιλιοστά του δευτερολέπτου που θα ξεκινάει ο κώδικάς τους (δεν μπορεί να ξεκινήσει ενώ ήδη τρέχει γιατί όταν τρέχει ένα νήμα έχει βγεί από την ουρά αναμονής και είναι στην ουρά εκτέλεσης, και μόνο όσα νήματα είναι σε αναμονή δύναται να ξεκινήσουν). Ο τρόπος που δίνουμε "Εργασία" στο νήμα είναι με το να κάνουμε εκτέλεση εντολών από άλλο νήμα, με την execute. Με την εντολή Data βάζουμε στο τέλος του σωρού τιμών..τιμές  (από εκεί διαβάζει η Διάβασε ή Read). Τα νηματα στο ίδιο τμήμα έχουν κοινές τις μεταβλητές και τις συναρτήσεις, αλλά χωριστά τις στατικές μεταβλητές και τον σωρό τιμών (την ουρά). Επίσης τα νήματα δεν έχουν όνομα αλλά αριθμό, και αν βάλουμε τον ορισμό σε επανάληψη θα μας φτιάξει ο διερμηνευτής κάμποσα!

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

Κώδικας: javascript
Event OnSpaceBar {
      Read  t, a$, b
}
Class Inform1 {
Private:
      total, complete
Public:
      Event AddOne { }
      Event Print { 
            Read what$
      }
      Function Any {      
                  Read a$
                      .total++
                     Print a$
            }    
      Function AddNow {
            .complete++
      }
      Module Init {
           Event .Print new .Any()
           Event .AddOne new .AddNow()
      }
      Module PrintHelp {
            Call Event .Print
      }
      Module AddHelp {
            Call Event .AddOne
      }
      Module TotalPrint {
            Print "Total Lines:", .total
            Print "Complete Works:", .complete
      }
}
Global Group Inform=Inform1()
\\ fix references when we have an instance
Inform.init
Function OnSpaceHandler {
      Read  thr, t$, kk
      Thread thr execute data t$, kk 
      \\ we need the global here
      Inform.PrintHelp "ok"
}
Event OnSpaceBar New OnSpaceHandler() 

Thread {
      Static a$, payload, t 
      If t=0 Then {
            Inform.PrintHelp "no job......yet"
            If Not Empty Then {
                  Event OnSpaceBar Hold
                  Read a$, payload
                  t=payload
            }
       } Else {
             Inform.PrintHelp format$("working {0:2}%",(payload-t)/payload*100)
             t--
             If t<1 Then Event OnSpaceBar Release : Inform.AddHelp
       }      
} As theThread Interval 50

Main.Task 50 {
      select case inkey$
      case ""
            Inform.PrintHelp "wait...."
      case " "
            Call Event OnSpaceBar, theThread, "hello", 30  
      else
            break
      end select
}
Threads Erase
Inform.TotalPrint

bugman

Αφού έβαλα το αντικείμενο Γεγονός ήρθε η ώρα για GUI, διεπαφή με παραθυρικό περιβάλλον. Τα παράθυρα που φτιάχνει η VB6 δεν κάνουν για την M2000, για αρκετούς λόγους. Ένας είναι ότι δεν είναι unicode,  υποχρεωτικά εξυπηρετούν μια γλώσσα. Ένας άλλος είναι ότι σπάνε την ροή νημάτων, τη πολυεπεξεργασία δηλαδή, αν μετακινήσει κανείς τη φόρμα, ή αν κρατάει πατημένο το κουμπί που την κλείνει.
Ήδη από το 2014 έχω φτιάξει τις βασικές, πχ άνοιγμα αρχείου, με δικά μου παράθυρα, τα οποία δεν σταματούν τα νήματα, είναι unicode, και βγαίνουν ακριβώς  τα ίδια σε οποιαδήποτε Windows.
Στην αναθεώρηση 183 έχω βάλει φόρμες χρήστη, προς το παρόν μόνο buttons βάζουμε, αλλά σε λίγες μέρες θα έχω φτιάξει τους wrappers για τα υπόλοιπα. Οι wrappers είναι ενδιάμεσα αντικείμενα. Επειδή στις φόρμες χρήστη τα αντικείμενα όπως buttons μπαίνουν κατά  βούληση, χρειάζονται ένα αντικείμενο να μαζεύει τα μηνύματά κάθε στοιχείου, ένα για το καθένα. Για να υπάρχει δηλαδή έλεγχος του κλικ, πρέπει να δηλωθεί μια άμεση σχέση. Εφόσον η φόρμα μας θα πάρει άγνωστο αριθμό γραφικών στοιχείων διεπαφής, δεν θα μπορεί άμεσα να διαχειριστεί τα γεγονότα που έχουν.και παράγουν αυτά. Τα αντικείμενα wrappers, παίρνουν τα μηνύματα από το αφοσιωμένο  γραφικό στοιχείο τους και το στέλνουν στη φόρμα, η οποία κρατάει ένα αντικείμενο Γεγονός της Μ2000, και το πυροδοτεί, μεταφέροντας το μήνυμα, από το στοιχείο και μια αναφορά στή φόρμα. Η αναφορά μπορεί να χρησιμοποιηθεί στον αποδέκτη των μηνυμάτων, για επικοινωνία με τη φόρμα πριν εκτελέσει αυτός το κλικ για παράδειγμα σε ένα button.
Το ενδιαφέρον στη Μ2000 είναι ότι με τη χρήση νημάτων μπορούμε να φτιάξουμε παράδειγμα, το έχω αναρτήσει, όπου η εκτέλεση των μηνυμάτων  να γίνεται ασύγχρονα. Πχ. σε ένα button έχω βάλει να ανοίγει ένα message box, φτιαγμένο με στοιχεία της Μ2000, το οποίο σταματάει την ροή εντολών περιμένοντας να πατήσουμε Εντάξει ή Άκυρο. Χωρίς την ασύγχρονη λειτουργία, κανένα άλλο μήνυμα δεν θα ήταν αποδεκτό. Βάζοντας τη αναμονή του message box σε νήμα, και επειδή έχει σχεδιαστεί να επιτρέπει την εκτέλεση νημάτων, συνεχίζει το σύστημα να δέχεται έτσι μηνύματα. Στο παράδειγμα που έχω ανεβάσει χρησιμοποιώ διπλό νήμα. Γιατί αν το ένα είναι σε αναμονή, τα μηνύματα συσσωρεύονται, και θα εκτελεστούν στην συνέχεια, ενώ με το δεύτερο νήμα εκτελούνται άμεσα. Με δύο μεταβλητές ελέγχω αν ένα νήμα, από τα δύο για την εκτέλεση  των μηνυμάτων, είναι μπλοκάρισμένο και δεν το τροφοδοτώ.
ΓΚ

bugman

#20
Ανέβασα το τεύχος 27 του εγχειριδίου με δυο προγράμματα για γραφήματα! Η Μ2000 χρησιμοποιεί Twips και έτσι μπορεί με τις ίδιες εντολές να τυπώνει σε εκτυπωτή (1440 Twips σε εκτυπωτή είναι πάντα μια ίντσα).


bugman

#21
Αυτό το καιρό βάζω GUI για το χρήστη στην Μ2000. Δηλαδή να μπορεί κανείς να φτιάξει τα δικά του παράθυρα με στοιχεία ελέγχου. Τα γραφικά που έδειξα στο προηγούμενο μήνυμα μπορούν να βγουν στο παράθυρο αλλά επιπλέον έχουμε buttons και textboxes.
Θέλω να δω πώς θα ονομάζω τα buttons, textboxes, combo και άλλα στα ελληνικά!
Καμία πρόταση ή αν υπάρχει κάποια αποδεκτή ελληνική ορολογία, θα ήταν επιθυμητή!
Ευχαριστώ!
Εικόνα από το τελευταίο παράδειγμα με τρία παράθυρα και τρία νήματα που σχεδιάζουν (και μεις μπορούμε να σχεδιάσουμε, με κύκλους, με το ποντίκι, αφού το μήνυμα MouseMove το παίρνουμε και εκτελούμε το κώδικα που θέλουμε). Μια μεταβλητή Ν γράφει πόσα παράθυρα θα φτιαχτούν (σε πίνακα) και σε κάθε παράθυρο φτιάχνουμε ένα πίνακα στοιχείων με δυο Buttons.
Το πρόγραμμα στη Μ2000 είναι στα αγγλικά (υπάρχουν και οι ελληνικές εντολές) αλλά έχω θέμα με το πως θα λέω τα στοιχεία στα ελληνικά!

Στις τελευταίες εκδόσεις της γλώσσας Μ2000 συμπεριλαμβάνεται ένα πρόγραμμα, το info.gsb με πολλά τμήματα (πάνω από 17k γραμμές κώδικα σε Μ2000) και περιλαμβάνει και αυτό το πρόγραμμα ακόμα καλύτερο, δηλαδή μπορούμε σε μια φόρμα υπάρχει ένα πλήκτρο γράφε Test Me το οποίο ανοίγει τη φόρμα Έλεγχος και παρόλο που τρέχουν νήματα, μπορούμε να βλέπουμε το κώδικα όπως εκτελείται, και στα νήματα.


bugman

Αναθεώρηση 199,
Μπήκε ένα ComboBox στο Gui, και μπήκαν συναρτήσεις Lambda. Η κύρια χρησιμότητά τους είναι μπαίνουν ως παράμετροι, μαζί με τιμές που κρατάνε εσωτερικά, και μπορούν να επιστρέφουν άλλες συναρτήσεις.


Παρακάτω το πρόγραμμα εκτελεί αυτό [size=78%]Κάλεσε[/size][size=78%] Για_Κάθε_Ένα(Περιοχή([/size][size=78%]1,11[/size][size=78%])[/size][size=78%], [/size][size=78%]Κύβος[/size][size=78%], [/size][size=78%]ΣτηνΟθόνη) [/size]

Και τα τέσσερα αναγνωριστικά είναι λάμδα συναρτήσεις. Σε μια γραμμή φαίνεται τι θέλουμε να κάνουμε. Θα τυπώσουμε στην οθόνη τον κύβο από το κάθε ένα από τα 1 έως το 10 (όχι το 11, Range αλά Python).
Η ιδέα για το Range είναι να χρησιμοποιείται μέχρι να φέρει λάθος!  Η Δες  { } είναι μια εντολή που εκτελεί ένα μπλοκ μια φορά, και αν έρθει λάθος απλά τερματίζει το μπλοκ, και "θάβει" το λάθος. Η εντολή Κυκλικά αναγκάζει ένα μπλοκ να εκτελεστεί ξανά. Λειτουργεί ως χειριστής σημαίας. Δηλαδή βάζει σε μια σημαία στο μπλοκ..που λέει "όταν εξαντλήσεις τις εντολές τότε ξεκίνα από την αρχή". Η αριθμός παίρνει μια παράμετρο, χωρίς να χρειάζεται να την περάσουμε σε μεταβλητή. Έτσι η Τύπωσε Αριθμός τυπώνει τον αριθμό που δίνουμε στην συνάρτηση ΣτηνΟθόνη
Όταν καλούμε την Για_Κάθε_Ένα οι συναρτήσεις περνούν με αντιγραφή. Αντιγράφονται σε άλλα αντικείμενα "λάμδα". Ειδικά στην Περιοχή() έχουμε αντιγραφή της συνάρτησης που μας δίνει. Όταν δεν χρησιμοποιούμε παρενθέσεις, αντιγράφουμε τη συνάρτηση, ενώ με παρενθέσεις εκτελούμε τη συνάρτηση.


Και τα τέσσερα είναι εδώ:


Περιοχή = λάμδα-> {
      Διάβασε Αρ, Τε
      =λάμδα Αρ, Τε-> {
            Αν Τε>ΑρΤότε {
                  =Αρ
                  Αρ++
            }  Αλλιώς Λάθος "Τέρμα"
      }
}
Κύβος=λάμδα-> αριθμός**3
ΣτηνΟθόνη = λάμδα->{Τύπωσε Αριθμός}
Για_Κάθε_Ένα = λάμδα-> {
      Διάβασε Περ, Συναρ, Εξ
      Δες {
      Κάλεσε Εξ(Συναρ(Περ()))
      Κυκλικά
      }
}
\\Σε μια γραμμή εκτέλεση!
Κάλεσε Για_Κάθε_Ένα(Περιοχή(1,11), Κύβος, ΣτηνΟθόνη)

bugman

Ανέβασα την έκδοση 8.1 (rev. 7)
Τα πρόσθετα σε αυτήν την έκδοση είναι οι πίνακες που περιέχουν πίνακες (jagged arrays) και μια ειδική λίστα η Κατάσταση (ή inventory) όπου μπαίνουν με κλειδιά διάφορα είδη μεταβλητών, και έχει σταθερό χρόνο για εισαγωγή, εύρεση, διαγραφή, δηλαδή ανεξάρτητο από το μέγεθος των στοιχείων. Μπορούμε να εκτελούμε ταξινόμηση (γίνεται εσωτερικά με quicksort γρήγορα γιατί η λίστα κρατάει δείκτες). Εσωτερικά η Κατάσταση δουλεύει με πίνακα κατακερματισμού και τα δεδομένα είναι σε πίνακα που μεγαλώνει (διπλασιάζεται) όταν χρειάζεται (άρα πρακτικά υπάρχει ένα πέναλτι στο χρόνο εισαγωγής αλλά σπανίζει, αφού έχουμε εκθετική αύξηση του χώρου, το ίδιο ισχύει και για την διαγραφή).
Επιπλέον είναι ελαφρώς πιο γρήγορη η έκδοση αυτή, έκανα πρόσθετες βελτιώσεις.(καθώς και αφαιρέσεις bugs..)
Συνοψίζοντας η Μ2000 έχει τύπους μεταβλητών:
Αριθμούς - Ακέραιους- Αλφαριθμητικά- Έγγραφα (αλφαριθμητικά με παραγράφους)-Πίνακες-Καταστάσεις-Λάμδα Συναρτήσεις- Γεγονότα-Ομάδες (όλα τα υπόλοιπα, συν ομάδες συν τμήματα και συναρτήσεις).
Στα βασικά Αριθμούς - Ακέραιους- Αλφαριθμητικά μπορεί να έχει στατικές μεταβλητές ανά αντικείμενο εκτέλεσης (π.χ. αν ένα τμήμα κληθεί από διαφορετικό αντικείμενο εκτέλεσης, τότε θα έχει άλλο σετ στατικών, αυτό που σχετίζεται με το πατρικό αντικείμενο)
Επιπλέον υπάρχουν αντικείμενα διεπαφής και μπορούμε να φτιάχνουμε προγράμματα που οδηγούνται από γεγονότα.
Παραμένουν φυσικά οι βάσεις δεδομένων, τα γραφικά 2D, τα sprites και τα νήματα επεξεργασίας (Threads, εκτέλεση κώδικα με χρονικό προσδιορισμό, σε ένα ή περισσότερα αντικείμενα εκτέλεσης), όπως και το σύστημα που παίζει midi σκοπούς (μπορούμε να γράφουμε μουσική και να ορίζουμε φωνές και όργανα, και αυτά παίζουν στο περιθώριο). Παραμένει και το σύστημα πελάτη εξυπηρετητή με χρήση σωληνώσεων (namedpipes) για τοπικό δίκτυο.
Σκοπεύω στην 8.1 να βάλω και TCP/IP αλλά ακόμα το μελετώ.



bugman

Έκδοση 8.2 (αν. 1)
Έχει ολοκληρωθεί η γλώσσα. Έχει γίνει ActiveX και μπορεί να τρέχει μέσα από άλλες γλώσσες, ενώ μπορεί και η ίδια να τρέχει άλλες script γλώσσες, όπως vbScript και javascript, και μάλιστα να δίνει το αντικείμενό της ώστε αυτές οι γλώσσες να καλούν πίσω, και να δίνουν τιμές ή να χρησιμοποιούν την κονσόλα της, τα γραφικά της, τις φόρμες της.

Το M2000.exe είναι ένα μικρό πρόγραμμα που χειρίζεται το M2000.dll το οποίο βρίσκει πια με εγκατάσταση. Μπορεί κανείς να το βάλει στο Wine σε linux, τρέχει.

Ετοιμάζω το ελληνικό μικρό εγχειρίδιο για να κατατοπιστεί κανείς με τις έννοιες και τις δυνατότητες της Μ2000.
Τελευταία δυνατότητα που προστέθηκε είναι ο χειριστής (opetator) << όπου χρησιμοποιείται για εισαγωγή ρεύματος στοιχείων και μπορεί να μπει πολλαπλά:

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

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


bugman

Μια και τελείωσε η ανάπτυξη της Μ2000, έφτιαξα το φόρουμ http://m2000.forumgreek.com/
μια κοινότητα συζήτησης και παρουσίασης προγραμμάτων σε Μ2000.
Τώρα που έρχεται καλοκαίρι και υπάρχει χρόνος για τους καθηγητές, ας του ρίξουν μια ματιά, και εκεί ας κάνουν προτάσεις ή να αναφέρουν ιδέες πάνω στην χρησιμότητα της Μ2000.


bugman


bugman

Μικρό εγχειρίδιο της Μ2000 (79 σελίδες Α4)
Σε αρχείο pdf
https://drive.google.com/open?id=0BwSrrDW66vvvS2lzQzhvZWJ0RVE

28 τεύχη του εγχειριδίου (εμπλουτίζεται)
http://georgekarras.blogspot.gr/p/2000.html

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

Γ.Κ.

bugman

Συνεχίζεται η βελτίωση της Μ2000. Έκδοση 8.2 αναθεώρηση 13. Η αξία της γλώσσας δεν είναι στην χρήση της, αλλά στην ύπαρξή της. Με την παρουσία της από το 1999 που γράφτηκε η πρώτη έκδοση έχει την δική της επίδραση στον εκπαιδευτικό χώρο ακόμα και ως αντι-παράδειγμα. Αυτό που ήθελα, μια εύκολη γλώσσα με δυνατότητες στο σχολείο, έγινε με την επιλογή της Python. Η εκπαίδευση σε αλγόριθμους και μόνο μειώνει το ενδιαφέρον του μαθητή. Η ιδέα μου είναι  ο προγραμματισμός στο σχολείο να επιτελεί ένα χρηστικό μέσο εισαγωγής στην έννοια της εφαρμογής. Ο αλγόριθμος περιγράφει ένα συγκεκριμένο πρόβλημα, σαν μια μαθηματική άσκηση. Η εφαρμογή περιέχει μεν αλγόριθμους αλλά προσαρμόζεται στις ανάγκες του χρήστη, που σημαίνει ότι ο κάθε προγραμματιστής-μαθητής θα σκεφτεί την εφαρμογή ως προϊόν, τι χαρακτηριστικά έχει, πόσο εύκολη είναι στη χρήση, τι προρυθμίσεις παρέχει; Τελικά κάθε μαθητής θα δώσει την εικόνα της δικής του προσωπικότητας με την εφαρμογή του, και όχι απλά με την αναπαραγωγή ενός αλγόριθμου. Να περάσουμε από την απόδειξη κατανόησης, του ίδιου για όλους, στην προβολή της ικανότητας, του διαφορετικού. Έτσι θα φανούν τα παιδιά που θα το αγαπήσουν περισσότερο και θα θελήσουν να ασχοληθούν επαγγελματικά, ως κύρια δουλειά ή ως υποστηρικτή.

bugman

Οδηγός Εγκατάστασης και παράδειγμα με λάμδα συνάρτηση και αντικείμενο Κατάσταση (λίστα με κλειδί, εσωτερικά δουλεύεi με Πίνακα Κατακερματισμού)

Banner για την γλώσσα Μ2000.



Έχει ανανεωθεί και το "Μικρό Εγχειρίδιο"

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


bugman

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

bugman

Ανέβασα έναν διερμηνευτή mini Lisp γραμμένο σε Μ2000, και μάλιστα σε δυο εκδόσεις, με Τμήματα (Διαδικασίες) και με Ρουτίνες.  Στη Μ2000 ξεχωρίζουν οι Ρουτίνες από τα Τμήματα. Οι ρουτίνες έχουν δικό τους σωρό επιστροφής ενώ τα τμήματα χρησιμοποιούν τον γενικό. Επιπλέον οι ρουτίνες βλέπουν τις μεταβλητές του τμήματος που ανήκουν ενώ τα τμήματα δεν βλέπουν, παρά μόνο ότι ορίζουμε σε αυτά και ότι είναι γενικό! Παρόλα αυτά το πρόγραμμα με τα τμήματα χρησιμοποιεί μια ειδική κλήση που κάνει τα τμήματα να τρέχουν σαν να είναι το τμήμα που τα καλεί. Από την έκδοση 8.4 έχουμε όμως εξίσου γρήγορη εκτέλεση ρουτινών (η αναζήτηση γίνεται μια φορά και καταχωρείται σε λίστα), οπότε το δεύτερο πρόγραμμα εκτελεί το κώδικα της Lisp πιο γρήγορα!


bugman

#32
Ένα ωραίο πρόβλημα για προγραμματισμό είναι το γνωστό πρόβλημα με το βοσκό, το λύκο, το πρόβατο και το χορτάρι, που πρέπει να περάσουν ένα ποτάμι, με μια βάρκα που σε αυτήν μπορεί να μπαίνει μόνο ο βοσκός και το πολύ ένα από τα άλλα τρία. Όσο είναι μαζί ο βοσκός, ο λύκος δεν τρώει το πρόβατο και το πρόβατο δεν τρώει το χορτάρι. Το πρόγραμμα πρέπει να δείχνει τι υπάρχει κάθε φορά σε κάθε όχθη, και στην βάρκα. Τερματίζει όταν όλα είναι στην όχθη προορισμού.
Το πρόγραμμα πρέπει να αποφασίζει ποιοι θα είναι οι επιβάτες στη βάρκα σε κάθε μετακίνηση.
Υπάρχει λύση σε Μ2000 με χρήση αντικειμένων, αλλά είναι δυνατόν να γραφτεί σε ΓΛΩΣΣΑ του σχολείου, ή σε Python, ασφαλώς με χρήση πινάκων. Το ενδιαφέρον του προγράμματος είναι στην αναπαράσταση των μετακινούμενων, γιατί θα πρέπει να γραφτεί και τι τρώει το καθένα ώστε να γίνεται έλεγχος.

bugman

Μια και τελείωσε το σχολείο, θεώρησα καλό να ενημερώσω για την τελευταία έκδοση της Μ2000 και ίσως κάποιοι καθηγητές ρίξουν μια ματιά!

Τελευταία έκδοση η 8.8 στην αναθεώρηση 11, της Μ2000. Έχω ανεβάσει παράδειγμα για την ανάγνωση json αρχείου, σε δομή δεδομένων, και πάλι την εξαγωγή κειμένου από τη δομή. Η γλώσσα Μ2000 έχει εκτός από μεταβλητές και πίνακες, ορισμένες δομές που λειτουργούν με δείκτη, και μια από αυτές είναι και ο πίνακας με δείκτη. Δείκτες δεν μπορούμε να δώσουμε εμείς, γιατί πάντα μας δείχνει η γλώσσα αυτό που δείχνουν οι δείκτες, και σε εκχώρηση η αντιγραφή του δείκτη γίνεται "αθέατα".
Τέσσερα αντικείμενα είναι με δείκτες στη Μ2000:
1. ο πίνακας με δείκτη (δεν έχει παρενθέσεις),
2. η κατάσταση (ζευγάρια ξεχωριστών κλειδιών και τιμών) - υπάρχει παραλλαγή ως "κατάσταση ουρά" όπου δέχεται όμοια κλειδιά.
3. ο σωρός τιμών (συνδεδεμένη λίστα τιμών, χρησιμοποιείται και ως στοίβα)
4. και η διάρθρωση μνήμης (τμήματα μνήμης όπου ορίζουμε μια δομή, ή πίνακα δομών, ενώσεων δομών κ.ο,κ).
Στα τρία πρώτα οι τιμές μπορεί να είναι οτιδήποτε, πχ δείκτης σε άλλη δομή, πίνακας, αντικείμενο. Στο τέταρτο οι τιμές είναι αριθμοί χωρίς πρόσημο του ενός, των δύο και των τεσσάρων bytes, πραγματικοί των οκτώ bytes, και αλφαριθμητικά των  δυο ή του ενός byte ανά χαρακτήρα.

Οι μεταβλητές στη Μ2000 είναι αριθμητικές (με % στο τέλος είναι ακέραιες, ενώ εσωτερικά είναι πραγματικές) ή αλφαριθμητικές (έχουν το $ στο τέλος), και υπάρχουν και δυο ακόμα η τύπου Μακρύς (Long) ακέραιος 32bit και το αντικείμενο Έγγραφο ως αλφαριθμητικό με χωριστές εσωτερικά τις παραγράφους.

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

Οι ομάδες είναι αντικείμενα που μπορεί να έχουν όλα τα παραπάνω και επιπλέον τμήματα (διαδικασίες δηλαδή), συναρτήσεις, άλλες ομάδες, να επιστρέφουν τιμή ή να δέχονται τιμή ή και τα δύο, να έχουν ιδιότητες (ομάδες που δέχονται τιμές ή δίνουν ή κάνουν και τα δύο). Δεν υπάρχει χωριστή αναφορά σε διεπαφή στα αντικείμενα αυτά, και δεν έχουμε δείκτες σε αυτά. Μπορούμε έμμεσα να έχουμε δείκτες αν τοποθετήσουμε τις ομάδες σε κάποια από τα 1 έως 3 αντικείμενα με δείκτες.

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

bugman

Τελική έκδοση 8.9 αναθεώρηση 14. Έχει γραφτεί 100% η βοήθεια, και στο blog εμφανίζονται όλα τα αναγνωριστικά εντολών και συναρτήσεεων, στα ελληνικά και στα αγγλικά (υπάρχουν και προγράμματα για το πως μέσα από τη γλώσσα διαβάζουμε τη βοήθεια σε αρχείο txt και το ανοίγουμε σε WordPad).
Με Βοήθεια Όλα ή Help All έχουμε τις λίστες αυτές ομαδοποιημένες.
Καλό Καλοκαίρι!

bugman

#35
Η έκδοση 9 της γλώσσας υπάρχει διαθέσιμη (αναθεώρηση 33). Γράφω το "Προγραμματίζοντας με τη Μ2000" πάνω σε αυτήν την έκδοση.
Αυτή η έκδοση προχωράει περισσότερο τα αντικείμενα Ομάδα εισάγοντας την Υπερκλάση, ενώ παραμένουν ως τιμές (και όχι αναφορές) όταν τα έχουμε σε μεταβλητές. Η Υπερκλάση μπορεί να έχει μοναδικά στοιχεία και όλα τα αντικείμενα που σχετίζονται με αυτήν μπορούν να έχουν πρόσβαση σε αυτά. Επειδή τα αντικείμενα Ομάδες έχουν δυνατότητα να έχουν άλλες ομάδες εσωτερικά, αυτές οι ομάδες μπορούν να συνδέονται με άλλες Υπερκλάσεις, και έτσι μια ομάδα με έμμεσο τρόπο να συνδέεται με περισσότερες από μια Υπερκλάσεις!

Αυτή είναι η τελική έκδοση!

Στην εικόνα φαίνονται δυο προγράμματα που τρέχει το καθένα το διερμηνευτή, το πρώτο φτιάχνει μια φόρμα χρήστη για ένα Notepad, και το άλλο αλλάζει την κονσόλα της Μ2000 σε ρολόι με διαφάνεια!

bugman

Καλά Χριστούγεννα
Ανέβασα ένα BLACKJACK για τέσσερις παίκτες σε Μ2000 στο blog της M2000, με δυνατότητες SPLIT και DOUBLING DOWN. Ο αριθμός παικτών μπορεί να αλλάξει από ένα σε όσο θέλουμε, στο κώδικα μόνο. Μπορεί κάποιος παίκτης να αποχωρήσει.
Καλή Διασκέδαση!

bugman

#37
Λογικά πρέπει πια το νήμα εδώ να λέει έκδοση 9, αφού αυτή είναι εδώ και 43 αναθεωρήσεις!
Έχω ανεβάσει στο blog ένα πρόγραμμα που χρησιμοποιεί φόρμα και νήματα. Είναι σε δυο εκδόσεις, μια με ελληνικές εντολές και μια με αγγλικές. Δεν υπάρχει ανάλογο στη ΓΛΩΣΣΑ, δεν έχει φόρμες και νήματα επεξεργασίας, δεν είναι καν κάτι τέτοιο στην ύλη. Όμως μόνο πληροφοριακά θα μπορούσε κανείς να διαβάσει το κώδικα, ή ακόμα καλύτερα να κατεβάσει τη γλώσσα και να τον δοκιμάσει.

Ίσως κάποια στιγμή μπουν παραπάνω πράγματα στην ΓΛΩΣΣΑ, όπως:
1. Συναρτήσεις Αλφαριθμητικών
2. Προγραμματισμός με γεγονότα
3. Προγραμματισμός Συναρτησιακός με λάμδα συναρτήσεις.
Ελπίζω να φτάσουν στα αυτιά των υπευθύνων. Βεβαίως υπάρχει και η Python, που είναι και πιο πλούσια με μεγάλο αριθμό βιβλιοθηκών, και έχει απ' όλα τα καλά, αλλά νομίζω ότι για την python μιλάμε για τεχνολογία πληροφορικής σε άλλο επίπεδο, ανωτέρας εκπαίδευσης, όπου απαιτείται μεγάλη εμβάθυνση σε μικρό χρόνο, που αποκλείει την μέση εκπαίδευση.
Η ΓΛΩΣΣΑ με αναβάθμιση θα μπορέσει να καλύψει λίγα παραπάνω, από ότι σήμερα, και θα το κάνει πιο ενδιαφέρον το μάθημα!

Βίντεο με αγγλικές εντολές σε Ubuntu Studio με Wine (όπου έχει γίνει εγκατάσταση η Μ2000)
https://youtu.be/meAK06JrtwU

bugman

Από την αναθεώρηση 48, έκδοση 9.0, μπορεί κανείς να τρέχει γλώσσα μηχανής x86 στη Μ2000, φτιάχνοντας αυτό που λέγεται Διάρθρωση Κώδικα (διάρθρωση μνήμης που παίρνει εκτελέσιμο κώδικα).
Με αυτό συμπληρώθηκαν στη Μ2000 όλα τα προγραμματιστικά παραδείγματα: Προστατικός προγραμματισμός, Συναρτησιακός, Με γεγονότα, Αντικειμενοστραφής Προγραμματισμός και τα "εξωτικά"..με αντικείμενα COM (όπως το Word), με εξωτερικές βιβλιοθήκες (dll της C), με χρήση βιβλιοθηκών του λειτουργικού και τώρα με χρήση γλώσσας μηχανής x86.
Ίσως ένα τελευταίο έμεινε (θα πάρει καιρό όμως): Η ενσωμάτωση Assembler x86 (τώρα πρέπει να δίνουμε αριθμούς).
Η Μ2000 μπορεί να τρέξει σε Wine 1.8 (σε 3.0 δεν βγαίνει η βοήθεια, έχει πρόβλημα με τα αρχεία τύπου Access)

bugman

1. Προσθήκη στη γλώσσα των τύπων Currency (19 ψηφία) και Decimal (29 ψηφία) (πριν υποστήριζε  double 17 ψηφία+εκθέτης 2.5 ψηφίων καθώς και 32Bit Long, και έμμεσα για αποθήκευση/ανάγνωση σε μνήμη, ακέραιους χωρίς πρόσημο των 8bit, 16bit και 32bit).


2. Βίντεο από εκτέλεση σε Linux και σε Windows 7 σε VirtualBox ταυτόχρονα. Δείχνει το παράδειγμα με την χρήση διανυσμάτων για 3D περιστροφή τριών αξόνων σε ένα παράθυρο χρήστη. Οι συναρτήσεις για τα διανύσματα είναι ενσωματωμένες σε ένα αντικείμενο Math. Τα παράθυρα εμφανίζονται ίδια σε κάθε λειτουργικό (είναι ενσωματωμένα στο περιβάλλον της γλώσσας).
http://bit.ly/2IcX2nl

bugman

Ανανέωση του μικρού εγχειριδίου της Μ2000 (299 σελίδες). Έκδοση γλώσσας 9.3 αναθ. 12.
Δείτε αν υπάρχει χρόνος το εγχειρίδιο και δώστε προτάσεις, ιδέες για συμπλήρωση ή αλλσγές ή διορθώσεις.

bugman

Για το καλοκαίρι:
Εδώ  https://github.com/M2000Interpreter/Version9/wiki/BlackJack-in-M2000-code και εδώ το ίδιο αλλά με χρώμα https://georgekarras.blogspot.com/2017/12/blackjack-verison-3-m2000-code.html είναι ο κώδικας για το BlackJack, το γνωστό παιχνίδι με κάρτες, σε M2000. Ακολουθεί τους κανόνες του παιχνιδιού με τις δυνατότητες επιπλέον παιχνιδιών μεταξύ "μάνας" και "παίκτη", ανάλογα με το τι θα είναι τα δυο πρώτα χαρτιά.
Ο κώδικας είναι γραμμένος με αγγλικές εντολές σε Μ2000, που στην ουσία είναι μια βελτιωμένη BASIC,
Στην αρχή του παιχνιδιού μια μεταβλητή κρατάει τον αριθμό των παικτών (εδώ είναι 4, αλλά μπορούμε να βάλουμε μεγαλύτερο νούμερο), και κάθε παίκτης ξεκινάει με 10000 μονάδες. Οι παίκτες μπορεί να βγουν εκτός όποτε θέλουν, ή βγαίνουν υποχρεωτικά όταν χάσουν τις μονάδες τους.
Το παιχνίδι δεν έχει γραφικά, αλλά μόνο κείμενο, με χρώμα και εμφανίζει και τα σύμβολα όπως κούπα, καρό, σπαθί, μπαστούνι (όπως τα λέμε). Για κάθε παίκτη, όπως έρχεται η σειρά του, μας ρωτάει το πρόγραμμα αν θέλουμε να πάρουμε χαρτί (hit) ή να μείνουμε εκεί που είμαστε (stand). Στην ουσία ο διάλογος γίνεται από τον dealer (την "μάνα"). Η μάνα δεν έχει ΑΙ (τεχνητή νοημοσύνη) αλλά παίζει με σταθερούς κανόνες (υποχρεωτικά). Παρόλο που εδώ θα σκεφτεί κανείς ότι με αυτόν τον τρόπο θα χάσει, είναι έτσι φτιαγμένο το παιχνίδι που πάντα κερδίζει σε βάθος χρόνου. Βρείτε τους κανόνες από το πρόγραμμα!

Χρησιμοποιούνται αντικείμενα για να κρατάμε τη κατάσταση του κάθε παίκτη αλλά και τον αριθμό παιχνιδιών που μπορεί να κάνει στη σειρά με την μάνα (ανάλογα με το τι χαρτιά πάρει στην αρχή, και τι επιλογή θα κάνει ο παίκτης, και τι υπόλοιπο σε μονάδες έχει).
Θα δείτε ότι η χρήση του GOTO σε ετικέτα είναι χρήσιμη (όταν δεν γίνεται κατάχρηση, το GOTO είναι αποδοτικό)

Η εντολή For έχει στο πρόγραμμα δυο παραλλαγές. Η μία είναι για την επανάληψη, και η άλλη είναι για να γίνεται μαζική προσπέλαση σε αντικείμενα. Η διαφορά φαίνεται στο δεύτερο γιατί δεν υπάρχει το = να δώσει τιμή έτσι το For Players(i) { } ανοίγει ένα μπλοκ για χειρισμό του αντικειμένου στη θέση του πίνακα Players(i). Μέσα σε ένα τέτοιο For, ονόματα μεταβλητών που ξεκινούν με τελεία αναφέρονται στα μέλη του αντικειμένου (τα οποία είναι δημόσια, σε αυτό το πρόγραμμα δεν έχουμε ιδιωτικά μέλη ομάδων, όπως λέγονται τα αντικείμενα της Μ2000)

Λοιπόν μπορεί κανείς να δώσει το δικό του BlackJack, στη γλώσσα που θα επιλέξει (εξαιρείται η ΓΛΩΣΣΑ, γιατί δεν έχει γεννήτρια τυχαίων αριθμών), όπως με Java και Python. Δεν είναι υποχρεωτικό να υποστηρίζει το πρόγραμμά σας όλα τα στοιχεία που υποστηρίζει το υπάρχον πρόγραμμα σε Μ2000.
Χρόνος που απαιτείται για να γίνει σε Java/Python και να είναι πλήρως διορθωμένο, όχι λιγότερο από ένα μήνα! Μια ωραία άσκηση λοιπόν (ενώ υπάρχει ήδη μια λύση). Αντί λοιπόν να υπάρχει "λογικό διάγραμμα", ή "εκφώνηση", υπάρχει κώδικας σε γλώσσα που δεν είναι γνωστή, αλλά είναι εύκολα κατανοητή (αν και η Μ2000 υποστηρίζει τύπους στις δηλώσεις μεταβλητών, δεν είναι απαραίτητο να δώσουμε τύπους, κάτι που μεγαλώνει πολύ τον κώδικα και εδώ δεν κερδίζουμε κάτι).
Η μεγαλύτερη δυσκολία είναι το πώς θα κάνει κανείς στην java ή στην python τις κατάλληλες δομές δεδομένων που θα κρατούν την κατάσταση του προγράμματος για όλους τους παίκτες και την μάνα, και την τράπουλα απ' όπου τραβάμε χαρτιά και κάθε φορά που τελειώνουν τα φύλα, προσθέτουμε άλλα ανακατεμένα επίσης.




bugman

Υπολογισμός του Pi με όσα ψηφία θέλουμε. http://www.rosettacode.org/wiki/Pi#M2000_Interpreter

Για να φτιαχτεί σε ΓΛΩΣΣΑ πρέπει να φτιάξουμε μια ουρά  FIFO (το πρώτο που μπαίνει θα βγει πρώτο) όπου θα μπαίνουν στο τέλος τιμές (ενώ διαβάζουμε από την αρχή) και κάποια στιγμή θα αυξάνουμε κατά ένα όλες τις τιμές, με τρόπο όπου θα "τραβάμε" μια τιμή θα την αυξάνουμε και μετά θα την εμφανίζουμε μέχρι να αδειάσει ο σωρός ή να μηδενιστεί ο αριθμός δεκαδικών που ζητάμε, οπότε και αδειάζουμε την ουρά, και τερματίζουμε.
Για την εμφάνιση των αριθμών (των ψηφίων) κολλητά ο ένας με με τον άλλο θα πρέπει να έχουμε ένα πίνακα αλφαριθμητικών δέκα θέσεων όπου ο κάθε αριθμός θα δίνει και τον αντίστοιχο χαρακτήρα.

Μια άσκηση προετοιμασίας για το παραπάνω πρόγραμμα είναι ένα πρόγραμμα που θα διαβάζει έναν θετικό ακέραιο αριθμό και θα τον αναπαράγει ένα προς ένα με όλα τα ψηφία του. Πχ αν δώσουμε εισαγωγή το 122323 θα πάρουμε το 1 2 2 3 2 3 χωρίς κενά αλλά το καθένα ως χαρακτήρας.

bugman

Η Μ2000 έχει φθάσει στην 9.4 έκδοση.
Προστέθηκε νέος τύπος ορισμού: enum ή enumaration, ή απαρ ή απαρίθμηση, δηλαδή ονόματα υπό έναν τύπο τα οποία βρίσκονται σε διάταξη, μπορούν να απαριθμηθούν, μπορούν να δώσουν το επόμενο/προηγούμενο και επιστρέφουν τιμή καθώς επίσης σε συνδυασμό με συναρτήσεις επιστρέφουν όνομα ή τύπο. Μπορούμε να ορίσουμε σε συνάρτηση, τμήμα, ή ρουτίνα μια παράμετρο να έχει τύπο συγκεκριμένη απαρίθμηση. Ορίζουμε μεταβλητές που μπορούν να πάρουν μόνο τιμές από το συγκεκριμένο τύπο. Στις πράξεις οι απαριθμήσεις λειτουργούν ως αριθμοί.
Απαρίθμηση Κατοικίδιο {Σκύλος=100, Γάτα, Χελώνα=200} : Κατοικίδιο1=Σκύλος: Τύπωσε Τύπος$(Κατοικίδιο)="Κατοικίδιο", Κατοικίδιο1=100, Κατοικίδιο1<Γάτα: Κατοικίδιο1++: Τύπωσε Κατοικίδιο1=Γάτα
Ένα_Κατοικίδιο=Κάθε(Κατοικίδιο)
Ενώ Ένα_Κατοικίδιο {
      \\ όνομα, τιμή, τύπος
       Τύπωσε Εκφρ$(Ένα_Κατοικίδιο),Εκφρ(Ένα_Κατοικίδιο), Τύπος$(Ένα_Κατοικίδιο)
}

Στο τόπο rosettacode.org υπάρχουν 223 παραδείγματα για διάφορα έργα (tasks), από απλά μέχρι και προχωρημένα.


bugman

#46
Ολοκληρώθηκε η Μ2000, στην έκδοση 9.7
Ως προς την σύνταξη και τις δυνατότητες της γλώσσας δεν προβλέπεται καμία αναβάθμιση. Αυτό που μένει για άλλες εκδόσεις είναι η αλλαγή του μοντέλου εκτέλεσης. Το τωρινό μοντέλο είναι απλό, για να ήταν εύκολη η διαδικασία αποσφαλμάτωσης, με κάθε εντολή να εκτελείται από μια συνάρτηση που δέχεται ένα τμήμα του πηγαίου κώδικα, με συνέπεια πάντα να εκτελείται άμεσα πηγαίος κώδικας ακόμα και σε περίπτωση επαναλήψεων. Αυτό σημαίνει ότι ένα νούμερο πχ το 100 στο πηγαίο κώδικα σε μια επανάληψη θα χρειαστεί να γίνει μετατροπή σε αριθμό σε κάθε πέρασμα.
Η επόμενη έκδοση θα περιέχει AST Interpreter, και θα αργήσει αρκετούς μήνες μέχρι να φθάσει στην ίδια λειτουργικότητα με την 9.7, αλλά θα είναι ένα βήμα πριν τον Compiler σε byte code.
Το AST είναι μια δομή δένδρου που κρατάει τα στοιχεία σε μορφή έτοιμα για χρήση, έχει δηλαδή προηγηθεί ο λεκτικός αναλυτής (lexical analyzer) και κατόπιν ο syntax analyzer, ή συντακτικός αναλυτής. Ήδη ο λεκτικός αναλυτής έχει φτιαχτεί και έχει προκύψει από τον χρωματιστή κώδικα του ενσωματωμένου διορθωτή της Μ2000.
Ο στόχος μου είναι μέχρι το καλοκαίρι του 2019 να υπάρχει η έκδοση 9.8 και να είναι 10 φορές γρηγορότερη από την 9.7. Ήδη η 9.7 είναι η πιο γρήγορη απ΄ όλες τις προηγούμενες εκδόσεις.
Στο αρχείο εγκατάστασης υπάρχει και ένα πρόγραμμα το info που τρέχει αυτόματα όταν το ανοίγουμε και εμφανίζει πληροφορίες, καθώς επίσης περιέχει προγράμματα για να καλέσουμε άμεσα ή να τα διαβάσουμε και να πάρουμε ιδέες. Υπάρχει πχ το textout που εμφανίζει κείμενο λέξη προς λέξη καθώς ο υπολογιστής το διαβάζει! Αυτό γίνεται με την Μ2000 γιατί μπορεί να συνδεθεί με αντικείμενα και να διαβάζει γεγονότα, και εδώ το αντικείμενο λέγεται SAPI.SpVoice και τα γεγονότα που μας ενδιαφέρουν είναι το Word, το EndStream, το Sentence με τα οποία παίρνουμε πληροφορίες καθώς το αντικείμενο "μιλάει" το κείμενο που του δίνουμε.
Βεβαίως μπορεί η ΓΛΩΣΣΑ του σχολείου να είναι πλήρες για το πρόγραμμα σπουδών, όμως δεν είναι ενδιαφέρουσα για δημιουργική ασχολία. Σε αυτό το σημείο η Μ2000 έχει να προτείνει κάτι άλλο. Ότι χρειάζεται το έχει ή ενσωματωμένο ή το παίρνει από το λειτουργικό (όπως το SAPI, ή speech application programming interface). Στις ενσωματωμένες δυνατότητες είναι η σχεδίαση 2D, η χρήση εικόνων, στατικών και κινούμενων (sprites), η χρήση του MIDI (προγραμματίζουμε μουσική σε 16 κανάλια ήχου, η οποία παίζεται παράλληλα με το πρόγραμμα), χρήση ήχων και βίντεο, βάσεων δεδομένων, χρήση script γλωσσών, πχ javascript και vbscript μπορούμε να καλέσουμε μέσα από την Μ2000, καθώς επίσης μπορούμε να εκτελέσουμε κώδικα μηχανής αν και δεν υπάρχει ενσωματωμένος assembler, μπορούμε να γράψουμε το κώδικα και να τον εκτελέσουμε μέσα από τη γλώσσα. Τέλος αξίζει να αναφερθεί και το σύστημα παραθύρων που έχει το περιβάλλον της Μ2000 και εύκολα μπορούμε να φτιάχνουμε φόρμες με στοιχεία ελέγχου (τα οποία παρέχει η γλώσσα και είναι φτιαγμένα σε αυτήν και εμφανίζονται το ίδιο σε κάθε λειτουργικό).

bugman


στην έκδοση 9.8, αναθεώρηση 8, έφτιαξα τον χρωμαστή κώδικα στο editbox να δουλεύει και για την ΓΛΩΣΣΑ.

bugman

#48
Εκδόθηκε διαδικτυακά ο σύντομος οδηγός της Μ2000. Γίνεται αναφορά στα υποδείγματα προγραμματισμού, και περισσότερο στα βασικά, το Προστακτικό Προγραμματισμό, το Συναρτησιακό, τον αντικειμενοστραφή Προγραμματισμό και τον Με γεγονότα Προγραμματισμό.
Αναφέρεται στην έκδοση 9.8 αναθεώρηση 13, την τελευταία ως σήμερα.
Υπάρχει σε pdf και σε Epub.

Περιλαμβάνει και δυο υλοποιήσεις ταξινομήσεων, την Ταξινόμηση με Συγχώνευση (με συνδεδεμένη λίστα), και την Γρήγορη Ταξινόμηση (με αντικείμενο, χωρίς αναδρομή, και με επιλογή τρόπου σύγκρισης).

bugman

Επειδή γίνεται λόγος για αντικείμενα στη νέα ύλη, σκέφτηκα και έγραψα μια ανάρτηση στο blog για τη Μ2000, για μια απλή χρήση αντικειμένων.

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

Το ζήτημα με τα αντικείμενα είναι ότι όσες γλώσσες με αντικείμενα υπάρχουν τόσοι είναι και οι τρόποι υλοποίησης. Δηλαδή δεν υπάρχει ένας μοναδικός τρόπος υλοποίησης που να είναι "γενικός". Ακόμα και στη ΓΛΩΣΣΑ να θέλουμε να υλοποιήσουμε τα αντικείμενα θα πρέπει να γίνουν πολλές αλλαγές για να το πετύχουμε και θα βγει πάλι ένας μοναδικός τρόπος υλοποίησης.

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

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

Ως προς τα αντικείμενα, η Μ2000 έχει το αντικείμενο Ομάδα, και άλλους τύπους αντικειμένων. Το αντικείμενο Ομάδα είναι το αντικείμενο του χρήστη. Δηλαδή το αντικείμενο που ορίζει ιδιότητες και μεθόδους, και άλλα πράγματα που δεν φαίνονται στο παράδειγμα, όπως γεγονότα και τελεστές. Οι άλλοι τύποι χωρίζονται σε δυο κατηγορίες, στα αντικείμενα καταχώρησης στοιχείων, όπως πίνακες (και tuples), σωροί, καταστάσεις (κλειδιά και τιμές), στα οποία υπάρχουν συντακτικό και εντολές για αυτά, και στα τύπου COM, είτε αυτά είναι οι φόρμες (το GUI της Μ2000), είτε εσωτερικά πχ το MATH για ειδικές πράξεις μαθηματικών, είτε εξωτερικά που φορτώνονται από τα Windows, και για αυτά υπάρχουν δυο εντολές, για να καλούμε μεθόδους και να αλλάζουμε ή να διαβάζουμε ιδιότητες.

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

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

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

Στο παράδειγμα έχουμε μια Κλάση που λέγεται Ζώο και δυο άλλες Κλάσεις που λέγονται Σκύλος και Γάτα. Οι δυο τελευταίες χρησιμοποιούν στον κατασκευαστή τους την κλάση Ζώο. Με αυτόν τον τρόπο δείχνουμε πως κληρονομούν νέες κλάσεις από άλλες.

Δεν υπάρχει ξεχωριστός τρόπος "συντακτικός" για την έννοια της Διεπαφής. Στο παράδειγμα τα Σκύλος και Γάτα έχουν κοινή διεπαφή, δηλαδή ό,τι έχει το ένα, έχει το άλλο σε ονόματα ιδιοτήτων και μεθόδων, και στη χρήση τους. Για να γίνει περισσότερο κατανοητό, σε ένα πίνακα βάζουμε ένα τρίτο στοιχείο, μια ομάδα με ένα μόνο μέλος, το τύπος$ (το $ σημαίνει ότι γυρνάει αλφαριθμητικό, στη Μ2000 είναι απαραίτητο). Η κλάση Ζώο έχει και αυτή ένα μέλος τύπος$ και έτσι το κληρονομούν και τα Σκύλος και Γάτα. Έτσι παρόλο που ο πίνακας έχει ανόμοιες ως προς την διεπαφή Ζώο (μπορούμε να την δούμε και ως διεπαφή) ομάδες, με τη χρήση της τύπος$ σε όλες τις ομάδες έχουμε μια κοινή διεπαφή, άρα μπορούμε να χειριστούμε τα διαφορετικά αντικείμενα με μια Αν τύπος$="Ζώο" πριν την κλήση των μεθόδων που σχετίζονται με τις ομάδες που περιέχουν ομάδες όπως Σκύλος και Γάτα.

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

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

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

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

Σημασία στο πρόγραμμα δεν έχει αν μοιάζει η Μ2000 στην άλφα ή βήτα γλώσσα, αλλά αν μπορεί να γίνει κατανοητό ένα πρόγραμμα με αντικείμενα. Η απλή χρήση αντικειμένων στη Μ2000 είναι με τα μοναδικά αντικείμενα, δηλαδή αντικείμενα στα οποία δεν υπάρχει δεύτερος δείκτης σε αυτά. Μπορούμε να έχουμε δείκτες σε αντικείμενα, αλλά θεωρώ ότι είναι πολύ προχωρημένο θέμα. Στην εγκατάσταση της Μ2000 υπάρχει το info.gsb (στο readme.txt λέει πως το σώνουμε στο φάκελο χρήστη, αφού το φορτώσουμε στο διερμηνευτή), όπου υπάρχει το linked_list τμήμα που είναι ένα παράδειγμα με χρήση ομάδων με δείκτες για την δημιουργία διπλής συνδεδεμένης λίστας. Σε αυτό γίνεται και η χρήση του deconstructor ή remove  { } τμήματος, όπου καλείται αν δεν υπάρχει άλλος δείκτης και εφόσον δοθεί η εντολή καθαρό ή clear σε ένα δείκτη για ομάδα. Γενικά το info.gsb έχει όλα τα τμήματα (εκτός από ένα) με αγγλικές εντολές (η γλώσσα έχει δυο λεξικά εντολών, αγγλικό και ελληνικό).


Αντικείμενα στη Μ2000, απλό παράδειγμα

bugman

Έφτιαξα ένα επτασέλιδο pdf, που δείχνει μέσα στις σελίδες του μια ιδέα από τη Μ2000.
Θα ήθελα τις εντυπώσεις σας!

bugman

Ολοκληρώθηκε η έκδοση 9.8 της Μ2000 (τελική αναθεώρηση 40). Στο παρεχόμενο info.gsb μπήκε και ένα τμήμα ΓΛΩΣΣΑ το οποίο δημιουργεί ένα παραθυρικό διορθωτή της ΓΛΩΣΣΑΣ, με χρωματισμό εντολών και εκτέλεση με κλήση του γλώσσα.exe. Επίσης υπάρχει το τμήμα cs που δημιουργεί έναν παραθυρικό διορθωτή για την c# και μπορούμε από το μενού να επιλέξουμε μετάφραση και εκτέλεση.(στην αρχή μας ζητάει να του υποδείξουμε ποιο .Net framework θέλουμε). Υπάρχει και ο mEditor και αυτός παρόμοιος διορθωτής (editor), για την Μ2000, με ταυτόχρονη εμφάνιση σε ξεχωριστό EditBox βοήθειας για εντολές που επιλέγουμε με απλό κλικ.

Στη  συνημμένη εικόνα φαίνονται οι τρεις διορθωτές (τρέχει ο καθένας σε ξεχωριστό διερμηνευτή Μ2000), καθώς και δυο εφαρμογές σε κονσόλα της Μ2000, η μια με αλλαγή σχήματος σε κυκλικό και με διαφάνεια (ένα ρολόϊ).

bugman

Έβαλα και άλλα πράγματα όπως το να φαίνεται η τρέχουσα παράγραφος στο EditBox (με αναδίπλωση λέξεων ενεργή χρωματίζονται όλες οι γραμμές της παραγράφου), εφόσον δεν έχουμε επιλέξει κείμενο . Επίσης μπορούμε να επιλέγουμε τα χρώματα που θα εμφανίζει το EditBox στο χρωματισμό κώδικα.
Φτιάχτηκε και διορθωτής για html με εμφάνιση βοήθειας για όλες τις λέξεις της Html5.

bugman

#53
Για όποιους τους ενδιαφέρει, έχω ανεβάσει την 9.9 αναθ. 1 και περιλαμβάνει πληθώρα προγραμμάτων, και ορισμένα παιχνίδια όπως:

  • Chessgame: Σκάκι, χωρίς AI, παίζει για δυο παίκτες με όλους τους κανόνες και μπορούμε να πάμε, όπως επίσης μπορούμε να δώσουμε με ένα αλφαριθμητικό κατά Forsyth–Edwards Notation (FEN) την τρέχουσα θέση (κοντά στις 1000 γραμμές κώδικα). Το πρόγραμμα στο τέλος της παρτίδας δίνει στο πρόχειρο όλες τις κινήσεις σε FEN σειρές.
  • Snake: το παιχνίδι φιδάκι, με τέσσερις παίχτες που παίζει μόνο του γραμμένο με ελληνικές εντολές.
  • TTT: τρίλιζα, αυτό έχει AI αλλά ελάχιστες φορές μπορεί να χάσει!
  • Pa15: Παζλ με μπερδεμένα 15 κουτάκια και λείπει το 16ο για να τα μετακινούμε. Είναι κώδικας από Commodore Basic με λίγες αλλαγές.
  • Game: Το παιχνίδι 2048 μόνο με κείμενο.
  • Minesweeper: Ναρκαλιευτής. Μπορούμε εύκολα μέσα από το κώδικα να αλλάξουμε το μέγεθος.
  • Wumpus: Παιχνίδι με μετακίνηση σε δωμάτια όπου το καθένα έχει τρεις πόρτες (εξάγωνη δομή).
  • Pong: Παιχνίδι τύπου Pong με αντίπαλο τον υπολογιστή. Έχει μερικές διαφοροποιήσεις και θέλει συγκέντρωση, γιατί η μπάλα γίνεται γρήγορη καμία φορά.
  • Guess και Guess1: Απλά παιχνίδια για εύρεση ενός αριθμού ανάμεσα σε ένα διάστημα.
  • BJ: Black Jack έως τέσσερις παίχτες με όλους τους κανόνες.
  • KB:Πλήκτρα πιάνου. Παίζει με επιλογή από τρία όργανα, συγχορδίες. Με καλό πληκτρολόγιο παίζει μέχρι και οκτώ νότες μαζί. Οι νότες μπορούν να κρατηθούν με το πλήκτρα, και στο σαξόφωνο πατώντας νέα πλήκτρα προσθέτουμε ήχο! Με το διάστημα δυναμώνουμε την νότα που θα πατηθεί αμέσως μετά. Παίζει και η drum machine, αλλά εκεί καλύτερα να δώσει κάποιος κάποιο σωστό ρυθμό, γιατί εγώ έδωσα ό,τι να είναι, δεν ξέρω μουσική εκτός από τα βασικά.

Εκτός από τα παιχνίδια υπάρχουν και προγράμματα επίδειξης όπως:


  • Demo1: Πρόγραμμα σε παράθυρο με εμφάνιση 3D σχήματος που περιστρέφεται στο χώρο και αλλάζει κάθε τόσο προσανατολισμό. Δουλεύει με την βιβλιοθήκη Math, με μαθηματικά τετραδονίων.
  • Towers: Hanoi Towers. δείχνει τις κινήσεις για τρεις και τέσσερις δίσκους. Η ρουτίνα είναι τέσσερις γραμμές κώδικα.
  • Pend: Pendulum-Εκκρεμές. δείχνει με γραφικά και κίνηση ένα εκκρεμές που κινείται βάσει παραμέτρων βαρύτητας.
  • Textout: Πρόγραμμα φωνητικής ανάγνωσης κειμένου (αγγλικού) με ταυτόχρονη επίδειξη των λέξεων στην οθόνη. Το πρόγραμμα δείχνει την χρήση γεγονότων και χρησιμοποιεί το SAPI το σύστημα των Windows για την ανάγνωση κειμένων.
  • Compiler: Πρόγραμμα 785 γραμμών που περιλαμβάνει Λεκτικό Αναλυτή, Συντακτικό Αναλυτή, Παραγωγή Κώδικα και Εκτέλεση σε Εικονική Μηχανή. Το πρόγραμμα της επίδειξης παράγει ένα γραφικό Mandelbrot με κείμενο αντί για χρώμα.
  • Lisp:Ένας διερμηνευτής της Lisp (υποσυνόλου της γλώσσας, με 300 γραμμές κώδικα).
  • Crypto: RIPEMD-160bit κωδικοποίηση, βγάζει ένα hash αριθμό των 160bit, που είναι μοναδικός για το κείμενο που δίνουμε. Δουλεύει άψογα, αλλά όχι "επαγγελματικά", δηλαδή γρήγορα που γίνεται κανονικά σε γλώσσα μηχανής.
  • LZW: συμπίεση και αποσυμπίεση κειμένου με τον αλγόριθμο LZW.
  • MAZE: Παραγωγή λαβύρινθου με απλό τρόπο
  • MAZE2: Παραγωγή λαβύρινθου με depth-first search, και επίδειξη καθώς το κατασκευάζει. Δουλεύει συνέχεια με διαφορετικά μεγέθη λαβυρίνθων.
  • CAL: Εμφάνιση ημερολογίου με εικόνα textart του Σνούπι. Μπορούμε μέσα από το πρόγραμμα να το ρυθμίσουμε να το τυπώνει (γεμίζει μια Α4 σελίδα), για όσες χρονιές θέλουμε και σε όποια γλώσσα θέλουμε (στο παράδειγμα το δείχνει στα ελληνικά και στα αγγλικά).
Και άλλα πολλά όπως αλγόριθμοι Qsort, Bubble sort, Shell Sort, και ανάγνωση UTF8 αρχείου ανά χαρακτήρα (παίζει να έχει από έναν έως τρεις θέσεις 8bit, για κάθε unicode σε UTF8) (η γλώσσα έχει αυτόματο μετατροπέα, αλλά δουλεύει σε ολόκληρο κείμενο, στο παράδειγμα δείχνει πώς γίνεται ο έλεγχος για να βγουν σωστά οι χαρακτήρες). Επίσης υπάρχουν παραθυρικοί (σε παράθυρο δηλαδή) διορθωτές για την Μ2000 με βοήθεια για κάθε αναγνωριστικό, mEditor, ο διορθωτής της ΓΛΩΣΣΑΣ, ο διορθωτής της C#, cs, και μέσα από αυτόν κάνουμε και compiling, και ο html διορθωτής, htmleditor. Όλοι οι διορθωτές έχουν χρωματισμό κώδικα, και είναι προγράμματα σε Μ2000 με γραφικό περιβάλλον.

Όλα αυτά (και άλλα που δεν αναφέρθηκαν) υπάρχουν σε ένα αρχείο προγράμματος, το info.gsb το οποίο βρίσκεται στο αρχείο εγκατάστασης της γλώσσας. Το αρχείο είναι μεγάλο (20132 γραμμές, 735.596 bytes σε UTF-8 κωδικοποίηση), και γιατί έχει πολύ κώδικα μέσα αλλά και γιατί έχει εικόνες που είναι γραμμένες με Base64 κωδικοποίηση σαν κείμενο. Ο mEditor το φορτώνει σε δευτερόλεπτα και το χρωματίζει κιόλας. Το αρχείο περιλαμβάνει τμήματα και το καθένα είναι είναι πρόγραμμα. Τα φορτώνουμε μια φορά, και αυτό εκτελεί εντολές για να ετοιμάσει κάποια πλήκτρα λειτουργιών (F1 έως F12 και με SHIFT) και να μας δείξει βασικές πληροφορίες. Μπορούμε να δούμε το κώδικα από κάθε τμήμα με το Edit η το Σ (επειδή σχεδόν όλα είναι στα αγγλικά μάλλον το Edit θα παίξει περισσότερο), με χρωματισμό εντολών. Υπάρχει βοήθεια για κάθε αναγνωριστικό της γλώσσας, τα οποία είναι σε δυο γλώσσες, ελληνικά και αγγλικά, και στη βοήθεια  όταν βλέπουμε το ελληνικό μας λέει και για το αγγλικό και μπορούμε με ένα κλικ στο όνομα να ανοίξουμε την βοήθεια στα αγγλικά. Ο προγραμματισμός φορμών δεν είναι στην βοήθεια, αλλά υπάρχουν παραδείγματα, εγχειρίδιο που περιγράφει τα αντικείμενα των φορμών, τις ιδιότητες, τις μεθόδους και τα γεγονότα.

Θέλω εδώ να ευχαριστήσω τον Άλκη για την φιλοξενία. Αυτή η έκδοση είναι η πιο ολοκληρωμένη που έχω φτιάξει. Δηλαδή δεν θα ήθελα κάτι άλλο για την γλώσσα. Υπάρχει μια ιδέα για μια πιο γρήγορη έκδοση με χρήση AST διερμηνευτή, αλλά ήδη όπως είναι για το σκοπό που γράφτηκε η γλώσσα έχει ικανοποιητική ταχύτητα.
Γ.Κ.

bugman

Μ2000. Ονόματα εντολών στα ελληνικά. Και των τελεστών. Πχ η mod γράφεται υπολ ή υπόλοιπο. Μπορούμε να βάζουμε τόνους. Η γλώσσα τους αφαιρεί όταν γυρίζει κατά τη χρήση τα αναγνωριστικά σε κεφαλαία.
Υπάρχουν όλα τα στοιχεία για δομημένο προγραμματισμό. Η γλώσσα δεν φτιάχτηκε για παραγωγή επαγγελματικών βιομηχανικής κλίμακας εφαρμογών, αλλά μπορεί να χρησιμοποιηθει για εκπαιδευτικούς σκοπούς. Έχει τρία βασικά συστατικά. Χρωματισμός προγράμματος, βηματική εκτέλεση και επίδειξη του κώδικα που ακριβώς εκτελείται, και μηνύματα λάθους στα ελληνικά. Γενικά όλες οι ιδέες πάνω στη Μ2000 έχουν ελληνικό ορισμό. Πχ τα tuple λέγονται αυτόματοι πίνακες, επειδή δεν ορίζονται ξεχωριστά με όνομα. Πχ το (10,) είναι πίνακας ενός στοιχείου. Ενώ το (,) είναι ο κενός πίνακας. Βάζοντας πίνακες μέσα σε πίνακες φτιάχνουμε δομές, δεδομένων. Αυτοί οι πίνακες έχουν δείκτη, είναι αντικείμενα, έτσι ο ίδιος πίνακας μπορεί να βρίσκεται σε δύο ή περισσότερες θέσεις. Αυτή η απλή ιδέα μπορούσε να εφαρμοστεί και στην ΓΛΩΣΣΑ.
Το ζήτημα με τις γλώσσες όπως η Python είναι ο σύντομος χρόνος ζωής. Δηλαδή ο κάποιος κώδικας μετά από τρία τέσσερα χρόνια το πιθανότερο να μην παίζει. Θα είναι γραμμένος με εντολές obsolete....χαρακτηρισμενες.
Σε αυτό το σημείο η ΓΛΩΣΣΑ είναι κορυφή, δίπλα στην Μ3000, όπου η προς τα πίσω συμβατότητα είναι στο 98%.
Συνάμα όλα τα βιβλία σε ΓΛΩΣΣΑ δεν αναφέρουν. αριθμό έκδοσης της γλώσσας, λες και ήταν γνωστό ότι δεν θα αλλάξει ποτέ.
Έτσι η χρήση της ΓΛΩΣΣΑΣ έχει το πλεονέκτημα για τους συγγραφείς βιβλίων να παρέχουν για πάντα ένα ενήμερο εκπαιδευτικό πόνημα, και ας γράφτηκε το 2000.
Γιατί λοιπόν να προτιμήσουν μια άλλη γλώσσα, και έτσι να μείνουν με τα βιβλία τους για προσάναμμα.
Ξεχάσατε τις άλλες γλώσσες.θα τις ονομάσουν τεχνικές γλώσσες, και θα τις απορρίψουν. Ξεχάσατε αυτόματους πίνακες και συναρτήσεις αλφαριθμητικών. Ξεφεύγουν από το στόχο της αλγοριθμικής.

bugman

Διάβασα το άρθρο του Every για το Break στα προγράμματα/υποπρογράμματα και το Return στις συναρτήσεις. Θυμήθηκα ότι από την πρώτη έκδοση της Μ2000 είχα σκεφτεί τον γενικό τύπο μιας επανάληψης, όπου μπορούν να υπάρχουν εντολές πριν και μετά την εντολή IF όπου σε σύγκριση ΑΛΗΘΗΣ εκτελούσε μια EXIT. Η ιδέα αυτή υπάρχει ακόμα και στην τελευταία έκδοση. Ένα μπλοκ εντολών {}  (η Μ2000 έχει επαναλήψεις με και χωρίς μπλοκ εντολών). Ένα οποιοδήποτε μπλοκ εντολών έχει μια κρυφή σημαία, όπου η εντολή LOOP ή ελληνικά ΚΥΚΛΙΚΑ, κάνει τη σημαία ΑΛΗΘΗΣ. Όταν το μπλοκ φτάσει στο τέλος εκτέλεσης εντολών (δηλαδή δεν έχει άλλες) κοιτάει τη σημαία και αν την δει ΑΛΗΘΗΣ εκτελεί πάλι το μπλοκ. Η φυγή από το μπλοκ μπορεί να γίνει με δυο τρόπους, να μην εκτελεστεί η LOOP άρα να έχουμε εκτέλεση του υπόλοιπου μπλοκ και κανονική έξοδο, ή  με χρήση της ΕΞΟΔΟΣ ή EXIT, να βγούμε νωρίτερα. Υπάρχει και η ΔΙΑΚΟΠΗ ή BREAK που σπάει πολλά φωλιασμένα μπλοκ μέχρι και το υποπρόγραμμα ή μέχρι μια TRY { } (ή ΔΕΣ {})
Ποιο είναι τώρα το "λογικό" πρόβλημα στη χρήση των EXIT ή BREAK και σε κάποιες γλώσσες δεν μπορεί να μπει εκ των πραγμάτων;  Αν έχουμε κάθε εντολή που δέχεται μια δική του λίστα εντολών τότε το έξοδος στη λίστα θα κάνει έξοδο από αυτή και μόνο τη λίστα. Αν θέλουμε σε μια λίστα εντολών να έχουμε μια IF και αυτή έχει ΥΠΟΧΡΕΩΤΙΚΑ αναγνωριστικά αρχής και τέλους λίστας εντολών, ΔΕΝ μπορούμε να έχουμε μια έξοδο από τη ΕΞΩΤΕΡΙΚΗ λίστα με εντολή, γιατί η εντολή θα λογαριαστεί για τη τρέχουσα λίστα του IF. Μια ιδέα είναι να μπαίνουν ετικέτες ώστε η έξοδος να δηλώνει το μπλοκ (λίστα) που θα σπάσει  Στη Java έχουμε το break το οποίο δεν σπάει οποιαδήποτε λίστα αλλά μόνο αυτών των επαναλήψεων, και μια παραλλαγή που λέγεται break label όπου βάζουμε μια ετικέτα πχ alfa: πριν από την επανάληψη που θέλουμε να σπάσουμε και μια break alfa τερματίζει τις φωλιασμένες επαναλήψεις μέχρι το επίπεδο που βρίσκεται η ετικέτα (δεν κάνει άλμα στην ετικέτα, αλλά απλά την έχει για να καταλάβει το επίπεδο φωλιάσματος στο οποίο θα τερματίσουν τα υπό αυτό φωλιασμένες επαναλήψεις και στις οποίες βρίσκεται η εντολή break με την ετικέτα. Αυτή είναι και η μόνη τύπου goto εντολή που έχει η java. Δεν γίνεται να έχεις δυο φωλιασμένα for και να βγεις με άλλο τρόπο την ώρα που θέλεις. Για αυστηρά δομημένο προγραμματισμό θα πρέπει να χρησιμοποιήσει κανείς ένα σωρό εντολές οι οποίες σε όλη την διάρκεια των επαναλήψεων θα εκτελούνται, ώστε όταν μια συγκεκριμένη συνθήκη ικανοποιηθεί να εμποδίσουν την εκτέλεση εντολών μέχρι το τέλος όλων των φωλιασμένων επαναλήψεων και να επέμβουν ακόμα και στις μεταβλητές ελέγχου των επαναλήψεων. Αντί λοιπόν όλων των πρόσθετων εντολών, αρκεί μια εντολή σε ένα ξεκάθαρο If, να δηλώνει την συνθήκη και πόσες επαναλήψεις "σπάει" με την υπόδειξη της ετικέτας.

bugman

Ανέβηκε νέο μικρό εγχειρίδιο για τη Μ2000, για την έκδοση 9.9. Υπάρχει σύνδεσμος στην υπογραφή εδώ. Το εγχειρίδιο απευθύνεται μόνο σε καθηγητές που θα ήθελαν να γνωρίσουν τη γλώσσα, ειδικά τώρα που γίνεται συζήτηση για κάτι άλλο από τη ΓΛΩΣΣΑ.



bugman

Ένας ωραίος τρόπος να δει κανείς την αναδρομή με γραφικά είναι το Δένδρο του Πυθαγόρα.

Ο αλγόριθμος υπάρχει εδώ

bugman

Μια και υπάρχει καιρός που Μένουμε στο σπίτι, έγραψα ένα Τετράδιο Εισαγωγής στη γλώσσα Μ2000, στα αγγλικά, απλοποιημένο, με αρκετά προγράμματα. Το pdf αρχείο περιλαμβάνει εσωτερικά ένα odf (open document format), το οποίο σημαίνει ότι ανοίγει στο LibreOffice για διόρθωση. Αν υπάρχουν συντακτικά λάθη ή προτάσεις για βελτιστοποίηση του κειμένου παρακαλώ όπως κάνετε τις διορθώσεις και στείλτε τις.

Στο τετράδιο υπάρχει και ο κώδικας για το Σκάκι για δύο, χωρίς τεχνητή νοημοσύνη (δεν παίζουμε εναντίον του υπλογιστή,) στο οποίο ο υπολογιστής ελέγχει όλες τις κινήσεις και τις καταγράφει σε σειρές FEN (σύστημα σημείωσης σημείου παιχνιδιού στο σκάκι). Μπορούμε να ξεκινήσουμε τη σκακιέρα με μια επιλεγόμενη σειρά FEN. Τα πιόνια τα μετακινούμε με το ποντίκι. Μπορούμε να γυρίσουμε πίσω όσες θέσεις θέλουμε, μέχρι την αρχική (πχ την αρχή ενός προβλήματος). Το πρόγραμμα χρησιμοποιεί γραφικά και sprites, δηλαδή διαφάνειες που φτιάχνει από χαρακτήρες unicode για το σκάκι. Στο M2000 paper έχει 24.5 σελδες Α4 με χρωματισμένο κώδικα (1000+ γραμμές).

Το αρχείο κατεβαίνει από εδώ (το έχω βάλει και στην υπογραφή μου). Είναι σε Github. Εμφανίζεται ένα κουμπι και Download το πατάμε και το λαμβάνουμε. (το ../master/M2000language.exe είναι το αρχείο εγκατάστασης, γενικά το master πάντα θα έχει το πιο επίκαιρο πρόγραμμα του περιβάλλοντος της Μ2000).

https://github.com/M2000Interpreter/Version9/blob/master/M2000paper.pdf

bugman

Μετά από 40+ μέρες στην καραντίνα...βγήκε καπνός. Η τελική αναθεώρηση της Μ2000 είναι γεγονός.
Το αρχείο εγκατάστασης 12Mb περιλαμβάνει δυο pdf αρχεία, ένα ελληνικό με 390 σελίδες, και ένα αγγλικό με 248 σελίδες (διαφορετικό από το ελληνικό ως προς την ύλη). Επίσης περιέχει ένα αρχείο, το info.gsb με 22851 γραμμές κώδικα σε Μ2000 το οποίο περιλαμβάνει πολλά προγράμματα μαζί, όπως και έναν διορθωτή της γλώσσας ΓΛΩΣΣΑ του σχολείου, με χρωματισμό κώδικα. διάφορα προγράμματα και παιχνίδια όπως σκάκι για δύο (χωρίς να παίζει ο υπολογιστής). Τα περισσότερα προγράμματα είναι με αγγλικές εντολές. ενώ υπάρχουν και με ελληνικές (η γλώσσα έχει διπλό λεξιλόγιο ταυτόχρονα σε χρήση, και όλα τα μηνύματα λάθους υπάρχουν και στις δυο γλώσσες και μπορούμε να επιλέξουμε τη γλώσσα που θέλουμε για αυτά μέσω της εντολής Ρυθμίσεις). Τα ελληνικά παίρνουν και τόνους, αλλά δεν είναι υποχρεωτικό, και αφαιρούνται στην εκτέλεση

Θα μπορούσε να χρησιμοποιηθεί και για αλγόριθμους αλλά και για εφαρμογές πχ υπάρχει στο info πρόγραμμα pend που δείχνει ένα εκκρεμές με κίνηση, η το demo1 με κίνηση 3D με χρήση τετραδονίων (επέκταση των μιγαδικών) σε παραθυρικό περιβάλλον, αλλά και άλλα όπως και εξομοιώσεις, όπως το BANKER (αλγόριθμος του τραπεζίτη) και το PHILO το γνωστό πρόβλημα με τους πέντε φιλόσοφους και τα πέντε πιρούνια (δουλεύει με νήματα).

Καλή έξοδο από την καραντίνα!
ΓΚ

evry

@bugman
Παλιά που πόσταρες σε λίγο άσχετα threads για την Μ2000 το παράκανες λίγο, ας πούμε ότι ήσουν οριακά ενοχλητικός (αν μου επιτρέπεις) αλλά τώρα πραγματικά έχεις ξεφύγει.
Τα  quaternions τετραδόνια !!!!!  Ε ΟΧΙ ΡΕ ΦΙΛΕ!!!  :o :o :o :o :o :o :o :o
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

bugman

#61
Έτσι τα λεει και η βικιπεδια. Ποτέ στα χρόνια του σχολείου και στο ΤΕΙ δεν διδάχθηκα το θέμα. Τα έμαθα κατά την ενασχόλησή μου με το προγραμματισμό. Μιλάμε για μαθηματικά του Hamilton ,πριν το 1900.
https://el.m.wikipedia.org/wiki/Τετραδόνιο

evry

ΟΚ, απλά μου χτυπάει πολύ άσχημα επειδή είχα ασχοληθεί κάποτε με αυτά, και όλοι έτσι τα λέγαμε.
Άκου (τετ)ραδόνιο, να το μπερδέψει κανείς με τα ραδόνιο  :D

Τα είχα γνωρίσει ως 4D αντικείμενα στα γραφικά
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

bugman

#63
Αρχικά είχα υλοποιήσει μια κλάση για να καταλάβω τι γίνεται με αυτά. Δες εδώ:
http://www.rosettacode.org/wiki/Quaternion_type
Και μετά βρήκα ένα πρόγραμμα σε VB6 που τα χρησιμοποιούσε για την περιστροφή μιας τρίεδρης γωνίας. Οπότε αποφάσισα να βάλω σε μια ενσωματωμένη βιβλιοθήκη Μαθηματικά ή Math τις συναρτήσεις με μια προσθήκη, όλες οι συναρτήσεις να παίζουν για πίνακες στοιχείων. Με μια εντολή να έχουμε άμεσα το αποτέλεσμα σε πολλά στοιχεία. Βοήθησε σε αυτό η δυνατότητα της M2000 να φτιάχνει δομές στοιχείων όπως στη C, ονομάζοντας και δίνοντας τύπο σε offsets στη μνήμη. Οπότε καλούμε αυτές τις συναρτήσεις δίνοντας διευθύνσεις.
Αν θες μπορείς να δεις το πρόγραμμα demo1. Δουλεύει σε ένα παράθυρο με ταυτόχρονη χρήση νημάτων, όπου ένα νήμα εκτελεί τις συναρτήσεις επί των τετραδονίων και άλλο τα εμφανίζει σε τακτά διαστήματα. Οι γραμμές είναι σε αντικείμενα σε έναν πίνακα γραμμών όπου πριν την εμφάνιση γίνεται ταξινόμηση βάσει του βάθους οπότε η σχεδίαση γινεται πρώτα από τη γραμμή που είναι σε μεγαλύτερο βάθος, ώστε πάντα να έρχεται πάνω από τις άλλες γραμμές η γραμμή με το χρώμα που είναι πιο κοντά σε μας!

bugman

Βάζω εδώ την ανάρτηση που διαγράφτηκε (μάλλον θεωρήθηκε διαφήμιση) από το θέμα:
Γ΄ Λυκείου / Απ: Υλη 2020 - 2021


ΠαράθεσηΣύγχρονη γλώσσα είναι η Μ2000 και έχει το προσόν να έχει ελληνικές εντολές. Επιπλέον δεν έχει ένα περιβάλλον με κουμπάκια και χρήση ποντικού (το χρησιμοποιούμε αν θέλουμε μέσα από το πρόγραμμα). Όλα γίνονται από το REPL, μια κονσόλα που γράφουμε διάφορα τμήματα και τα καλούμε με το όνομά τους. Έτσι ένας μαθητής μπορεί να γράψει δυο ή περισσότερες εκδόσεις του ίδιου προβλήματος, και να δει την διαφορά!
Σώνονται όλα με μια εντολή Σώσε όνομα1 και φορτώνονται με μια Φόρτωσε όνομα1  Ούτε εισαγωγικά δεν χρειάζεται. Επιπλέον υπάρχει σύστημα με χρήστες χωρίς κωδικούς. Το όνομα χρήστη αλλάζει τον κατάλογο χρήστη. Έτσι ο κάθε μαθητής έχει το δικό του κατάλογο. Η κονσόλα διαμορφώνεται σε μέγεθος χαρακτήρων που επιθυμούμε και μπορούμε να καταχωρούμε τις αλλαγές ανά χρήστη. Έτσι αν κάποιος δεν βλέπει καλά με το που βάζει Χρήστης ΌνομαΤάδε έρχεται ο φάκελός του ως φάκελος χρήστη και τα χρώματα και το μέγεθος γραμμάτων που χρησιμοποιεί. Ο μαθητής δεν χρειάζεται καν να ξέρει ότι υπάρχει φάκελος χρήστη. Δηλαδή όταν ένα όνομα αρχείου δεν έχει path χρησιμοποιείται αυτόματα ο τρέχον φάκελος που είναι ο φάκελος χρήστη!

Η Μ2000 έχει την ευκολία της BASIC, η οποία ήταν για πολλά χρόνια βασική στην εκπαίδευση. Η Basic σαν γλώσσα είχε απλές εκδόσεις λιτές που είχαν μόνο ακέραιους, και προχωρημένες όπως η BBC BASIC η οποία χρησιμοποιήθηκε από τα σχολεία της Αγγλίας και το κανάλι BBC σε εκπομπές για τη χρήση του υπολογιστή και του προγραμματισμού του.
Στο πνεύμα αυτό η Μ2000 ενσωματώνει ένα περιβάλλον που μπορούμε να σχεδιάζουμε, να βάζουμε εικόνες, να φτιάχνουμε μετακινούμενες διαφάνειες (sprites), να παίζουμε ήχους,  μουσική, νότες (έχει ενσωματωμένη γλώσσα μουσικής για να παίζει νότες σε 16 φωνές και κάθε φωνή με ένα από 128 όργανα μουσικής), βίντεο και πιο προχωρημένα θέματα όπως βάσεις δεδομένων.
Για όλα αυτά δεν χρειάζονται εξωτερικές βιβλιοθήκες. Τα έχει όλα το περιβάλλον ενσωματωμένα.

Οι άλλες γλώσσες, οι επαγγελματικές θα λέγαμε, έχουν πληθώρα βιβλιοθηκών και με το καιρό έχουν  πολλές αλλαγές. η Μ2000 δεν αλλάζει, και τρέχει πάντα γιατί ό,τι χρησιμοποιεί υπάρχει και θα υπάρχει πάντα στα Windows. Χρησιμοποιεί το Win32 μοντέλο προγραμματισμού το οποίο τρέχει και σε Windows 10 και σε όλες τις 64bit εκδόσεις.

Βλέπω στη ΓΛΩΣΣΑ για παράδειγμα όλο αυτό το πρόβλημα με το AK() αν πάρω ακέραια τιμή να την δώσω σε ακέραια μεταβλητή και στη Μ2000 είναι ξεπερασμένο, γιατί η ανάλογη ΑΚ() θα δώσει ακέραια τιμή στο τύπο που είναι η έκφραση στην ΑΚ(). Ομοίως και οι DIV και MOD, που εδώ υπάρχουν σε ΔΙΑ και ΥΠΟΛ και ΥΠΟΛΟΙΠΟ. Για τα παιδιά του δημοτικού οι αριθμοί γράφονται χωρίς να λέμε το τύπο τους. Δηλαδή με έναν τύπο (τον εξ ορισμού double) κάνουμε ότι προγράμματα θέλουμε ακόμα και όταν θέλουμε να είναι ακέραιοι.
(Η γλώσσα έχει πράγματι πολλούς τύπους αριθμών, αλλά δεν είναι υποχρεωτικό να τους χρησιμοποιήσει κανείς). Αυτή η ευκολία στο προγραμματισμό κάνει το μαθητή να σκέφτεται το πρόβλημα όχι τη σύνταξη.


Επίσης βάζω παρακάτω μια μεταγραφή κώδικα από PL/Ι σε M2000. Το θέμα εδώ είναι να δειχθεί πώς γίνονται επαναλήψεις με πολλαπλές  περιοχές τιμών, όπου η PL /I ως δυνατότητα την είχε ενσωματωμένη. Το παράδειγμα είναι από εδώ: http://rosettacode.org/wiki/Loops/with_multiple_ranges
Κώδικας σε PL/I

                                       /* all variables are DECLARED as integers. */
          prod=  1;                    /*start with a product of unity.           */
           sum=  0;                    /*  "     "  "   sum    " zero.            */
             x= +5;
             y= -5;
             z= -2;
           one=  1;
         three=  3;
         seven=  7;
                                       /*(below)  **  is exponentiation:  4**3=64 */
           do j=   -three  to     3**3        by three   ,
                   -seven  to   +seven        by   x     ,
                      555  to      550 - y               ,
                       22  to      -28        by -three  ,
                     1927  to     1939                   ,
                        x  to        y        by   z     ,
                    11**x  to    11**x + one;
                                                        /* ABS(n) = absolute value*/
           sum= sum + abs(j);                           /*add absolute value of J.*/
           if abs(prod)<2**27 & j¬=0  then prod=prod*j; /*PROD is small enough & J*/
           end;                                         /*not 0, then multiply it.*/
                     /*SUM and PROD are used for verification of J incrementation.*/
         display (' sum= ' ||  sum);                    /*display strings to term.*/
         display ('prod= ' || prod);                    /*   "       "     "   "  */


Στη Μ2000 που είναι σύγχρονη γλώσσα μπορούμε να χρησιμοποιούμε λάμδα συναρτήσεις. Δείτε ότι το ** όπως και το ^ χρησιμοποιείται για ύψωση σε δύναμη. Επίσης δηλώνουμε τύπο Long ενώ μπορούμε να το αλλάξουμε και να δουλέψει σωστά σε Decimal, Currency, Double, Single ενώ για Integer (16bit) θα βγάλει overflow λάθος.
Η πρώτη λάμδα συνάρτηση γυρνάει μια άλλη λάμδα με κλεισίματα τις τιμές που θέλουμε για να εκτελεστεί η επανάληψη. Η  μεταβλητή που θέλουμε να λαμβάνει την κάθε τιμή από την περιοχή τιμών, δίνεται με αναφορά. Στη Μ2000 η αναφορά δηλώνεται με το &, και στο πέρασμα στην κλήση και στην μεριά της συνάρτησης που καλούμε. Έτσι είναι ξεκάθαρο τι δίνουμε με αναφορά και τι με τιμή.
Η δεύτερη λάμδα παίρνει ότι της δίνουμε και τα βάζει σε ένα πίνακα και δίνει τον πίνακα σαν μεταβλητή (Δείκτης σε πίνακα). Αυτός ο δείκτης γίνεται κλείσιμο στην επιστρεφόμενη λάμδα. Έτσι στο τέλος έχουμε μια Exec η οποία είναι μεταβλητή και συνάρτηση μαζί.
Σε μια While εκτελούμε το πολλαπλών περιοχών DO  (η FOR σε άλλες γλώσσες).

Κώδικας με εντολές στα αγγλικά σε Μ2000

Module MultipleLoop {
   def long prod=1, sum=0, x=+5,y=-5, z=-2, one=1, three=3, seven=7, j
   Range=lambda (a, b, c=1) ->{
      =lambda a, b, c (&f)-> {
         if compare(a,b)=sgn(c) then =false else =true: f=a: a+=c
      }
   }
   MultipleRange=Lambda -> {
      a=array([])  '  convert stack items in current stack [] to an array of items
      =lambda  a, k=0 (&f) ->{
         do : if k<len(a) Else exit
         if a#eval(k, &f) then =true: exit
         k++ : always
      }
   }
   Exec=MultipleRange(Range(-three, 3**3, three), Range(-seven, +seven, x), Range(555, 550-y), Range(22, -28, -three), Range(1927, 1939), Range(x,y,z), Range(11**x, 11**x+one))
   j=0
   while Exec(&j)
      sum+=abs(j)
      if abs(prod) < 2^27 And j <> 0 then prod*=j
   End While

   Print "sum=";sum
   Print "prod=";prod
}
MultipleLoop

bugman

Πώς γίνεται να προωθήσω τη Μ2000 ως εκπαιδευτικό εργαλείο;

alkisg

Παράθεση από: bugman στις 23 Μαΐου 2020, 04:22:34 ΜΜ
Πώς γίνεται να προωθήσω τη Μ2000 ως εκπαιδευτικό εργαλείο;

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

Η ΓΛΩΣΣΑ έχει το πλεονέκτημα ότι είναι στο διδακτικό πακέτο, και ειδικά σχεδιασμένη για την εκπαίδευση, και στα Ελληνικά, και απλή κλπ, και ακόμα κι έτσι πολλοί συνάδελφοι θέλουν να φύγει.
Αν ποτέ αλλάξει η ΓΛΩΣΣΑ λόγω αλλαγής διδακτικού πακέτου, θα αντικατασταθεί από κάποια από τις γνωστές γλώσσες, είτε εκπαιδευτικές είτε επαγγελματικές, που αναπτύσσονται από δεκάδες ως χιλιάδες developers:
https://en.wikipedia.org/wiki/List_of_educational_programming_languages

Δεν θεωρώ ούτε πιθανό ούτε σωστό να προτιμηθεί μια γλώσσα one-man-show. Και δεν έχουμε τους πόρους στην Ελλάδα να στηρίξουμε την ανάπτυξη νέων γλωσσών· όπως είδες 20 χρόνια μετά το Υπουργείο δεν έχει ακόμα υλοποιήσει επίσημα τη ΓΛΩΣΣΑ της ΑΕΠΠ, δεν υπήρξαν ούτε θα υπάρξουν σχετικά κονδύλια.

bugman

Δεν είδα επιχειρήματα του γιατί δεν κάνει η Μ2000. Το one-man-show δεν είναι κάτι νέο. Και άλλοι έγραψαν γλώσσες προγραμματισμού ως one-man-show.
Το θέμα είναι να ασχοληθούν εκπαιδευτικοί με τη γλώσσα Μ2000. Να διαβάσουν μια φορά αυτό το μικρό εγχειρίδιο να δουν αν τους κάνει! Είναι εύκολη γλώσσα.
Μπορεί να είναι η δουλειά μου one-man-show αλλά έχει φθάσει σε μια τελειότητα μετά από είκοσι χρόνια ανάπτυξης, και διόρθωσης λαθών, που μπορώ με βεβαιότητα να πω ότι είναι ολοκληρωμένη και ελεγμένη.

Για να καταλάβει κανείς τι σημαίνει "άρπα κόλλα"...σήμερα που δούλευα ένα έργο σε Arduino IDE, με δυο τρια ctrl+Z ctrl+Y ανακατεύτηκε ο κώδικας! Βέβαια όταν σου λένε ότι είναι δωρεάν και ανοικτού κώδικα δεν ζητάς τα ρέστα. Λες ότι θα το φτιάξουν, σε κάποια άλλη έκδοση θα είναι καλύτερο. Απλά κάνεις συχνά save να γλιτώσεις το άγνωστο σφάλμα του editor...

Μυστηριωδώς η ερώτησή μου "Πώς γίνεται να προωθήσω τη Μ2000 ως εκπαιδευτικό εργαλείο;" έφυγε από το θέμα ΓΕΛ: Back to the Past και κόλλησε εδώ!


alkisg

#68
Παράθεση από: bugman στις 24 Μαΐου 2020, 12:54:27 ΠΜ
Δεν είδα επιχειρήματα του γιατί δεν κάνει η Μ2000.

Τα έχουν γράψει άλλοι συνάδελφοι σε προηγούμενα μηνύματα τόσα χρόνια (γλώσσα-έκτρωμα, εξελληνισμένη vb6, κλπ κλπ). Αλλά το πιο σημαντικό είναι ότι "δεν αναφέρεται στο πρόγραμμα σπουδών". Δεν αποφασίζει ο κάθε εκπαιδευτικός από το κεφάλι του τι θέλει να διδάξει, κοιτάει αυτά που προτείνει το Υπουργείο.

Παράθεση από: bugman στις 24 Μαΐου 2020, 12:54:27 ΠΜ
Μυστηριωδώς η ερώτησή μου "Πώς γίνεται να προωθήσω τη Μ2000 ως εκπαιδευτικό εργαλείο;" έφυγε από το θέμα ΓΕΛ: Back to the Past και κόλλησε εδώ!

Κανένα μυστήριο! Αντί να τη σβήσουμε ως συνήθως, είπα να αφιερώσω κανά τέταρτο και να είμαι πιο ευγενικός και να τη μεταφέρω εδώ που είναι "ο χώρος σου" και να σου απαντήσω. Πλέον οι συνάδελφοι αναφέρουν τα μηνύματά σου με ατάκες όπως "μαζέψτε τον" ή "ρίξτε του ένα ban επιτέλους" κλπ. Εγώ θεωρώ ότι τα ban δεν είναι καλή λύση, αφού μπορούν τα μέλη να κάνουν άλλο λογαριασμό. Θεωρώ καλύτερο να συνειδητοποιεί ο καθένας πότε και γιατί γίνεται ενοχλητικός. Όταν για παράδειγμα πας στην κατηγορία της ΑΕΠΠ που είναι πανελλαδικώς εξεταζόμενη, και δίνεις απαντήσεις που δεν έχουν καμία σχέση με την εκπαιδευτική πραγματικότητα, αφού δεν είσαι εκπαιδευτικός, δεν έχεις μελετήσει το διδακτικό πακέτο κλπ, μπορεί να κάψεις κόσμο. Στο Στέκι ρωτάνε μαθητές και καθηγητές, αλλά υπονοείται ότι αυτοί που απαντάνε είναι καθηγητές, δεν θέλουμε γενικά τη γνώμη φωτογράφων - ερασιτεχνών προγραμματιστών να μπλέκει τους μαθητές και να νομίζουν ότι υπάρχουν καθηγητές που σκέφτονται έτσι. Στα 20 χρόνια του φόρουμ, διαρκή παράπονα / αναφορές έχουν γίνει μόνο για 3 άτομα, δύο εκ των οποίων δεν ήταν εκπαιδευτικοί. Για τους χιλιάδες υπόλοιπους καθηγητές και μαθητές δεν υπήρξε πρόβλημα.

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

ilias_s

#69
Παράθεση από: bugman στις 24 Μαΐου 2020, 12:54:27 ΠΜ
...

Μυστηριωδώς η ερώτησή μου "Πώς γίνεται να προωθήσω τη Μ2000 ως εκπαιδευτικό εργαλείο;" έφυγε από το θέμα ΓΕΛ: Back to the Past και κόλλησε εδώ!

Μου κάνει εντύπωση που ρωτάς..!

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

1) Ό,τι και να ήθελα να υιοθετήσω θα έπρεπε να προβλέπεται στο Πρόγραμμα Σπουδών(ΠΣ) του σχολείου. Αν δεν περιέχεται το Χ εργαλείο στο Π.Σ θα έχω προβλήματα. Το πιο απλό είναι να γυρίσει ένας μαθητής και να μου πει "που βρίσκω στο βιβλίο τη Μ2000?". Πάει... ό,τι και να πεις έχεις χάσει από τη στιγμή που διατυπώθηκε το ερώτημα! Δεν επιλέγει ο καθένας μας τι θα διδάξει και τι όχι!

2) Ουσιαστικά δεν καλύπτει κάποια ανάγκη! Ο Διερμηνευτής της ΓΛΩΣΣΑΣ έρχεται και μας "λυτρώνει" από το μαρτύριο της διδασκαλίας (του, κατά τ'άλλα, εργαστηριακού μαθήματος) του προγραμματισμού στον πίνακα! Αν η ΓΛΩΣΣΑ δεν υπήρχε στην ΑΕΠΠ δε θα γύρναγα ούτε να την κοιτάξω!

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

Πως το βλέπω εγώ... Κάνεις το χόμπι σου με τη Μ2000? Καλά κάνεις αν είναι έτσι ΑΛΛΑ αντιμετώπισέ το ως χόμπι. Και εγώ κάνω διάφορα πράγματα για χόμπι. Δεν τα προωθώ και μπορεί κάποια να τα εντάξω σε μάθημα (π.χ κατασκευές physical computing) μόνο αν "κολλάει". Αυτά που κάνω τα κάνω, πρώτα και κύρια, για εμένα και αυτό είναι που με κάνει χαρούμενο.

Αν δεν το κάνεις απλά για χόμπι ή αν περιμένεις να σε ακολουθήσουν και άλλοι θα πρέπει να καλύψεις κάποιες ανάγκες. Δες για παράδειγμα την απήχηση που έχει το LTSP (μαζί με τα sch-scripts και τον epoptes). Εμένα αυτά με έχουν σώσει εξοικονομώντας 10άδες ανθρωποώρες δουλειάς τα τελευταία 6 χρόνια! Όταν μου "τα πρωτοσύστησαν" (ψιλοτυχαία ε!) σε κάποια επιτόπια επιμόρφωση το 2013, αν θυμάμαι καλά, δεν χρειάστηκε να με πείσουν κάν... μόνος μου σκέφτηκα "καλά εγώ σε πηγάδι ζούσα???".

Όταν η λύση σου εξυπηρετεί κάποια ανάγκη δε χρειάζεται καν να γράφεις παντού!

bugman

#70
@ilias_s
Σε ευχαριστώ για τις ξεκάθαρες απόψεις σου και το θάρρος να τις γράψεις εδώ.

Παρατηρήσεις:
- Τι σημαίνει να προβλέπεται από το ΠΣ. Τα ΠΣ δεν εξελίσσονται; Τα σημερινά ΠΣ θα αποδίδουν για πάντα; Είμαστε ικανοποιημένοι;
- Μη κοιτάς την ανάγκη του σήμερα, πχ για έναν διερμηνευτή της ΓΛΩΣΣΑΣ, που δεν είχε η ΑΕΠΠ, οπότε καλύφθηκε από δυο τρεις διερμηνευτές, αλλά την ανάγκη του μαθητή να αναπτύξει την ευφυΐα του, την φαντασία του, την απόδοσή του. Ο μαθητής είναι ο στόχος της εκπαίδευσης.
- Η ιδέα των toy-languages (block-based), δεν με εντυπωσιάζει. Με μια γλώσσα εργαλείο που θα την έχει μαζί του ο μαθητής από το δημοτικό μέχρι το λύκειο, θα εστιάζει στο πρόβλημα, χωρίς να ξοδεύει χρόνο για εισαγωγή στο κάθε νέο εργαλείο.
- Το τι συμβαίνει στην εκπαίδευση δεν είμαι αρμόδιος να το κρίνω. Προφανώς όποιος είναι ικανοποιημένος με το επίπεδο της εκπαίδευσης, με τις τρέχουσες επιλογές, δεν έχει θέμα να ψάχνει για κάτι άλλο. Εδώ βλέπω όμως ότι η απουσία ενός εγχειριδίου για τη ΓΛΩΣΣΑ φέρνει προβλήματα στους καθηγητές, πόσο μάλλον στους μαθητές. Κάτι λοιπόν δεν πάει καλά. Δεν είναι όλα όμορφα!


Για τη Μ2000:
Πράγματι η δουλειά μου πάνω στη Μ2000 είναι ένα χόμπι, κάτι που κάνω όποτε έχω όρεξη, δηλαδή δεν το κάνω κατά παραγγελία.

Για το παρόν και το μέλλον:
Το αν θα μπει κάποτε η Μ2000 ως εργαλείο εκπαίδευσης, δεν είναι δικό μου θέμα. Εγώ οφείλω να το προτείνω.  Η Μ2000 έχει πολλά χρόνια ανάπτυξης (με τους δικούς μου αργούς ρυθμούς). Πολλοί έχουν δει τη γλώσσα σε παλαιότερες εκδόσεις και εκφέρουν γνώμη πάνω στις παλιές εκδόσεις.

Οξύμωρο ζήτημα:
Θέλουμε να γίνει καλύτερη η εκπαίδευση αλλά αδυνατούμε να δώσουμε χρόνο, να δούμε τι άλλο μπορεί να είναι χρήσιμο.

Μόνιμο φαινόμενο που παρατηρώ εδώ είναι το "δεν έχω χρόνο να το κοιτάξω".

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

Εδώ λοιπόν μιλάμε για μια μελέτη σε ένα εργαλείο που προτείνει ο Χ (κάποιος θίγει και το θέμα του τι δουλειά έκανα κάποτε, ως επιβαρυντικό), χωρίς να προτείνει μεθόδους εκπαίδευσης. Δυστυχώς έχει χαθεί η παιδική περιέργεια που θα έβαζε ερωτήματα:Τι το διαφορετικό έχει το εργαλείο; Το είδα; Έχει νέα έκδοση την είδα; Και ως έμπειρος και όχι παιδί πρέπει κανείς να αντιληφθεί τις διαφορές, τα συν και τα πλην. Ασφαλώς επιχειρήματα τετριμμένα του τύπου "δεν έχω χρόνο" είναι πάντα στο τραπέζι. Περιμένω εκείνον που θα έχει χρόνο!

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

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

Απαραίτητο για τη χρήση ενός εργαλείου είναι η τεκμηρίωση, και αυτό το έχω κάνει:
Στο αρχείο εγκατάστασης της γλώσσας έχω δυο βιβλία σε Pdf, ένα μικρό εγχειρίδιο στα ελληνικά, και ένα εισαγωγικό στα αγγλικά. Στο blog υπάρχει ένα μεγάλο εγχειρίδιο με 35 τεύχη. Υπάρχει ενσωματωμένη βοήθεια για όλα τα αναγνωριστικά της γλώσσας (500+ Ελληνικά και άλλα τόσα αγγλικά). Υπάρχουν παραδείγματα σε ένα μεγάλο αρχείο info, με τμήματα, που περιέχει 23k+ γραμμές κώδικα σε Μ2000.

Επίλογος
Η εκπαίδευση που έχουμε σήμερα είναι επιλογή μας. Δεν είναι οι αρμόδιοι, φυτεμένοι από το Θεό, είναι και αυτοί επιλογή μας, έμμεση αλλά είναι. Είναι λοιπόν θέμα επιλογής αν θα μπει η Μ2000 στη θέση πχ της Logo.
ΓΚ

ilias_s

Παράθεση από: bugman στις 26 Μαΐου 2020, 03:39:49 ΜΜ
@ilias_s
Σε ευχαριστώ για τις ξεκάθαρες απόψεις σου και το θάρρος να τις γράψεις εδώ.

Παρατηρήσεις:
(1) - Τι σημαίνει να προβλέπεται από το ΠΣ. Τα ΠΣ δεν εξελίσσονται; Τα σημερινά ΠΣ θα αποδίδουν για πάντα; Είμαστε ικανοποιημένοι;
(2) - Μη κοιτάς την ανάγκη του σήμερα, πχ για έναν διερμηνευτή της ΓΛΩΣΣΑΣ, που δεν είχε η ΑΕΠΠ, οπότε καλύφθηκε από δυο τρεις διερμηνευτές, αλλά την ανάγκη του μαθητή να αναπτύξει την ευφυΐα του, την φαντασία του, την απόδοσή του. Ο μαθητής είναι ο στόχος της εκπαίδευσης.
(3) - Η ιδέα των toy-languages (block-based), δεν με εντυπωσιάζει. Με μια γλώσσα εργαλείο που θα την έχει μαζί του ο μαθητής από το δημοτικό μέχρι το λύκειο, θα εστιάζει στο πρόβλημα, χωρίς να ξοδεύει χρόνο για εισαγωγή στο κάθε νέο εργαλείο.
(4) - Το τι συμβαίνει στην εκπαίδευση δεν είμαι αρμόδιος να το κρίνω. Προφανώς όποιος είναι ικανοποιημένος με το επίπεδο της εκπαίδευσης, με τις τρέχουσες επιλογές, δεν έχει θέμα να ψάχνει για κάτι άλλο. Εδώ βλέπω όμως ότι η απουσία ενός εγχειριδίου για τη ΓΛΩΣΣΑ φέρνει προβλήματα στους καθηγητές, πόσο μάλλον στους μαθητές. Κάτι λοιπόν δεν πάει καλά. Δεν είναι όλα όμορφα!

...

Θα σου σχολιάσω τις αριθμημένες παρατηρήσεις με τις οποίες κατά βάση είμαι σύμφωνος!

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

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

(3) Στη βάση της τουλάχιστον η σκέψη σου είναι σωστή, αν και θα σου πω ότι το Scratch 1.4 (το οποίο δε συμπαθώ) μπορεί να σε εκπλήξει με μερικές δυνατότητές του..! Δεν είμαι fan των block-based εκπ/κών γλωσσών. Αλλά δεν αποφασίζω εγώ! Το υπουργείο θέτει το πλαίσιο. Εδώ για μία διευκρίνηση σε μία ΕΠΙΛΕΞΕ κοπανιόμασταν 20 χρόνια και μας έγραφαν!

(4) Πάρα πολλοί δεν είμαστε ικανοποιημένοι με το επίπεδο της παρεχόμενης εκπ/σης (σε πολλούς κλάδους και όχι αδίκως). Δεν ακολουθούμε τις οδηγίες του υπουργείου επειδή μας αρέσουν...

Δες το ποστ του Άλκη, λέει μερικά πολύ σωστά πράγματα. Αντικειμενικά, για όποιον δεν είναι συνδεδεμένος συναισθηματικά με τη Μ2000, η υιοθέτησή της μακροπρόθεσμα μπορεί να είναι πρόβλημα. Εδώ λέμε να αντικατασταθεί η ΓΛΩΣΣΑ με κάποια άλλη, παγκοσμίως αποδεκτή γλώσσα, και... σκαλώνουμε! Αν περιμένεις το project σου με τη Μ2000 να καθιερωθεί ως εκπ/κό εργαλείο, νομίζω πως αδίκως παιδεύεσαι... Αν το κάνεις από χόμπι ΟΚ! Χόμπι σου είναι και κάνεις ό,τι θες, αλλά μη σου κάνει εντύπωση που δεν προχωράει έτσι όπως ονειρεύεσαι!

Πάντως πραγματικά υπάρχουν πολλές άλλες ανάγκες αν θες να ασχοληθείς με κάτι..! Δεν είναι εύκολο να πείσεις κάποιον να χρησιμοποιήσει ένα εργαλείο αν ο ίδιος δεν έχει την περιέργεια και ειδικά αν δεν υπάρχει κάποια ανάγκη...

bugman

Η Μ2000 είναι ένα τεράστιο πρόγραμμα χωρίς σχόλια (ίσως μερικές γραμμές, σε σύνολο 200+ χιλιάδων γραμμών κώδικα). Στο Λύκειο δεν υπήρχε μάθημα προγραμματισμού. Στο ΤΕΙ υπήρχαν δυο εξάμηνα, ένα για BASIC και ένα για FORTRAN. Οι ασκήσεις ήταν πιο εύκολες από αυτά της ΑΕΠΠ. Σε πέντε λεπτά γραφόντουσαν, αν είχες το ταλέντο να σκέφτεσαι αλγοριθμικά, όπως εγώ. Οι περισσότεροι έγραφαν "μισά" προγράμματα. Δεν μπορούσα να γράψω μισό πρόγραμμα! Ή το γράφεις ή όχι. Δεν μιλάμε για κάποιο λάθος εκ παραδρομής, πχ ένα συντακτικό. Ακριβώς αυτό έχω κάνει με τη Μ2000, δεν μπορώ να φτιάξω "μισό" πρόγραμμα. Έκανα ότι μπορεί να γίνει για να ολοκληρωθεί η ιδέα, και το διασκέδασα! Το Bugman είναι τίτλος για αυτόν που διορθώνει τα λάθη του, ο άνθρωπος των λαθών.

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

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

Συμφωνώ λοιπόν πώς αν δεν ψάχνετε για γλώσσες και εργαλεία δεν υπάρχει ανάγκη ούτε για τη Μ2000, ούτε για άλλη γλώσσα.



ilias_s

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

Αυτό το πρόβλημα,θα πεις, έχει ήδη και η ΓΛΩΣΣΑ! Σωστά! Η ΓΛΩΣΣΑ είναι 20 χρόνια "στατική" (νεκρή θα έλεγα εγώ). Αυτό δεν είναι καλό και γι' αυτό πλέον δεν μπορεί να προσαρμοστεί σε ένα νέο ΠΣ. Είναι και ένας από  τους λόγους που αρκετοί θέλουμε την αλλαγή. Αν υιοθετηθεί η Μ2000, όσο έχεις όρεξη, όλα θα είναι καλά ας πούμε. Αν όμως "αλλάξεις χόμπι" εμείς θα βρεθούμε πάλι στην προηγούμενη (σημερινή) κατάσταση... την οποία πασχίζουμε κάποιοι να αλλάξουμε!

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

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

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

Ο αριθμός των υπηρετούντων καθηγητών πληροφορικής είναι ~5000-5500 χιλιάδες (ανεπίσημη πηγή πριν κάποια χρόνια). Καλούμαστε να κάνουμε μία δουλειά υπό ορισμένες συνθήκες. Μάλλον τις συνθήκες αυτές δεν τις γνωρίζεις (τουλάχιστον όχι από πρώτο χέρι έχω την εντύπωση) και δεν θα καθίσω να τις περιγράψω. Δεν είναι το θέμα μας αυτό. Επάνω έγραψες "Ο λόγος  κέρδους προς ενασχόληση πρέπει να είναι πολύ πιο πάνω από τη μονάδα.Αν είναι αλλιώς τότε λέγεσαι κορόιδο.".

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

Το να αναφέρεις "αλλά όπως είναι γνωστό δεν υπάρχει χρόνος!" δεν οφελεί σε κάτι. Η δουλειά του κάθε εκπ/κού πληροφορικής δεν είναι να αναπτύσει το λογισμικό που χρειάζεται ούτε να γράφει τα βιβλία που χρειάζεται (και δεν έχει) από το μηδέν. Ήδη κάνουμε πράγματα που σε άλλες χώρες θα ήταν αδιανόητα για εκπ/κό προσωπικό και μάλιστα χωρίς κάποια υλική ή ηθική αμοιβή..! Υπάρχουν συγκεκριμμένες ομάδες στις δομές του ΥΠΑΙΘ για την ανάπτυξη λογισμικού, την αξιολόγηση εκπ/κού υλικού κτλπ. (ίσως θα πρέπει να απευθυνθείς επίσημα σε αυτούς για την Μ2000). Στο κάτω-κάτω το πως αξιοποιεί ο καθένας τον ελεύθερο χρόνο του είναι δικό του θέμα.

Όλα αυτά πολύ φιλικά! Είνα κρίμα, άγνωστοι μεν αλλά ενήλικες άνθρωποι, να πικραινόμαστε σε ένα φόρουμ!

bugman

1. Η Μ2000 είναι ανοικτού κώδικα στο Github. Το ότι δεν έχει σχόλια ο κώδικας δεν είναι κακό. Υπάρχει τρόπος να διαβαστεί, σε επιμέρους σημεία, χωρίς να χρειάζεται να το δει κανείς όλο. Πχ μπορεί κανείς να δει το ξεχωριστό υποπρόγραμμα (το γράφω έτσι με την ορολογία της ΑΕΠΠ) του SytaxError, και να αναζητήσει κανείς που καλείται, και έτσι να βρει όλα τα μέρη που δίνουν το συγκεκριμένο μήνυμα. Για να γίνει πάλι compiling θέλει απλά μια Visual Basic 6 Enterprise Edition. Δεν υπάρχουν κάποια ειδικά dll ούτε ocx. Από σχεδιασμό την έφτιαξα να μην έχει δεσμεύσεις με ξένες βιβλιοθήκες, πέρα από αυτές του λειτουργικού Win32 model. Το τελευταίο που αποδέσμευσα ήταν η βοήθεια που απαιτούσε το runtime της access, τώρα δεν τo χρειάζεται. Μπορούμε να φτιάχνουμε βάσεις δεδομένων με το Microsoft.Jet.OLEDB.4.0 το οποίο το δοκίμασα σε Windows 10 που δεν υπήρχε Access ούτε καν Word και δουλεύει.

2. Σε καμία περίπτωση δεν ήθελα ούτε θέλω να θίξω τους καθηγητές. Θίγω τις επιλογές που έπρεπε να κάνουν "αρμόδιοι". Ο Καθηγητής οφείλει να εκτελέσει το ΠΣ που του δίνουν.

3. Έχει τύχει να διδάξω σε φροντιστήριο για τα πτυχία τύπου ECDL, και εκεί είχα παιδιά Τετάρτης δημοτικού και τους άρεσε η Μ2000. Βάζαμε εντολές που σχεδίαζαν στη κονσόλα, απλές στην αρχή και με επαναλήψεις και υποπρογράμματα στο τέλος. Φτιάξαμε σκακιέρα και βάζαμε τα πιόνια, το κάθε πιόνι φτιάχνονταν από υποπρόγραμμα (τμήματα λέγονται στη Μ2000).

4. Το ενδιαφέρον συμπέρασμα που καταλήγεις είναι ένα Loop στη συζήτηση αν το κατάλαβες:
Παράθεση από: ilias_sΥπάρχουν συγκεκριμένες ομάδες στις δομές του ΥΠΑΙΘ για την ανάπτυξη λογισμικού, την αξιολόγηση εκπ/κού υλικού κτλπ. (ίσως θα πρέπει να απευθυνθείς επίσημα σε αυτούς για την Μ2000)

Γιατί αυτό;
Επειδή αυτό ήταν το ερώτημά μου: Που να απευθυνθώ.

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

Θα περιμένω να έρθει η Άνοιξη! Τι άλλο να κάνω!

ilias_s

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

Προσπερνώντας και άλλα πολλά βασικά και σημαντικά ερωτήματα, θα σε ρωτήσω κάτι πολύ πρακτικό :

Πιστεύεις πως, στην Ελλάδα, χωρίς "διαπιστευτήρια" (με ό,τι φαντάζεσαι ότι μπορεί να σημαίνει αυτό), θα μπει κάποιος στη διαδικασία να διαβάσει έστω τη δεύτερη σελίδα αυτό που θα στείλει ένας "ουρανοκατέβατος bugman" το οποίο ακολουθεί μάλιστα κόντρα-λογική?

(κόντρα-μάθημα βάζει και η Κεραμέως στη Γ' λυκείου αλλά αυτή είναι "υπουργάρα" και πάλι έχει φάει το κράξιμο της αρκούδας!!!  ;D ;D ;D)

bugman

Πραγματικά δεν έχω επιχειρήματα για τα "διαπιστευτήρια". Το προσπερνάω. Με ενδιαφέρουν συστάσεις στο ΙΕΠ. Ονόματα και email αν είναι δυνατόν. Επικοινωνία θέλω να έχω. Αν τώρα για να επικοινωνήσω πρέπει να βρω "διαπιστευτήρια", θα τα βρω!
Και συνεχίζω να σκέφτομαι το μοτό μου:
Περιμένω την Άνοιξη! Κάποτε θα έρθει!

happiness

Γιατί δεν ξεκινάς γκουγκλάροντας;
Εγώ θα ξεκινούσα με ένα προφορικό ή γραπτό ερώτημα προς αυτό, σχετικά με το ποια διαδικασία θα πρέπει να ακολουθήσω για να υποβάλω το εκπαιδευτικό μου εργαλείο προς αξιολόγηση ->http://iep.edu.gr/el/grafeio-epikoinonias
Και ύστερα μάλλον εδώ ->http://iep.edu.gr/el/grafeio-stratigikis-kai-politikoy-sxediasmoy

bugman


Νίκος Αδαμόπουλος

Παράθεση από: bugman στις 27 Μαΐου 2020, 04:19:38 ΜΜ
Για να γίνει πάλι compiling θέλει απλά μια Visual Basic 6 Enterprise Edition. Δεν υπάρχουν κάποια ειδικά dll ούτε ocx. Από σχεδιασμό την έφτιαξα να μην έχει δεσμεύσεις με ξένες βιβλιοθήκες, πέρα από αυτές του λειτουργικού Win32 model. Το τελευταίο που αποδέσμευσα ήταν η βοήθεια που απαιτούσε το runtime της access, τώρα δεν τo χρειάζεται. Μπορούμε να φτιάχνουμε βάσεις δεδομένων με το Microsoft.Jet.OLEDB.4.0 το οποίο το δοκίμασα σε Windows 10 που δεν υπήρχε Access ούτε καν Word και δουλεύει.

Εγώ θα παραμείνω στο τεχνικό μέρος της υπόθεσης. Μου κάνει εντύπωση που απορείς γιατί δεν προτείνουν οι εκπαιδευτικοί να αντικατασταθεί η ΓΛΩΣΣΑ με την Μ2000 η οποία είναι πιο πλήρης και σύγχρονη. Εσύ ο ίδιος γιατί δεν άφησες ποτέ την (τελειωμένη) VB6 για να πας στην φυσική συνέχειά της, την VB NET η οποία είναι πιο πλήρης και σύγχρονη ή σε κάποια άλλη ακόμα καλύτερη;  Λες ότι είναι ανοιχτού κώδικα, αλλά πώς θα πάει κάποιος να κάνει εκεί επεμβάσεις στον κώδικα, όταν είναι σε μια γλώσσα που δεν υποστηρίζεται πλέον και που σε λίγο καιρό κανείς δεν θα θυμάται ούτε το συντακτικό! Πραγματικά και η ονομασία και η τεχνολογία έχει μείνει στο 2000. Στο είχα πει και παλιότερα ότι δεν βοηθάει το όνομα. Μάλλον θα έπρεπε να το κάνεις Μ3000.

bugman

#80
Όταν ξεκίνησα είχα την Vb5. Το 2003 αγόρασα  την Vb Net. Απογοητεύτικα όπως ο περισσότερος κόσμος. Μετά πέρασα στη VB6. Για πολλούς δεν έχουν πολλές διαφορές, αλλά στη πράξη έχουν.
Η χρήση της Vb6 για το σκοπό που ήθελα, ήταν αρκετή. Ήθελα να έχει ταχύτητα ο κώδικας, αφού ο διερμηνευτής δεν δημιουργεί AST, είναι όλος μια συνάρτηση, που καλεί άλλες συναρτήσεις και πολλές φορές την αρχική. Επίσης ήθελα να είναι η γλώσσα συμβατή με το λειτουργικό, με το μοντέλο Win32, καθώς επίσης να διαχειρίζεται γεγονότα. Πάντα με κώδικα που έχει γίνει γλώσσα μηχανής και όχι γλώσσα για εικονική μηχανή.
Επίσης έχει αλλαχθεί στον compiler ο τρόπος εξαγωγής του τελικού, από exe σε dll. Δηλαδή η γλώσσα μπορεί να φορτωθεί από οποιαδήποτε άλλη γλώσσα που φορτώνει αντικείμενα COM. Το m2000.exe είναι ένα πρόγραμμα που φορτώνει τη γλώσσα ακριβώς όπως το περιέγραψα. Στο m2000.exe έχω ορίσει μεγάλη στοίβα εκτέλεσης, ενώ όταν ξεκινάει η Μ2000 κάνει έλεγχο για το μέγεθός της. Ο κώδικας της M2000 έχει γίνει compiling χωρίς runtime έλεγχο στους πίνακες. Με αυτό κερδίζει ταχύτητα, είναι σαν να έχει γίνει με c compiler. Εννοείται ότι στους πίνακες που φτιάχνουμε στη Μ2000 γινεται έλεγχος ορίων. Απλά δεν έχω διπλό έλεγχο τώρα ενώ θα είχα αν το έκανα μετάφραση με το κανονικό τρόπο.
Άλλο τεχνικό ζήτημα που εμφανίστηκε από τα Windows 7 ήταν ο χειρισμός της ghost οθόνης. Μια εφαρμογή σε vb με event loop, δηλαδή με παράθυρα, πρέπει να εξυπηρετεί γεγονότα το πολύ σε ένα διάστημα, ένα χρόνο τύπου timeout, όπου αν τον περάσει χωρίς να απαντήσει η εφαρμογή, το λειτουργικό θεωρεί ότι έχει κρεμάσει και βγάζει μια λευκή οθόνη, τη λεγόμενη οθόνη φάντασμα. Έτσι αν δίναμε μια μεγάλη επανάληψη στη Μ2000 θα παίρναμε λευκή οθόνη όπου μετά μόνο κλείσιμο της εφαρμογής γίνονταν. Αφού μελέτησα το ζήτημα βρήκα τη λύση. Τέτοια πράγματα δεν γίνονται σε Net γλώσσα. Αν θες κώδικα να τρέχει πχ πέντε λεπτά σε ένα γεγονός, κλειδώνει η εφαρμογή . Για το λόγο αυτό υπάρχουν ασύγχρονες λειτουργίες, σε ξεχωριστά dll, με νήματα και μεγάλη πολυπλοκότητα. Να γιατί εμφανίστηκαν γλώσσες όπως η Rust για καλή διαχείριση νημάτων.
Στη M2000 επίσης έχω δύο συστήματα, ένα για χρήση νημάτων από τη γλώσσα, τα οποία δουλεύουν με ένα βασικό timer, το οποίο  καλεί μια μέθοδο σε τακτά χρονικά διαστήματα, καθώς και έναν διαχειριστή παραθύρων ο οποίος παίρνει γεγονότα και καλεί κώδικα της Μ2000. Αυτά τα δύο έδωσαν την δυνατότητα στη γλώσσα να φτιάχνει παράθυρα και νήματα, και να τα χρησιμοποιεί και τα δύο. Υπάρχει και αντικείμενο Mutex, σε χρήση από τον προγραμματιστή, αν θέλουμε έλεγχο πηγών αποκλειστικά.
Για τα παράθυρα η Vb6 είχε ή να φτιάξει κανείς προκαθορισμένες φόρμες, ή να έχει μεν προκαθορίσει κάποια στοιχεία ελέγχου σε πίνακα και να φορτώνει επιπλέον πάντα όμως τα ίδια ώστε τα γεγονότα να εξυπηρετούνται από στατικές μεθόδους με την ευκολία ενός index. Στην Net έκδοση αφαίρεσαν τους πίνακες στοιχείων ελέγχου, ή controls. Έτσι αποκλείστηκε η χρήση σε κάποια net γλώσσα.
Για να φτιάχνω λοιπόν ότι φόρμα θέλω με ότι στοιχεία θέλω ενώ τρέχει ήδη το περιβάλλον της γλώσσας έπρεπε να βρω μια λύση που να ικανοποιεί και τους κανόνες.
Επίσης τα στοιχεία της Vb6 έπασχαν από το θέμα της συμβατότητας με το Unicode.
Η λύση που σκέφτηκα ήταν δύσκολη αλλά εδωσε καρπούς. Έφτιαξα ένα δικό μου στοιχείο ελέγχου και βρήκα τρόπο να διαβάζω τους unicode χαρακτήρες από το πληκτρολόγιο στη γέννηση του γεγονότος που η visual basic έδινε την μετατροπή του σε ansi δηλαδή με την κωδικοσελιδα την ελληνική οπότε εκεί κάθε άλλος χαρακτήρας έβγαινε στο 63, το ερωτηματικό ?. Την λύση τη δημοσίευσα στο Vbforums. Μπορεί και άλλοι να την ήξεραν αλλά δεν είχε ποτέ δημοσιευθεί. Αφού λοιπόν είχα ένα βασικό στοιχείο ελέγχου, το οποίο είναι αντικείμενο, έφτιαξα άλλα αντικείμενα που το ενσωματώνουν δίνοντας διαφορετικές δυνατότητες. Για παράδειγμα ο διορθωτής κειμένου και κώδικα γράφτηκε ως αντικείμενο που οδηγεί το βασικό. Έχω πολύ καλό έλεγχο του διορθωτή όπου συμπεριλαμβάνει τρεις σελιδοδείκτες, με τα F6, F7, F8, τα οποία κάνουν το καθένα όλες τις λειτουργίες για να θέσουμε νέο, να νετακινηθούμε ή να σβήσουμε, όπως στα παλιά ραδιόφωνα με το προγραμματισμό σταθμών. Αν γράψουμε κείμενο μεταξύ των σελιδοδεικτών δεν χάνουν τη ρύθμιση τους. Έτσι ο χρήστης της Μ2000 σημαδεύει σημεία στο κώδικα και άμεσα μεταβαίνει εκεί. Τέτοιες δυνατότητες δεν έχουν τα έτοιμα στοιχεία, ούτε του Net.
Δεν είναι λοιπόν θέμα να είσαι σε νέο η σε παλιό περιβάλλον πχ vb η net, αλλά σε ποιο περιβάλλον έχεις τον απόλυτο έλεγχο. Στη vb6 υπάρχει ο απόλυτος έλεγχος. Σχεδιάστηκε σαν ελβετικός σουγιάς για προγραμματιστές. Σε κάθε έκδοση των windows προσαρμόζει η μαμά εταιρεία το βασικό κομμάτι της, ένα dll, το οποίο είναι οι συναρτήσεις και ο δικός της window manager, που δεν βάζει ο compiler μέσα στο τελικό πρόγραμμα, ώστε να υπάρχει πάντα συμβατότητα. Για το λόγο αυτό δεν μπορεί κανείς να φορτώσει άλλο dll στη θέση της vb6. Ενώ επί windows 98 η βασική βιβλιοθήκη ήταν redistributable, από Xp και πάνω δεν είναι. Τα windows 10 την έχουν, και θα την έχουν για πάντα. Δεν δουλεύουν χωρίς το σουγιά τους. Αυτή η βιβλιοθήκη χρησιμοποιεί το Win32 μοντέλο και τις βασικές βιβλιοθήκες του. Έτσι ένας πολλαπλασιασμός δύο variant, γίνεται από την Μ2000 με μια κλήση στη βιβλιοθήκη της Vb6 και από εκεί σε μια άλλη βιβλιοθήκη του συστήματος. Στο Net το ίδιο πράγμα γίνεται. Στο τέλος δηλαδή η ίδια ρουτίνα θα κληθεί. Γιατί γίνεται αυτό; Επειδή ο κώδικας που κάνει μια δουλειά γράφεται μια φορά στα Windows.
Είχα δώσει στο blog, ενα πρόγραμμα σε M2000 το οποίο έστελνε ένα source σε c με δυοσυναρτήσεις, εκτελούσε τον gcc compiler, έφτιαχνε το object, τελικά το έκανε link σε dll και το φορτωνε στη γλώσσα ώστε οι δύο συναρτήσεις να χρησιμοποιηθούν από τον ίδιο κώδικα της Μ2000. Δηλαδή έγινε late bound των συναρτήσεων.
Η Μ2000 μπορεί κατά την εκτέλεση να ανοίγει αντικείμενα COM με γεγονότα. Το κάνouν και οι net γλώσσες αλλά στατικά, δηλαδή οι δηλώσεις πρέπει να γίνουν πριν τρέξει το πρόγραμμα. Στη Μ2000 ο διερμηνευτής τρέχει ακόμα και όταν ήμαστε στη κονσόλα της Μ2000. Δηλαδή όλα γίνονται δυναμικά. Αν γίνει λάθος στο κώδικα δεν πέφτει η Μ2000, αλλά βγαινουμε στη γραμμή εντολών της πάμε και αλλάζουμε το κώδικα και τον τρέχουμε ξανά. Επίσης έχουμε το Esc, το ctrl+C και το Break για σταμάτημα κώδικα, όχι σταμάτημα του διερμηνευτή. Το ζήτημα με τις net γλώσσες είναι ότι είναι τέτοιες για να φτιάχνεις τελικό πρόγραμμα. Και η vb6 για τον ίδιο λόγο φτιάχτηκε ως RAD σύστημα, δηλαδή Γρηγόρης ανάπτυξης, αλλά δίνει δυνατότητες για low level προγραμματισμό. Πχ μπορεί κανείς να βάζει κατά το runtime κώδικα σε μνήμη και να τον εκτελεί. Πράγμα που μπορεί να χρησιμοποιηθεί κακόβουλα. Στη  Net το έκοψαν αυτό, με συνέπεια να κόψουν και την καλή χρήση.
Το ζήτημα της vb6 δεν είναι ως προς την εκτέλεση αλλά στο IDE. Μέχρι και τα 7 δεν έχει θέμα. Μετά βρέθηκαν workarounds, λύσεις δηλαδή και παίζει και στα 10.
Συμπέρασμα. Η παλαιότητα της γλώσσας δεν είναι σοβαρός λόγος μη αποδοχής. Ο σοβαρός λόγος είναι η μη συμβατότητα με την τρέχουσα τεχνολογία. Εφόσον το Win32 μοντέλο περιέχεται στα Windows 10, η τεχνολογία του είναι συμβατή με αυτά, δηλαδή ανήκει στις τρέχουσες τεχνολογίες.
Το θέμα του ονόματος δεν με απασχολεί. Ας την λες και Βαγγέλη! Ένα όνομα χρειάζεται για να συνεννοηθούμε!

alkisg

Παίζει η Μ2000 (ή ο Διερμηνευτής της ΓΛΩΣΣΑΣ) εντός του browser ή σε tablets ή σε touch screens κλπ; Μπα.
Πώς λοιπόν να ασχοληθεί κάποιος και να κάνει σύστημα όπου οι μαθητές θα λύνουν ασκήσεις online από τα κινητά τους, πιθανώς με αυτόματο έλεγχο ορθότητας ή βαθμολόγηση, κλπ κλπ;
Αν ο βασικός developer των γλωσσών αυτών το γυρίσει σε αγρότης, υπάρχουν άλλοι 100 ή 1000 να συνεχίσουν την ανάπτυξη; Μπα.
(Ο Κοίλιας έκανε κάποιες προσπάθειες ορισμού νέας Ψευδογλώσσας με υποστήριξη αρχείων με αριθμητικούς file descriptors τύπου Basic κλπ, αλλά ευτυχώς δεν υπήρχε δυνατότητα να μπουν στην ΑΕΠΠ).

Γι' αυτό η Μ2000 και η ΓΛΩΣΣΑ δεν είναι κατάλληλες για την εκπαίδευση.
Και άλλες γλώσσες ξεκίνησαν ως one-man-show, αλλά δεν έχει νόημα να μπαίνουν στην εκπαίδευση όσο είναι one-man-show. Στην εκπαίδευση είναι καλύτερα να μπαίνουν ευρέως αποδεκτά περιβάλλοντα. Το να εκπαιδευτούν χιλιάδες καθηγητές, να προετομαστεί το κατάλληλο υλικό για να διδάξουν όσο το δυνατόν καλύτερα, αντιστοιχεί σε χιλιάδες ανθρωποχρόνια προσπάθειας (ναι, χιλιάδες διδάξανε ΑΕΠΠ και τους πήρε πάνω από χρόνο να οργανώσουν σωστά τη διδασκαλία τους). Δεν πρέπει να κοιτάμε μόνο τις ώρες που έφαγε ένας developer για να φτιάξει ένα περιβάλλον. Μόνο και μόνο οι ώρες που συζητάμε για ασάφειες είναι πολύ περισσότερες από το χρόνο συγγραφής και της ΓΛΩΣΣΑΣ και του Διερμηνευτή.
Κι εγώ για λόγους επιδόσεων και συμβατότητας είχα φάει άπειρες ώρες ώστε να παίζει ο Διερμηνευτής από Windows 95 first edition μέχρι Windows 7 (και 10), με custom unicode controls και χειρωνακτικές υλοποιήσεις bottomless list controls για να μπορούν να φαίνονται  πίνακες με εκατομμύρια στοιχεία στην παρακολούθηση μεταβλητών άμεσα ακόμα και σε 386, και μάλιστα το Delphi συνεχίζεται ενεργά και μπορεί πλέον να κάνει και native compile σε Linux, αλλά δεν θα προσκαλούσα κανέναν να το συνεχίσει σε Delphi...
Αν ήταν να ξαναυλοποιηθεί η ΓΛΩΣΣΑ την σήμερον ημέρα, θα επέλεγα υλοποίηση σε HTML5. Αλλά εννοείται πρώτα θα επέλεγα όχι ΓΛΩΣΣΑ.

bugman

#82
Αυτό που προσπαθούσε ο κ Κοίλιας, για τα αρχεία, το έχει η Μ2000, σε δύο εκδόσεις  Ansi και Utf16LE. Επίσης επειδή έχει ένα αντικείμενο Έγγραφο έχει με μια εντολή  απευθείας σώσιμο εγγράφου. Τα έγγραφα μπορούν να αποθηκεύονται  σε τέσσερις κωδικοποιήσεις, ansi, utf16le, utf16be, utf8. Υποστηρίζει αυτόματη αναγνώριση τύπου κωδικοποίησης και τύπου αλλαγής γραμμής. Κατά το σώσιμο διατηρεί το τρόπο διαβάσματος αν το αντικείμενο φορτώθηκε από το δίσκο, αλλά μπορούμε να κάνουμε εξαγωγές όπως θέλουμε.
Εκτός από αρχεία κειμένου για εισαγωγή, εξαγωγή, προσθήκη, τυχαίας προσπέλασης, και χρήση αντικείμενου εγγράφου, υπάρχει συνδυασμός των εντολών αρχείων για δυαδικά αρχεία, ορίζοντας σημείο στο αρχείο και πλάτος μιας διάρθρωσης μνήμης για εισαγωγή από η εξαγωγή σε σημείο στο αρχείο.
Η γλώσσα είναι ολοκληρωμένη, και το περιβάλλον της. Δεν απαιτείται άλλη ανάπτυξη. Η παρουσία του δημιουργού της δεν είναι απαραίτητη.
Το ότι δεν παίζει σε browser μάλλον δεν κατάλαβες ότι παίζει ως script γλώσσα μέσα από άλλες γλώσσες. Όπως η vbscript. Όπως όλα τα μαθήματα πχ φυσική θα εξετάζονται μέσω μιας πλατφόρμας, με την ίδια θα εξετάζεται και ο προγραμματισμός. Δεν χρειάζεται το πρόγραμμα να εκτελείται online, αλλά η λύση, ως απάντηση, να δίνεται online, και η αξιολόγηση γίνεται από εξεταστή που διαβάζει την κάθε λύση.

Άρα. Το one man show, που γύρισε πάλι στη συζήτηση, δεν υπάρχει πια, δεν μιλάμε για άλλη ανάπτυξη. Η Μ2000 έχει τόσα πολλά, για όλες τις ηλικίες. έχει χρήση της ομιλίας με άμεση εντολή, χρήση μουσικής με 16 φωνές, 128 όργανα και γράφει κανείς μουσική με νότες με ενσωματωμένη γλώσσα μια μουσική, με 5 οκτάβες, με έλεγχο έντασης ανά όργανο.Στα παραδείγματα δίνω και ένα πιάνο που με καλό πληκτρολόγιο παίζει 6 νότες μαζί. Δείχνει τα πλήκτρα όπως τα πατάμε, μετράει και το σήκωμα του δαχτύλου από το πλήκτρο. Επίσης έχει sprites, δηλαδή αυτό που έχει το Scratch, τα οποία έχουν εντολές περιστροφής,αλλαγής μεγέθους, τοποθέτησης στη οθόνη καθώς και έλεγχο σύγκρουσης. Έχω δώσει και ένα pong τύπου παράδειγμα.
Συζητάτε για την logo. Αυτός  που την έφτιαξε πρόσθεσε κάτι που μέχρι τότε δεν είχε βάλει άλλος την οπτικοποίηση του δρομέα γραφικών. Στη Μ2000 μπορεί κανείς να βάλει ένα sprite να παίζει το ίδιο πράγμα. Επειδή έχει εκτός από καρτεσιανές και πολικές συντεταγμένες μπορούμε να ζωγραφίζουμε δίνοντας γωνία και απόσταση. Μια εντολή Χάραξε χαράζει γραμμές ενώ η Βήμα μετακινεί χωρίς γραμμή τον δρομέα.
Έχω δώσει το δένδρο του Πυθαγόρα με πολικές συντεταγμένες και έτσι βγαίνει με την γωνία που θέλουμε. Στο παράδειγμα δύο δένδρα εμφανίζονται με συμμετρία σημείου, υπό γωνία.
Μπορούμε να φορτώνουμε εικόνες, να φορτώνουμε τμήματα της οθόνης σε αλφαριθμητικά και να τα χρησιμοποιούμε ως εικόνες. Μπορούμε να περιστρέφουμε  και να τοποθετούμε εικόνες. Επειδή έχουμε τον έλεγχο της ανανέωσης της οθόνης μπορούμε να σχεδιάσουμε την οθόνη πριν την δείξουμε, και έτσι πετυχαίνουμε animation. Υπάρχουν παραδείγματα όπως εκκρεμές και ρολόι αναλογικό. Μπορούμε να χειριζόμαστε βίντεο και να δείχνουμε με ακρίβεια καρέ στην κονσόλα, σταματημένο βίντεο.
Μπορούμε εύκολα να παίξουμε με βάσεις δεδομένων και Sql ερωτήματα.
Δηλαδή η γλώσσα είναι απίθανη, έχει τέτοια ολοκλήρωση που φτιάχνεται όσα μαθήματα θέλετε από δημοτικό μέχρι και λύκειο.
Έχει αντικείμενα που φτιάχνει ο μαθητής με ιδιωτικά και δημόσια μέλη. Υπάρχουν παραδείγματα για διπλή συνδεδεμένη λίστα με δείκτες με OOP. Υπάρχει χρήση του OOP  για νέο τύπο, κλάσμα. Ορίζουμε πράξεις στα αντικείμενα, με μέλη Τελεστές.
Δείτε προγράμματα που έχω δημοσιεύσει στο http://rosettacode.org/wiki/Category:M2000_Interpreter είναι με τις αγγλικές εντολές αλλά γίνονται εύκολα με τις ελληνικές.
Άρα η ολοκλήρωση της Μ2000 δεν απαιτεί το δημιουργό της για υποστήριξη. Ο κώδικας είναι ανοιχτός και όλος, όλο το περιβάλλον. Η γνώση της Vb6 σε κάποιο βαθμό είναι γνωστή σε καθηγητές με εμπειρία, με χρόνια στο σχολείο, και Vb6 έχει πολλές άδειες το ελληνικό δημόσιο. Δεν θα πάνε χαμένες Σε περίπτωση που χρειάζεται να γίνει εμπλουτισμός της γλώσσας.
Το ωραίο στην Μ2000 είναι ότι μπορούμε τοπικά να χρησιμοποιούμε δεσμευμένες λέξεις για μεταβλητές ή ονόματα τμημάτων. Δηλαδή την Τύπωσε μπορούμε να την έχουμε μεταβλητή και συνάμα να είναι και εντολή. Και αυτό γίνεται τοπικά για όσο ένα τμήμα εκτελείται, αλλά δεν επηρεάζει τα τμήματα που καλούμε από εκεί  Έτσι παρόλο το λεξιλόγιο της Μ2000 που έχει 500+ αναγνωριστικά, είναι το 97% επαναχρησιμοποιούμενα. Οι βασικές εντολές αλλαγής ροής δεν αλλάζουν.
Η εκπαίδευση των καθηγητών γίνεται από εκπαιδευτές, όχι από το δημιουργό της γλώσσας. Το πρόβλημα ορισμού της ΓΛΩΣΣΑΣ, οι λεγόμενες ασάφειες ήταν λόγο έλλειψης διερμηνευτή από τους δημιουργούς της Στη M2000 δεν υπάρχουν ασάφειες. Η γλώσσα δεν ορίζεται μόνο σε χαρτιά αλλά υπάρχει άμεσα για χρήση στο περιβάλλον της. Μηδέν ασάφειες.
Στη Μ2000 το πέρασμα με αναφορά φαίνεται με τη χρήση του &. Τα αλφαριθμητικά φαίνονται με την υποχρεωτική χρήση του $ στα ονόματα μεταβλητών και συναρτήσεων που επιστρέφουν αλφαριθμητικά. Αυτή η λεπτομέρεια κατά άλλους είναι πιο εκπαιδευτική από ένα ορισμό τύπου αλφαριθμητικού κάπου στην αρχή, και μετά απλά ονόματα με ίδιο τρόπο αριθμητικά και αλφαριθμητικά.
Χρήση δεκαεξαδικών με 0x  στην αρχή. Υπάρχουν συναρτήσεις για δυαδικές πράξεις, όπως η πρόσθεση 32bit με αποκοπή του ovrflow bit. Χρησιμοποιείται σε αλγόριθμους hash. Έχω παράδειγμα με RIPEMD160 αλγόριθμο γραμμένο σε Μ2000.
Αν έμπαινε η Μ2000 σε σχολεία σε όλες τις τάξεις από τη Τετάρτη Δημοτικού, θα ήταν ήταν το ανάλογο της γυμναστικής, ως πνευματικής άσκησης και στις τελευταίες τάξεις θα προγραμμάτιζαν παπάδες όπως λένε οι της γενιάς μου. Τώρα με τα εργαλεία που έχουν, και που αλλάζουν συχνά δεν κάνουν τίποτα. Είναι πάντα σε φάση εισαγωγής. Τελειώνουν το σχολείο σε φάση εισαγωγής. Μια γεύση δηλαδή. Ο προγραμματισμός θέλει κόπο και χρόνο. Όταν κάψει ώρες ο μαθητής θα αποκτήσει όχι μόνο αλγοριθμική σκέψη, αλλά +20 IQ.. επιπλέον, (λέμε τώρα!).
Το ότι ζορίζονται οι εκπαιδευτικοί να εκπαιδευτούν δείχνει το βασικό πρόβλημα,η έλλειψη εξάσκησης στο προγραμματισμό. Μπορεί σε όλη τη φάση εκπαίδευσης ο φοιτητής  στο πανεπιστήμιο να έφτιαξε λιγότερα από 100 προγράμματα και από αυτά ίσως κανένα με πάνω από χίλιες γραμμές κώδικα. Εδώ είναι οι καθηγητές να πουν την γνώμη τους πάνω σε αυτό


Προσθήκη 29/6/2020: Έχει γίνει ανανέωση της Μ2000 με περισσότερες δυνατότητες στα αντικείμενα χρήστη, τις ομάδες και τις κλάσεις που δημιουργούν ομάδες. Έκδοση 9.9 αναθεώρηση >=33.

alkisg

Παράθεση από: bugman στις 01 Ιουν 2020, 10:43:44 ΠΜ
Η γλώσσα είναι ολοκληρωμένη, και το περιβάλλον της. Δεν απαιτείται άλλη ανάπτυξη. Η παρουσία του δημιουργού της δεν είναι απαραίτητη.
Το ότι δεν παίζει σε browser μάλλον δεν κατάλαβες ότι παίζει ως script γλώσσα μέσα από άλλες γλώσσες. Όπως η vbscript.

Δεν το έπιασες τι λέω. Άρα, στα σχολεία που δεν έχουν καν Windows, πώς θα γράφουν κώδικα οι μαθητές στην Μ2000;
Αν μιμηθούμε την Αμερική (δεν το προτείνω, αλλά δεν αποκλείεται κι όλας) και πάμε όλοι σε google education suite και chromebooks με μόνο chrome os, πώς θα παίζει η Μ2000;
Αν υιοθετήσουμε το μοντέλο bring your own device και οι μαθητές φέρνουν tablets, πώς θα παίζει η Μ2000;
Εδώ το βιβλίο του ΕΠΑΛ λέει για Python 2.x, και ήδη στις νέες διανομές Linux δεν υπάρχει καν διαθέσιμη για κατέβασμα... ό,τι δεν αναπτύσσεται ενεργά, πεθαίνει, και ισχύει και για τις γλώσσες και για τα βιβλία προγραμματισμού. Το scratch το ξαναέγραψαν εξ' αρχής 3 φορές μέχρι να το πάνε σε HTML5 για να παίζει και σε tablets.

Παράθεση από: bugman στις 01 Ιουν 2020, 10:43:44 ΠΜ
Το ότι ζοριζονται οι εκπαιδευτικοί να εκπαιδευτούν δείχνει το βασικό προβλημα,η έλλειψη εξάσκησης στο προγραμματισμό

Δεν σου πήρε Ν χρόνια να αναπτύξεις και να τεκμηριώσεις την Μ2000; Τα ίδια Ν χρόνια πήρε και στους εκπαιδευτικούς να οργανώσουν όσο καλύτερα μπορούν το μάθημά τους, ώστε να έχουν τις κατάλληλες δραστηριότητες για κάθε επίπεδο του μαθητή, να ανιχνεύσουν όλες τις πιθανές παρανοήσεις, να στήσουν γνωστικές συγκρούσεις...
Εσύ γιατί δεν ξαναέγραψες την Μ2000 σε HTML5; Είναι έλλειψη γνώσεων επειδή έχεις μείνει στην vb, ή έλλειψη όρεξης να ασχοληθείς με κάτι νεότερο; Να απαντήσω κι όλας, είναι η επένδυση τόσων χρόνων· είσαι περήφανος που μετά από τόσο κόπο το έφτασες στο σημείο "τελειότητας" που ήθελες. Γιατί δεν αναγνωρίζεις και στους άλλους ακριβώς τον ίδιο κόπο και περηφάνια, και τους απαξιώνεις με τέτοιες φράσεις; Η βασική ιδιότητα των καθηγητών είναι "εκπαιδευτικοί", όχι "προγραμματιστές". Το να μάθει κανείς vb μπορεί να θέλει μια βδομάδα· το να μάθει να την διδάσκει, χρόνια· το να μάθει να την αποφεύγει, ακόμα περισσότερο όπως φαίνεται! :)

Anyway δεν γράφω άλλα γιατί μου φαίνεται ότι δεν θες να καταλάβεις το σκεπτικό μας, οπότε τζάμπα παιδευόμαστε κι εμείς κι εσύ.

bugman

#84
Αυτή η ιδέα που αναφέρεις με το tablet είναι αντί εκπαιδευτική. Πρώτα γιατί ο εξοπλισμός κοστίζει και σε αγορά και σε συντήρηση. Ποιος θα είναι υπεύθυνος συντήρησης για το προσωπικό tablet του μαθητή; Θα υποχρεώσουν το γονέα να αγοράσει και να συντηρεί εξοπλισμό απαραίτητο για τη δωρεάν εκπαίδευση;
Η Μ2000 τρέχει σε linux σε virtualbox με Windows και με wine χωρίς δηλαδή εικονική μηχανή. Το τελευταίο έχει παραλλαγές και η καλύτερη είναι όταν χρησιμοποιούμε επιφάνεια εργασίας ιδιωτική στο wine.
Δεν στηλιτεύω την δυνατότητα των καθηγητών στο προγραμματισμό, διότι δεν υποχρεώθηκαν να είναι προγραμματιστές. Δεν πέρασαν εξετάσεις για αυτό το πράγμα.
Το πνεύμα μου ήταν στην παιδεία που δημιουργεί αναλφάβητους στο προγραμματισμό. Να γιατί θέλω να μπει ένα μάθημα με ένα περιβάλλον για πολλά έτη. Όπως και σε άλλα μαθήματα πχ στα Μαθηματικά το contex είναι κοινό, η εμβάθυνση αλλάζει.
Να προσθέσω ότι υπάρχει στο ίντερνετ ενοικίαση υπολογιστή απομακρυσμενου με όσους επεξεργαστές θέλεις για όσες ώρες θέλεις με όποιο λειτουργικό θέλεις με όση μνήμη θέλεις. Μπαίνεις από οπουδήποτε! Και από τηλέφωνο!
Στη πρώτη αναζήτηση έβγαλε αυτό:
https://desktop.rent/en/
Και αυτό, πιο φθηνό 25 δολάριο το μήνα.
https://www.apps4rent.com/microsoft-plans.html
Ας δούμε όμως και τις απόψεις των αλλων. Μην το κάνουμε διάλογο δύο ατόμων.

evry

Αυτό που εννοεί ο Άλκης (αν κατάλαβα) είναι ότι σήμερα οποιοδήποτε περιβάλλον δεν έχει και μια online έκδοση σε HTML5/Javascript δεν προχωράει. Δες από την πλευρά της ανεξαρτησίας και της συμβατότητας. Ότι είναι σε html5 δεν εξαρτάται από το λειτουργικό, τρέχει παντού, ο interpreter ουσιαστικά είναι ο browser. Είναι μεγάλη ευκολία να μπορεί ο μαθητής να δοκιμάσει απλές εντολές και προγράμματα σε online περιβάλλον. Δεν θα γράψει πάνω από 100 γραμμές κώδικα. Δεν χρειάζεται κάποιο σούπερ περιβάλλον αλλά κάτι απλό και γρήγορο.
Έχω μαθητές που δεν έχουν υπολογιστή και δουλεύουν σε Python με Online interpreters από tablet. κάποιοι και από κινητό!

Επίσης πολλοί φοιτητές μου είχαν πρόβλημα με το R Studio και τώρα τρέχουν τις ασκήσεις τους στο R Studio Cloud, το οποίο είναι ένα κανονικό περιβάλλον προγραμματισμού στο cloud, απίστευτο!

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

Δυο παρατηρήσεις ακόμα:
@alkisg
Αυτό που είπες για τα αρχεία. Τι μανία είναι αυτή που έχουν κάποιοι με τα αρχεία. Έχω γνωρίσει αρκετούς που πιστεύουν ότι αποτελεί μεγάλη καινοτομία σε ένα μάθημα προγραμματισμού να έχεις ένα κεφάλαιο με read/write σε αρχείο και αυτό να γίνεται σε κάποια ...... ΓΛΩΣΣΑ!!! Αδιανόητα πράγματα.
Προσωπικά διαφωνούσα και με τα αρχεία που μπήκαν στην Python. Δεν έχει νόημα, δεν μαθαίνεις κάτι καινούργιο.
Θα είχε νόημα αν έγραφες κώδικα σε C, αλλά αυτό είναι αντικείμενο σχολών πληροφορικής.
(Προσωπικά πιστεύω ότι αρκετοί έχουν κατάλοιπα ίσως και εφιάλτες >:D από τους αλγορίθμους συγχώνευσης ταινιών που είχαν κάποια παλιά βιβλία δομών δεδομένων σε Pascal..)

Πάντως αναφορικά με το μέλλον δε νομίζω ότι έχει νόημα να πάμε σε κάποια "εκπαιδευτική" γλώσσα από τη στιγμή που υπάρχουν εξαιρετικές επιλογές (python, ruby, javascript) για να κάνεις φανταστικές εφαρμογές πολύ γρήγορα.
Ένα τεράστιο πλεονέκτημα είναι οι κοινότητες που αναπτύσσονται γύρω από αυτές τις γλώσσες και παρέχουν εκπαιδευτικό υλικό, βιβλία, φύλλα εργασίας κλπ. Βοηθάει πολύ όταν είσαι καινούργιος σε ένα χώρο για να μπεις αμέσως στο νόημα.
Επίσης οι βιβλιοθήκες που αναπτύσσονται προσφέρουν απεριόριστες δυνατότητες, στο πλαίσιο ενός project-based μαθήματος. Θα μπορούσαμε να κάνουμε πράγματα με τα οποία οι άλλες ειδικότητες θα παραμιλούσαν.
Η εικόνα που έχουν οι άλλες ειδικότητες για εμάς είναι πολύ κακή και έχει να κάνει σε έναν βαθμό και με το γνωστικό μας αντικείμενο και το βάθος στο οποίο διδάσκεται.

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

@bugman
Αναφορικά με την πρώτη σου ερώτηση, θα μπορούσες να παρουσιάσεις τη γλώσσα σου και σε κάποιο επιστημονικό συνέδριο πληροφορικής μαζί με μερικές ιδέες πως θα μπορούσε να βοηθήσει στη διδασκαλία κατά τη γνώμη σου και να πάρεις εκεί feedback από εκπαιδευτικούς. Ένα τέτοιο συνέδριο το οποίο έχει αρκετά για πληροφορική είναι το CIE
http://lefkimi.ionio.gr/cie/
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

bugman

@Evry
Ενδιαφέρον το συνέδριο!

Ως προς την επιλεγόμενη γλώσσα για εκπαίδευση:

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

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

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

bugman

#87
Το Παράδειγμα Αποστολή Λουλουδιών, στη Μ2000
Το πρόγραμμα τρέχει, χωρίς να βάλουμε στοιχεία.
1. Δημιουργεί τις κλάσεις
2. Κάνουμε τις δηλώσεις αντικειμένων όπως Γιώργος κ.ο.κ
3. Εκτελούμε τις μεθόδους (τμήματα αντικειμένων) και όπου χρειάζεται βάζουμε αναφορά στο αντικείμενο συνεργασίας. Οι εσοχές δείχνουν τα φωλιασμένα μέρη των συνεργασιών.

Παρατήρηση: Αντικείμενο με & στην αρχή του ονόματος είναι Αναφορά. Αναφορά σημαίνει ότι περνάει στο τμήμα "με αναφορά", δηλαδή μπορεί να αλλάξει κατάσταση.

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

Στις κλάσεις (που δημιουργούν ομάδες, τα αντικείμενα της Μ2000) και ειδικότερα στις μεταβλητές αν δεν δώσουμε αρχική τιμή δίνονται αυτόματα από το διερμηνευτή. Οι αριθμοί 0 double, τα αλφαριθμητικά (έχουν το $) κενό αλφαριθμητικό. Οι πίνακες έχουν το κενό στοιχείο, το οποίο είναι 0 αν το διαβάσουμε για αριθμό ή κενό αλφαριθμητικό αν το διαβάσουμε ως αλφαριθμητικό.

Επίσης εδώ όλα τα μέλη είναι Δημόσια (δεν έχουμε πουθενά δήλωση Ιδιωτικό:). Στα δημόσια έχουμε πρόσβαση και από έξω (δηλαδή το Γιώργος.Όνομα$ μπορεί να διαβαστεί και να αλλαχθεί). Εδώ κρατάμε απλό τον κώδικα για το παράδειγμα. Λείπουν οι κατασκευαστές, τα τμήματα που μπαίνουν στην κλάση με το όνομα της κλάσης και μέσω αυτού δίνουμε παραμέτρους κατά την δημιουργία του αντικειμένου. Και χωρίς κατασκευαστή, λειτουργεί το παρακάτω πρόγραμμα.



\\ Αποστολή λουλουδιών
\\ Βασικό σχέδιο
Κλάση Πελάτης {
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      Τηλέφωνο$, Emali$
      Τμήμα ΚάνειΠαραγγελια  (&Ανθοπώλης){
      }
      Τμήμα ΠαραλαμβάνειΑνθοδέσμη {
      }
}
Κλάση Ανθοπώλης {
      Επωνυμία$,
      Όνομα$, Επώνυμο$,
      Διεύθυνση$, ΑΦΜ$,
      Τηλέφωνο$, Emali$,
      Τραπεζικός_Λογαρασμός$, Κωδ_Δικ_Συν
      Τμήμα ΔέχεταιΠαραγγελία {
      }
      Τμήμα ΖητάΣυνεργασία (&Ανθοπώλης) {
      }
      Τμήμα ΑποδέχεταιΣυνεργασία {
      }
      Τμήμα ΑναθέτειΑνθοδεσία (&Ανθοδέτης) {
      }
      Τμήμα ΑναθέτειΠαράδοση (&Ταχυμεταφορέας) {
      }
}
Κλάση Ανθοδέτης {
      Επωνυμία$,
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      ΑΦΜ$, Τηλέφωνο$,
      Emali$, Ειδικότητα$, Ωριαία_αμοιβή
      Τμήμα ΕτοιμάζειΑνθοδέσμη {     
      }
}
Κλάση Ταχυμεταφορέας {
      Επωνυμία$,
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      ΑΦΜ$, Τηλέφωνο$,
      Emali$,   Τύπος$
      Τμήμα ΠαραδίδειΑνθοδέσμη (&Πελάτης){
      }
}


Μαμά=Πελάτης()
Γιώργος=Ανθοπώλης()
Τζιοβάνι=Ανθοπώλης()
Αντόνιο=Ανθοδέτης()
Πέπε=Ταχυμεταφορέας()
Άννα=Πελάτης()


\\ Παραγγελία Μαμά - Γιώργος
Μαμά.ΚάνειΠαραγγελια &Γιώργος
      Γιώργος.ΔέχεταιΠαραγγελία
      \\ Συνεργασία Γιώργος - Τζιοβάνι
      Γιώργος.ΖητάΣυνεργασία &Τζιοβάνι
            Τζιοβάνι.ΑποδέχεταιΣυνεργασία
            \\ Ανάθεση Ανθοδοσίας  Τζιοβάνι - Αντόνιο
            Τζιοβάνι.ΑναθέτειΑνθοδεσία &Αντόνιο
                  Αντόνιο.ΕτοιμάζειΑνθοδέσμη
            \\ Ανάθεση Παράδοσης Τζιοβάνι - Πέπε
            Τζιοβάνι.ΑναθέτειΠαράδοση &Πεπε
                  \\ Παράδοση Πέπε - Άννα
                  Πέπε.ΠαραδίδειΑνθοδέσμη &Αννα
                        Αννα.ΠαραλαμβάνειΑνθοδέσμη

bugman

#88
Το πσράδειγμα λουλούδια ένα βαθμό ολοκλήρωσης παραπάνω.
1. Έγιναν αλλαγές σε μερικά τμήματα για να γίνουν συναρτήσεις να γυρνούν αληθής ή ψευδής.
2. Ορισμένα αντικείμενα έγιναν γενικά, για να αποφύγουμε σε αυτή τη φάση να τα συμπεριλάβουμε σε καταστάσεις (λίστες) εντός αντικειμένων, και να αποφύγουμε να γράψουμε κώδικα που να τις δουλεύει.
Ό,τι δεν είναι γενικό σημαίνει ότι δεν το αναζητούμε μέσα στα αντικείμενα. Πχ η Μαμά δεν είναι γενικό, γιατί το χρησιμοποιούμε μια φορά στη θέαση του τρέχοντος τμήματος (ο κώδικας τρέχει σε ένα τμήμα πχ Α). Ο Γιώργος επίσης είναι τοπική μεταβλητή, δεν τον καλεί μέσα σε τμήμα κανένα αντικείμενο στο παράδειγμα, ενώ οι Τζιοβάνι και Αντόνιο υποτίθεται ότι τους βρίσκει τον μεν πρώτο ο Γιώργος και τον δεύτερο ο Τζιοβάνι. Ο Πέπε είναι και αυτός τοπική (όχι γενική) γιατί τον έχουμε σε μια γραμμή εντολής τοπικά μόνο με το Τζιοβάνι.ΑναθέτειΠαράδοση &Πεπε ενώ η Άννα είναι Γενική γιατί υποτίθεται ότι ο Τζιοβάνι έχει καταγράφει την Άννα και την χρειάζεται για την ανάθεση παράδοσης.

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

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


3. Το πρόγραμμα έχει τώρα τερματισμό "Παραλήφθηκε" που κάνει το τμήμα της Άννας.


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





\\ Αποστολή λουλουδιών
\\ Βασικό σχέδιο
Κλάση Πελάτης {
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      Τηλέφωνο$, Emali$
      Τμήμα ΚάνειΠαραγγελια  (&Ανθοπώλης){
            Ανθοπώλης.ΔέχεταιΠαραγγελία
      }
      Τμήμα ΠαραλαμβάνειΑνθοδέσμη {
            Τύπωσε "Παραλήφθηκε"
      }
}
Κλάση Ανθοπώλης {
      Επωνυμία$,
      Όνομα$, Επώνυμο$,
      Διεύθυνση$, ΑΦΜ$,
      Τηλέφωνο$, Emali$,
      Τραπεζικός_Λογαρασμός$, Κωδ_Δικ_Συν
      Τμήμα ΔέχεταιΠαραγγελία {
            \\ τώρα βρίσκει ότι πρέπει να απευθυνθεί στον Τζιοβάνι
            \\ προφανώς από μια λίστα συνεργατών
            \\ Συνεργασία Γιώργος - Τζιοβάνι
            Αυτό.ΖητάΣυνεργασία &Τζιοβάνι
            Αν Τζιοβάνι.ΑποδέχεταιΣυνεργασία() Τότε
            \\ όλα καλά!
            \\ πληρώνεται προκαταβολικά!
            Τέλος Αν
      }
      Τμήμα ΖητάΣυνεργασία (&Ανθοπώλης) {
      }
      Συνάρτηση ΑποδέχεταιΣυνεργασία {
            \\ Ψάχνει ια ανθοδέτη και βρίσκει τον Αντόνιο
            \\ Ανάθεση Ανθοδοσίας  Τζιοβάνι - Αντόνιο
            \\ Το Αυτό μπορούμε να το διαγράψουμε, αφήνουμε την τελεία.
            \\  =.ΑναθέτειΑνθοδεσία(&Αντόνιο)
            =Αυτό.ΑναθέτειΑνθοδεσία(&Αντόνιο)
      }
      Συνάρτηση ΑναθέτειΑνθοδεσία(&Ανθοδέτης) {
            \\ εδώ πρέπει να έχουμε ασύγχρονη λειτουργία
            \\ έστω ότι το κάνει άμεσα!
            \\ η Ενώ είναι σαν την Όσο της ΓΛΩΣΣΑΣ
            Ενώ Ανθοδέτης.ΕτοιμάζειΑνθοδέσμη()
                         \\ αναμονή μέχρι να την φτιάξει
            Τέλος Ενώ
            =Αληθής
      }
      Τμήμα ΑναθέτειΠαράδοση (&Ταχυμεταφορέας) {
             \\ Την Αννα την βρίσκει από μια λίστα εκκρεμοτήτων.
             \\ Παράδοση Πέπε - Άννα
            Ταχυμεταφορέας.ΠαραδίδειΑνθοδέσμη &Αννα
       }
}
Κλάση Ανθοδέτης {
      Επωνυμία$,
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      ΑΦΜ$, Τηλέφωνο$,
      Emali$, Ειδικότητα$, Ωριαία_αμοιβή
      Συνάρτηση  ΕτοιμάζειΑνθοδέσμη {
            \\ όσο ετοιμάζει είναι αληθής
            \\ εδώ δίνουμε άμεσα ψευδής
            \\ την ετοίμασε σε χρόνο dt
            =Ψευδής
      }
}
Κλάση Ταχυμεταφορέας {
      Επωνυμία$,
      Όνομα$, Επώνυμο$, Διεύθυνση$,
      ΑΦΜ$, Τηλέφωνο$,
      Emali$,   Τύπος$
      Τμήμα ΠαραδίδειΑνθοδέσμη (&Πελάτης){
      }
}


Μαμά=Πελάτης()
Γιώργος=Ανθοπώλης()
\\ κάνουμε γενική όποιο αντικείμενο θέλουμε να φαίνεται μέσα σε τμήματα
\\ για ευκολία στο απλό πρόγραμμα
Γενική Τζιοβάνι=Ανθοπώλης()
Γενική Αντόνιο=Ανθοδέτης()
Πέπε=Ταχυμεταφορέας()
Γενική Άννα=Πελάτης()


\\ Παραγγελία Μαμά - Γιώργος
Μαμά.ΚάνειΠαραγγελια &Γιώργος
\\ έστω ότι όλα πήγαν καλά
\\ Ανάθεση Παράδοσης Τζιοβάνι - Πέπε
Τζιοβάνι.ΑναθέτειΠαράδοση &Πεπε
Αννα.ΠαραλαμβάνειΑνθοδέσμη


bugman

Ανέβηκε η αναθεώρηση 28, και σε αυτήν έχω μέσα στο info αρχείο πρόγραμμα που δείχνει το παράδειγμα με τα Λουλούδια με χρήση όμως μιας τεχνικής που δεν περιγράφεται με τα UML διαγράμματα, τα οποία δείχνουν μεν "σχέσεις" και "ενέργειες" αλλά η αλήθεια στο προγραμματισμό είναι κάπως διαφορετική!

Παραθέτω την έξοδο του προγράμματος (βάζει ένα κείμενο επεξήγησης στην αρχή). Η ουσιαστική διαφορά είναι αυτές οι γραμμές που ακολουθούν. Υπάρχουν λίστες με αντικείμενα. Τα αντικείμενα έχουν γραφτεί με τρόπο που να μην γνωρίζουν που αποθηκεύονται. Μέσα στη ρουτίνα καλούμε μια ενέργεια της Μαμάς: Μαμά.ΚάνειΠαραγγελια(&Κύριος, Προορισμός$) αυτό δημιουργεί όλη την εξοδο. Για να βρίσκουν τα αντικείμενα πχ ο Ανθοπώλης τον Ανθοδέτη, χρησιμοποιούνται γεγονότα, κλήσεις γεγονότων. Τις οποίες βέβαια το πως δηλώνονται και πώς λειτουργούν (όχι ειδικά στη Μ2000) είναι προχωρημένη γνώση. Όμως αυτό το παράδειγμα των 150 γραμμών αν αφαιρέσουμε τις σημειώσεις, ανοίγει τα μάτια και τη σκέψη του πώς δουλεύουν οι σύγχρονες γλώσσες!

\\\ Καταστάσεις με αντικείμενα (όλες με κλειδί το όνομα)
Κατάσταση Πελάτες= "Μαμά":=Πελάτης("Μαμά"), "Άννα":=Πελάτης("Άννα")
Κατάσταση Ανθοδέτες="Αντόνιο":=Ανθοδέτης("Αντόνιο")

Κατάσταση Ταχυμεταφορείς="Πέπε":=Ταχυμεταφορέας("Πέπε")
Κατάσταση Ανθοπώλεις ="Γιώργος":=Ανθοπώλης("Γιώργος"), "Τζιοβάνι":=Ανθοπώλης("Τζιοβάνι")

\\ εδώ είναι η ρουτίνα που λέει ποιος κάνει παραγγελία, σε ποιον και για ποιον
Παραγγελία("Μαμά", "Γιώργος", "Άννα")

bugman

#90
Ανέβηκε η Αναθεώρηση 31, η οποία πάει το θέμα αντικειμένων ένα στάδιο πιο πάνω.
1. Αρχικά υπήρχε η σύνθεση αντικειμένων από άλλα αντικείμενα. Αυτό που μπήκε τώρα είναι η σύνθεση κλάσεων. Δηλαδή φτιάχνουμε κλάσεις από κλάσεις χωρίς να εκκινήσουμε κάποιον κατασκευαστή.
Ο διερμηνευτής "ενώνει" τους ορισμούς. Μπορούμε να φτιάξουμε μια κλάση (τον ορισμό αντικειμένου, πριν φτιάξουμε κάποιο αντικείμενο), να κληρονομεί από άλλες κλάσεις με διαδοχική σειρά. Ακόμα και αν μια από αυτές τις κλάσεις ήδη κληρονομεί από μια άλλη που επίσης έχουμε στη σειρά. δεν μας ενοχλεί. Απαραίτητα τα ονόματα που δίνουμε μετά το ΩΣ πρέπει να είναι κλάσεις (το ελέγχει ο διερμηνευτής).
Πχ το
Κλάση Α ως Β ως Γ ως Δ {
}

Θα βάλει τον ορισμό του Δ πριν του Γ, του Γ πριν του Β, του Β πριν του Α και τέλος θα βάλει το Α. Αν τα Δ, Β, Γ έχουν κατασκευαστές (μεθόδους) τότε δεν θα χρησιμοποιηθούν. Ισχύει δηλαδή μόνο ο κατασκευαστής της Α (αν έχουμε βάλει).

2. Σε σχέση με το συνδυασμό αντικειμένων μπήκε ένας τελεστής Με
Στο παράδειγμα το Α είναι ο συνδυασμός του Β(10) όπου το 10 πάει στον κατασκευαστή της κλάσης Β και του Γ(30) όπου ομοίως το 30 πάει στο κατασκευαστή της κλάσης Γ. Εδώ έχουμε κάτι σαν Mixins. Επίσης όπου κλάσεις μπορούμε να έχουμε άλλα αντικείμενα ή οποιαδήποτε έκφραση επιστρέφει ομάδα (αντικείμενο)
Α= Β(10) Με Γ(30)

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


Στο blog υπάρχει παράδειγμα με ιεραρχία Ζώο, Κατοικίδιο, Σκύλος, Γάτα, Πουλί

Παράθεση
Κλάση Ζώο {

}
Κλάση Κατοικίδιο ως Ζώο {

}
Κλάση Σκύλος ως Κατοικίδιο {

}
Κλάση Γάτα ως Κατοικίδιο {

}
Κλάση Πουλί ως Κατοικίδιο {

}

bugman

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

Και στα δυο παραδείγματα υπάρχει η μέθοδος Διαγραφή. Στα επώνυμα πρέπει να κληθεί προγραμματιστικά (εδώ με την Καθαρό Β, Δ) ενώ στους δείκτες και σε ομάδες που είναι κλειστές σε πίνακες ή λίστες έχουμε αυτόματη ενεργοποίηση, όταν κανένας δείκτης δεν κρατάει το αντικείμενο.

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

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

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


Τμήμα ΧρήσηΕπώνυμωνΟμάδων {
   Κλάση Άλφα {
   ιδιωτικό:
      Πίνακας α()
   δημόσιο:
      Τμήμα άλλαξεΑυτό (&Λ ως Άλφα) {
         Κ=Λ.α()
         Κ+=10
         Τύπωσε Τύπος$(Κ)
      }
      Τμήμα Δείξε {
         Τύπωσε Αυτό.α()
      }
      Διαγραφή {
         Τύπωσε "Άλφα τύπος αντικειμένου διαγράφτηκε"
      }
   Κλάση:
      Τμήμα Άλφα (ν) {
         Πίνακας .α(10)=ν
      }
   }
   Β=Άλφα(3)
   Δ=Άλφα(6)
   Β.Δείξε
   Δ.Δείξε

   Β.άλλαξεΑυτό &Β
   Β.άλλαξεΑυτό &Δ
   Β.Δείξε
   Δ.Δείξε

   Καθαρό Β, Δ
}
ΧρήσηΕπώνυμωνΟμάδων

Τμήμα ΧρήσηΔεικτώνΣεΟμάδες {
   Κλάση Άλφα {
   ιδιωτικό:
      Πίνακας α()
   δημόσιο:
      Τμήμα άλλαξεΑυτό (Λ ως *Άλφα) {
         Κ=Λ=>α()
         Κ+=10
         Τύπωσε Τύπος$(Κ)
      }
      Τμήμα Δείξε {
         Τύπωσε Αυτό.α()
      }
      Διαγραφή {
         Τύπωσε "Άλφα τύπος αντικειμένου διαγράφτηκε"
      }
   Κλάση:
      Τμήμα Άλφα (ν) {
         Πίνακας .α(10)=ν
      }
   }
   
   Β->Άλφα(3)
   Δ->Άλφα(6)
   Β=>Δείξε
   Δ=>Δείξε
   Β=>άλλαξεΑυτό Β
   Β=>άλλαξεΑυτό Δ
   Β=>Δείξε
   Δ=>Δείξε
}
ΧρήσηΔεικτώνΣεΟμάδες






bugman

Η Μ2000 ως σύγχρονη γλώσσα έχει δυνατότητα χρήσης λιστών με ευφυή τρόπο.

Το παρακάτω παράδειγμα περιέχει μια συνάρτηση που παίρνει δυο λίστες και βγάζει τους θετικούς αριθμούς σε μια νέα λίστα.

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

Στο πρόγραμμα το μ είναι Επαναλήπτης, και παράγεται από την Κάθε() (παίρνει παραμέτρους αλλά εδώ δεν έδωσα, θέλω όλα τα στοιχεία). Τα α και β είναι δείκτες στα αντικείμενα αυτά. Το OXI ή NOT γράφεται και σαν ΔΕΝ. Η γλώσσα έχει εντολές και στα αγγλικά. Δείτε ότι στην Ενώ και στην Αν έχω χρησιμοποιήσει τις μορφές χωρίς αγκύλες. Υπάρχουν και τα ισοδύναμα με αγκύλες. Η τελευταία γραμμή του κώδικα χρησιμοποιεί ανώνυμες ουρές. Υπάρχουν ακόμα ανώνυμες λίστες, πίνακες, σωροί τιμών και συναρτήσεις λάμδα. Πχ το Τύπωσε λάμδα (χ)->{=χ*χ}(3)=9 δίνει αληθές. Στη Μ2000 οι λάμδα συναρτήσεις μπορούν να έχουν πολλές γραμμές. Στην python δεν μπορούν να γραφτούν τέτοιες δομές γιατί υπάρχει θέμα σύνταξης!


Παράθεσηα=Ουρά:= 20, -45, -3, 100, 4, 2, 5
β=Ουρά:= 4, 100, 3, -20, 4, -3, 100
Συνάρτηση Θετική_Ένωση(α ως ουρά, β ως ουρά) {
   Αποτέλεσμα=Ουρά
   μ=Κάθε(α)
   Ενώ μ
      στοιχείο=εκφρ(μ)
      Αν στοιχείο>0 και υπάρχει(β,στοιχείο) και δεν υπάρχει(Αποτέλεσμα, στοιχείο) Τότε
         Προσθήκη Αποτέλεσμα, στοιχείο
      Τέλος Αν
   Τέλος Ενώ
   =Αποτέλεσμα
}
Τύπωσε Θετική_Ένωση(α, β)  ' δίνει 100 4
Τύπωσε Θετική_Ένωση((Ουρά:=1,2,3,11,2,4),(Ουρά:=3,4,5))    ' δίνει 3 4

bugman

#93
Όλοι γνωρίζουν ότι η αλλαγή τιμής δυο μεταβλητών γίνεται με χρήση μιας τρίτης μεταβλητής ή με πρόσθεση/αφαίρεση. Η δεύτερη περίπτωση έχει το πρόβλημα να βγει ο αριθμός εκτός ορίων, βάσει τύπου.
Υπάρχει ένας ακόμα τρόπος, αν οι αριθμοί είναι 32bit χωρίς πρόσημο με τρεις Xor. Η
Xor στην Μ2000 λέγεται στα ελληνικά ΑΠΟ, όπου  Αληθής Από Ψευδής δίνει Αληθής, και το  Ψευδής από Αληθής δίνει Αληθής ενώ αν έχουμε όμοιες συνθήκες δίνει Ψευδής, δηλαδή Αληθής Από Αληθής δίνει Ψευδής και Ψευδής Από Ψευδής δίνει Ψευδής .
Εκτός από τα ΌΧΙ (ΔΕΝ), ΚΑΙ, Η και ΑΠΟ, για χρήση με λογικές μεταβλητές, υπάρχουν οι αντίστοιχες δυαδικές συναρτήσεις όπου εφαρμόζονται οι "πύλες" σε bit (δυαδικά ψηφία). Εδώ θα χρησιμοποιήσουμε την Δυαδικό.Από(α, β) όπου τα α και β είναι αριθμητικές τιμές. Για την Μ2000 η επιστροφή της συνάρτησης είναι τύπου Λογιστικό αλλά μόνο οι τιμές από 0x0 έως 0xFFFFFFFF ή σε δεκαδικό σύστημα από 0 έως 4294967295. Μπορούμε να δώσουμε ότι τύπο θέλουμε και θα γίνει αυτόματα προσαρμογή στο τύπο που δουλεύει (Λογιστικό ή Currency).

Εδώ δεν έχουμε πρόβλημα υπερχείλισης. Όλα τα bit χρησιμοποιούνται από την πύλη Xor, το καθένα από τον πρώτο αριθμό με το αντίστοιχο από το δεύτερο, χωρίς να μας ενδιαφέρει τι έχει το διπλανό του.

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

Α=10
Β=31
Τύπωσε Α=10, Β=31
Α=Δυαδικό.Από(Α, Β)
Β=Δυαδικό.Από(Α, Β)
Α=Δυαδικό.Από(Α, Β)
Τύπωσε Α=31, Β=10

Αν θέλουμε να δουλέψουμε με αριθμούς με πρόσημο (32bit), τότε πρέπει να τους κάνουμε αναγωγή σε ακέραιους χωρίς πρόσημο. Και οι δυο αριθμοί πρέπει να δίνουν τα ίδια bit. Η συνάρτηση Δυαδικό.Ακέραιο() παίρνει έναν αριθμό με πρόσημο και δίνει τον ανάλογο χωρίς πρόσημο όπου αποθηκεύεται με ίδια bits. Η ανάποδη συνάρτηση είναι η Ακέραιο.Δυαδικό() η οποία παίρνει ένα αριθμό χωρίς πρόσημο και τον διαβάζει σαν αριθμό με πρόσημο με τα ίδια bits.

Α=Δυαδικό.Ακέραιο(-10)
Β=Δυαδικό.Ακέραιο(-45)
Α=Δυαδικό.Από(Α, Β)
Β=Δυαδικό.Από(Α, Β)
Α=Δυαδικό.Από(Α, Β)
Τύπωσε Ακέραιο.Δυαδικό(Α)=-45, Ακέραιο.Δυαδικό(Β)=-10

bugman

#94
Εχω ανεβάσει στο blog δυο μοτίβα (patterns) του αντικειμενοστραφή προγραμματισμού. Με αγγλικές εντολές. Θα τα γράψω και με ελληνικές στο άρθρο που γράφω γενικά για τον αντικειμενοστραφή προγραμματισμό στη Μ2000.
Πρώτο Παράδειγμα, Singleton Pattern.
Το πρώτο παράδειγμα δείχνει πώς γίνεται να φτιάχνουμε μια μοναδική παρουσία αντικειμένου (instance). Όποιο αντικείμενο και να δημιουργήσσυμε θα δώσει το ίδιο, ακόμα και αν το αντιγράψουμε!
Singleton Pattern
Δεύτερο Παράδειγμα, Factory Method Pattern.
Εδώ είναι μια πιο προχωρημένη περίπτωση. Ένα αντικείμενο διαχειρίζεται άλλα αντικείμενα, και παράγεται από δυο άλλα, δυο μέρη. Το ένα μέρος έχει τη περισσότερη λογική αλλά δεν γνωρίζει τα αντικείμενα. Η γνώση των αντικειμένων γίνεται από το δεύτερο μέρος. Τα δυο μέρη παράγουν ένα αντικείμενο όπου το δεύτερο μέρος αλλάζει κενές μεθόδους με συγκεκριμένες μεθόδους. Το πρώτο μέρος κρατάει λίστα αντικειμένων, βάσει ενός βασικού αντικειμένου. Το δεύτερο μέρος χρησιμοποιεί αντικείμενα που κληρονομούν από το βασικό αντικείμενο. Για ευκολία στο παράδειγμα έχουμε πολλαπλή κληρονομικότητα, δηλαδή κάθε τελικό αντικείμενο που θα μπει στη λίστα κληρονομεί από δύο άλλα. Το δεύτερο χρειάζεται για να προσθέσουμε λογική για το παράδειγμα.
Factory Method Pattern

Κάποτε θα φτάσει η πληροφική στο σχολείο να ασχολείται και με τα design patterns των αντικειμένων!

bugman

#95
Ανέβασα όλα τα παρακάτω μοτίβα, με αγγλικές εντολές της Μ2000. Θα τα γράψω με ελληνικές, αλλά θέλω ιδέες για την μετάφραση των όρων των μοτίβων.

Creational Patterns
Singleton Pattern
Factory Method Pattern
Factory Pattern
Abstract Factory Pattern
Builder Pattern
Prototype Pattern
Pool Pattern

Behavioral Patterns
Memento Pattern
Mediator Pattern
Observer Pattern
Null Object Pattern
Visitor Pattern
Interpreter Pattern
Iterator Pattern
Strategy Pattern
Command Pattern
State Pattern
Template Method Pattern
Chain of Responsibility Pattern

Structural Patterns
Adapter Pattern
Bridge Pattern
Composite Pattern
Decorator Pattern
Flyweight Pattern
Facade Pattern
Proxy Pattern


George Eco

Γιώργο καλησπέρα, να σε ρωτήσω κάτι; Υπό ποια EULA είναι ανοικτού κώδικα η Μ2000; Εννοώ την έχεις υπό το GNU GPL, LGPL, MIT License, CCBYSA;
Δυσκολεύομαι να το βρω αυτό οπότε είπα, δε ρωτάω κατ' ευθείαν το δημιουργό λέω 'γω;

bugman

#97
https://github.com/M2000Interpreter/Version9/blob/master/LICENSE

GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Και το dll είναι διαθέσιμο σαν ActiveX αντικείμενο, δηλαδή μπορεί να φορτωθεί από άλλη γλώσσα, ενώ υπάρχουν όλα τα απαραίτητα ώστε να συγχωνευτεί σε άλλο πρόγραμμα (δηλαδή να μπει το αντικείμενο στο κώδικα και όχι σαν εξωτερικό dll).
Ήδη το m2000.exe φορτώνει τη γλώσσα με όμοιο τρόπο.

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

George Eco


bugman

Αρχίζει το ενδιαφέρον των ξένων για την Μ2000 να γίνεται πιο σοβαρό. Ήδη ένας Ολλανδός κατέβασε το κώδικα της γλώσσας και κατάφερε να την βάλει στο IDE της VB6 και να δουλέψει.

https://www.vbforums.com/showthread.php?855011-Github-For-M2000-Interpreter&p=5487401&viewfull=1#post5487401

Τώρα που είναι καλοκαίρι είναι ευκαιρία για τους εκπαιδευτικούς να δουν την Μ2000.
Γιώργος Καρράς

bugman

Ανέβασα το άρθρο (115 σελίδες) Αντικειμενοστραφής Προγραμματισμός με τη Μ2000.

Περιλαμβάνει μια εισαγωγή στη Μ2000 (όση χρειάζεται για να διαβάσει κανείς όλα τα παραδείγματα) και 26 μοτίβα για τη χρήση των αντικειμένων με ελληνικά παραδείγματα και κείμενο που επεξηγεί τα παραδείγματα. Το pdf ανοίγει στο LibreOffice κανονικά, και από εκεί καλύτερα κάποιος να αντιγράψει το κώδικα, για να διατηρούνται οι εσοχές.

Όλα τα παραδείγματα έχουν ελεγχθεί με την έκδοση 9.9 αναθεώρηση 51.


Εδώ δεν υπάρχουν αφηρημένες γνώσεις περί αντικειμένων, υπάρχουν κανονικά παραδείγματα που δείχνουν την ιδέα για το κάθε μοτίβο (OOP Design Pattern) με κατανοητό κώδικα, με ονόματα επίσης κατανοητά, όλα στα ελληνικά (διατηρώ τα Αγγλικά ονόματα στα μοτίβα αλλά έχω και προτεινόμενα Ελληνικά).

Βέβαια θα ήθελα την γνώμη σας για το άρθρο αυτό.
ΓΚ

Υ.Γ. Ο σύνδεσμος υπάρχει στην υπογραφή!

bugman

Ανανεώθηκε το άρθρο Αντικειμενοστραφής Προγραμματισμός με τη Μ2000
(όποιος βρει κάτι να θέλει αλλαγή ας την κάνει πάνω στο κείμενο με κίτρινο χρώμα και ας το στείλει με μήνυμα)

Μπήκε και η GNU FDL v1.3   ως άδεια για το άρθρο. Είναι η ίδια άδεια που λειτουργεί η Βικιπέδια.

bugman

Ανανεώθηκε δεύτερη φορά το άρθρο "Αντικειμενοστραφής Προγραμματισμός στη Μ2000",  μπήκε περισσότερο χρώμα, μπήκε αρίθμηση στα προγράμματα (συνολικά 81 προγράμματα, με το πρώτο πρόγραμμα το Κενό Πρόγραμμα).
Διακοπές Τέλος!
Καλό Χειμώνα!
Γ.Κ.
Σύνδεσμος στο pdf (ανοίγει σαν έγγραφο κειμένου σε libreoffice, για αλλαγές και αντιγραφή προγραμμάτων) υπάρχει στην υπογραφή.



bugman

Βίντεο χωρίς ήχο, περίπου 30 λεπτών, δείχνει το περιβάλλον Μ2000, με εκτέλεση κάποιων προγραμμάτων. Έχει ανάλυση 1280Χ1024.

https://youtu.be/I3BwLnxH9e8


bugman

Ανέβηκε η 10η έκδοση της γλώσσας, με σημαντικές αναβαθμίσεις στα γραφικά.
Επίσης μπήκε και το // ως αρχή σημείωσης (υπάρχουν τα \ και ')

Κυριακή 18 Οκτ 2020, κάνω παρουσίαση της Μ2000 στο CIE2020 (μέσω ZOOM, από το γραφείο μου). http://events.di.ionio.gr/cie/images/documents20/CIE2020_program.pdf
Μπορείτε να βρείτε το σύνδεσμο. Στις 11:30 Αίθουσα Α.
ΓΚ

bugman

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

Για όσους ασχολούνται με την M2000, όχι μόνο ως εκπαιδευτικό εργαλείο, αλλά και για χρήσιμες άλλες δουλειές:

Ανέβασα ένα ωραίο παράδειγμα (κάνε click εδώ), δουλεύει στην Αναθεώρηση 4, Έκδοση 10 (κατέβασέ την από εδώ). Σε αυτό το παράδειγμα χρησιμοποιώ την εκτύπωση, σε pdf που γίνεται μέσω του εκτυπωτή (βγάζει pdf ασυμπίεστο). Στην αναθεώρηση 4 έκανα διορθώσεις στο τρόπο χειρισμού (έγινε έλεγχος στα Windows 10).

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

Για να ανοίξουμε ένα αρχείο του Excel, μπορούμε αν έχουμε το Excel να ανοίξουμε ένα αντικείμενο (το πρόγραμμα) και να χειριστούμε το αντικείμενο, κάνοντας αυτό που λέμε office automation. Στο παράδειγμα δεν κάνουμε αυτό! Επειδή δεν έχω το MS Office στον υπολογιστή μου, έχω το LibreOffice, κάνω κάτι άλλο: Ανοίγω το excel αρχείο ως βάση δεδομένων. Πώς γίνεται αυτό; Υπάρχει ένα σύστημα που λέγεται ODBC, ή Open Database Connectivity. Μέσω λοιπόν του οδηγού (έτσι τον λέμε) ODBC θα ανοίξω το αρχείο parts.xlsx.
Υπάρχει ένα θέμα με το αρχείο αυτό: Σε κάποιες στήλες οι τιμές είναι κείμενο ή αριθμοί. Μια βάση δεδομένων ορίζει σε στήλες (πεδία) έναν μόνο τύπο. Οπότε το έχουν προβλέψει αυτό οι "μάστορες" και στο λεγόμενο connection string (αλφαριθμητικό σύνδεσης) που δίνουμε ως παράμετρο για την ανάγνωση του αρχείου προσθέτουμε τον όρο/εντολή που επιτρέπει την αλλαγή σε κείμενο των στηλών με μπερδεμένους τύπους!

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

Υπάρχουν πολλά connection strings ανάλογα τι θέλουμε να πετύχουμε, για το excel αρχείο. Στο συγκεκριμένο αρχείο δεν έχουμε τύπους, όλα είναι δεδομένα εξαγόμενα από το Inventor, το CAD πρόγραμμα, και αποτελούν τα μέρη (parts) μιας κατασκευής.

Στο πρόγραμμα φαίνεται πως κάνουμε αναζητήσεις. Ενώ υπάρχουν και σύνθετα SQL ερωτήματα εδώ δίνουμε ότι πιο απλό και κάνουμε τις ομαδοποιήσεις μετά με κώδικα της Μ2000.

Το δεύτερο πρόγραμμα διαβάζει το αρχείο και εκτυπώνει σε Α4, σε οποιοδήποτε εκτυπωτή. Υπάρχει ένα αρχείο zip με την εξαγωγή σε pdf (19 σελίδες).

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

bugman

Θα έπρεπε να υπήρχε ένα μάθημα Computer Graphics, στο λύκειο. Υπάρχουν πολλά θέματα για να ασχοληθεί κανείς!
Έτυχε να ασχοληθώ με την καμπύλη Πεάνο, η οποία γεμίζει το χώρο (μια επιφάνεια) με μια μονοκοντυλιά.

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

Σχετικά με το θέμα υπάρχει στο Blog μου, καθώς και εδώ:
Υλοποίηση της βασικής καμπύλης: http://rosettacode.org/wiki/Peano_curve
Και εδώ: https://en.wikipedia.org/wiki/Peano_curve (υπάρχει και σε ελληνική γλώσσα)

Δείτε τη συνημμένη εικόνα (δημιούργημα με πρόγραμμα σε Μ2000)

bugman

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

dpa2006

Καλησπέρα και ευχαριστούμε! :)
Αφού το διαβάσουμε να κάμουμε σχόλια επί του κειμένου...?
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

bugman

Πρόσθεσα και το 5ο κεφάλαιο μόλις τώρα! Δώδεκα σελίδες!
Εννοείται για τα σχόλια, να γίνουν!

bugman

Προστέθηκαν 2 κεφάλαια ακόμα, συνολικά 7 κεφάλαια!
Περιμένω τα σχόλια!

dpa2006

Καλησπέρα και χρόνια πολλά.
Ευχαριστώ για την απάντηση! :)
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

bugman

@dpa2006,
Το βιβλίο έφτασε στα 9 κεφάλαια. Το 9ο έφτασε τις 19 σελίδες.
Μαθαίνω Προγραμματισμό
Το κατάβεσες;

dpa2006

Παράθεση από: bugman στις 09 Ιαν 2021, 07:56:23 ΜΜ
@dpa2006,
Το βιβλίο έφτασε στα 9 κεφάλαια. Το 9ο έφτασε τις 19 σελίδες.
Μαθαίνω Προγραμματισμό
Το κατάβεσες;
Ναι μόλιις τώρα...!!!
Καλή Χρονιά!
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

oldBugman

Η Μ2000 είναι μια γλώσσα που τρέχει σε ένα δικό της περιβάλλον (μια εφαρμογή). Φτιάχτηκε για εκπαιδευτικούς σκοπούς. Τα πλεονεκτήματα της γλώσσας είναι:

Εύκολη εγκατάσταση χωρίς εξαρτήσεις, από Xp μέχρι και Windows 10. Τρέχει και σε Wine σε Linux. Σε κάθε λειτουργικό η εμφάνιση του περιβάλλοντος, τόσο της δικής του κονσόλας όσο και της γραφικής διεπαφής είναι ίδια.

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

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

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


Μπορούμε να έχουμε απλά προγράμματα με αριθμούς γραμμών και GOTO (ΠΡΟΣ στα ελληνικά). Μπορούμε να έχουμε προγράμματα με διαδικασίες (SUB ή ΡΟΥΤΙΝΑ) οι οποίες βλέπουν τις μεταβλητές του τμήματος που υπάρχουν και μπορούν να έχουν τοπικές μεταβλητές (Όπως στη BBC BASIC, αλλά και στη C, C++). Μπορούμε να έχουμε προγράμματα με Τμήματα (MODULES) και Συναρτήσεις (FUNCTIONS), στα οποία να υπάρχουν άλλα τμήματα και συναρτήσεις, και όλες οι μεταβλητές να είναι τοπικές εξ ορισμού (Ένα τμήμα πχ ΠΡΟΓΡΑΜΜΑ και μερικά τμήματα εσωτερικά δουλεύουν όπως στη ΓΛΩΣΣΑ δηλαδή δεν υπάρχει θέαση μεταβλητών από ένα εσωτερικό τμήμα στο ΠΡΟΓΡΑΜΜΑ).

Η γλώσσα Μ2000 περιλαμβάνει πίνακες όπως η ΓΛΩΣΣΑ αλλά και τους αυτόματους πίνακες (Tuple) όπως πχ το (1,2,3,4) και το (1,) με ένα στοιχείο και το (,) ως μηδενικού μήκους πίνακας, και το ((1,2),(3,4)) ως πίνακας με δυο πίνακες ως στοιχεία. Υπάρχουν έτοιμες συναρτήσεις τύπου LINQ.

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

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

Προγραμματισμός με γεγονότα. Εκτός από το αντικείμενο γεγονός (λίστα συναρτησεων) που είναι ανάλογο του delegate της C#, οι ομάδες μπορούν να έχουν γεγονότα καθώς και διάφορα αντικείμενα COM που συνδέουμε στη γλώσσα κατά την εκτέλεση (ένα παράδειγμα γι' αυτό είναι η χρήση του αντικειμένου SAPI της Microsoft για να διαβάζουμε κείμενα, και με τη χρήση γεγονότων μπορούμε να εμφανίζουμε λέξη προς λέξη το κείμενο καθώς αυτό ακούγεται). Τέλος γεγονότα χρηιμοποιούμε και με το παραθυρικό περιβάλλον χρήστη. Το παραθυρικό περιβάλλον δημιουργείται πολύ εύκολα, με απλό κώδικα, με στοιχεία διάφορων τύπων όπως Button, Listbox, Editbox κ.α.

Προγραμματισμός με νήματα. Η γλώσσα υποστηρίζει παράλληλη εκτέλεση, είτε διαδοχική είτε ταυτόχρονη (με αλλαγές νήματος ανά εντολή ή μπλοκ εντολών). Μπορούμε να συνδυάσουμε προγραμματισμό με γεγονότα μαζί με νήματα και με αντικείμενα. Γενικά όλα συνδυάζονται στη Μ2000.

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

Εκτός από τα γραφικά και τα πολυμέσα η Μ2000 χρησιμοποιεί και βάσεις δεδομένων (τις δημιουργεί κιόλας).

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

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

Οι προτάσεις περί python, javascript και ότι άλλο γενικού σκοπού (ως γλώσσες παραγωγής, ή γλώσσες τύπου κόλλα - glue), έχουν πολλά μειονεκτήματα για το σχολείο. Κύριο είναι ότι οι γλώσσες αυτές καλό είναι να διδάσκονται από καθηγητές πανεπιστημίου σε φοιτητές. Δεν κάνουν για νέες ηλικίες. Το πλεονέκτημα με τη Μ2000 είναι ότι αυτή η γλώσσα θα χρησιμοποιηθεί για το σχολείο, οπότε οποιαδήποτε παρανόηση δεν θα "δηλητηριάσει" τη σκέψη του φοιτητή (στη τριτοβάθμια εκπαίδευση).

Στο τεχνικό - επαγγελματικό λύκειο ασφαλώς η χρήση γλωσσών όπως python, c, c++, javascript επιβάλλεται ως σκοπός της επαγγελματικής μόρφωσης. Στο γενικό λύκειο όμως αυτές οι γλώσσες δεν κάνουν και για το λόγο αυτό έχει ως σήμερα χρησιμοποιηθεί η ΓΛΩΣΣΑ.

Έγραψα τη Μ2000 γιατί δεν υπήρχε κάτι ανάλογο, με την ολοκλήρωση της Μ2000 (να έχει δομές, αντικείμενα, παράθυρα, γεγονότα, νήματα) και να τρέχει δείχνοντας το κώδικα καθώς εκτλείται σε μια φόρμα έλεγχος, με δυνατότητα βηματικής εκτέλεσης ακόμα και με νήματα.


Ρίξτε μια ματιά στη γλώσσα Μ2000, αυτό το καλοκαίρι. Διαβάστε τα βιβλία της (όλα είναι δωρεάν σε pdf που ανοίγουν και ως odf - στο openoffice). Οι γλώσσες, οι"επαγγελματικές", δεν κάνουν για τη γενική εκπαίδευση. Αυτές μπορούν ίσως να καλυφθούν σε προαιρετικά μαθήματα όπως η c++ του Arduino (ελάχιστα στοιχεία της c++ χρειάζονται για εφαρμογές στο Arduino).






dpa2006

Bugman καλημέρα,
λόγω υποχρεώσεων δεν μπόρεσα να διαβάσω το βιβλίο,όμως το ξεφύλλισα...
Με τη λήξη των μαθημάτων θα αρχίσω να το διαβάζω.
Σε γενικές γραμμές δεν έχω να παρατηρήσω κάτι.
Ως προς το θέμα της γραφής και του λόγου δεν είμαι ειδικός,ένας φιλόλογος θα σε βοηθούσε περισσότερο.
Θα ήθελα να δω να κυκλοφορεί το βιβλίο σε ηλεκτρονική και hard copy μορφή.
Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

oldBugman

#116
Προς το παρόν υπάρχουν τρία βιβλία εδώ (περιλαμβάνει και το Μαθαίνω Προγραμματισμό)
Ηλεκτρονική μορφή από το eBooks4Greeks

Ανέβασα σήμερα μια νέα έκδοση του βιβλίου Μαθαίνω Προγραμματισμό (αλλαγές στα δυο πρώτα κεφάλαια, για μερικά συντακτικά λάθη, επίσης μπήκε και η έννοια "δένδρο αποφάσεων").

dpa2006

Computer science (abbreviated CS or CompSci) is the scientific and practical approach to computation and its applications. It is the systematic study of the feasibility, structure, expression, and mechanization of the methodical processes (or algorithms) that underlie the acquisition, representation, processing, storage, communication of, and access to information, whether such information is encoded in bits and bytes in a computer memory or transcribed engines and protein structures in a human cell.source:http://en.wikipedia.org/wiki/Computer_science

oldBugman

Στα αγγλικά λέγεται απλά Ranking. Στα ελληνικά η λέξη αποδίδεται ως κατάταξη αλλά έχει περισσότερο νόημα αν το πούμε αριθμητική αξιολόγηση.

Στο https://en.wikipedia.org/wiki/Ranking της Wikipedia δεν υπάρχει ελληνική απόδοση του κειμένου (κανένας μαθηματικός ή πληροφορικός δεν φιλοτιμήθηκε ακόμα να το συμπληρώσει)

Στη http://rosettacode.org/wiki/Ranking_methods υπάρχουν προγράμματα σε διάφορες γλώσσες που δίνουν το παρακάτω αποτέλεσμα. Δείτε ότι αλλάζει μόνο ο αριθμός δίπλα σε κάθε γραμμή με ζευγάρια τιμή - όνομα.

Θα μπορούσε να γίνει με ΓΛΩΣΣΑ αλλά θέλει κόπο!

Standard ranking:
    1 Solomon (44)
    2 Jason (42)
    2 Errol (42)
    4 Garry (41)
    4 Bernard (41)
    4 Barry (41)
    7 Stephen (39)
Modified ranking:
    1 Solomon (44)
    3 Jason (42)
    3 Errol (42)
    6 Garry (41)
    6 Bernard (41)
    6 Barry (41)
    7 Stephen (39)
Dense ranking:
    1 Solomon (44)
    2 Jason (42)
    2 Errol (42)
    4 Garry (41)
    4 Bernard (41)
    4 Barry (41)
    7 Stephen (39)
Ordinal ranking:
    1 Solomon (44)
    2 Jason (42)
    3 Errol (42)
    4 Garry (41)
    5 Bernard (41)
    6 Barry (41)
    7 Stephen (39)
Fractional ranking:
  1.0 Solomon (44)
  2.5 Jason (42)
  2.5 Errol (42)
  5.0 Garry (41)
  5.0 Bernard (41)
  5.0 Barry (41)
  7.0 Stephen (39)