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

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

Δημοσ.

Με ποιο project ασχοληθήκατε τελευταία φορά ή ασχολιέστε ακόμα; Projects φυσικά εννοώ οτιδήποτε έχει σχέση με προγραμματισμό (smartphone apps, libraries, websites κτλ κτλ). Περιγράψτε το project σας και αν θέλετε μοιραστείτε και τον κώδικα (αν είναι ανοικτού κώδικα δηλαδή).

 

Τελευταίο τελευταίο που ασχολήθηκα (και ακόμα ασχολιέμαι, όταν βρίσκω ελεύθερο χρόνο γιατί δεν το τελείωσα ακόμα) ήταν ένα απλό προγραμματάκι σε C για Windows, κάνοντας αποκλειστική χρήση μόνο WinAPI, GDI, msvcrt και μίας mini βιβλιοθήκης για FIFO που έγραψα. (link είναι σε github)

 

Είναι μία δικιά μου υλοποίηση (με κάποιες παραλλαγές), σε γραφικό περιβάλλον, του Sleeping Barber IPC problem με κύρια διαφορά πως αντί για processes χρησιμοποιώ threads. Προς το παρόν δουλεύει κατά 85% θα έλεγα. Έχει κάτι deadlocks από δω κι από κει. Ακόμα το δουλεύω, αλλά το μεγαλύτερό μου κατόρθωμα μέχρι τώρα είναι πως δεν έχει το παραμικρό memory leak ακόμα και αν κλείσει ο χρήστης στα καλά καθούμενα το πρόγραμμα, χωρίς να τερματιστούν πρώτα όλα τα customer threads.

 

 

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

  • Like 2
Δημοσ.

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

Δημοσ.

Εγώ ασχολούμαι τελευταία με ένα project το οποίο αποτελεί και την πτυχιακή μου και αφορά υλοποίηση εφαρμογής η οποία θα "μιλά" με ένα rfid τσιπάκι και ανάλογα τα tags θα εμφανίζει πληροφορίες από μια standalone βάση δεδομένων. Σε java το υλοποιώ αλλά δεν ξέρω τι παίζει με πνευματικά δικαιώματα, αν δεν έχει θέμα ο καθηγητής θα ήθελα να το βάλω στο acc μου στο github.

 

Πέρα από αυτό τίποτε αξιόλογο, μόνο κάποιες βάσεις σε sql μιας και θέλω να ασχοληθώ επαγγελματικά :)

  • Like 2
Δημοσ.

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

 

Αν κατάλαβα καλά εννοείς για το πώς καταφέρνω να κλείνω όλα τα νήματα με το που κλείνει το πρόγραμμα, σε οποιαδήποτε φάση της εκτέλεσης βρίσκεται;

 

Στην ουσία επειδή στην C πρέπει να κάνω χειροκίνητο κλείσιμο των νημάτων για να μην υπάρξουν memory leaks, φτιάχνω ένα event το οποίο βρίσκεται σε όλα τα νήματα. Όταν ο χρήστης κλείσει το πρόγραμμα και βγει από το κύριο loop, το event ενεργοποιείται.

 

To WinAPI προσφέρει την δυνατότητα να μπλοκάρει το κάθε νήμα σε 2 ή περισσότερα IPC αντικείμενα, περιμένοντας κάθε φορά μέχρι τουλάχιστον ένα ή και τα δύο αντικείμενα να βρεθούν σε signaled state, Έτσι και στα δικά μου τα νήματα (και των πελατών, και του κουρέα) σκέφτηκα να κάνω, κάθε φορά που γίνεται μπλοκάρισμα σε ένα μιούτεξ, σηματοφόρο κτλ να γίνεται ταυτόχρονα και μπλοκάρισμα και στο event που κάνει kill τα νήματα, ελέγχοντας την τιμή επιστροφής της συνάρτησης, και αν το WaitForMultipleObjects() επέστρεψε επειδή έγινε signaled το event μου, τότε το νήμα βγαίνει από το loop του και επιστρέφει στην κύρια διεργασία.

 

