Νέα διεύθυνση

Αν και έχω αρκετό καιρό να κάνω update το blog μου έχω μία πολύ καλή δικαιολογία. Μετακομίζω!

Πρόσφατα πήρα ένα domain βασισμένο στο όνομα μου και αποφάσισα να μεταφέρω εκεί το blog με κάποιες αλλαγές. Το πιο σημαντικό είναι ότι πλέον θα γράφω μόνο στα αγγλικά όπως μου σύστησαν διάφορα άτομα για τους πιθανούς ξένους αναγνώστες. Περισσότερα στο πρώτο post. Η νέα διεύθυνση είναι:

http://fotis.loukos.me/blog

Αν με βάλατε στα bookmark σας μπορείτε να τα κάνετε update!

Δημιουργώντας ένα 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 με το πόσες φορές δοκίμασε, θα ήταν ενδιαφέρον!

Περιπέτειες στο linux με τον i-gotU GT-200 gps logger

Πρόσφατα αγόρασα το i-gotU GT-200. Πρόκειται για ένα bluetooth GPS travel logger. Αυτό το οποίο κάνει είναι να κρατάει ανά ορισμένα χρονικά διαστήματα τις γεωγραφικές συντεταγμένες και την ακριβή ώρα εκείνη τη στιγμή ώστε αργότερα να μπορεί ο χρήστης, μεταφέροντας τα δεδομένα στον υπολογιστή του, να αναπαράγει ακριβώς το ταξίδι του. Περισσότερες πληροφορίες μπορούν να βρεθούν στην σελίδα του προϊόντος.

Δυστυχώς από την εταιρία δεν παρέχεται κάποιος driver για το linux. Το μόνο που μπόρεσα να βρω είναι το πρόγραμμα igotu2gpx το οποίο μπορεί να μεταφέρει αποθηκευμένες διαδρομές από τη συσκευή στον υπολογιστή. Χρησιμοποιεί την libusb οπότε δεν χρειάζεται κάποιο kernel module. Και αυτό όμως δεν έχει όλη την λειτουργικότητα του @trip, του προγράμματος που παρέχεται από την ίδια την εταιρία. Αυτό που βρήκα ως καλύτερο συνδυασμό είναι το igotu2gpx για απλή μεταφορά δεδομένων και το @trip που έχω εγκατεστημένο σε ένα windows virtual machine. Χρησιμοποιώ την closed source edition του VirtualBox που παρέχει πλήρη υποστήριξη για usb και έτσι δεν υπάρχει κανένα πρόβλημα. Χρησιμοποιώντας λίγο usb sniffing είδα ότι δεν είναι και τόσο δύσκολη η επικοινωνία με το device οπότε μπορεί να γράψω και εγώ ένα πρόγραμμα. Θα μου ήταν πιο εύκολο να βοηθήσω στο development του igotu2gpx αλλά είναι γραμμένο σε C++ και χρησιμοποιεί qt, έναν συνδυασμό που ΔΕΝ τον αντέχω!

Κάτι άλλο που προσφέρει το gadgetάκι αυτό είναι live gps data είτε το συνδέσεις με usb είτε με bluetooth. Μετά από λίγο ψάξιμο βρήκα ότι υπάρχει driver για linux αλλά δυστυχώς αυτός δεν αναγνωρίζει αυτόματα το device. Ο driver είναι ο navman. Αφού τον φορτώσουμε χρησιμοποιώντας την εντολή:

# modprobe navman

πρέπει να τρέξουμε τo

# echo “0x0df7 0x0900″ > /sys/bus/usb-serial/drivers/navman/new_id

Τα 0x0df7 και 0x0900 είναι το vendor και product id της συσκευής. Τα στοιχεία αυτά μπορείτε να τα δείτε τρέχοντας την εντολή lsusb. Πλέον ανοίγοντας το device /dev/ttyUSB0 (ή /dev/ttyUSB1 κλπ) θα πάρουμε gps data σε μορφή NMEA.

Για να συνδεθούμε μέσω bluetooth πρέπει πρώτα να βρούμε την διεύθυνση που χρησιμοποιεί. Αυτό γίνεται τρέχοντας την ακόλουθη εντολή

$ hcitool scan
Scanning …
00:18:8C:16:03:1F MAGPS GT-200

Η διεύθυνση είναι η 00:18:8C:16:03:1F την οποία πρέπει να κρατήσουμε.

