Γράψτε ταυτόχρονη εφαρμογή με Erlang (και Elixir)

Αποκάλυψη: Η υποστήριξή σας βοηθά στη διατήρηση της λειτουργίας του ιστότοπου! Κερδίζουμε ένα τέλος παραπομπής για ορισμένες από τις υπηρεσίες που προτείνουμε σε αυτήν τη σελίδα.


Το Erlang είναι μια γλώσσα προγραμματισμού γενικής χρήσης που έχει σχεδιαστεί για την κατασκευή ταυτόχρονων εφαρμογών.

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

Ερλάνγκ και Ελιξίρ

Μερικά από τα χαρακτηριστικά που κάνουν το Erlang ελκυστικό για τους σύγχρονους προγραμματιστές περιλαμβάνουν:

  • Ταυτόχρονη, επιτρέποντας στα προγράμματα Erlang να δέχονται είσοδο από πολλές πηγές και να λειτουργούν στο κατανεμημένο περιβάλλον.

  • Ανοχή σφαλμάτων, επιτρέποντας στα συστήματα να συνεχίσουν να λειτουργούν ακόμα και όταν κάποια στοιχεία του προγράμματος αποτυγχάνουν ή είναι λάθη, καθιστώντας το μια εξαιρετικά χρήσιμη γλώσσα για πάντα ενεργά περιβάλλοντα, όπως μια κοινότητα Ιστού ή μια πλατφόρμα τηλεπικοινωνιών.

  • Φόρτωση καυτού κώδικα, επιτρέποντας την τροποποίηση του κώδικα και τα προγράμματα ενημερώνονται χωρίς να χρειάζεται να σταματήσετε ή να επανεκκινήσετε το σύστημα.

  • Μετάδοση μηνυμάτων παρά κοινές μεταβλητές, επιτρέποντας σε διαδικασίες να επικοινωνούν με υψηλότερο βαθμό ταυτόχρονης.

  • Συλλογή απορριμμάτων, παρέχοντας αυτόματη διαχείριση μνήμης για βελτιωμένη ταχύτητα και απόδοση.

Το Erlang δεν είναι τόσο εύκολο να μεταβείτε σε ορισμένες γλώσσες προγραμματισμού, καθώς η σύνταξη και ο λειτουργικός σχεδιασμός είναι εξαιρετικά μοναδικοί και δημιουργούν μια απότομη καμπύλη μάθησης για νέους προγραμματιστές.

Ιστορία

Η γλώσσα Erlang αναπτύχθηκε για πρώτη φορά το 1986 από τους υπαλλήλους της Ericsson Joe Armstrong, Robert Virding και Mike Williams.

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

Η πρώτη έκδοση του Erlang εφαρμόστηκε στο Prolog, αλλά αυτό αποδείχθηκε πολύ αργό για ανταλλαγές τηλεφώνου. Για να το λύσει αυτό, η ομάδα ανέπτυξε την εικονική μηχανή BEAM το 1992.

Η BEAM συνέταξε τον κωδικό Erlang στο C με πολύ πιο γρήγορο ρυθμό, επιτρέποντας στον Erlang να μετακινηθεί γρήγορα από μια πρωτότυπη γλώσσα σε πραγματικές εφαρμογές. Το 1995, η Erlang ενσωματώθηκε στην ανταλλαγή ATM, AXD.

Ωστόσο, το 1998, η Ericsson Radio Systems απαγόρευσε τη χρήση του Erlang σε οποιαδήποτε νέα προϊόντα καθώς προσπάθησε να μεταφέρει όλα τα προϊόντα σε μη ιδιόκτητες γλώσσες.

Η νέα πολιτική ώθησε τον Joe Armstrong, μεταξύ άλλων προγραμματιστών Erlang, να παραιτηθεί και τελικά οδήγησε την ομάδα να απελευθερώσει τον Erlang στον κόσμο ανοιχτού κώδικα αργότερα εκείνο το έτος.

Όχι πλέον ιδιόκτητο προϊόν, και κερδίζοντας έλξη στον κόσμο των τηλεπικοινωνιών, η Ericsson ανέστρεψε αργότερα τη στάση της απέναντι στον Erlang και επαναπροσέγγισε τον Armstrong.

Η Erlang χρησιμοποιείται πλέον ενεργά από εταιρείες τηλεπικοινωνιών παγκοσμίως, συμπεριλαμβανομένων των T-Mobile, Whatsapp, Ubiquiti και IDT Corp. Η Ericsson συνεχίζει να διατηρεί τη γλώσσα και τη χρησιμοποιεί στους κόμβους υποστήριξης της Ericsson και στα δίκτυα κινητής τηλεφωνίας, συμπεριλαμβανομένων των δικτύων LTE τους.

