Δευτέρα 30 Μαΐου 2011

Ακόμα και οι compilers έχουν χιούμορ!

Οι προγραμματιστές που έφτιαξαν το πρόγραμμα Dev C++ το οποίο προορίζεται για προγραμματισμό σε C και C++ πρέπει να είχαν καλή διάθεση όταν το έφτιαχναν!Αυτό το υποθέτω γιατί όταν δημιουργείς ένα κενό έργο και πας να το εκτελέσεις σου εμφανίζει το παρακάτω χαριτωμένο παράθυρο λάθους:

Παρασκευή 27 Μαΐου 2011

String.hashCode()'s bug

Do you know that it is possible to get the same hashCode for two different strings, although they might not be that long?

Try the following piece of code:

int hashCodeER4="ER4".hashCode();
int hashCodeEQS="EQS".hashCode();
System.out.println("ER4's hashCode()="+hashCodeER4);
System.out.println("EQS's hashCode()="+hashCodeEQS);

What do you get?

ER4's hashCode()=68903
EQS's hashCode()=68903

What does it mean?

There are several pieces of code that "compare" Object's using their hashCode.

For instance,
HashMap uses the hashCode of the key in order to retrieve the corresponding value[1]

Why does it happen?

According to the javadoc:
"The hash code for a String object is computed as
 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 
using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)"

Which means that each character's value should be between 0 and 30 in order to avoid conflicts, but in fact even in case of ASCII we have a range from 0 up to 255, while in case of UTF-8 or even worse UT-16 the range is much larger.


TODO: Calculate manually the hashCode to check whether it is a problem of the formula or of the implementation of String.hashCode();

Notes:
[1] The following code is used in the HashMap in order to retrieve the value that is set for the requested key. As you can see we search using the hashCode, not the actual object itself.
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}


Τετάρτη 25 Μαΐου 2011

Η Ελληνική επανασταση..


Θα ειμαι απόλυτα ειλικρινής. Νόμιζα οτι ήταν αστείο, ότι δεν θα καταφερναν να συγκεντρώσουν αρκτερο κόσμο. Ευτυχώς αποδειχθηκε το αντίθετο και στεναχωριεμαι που δεν ειμαι κι εγω εκει. Ο λόγος για τις συγκεντρώσεις αγανακτισμένων, όχι συνδικαλιζομενων ή προβάτων, αλλά απλά και μονο ΑΓΑΝΑΚΤΙΣΜΕΝΩΝ. Ανθρώπουν που δεν θέλουν πια να σκύβουν το κεφάλι, δεν θέλουν να λένε "ωχ αδερφε, εγω θα αλλάξω τον κόσμο". ΝΑΙ ΕΜΕΙΣ ΘΑ ΤΟΝ ΑΛΛΑΞΟΥΜΕ. Εμεις που δεν ειμασταν στο πολυτεχνειο αλλά μεγαλώσαμε σε ένα κράτος που η αξιοι δεν προοδεύουν, αλλά οι βυσματιες. Εμείς που θέλουμε να αλλάξει προς το καλύτερο κι οχι προς την καταστροφή. Εμεις οι νέοι άνθρωποι, αλλά και όσοι δεν σκέφτονται οπως τους παλιους και ξεπερασμένους.

Πέμπτη 12 Μαΐου 2011

Απίστευτη τρύπα...

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

Ενα τέτοιο, πιθανώς ανθρώπινο, λάθος είναι και το ακόλουθο. Φαινομενικά είναι σωστός ο κωδικας, αλλά εαν πειραματιστείτε θα καταλαβετε οτι δεν ειναι και τοσο σωστος..

class runhang { public static void main(String[] args) {   System.out.println("Test:");   double d = Double.parseDouble("2.2250738585072012e-308");   System.out.println("Value: " + d);  } }

πηγή: Java Hangs When Converting 2.2250738585072012e-308

Τετάρτη 11 Μαΐου 2011

H Microsoft αγόρασε το Skype!