Κανονικά το λειτουργικό exitάρει αυτόματα όλα τα νήματα, όταν κλείνει η κύρια διεργασία που τα κάλεσε, αλλά το _beginthreadex API, καλεί το msvcrt και δεν κάνει δικιά του εκκαθάριση, κι αν είναι κάτι που με νευριάζει πάρα πολύ σε προγράμματα είναι τα memory leaks :P

Εγώ ασχολούμαι τελευταία με ένα project το οποίο αποτελεί και την πτυχιακή μου και αφορά υλοποίηση εφαρμογής η οποία θα "μιλά" με ένα rfid τσιπάκι και ανάλογα τα tags θα εμφανίζει πληροφορίες από μια standalone βάση δεδομένων. Σε java το υλοποιώ αλλά δεν ξέρω τι παίζει με πνευματικά δικαιώματα, αν δεν έχει θέμα ο καθηγητής θα ήθελα να το βάλω στο acc μου στο github.

 

Πέρα από αυτό τίποτε αξιόλογο, μόνο κάποιες βάσεις σε sql μιας και θέλω να ασχοληθώ επαγγελματικά :)

 

Προχωρημένο ακούγεται. Πιο API χρησιμοποιείς για την συνομιλία με rfid; Και μην μου πεις πως η Java έχει package μέχρι και γι' αυτό :P

Δημοσ.

 

 

Προχωρημένο ακούγεται. Πιο API χρησιμοποιείς για την συνομιλία με rfid; Και μην μου πεις πως η Java έχει package μέχρι και γι' αυτό :P

Η αλήθεια είναι πως ακόμα δεν έχω ασχοληθεί με την επικοινωνία τους μιας και έχω κάνει μόνο το Ui μέχρι στιγμής.

Και ο λόγος είναι πως έκανα πρώτα την αναφορά και μετά ξεκίνησα την εφαρμογή.

Καλά μη φανταστείς, αρχάριος είμαι σε java :P

Απλά το είδα σαν μια καλή ευκαιρία για να ανέβω λίγο, όλα θέμα ψαξίματος και διαβάσματος είναι, θεωρώ :)

  • Like 1
Δημοσ.

Κατι αρκετα απλο αλλα μας χρειαστηκε στη δουλεια και δεν μπορουσαμε να βρουμε ετοιμο οπως το θελουμε. Οποτε το εγραψα ως ευκαιρια να εξοικειωθω λιγο με τη C# και τα δικτυακα objects της

 

Ενα απλο client - server προγραμμα. Το client κομματι τρεχει σε καθε PC της υπηρεσιας με το που κανει login ο χρηστης και ειναι αορατο. Συλλεγει καποιες βασικες πληροφοριες οπως username-pcname και τις στελνει καθε 2 λεπτα στο server.

 

Ο server τις κραταει σε ενα πινακα στη μνημη του, μαζι με το socket απο το οποιο προηλθε η πληροφορια (η κινηση ειναι ολη σε UDP)

 

Η εκδοση του client που τρεχω εγω εχει και GUI και τραβαει ολες τις πληροφοριες και τις δειχνει σε πινακα τον οποιο μπορω να κανω sort η filter μονο στις εγγραφες που με ενδιαφερουν και να στειλω ενα instant message σε ολους η επιλεγμενους χρηστες..

 

Το μηνυμα θα εμφανιστει στην οθονη τους σε ενα always on top παραθυρο για να μην το χασουν.

 

Αυτο μας χρειαζεται γιατι υπαρχουν περιπτωσεις που μια βαση δεδομενων η εφαρμογη πρεπει να τη ριξουμε για λιγο και ειναι αδυνατον να ειδοποιησουμε εγκαιρα ολους τους χρηστες που ειναι συνδεδεμενοι.

Για το τοπικο δικτυο θα μπορουσε να αρκει ενα net send αλλα εχουμε και χρηστες στο domain εκτος του τοπικου δικτυου που συνδεονται μεσω NAT και εκει δεν δουλευει.