Πόροι

Δεδομένης της απίστευτης ανάγκης για ταυτόχρονο προγραμματισμό, καθώς οι τεχνολογίες που βασίζονται στο διαδίκτυο και οι κινητές συσκευές επεκτείνονται συνεχώς, η Erlang συνεχίζει να αυξάνεται σε δημοτικότητα και πολλοί σοβαροί προγραμματιστές κάνουν τη μετάβαση.

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

  • Erlang.org: ο επίσημος ιστότοπος της Erlang, αυτή η σελίδα περιλαμβάνει λήψεις λογισμικού, τεκμηρίωση και οδηγούς χρήστη, συνδέσμους προς διαδικτυακούς πόρους και κοινότητες, καθώς και πληροφορίες σχετικά με τις πρόσφατες ειδήσεις και τις επερχόμενες εκδηλώσεις Erlang.

  • Erlang Central: αυτός ο ιστότοπος με γνώμονα την κοινότητα διαθέτει όλα όσα χρειάζεστε για να ξεκινήσετε και να συνεχίσετε να χτίζετε τις γνώσεις σας σχετικά με το Erlang. Φιλοξενεί σεμινάρια, βίντεο, ένα Wiki, έναν πίνακα εργασίας και ένα φόρουμ κοινότητας.

  • Κυρίως Erlang: Ένα κανονικό podcast αφιερωμένο σε όλα τα πράγματα Erlang. Συζητούν βασικές έννοιες προγραμματισμού, συνέντευξη βασικών καινοτόμων και προσφέρουν συμβουλές σε νέους και έμπειρους προγραμματιστές Erlang.

  • Erlang Factory: αυτό το ετήσιο τεχνικό συνέδριο συγκεντρώνει προγραμματιστές Erlang από όλο τον κόσμο για να συζητήσουν νέες καινοτομίες και θεωρίες και προσφέρει μια σειρά προαιρετικών τριών ημερών εντατικών μαθημάτων κατάρτισης.

Βιβλία

Το Erlang είναι αρκετά διαφορετικό από τις περισσότερες γλώσσες και ακόμη και έμπειροι προγραμματιστές μπορεί να θέλουν να έχουν έναν εύχρηστο οδηγό για να παρακολουθούν μερικές από τις εκκεντρότητες του. Είτε προγραμματίζετε εδώ και χρόνια είτε προσπαθείτε να σχεδιάσετε την επόμενη μεγάλη εφαρμογή για κινητά, υπάρχει ένας τίτλος Erlang εκεί έξω:

  • Προγραμματισμός Erlang: Λογισμικό για έναν ταυτόχρονο κόσμο από τον Joe Armstrong: γραμμένο από έναν από τους αρχικούς συγγραφείς του Erlang, αυτός είναι ο οριστικός οδηγός για τη γλώσσα και τη χρήση της σε ταυτόχρονα περιβάλλοντα όπως εφαρμογές cloud, παιχνίδια πολλαπλών χρηστών και κοινότητα ιστοσελίδες. Το βιβλίο έχει σχεδιαστεί για άτομα με μικρή προηγούμενη εμπειρία σε λειτουργικό ή παράλληλο προγραμματισμό και διδάσκει αυτές τις έννοιες μέσω μαθημάτων και πραγματικών παραδειγμάτων.

  • Δημιουργία εφαρμογών ιστού με την Erlang από τον Zachary Kessin: σχεδιασμένο για έμπειρους προγραμματιστές ιστού με βασικές γνώσεις Erlang, αυτό το βιβλίο καθοδηγεί τους προγραμματιστές μέσω μιας σειράς απλών έργων προγραμματισμού διαδικτυακών υπηρεσιών, προετοιμάζοντας τους να δημιουργήσουν τις δικές τους εφαρμογές διαδικτύου και να τις αποκτήσουν online.

  • Μάθετε εσένα Erlang για μεγάλο καλό! Από τον Fred Herbert: όπως υποδηλώνει ο χιουμοριστικός τίτλος, αυτό το βιβλίο παραδέχεται ευτυχώς ότι η σύνταξη του Έρλανγκ είναι μη συμβατική, οι δομές δεδομένων του είναι ασυνήθιστες και το σύστημα τύπου του είναι γενικά βλαβερό για πολλούς νεοεισερχόμενους – γι ‘αυτό ακριβώς χρειάζεστε έναν οδηγό για το ασυνήθιστο , αλλά ισχυρές, συμβάσεις. Ξεκινά αργά, με πολύ βασικές τεχνικές, και ενσωματώνει πιο περίπλοκες έννοιες προγραμματισμού καθώς ο αναγνώστης προσαρμόζεται στις περιπλοκές της νέας γλώσσας. Εάν δεν χρειάζεστε ένα φυσικό αντίγραφο, ο συγγραφέας έχει επίσης διαθέσει το βιβλίο δωρεάν στο διαδίκτυο.

  • Παρουσιάζοντας τον Erlang: Ξεκινώντας από τον λειτουργικό προγραμματισμό από τον Simon St Laurent: Αυτό το βιβλίο αφιερώνει πολύ χρόνο στην εγκατάσταση και το κέλυφος της Erlang, διασφαλίζοντας ότι οι νέοι προγραμματιστές (ή αυτοί που είναι νέοι στην Erlang) είναι απολύτως άνετοι με τη διεπαφή της γραμμής εντολών και στη συνέχεια συνεχίζονται να διασπάσει τη γλώσσα σε πολύ βασικές έννοιες και να τις επιδείξει μέσω της δημιουργίας απλών προγραμμάτων.

  • Σχεδιασμός για δυνατότητα κλιμάκωσης με Erlang / OTP από τους Cesarini και Vinoski: αυτό το βιβλίο προορίζεται για έμπειρους προγραμματιστές Erlang που θέλουν να επεκτείνουν την κατανόησή τους και να χρησιμοποιήσουν την πλατφόρμα Open Telecom (OTP) για να σχεδιάσουν και να κατασκευάσουν συστήματα εμπορικής ποιότητας που είναι τόσο περίπλοκα όσο και επεκτάσιμα.

Beyong Erland: Ελιξίρ

Το Elixir είναι μια σχετικά νέα γλώσσα, αλλά έχει μακρά ιστορία. Και όλα ξεκίνησαν με τον Έρλανγκ.

Ιστορικό Exlixer

Από τα μέσα της δεκαετίας του 1980, ο Έρλανγκ έκανε καλή δουλειά από αυτό που είχε σχεδιαστεί να κάνει, σχεδιάζοντας κυρίως εφαρμογές τηλεφωνίας. Αλλά προχωρήστε γρήγορα τρεις δεκαετίες και σκεφτείτε τις ανάγκες των εξαιρετικά επεκτάσιμων εφαρμογών Ιστού.

Το Pinterest, για παράδειγμα, παρέχει 14.000 ειδοποιήσεις ανά δευτερόλεπτο. Το Facebook πρέπει να λαμβάνει ενημερώσεις από και να προωθεί μηνύματα σε 1,6 δισεκατομμύρια (με B!) Ενεργούς χρήστες. Αυτό το είδος υψηλής ταυτότητας και υψηλής διαθεσιμότητας είναι ακριβώς αυτό που σχεδιάστηκε για την Erlang.

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

Αποδεικνύεται ότι ο Έρλανγκ είναι πραγματικά δύσκολο να διαβάσει και να γράψει. Αυτό δεν προκαλεί έκπληξη αφού αναπτύχθηκε πριν από δεκαετίες. Αυτό ήταν πριν από το “διασκεδαστικό στη χρήση” ήταν ένα σημαντικό ζήτημα στο σχεδιασμό της γλώσσας.

Το Erlang δεν είναι κατάλληλο για τη γενιά προγραμματιστών που μεγάλωσαν στο Ruby και στο JavaScript. Εκτός από τη χρηστικότητα, η Erlang δεν διαθέτει όλες τις δυνατότητες που ενδέχεται να απαιτούνται για σύγχρονες εφαρμογές ιστού.

Έτσι, το 2012, ο José Valim δημιούργησε το Elixir. Ο κωδικός Elixir μεταγλωττίζεται στο Erlang bytecode και εκτελείται στον χρόνο εκτέλεσης Erlang. Μπορείτε ακόμη να συμπεριλάβετε τον κωδικό Erlang απευθείας στο Elixir (κάπως ανάλογα με τον τρόπο με τον οποίο μπορείτε να συμπεριλάβετε JavaScript στο CoffeeScript).

