παπι Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 Βεβαια αυτο το project ειναι οτι πρεπει για να μαθει OO. Κακα τα ψεματα, ειναι πολυ μακρια απο το class Animal class Dog class Cat.
migf1 Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 Θα συμφωνήσω εν μέρη, αλλά νομίζω πως είναι the other way around και εξηγώ. Πιστεύω η καλύτερη αναλογία για το software development που έχω διαβάσει κατά καιρούς είναι η αρχιτεκτονική σπιτιών. Το πρόβλημα του να μεταβείς απ το ένα δωμάτιο στο άλλο είναι απλό και λυνετε βάζοντας μία πόρτα. Υπάρχει στάνταρ τρόπος για το πως φτιάχνεται μία πόρτα και αυτη έχει στάνταρ διαστάσεις...Τώρα κάποιος μπορεί να γκρεμίσει το τοίχο, γιατί τον βολεύει. Κάπως έτσι είναι και ένα design pattern, δεν είναι ευαγγέλιο ούτε πανάκεια αλλα αν το ακολουθήσεις σου υπόσχεται κάποια αποτελέσματα (θετικα/αρνητικα). Μπορείς να το εξελίξεις και να το τροποιήσεις για τις ανάγκες σου άλλα μπορεί, άθελά σου, να φτάσεις σε σημείο να γκρεμίζεις τοίχους, ενώ μία πόρτα θα ήταν αρκετή. Νομίζω πως παρερμηνεύεις τα γραφόμενά μου. Μπορεί να κάνω λάθος, αλλά από την απάντηση σου αυτό που μου δίνεις να καταλάβω είναι πως το "τα design patterns, κλπ, δεν είναι ευαγγέλια κλπ" που έγραψα, εσύ το ερμήνευσες ως "τα design patterns, κλπ είναι άχρηστα". Προφανώς και η χρησιμότητά τους είναι σημαντική, αρκεί να έχεις πρώτα ξεκαθαρίσει πως είναι εξαρχής κατάλληλα για τη δουλειά που θέλεις να κάνεις, και αφετέρου πως δεν είσαι υποχρεωμένος να τα υλοποιήσεις σε όλο τους το εύρος. Συχνότατα μάλιστα (αν όχι πάντα), ειδικά τα design patterns, είναι ανοιχτά προς διάφορες εσωτερικές υλοποιήσεις. Και για να χρησιμοποιήσω το παράδειγμά σου σε σχέση με τη κουβέντα του νήματος, αφενός το reference counting δεν έχει στάνταρ τρόπο υλοποίησης (άρα δεν είναι πόρτα με στάνταρ διαστάσεις) κι αφετέρου είσαι καθόλα ελεύθερος να κάνεις treat στο δικό σου πρότζεκτ ως Single Responsibility Unit είτε το χερούλι της πόρτας, είτε την πόρτα, είτε ολόκληρο τον τοίχο. Σε ότι αφορά τώρα ειδικά το reference counting, η πρόταση που έκανα στον ts (η οποία συμπίπτει με αυτή του παπι) δεν βγήκε ούτε από το μυαλό μου, ούτε στην τύχη. Είναι συχνότατη, αλλά συχνότατη όμως, μέθοδος reference counting . Και όπως τα πάντα στον προγραμματισμό, έχει κι αυτή τα συν και τα πλην της (π.χ. τα reference cycles). Σε καμία περίπτωση όμως δεν παραβιάζει κανένα SRP. Π.χ. από το COM object model της Microsoft (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687260(v=vs.85).aspx), μέχρι το απλοποιημένο παράδειγμα του C++ FAQ (http://www.parashift.com/c++-faq/ref-count-simple.html) έως το τυχαίο αυτό άρθρο του άγνωστου x (http://www.linuxprogrammingblog.com/cpp-objects-reference-counting). Κι από τη στιγμή που ο ts δεν σκοπεύει να φτιάξει βιβλιοθήκη, αλλά πρότζεκτ στο οποίο έχει τον πλήρη έλεγχο, τότε η άποψή μου είναι πως θα τον διευκολύνει αν ακολουθήσει αυτόν τον δρόμο (ακόμα και reference cycles να έχει, μπορεί να τα σπάει... το είχα θίξει εξαρχής με εκείνο το "kill yourself"). Αν θέλει να το αναθέσει σε manager (που conceptually για μένα τουλάχιστον παραπέμπει περισσότερο σε tracing model ενός garbage collector που είναι πιο tedious/complex/κλπ) μπορεί να το κάνει έτσι. Μπορεί επίσης να τα συνδυάσει και τα δυο αν θέλει (επίσης το έθιξα στο αρχικό μου ποστ). Γενικώς μπορεί να κάνει ότι νομίζει πως τον εξυπηρετεί καλύτερα, και η δική μου άποψη είναι πως το reference counting τον εξυπηρετεί καλύτερα να το κάνει μέσα στο factory (και όχι έξω από αυτό).
Moderators Kercyn Δημοσ. 29 Μαΐου 2014 Μέλος Moderators Δημοσ. 29 Μαΐου 2014 Αυτό είναι κλασικός προβληματισμός και πράγματι έρχεται η ώρα που αναρωτιέσαι αν αξίζει τον κόπο, και πολλές φορές μένει μια αίσθηση ότι είναι "πολλή δουλειά για το τίποτα". Σου προτείνω λοιπόν να κάνεις το εξής: Γράψε σωστά τη requestMixChunk όπως είναι τώρα Ξαναγράψτη χρησιμοποιώντας υποθετικές classes που αυτή τη στιγμή δεν υπάρχουν Σύγκρινε το αποτέλεσμα και πολλαπλασίασε τη διαφορά επί το πόσες αντίστοιχες υπάρχουν στο πρόγραμμά σου Αυτό θα σου δώσει να καταλάβεις πόσο λιγότερη δουλειά θα είχες χρειαστεί αν πρώτα είχε γίνει η "πολλή δουλειά για το τίποτα". Και βέβαια έτσι μετράς μόνο τα κιλά του κώδικα, ενώ αφήνεις απέξω πράγματα όπως το αν έχεις γράψει bugs. Για παράδειγμα εδώ υπήρχε εκείνο το "θεωρητικό" bug, το οποίο (κι εδώ είναι το άσχημο) χωρίς πολλή προσπάθεια εκ μέρους σου στο μέλλον θα μπορούσε να γίνει και πρακτικό χωρίς να το καταλάβεις με τίποτα εκείνη τη στιγμή. Επιπλέον, it's a learning experience. Φαντάζομαι ότι στη φάση που είσαι learning experience == good. Για να είμαι ειλικρινής μου φαίνεται σαν κάτι που ασχολήθηκε κάποιος λίγο ένα σαββατοκύριακο και μετά το παράτησε. Δεν εμπνέει εμπιστοσύνη, και δεν είναι και πολύς κώδικας για να πεις ότι είναι γολγοθάς να το γράψεις μόνος σου. Για τα design patterns κλπ το μόνο που έχω να πω είναι πως όλοι οι masters ξέρουν πότε αξίζει κάποιος κανόνας να παραβιαστεί. Το πρόβλημα είναι πως παραβιάζοντας τον κανόνα απλώς δε βγαίνει κάποιο συμπέρασμα, γιατί εκτός από τους masters το κάνουν και οι άσχετοι. Μφφφ. Κάπως αλλιώς τα είχα στο μυαλό μου όταν ξεκινούσα. Το τελικό αποτέλεσμα θα είναι η πτυχιακή μου, και προτίμησα αυτό το δρόμο από μια έτοιμη engine γιατί έλεγα καλό είναι να μάθεις πρώτα under the hood και είναι μια γλώσσα που μ' αρέσει και έτοιμη engine == 2ez και άλλα τέτοια. Αυτά τα έχω πει και στον υπεύθυνο καθηγητή, ο οποίος μου συμφωνεί, αλλά μου είπε ότι η δουλειά είναι πολλή και ότι ξέρω την εναλλακτική. Όσο για τη βιβλιοθήκη, πιο μετά που κοίταξα καλύτερα είχα την εντύπωση ότι είναι μισή σε πολλά σημεία, και ο κώδικας όντως είναι λίγος (== ελλιπής), οπότε θα το γράψω μόνος μου. Αυτό που με χαλάει είναι ότι τέτοια "προβλήματα" (C bindings) τα θεωρούσα non-issues και τώρα βγαίνει ότι θα φάω αγγούρι και σ' αυτόν τον τομέα. @παπι Δεν καταλαβαίνω πότε λες κάτι για πλάκα και πότε όχι, οπότε help me here @migf1 Θα κοιτάξω αυτά που έβαλες και άλλα links που θα ψάξω για να εμπεδώσω καλύτερα το ref counting (μόλις τελειώσω με τα καινούρια bindings που πρέπει να κάνω ). Απλώς, όπως έχετε καταλάβει, τώρα ξεκινάω ουσιαστικά να μαθαίνω, βλέπω τόσα πράγματα μπροστά μου και δεν ξέρω ποιο ν' ακολουθήσω.
migf1 Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 ... @migf1 Θα κοιτάξω αυτά που έβαλες και άλλα links που θα ψάξω για να εμπεδώσω καλύτερα το ref counting (μόλις τελειώσω με τα καινούρια bindings που πρέπει να κάνω ). Απλώς, όπως έχετε καταλάβει, τώρα ξεκινάω ουσιαστικά να μαθαίνω, βλέπω τόσα πράγματα μπροστά μου και δεν ξέρω ποιο ν' ακολουθήσω. Μη κάνεις δικά σου bindings αν δεν ξεκαθαρίσεις πρώτα ποιον/ποιους τρόπους θα υλοποιήσεις. Ο στόχος σου για μένα πάντα, θα πρέπει να είναι να μην φτιάξεις κανένα binding (δεν φτιάχνεις βιβλιοθήκη, έτσι δεν είναι; ), ή αν χρειαστείς τότε πρώτα ψάξε για έτοιμα. Π.χ. για OpenGL που είδα πως χρησιμοποιείς, δες πρώτα αν σου κάνει κάτι σαν το OGLplus Επίσης, αντί για SDL, δες μήπως σου κάνει καλύτερα η SFML που είναι εξαρχής γραμμένη σε C++ (σε αντίθεση με την SDL που είναι σε C). Έχει περίπου παραπλήσιες δυνατότητες, αλλά νομίζω είναι πιο βατή στη χρήση της και είναι αρκετά (ίσως και πολύ, δεν ξέρω σίγουρα) δημοφιλής(είναι λιγάκι πιο high-level από την SDL... αν και δεν έχω επαφή με SDL 2, μόνο με SDL 1.2) Πάντως, αν θέλεις τη γνώμη μου, εφόσον λες πως τώρα ξεκινάς, προσπάθησε να χρησιμοποιήσεις όσο το δυνατόν λιγότερα πράγματα μπορείς. Το λέω γιατί πάρα πολλοί όταν ξεκινάμε κάτι νέο (βάζω και τον εαυτό μου μέσα), πέφτουμε στην παγίδα του "α, υποστηρίζεται κι αυτό το feature, δεν το ήξερα? ε, να το βάλω κι αυτό τότε". Τέλος, αν δεν υπάρχει περιορισμός, ίσως είναι καλύτερη ιδέα για την πτυχιακή σου να χρησιμοποιήσεις μια γλώσσα που ήδη ξέρεις, αντί να προσπαθείς ταυτόχρονα και να μάθεις μια νέα γλώσσα και να παραδώσεις εμπρόθεσμα λειτουργική και καλοσχεδιασμένη πυιχιακή εργασία. Βέβαια, εσύ ξέρεις καλύτερα από τον καθένα τις ανάγκες σου, οπότε όπως είναι φυσικό, ο τελικός κριτής είσαι εσύ. Εμείς όλοι εδώ πέρα, τραγουδάμε έξω από τον χορό
defacer Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 Μφφφ. Κάπως αλλιώς τα είχα στο μυαλό μου όταν ξεκινούσα. Αν κάθε φορά που θα το πεις αυτό στα επόμενα 15 χρόνια σου έδινε κάποιος ένα ευρώ, θα γινόσουν πλούσιος. Το τελικό αποτέλεσμα θα είναι η πτυχιακή μου, και προτίμησα αυτό το δρόμο από μια έτοιμη engine γιατί έλεγα καλό είναι να μάθεις πρώτα under the hood και είναι μια γλώσσα που μ' αρέσει και έτοιμη engine == 2ez και άλλα τέτοια. Αυτά τα έχω πει και στον υπεύθυνο καθηγητή, ο οποίος μου συμφωνεί, αλλά μου είπε ότι η δουλειά είναι πολλή και ότι ξέρω την εναλλακτική. Εγώ βλέπω ότι όντως μαθαίνεις και ότι όντως η δουλειά είναι περισσότερη απ' ότι φανταζόσουν. Άρα everything goes according to plan. Reason to be happy. Αυτό που με χαλάει είναι ότι τέτοια "προβλήματα" (C bindings) τα θεωρούσα non-issues και τώρα βγαίνει ότι θα φάω αγγούρι και σ' αυτόν τον τομέα. I feel you. Και γω που τα γκούγκλαρα χθες και βρήκα νυχτερίδες κι αράχνες σκεφτόμουν how is that even possible. Από την άλλη ξέρεις τι λένε. Challenges beget opportunities. Μπορούσες χθες να φανταστείς ότι υπάρχει ένα παράλληλο σύμπαν στο οποίο τα C++ bindings της SDL που χρησιμοποιεί τόσος κόσμος ξεκίνησαν σαν προσωπικό σου project? Σήμερα μπορείς. Θα στείλεις αύριο-μεθαύριο βιογραφικό για C++ δουλειά; "Επίσης έχω και αυτό εδώ το project..." => instant interview. Εννοείται πως αυτά τα πράγματα δε θα γίνουν μόνα τους και θα εξαρτηθούν κυρίως από το πόσο έχεις σκοπό να δουλέψεις αντί να πίνεις μπάφους και να παίζεις pro. Α piece of life advice: από τη στιγμή που έχεις το μικρόβιο αλλά και το μυαλό, το τι θα απογίνεις στη ζωή εξαρτάται από 2 πράγματα: work ethic και προσωπικότητα. Οπότε... wax on, wax off. PS: O migf1 έχει ένα point όσον αφορά καθαρά την πτυχιακή. Και γω ο ίδιος αφότου έκανα μια ψαχτική επέλεξα πτυχιακή με κριτήριο το πόσο εύκολα μπορώ να την ξεπετάξω, απλά και μόνο για να μπορέσω όσο το δυνατόν γρηγορότερα να τελειώνω με την υποχρέωση και να κάνω αυτό που έχω στο μυαλό μου. Αλλά ακόμα κι έτσι, πάλι έκανα παραπάνω από τα τελείως απαραίτητα όπως ήδη κάνεις και συ (π.χ. αν ο σκοπός ήταν απλά να τελειώνεις, γιατί μπήκες στον κόπο να βάλεις unique_ptr?)
Moderators Kercyn Δημοσ. 29 Μαΐου 2014 Μέλος Moderators Δημοσ. 29 Μαΐου 2014 Μη κάνεις δικά σου bindings αν δεν ξεκαθαρίσεις πρώτα ποιον/ποιους τρόπους θα υλοποιήσεις. Ο στόχος σου για μένα πάντα, θα πρέπει να είναι να μην φτιάξεις κανένα binding, ή αν χρειαστείς τότε πρώτα ψάξε για έτοιμα. Π.χ. για OpenGL που είδα πως χρησιμοποιείς, δες πρώτα αν σου κάνει κάτι σαν το OGLplus Επίσης, αντί για SDL, δες μήπως σου κάνει καλύτερα η SFMLπου είναι εξαρχής γραμμένη σε C++ (σε αντίθεση με την SDL που είναι σε C). Έχει περίπου παραπλήσιες δυνατότητες, αλλά νομίζω είναι πιο βατή στη χρήση της (είναι λιγάκι πιο high-level από την SDL... αν και δεν έχω επαφή με SDL 2, μόνο με SDL 1.2) Πάντως, αν θέλεις τη γνώμη μου, εφόσον λες πως τώρα ξεκινάς, προσπάθησε να χρησιμοποιήσεις όσο το δυνατόν λιγότερα πράγματα μπορείς. Το λέω γιατί πάρα πολλοί όταν ξεκινάμε κάτι νέο (βάζω και τον εαυτό μου μέσα), πέφτουμε στην παγίδα του "α, υποστηρίζεται κι αυτό το feature, δεν το ήξερα? ε, να το βάλω κι αυτό τότε". Τέλος, αν δεν υπάρχει περιορισμός, ίσως είναι καλύτερη ιδέα για την πτυχιακή σου να χρησιμοποιήσεις μια γλώσσα που ήδη ξέρεις, αντί να προσπαθείς ταυτόχρονα και να μάθεις μια νέα γλώσσα και να παραδώσεις εμπρόθεσμα λειτουργική και καλοσχεδιασμένη πυιχιακή εργασία. Βέβαια, εσύ ξέρεις καλύτερα από τον καθένα τις ανάγκες σου, οπότε όπως είναι φυσικό, ο τελικός κριτής είσαι εσύ. Εμείς όλοι εδώ πέρα, τραγουδάμε έξω από τον χορό Την έχω δει την OGLPlus, αλλά δε μ' αρέσει ούτε το documentation ούτε τα tutorials που έχει, και για να πω την αλήθεια δεν είχα κάποιο πρόβλημα με την "απλή" OpenGL, συν ότι διάβασα ότι δεν υπάρχει μεγάλη διαφορά ή σοβαρός λόγος να χρησιμοποιήσει κάποιος τα C++ bindings (σε αντίστοιχη ερώτηση). Την SFML την έχω δει αλλά έχω ακούσει μερικά περίεργα σχετικά με το input handling που κάνει. Ο βασικός λόγος που δεν την χρησιμοποίησα είναι ότι όταν την πρωτοείδα είχα ήδη ξεκινήσει με SDL, και αφού είδα ότι πάνω κάτω τα ίδια πράγματα κάνουν είπα να μην αλλάξω (συν ότι είχα κατεβάσει και χρησιμοποιούσα ως "reference" τον κώδικα του flare, το οποίο είναι γραμμένο σε SDL). Θα της ρίξω μια καλύτερη ματιά και πολύ πιθανόν να κατευθυνθώ προς τα εκεί (αφήνοντας SDL, OpenGL και σια). Η C++ είναι η μόνη γλώσσα με την οποία έχω ασχοληθεί παραπάνω (δηλαδή για πράγματα πέρα των όποιων εργασιών) και η γλώσσα που θα επέλεγα να γράψω κάτι. Αυτό που εννοούσα είναι ότι η C++ που βλέπω ότι πρέπει να χρησιμοποιηθεί δεν έχει καμία σχέση με αυτά που διδασκόμασταν (όσον αφορά το STL και γενικότερα τον τρόπο συγγραφής) και ότι πρέπει να μάθω τον καινούριο τρόπο.
migf1 Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 ... Η C++ είναι η μόνη γλώσσα με την οποία έχω ασχοληθεί παραπάνω (δηλαδή για πράγματα πέρα των όποιων εργασιών) και η γλώσσα που θα επέλεγα να γράψω κάτι. Αυτό που εννοούσα είναι ότι η C++ που βλέπω ότι πρέπει να χρησιμοποιηθεί δεν έχει καμία σχέση με αυτά που διδασκόμασταν (όσον αφορά το STL και γενικότερα τον τρόπο συγγραφής) και ότι πρέπει να μάθω τον καινούριο τρόπο. Εικάζω επειδή διδασκόσασταν C++03 ενώ αυτό το νήμα είναι πήχτρα σε C++11 (θυμάσαι το νήμα περί "the C++ way" ε; )
Moderators Kercyn Δημοσ. 29 Μαΐου 2014 Μέλος Moderators Δημοσ. 29 Μαΐου 2014 Εικάζω επειδή διδασκόσασταν C++03 ενώ αυτό το νήμα είναι πήχτρα σε C++11 (θυμάσαι το νήμα περί "the C++ way" ε; ) Ναι, το θυμάμαι C++ έχουμε μόνο στο 3ο εξάμηνο, οπότε πάνε 2μισι χρόνια. Αυτό που θυμάμαι είναι τους καθηγητές να λένε μην κάνετε malloc, κάντε new και μη χρησιμοποιείτε char* αλλά string (όταν μάθαμε τα strings, γιατί μέχρι τότε κάναμε char *a = new char[len + 1]) και άλλα τέτοια, γιατί προηγούνται 2 εξάμηνα C οπότε καταλαβαίνεις τι γίνεται...
migf1 Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 Χε χε, ναι καταλαβαίνω (και ξέρω επίσης ) Αν δεν έχεις ευχέρεια χρόνου, τότε δες μήπως τελικά σε συμφέρει να γράψεις την πτυχιακή σου σε C++03. Αν από την άλλη μεριά, η επαφή σου με την C++03 είναι επιφανειακή (οπότε πάλι θα χρειαστεί να μάθεις τα περισσότερα progressively) τότε μάλλον είναι καλύτερη ιδέα να το πιάσεις εξαρχής με C++11. Σε ότι αφορά τώρα την SFML και το OGLplus, εφόσον το έχεις ψάξει και έχεις καταλήξει, εμένα τουλάχιστον μου περισσεύει ΥΓ. Δεν ξέρω αν το έχεις καταλάβει, αλλά είμαι "τραγικός" υπέρμαχος της... ελεύθερης βούλησης
defacer Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 Αυτό που εννοούσα είναι ότι η C++ που βλέπω ότι πρέπει να χρησιμοποιηθεί δεν έχει καμία σχέση με αυτά που διδασκόμασταν (όσον αφορά το STL και γενικότερα τον τρόπο συγγραφής) και ότι πρέπει να μάθω τον καινούριο τρόπο. Αυτό είναι η δυστυχής θεωρητικά αλλά πρακτικά αναπόφευκτη πραγματικότητα. Αν βρεις κάποιον διδάσκοντα που έχει βαθειά θεωρητική και πρακτική γνώση της γλώσσας που διδάσκει αυτό είναι η εξαίρεση στον κανόνα. Και φυσικά το να λέμε ότι σε ένα ή έστω δύο ακαδημαϊκά εξάμηνα "μαθαίνεις τη γλώσσα" είναι τουλάχιστον αστείο ανεξάρτητα από το ποιός διδάσκει. Δεν υπάρχει κανένας μα κανένας απολύτως όμως κανένας λόγος να ασχοληθείς με C++03, το μόνο που θα κάνεις έτσι είναι να βάλεις τρικλοποδιά στον εαυτό σου. Ο κόσμος προχωρά είτε ακολουθήσεις είτε όχι.
migf1 Δημοσ. 29 Μαΐου 2014 Δημοσ. 29 Μαΐου 2014 ... Θα της ρίξω μια καλύτερη ματιά και πολύ πιθανόν να κατευθυνθώ προς τα εκεί (αφήνοντας SDL, OpenGL και σια). ... Τώρα το πρόσεξα αυτό! Σε ότι αφορά το OpenGL, η SFML νομίζω δεν διαφέρει ουσιαστικά από την SDL. Και οι 2 βιβλιοθήκες σου επιτρέπουν να γράψεις OpenGL κώδικα και σου παρέχουν τρόπους να τον "ενσωματώσεις". Νομίζω όμως πως η SFML στο κάνει λίγο πιο εύκολο από την SDL (π.χ. SFML vs SDL) Για shaders όμως, νομίζω πως η SDL δεν έχει κάτι αντίστοιχο αυτού: http://www.sfml-dev.org/tutorials/2.1/graphics-shader.php(ίσως να θυμάμαι λάθος ή ίσως να έχει προστεθεί στην έκδοση 2.0).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα