Δημιουργώντας ένα self referential tweet

Χθες είδα ένα tweet από τον Διομήδη Σπινέλλη σχετικά με έναν διαγωνισμό που άρχισε o Mark Reid, την δημιουργία ενός self referential tweet. Ως self referential tweet ορίζεται ένα tweet που περιέχει μέσα το link προς τον εαυτό του, δηλαδή ένα link της μορφής http://www.twitter.com/username/status/123456789 όπου 123456789 είναι το id του tweet. Σκέφτηκα ότι είναι ωραίος σαν διαγωνισμός οπότε αποφάσισα να κάνω και εγώ ένα δικό μου. Επειδή παρακάτω κάνω μία αναλυτική περιγραφή και έτσι και αυτό το post βγήκε αρκετά μεγάλο σε μέγεθος, όποιοι θέλουν μόνο να κάνουν download το πρόγραμμα μπορούν να πάνε στην σχετική σελίδα.

Αρχικά δημιούργησα ένα νέο account, το selfreftweet, για να μην πάρουν όλοι οι followers μου όλα τα δοκιμαστικά tweets, νομίζω ότι θα ενοχλούσε τους πάντες. Χρησιμοποιώντας το twitter api έκανα μερικά updates για να δω ποια είναι η μορφή των id. Ήμουν σχεδόν σίγουρος ότι παίρνουν σειριακά τιμές μιας και θυμάμαι από πιο παλιά το γνωστό integer overflow problem, κάτι σαν το doomsday του twitter, όπου θα γινόταν post το tweet με id 2^{31} - 1, δηλαδή με τον μεγαλύτερο αριθμό που μπορεί να αποθηκεύσει ένας unsigned 32bit integer. Εάν εσωτερικά το twitter αποθήκευε τα ids ως 32bit integers τότε στο επόμενο tweet θα είχαμε overflow και θα άρχιζαν τα ids ξανά από το 0! Έτσι έτρεξα μερικές φορές το:

curl -u user:password -d «status=Self Ref tweet» http://twitter.com/statuses/update.xml; curl -u user:password -d «status=Self Ref tweet» http://twitter.com/statuses/update.xml

Να σημειώσω ότι το έτρεξα σε αυτή τη μορφή ώστε η χρονική διάρκεια ανάμεσα στα δύο tweets να είναι όσο το δυνατόν περισσότερο σταθερή. Βλέποντας τις διαφορές ανάμεσα στα ids παρατήρησα ότι ήταν περίπου 200. Αλλά δεν ήταν σταθερό. Και μάλιστα μπορεί σε 3 συνεχόμενες φορές να ήταν περίπου 190 και στις επόμενες 3 210. Σκέφτηκα ότι ήταν καιρός να χρησιμοποιήσω κάποια γλώσσα προγραμματισμού για να πετύχω όσο το δυνατόν μεγαλύτερη ακρίβεια και διάλεξα την perl που την θέωρω την καλύτερη για αυτή τη δουλειά. Έγραψα ένα απλό πρόγραμμα που κάνει μερικά updates και μου δείχνει τις διαφορές και ξαναπαρατήρησα το ίδιο πράγμα. Αυτό που κατάλαβα είναι ότι υπάρχουν διαστήματα όπου στο twitter έρχονται πιο μαζικά tweets ενώ υπάρχουν άλλα που το arrival rate μειώνεται. Ίσως αυτό να οφείλεται και στο ίδιο το twitter, γενικώς έχω παρατηρήσει «περίεργες» συμπεριφορές, όπως αυτή που θα αναφέρω και παρακάτω.