Δεν μπορουσαμε να βρουμε και ενα παρομοιο προγραμμα οπως ακριβως το θελαμε, να ειναι αορατο δηλαδη και να βγαζει μηνυμα σε always on top παραθυρο.

 

Εχει και εξτρα λειτουργια να ελεγχω ανα πασα στιγμη ποιοι χρηστες ειναι συνδεδεμενοι καθως και σε ακυρες ωρες απομακρυσμενα να βλεπω ποιοι δεν κλεινουν τους υπολογιστες τους

  • Like 3
Δημοσ.

@_Gikoskos_

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

Δημοσ.

Η αλήθεια είναι πως ακόμα δεν έχω ασχοληθεί με την επικοινωνία τους μιας και έχω κάνει μόνο το Ui μέχρι στιγμής.

Και ο λόγος είναι πως έκανα πρώτα την αναφορά και μετά ξεκίνησα την εφαρμογή.

Καλά μη φανταστείς, αρχάριος είμαι σε java :P

Απλά το είδα σαν μια καλή ευκαιρία για να ανέβω λίγο, όλα θέμα ψαξίματος και διαβάσματος είναι, θεωρώ :)

 

Θα μπορούσες να κάνεις το κομμάτι χαμηλότερου επιπέδου, της επικοινωνίας με το τσιπ, στην C (κάτι σαν back-end δηλαδή) και μετά να καλέσεις αυτές τις συναρτήσεις μέσω του JNI της Java που προσφέρει λειτουργίες FFI με C.

 

 

Κατι αρκετα απλο αλλα μας χρειαστηκε στη δουλεια και δεν μπορουσαμε να βρουμε ετοιμο οπως το θελουμε. Οποτε το εγραψα ως ευκαιρια να εξοικειωθω λιγο με τη C# και τα δικτυακα objects της

 

Ενα απλο client - server προγραμμα. Το client κομματι τρεχει σε καθε PC της υπηρεσιας με το που κανει login ο χρηστης και ειναι αορατο. Συλλεγει καποιες βασικες πληροφοριες οπως username-pcname και τις στελνει καθε 2 λεπτα στο server.

 

Ο server τις κραταει σε ενα πινακα στη μνημη του, μαζι με το socket απο το οποιο προηλθε η πληροφορια (η κινηση ειναι ολη σε UDP)

 

Η εκδοση του client που τρεχω εγω εχει και GUI και τραβαει ολες τις πληροφοριες και τις δειχνει σε πινακα τον οποιο μπορω να κανω sort η filter μονο στις εγγραφες που με ενδιαφερουν και να στειλω ενα instant message σε ολους η επιλεγμενους χρηστες..

 

Το μηνυμα θα εμφανιστει στην οθονη τους σε ενα always on top παραθυρο για να μην το χασουν.

 

Αυτο μας χρειαζεται γιατι υπαρχουν περιπτωσεις που μια βαση δεδομενων η εφαρμογη πρεπει να τη ριξουμε για λιγο και ειναι αδυνατον να ειδοποιησουμε εγκαιρα ολους τους χρηστες που ειναι συνδεδεμενοι.

Για το τοπικο δικτυο θα μπορουσε να αρκει ενα net send αλλα εχουμε και χρηστες στο domain εκτος του τοπικου δικτυου που συνδεονται μεσω NAT και εκει δεν δουλευει.

Δεν μπορουσαμε να βρουμε και ενα παρομοιο προγραμμα οπως ακριβως το θελαμε, να ειναι αορατο δηλαδη και να βγαζει μηνυμα σε always on top παραθυρο.

 

Εχει και εξτρα λειτουργια να ελεγχω ανα πασα στιγμη ποιοι χρηστες ειναι συνδεδεμενοι καθως και σε ακυρες ωρες απομακρυσμενα να βλεπω ποιοι δεν κλεινουν τους υπολογιστες τους

 

Καλή άσκηση για να κάνεις εξάσκηση στις υποδοχές. Όλοι λίγο πολύ με παρόμοιες εφαρμογές τύπου client/server μάθαμε τα sockets :P .

 

 

@_Gikoskos_

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

 

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

  • Like 1
