YOLO, αλλά όχι αυτό που νομίζεις! Πως μαθαίνουν να “βλέπουν” οι υπολογιστές

YOLO στην συγκεκριμένη περίπτωση σημαίνει “You Only Look Once”. Άλλη μια ενδιαφέρουσα ομιλία που δείχνει πόσο έχουν εξελιχθεί τα συστήματα αναγνώρισης αντικειμένων από υπολογιστές την τελευταία δεκαετία. Ο Joseph Redmon στο TED2017.

 

Θέλετε και μια πιο αναλυτική εξήγηση; Δείτε και αυτόν εδώ:

Πάρτε και ένα ακόμα εντυπωσιακό βίντεο:

Βασικά θα βρείτε πολλά βίντεο. Δε χρειάζεται να βάλω άλλα. Απλά για λόγους πληρότητας να παραθέσω και τη σελίδα του αλγορίθμου (από τον YOLO τύπο από το πρώτο βίντεο ντε). Στη σελίδα θα βρείτε, μεταξύ άλλων, ένα εντυπωσιακό βίντεο (αναμενόμενο μάλλον). Tip: ρίξτε και μια ματιά στο βιογραφικό!

WordPress: Αλλαγή γραμμής στο βιογραφικό του συντάκτη

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

Θα έχετε παρατηρήσει σε πολλές σελίδες ότι (συνήθως) κάτω από ένα άρθρο αναφέρεται ο συντάκτης μαζί με ένα σύντομο βιογραφικό ή τέλος πάντων κάποιου είδους περιγραφή. Σε σελίδες που έχουν φτιαχτεί με τη χρήση του WordPress το κείμενο αυτό προέρχεται από το πεδίο Βιογραφικά στοιχεία που βρίσκεται στο Προφίλ του χρήστη/συντάκτη.

Βιογραφικά στοιχεία
Βιογραφικά στοιχεία

Το πρόβλημα

Όσες φορές και να πατήσουμε Enter για να αλλάξουμε γραμμή μέσα σε αυτό το πεδίο, όταν αυτό θα μετατραπεί σε html οι αλλαγές γραμμής θα εξαφανιστούν. Το ίδιο θα συμβεί αν αφήσουμε πολλά συνεχόμενα κενά (θα μετατραπούν σε ένα) ή αν πατήσουμε tab.

Για να αλλάξουμε γραμμή σε html θα έπρεπε να χρησιμοποιήσουμε το tag “<br />”. Όμως, ακόμα και αν γεμίσουμε το πεδίο με <br /> δε πρόκειται να δούμε να αλλάζουν οι γραμμές.

Αυτό συμβαίνει, γιατί η συνάρτηση του Worpdress που χρησιμοποιείται συνήθως από τα θέματα (themes) για να δείξει αυτά τα στοιχεία, είναι η the_author_meta  (με όρισμα description), η οποία τυπώνει τα περιεχόμενα του προαναφερθέν πεδίου. Υπάρχει όμως ένα προβληματάκι!  Η συγκεκριμένη συνάρτηση για λόγους ασφαλείας καθαρίζει τα δεδομένα (sanitize) από html tags, με αποτέλεσμα ότι γράψουμε μέσα στο παραπάνω πεδίο να βγει όλο σε μια γραμμή!

Η λύση(;)

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

Αν θέλουμε λοιπόν να έχουμε αλλαγές γραμμών, η λύση είναι να χρησιμοποιήσουμε τη συνάρτηση nl2br της PHP, η οποία μετατρέπει όσες αλλαγές γραμμής βρει σε ένα κείμενο σε <br /> tags της html.

Έτσι, θα πρέπει να ψάξουμε στο κώδικα από το θέμα μας που υπάρχει μια γραμμή σαν τη παρακάτω:

<?php the_author_meta('description'); ?>
.

Επειδή η the_author_meta δεν επιστρέφει τη τιμή του πεδίου αλλά την τυπώνει, θα πρέπει να την αντικαταστήσουμε με την get_the_author_meta που μας επιστρέφει την τιμή. Αυτή θα πρέπει να την περάσουμε μέσα από την nl2br και να τυπώσουμε το αποτέλεσμα (με την echo). Δηλαδή η παραπάνω γραμμή θα γίνει κάπως έτσι:

<?php echo nl2br(get_the_author_meta('description')); ?>
.

Μια καλή περιγραφή μπορείτε να βρείτε και εδώ.

Παρενέργειες

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

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

C++ for dinosaurs σε έντυπη μορφή

Εδώ και λίγο καιρό (όχι και τόσο λίγο είναι η αλήθεια) είναι διαθέσιμο το βιβλίο του φίλου και συναδέλφου Νίκου, “C++ for dinosaurs” και σε έντυπη μορφή (και μέσω Amazon για όποιον το προτιμά!).