Σκέφτηκα να βάλω μπρος τα μαθηματικά. Να χρησιμοποιήσω την διαφορά των ids από μερικά συνεχόμενα tweets και μετά με χρήση διακριτών παραγώγων να δω τον ρυθμό μεταβολής της. Έτσι θα έπρεπε να κάνω ένα tweet το οποίο θα είχε id ίσο με το id του προηγούμενου tweet προσθέτοντας την διαφορά των δύο προηγούμενων και τον ρυθμό μεταβολής. Αλλά πριν προχωρήσω στον υπολογισμό των διακριτών παραγώγων σκέφτηκα κάτι πολύ πιο απλό. Να στείλω μερικά tweets και να μετρήσω τις διαφορές των ids. Μετά να βγάλω έναν μέσο όρο και να χρησιμοποιήσω αυτό σαν σταθερή διαφορά.

Και αυτό έκανα στην πρώτη έκδοση του προγράμματος. Έστειλα 10 tweets και χρησιμοποιώντας την μέση διαφορά έστειλα ακόμη ένα. Στην συνέχεια το ρύθμισα ώστε στην περίπτωση που δεν πετύχει να παίρνει το id του νέου tweet και με βάση την προηγούμενη μέση διαφορά να στέλνει ακόμη ένα. Και αυτό το έκανε 10 φορές. Την πρώτη φορά που το δοκίμασα έπεσα έξω κατά 1! Αλλά αυτό που παρατήρησα είναι ότι η διαφορά στα τελευταία tweets πάντα μεγάλωνε. Ξαναέτρεξα μία φορά το πρόγραμμα και πέτυχα αυτό που περίμενα!

Βέβαια είχα και αρκετή τύχη. Γι’ αυτό θέλησα να μειώσω αυτές τις διαφορές. Το μόνο που έπρεπε να κάνω είναι κάθε φορά που δημιουργώ ένα νέο tweet αλλά δεν έχει το σωστό id, να το χρησιμοποιώ για να υπολογίσω την νέα μέση διαφορά αγνοώντας το id του πιο παλιού tweet. Έτσι θα είχα μια πιο αντιπροσωπευτική μέση διαφορά για εκείνη τη στιγμή. Σε αυτή τη δεύτερη έκδοση είχα πολύ καλύτερα αποτελέσματα.

Στο τέλος πρόσθεσα και ένα τμήμα κώδικα το οποίο διαγράφει τα δοκιμαστικά tweets. Και εδώ είναι το πρόβλημα του twitter api. Όπως αναφέρεται στην σχετική σελίδα:

Twitter currently applies limits to any person who reaches:

  • 1,000 total updates per day, on any and all devices (web, mobile web, phone, API, etc. )
  • 250 total direct messages per day, on any and all devices
  • 150 API requests per hour

Εγώ με τις δοκιμές μου δεν είχα φτάσει τα 1000 updates. Επίσης σχετικά με το API request limit η σελίδα αναφέρει:

Rate limiting only applies to methods that request information with the HTTP GET command. API methods that use HTTP POST to submit data to Twitter, such as statuses/update do not affect rate limits.

Άρα εγώ δεν έπρεπε να έχω πρόβλημα. Αλλά έστω και να είχα κάποιο πρόβλημα όπως αναφέρει η σελίδα του update:

This method is subject to update limits. A HTTP 403 will be returned if this limit as been hit.

Και το πρόβλημα που αντιμετώπισα εγώ ήταν το ακόλουθο. Ενώ έστελνα τα πρώτα test tweets, τα δεχόταν και μου έλεγε το οκ, αλλα συνεχώς επέστρεφε σαν νέο tweet το τελευταίο που είχα κάνει post. Και έτσι κατάφερα να διαγράψω ένα self referential tweet θεωρώντας ότι είναι ένα από τα test tweets! Thank you twitter!

Το τελικό πρόγραμμα βρίσκεται σε μία δικιά του σελίδα, κάτω από αυτή με τα προγράμματά μου. Μπορείτε να το κάνετε download από εκεί. Καλό είναι να μην κάνετε downloads όταν το τρέχετε ώστε να είναι σταθερός ο χρόνος που διαρκεί ένα update.

Όποιος καταφέρει και κάνει τα δικά του tweets ας αφήσει ένα comment με το πόσες φορές δοκίμασε, θα ήταν ενδιαφέρον!

No comments yet

Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s

Αρέσει σε %d bloggers: