Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Συγνώμη για τη καθυστέρηση, αλλά έγραφα κώδικα!

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

Υποχρεωτικά για να μπει κανείς στο θέμα πρέπει να μάθει τα βασικά και αυτά είναι εδώ επιγραμματικά, και για προχωρημένους. 

 

 

1. Ένα τμήμα μπορεί να υπάρχει ως ορισμός σε ένα άλλο τμήμα και να είναι σε αναμονή (έχουμε Interpreter εδώ, ο ορισμός πρέπει τρέξει για να δημιουργηθεί το τμήμα).

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

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

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

5. Τμήματα μπορούν να έχουν άλλα τμήματα και συναρτήσεις, και το ίδιο και οι συναρτήσεις μπορούν να έχουν άλλα τμήματα και συναρτήσεις. Τι σημαίνει να έχουν όμως; Σημαίνει το 1, 2 και 3, δηλαδή να έχουν στο κώδικά τους τον ορισμό τμημάτων, να μπορούν να τα τοποθετήσουν σε θέση για εκτέλεση και να τα εκτελέσουν ή  να τα καλέσουν αν προτιμάς.

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

7. Οι ρουτίνες, οι οποίες μπορούν να έχουν και οι συναρτήσεις και τα τμήματα είναι μέρη τους και βλέπουν τις μεταβλητές τους. Δηλαδή μια ρουτίνα σε ένα τμήμα μπορεί να βλέπει σαν δική του μεταβλητή μια μεταβλητή του τμήματος. Οι ρουτίνες όμως δεν υπάρχουν σε τρία μέρη. Δεν υπάρχει το 2, δηλαδή οι ρουτίνες δεν αποθηκεύονται σε λίστα κλήσεων, και ο διερμηνευτής ξέρει για κάθε "αντικείμενο εκτέλεσης" που θα βρει το πρωτότυπο κώδικα για να κάνει αναζήτηση από το τέλος. (και για το λόγο αυτό οι ρουτίνες είναι στο τέλος). Με το που βρίσκει το κώδικα...κρατάει τον υπάρχον κώδικα προσωρινά, και τρέχει αυτόν της ρουτίνας. Αν έχουμε διαδοχικά κλήσεις ρουτινών (έχουν και αναδρομή) τότε όλη αυτή η αντράλα γίνεται τοπικά, και παράλληλα ,μπορούν να γίνονται αλλαγές σε μεταβλητές του τμήματος. Το τμήμα δεν είναι αντικείμενο, γιατί ό,τι έχει γραμμένο θα χαθεί μόλις τερματίσει η εκτέλεσή του. Υπάρχει όμως αντικείμενο εκτέλεσης. Οι ρουτίνες δεν έχουν, είναι ελαφριές εκδόσεις, ή απλά τμήματα κώδικα. Όμως έχουν δυο ωραία χαρακτηριστικά, το ένα είναι ότι έχουν την ίδια ιδιότητα με το τμήμα, να σβήνουν ότι δημιουργούν στο πέρας, και επίσης ότι στον ορισμό τους αν θέλουμε γράφουμε τις πρώτες παραμέτρους π.χ. Ρουτίνα Αλφα1(Χ,Υ)  τα Χ και Υ θα γίνουν Διάβασε Νέο Χ, Υ δηλαδή θα σκιάσουν τυχόν Χ και Υ του τμήματος αλλά ότι άλλο έχει το τμήμα θα το βλέπουν κανονικά (έτσι βλέπουν και άλλες ρουτίνες ακόμα και το όνομά τους). Οι ρουτίνες καλούνται με όλα τα γράμματα σημαντικά (ενώ τμήματα και συναρτήσεις αποθηκεύονται με ονόματα στα κεφαλαία και όταν χρησιμοποιούμε μια λέξη με μικρά και τόνους η Μ2000 τα κάνει κεφαλαία χωρίς τόνους την στιγμή της κλήσης. αλλά αυτό δεν γίνεται για τις ρουτίνες, επειδή αναζητούνται  κάθε φορά ως έχουν. Δεν βάζουμε ορισμούς ρουτινών σε ρουτίνες αν και δεν θα υπήρχε πρόβλημα, αλλά ενδέχεται να μπερδέψουμε τη κατάσταση. Κάθε αποτυχία απλά τερματίζει το τμήμα και διαγράφει όλο το σωρό ή στοίβα επιστροφών (αφού ανήκει στο τμήμα/συνάρτηση).

 

8.Τα αντικείμενα στη Μ2000 είναι διάφορων ειδών αλλά εδώ θα αναφερθώ στο βασικό, αυτό που λέγεται Ομάδα. Πρώτα φτιάχτηκε η Ομάδα ή Group (αυτό είναι το όνομά της στα αγγλικά για τη Μ2000), ως μια ομαδοποίηση μεταβλητών, συναρτήσεων, και άλλων ομάδων φωλιασμένων. Κάθε στοιχείο της ομάδας είναι ξεχωριστό και υπάρχει ένα αντικείμενο που κρατάει τη λίστα των ξεχωριστών στοιχείων. Αν δώσουμε αυτό Ομάδα Βήτα {Χ, Υ} : Λίστα  τότε θα μας δείξει τρία πράγματα την ομάδα Βήτα και τα Βήτα,Χ και Βήτα.Υ Αυτό είναι το ανοικτό αντικείμενο. Μπορούμε να ορίσουμε ιδιωτικές και δημόσιες μεταβλητές και ότι άλλο βάζουμε στις ομάδες, Οπότε στην ουσία η λίστα θα δείξει ότι είναι δημόσιο. Το αντικείμενο δεν είναι δείκτης σε περιοχή με μεταβλητές, αλλά λίστα που λέει ποιες μεταβλητές είναι δικές του. Με αυτόν τον τρόπο δεν άλλαξε τίποτα στο βασικό σύστημα της γλώσσας, στο πέρας εκτέλεσης θα σβηστούν όλα, και αν στο τμήμα Άλφα έχουμε τη Χ τότε αυτή είναι Άλφα.Χ ενώ το τμήμα έχει την Βήτα.Χ, Βήτα.Υ (δεν επιτρέπει ο διερμηνευτής να έχουμε ίδιο όνομα τμήματος με αυτό μιας ομάδας. Αν έχουμε δυο ομάδες Α και Β τότε το Α=Β κάνει συγχώνευση. Δηλαδή ότι είναι ίδιο στη λίστα αλλάζει τιμή, και αν το Β έχει επιπλέον στοιχεία τότε θα αποκτήσει αντίγραφα και το Α. Αν το Α έχει επιπλέον στοιχεία, δεν θα πειραχτούν. Οι ομάδες μπορούν να έχουν συναρτήσεις και τμήματα και αυτά να βλέπουν τις μεταβλητές/πίνακες και να τα αλλάζουν (όπως οι ρουτίνες στα τμήματα, αλλά τώρα το κάνουν τα τμήματα/συναρτήσεις που περιέχονται στις ομάδες). Περνάμε σε κλήσεις αν θέλουμε αντικείμενα με τη λίστα τους, ή ένα στοιχείο τους ή ακόμα μια συνάρτηση με αναφορά (προχωρημένο)...ή ακόμα και το Αυτό, δηλαδή αντίγραφο ή το &Αυτό με αναφορά στο ίδιο. Δηλαδή μέσα από ένα αντικείμενο μπορούμε να καλέσουμε μια συνάρτηση που μας δόθηκε με αναφορά ή υπάρχει επειδή είναι γενική, και να περάσουμε όλο το αντικείμενο. 

 

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

Τα αντικείμενα Ομάδα/Group δεν έχουν ειδικό τύπο, ο τύπος τους είναι γενικός..αν γράψουμε Τύπωσε Τύπος$(Α)  και το Α είναι ομάδα θα πάρουμε το Group (υπάρχει πράγματι κώδικας σε μια κλάση της Vb 6 που λέγεται Group, και αν θέλει κανείς μπορεί να το δει στο Git). Υπάρχει μια εντολή που λέγεται Κλάση και η οποία δημιουργεί μια συνάρτηση με αυτό το όνομα και η οποία δίνει ένα αντικείμενο όπως το περιγράφουμε σε αυτήν. Μεταβλητές εκτός από αλφαριθμητικές και αριθμητικές, η Μ2000 έχει την τύπου Έγγραφο  (αλφαριθμητικό με παραγράφους, είναι η βάση του ενσωματωμένου επεξεργαστή κειμένου), την τύπου Γεγονός, την τύπου Λάμδα, και αντικείμενα που δεν μπορούν να γραφτούν σε ομάδες όπως αυτά του γραφικού περιβάλλοντος, αλλά και άλλα όπως αντικείμενα COM (μπορούμε να έχουμε ένα αντικείμενο το Word για παράδειγμα), και σε αυτά τα δυο μπορούμε να ορίσουμε μεταβλητές συνδεδεμένες με ιδιότητες (αυτά γίνονται με late binding, δηλαδή χωρίς χρήση type library)

10. Ένα κλειστό αντικείμενο για να χρησιμοποιηθεί εσωτερικά, δηλαδή να αλλάξουμε τιμές, να καλέσουμε μια συνάρτηση ή ένα τμήμα του, ή να διαβάσουμε ένα πίνακα (όλα αυτά μπορεί να τα έχει), θα πρέπει να γίνει ανοικτό, και αυτό το κάνει αυτόματα ο διερμηνευτής.  Που σημαίνει ότι ο διερμηνευτής δουλεύει πάντα σε αντίγραφο, και μετά αποθηκεύει τις αλλαγές. Στα ανοικτά, επώνυμα αντικείμενα δεν χρειάζεται να το κάνει αυτό. Το άνοιγμα μπορεί να είναι στιγμιαίο ή να διαρκεί. Αν το Α(3) έχει μια ομάδα με μια συνάρτηση Άλφα() τότε το Τύπωσε Α(3).Άλφα() θα τρέξει την συνάρτηση. Μετά την τύπωσε όπως και πριν η Αλφα() δεν είχε θέση στην λίστα συναρτήσεων. Παρατηρούμε εδώ ότι η Μ2000 δεν δουλεύει με διευθύνσεις, τις συναρτήσεις τις βρίσκει σε μια λίστα που ότι μπαίνει τελευταίο χάνεται πρώτο, απλά έχει δυο λίστες, μία για συναρτήσεις-τμήματα και μια για μεταβλητές-πίνακες-αντικείμενα (ανοικτά σε μεταβλητές-κλειστά σε πίνακες).

11. Δεν έχω αναφέρει άλλα πράγματα όπως τα νήματα. Τα τμήματα και οι συναρτήσεις μπορούν να έχουν νήματα κώδικα που τρέχουν παράλληλα, ενώ βρίσκονται στο ίδιο όνομα χώρου (όπως η ρουτίνα) έχουν άλλο αντικείμενο εκτέλεσης, και για το λόγο αυτό τρέχουν παράλληλα. Κάθε αντικείμενο εκτέλεσης μπορεί να έχει στατικές μεταβλητές οι οποίες είναι απλές, (όχι αντικείμενα-πίνακες) και περιέχονται στο πατρικό αντικείμενο, και όλα αυτό στο πιο πάνω πατρικό. Η σημασία τους είναι όταν φτιάχνουμε ας πούμε δέκα νήματα ίδια, και κάθε νήμα καλεί μια συνάρτηση με στατικές μεταβλητές τότε για κάθε νήμα η συνάρτηση έχει διαφορετικό σετ στατικών, επειδή ανήκει (δες το βήμα 3 παραπάνω) σε άλλο αντικείμενο (απλά ο κώδικας που φέρει το αντικείμενο είναι ίδιος). Έτσι ένας ορισμός νήματος που θα παίξει δέκα φορές, θα φτιάξει δέκα νήματα, που το καθένα βλέπει τις μεταβλητές του τμήματος που το δημιούργησε μπορεί να έχει δικές του στατικές και όταν καλεί τμήματα και συναρτήσεις, αυτά να έχουν για εκείνο τις δικές του στατικές. Υπάρχουν εντολές για ένα  νήμα να εκτελεί εντολές σε άλλο!  Τα νήματα δεν έχουν όνομα αλλά χειριστή (handler). Και ο taskmanager είναι εσωτερικός στην Μ2000.

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

 

 

Δημοσ.

Ανάρτηση που δείχνει πως φτιάχνουμε κλάσεις από κλάσεις στη Μ2000 (σαν το extents της java)

http://georgekarras.blogspot.gr/2016/04/2000_18.html

 

Στη Μ2000 ο OOP προγραμματισμός είναι εύκολος γιατί τα αντικείμενα δουλεύουν με απλό τρόπο. Δεν υπάρχουν τύποι. Δεν περιμένουμε από την Μ2000 να μας πει "δεν έδωσες το σωστό τύπο", το λάθος θα το πάρουμε άμεσα στην εκτέλεση. Εν τέλει και όλες οι γλώσσες με τύπους, πάλι θέλουν έλεγχο για διάφορα σετ "τιμών εισόδου". Παρόλα αυτά αν θέλουμε κάνουμε ελέγχους. Υπάρχουν τρόποι, χωρίς να δημιουργηθεί λάθος. Όμως υπάρχει μια πρακτική που λέει ότι αν κάνουμε το παν για να αποφύγουμε λάθη τότε αφενός δεν έχουμε κάνει καλή δουλειά, άρα περιμένουμε λάθη, και αφετέρου η  λογική για την αποκατάσταση του λάθους μπορεί να έχει και αυτή λάθη..και είναι σίγουρο ότι δεν μπορεί να ελεγχθεί το ίδιο εύκολα με τα λάθη που θέλουμε να αποφύγουμε, αρχικά. Οι επιπτώσεις δε από σφάλμα σε απόφαση του τι κάνουμε σε σφάλμα είναι μεγάλες. Εντολές τύπου On Error (υπάρχει η Try {}  στη Μ2000) βοηθούν μόνο σε περιορισμένη χρήση. Μετά χάνουμε τη μπάλα!

 

 

 

 

Δημοσ.

Δεν έχω ασχοληθεί με socket. Όμως βρήκα κώδικα και σκέφτομαι να τον περάσω στη Μ2000 ώστε να είναι εσωτερικός και να δουλεύει με τα softawre νήματα της γλώσσας. Παρόμοιο έχω με τα pipes, αυλούς, όπου ασύγχρονα επικοινωνούν δυο εφαρμογές σε Μ2000 σε ένα δίκτυο (απλά πρέπει να ξέρουν το όνομα του αυλού που θα επικοινωνήσουν, χρησιμοποιώ μιας κατεύθυνσης αυλούς. οπότε για διπλή επικοινωνία πρέπει να υπάρχουν δυο αυλοί, αλλά το καλό είναι ότι κάθε αυλός "ακούει" όποιονδήποτε..έτσι φτιάχνεις client-server, όπου κάθε client έχει τον αυλό του και ο server έναν και κάθε client λέε στον server ποιος είναι ο δικός του, άρα το όλο σύστημα δουλεύει με γνωστοποίηση ενός μόνο Link.png Site: Namedpipe  ...

 

για το enconding δεν έχω κάποια ειδική ρουτίνα μετατροπής. μπορεί όμως κανείς να χρησιμοποιήσει το Api των Windows (έχω μια Declare στη Μ2000 που φτιάχνει αντικείμενα, φόρμες, στοιχεία φορμών και ακόμα συνδέει εξωτερικές συναρτήσεις Api (stdCall) και C  (cCall). Δεν έχουν ολοκληρωθεί στο μέρος που απαιτείται struct, θέλω να γράψω ένα stub object που θα γυρνάει την μνήμη στη κλήση του Api και θέλω να έχει ένα τρόπο η Μ2000 να επικοινωνεί με αυτό. Επίσης στα Com αντικείμενα (δημιουργεί και τέτοια η Declare στη Μ2000) δεν έχω φτιάξει το WithEvents αλλά έριξα σήμερα μια ματιά στο CreateEvent και περίπου ξέρω τι θα κάνω)

Δυστυχώς έχω άλλες δουλειές αυτή την εποχή και ήδη έχει πέσει η παραγωγή αναρτήσεων...στο blog...

 

Εξήγησέ μου τι εννοείς με το "χωρίς να την νοιάζει το encoding"...Δηλαδή να κάνει επικοινωνία "για τα πάντα όλα"; Ή μήπως βάσει πρωτόκολου ....το enconding είναι ένα και μοναδικό; Δεν ξέρω και αν θες γράψε ένα παράδειγμα μήπως το καταλάβω!

Δημοσ.

Εξήγησέ μου τι εννοείς με το "χωρίς να την νοιάζει το encoding"...Δηλαδή να κάνει επικοινωνία "για τα πάντα όλα"; Ή μήπως βάσει πρωτόκολου ....το enconding είναι ένα και μοναδικό; Δεν ξέρω και αν θες γράψε ένα παράδειγμα μήπως το καταλάβω!

 

Όχι καμία σχέση με το πρωτόκολλο. Αυτό που θέλω να πώ είναι, αν θεωρήσουμε πως έχεις 2 σκριπτ, ένα client και ένα server, και ο client αναλαμβάνει να στείλει ένα αρχείο προς το server με UTF-8 charset, γεμάτο με τονισμένα ελληνικά, το στέλλεις σαν bytestream πάνω στο socket, αδιαφορώντας για το encoding, ή το αλλάζεις σε κατι που μπορεί να καταλάβει ο compiler σου, το στέλνεις και το ξαναμετατρέπεις;

Δημοσ.

1. Το έψαξα λίγο το θέμα, χωρίς να ξεκινήσω να γράφω πρόγραμμμα. Δηλαδή βρήκα μια κλάση για VB6 για να την συμπεριλάβω με τυχόν αλλαγές στην Μ2000 η οποία δίνει πρόσβαση στο ws2_32.dll.

Σε μια SendData, διαβάζοντας τον κώδικα της κλάσης, βλέπω ότι παίρνει το UTF16 που είναι η κωδικοποίηση των αλφαριθμητικών στην Vb6 και παράγει το ANSI αντίστοιχο και μετά το στέλνει στο ws2_32.dll. Δηλαδή από 16bit τα κάνει 8bit...Υποψιάζομαι όμως (όπως το βρήκα για το unicode copy-paste στο clipboard που έχει η M2000,  ενώ δεν έχει η VB6), ότι θέλει UTF8 και τυχαίνει οι κωδικοί μέχρι 128 να είναι ίδιοι ANSI και UTF8. Ουσιαστικά στέλνει bytes. Οπότε η κωδικοποίηση δεν συνοδεύεται στο send χωριστά, αλλά περιέχεται, π.χ. το "ALFA" σε UTF16 έχει 8 Byte, αλλά με την SendDATA θα πάει στα 4. Λογικό είναι αυτός που διαβάζει να ξεκινάει με ANSI, και είτε συνεχίζει ή στην πορεία κάτι από αυτό που διάβαζε του λέει ότι είναι "τάδε κωδικοποίηση" ή το αναγνωρίζει από μερικά στοιχεία. Δες εδώ: http://blog.stephencleary.com/2009/07/xml-over-tcpip.html

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

 

2. Για τα namedpipes που χρησιμοποιεί η Μ2000, τα strings είναι data structures  μέσα στα data που στέλνουμε. Δηλαδή μέσα στα data υπάρχει δείκτης που λέει "ακολοθεί αλφαριθμητικό" και μετά υπάρχει το μήκος του και μετά ακολουθεί το αλφαριθμητικό χωρίς μηδέν στο τέλος..Εδώ δηλαδή ο τρόπος που κάνει πακέτο στοιχεία η Μ2000 είναι "ιδιωτικός". Γιατί με ενδιαφέρει η μεταξύ δυο ή περισσοτέρων προγραμμάτων σε Μ2000 επικοινωνία σε ένα τοπικό δίκτυο. (το όνομα του σωλήνα έχει το όνομα του υπολογιστή μέσα). Ενώ στη χρήση του Socket, θέλoyme κάτι γενικό, αλλά και εκεί υπάρχουν περιπτώσεις, όπως π.χ. στο Xml.

Δημοσ.

Κάτσε, αφού δεν κάνεις wrapping, τότε πως θα τρέξεις Vb class για την ws2_32.dll;

 

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

 

Για μένα οι σωστές (αποδεκτές) τεχνικές για να στείλεις οτιδήποτε πάνω σε ένα stream είναι 2.

 

Ή στέλνεις raw bytes και ψάχνεις checksum, απο πλευράς client (αδιαφορείς για περιεχόμενο, κωδικοποίηση κοκ).

 

Ή στέλνεις κωδικοποιημένα και αφήνεις τον client να αποφασίσει εάν αυτό που έλαβε είναι σωστό.

Δημοσ.

Δυο τρόποι υπάρχουν για να χρησιμοποιήσω το ws2_32.dll εκτός από το control που δίνει η vb6 για αυτό. Αυτό που δίνει είναι ένα καλό μεν control αλλά απαιτεί να συνοδεύει το exe. Σκοπός του διερμηνευτή της Μ2000 είναι να μην συνοδεύεται από κάτι ειδικό, παρά ότι έχει το λειτουργικό (μέχρι και τα 10 τουλάχιστον).

Οπότε ο ένας τρόπος είναι με την χρήση της κλάσης που έγραψα παραπάνω (αλλά θέλει σίγουρα μετατροπή τόσο για τα unicode string - όσο και για το πώς διαχειρίζομαι τα events, μέσα από την Μ2000, δηλαδή πως το event φθάνει στο κώδικα που γράφουμε σε Μ2000), και ο άλλος είναι να γραφτεί απευθείας σε Μ2000, με χρήση Declare να ορίσω απευθείας τις συναρτήσεις που θα καλώ από την Μ2000. Το ζήτημα είναι ότι το Interface που έχω φτιάξει για σύνδεση με εξωτερικές ρουτίνες θα θέλει αναβάθμιση (δεν είναι πλήρες, θέλει πολύ δουλειά για να γίνει και σκοπός εδώ ήταν να υπάρχει μια υποστήριξη κύρια για να προσθέτει κάτι και όχι όλο το σύμπαν...)

 

Για τις τεχνικές που περιέγραψες το θέμα του checksum υποδηλώνει ένα πρωτόκολλο, μεταξύ του πομπού και του δέκτη, δηλαδή κάτι συμφωνημένο και από τις δυο πλευρές.  Εκτός και αν το  ήδη το UDP για παράδειγμα το προσφέρει (δεν το ξέρω, δεν το έχω ψάξει, αλλά λογικά θα το έχει, ώστε να πετάει εκτός τα "χαλασμένα" πακέτα).

 

Ένας άλλος τρόπος που δεν έχει αναφερθεί είναι ότι η Μ2000 μπορεί να ανοίγει εσωτερικά browser, να εμφανίζει φόρμες και να περνάει τιμές σε αυτές και με το send να ενημερώνουμε την Μ2000 για αλλαγές στις τιμές, τις οποίες ενημερώνει αυτόματα μεταβλητές. Κατά μια έννοια μπορούμε να τρέξουμε javascript, μέσα από μια φόρμα που θα εμφανίσει η Μ2000. Αυτό έπαιζε από προ 5 έκδοσης, και συνεχίζει και τώρα, πλην όμως δεν εμφανίζεται στις νέες φόρμες (βλέπε GUI) αλλά μόνο στην βασική. Το έχω δοκιμάσει και σε XP που έβγαλα τον iexplorer, αλλά αυτό το κομμάτι ενώ είναι του iexplorer και υποτίθεται ότι έχει βγει...παίζει κανονικά. Αυτό που βγαίνει είναι η πρόσβαση σε αυτό που έδινε ως ξεχωριστί Ie6. Δεν γνωρίζω βέβαια το θέμα ασφάλειας, πάντως μπορεί κάποιος να δείξει ένα βίντεο από youtube και προφανώς μπορεί να φτιάξει μια σελίδα αυτόματα και να βάλει ένα πλήκτρο και με αυτό να κατεβάζεις π.χ. ένα zip αρχείο, χωρίς να χρειάζεται να φτιάξεις socket, τα κάνει αυτό. Βέβαια δεν θα έχεις το chat...και ότι συνεπάγεται.

 

Μια ακόμα διαφορετική προσέγγιση είναι να έχουμε ένα com αντικείμενο με Remote σύνδεση, και όλο το TCP/IP ή όποιο άλλο τρόπο έχουμε επιλέξει το κρατάει εσωτερικά το σύστημα για automation, και απλά εμφανίζεται το αντικείμενο (μπορούμε να συνδεθούμε με ένα com αντικείμενο δίνοντας και το όνομα του Server), απαιτεί και εγκατάσταση του Remote Automation Connection Manager (ο οποίος είναι γραμμένος σε VB6 και αν διαβάσει κανείς οδηγίες θα λέει ότι απαιτεί μερικά dll της VB6). Οπότε το πάρε δώσε δεδομένων να γίνει μέσω του Com. Εκεί έχουμε στάνταρ UTF16 και οι κλήσεις δεν γίνονται με Send πακέτων αλλά προγραμματιστικά εμφανίζονται σαν να καλούμε μια μέθοδο ενός αντικειμένου. Και φυσικά θα πρέπει να σκεφτεί κανείς τη καθυστέρηση μεταξύ της κλήσης και της απάντησης...(αν θέλουμε να πάρουμε κάτι, γιατί μπορούμε να καλούμε μεθόδους με by reference τιμές, στο COM το by reference γίνεται με copy in copy out, αντιγράφεται δηλαδή σε άλλο χώρο και στο τέλος η αλλαγή φαίνεται επειδή ο χώρος αυτός αντιγράφεται πίσω)

Δημοσ.

Ρε συ M2000 αφου βλεπεις και εσυ οτι η γλωσσα απλα μαμαει και ειναι καθαρα ελληνικης "παραγωγης" γιατι δε βαζεις μπρος τις μηχανες μπας και αντικαταστησουν τη μακακια του σχολειου με τη δικια σου γλωσσα?

Δεν ξερω απλα ιδεες ριχνω..Τοσος κοπος μην παει δα χαμενος :)

  • Like 1
Δημοσ.

Ρε συ M2000 αφου βλεπεις και εσυ οτι η γλωσσα απλα μαμαει και ειναι καθαρα ελληνικης "παραγωγης" γιατι δε βαζεις μπρος τις μηχανες μπας και αντικαταστησουν τη μακακια του σχολειου με τη δικια σου γλωσσα?

Δεν ξερω απλα ιδεες ριχνω..Τοσος κοπος μην παει δα χαμενος :)

 

Θέλει κάποιον να την προωθήσει κατάλληλα. Ειναι δουλεια του μάνατζερ :P

  • Like 1
Δημοσ. (επεξεργασμένο)

Δεν μπορώ να τα κάνω όλα...και να φτιάχνω δηλαδή και να προωθώ..και να φτιάχνω το blog...και ένα σωρό πράγματα...

είμαι στην αναθεώρηση 221 και περνάω της εντολές με κλήση με δείκτη σε συνάρτηση...

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

Λίγη δουλειά ακόμα και αύριο θα βγει...

Επεξ/σία από M2000
  • Like 1
Δημοσ.

Δεν έχει ασχοληθεί με sockets αλλά μιας κι έρχεται Πάσχα κι είναι αργία θα κάτσει τρεις-τέσσερις μερούλες να το φτιάξει. Μετά μπορεί να κάνει κι ένα rewrite στο TCP/IP, μην κάνουμε μισές δουλειές.

Δημοσ.

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

Είχα φτιάξει ένα δικό μου listbox, με δική του scrollbar, μια ιδέα για να μπορεί να βάλει κανείς όσα στοιχεία θέλει, με long 32bit τιμή, και επιπλέον να είναι unicode συμβατό.

Πάνω σε αυτό έφτιαξα κλάσεις που επεκτείνουν την λειτουργία του. Αρχικά πέρασα στη Μ2000 σε στάνταρ φόρμες όλα αυτά στοιχεία, button, dropdown combo, textbox, checkbox, κι μπορεί να τα δει κάποιος μαζεμένα στη φόρμα ΡΥΘΜΊΣΕΙΣ, και στη φόρμα ΔΟΚΙΜΉ. Έφτιαξα και φόρμες για επιλογή φσκέλου/αρχείου/εικόνας. Αυτό όμως που δεν μπορούσα να κάνω ήταν να συνδέσω τη γλώσσα με το γραφικό περιβάλλον ώστε να το στήνει αυτή. Δηλαδή ότι είχα στήσει ήταν σε Vb6, άρα σε σταθερές φόρμες.

Κάποια στιμή από συζήτηση εδώ στο insomnia για την c# κοίταξα ένα πρόγραμμα σε c# όπου με delegates χρησιμοποιούσε event αντικείμενα. Εκείνη την εποχή έφτιαχνα διάφορα προγράμματα με αντικείμενα σε Μ2000, και πράγματι έγραψα ένα για multicast event αντικείμενο, που δύναται να περνάει και με αναφορά τιμές στο Raise του event. Αφού κατανόησα το μηχανισμό, έφτιαξα το αντικείμενο εσωτερικό, και το επέκτεινα. Αυτό το αντικείμενο, μια κλάση σε Vb6 πια, δίνει επίσης το τρόπο να στέλνει μία δυναμική φόρμα μηνύματα στην γλώσσα. Έτσι έφτιαξα τρόπο να φτιάχνουμε όσα παράθυρα θέλουμε, να βάζουμε στοιχεία και αυτά να καλούν συναρτήσεις στο τμήμα που φτιάχνει τις φόρμες.

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

Δημοσ.

Δεν έχει ασχοληθεί με sockets αλλά μιας κι έρχεται Πάσχα κι είναι αργία θα κάτσει τρεις-τέσσερις μερούλες να το φτιάξει. Μετά μπορεί να κάνει κι ένα rewrite στο TCP/IP, μην κάνουμε μισές δουλειές.

Ακόμα κατανοεί πως δουλεύουν τα modals, αφού έκανε τα lambda σε 2 ημέρες. Βάλε και μία να ξεκουραστεί, ε.., μέσα Μαΐου θα είναι έτοιμο full stack σε Μ2000

  • Like 1
Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...