AnINffected wrote:Εσύ τι εργαλείο/α χρησιμοποιείς πιά;
Ξεκίνησα με VB6. Εκείνη την εποχή, ό,τι δεν ήταν
αντικείμενο με
ιδιότητες απλώς δεν υπήρχε για εμένα.

Στη συνέχεια αναβάθμισα στο Visual Studio .NET και πραγματικά έμεινα έκθαμβος από τους νέους designers. Τότε έμαθα και C#. Κάποια στιγμή χρειάστηκε να μάθω να φτιάχνω GUIs σε Visual C++ και MFC για μία εργασία στο μάθημα των Γραφικών. Εκεί ήταν η πρώτη μου επαφή με "μη-πραγματικούς" designers. Ναι, μεν, μπορούσες να κουνάς τα controls πέρα-δώθε, όπως στην VB6, αλλά δεν ήταν
αντικείμενα. Τα events και η μεταβίβαση των τιμών των controls ήταν μία νέα, ξεχωριστή εμπειρία...

Επίσης, χρειάστηκαν μερικές πολύ μικρές επεμβάσεις χειροκίνητα στα resources...
Παράλληλα, για μία άλλη εργασία για το μάθημα των Αλγορίθμων, χρειάστηκε να φτιάξω ένα applet σε Java. Προφανώς applet χωρίς GUI δεν νοείται.