Επόμενο βήμα είναι η σύνδεση και το pairing. Για να γίνει αυτό χρησιμοποιούμε τις ακόλουθες εντολές:

# hcitool cc 00:18:8C:16:03:1F
# hcitool auth 00:18:8C:16:03:1F

Στο σημείο αυτό αν έχει οριστεί ένας helper για την εισαγωγή του pin θα εμφανιστεί πιθανώς ένα παράθυρο όπου πρέπει να δώσουμε το νούμερο 0000. Αν χρησιμοποιούμε κάποιο άλλο σύστημα πάλι πρέπει να ορισθεί ως pin το 0000. Το τελευταίο βήμα είναι να συνδέσουμε ένα rfcomm device με το igotu. Αυτό γίνεται με την εντολή

# rfcomm bind 0 00:18:8C:16:03:1F 1

Από εδώ και πέρα το device /dev/rfcomm0 προσφέρει NMEA data.

Εδώ προτείνω το πρόγραμμα gpsbabel το οποίο μπορεί να διαβάζει τέτοια δεδομένα και να δίνει διάφορες πληροφορίες. Αν και όπως λέει χρησιμοποιείται για το conversion ανάμεσα σε διαφορετικά file formats, με την χρήση του option -T είναι δυνατό να παίρνουμε και realtime data.

Τελικά πρέπει να εμβολιαστούμε; Τι μας απαντούν τα μαθηματικά;

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

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

  • p_{vac}: η πιθανότητα να έχουμε κάποιο πρόβλημα λόγω παρενεργειών του εμβολίου
  • p_{inf}(t): η πιθανότητα κάποιος από τον πληθυσμό να έχει μολυνθεί
  • f_{inf}(t): ο αριθμός των μολυσμένων ατόμων από όλο τον πληθυσμό
  • totalpop: ο πληθυσμός
  • inf_0: ο αριθμός των μολυσμένων ατόμων την χρονική στιγμή 0 (τώρα)

Προφανώς ισχύει p_{inf}(t) = \frac{f_{inf}(t)}{totalpop} και f_{inf}(0) = inf_0 και άρα p_{inf}(0) = \frac{inf_0}{totalpop}. Επίσης όπως είπαμε θεωρούμε ότι p_{inf}(0) > p_{vac}, κάτι το οποίο αυτή τη στιγμή πρέπει να ισχύει.

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

Σύμφωνα με το παραπάνω έχουμε f_{inf}(t) = 1.2^t*inf_0 = 1.2^t*f_{inf}(0) και άρα p_{inf}(t) = 1.2^t*p_{inf}(0).

Ας κάνουμε τώρα ένα πίνακα με όλες τις δυνατές περιπτώσεις εμβολιασμού και την πιθανότητα να αποκτήσουμε κάποιο πρόβλημα αν ακολουθήσουμε καθεμιά απ’ αυτές. Κάθετα βρίσκεται η επιλογή μας (Ναι/Όχι) και οριζόντια η επιλογή του υπόλοιπου πληθυσμού.

Εμείς\Υπόλοιποι Ο Ν
Ο p_{inf}(t) p_{inf}(0)
Ν p_{vac} p_{vac}

Στον πίνακα αυτό, για την χρονική στιγμή t=0 στην οποία βρισκόμαστε η καλύτερη απόφαση είναι να μην εμβολιαστούμε αδιαφορώντας για όλους τους άλλους. Αν όμως κανένας δεν εμβολιαστεί η πιθανότητα να αποκτήσουμε κάποιο πρόβλημα αύριο θα είναι p_{inf}(1) > p_{inf}(0). Άρα το καλύτερο που έχουμε να κάνουμε είναι να μην εμβολιαστούμε και να εμβολιαστούν όλοι οι άλλοι! Δηλαδή να διαλέξουμε την χαμηλότερη τιμή στον παραπάνω πίνακα! Μπράβο Χρήστο!

Ας το σκεφτούμε τώρα λίγο καλύτερα. Χρησιμοποιώντας αυτή τη λογική εγώ δεν θα εμβολιαστώ. Όμοια χρησιμοποιώντας αυτή τη λογική κανένας άλλος δεν θα εμβολιαστεί!!! Άρα θα μεταπηδήσουμε στην κατάσταση όπου κανένας δεν εμβολιάζεται. Σε ένα μήνα θα έχουμε p_{inf}(30) = 1.2^{30}*p_{inf}(0) = 237.4*p_{inf}(0). Πιστεύω ότι p_{inf}(30) >>> p_{vac}. Και έτσι να μην είναι σε ένα μήνα και μία βδομάδα θα έχουμε p_{inf}(37) = 850.6*p_{inf}(0). Αυτό σίγουρα είναι μεγαλύτερο απο το p_{vac}!. Άρα ποια είναι η καλύτερη στρατηγική; Σίγουρα ο εμβολιασμός! Έτσι ακολουθώντας όλοι αυτή τη στρατηγική έχουμε μία σταθερή πιθανότητα προβλήματος στην υγεία μας ίση με p_{vac}.