Προσωπικά, έχω αγοράσει το βιβλίο του στην έντυπη μορφή, αλλά δεν έχω προλάβει ακόμα να το διαβάσω. Ήδη όμως από τις πρώτες σελίδες είναι ξεκάθαρο σε ποιες περιπτώσεις μπορεί να φανεί χρήσιμο το βιβλίο. Όπως γράφει ο ίδιος στην εισαγωγή του, το βιβλίο απευθύνεται κυρίως σε προγραμματιστές με εμπειρία στη γλώσσα C που θέλουν να χρησιμοποιήσουν κάποιες από τις δυνατότητες της C++ για να κάνουν τον κώδικά τους πιο ευανάγνωστο, γρήγορο και με λιγότερα σφάλματα.

Για όποιον προτιμά τα ebooks, υπάρχει το βιβλίο και σε ηλεκτρονική μορφή.

Αν πάλι δεν είστε σίγουροι, μπορείτε να ρίξετε μια ματιά στο blog του, “C++ Tip Of The Day“, για να πάρετε μια γεύση από τον τρόπο γραφής αλλά και το περιεχόμενο του βιβλίου.

C++ for dinosaurs

Πριν λίγο καιρό, είχα αναφερθεί στη σελίδα του φίλου και συναδέλφου Νίκου, σχετικά με συμβουλές για το πως να χρησιμοποιούμε πιο αποτελεσματικά τη C++.

Πρόσφατα ο Νίκος ολοκλήρωσε τη συγγραφή του πρώτου του βιβλίου με θέμα τη C++, με τίτλο “C++ for dinosaurs“. Αν βρήκατε χρήσιμο το blog του, σίγουρα θα σας αρέσει και το βιβλίο του.

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

Για όσους ενδιαφέρονται, σύντομα θα είναι διαθέσιμη και έντυπη έκδοση του βιβλίου.

RoR – Επιτάχυνση των tests

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

Χρησιμοποιώντας το Spork

Ένας τρόπος να επιταχύνουμε αυτή τη διαδικασία είναι με τη χρήση του Spork. Για να χρησιμοποιήσουμε το Spork θα πρέπει να φορτώσουμε τα κατάλληλα gems στο gemfile μας.

group :development, :test do
  ...
  gem 'spork-rails'
end

Χρησιμοποιούμε το gem ‘spork-rails’ αντί του ‘spork’, γιατί ενώ το Spork υποστηρίζει διάφορα frameworks, η υποστήριξη για Rails αφαιρέθηκε.

Στη συνέχεια τρέχουμε:

bundle install
bundle exec spork --bootstrap

Πριν συνεχίσουμε θα πρέπει να φτιάξουμε τα configuration αρχεία. Για παράδειγμα, αν χρησιμοποιείτε RSpec ως test framework, στο αρχείο /spec/spec_helper.rb θα έχουν προστεθεί αυτόματα 2 block από το Spork. Θα πρέπει να μοιράσουμε τα προυπάρχοντα settings του αρχείου σε αυτά τα 2 blocks. Το πιο εύκολο είναι να τα βάλουμε μέσα στο block Spork.prefork.

Τέλος, για να ολοκληρώσουμε θα πρέπει να τρέξουμε την εντολή ‘spork’. Πριν την τρέξουμε όμως μπορούμε αν θέλουμε να χρονομετρήσουμε τα tests μας για να δούμε τη διαφορά. Για να χρονομετρήσουμε χρησιμοποιούμε την εντολή time, π.χ. ‘time bundle exec rspec’. Αφού ξεκινήσουμε το Spork, μπορούμε να ξανατρέξουμε τα tests και να δούμε πόσο πιο γρήγορα είναι.

Guard και Spork μαζί

Αν χρησιμοποιούμε το Guard για αυτοματοποίηση των tests, τότε για να συνεργαστούν Guard και Spork θα πρέπει να προσθέσουμε άλλο ένα gem.

gem 'guard-spork'

Στη συνέχεια τρέχουμε:

bundle install
bundle exec guard init spork

Αυτό θα προσθέσει κάποια πράγματα στο Guardfile, που αν θέλουμε μπορούμε να τροποποιήσουμε (π.χ. να βάλουμε να ξεκινάει το Spork αυτόματα όταν θα ξεκινάμε το Guard).

Έτσι, έχοντας Guard και Spork εγκατεστημένα μπορούμε να βελτιώσουμε και να επιταχύνουμε το περιβάλλον ανάπτυξής μας, αλλά και ουσιαστικά να κάνουμε τη χρήση tests πιο εύκολη.