Από χθες έχει βουίξει όλο το Internet!Η Microsoft εξαγόρασε το Skype για 8,5 δισεκατομμύρια δολάρια!Όλα τα τεχνολογικά sites και blogs αναρτούν συνέχεια νέες ειδήσεις για τη μεγαλύτερη εξαγορά εταιρίας του έτους και πιθανόν και της δεκαετίας!Είναι λογικό να υπάρχει τόσο μεγάλος ντόρος και συζήτηση,αφενός για το ύψος της αγοράς και αφετέρου για τη φύση της!Μια μεγάλη τεχνολογική εταιρία εξαγοράζει μια άλλη!Και όχι οποιαδήποτε εταιρία,η Microsoft το Skype!
Ακουγόταν από καιρό ότι το Skype είχε πολλούς πρόθυμους αγοραστές.Ο πιο βασικός ήταν το Facebook,και προσωπικά πίστευα ότι εκεί θα κατέληγε,αφού υπήρχαν συζητήσεις για ενσωμάτωση βιντεοκλήσεων και κλήσεων στο Facebook Chat. Προφανώς κάτι τέτοιο δεν έγινε,αφού το Facebook δε θα διέθετε τόσα χρήματα για μια εξαγορά.Μια άλλη εταιρία κολοσσός που ζητούσε την εξαγορά της διάσημης υπηρεσίας κλήσεων μέσω διαδικτύου ήταν η Google, όπως διαβάζουμε εδώ.Τελικά καμία από τις δύο δεν κατάφερε να το αποκτήσει και χθες ανακοινώθηκε ότι πλέον Microsoft και Skype ενώνουν τις δυνάμεις τους!
Το γεγονός αυτό μου προκαλεί αρκετές σκέψεις...Η Microsoft από εκεί που είχε το μονοπώλιο στην αγορά λειτουργικών συστημάτων και λογισμικού,και ότι άγγιζε γινόταν χρυσός,τα τελευταία χρόνια έχει χάσει την πρωτιά και σε αρκετές περιπτώσεις δεν είναι καθόλου επιτυχημένη.Βεβαίως στον τομέα των λειτουργικών συστημάτων εξακολουθεί να είναι πρώτη με τα Windows,αλλά στις άλλες τις δραστηριότητες δεν τα πηγαίνει και τόσο καλά.
Στον τομέα της κινητής τηλεφωνίας ειδικά με τα Windows Phone 7 βρίσκεται στις τελευταίες θέσεις σε όλους τους δείκτες,από την ενεργοποίηση συσκευών μέχρι την ικανοποίηση των πελατών.Σε αυτό τον τομέα έκανε την ξαφνική κίνηση να δηλώσει πλήρη συνεργασία με τη ΝΟΚΙΑ,που και αυτή έχει δεχθεί το πλήγμα από τις συσκευές με iOS και Android.Με τη συνεργασία όμως αυτή καταργεί το λειτουργικό σύστημα SYMBIAN που έτρεχε σε ΝΟΚΙΑ κινητά και είχε πολλούς ικανοποιημένους χρήστες...Κοινώς,για να αναπτυχθεί η Microsoft έδωσε πολλά χρήματα για να εξαλείψει ένα άλλο λειτουργικό σύστημα κινητών.
Σκέφτομαι λοιπόν...Και αν αυτή η συνεργασία είναι ακριβώς η ίδια περίπτωση;Αν χρησιμοποιήσει δηλαδή η Microsoft το Skype για να αναπτύξει πάλι το Windows Live Messenger; Άλλωστε το Skype όπως διάβασα στο αρχικό post του Mashable έχει χρέη και όχι κέρδη τον τελευταίο χρόνο...Επίσης είναι γνωστό το παράδειγμα της Google που εξαγοράζει start-up εταιρίες και απλά μετά τις κλείνει.Θα καταλήξει το διαδίκτυο να κυριαρχείται από 2-3 μεγάλες εταιρίες και όλες οι μικρές απλά θα ενσωματώνονται σε αυτές;Αν η επόμενη κίνηση είναι η εξαγορά του Twitter από το Facebook;Θα υπάρχει μετά χώρος για νέες εταιρίες με τόσες μεγάλες να κυριαρχούν;

Κυριακή 8 Μαΐου 2011

Εισαγωγή στην Java

Στο Διαδικτυο θα βρειτε σίγουρα απειρο υλικο για να ξεκινησετε προγραμματισμο σε Java, αλλα σιγουρα ενα βιβλιο θα σας βοηθήσει καλύτερα. Σας προτεινω να κατεβάσετε και να διαβασετε καποια απο τα τρια πολύ βασικά βιβλια που βρισκονται στο http://www.readwriteweb.com/hack/2011/04/free-e-books-on-java-for-begin.php

Προσοχή: Αφορουν αρχαριους!

Βεβαια εαν θελετε κατι ακομα πιο απλο, κι ελληνικο, για αρχη τοτε κοιταξτε το http://nethellas.gr/Java.htm

LinkWithin

Blog Widget by LinkWithin

Mobile edition