Ιστορία του Nette

Η αρχή της δημιουργίας του Nette χρονολογείται από το 2004, όταν ο δημιουργός του, David Grudl, άρχισε να αναζητά ένα κατάλληλο framework στο οποίο θα μπορούσε να γράφει εφαρμογές, καθώς η καθαρή PHP δεν ήταν πλέον επαρκής γι' αυτό. Καμία από τις τότε διαθέσιμες λύσεις δεν τον ικανοποιούσε, οπότε άρχισε σταδιακά να σκιαγραφεί τα χαρακτηριστικά ενός νέου framework, το οποίο αργότερα ονομάστηκε Nette.

Εκείνη την εποχή, δεν υπήρχαν ακόμη τα σημερινά frameworks όπως το Symfony, το Laravel ή ακόμη και το Ruby on Rails. Στον κόσμο της Java, το πρότυπο ήταν το framework JSF (JavaServer Faces) και στον ανταγωνιστικό .NET, το ASP.NET Webforms. Και τα δύο επέτρεπαν τη δημιουργία σελίδων χρησιμοποιώντας επαναχρησιμοποιήσιμα UI components. Ο David θεωρούσε τους τρόπους αφαίρεσής τους και τις προσπάθειες δημιουργίας κατάστασης πάνω στο ασταθές πρωτόκολλο HTTP μέσω session ή του λεγόμενου postback ως λανθασμένους και θεμελιωδώς μη λειτουργικούς. Προκαλούσαν πολλές δυσκολίες στους χρήστες και στις μηχανές αναζήτησης. Για παράδειγμα, αν αποθηκεύατε έναν σύνδεσμο, αργότερα με έκπληξη βρίσκατε διαφορετικό περιεχόμενο κάτω από αυτόν.

Η ίδια η δυνατότητα σύνθεσης σελίδων από επαναχρησιμοποιήσιμα UI components γοήτευσε τον David, την ήξερε καλά από το Delphi, ένα τότε δημοφιλές εργαλείο για τη δημιουργία desktop εφαρμογών. Του άρεσαν οι αγορές με opensource components για το Delphi. Προσπάθησε λοιπόν να λύσει το ζήτημα του πώς να δημιουργήσει ένα component framework που, αντίθετα, θα λειτουργούσε σε απόλυτη αρμονία με το ασταθές HTTP. Αναζητούσε μια ιδέα που θα ήταν φιλική προς τους χρήστες, το SEO και τους προγραμματιστές. Και έτσι άρχισε να γεννιέται το Nette.

Το όνομα Nette προέκυψε τυχαία στο μπάνιο, όταν ο συγγραφέας είδε ένα δοχείο με τζελ ξυρίσματος Gillette, γυρισμένο έτσι ώστε να φαίνεται μόνο το llette.

Ακολούθησαν χιλιάδες ώρες έρευνας, σκέψης και ξαναγραψίματος. Σε ένα σκονισμένο γκαράζ σε ένα χωριό κάπου έξω από το Μπρνο, δημιουργήθηκαν τα πρώτα περιγράμματα του μελλοντικού framework. Η βάση της αρχιτεκτονικής έγινε το πρότυπο MVC, το οποίο τότε χρησιμοποιούσε το ξεχασμένο πλέον PHP framework Mojavi και αργότερα έγινε δημοφιλές χάρη στον θόρυβο γύρω από το Ruby on Rails. Μία από τις πηγές έμπνευσης ήταν ακόμη και το ποτέ δημοσιευμένο framework phpBase του Honza Tichý.

Στο blog του συγγραφέα άρχισαν να δημοσιεύονται άρθρα για το επερχόμενο Nette. Αστειεύονταν ότι ήταν vaporware. Στη συνέχεια όμως, τον Οκτώβριο του 2007 στο συνέδριο PHP Seminář της Πράγας, ο David παρουσίασε δημόσια το Nette. Παρεμπιπτόντως, από αυτό το συνέδριο εξελίχθηκε ένα χρόνο αργότερα το WebExpo, αργότερα ένα από τα μεγαλύτερα συνέδρια πληροφορικής στην Ευρώπη. Ήδη τότε, το Nette καυχιόταν για πολλές πρωτότυπες ιδέες, όπως το αναφερόμενο component model, ο αμφίδρομος router, ο συγκεκριμένος τρόπος σύνδεσης μεταξύ των presenters κ.λπ. Είχε φόρμες, λυμένη αυθεντικοποίηση, caching κ.λπ. Όλα αυτά χρησιμοποιούνται στο Nette στην αρχική τους μορφή μέχρι σήμερα.

Στο Nette, αντί του όρου controller χρησιμοποιείται ο όρος presenter, επειδή στον κώδικα υπήρχαν, λέει, πάρα πολλές λέξεις που άρχιζαν με con (controller, front controller, control, config, container, …)

