wtorek, 25 stycznia 2011

This client is too old to work with working copy...

Trochę ponad rok temu podczas pracy z NetBeansem i SVNem, często witał mnie taki oto komunikat:

This client is too old to work with working copy ; please get a newer Subversion client

Ostatnio podobnym komunikatem uraczył mnie Eclipse...

Sprawę już omawiałem na blogu (http://wojtek-m.blogspot.com/2009/12/netbeans-i-subversion_20.html), ale wtedy nie poznałem przyczyny takiego zachowania. Teraz starczyło mi na to cierpliwości...

niedziela, 23 stycznia 2011

Jak sprawdzić wersję Oracle

Często, kiedy mamy środowisko testowe składające się z wielu baz danych Oracle (których wersje na dodatek lubią się często zmieniać), to możemy natrafić na problem - z jaką wersją Oracle jesteśmy aktualnie połączeni?

Oczywiście SQL*Plus poda nam wersję silnika bazy w momencie połączenia z nią - ale kiedy korzystamy z innego narzędzia, np. Oracle SQL Developer albo nie chcemy się łączyć ponownie, to...

czwartek, 20 stycznia 2011

Referencja NULL w C++

Jedną z głównych różnic między wskaźnikami a referencjami w C++ jest fakt, iż referencja nie może wskazywać na NULL. Ta, jasne.

Faktycznie, standard ISO 14882 stwierdza (rozdział 8.3.2, punkt 4):
"A reference shall be initialized to refer to a valid object or function. [Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior."

Ale standard sobie, a implementacje sobie, więc to "only way" wcale nie jest takie only :) Podwińcie rękawy i zasłońcie oczy, bo pięknie to tu nie będzie ;)

poniedziałek, 17 stycznia 2011

Metoda equals, LSP i Twoje IDE

Jeżeli chodzi o metodę equals(Object obj) w Javie, to wiadomo jedno - wcale nie jest taka trywialna do napisania, zwłaszcza że jednocześnie trzeba pamiętać o hashCode(). Na szczęście nowoczesne IDE takie jak Eclipse czy NetBeans potrafią same wygenerować poprawną parę tych metod. Ale czy aby na pewno?

Przypomnijmy sobie czego Sun (ups, Oracle) wymaga jako "kontraktu" metody equals (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#equals%28java.lang.Object%29):

1. Powinna to być relacja równoważności, czyli musi być:
a) zwrotna: x musi być równe x,
b) symetryczna: jeżeli x=y, to y=x,
c) przechodnia: jeżeli x=y i y=z, to x=z

2. Musi być spójna, tzn. ta sama para x i y musi zawsze dawać ten sam wynik.

3. I musi też zachodzić: x != null

Przesłaniając metodę equals trzeba pamiętać o wszystkich pięciu warunkach - na szczęście naszej pamięci przychodzą na pomoc nowoczesne IDE :)