Ελπίζω τα λίγα μαθηματικά μου να με βοήθησαν και να μην έχω κάποιο λάθος στο σκεπτικό μου. Σχόλια ευπρόσδεκτα!

Ο αριθμός ‘Swine Flu Number’

You can find an english version below.

Μελετώντας λίγο τα social networks μπορεί κάποιος να δει καταπληκτικές ιδιότητες. Πολλά βιβλία έχουν γραφτεί που περιγράφουν το φαινόμενο small world και δίκτυα που βασίζονται πάνω σε αυτό. Ως εισαγωγή έχω να προτείνω το Linked: The New Science of Networks από τους Albert-Laszlo Barabasi και Jennifer Frangos.

Σύμφωνα με το γνωστό six degrees of separation που βασίζεται πάνω σ’ αυτή τη θεωρία καθένας από μας βρίσκεται έξι βήματα μακριά από οποιοδήποτε άλλο άτομο στον κόσμο. Τι εννοούμε με αυτό; Κάθε γνωστός μας απέχει ένα βήμα από εμάς. Κάθε γνωστός ενός γνωστού μας απέχει δύο βήματα από εμάς. Με τον ίδιο τρόπο πηγαίνοντας έξι βήματα μακριά μπορούμε να βρούμε οποιοδήποτε άτομο σε όλο τον κόσμο!

Χρησιμοποιώντας αυτή την παρατήρηση άρχισαν να δημιουργούνται διάφοροι αριθμοί που χαρακτηρίζουν τον καθένα σε μία κατηγορία ατόμων. Στους μαθηματικούς υπάρχει ο αριθμός Erdős. Ο αριθμός αυτός χαρακτηρίζει τα ενδιάμεσα βήματα μεταξύ ενός μαθηματικού και του μεγάλου μαθηματικού Erdős ορίζοντας ως βήμα την συγγραφή ενός paper από κοινού από δύο άτομα. Στους ηθοποιούς υπάρχει ο αριθμός Bacon που είναι τα βήματα ανάμεσα στον ηθοποιό Kevin Bacon και έναν άλλο ηθοποιό. Αυτή τη φορά δύο άτομα έχουν απόσταση ίση με ένα αν έχουν συμπρωταγωνιστήσει σε μία ταινία.

Με βάση αυτούς τους αριθμούς και με μία έμπνευση μιας φίλης σκέφτηκα τον αριθμό Swine Flu. Ο αριθμός αυτός μετράει τα βήματα που έχει κάποιος από ένα άτομο που έχει κολήσει την γρίπη των χοίρων (γνωστή και ως swine flu). Για παράδειγμα εγώ έχω μία φίλη η οποία έχει κολλήσει, άρα έχω swine flu number ίσο με ένα. Η φίλη μου αυτή έχει αριθμό ίσο με μηδέν μιας και έχει η ίδια την γρίπη! Από την άλλη ένας άλλος φίλος μου ο οποίος δεν ξέρει κανένα άτομο που έχει κολλήσει έχει swine flu number ισο με δύο.

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

Ο πιο εύκολος τρόπος εύρεσης του αριθμού που σκέφτηκα είναι το twitter. Έτσι έγραψα ένα πρόγραμμα που μετράει αυτόν τον αριθμό. Το μόνο που χρειάζεται είναι να γράψει κάποιος ένα tweet της μορφής:

Το swine flu number μου είναι 1 #swineflunumber

ή

My #swineflunumber is 1

Το μόνο που χρειάζεται είναι να γράψετε μέσα στο tweet το tag '#swineflunumber' και τον αριθμό σας. ΠΡΟΣΟΧΗ: καλό θα είναι να μην έχετε κάποιον άλλο αριθμό μέσα στο κείμενο! Αν υπάρχουν και άλλοι αριθμοί το πρόγραμμα διαλέγει αυτόματα αυτόν που βρίσκεται πιο κοντά στο tag. Επίσης λόγω ενός προβλήματος του twitter search api πολλές φορές στο search δεν εμφανίζονται διάφορα tweets οπότε αν μπορείτε να στείλετε δύο φορές το tweet σας θα βοηθούσε. Μην ανησυχείτε, το πρόγραμμα είναι έτσι σχεδιασμένο ώστε να μην παίρνει υπόψιν του πολλαπλά ίδια entries.