Στα τέλη του 2007, ο David Grudl δημοσίευσε και τον κώδικα και έτσι είδε το φως της δημοσιότητας η έκδοση Nette 0.7. Το framework τράβηξε αμέσως τεράστια προσοχή. Δημιουργήθηκε γύρω του μια ενθουσιώδης κοινότητα προγραμματιστών, η οποία άρχισε να συναντιέται κάθε μήνα στην εκδήλωση Posobota. Στην κοινότητα υπήρχαν πολλές σημερινές προσωπικότητες, για παράδειγμα ο Ondřej Mirtes, δημιουργός του εξαιρετικού εργαλείου PHPStan. Η ανάπτυξη του Nette προχωρούσε γρήγορα και τα επόμενα δύο χρόνια κυκλοφόρησαν οι εκδόσεις 0.8 και 0.9, όπου τέθηκαν οι βάσεις σχεδόν όλων των σημερινών τμημάτων του framework. Συμπεριλαμβανομένων των AJAX snippets, τα οποία προηγήθηκαν κατά 14 χρόνια του Hotwire για το Ruby on Rails ή του Symfony UX Turbo.

Ένα θεμελιώδες πράγμα όμως έλειπε από το τότε Nette. Το Dependecy injection container (DIC). Το Nette χρησιμοποιούσε το λεγόμενο service locator και η πρόθεση ήταν να μεταβεί ακριβώς στην dependecy injection. Αλλά πώς να σχεδιάσεις κάτι τέτοιο; Ο David Grudl, ο οποίος τότε δεν είχε εμπειρία με το DI, πήγε για μεσημεριανό με τον Vašek Purchart, ο οποίος χρησιμοποιούσε το DI για περίπου μισό χρόνο. Συζήτησαν μαζί το θέμα και ο David ξεκίνησε την εργασία στο Nette DI, μια βιβλιοθήκη που ανέτρεψε εντελώς τον τρόπο σκέψης για τον σχεδιασμό εφαρμογών. Το DI container έγινε ένα από τα πιο επιτυχημένα μέρη του framework. Και αργότερα οδήγησε στη δημιουργία δύο spin-offs: της μορφής Neon και της βιβλιοθήκης Schema.

Η μετάβαση στην dependency injection απαίτησε αρκετό χρόνο και η νέα έκδοση του Nette άργησε μερικά χρόνια. Γι' αυτό, όταν τελικά κυκλοφόρησε, έφερε απευθείας τον αριθμό 2. Η έκδοση Nette 1 δηλαδή δεν υπάρχει.

Το Nette το 2012 με την έκδοση 2.0 ξεκίνησε τη σύγχρονη ιστορία του. Έφερε επίσης το Nette Database, μέρος του οποίου ήταν και ένα εξαιρετικά εύχρηστο εργαλείο για την εργασία με βάσεις δεδομένων, που σήμερα ονομάζεται Explorer. Αυτή η βιβλιοθήκη είχε αρχικά προγραμματιστεί από τον Jakub Vrána, γείτονα του David Grudl και δημιουργό του δημοφιλούς εργαλείου Adminer. Την περαιτέρω ανάπτυξή της ανέλαβε στη συνέχεια για τρία χρόνια ο Jan Škrášek.

Το 2014 κυκλοφόρησε το Nette 2.1 και σε σύντομο χρονικό διάστημα ακολούθησε το Nette 2.2. Πώς είναι δυνατόν αυτό; Η έκδοση 2.2 ήταν η ίδια με την έκδοση 2.1, απλώς χωρισμένη σε είκοσι ξεχωριστά πακέτα. Στον κόσμο της PHP, είχε καθιερωθεί το εργαλείο Composer και άλλαξε τον τρόπο θεώρησης της δημιουργίας βιβλιοθηκών. Έτσι, το Nette έπαψε να είναι μονολιθικό και διασπάστηκε σε μικρότερα ανεξάρτητα μέρη. Κάθε ένα με το δικό του αποθετήριο, issue tracker και το δικό του ρυθμό ανάπτυξης και έκδοσης. Έτσι, στο Nette δεν χρειάζεται να συμβαίνουν οι παραλογισμοί που είναι συνηθισμένοι σε μονολιθικά frameworks, όπου κυκλοφορεί μια νέα έκδοση ενός πακέτου, παρόλο που δεν έχει αλλάξει τίποτα σε αυτό. Ο ίδιος ο διαχωρισμός των αποθετηρίων Git περιλάμβανε αρκετές εβδομάδες προετοιμασίας και εκατοντάδες ώρες μηχανικού χρόνου.

Το Nette κατέλαβε επίσης την εκπληκτική 3η θέση στην παγκόσμια δημοσκόπηση για το καλύτερο PHP framework που διοργάνωσε το περιοδικό Sitepoint.