Thursday, January 04, 2007

To γκρι πρόβλημα στην Java

Το Swing το οποίο ειναι και το dominant GUI toolkit για τον κόσμο της Java ήταν για πολλούς (και για άλλους παραμένει) ο λόγος που η Java ποτέ δεν έπιασε στο client- side κόσμο.Φυσικά σημαντικό ρόλο έπαιζε και η εικονική μηχανή! Είχαμε λοιπόν ένα αρκετά object oriented framework το οποίο στηριζόταν κάτω σε κλησεις στο παλιότερο AWT + την εικονική μηχανή η οποια σίγουρα δεν ήταν optimized για να δίνει το πλεονέκτημα σε desktop εφαρμογές. Ενω η Java ρόλαρε και ρολάρει άψογα στον κόσμο των Server αφου στατιστικά πια ειναι ένα απο τα πιο δημοφιλή εργαλεία για Business Enterprise Software στον κόσμο του desktop κόντεψε να αφανιστεί.

Τον τελευταίο χρόνο (1-2 ουσιαστικα) γίνεται μια μεγάλη προσπάθεια να δώσουν στην Java και την εικονική μηχανή μια δόση perfomance στο dekstop. Το java 1.6 runtime είναι πραγματικά γρήγορο και έχει δοθεί σημασία στο ιδιο το Swing , στο Look and Feel ανάλογα με το λειτουργικό αλλά και σε νέα framework και τεχνολογίες.

Διαβάζω στο blog του C.Ditzel μια πολύ ενδιαφέρουσα καταχώρηση που με γύρισε τουλάχιστον μία 5ετία πίσω όταν ειχαμε προσπαθήσει να φιάξουμε κάτι σε Swing και το συγκεκριμένο πρόβλημα μόλις είχε αρχήσει να γίνεται το αγαπημένο και μισητό bug για κάθε Swing Java Developer!

The grey- white effect! Ουσιαστιά δεν γίνεται ή μάλλον δεν προλαβαίνει να γίνει render σωστά μια επιφάνεια αν επικαλυφθέι απο άλλο παράθυρο ή αν προσπαθήσεις να την κάνεις resize. Είχε λοιπόν περιοχές που έμενα γκρι ή άσπρες συνήθως ανάλογα με το default χρώμα που θα είχε το placeholder component!

Η έλευση της Java 1.6 επιτέλους λύνει αυτό το μεγάλο και εκνευριστικό πρόβλημα!
Μπορείς να το δείς στο videaki - εδω.