Δημοσ.

Έγραψα ένα πρόγραμμα με το Μπαρμπέρη...και τους πελάτες του. Πατάμε κουμπί και ρίχνουμε πελάτες...και βλέπουμε ποιοι κουρεύονται, ποιοι μένουν στο χωλ, πόσοι φεύγουν Η Μ2000 δουλεύει με "πράσινα νήματα", δηλαδή νήματα σε ένα νήμα, και μπορούμε να εκτελέσουμε εντολές απ΄έξω στο νήμα (σίγουρα όταν δεν τρέχει...αφού κάθε φορά τρέχει ένα, με χρόνο επανάληψης). Η υπόθεση είναι ότι κανένα νήμα δεν μπλοκάρεται, ούτε αυτός που κουρεύεται, ούτε αυτοί που περιμένουν, ούτε το κεντρικό πρόγραμμα. Τα νήματα βλέπουν παντού στο τμήμα που τρέχουν αλλά μπορούν να έχουν στατικές μεταβλητές, δικές τους. Το πρόγραμμα δείχνει τους αριθμούς νημάτων που τρέχουν την κάθε στιγμή. Οι πελάτες που δεν μπορούν να μπουν μέσα, δίνουν εντολή διαγραφής του νήματος. Η εξυπηρέτηση γίνεται με νούμερο (εισιτήριο εισαγωγής).

http://m2000.forumgreek.com/t10-topic#10

Δημοσ.

Έγραψα ένα πρόγραμμα με το Μπαρμπέρη...και τους πελάτες του. Πατάμε κουμπί και ρίχνουμε πελάτες...και βλέπουμε ποιοι κουρεύονται, ποιοι μένουν στο χωλ, πόσοι φεύγουν Η Μ2000 δουλεύει με "πράσινα νήματα", δηλαδή νήματα σε ένα νήμα, και μπορούμε να εκτελέσουμε εντολές απ΄έξω στο νήμα (σίγουρα όταν δεν τρέχει...αφού κάθε φορά τρέχει ένα, με χρόνο επανάληψης). Η υπόθεση είναι ότι κανένα νήμα δεν μπλοκάρεται, ούτε αυτός που κουρεύεται, ούτε αυτοί που περιμένουν, ούτε το κεντρικό πρόγραμμα. Τα νήματα βλέπουν παντού στο τμήμα που τρέχουν αλλά μπορούν να έχουν στατικές μεταβλητές, δικές τους. Το πρόγραμμα δείχνει τους αριθμούς νημάτων που τρέχουν την κάθε στιγμή. Οι πελάτες που δεν μπορούν να μπουν μέσα, δίνουν εντολή διαγραφής του νήματος. Η εξυπηρέτηση γίνεται με νούμερο (εισιτήριο εισαγωγής).

http://m2000.forumgreek.com/t10-topic#10

 

Πολύ καλή δουλειά. Δεν την έχω δει πολύ την Μ2000 αλλά θυμίζει αρκετά Visual Basic και Basic, η σύνταξη. Θα την κοιτάξω όταν βρω ελεύθερο χρόνο, γιατί κάποιες προτάσεις που χρησιμοποιείς φαίνονται λίγο ενδιαφέρουσες. Είναι καλό πρότζεκτ η υλοποίηση γλώσσας προγραμματισμού. Κατά τη γνώμη μου, το επόμενο βήμα που θα πρέπει να ακολουθήσεις είναι το bootstrapping, δηλαδή να γράψεις τον compiler για την Μ2000 από την αρχή, στην Μ2000.

 

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

 