Ο Valim ήταν μέλος της ομάδας ανάπτυξης του Ruby on Rails, και μάλιστα συνέταξε ένα βιβλίο για την ανάπτυξη του Rails. Η ομάδα του Ruby on Rails παίρνει πολύ σοβαρά την εμπειρία του προγραμματιστή και αυτό το ζήτημα επηρέασε το σχεδιασμό του Elixir.

Η σύνταξη είναι πολύ παρόμοια με την Ruby και είναι πολύ πιο ευανάγνωστη από την Erlang. Εκτός από την ευκολότερη σύνταξη, το Elixir επεκτείνει τις δυνατότητες του Erlang ώστε να περιλαμβάνει (μεταξύ άλλων) μεταπρογραμματισμό, πολυμορφισμό και ενσωματωμένη τεκμηρίωση.

Σύντομη εισαγωγή στον λειτουργικό προγραμματισμό

Το Elixir, όπως και η Erlang, είναι μια λειτουργική γλώσσα προγραμματισμού. Αυτό είναι λίγο διαφορετικό από τις περισσότερες άλλες γλώσσες, οι οποίες είναι σχεδόν όλες επιτακτικές και συνήθως αντικειμενοστραφείς.

Οι περισσότερες γλώσσες προγραμματισμού έχουν κάποιο είδος σύνταξης μπλοκ κώδικα που ονομάζεται «λειτουργία». Ή, σε ορισμένες αντικειμενοστρεφείς γλώσσες ονομάζονται «μέθοδοι», αλλά όλοι γνωρίζουν ότι μια μέθοδος είναι απλώς μια «λειτουργία» που συνδέεται με ένα αντικείμενο.

Αλλά είναι μια συνάρτηση πραγματικά μια συνάρτηση?

Στην ανάπτυξη λογισμικού, έχουμε συνηθίσει να λειτουργούμε κάνοντας κάτι. Τα αποκαλούμε αυτά τα πράγματα «παρενέργειες».

Αλλά στα μαθηματικά, οι συναρτήσεις δεν έχουν παρενέργειες. Δεν ορίζετε έναν κύκλο με μια συνάρτηση που απεικονίζει όλα τα σημεία ενός κύκλου και αλλάζει επίσης τον αριθμό μαθημάτων για την Εισαγωγή στην Υποθετική Γεωμετρία.

Στα μαθηματικά, μια συνάρτηση είναι ντετερμινιστική. δεδομένης οποιασδήποτε συγκεκριμένης εισόδου x, θα επιστρέφει πάντα την ακριβή έξοδο y και δεν θα κάνει τίποτα άλλο.

Με την αποδοχή παρενεργειών στον προγραμματισμό, εισάγουμε την κατάσταση – την τρέχουσα κατάσταση του περιβάλλοντος προγράμματος που εκτελείται. Και το πρόβλημα με την κατάσταση είναι ότι μπορεί να αλλάξει με την πάροδο του χρόνου.

Μια μεταβλητή μπορεί να σημαίνει ένα πράγμα τώρα και κάτι άλλο δέκα λεπτά από τώρα. Και αυτό σημαίνει ότι μια συγκεκριμένη συνάρτηση με είσοδο x μπορεί να επιστρέψει δύο διαφορετικές τιμές του y σε δύο διαφορετικούς χρόνους.

Είναι αυτό πρόβλημα? Αυτο εξαρταται. Καμία από τις πιο δημοφιλείς γλώσσες ανάπτυξης δεν είναι καθαρά λειτουργική, οπότε είναι σαφώς δυνατό να δημιουργήσετε όλα τα είδη πραγμάτων (ή, σχεδόν τα πάντα) χρησιμοποιώντας γλώσσες που βασίζονται σε παρενέργειες και σε παγκόσμια κατάσταση.

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

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

Ο λειτουργικός προγραμματισμός επιδιώκει να αποφύγει όλα αυτά τα προβλήματα με το να είναι απάτριδες. Ένα λειτουργικά σχεδιασμένο πρόγραμμα είναι μια συλλογή λειτουργιών που είναι εντελώς ντετερμινιστικές, πράγμα που σημαίνει ότι το σύστημα στο σύνολό του είναι ντετερμινιστικό. Δεδομένης οποιασδήποτε συγκεκριμένης εισόδου, η έξοδος είναι εγγυημένη.

Αυτό το είδος μαθηματικής καθαρότητας υπήρξε από καιρό ενδιαφέρον για τους ακαδημαϊκούς επιστήμονες υπολογιστών, αλλά ο πραγματικός κόσμος της ανάπτυξης λογισμικού ήταν σε μεγάλο βαθμό αδιάφορος – μέχρι ξαφνικά, λόγω των αναγκών του Διαδικτύου, όλοι ενδιαφέρθηκαν.