6 comments:

  1. Τους πήρε τόσα χρόνια να προσθέσουν double buffering στο Swing, κι'όμως αυτό δεν είναι παρα η κορυφή του παγόβουνου.

    Τα προβλήματα της Java στο Desktop είναι τεράστια, εαν όχι αξεπέραστα. Κάθε πλατφόρμα είναι ξεχωριστή, με δικές τις νόρμες και δικά της εργαλεία και αισθητική. Τα Look'N'Feels του Swing δεν είναι παρα κακόγουστες αντιγραφές στη καλύτερη, επιφανειακά skins που αμέσως μαρτυρούν τη κατωτερότητα του toolkit έναντι μιας native λύσης. Εφαρμογές σε Swing είναι κακόγουστες, υστερούν σε απόδοση, αισθητική και λειτουργικότητα. Σε οποιαδήποτε πλατφόρμα.

    H λύση SWT είναι επίσης ημίμετρο καθώς προσεγγίζει αλλά δεν φτάνει ποτέ την απόλυτη συμβατότητα σε συνδυασμό με την φορητότητα (γι'αυτό π.χ. εφαρμογές όπως το eclipse ή το azureus είναι τόσο άσχημες σε Mac OS X).

    Το τελικό συμπέρασμα στο οποίο έχω φτάσει είναι πως το κάθε περιβάλλον ανάπτυξης γραφικών εφαρμογών, ακόμη η κάθε - μεγάλη - εφαρμογή σε κάποιες περιπτώσεις, προστάζουν τον δικό τους τρόπο ανάπτυξης και σχεδιασμού. Όταν οι ίδιες οι εταιρίες αγνοούν/παρακάμπτουν τα HIGs τους κανονικότατα κατα βούλησιν, θαρρώ πως είναι πολύ αφελές να περιμένουμε από μια cross-platform εργαλειοθήκη όπως το Swing, που ακόμη στερείται βασικών λειτουργιών, κοινών σε πιο προηγμένες πλατφόρμες, που χρειάστηκε άνω των 6 ετών να αποκτήσει double-buffering, που --- όπως γράφεις --- δεν είναι ούτε κατα διάνοια βασικό μέρος των προσπαθειών ανάπτυξης και χρήσης της Java γενικότερα, να μας δώσει τη λύση.

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

    Όπως και να έχει φοβούμαι πως η Swing παραμένει χλωμή (ή 'γκρί' αν προτιμάς :) ) λύση για ανάπτυξη γραφικών εφαρμογών.

    ReplyDelete
  2. γενικα δεν διαφωνω με αυτα που λες και συμμερίζομαι την άποψη σου. και ειμαι σε κατάστασβη ..ευπροσδετα ειναι οτι καλα έρθουν. αν καταφέρει και κάνει κάτι ..θα αποκτήσω ένα ακόμα εργαλείο..για να κανω κάτι..Αν οχι ε τι ειχαμε τι χάσαμε..παντως θα εχουμε εξελιξεις..ειδικα με προσπαθειες οπως το swing framework και άλλα:

    ReplyDelete
  3. @cosmix

    > όπως το Swing, που ακόμη στερείται
    >βασικών λειτουργιών,

    Όπως;

    ReplyDelete
  4. @πάνος

    Έχω την εντύπωση πως η ερώτηση σου είναι λίγο αδαής (ή προβοκατόρικη)· με συγχωρείς αν κάνω λάθος. Ορίστε ένας μικρός κατάλογος:

    Ελλειπή (εως αναχρονιστικά) components, συχνά απαράδεκτη επίδοση ανεξαρτήτως πλατφόρμας (μέχρι 1.5 --- παραπάνω δεν έχω δεί), κακό interface/integration με Java2D/Java3D APIs, κακή/δύσκολη υποστήριξη τυπογραφίας (βλ. kerning, anti-aliasing), απαράδεκτα πολύπλοκος, μη λειτουργικός και εν πολλοίς ξεπερασμένος τρόπος διάταξης (layout managers). Πάρα πολλά bugs. Γενικότερα ανούσια πολυπλοκότης σε απλά, καθημερινά ζητήματα (κάτι για το οποίο έχει στο παρελθόν κατηγορηθεί και το J2EE γενικότερα).

    Στη περίπτωση του Swing, όλα υποδηλώνουν την γενικότερη αδιαφορία της Sun για το toolkit. Το Swing πιστεύω πως έχει και πάρα πολλά πλεονεκτήματα, όμως έχει μείνει πολύ πίσω και χρειάζεται πολλή δουλειά μέχρι να φτάσει στο σημείο να θεωρείται το toolkit επιλογής πολλών προγραμματιστών desktop εφαρμογών. Ή τέλος πάντων αυτών που τους ενδιαφέρει η εφαρμογή τους να μην θυμίζει (και λειτουργεί όπως) μια εφαρμογή του 1992. Ελπίζω να σε κάλυψα, έστω και μερικώς.

    ReplyDelete
  5. Ναι εγω συμφωνώ είναι κάπως έτσι υπήρχαν αυτές οι ελλείψεις βεβαια γι'αυτο και ο ενθουσιασμός βέβαια..εχουμε κάποιες ΠΟΛΥ σοβαρες εξελιξεις!

    1. Το δικο μου μεγάλο πρόβλήμα ειναι οτι δεν υπήρχε ενα framework για να σου δειξει εναν σωστό τρόπο η εστω να κανει define ενα δικο του και να τον ακολουθήσεις. Υπάρχουν πάρα πολλά καλά και κακά web frameworks στην Java. Ολα σχεδον ολα χρησιμοποιουσαν τα primitive servlerts (βλεπε Swing components) και χτησανε πάνω τους abstraction layers αλλά και πιο ευελικτους μηχανισμους για να κανουν πιο σωστό και πιο ευκολο το web development. Στο swing ρώτα 3 διαφορετικους developers ποιος ειναι ο σωστός τρόπος να κανεις despatch ενα event και να διαχεριστείς χωρίς να κολλήσεις το event despatching Thread και θα σου πει ο καθε ένας ένα διαφορετικό τρόπο..

    Άρα έχουμε λοιπόν

    1.Ελπίζω σύντομα το Framewokr for Swing. ειδαμε απο κον΄τα τον Hans Muller στο Javapolis και πράγματι αυτό που έχει σκεφτεί είναι αυτό που εγώ τουλάχιστον ζητάω!

    http://www.artima.com/lejava/articles/swingframework.html

    2. Integration me Java2d , 3d.
    Εδώ πραγματικά έχουν γινει βήματα τα οποία οκ προς στιγμή δεν μπορείς να πεις οτι έχουν δοθεί στην μάζα των Java Developers αλλά εδώ και 1 χρονο υπάρχουν προσπάθειες απο ομάδες to spread the word .Αστερας σε αυτη την προσπάθεια ο φοβερός πραγματικά γάλλος Romain Guy, (ακόμα φοιτητής). Δημιουργός μαζί με άλλους του γνωστού GUI interface Aerith το οποίο ανεβάζει το swing σε επίπεδο eye candy και functionality σε αρκετά συγχρονα πράγματα.

    http://www.jroller.com/page/gfx?entry=aerith_a_very_cool_swing
    Το blog του ειναι πραγματικά καλό resource για την προσπάθεια ενωποίησης του Swing με το Java 2d, υπάρχεοι (πρόσφατα) και κώδικας διαθέσιμος και σύντομα και βιβλιο.ελπιζω οτι συντομα θα ενσωματωθουν οι τεχνολογίες και τα χαρακτηρισιτκα και σε κάποιο JDK).
    Tο ολο πείραμα έδειξε οτι πράγματι μπορουν να γινουν ολα αυτα!

    Τέλος ξέχνα το Gridbag..(πφφφφφ)
    There is new kid on the block .ονομάζεται GroupLayout και είναι ουσιαστικά το μυαλό πίσω απο τον εξαιρετικής ευελιξίας..GUI builder του Netbeans 5, 5.x) ο οποίοος ακουει στο ονομα Matise.
    http://www.netbeans.org/kb/articles/matisse.html
    It really works..:) επιτέλους ακομα και ο JAva Developer μπορεί αν κάνει rapid prototyping χωρίς την χρήση αλλότριων εργαλείων (χοχοχ). Πραγματικά GUI ευκολα και γρήγορα)


    Indeed to anti aliasing θελει λιγο ακόμα δουλεια αλλά οκ δεν παίζει και τοσο άσχημα! Οσο αναφορα το Look and Feel οκ σιγουρα 100% native δεν θα μπορέσουν ποτε να το κανουν αλλά το έχουν πάρει πρέφα και προσπαθουν.Πχ support για τα Vista το εχουν ξεκινήσει εδώ και καιρό..στο MacOSX το look ειναι πάρα πολυ καλό...κτλ κτλ. Επίσης υπάρχουν λυσεις οπως το JGoodies το οποιο ειναι αρκετά ωραίο και decent

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

    ReplyDelete
  6. Με άλλα λόγια για μένα προσωπικά οπου ποντάρω στρατηγικά ως επαγγελματίας στην Java..και συνειδητά, ολες αυτές οι νέες αλλαγές ειναι πράγματι ευπρόσδεκτες και μου δίνουν την επιλογή σε λιγο καιρό να σκεφτώ να χρησιμοποιήσω την Java σε products και αγορές που για την ώρα λογο τεχνικών δυσκολιών δεν μπορώ να χτυπήσω!

    ReplyDelete