Αλλά αυτό δεν αλλάζει το γεγονός ότι είναι πλέον obsolete. Η ιστορική σημασία της, δεν λέει και πολλά για κάποιον που γράφει κώδικα στις μέρες μας. Δεν είναι διαχρονική γλώσσα, σαν την C ή την C++. Είναι τόσο περιοριστική, όσο ήταν κάποτε ριζοσπαστική. Κάπου είδα πως ανέφερες και ActiveX το οποίο δεν υποστηρίζεται στα Windows 10, καθώς και στα updated Windows 8 και 8.1. Γενικά αρκετές τεχνολογίες τέτοιου τύπου, πάνε κι έρχονται στην Microsoft. Η προσπάθεια των developers να διατηρήσουν backwards compatibility σε όλους τους layers έχει πολλές φορές καταστροφικά αποτελέσματα. Το WinAPI είναι πανάρχαιο και αρκετά κακογραμμένο στους περισσότερους τομείς. Και ο ίδιος ο πυρήνας δεν πάει πίσω. Αν θες να διαβάσεις την, πολλές φορές πονεμένη, ιστορία πίσω από την δημιουργία του WinAPI, από έναν από τους καλύτερους developers της Microsoft που εργάστηκε πάνω στο WinAPI από το 1992, τον Raymond Chen, τσέκαρε το βιβλίο του The Old New Thing.

 

Δεν υποστηρίζω κανένα λειτουργικό βέβαια. Προς το παρόν έχω προγραμματίσει σε Windows, BSD και Linux, και έχω παράπονα με όλα. Αυτό με το WinAPI το αναφέρω γιατί είναι κοντά στις τεχνολογίες που χρησιμοποιείς. Μην ξεχνάς πως και η VB πάνω του πατάει. Ωστόσο θα συνιστούσα σε όποιον ασχολείται με desktop developing, να προγραμματίσει τουλάχιστον μία φορά πάνω του. Η εμπειρία σίγουρα θα βοηθήσει τον οποιονδήποτε προγραμματιστή, να ξέρει ποιες ιδέες να αποφύγει και ποιες να κρατήσει.

 

Παρ'όλ'αυτά, πιστεύω πως αν καταφέρεις να κάνεις bootstrapping και απεξαρτηθείς τελείως από VB, θα σου είναι πιο εύκολο να την κάνεις και port σε άλλα λειτουργικά. Ή τουλάχιστον γράψε τον compiler σε C# ή κάτι τέτοιο, για να μπορείς να τον κάνεις να τρέχει παντού. Το portability έχει γίνει αρκετά σημαντικό πλέον :P

 

Edit: Σόρυ που αυτό μου το ποστ κατέληξε να είναι rant κατά του WinAPI, απλά μου ήρθαν κάποια πράγματα στο μυαλό και τα έγραψα.

  • Like 1
Δημοσ.

Η βασική εξάρτηση είναι το dll της Vb6, το οποίο είναι απλά μια βιβλιοθήκη που δεν στην δίνει μόνιμα, παλαιότερα γίνονταν, αλλά την παρέχει το λειτουργικό. Ανάφερα το ActiveX, όχι το document για Web, αλλά το κλασικό αντικείμενο, όπου με ένα reference σε μια γλώσσα έχεις πρόσβαση σε αυτό. Δουλεύει σε Wine, το μικρό exe καλεί το dll, το ActiveX δηλαδή.

Δεν είναι compiler, ούτε μπορεί να γίνει, έχει INLINE εντολή που βάζει κώδικα στην εκτέλεση και eval εντολές.

Δημοσ.

Τα εκτελέσιμα που μεταγλωτίζονται με τον compiler που έχεις τώρα, στηρίζονται και αυτά στο dll;

 

Γίνεται να κάνεις static linking;

Δημοσ.

Δεν βγάζει γλώσσα μηχανής η Μ2000, πάντα εκτελεί source. Δεν έχουμε compiler, αλλά διερμηνευτή, χωρίς κάτι σαν p-code. Ο διερμηνευτής είναι σε exe, ή ήταν αφού τώρα είναι dll γραμμένο στη registry. Δεν χρειάζεται δηλαδή κάτι άλλο από το dll της M2000.

Δημοσ.

Αν φτιάξεις το σκάκι σου dll, μπορώ να φτιάξω interface στη M2000, που θα στέλνει τη σκακιέρα με struct και πιο χρώμα να παίξει και τι επίπεδο, και θα την παίρνει με την κίνηση.

Έχει c calls η Μ2000.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...