Αφού μαζέψω έναν ικανοποιητικό αριθμό από swine flu numbers θα τα δημοσιεύσω εδώ. Όσοι μπορείτε ενημερώστε τους γνωστούς σας! Σε περίπτωση που αλλάξει ο αριθμός σας μην ξεχάσετε να γράψετε τον νέο! Έτσι θα μπορέσω να βγάλω και στοιχεία για το πως αλλάζουν δυναμικά οι αριθμοί αυτοί και κατά συνέπεια πως μεταδίδεται η ασθένεια!

ΠΡΟΣΘΗΚΗ: Λόγω των προβλημάτων στο twitter search api και για να μην χάνονται τα tweets σας έχω κάνει έναν νέο user, τον swineflunumber. Πλέον μπορείτε να κάνετε και ένα απλό mention, δηλαδή να χρησιμοποιείτε tweets της μορφής:

Το swine flu number μου είναι 1 @swineflunumber

Με τον τρόπο αυτό δεν θα χαθεί κανένα tweet!

Παρακάτω παραθέτω ένα μικρό κείμενο για τους πιθανούς ξένους αναγνώστες.


The swine flu number is based on the small world phenomenon. It has the same concept as the Bacon or the Erdős number. It counts the links between a person and another person who is infected by the swine flu (H1N1 virus). Your swine flu number is the smallest swine flu number of all your friends plus one. For example I know a person who is infected so my swine flu number equals one. If I have a friend who doesn't know anyone infected then his swine flu number equals two.

In order to count this I have used twitter. I created a simple program which extracts the information from all tweets having the tag '#swineflunumber'. So if your tweet is 'My #swineflunumber is 2' then this will be identified and stored in a database. WARNING: Don't put another number in the tweet, just your swine flu number and remember to use digits ('2' and not 'two')! Since the twitter search api has some problems you may need to tweet your number twice. Don't worry, the program is designed to ignore duplicate entries!

Since this number isn't constant (more people get infected every day), please tweet your new number every time it changes!

EDIT: Since some tweets are lost due to the twitter search api problem I created a new user, swineflunumber. Now you can use a simple mention and your tweets won't be lost, e.g.  'My swine flu number is 2 @swineflunumber'

Νέα σελίδα προγραμμάτων και geotagging photos με χρήση cell identification

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

Το πρώτο πρόγραμμα που έβαλα είναι το CellPicGPS, κάτι που ήθελα από καιρό να ψάξω. Δεν είναι λίγες οι φορές που έβγαλα μια φωτογραφία με το κινητό μου επειδή δεν είχα την camera και μετά ξέχασα που ακριβώς ήταν! Δυστυχώς το κινητό μου (ένα sony-ericsson c902) δεν έχει GPS οπότε δεν μπορώ να έχω σωστό geotagging. Ψάχνοντας λίγο είδα ότι στα exif tags κρατάει τα cellid, lac, mcc και mnc, πληροφορίες τις οποίες δίνει το δίκτυο και έχουν σχέση με το cell identification. Μετά από μια μικρή έρευνα είδα ότι υπάρχουν sites τα οποία σου δίνουν την δυνατότητα να κάνεις μια εκτίμηση της θέσης που βρίσκεσαι με βάση τα στοιχεία αυτά. Πρώτη και καλύτερη η αγαπητή μας google με ένα hidden api που προσφέρει! Έτσι κάθησα και έγραψα ένα μικρό προγραμματάκι που βοηθάει στην εύρεση του latitude και longitude μιας φωτογραφίας. Περιμένω σχόλια, παρατηρήσεις και προτάσεις για βελτίωση!

A new beginning

Έχοντας δοκιμάσει και παλιότερα να κάνω ένα blog είδα ότι τελικά δεν είχα τον απαραίτητο χρόνο να γράφω όσο θέλω. Κατά διαστήματα είχα διάφορες ιδέες αλλά δεν προλάβαινα να τα γράψω. Ελπίζω ότι με αυτό το blog θα τα καταφέρω τελικά!

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

Οπότε καλή μου αρχή για ακόμη μία φορά!

Follow

Get every new post delivered to your Inbox.