Ξεκίνησα να δω το πιο cutting-edge GUI API της Java, το Swing, το οποίο ήταν ένα μπάχαλο (π.χ. είχε τις constants με all-caps, αντίθετα με άλλα σημεία του API της Java, τα παράθυρα ΔΕΝ έκλειναν by default όταν έκανες κλικ στο Χ τους, και το να τους βάλεις ένα εικονίδιο ήταν ολόκληρη οδύσσεια). Πάλεψα αρκετά με τον designer του NetBeans (3.5 τότε) μέχρι που απογοητεύτηκα, και ξεκίνησα να γράφω το GUI με το χέρι. Αγανάκτησα με τους layout managers, οι οποίοι λες και είχαν δικά τους αισθητικά κριτήρια, άλλαζαν κατά το δοκούν την εμφάνιση της φόρμας. Σε εκείνο το σημείο, δούλευα όντως με
αντικείμενα, αλλά καθόμουν και χειριζόμουν όλα τα events με το χέρι (το οποίο δεν μπορώ να πω ότι το χαιρόμουν και ιδιαίτερα). Επίσης το Swing εμφανισιακά ήταν... πολύ κάτω των προσδοκιών μου (Java 1.4.1 τότε κι όλας γαρ) και το γύρισα σε AWT, που τουλάχιστον ήταν κάπως πιο native (και δούλευε και με την Microsoft VM που τότε είχε το 95% του κόσμου), αλλά αυτό είχε άλλες τραγικές ελλείψεις (π.χ. δεν είχε MsgBox!!

). Κάπου εδώ τελείωναν τα αντικείμενα για εμένα...
Κάποια στιγμή της ζωής μου με είχε πιάσει μία κρίση με το DirectX, και ξεκίνησα και έγραφα κώδικα σε απλή ταπεινή C, και χύμα στο Win32 API. Εκεί ανακάλυψα ότι ακόμα και τα controls δεν ήταν στην πραγματικότητα controls αλλά... παράθυρα, και μάλιστα πλήρη, με χερούλια (
hWnds)... Ευτυχώς, αυτή η παραζάλη μου πέρασε γρήγορα (τότε έγραφα πλέον όλα τα resources με το χέρι, και για να φτιάξω ένα, μοναδικό, άδειο, ταπεινό παραθύρι, το οποίο να έχει απλώς ένα ελεεινό title bar έπρεπε να γεμίσω 3
structs και να καλέσω καμιά ντουζίνα συναρτήσεις

). Πέρασα φευγαλέα και από το Qt toolkit και το KDevelop, και το Gtk+ και το Glade, καθώς και άλλα λιγότερο γνωστά toolkits για Linux.
Αργότερα ασχολήθηκα με εφαρμογές με GUI σε
Symbian OS &
Series 60. Εκεί μόνο editor υπήρχε, και καθόλου designer (αργότερα βγήκε ένας ποταπός από την Borland, ο οποίος δεν δουλεύει και πολύ καλά). Τα resources όλα με το χέρι, το ίδιο και ο κώδικας, το documentation ανύπαρκτο (η φτάση trial and error περιγράφει πλήρως την development phase), αλλά τουλάχιστον όλα είναι
αντικείμενα σε C++ και όχι
structs σε C. Αν έπρεπε να διαλέξω κάτι από τα παραπάνω, αυτό θα ήταν η C# και το VS.NET, χωρίς δεύτερη σκέψη.
AnINffected wrote:Απορία: Τί είναι rich client;
Μία εφαρμογή για rich client είναι αυτή που τρέχει natively (ή, τέλος πάντων, σχεδόν natively) πάνω από ένα "πλήρες" λειτουργικό, και έχει στη διάθεσή της ένα ευρύ φάσμα τάξεων για να χρησιμοποιήσει, για παράδειγμα το Microsoft Word. Έτσι μεταφέρεται ένα μεγάλο μέρος της πολυπλοκότητας στον client. Άλλες εφαρμογές, που αναφέρονται καμιά φορά ως thin client, είναι εφαρμογές που για να εκτελεστούν, ο πελάτης διαθέτει ένα bare-bones λειτουργικό & shell και το μόνο που μπορεί να κάνει είναι Remote Desktop Connection σε έναν server (π.χ. ο client τρέχει Windows CE και ο server Windows Server 2000/2003). Σε αυτή την περίπτωση η πολυπλοκότητα μεταφέρεται στον server. Άλλο παράδειγμα είναι οι περισσότερες web εφαρμογές που εκτελούνται στο "σπαρτιάτικο" περιβάλλον ενός browser, όπως τα διάφορα webmail services. Εξαίρεση, η οποία θολώνει το τοπίο και δεν ξεκαθαρίζει τι είδους είναι αποτελεί το
GMail και τα
Google Maps.
AnINffected wrote:Το πόσο βάρος θα ρίξεις σε CPU cycles ή στο ανθρωποκεντρικό κομμάτι εξαρτάται από την εκάστοτε εφαρμογή.Όπως λέει και ο κ. Μαλεύρης στα Θέματα Τεχν.Λόγ. στο σύστημα ενός αεροδρομίου που βρίσκεται σε συνθήκες κανονικής λειτουργίας σ'ενδιαφέρουν οι κύκλοι και όχι το interface ή πόσο καθαρογραμμένος είναι ο κώδικας.!Χωρίς αυτό να σημαίνει οτι η αναγνωσιμότητα και η συντηρισιμότητα έρχονται σε δεύτερη μοίρα, καθώς παίζουν σημαντικότατο ρόλο σε κάθε έργο.
Όμως ο έξυπνος προγραμματισμός σε καμία περίπτωση δεν υπάρχει μόνο για τα μάτια του συγγραφέα του: υπάρχει για να επαναχρησιμοποιείται και για να προωθεί την εξέλιξη!Αντίθετα η συντηρησιμότητα, η αναγνωσιμότητα κλπ. δεν είναι εξελίξιμοι τομείς από project σε project (δεν είναι static

) .Γι'αυτό και νομίζω πως απο τη μεριά του ο HdkiLLeR πολύ καλά κάνει και ενδιαφέρεται για την ταχύτητα.
Άσε που δεν πρέπει να υποτιμούμε τα κυκλάκια...Με κάθε γραμμή κώδικα, τα συνολικά CPU cycles στην ουσία πολλαπλασιάζονται!Όπως δεν πρέπει να υποτιμάς εναν αλγόριθμο που έχει εκθετικό χρόνο εκτέλεσης.
Δεν είπα ότι θα χρησιμοποιούσα ποτέ εκθετικούς αλγορίθμους ελαφρά τη καρδία, ή ότι θα τα άφηνα όλα στην τύχη τους, γι' αυτό άλλωστε τόνισα
σε βαθμό που δεν επηρεάζει τους στόχους μίας εφαρμογής ότι θα προτιμούσα την συντηρησιμότητα/αναγνωσιμότητα. Αντίστοιχα προβλήματα με αυτά που αναφέρεις υπάρχουν και στην αντίθετη περίπτωση (π.χ. θυμάμαι στην Επικοινωνία Ανθρώπου Υπολογιστή μας είχαν πει για ένα πυρινικό εργοστάσιο στις ΗΠΑ που οδηγήθηκε σε meltdown επειδή δεν είχε προσεγμένο interface η εφαρμογή διαχείρισής του).