Ο λειτουργικός προγραμματισμός είναι μια από τις πιο σημαντικές τρέχουσες τάσεις στην ανάπτυξη εφαρμογών ιστού.

Λειτουργικοί πόροι προγραμματισμού

Εάν θέλετε πραγματικά να κάνετε το κεφάλι σας γύρω από το Elixir, θα πρέπει να κάνετε το μυαλό σας γύρω από το Functional Programming. Εδώ πρέπει να ξεκινήσετε.

  • Άρθρα

    • Λειτουργικό άρθρο προγραμματισμού στη Wikipedia: μια πολύ σε βάθος επισκόπηση του θέματος.

    • Μην φοβάστε τον λειτουργικό προγραμματισμό: μια σχετικά εύκολα κατανοητή εξήγηση του λειτουργικού προγραμματισμού, γραμμένη για προγραμματιστές JavaScript.

    • Μια πρακτική εισαγωγή στον λειτουργικό προγραμματισμό

    • Βασικά στοιχεία λειτουργικού προγραμματισμού: Τι είναι όλα?

    • Τι είναι ο λειτουργικός προγραμματισμός?.

  • Βίντεο

    • Λειτουργικός προγραμματισμός; Τι? Γιατί; Πότε?

    • Λειτουργικός προγραμματισμός από τις πρώτες αρχές

    • Η χαρά του λειτουργικού προγραμματισμού

    • Λίστα αναπαραγωγής: Λειτουργικός προγραμματισμός – Επεξήγηση βασικών εννοιών.

  • Βιβλία

    • Αμιγώς λειτουργικές δομές δεδομένων

    • Αλγόριθμοι: μια λειτουργική προσέγγιση προγραμματισμού

    • Εισαγωγή στον Λειτουργικό Προγραμματισμό μέσω του Λάμδα Λογισμού

    • Λειτουργική σκέψη: Παράδειγμα Over Syntax

    • Γίνοντας λειτουργικός

    • Διακριτά μαθηματικά και λειτουργικός προγραμματισμός.

Πόροι Elixir

Υπάρχουν πολλοί πόροι σε πολλές μορφές για να σας βοηθήσουν να κυριαρχήσετε στο Elixir.

Διαδικτυακοί πόροι

Το πρώτο μέρος για να ξεκινήσετε να ψάχνετε στο Elixir είναι ο επίσημος ιστότοπος της γλώσσας Elixir.

Σεμινάρια
  • Επίσημος οδηγός έναρξης

  • 30 Ημέρες Ελιξίρης

  • Σχολή Elixir: Μαθήματα σχετικά με τη γλώσσα προγραμματισμού Elixir.

  • Οδηγός βίντεο για το Elixir

  • Udestudes για το Elixir

  • Φύλλο εξαπάτησης Elixir.

Εργαλεία
  • Phoenix: ένα πλαίσιο ανάπτυξης ιστού για το Elixir. Και μην χάσετε αυτό το υπέροχο βιβλίο για το Phoenix που συν-συγγραφεί ο δημιουργός του Phoenix και ο δημιουργός του Elixir.

  • Φοβερό Elixir: λίστα εκπληκτικών έργων για το Elixir με επιμέλεια από την κοινότητα.

Κοινότητα και συνεχής μάθηση
  • Φόρουμ Elixir

  • Ελιξίρ Subreddit

  • Η κρήνη Elixir

  • Εβδομαδιαίο Digest Elixir

  • Ραντάρ Ελιξίρ.

Βιβλία για το Elixir

  • Προγραμματισμός Elixir: Λειτουργικό |> Ταυτόχρονη |> Ρεαλιστικό |> Διασκέδαση

  • Μεταπρογραμματισμός Elixir: Γράψτε λιγότερο κώδικα, κάντε περισσότερα (και διασκεδάστε!)

  • Η ελιξίρη σε δράση

  • Παρουσιάζοντας το Elixir: Ξεκινώντας στον Λειτουργικό Προγραμματισμό

  • Μαθαίνοντας το Elixir

  • Βιβλίο μαγειρικής Elixir.

Πρέπει να μάθω το Elixir?

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

συμπέρασμα

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

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

Αλλά μπορεί να είναι καλύτερο να επικεντρωθούμε στο Elixir. Εξαρτάται από το τι ακριβώς θέλετε να κάνετε. Ανεξάρτητα, είναι και οι δύο υπέροχες γλώσσες.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map