sobota, 25 maja 2013

Szukanie winnego z Eclipse

Używając często jakiegoś programu czy narzędzia popadamy w rutynę. Chodzimy swoimi utartymi ścieżkami, bo już wiemy jak zrobić to co mamy do zrobienia. Taki poziom znajomości programu daje poczucie komfortu i zazwyczaj pozwala na sprawną pracę. Niestety w pewnym sensie też rozleniwia, bo zabiera motywację do poznawania nieznanych opcji, które mogą pozwolić na bardziej efektywną pracę.

Dla mnie przykładem takiego programu jest Eclipse, w którym programuję codziennie od ładnych kilku lat. Ostatnio "odkryłem" bardzo fajną funkcję w pluginach do systemów kontroli wersji, która pewnie była tam od zarania dziejów, ale do tej pory nie zwróciłem na nią uwagi.

Klikamy w menu kontekstowe na jakimś pliku objętym kontrolą wersji i wybieramy Team -> Show Annotation (lub coś podobnego w zależności od plugina, np. w RTC jest Team ->  Annotate). Eclipse potrzebuje chwilkę na zaciągnięcie całej historii pliku, po czym z lewej strony edytora pojawia się pasek na którym oznaczone są różne segmenty pliku, tak jak na screenshocie poniżej. Po najechaniu na dowolny segment tego paska zobaczymy tooltipa z opisem zmiany.



W tym widoku można łatwo stwierdzić kto, kiedy i dlaczego ostatnio modyfikował daną linię kodu. Szczególnie się to przydaje, gdy natrafimy na jakiś fragment, którego nie rozumiemy, albo wydaje nam się, że znaleźliśmy buga, ale chcemy najpierw sprawdzić jakie były intencje przy wprowadzeniu danej linii.
Do tej pory w takich sytuacjach używałem widoku historii (opcja Team -> Show history), po czym mozolnie przeglądałem wersję po wersji żeby znaleźć tą, w której po raz pierwszy znalazła się interesująca mnie linia. Teraz wiem, że jest to strata czasu której można uniknąć.

Opcja ta na pewno jest dostępna przy pracy z CVS, Subversion, oraz RTC. Innych repozytoriów nie używam, więc nie sprawdzałem, ale podejrzewam że w każdym pluginie do systemu kontroli wersji jest ona zaimplementowana.

sobota, 18 maja 2013

Obługa plików w Java 7

To niesamowite że Java została jednym z najpopularniejszych języków programowania wysokiego poziomu, mimo że wsparcie dla niektórych typowych zadań programistycznych jest bardzo prymitywne i wymaga napisania sporo kodu. Do niedawna jednym z takich obszarów była obsługa systemu plików. Tak typowe (i z pozoru proste) zadania jak skopiowanie pliku, albo rekurencyjne usunięcie katalogu było mozolne jak ręczne przepisywanie ksiąg w średniowieczu.
Na szczęście w Java 7 (czyli aż 15 lat od wydania JDK 1.0!) w końcu pojawiło się nowe API, które daje dużo większe możliwości niż klasa java.io.File. Są to dwa nowe pakiety:
API to pozwala na wykonanie takich zadań jak wspomniane już kopiowanie plików, przenoszenie do innego katalogu, rekurencyjne usunięcie katalogu, utworzenie tymczasowego katalogu, czy modyfikacja atrybutów pliku typowych dla systemu plików, takich jak POSIXowe uprawnienia albo Windowsowe atrybuty plików.
Nie będę tu szczegółowo opisywał użycia tego API, bo myślę że każdy sobie może przczytać Javadoca na stronie Oracle'a.
Co ciekawe, nowe API nie korzysta z klasy java.io.File, lecz wprowadza nową klasę będącą abstrakcją ścieżki w systemie plików: interfejs java.nio.file.Path. Różni się on od java.io.File przede wszystkim tym, że jest specyficzny dla systemu plików. Obiekt Path można najprościej uzyskać metodą Paths.get()

Myślę że spowoduje to sporo zamieszania w kodzie wielu projektów. W nowym kodzie zapewne pojawią się odwołania do Path, natomiast stare API będzie korzystać z File. Na szczęście istnieje łatwy sposób konwersji pomiędzy obiektami File i Path za pomocą metod Path.toFile() oraz File.toPath().


piątek, 10 maja 2013

Linux Mint 14 na starym T60

Postanowiłem w końcu przeinstalować system na moim starym ThinkPadzie T60 z Windows XP na jakiegoś linuksika. Może ten post przyda się komuś, kto też zamierza instalować Linuxa na T60. Mój wybór padł na popularny Linux Mint, wersja 14 Cinammon.
Sprzęt na jakim instalowałem to konkretnie IBM Lenovo ThinkPad T60, model 1951-A47 (wersja z jednym corem Intel Core Solo processor T1300 )

Instalacja
Zupełnie bezproblemowa. Instalator sam ustawił czas z serwera NTP, wykrył (zapewne na podstawie geolokalizacji po IP) właściwą strefę czasową i zaproponował polski układ klawiatury. Podczas gdy ja zastanawiałem się nad nazwą hosta instalator już w tle kopiował pliki.
Całość trwała ok. pół godziny. Puściłem instalację, wyszedłem do sklepu po bułki i jak wróciłem było gotowe ;-)


Większość sprzętu działa od razu
Po instalacji system jest gotowy do użycia, nie trzeba ręcznie instalować jakichś kodeków, zamkniętych driverów, fontów. Większość specyficznego sprzętu w moim TP również jest od razu obsługiwana. Jedyny problem z dzwiękiem, ale o tym za chwilę.. Podsumowując, co na pewno działa od razu po świeżej instalacji:
  • zarządzanie energią: hibernacja, standby, wskaźnik poziomu baterii i ładowania
  • touchpad, trackpoint
  • Większość przycisków specjalnych: rozjaśniania/ściemniania ekranu, lampka, standby(Fn-F4), zarządzanie energią (Fn-F3), blokowanie ekranu (Fn-F2), touchpad (Fn-F8)
  • WiFi (konfigurowalne już podczas instalacji)
  • flash plugin, czyli youtube działa od razu po zakończeniu instalacji ;-)
A jednak nie wszystko działa..
Zaobserwowałem takie problemy:
  • dźwięk (działał przez chwilę po instalacji, potem nie wiem co się stało, TP zamilknął)
  • przyciski zmiany głośności
  • przycisk hibernacji (Fn-F12) przechodzi w standby zamiast hibernację
  • przyciski play/pause, stop, REW, FFD (i tak tego nigdy nie używałem, sprawdziłem tylko z ciekawości)
Zdecydowanie najważniejszy problem to brak dzwięku, reszta dotyczy klawiszy specjalnych, bez których można się obejść (większości i tak nie używam).

No to co z tym dzwiękiem?
Zaraz po instalacji dzwięk działał (puściłem na próbę jakiś film na Youtube), ale później przestał działać. Ciężko mi teraz ustalić kiedy dokładnie przestał działać, ale wydaje mi się, że po pierwszym zahibernowaniu, albo wyłączeniu.
Sprawdzałem najbardziej oczywiste rzeczy, takie jak ustawienia głośności przez applet na panelu oraz różne ustawienia Alsamixer. Przejżałem różne strony dotyczące problemów z dzwiękiem na Linux Mint, ale nie znalazłem nic konkretnego. Znalezione wskazówki nie dawały efektu, albo nie miały zastosowania na moim sprzęcie (np. opcja "automute" w alsamixer).
A następnego dnia.. dzwięk z powrotem działał. W sytuacji gdy coś działa ale nie wiem dlaczego czuję się tak samo głupio jak gdy coś w ogóle nie działa ( i też nie wiem dlaczego). Mimo wszystko cieszę się, że jednak działa :-)

Podsumowanie
Instalacja była szybka i bezproblemowa, a większość sprzętu jest automatycznie wykryte i obsługiwane. Jedyna czkawka była z obsługą dzwięku, ale ostatecznie działa.

środa, 24 kwietnia 2013

"Mistrz programowania" - recenzja

Kupiłem sobie niedawno książkę Mistrz programowania. Zwiększ efektywność i zrób karierę autorstwa Neala Forda. Po polsku wydana przez Helion.
Właśnie skończyłem ją czytać, zatem na gorąco podzielę się wrażeniami.

Jest to książka z kategorii "o wszystkim i o niczym", czyli zbiór różnych rad, dobrych praktyk i opisów narzędzi, które mają poprawić efektywność pracy i jakość pisanego kodu. Doświadczony programista raczej nie znajdzie tu wiele nowego, ale myślę że mimo to warto zaglądać do takich pozycji by poznać jeden czy dwa nowe dla siebie tematy. Tym bardziej, że książka nie jest droga, więc nie ma się wiele do stracenia - ja znalazłem nową na Allegro za niecałe 20 PLN razem z wysyłką. W tej cenie warto spróbować.

W książce między innymi możemy sie między innymi dowiedzieć o zaletach TDD, automatyzacji codziennych zadań za pomocą Selenium, i skryptów wiersza poleceń, narzędziach do statycznej analizy kodu takich jak PMD i Findbugs , dobrych praktykach programowania obiektowego, refaktoryzacji, pracy w zespole, aż po przegląd edytorów tekstu z funkcjami poprawiającymi efektywnośc pracy.
Należy jednak powiedzieć wprost, że wszystkie te tematy są pokryte bardzo pobieżnie. Myślę, że książka może dobrze posłużyć jako przewodnik po rozmaitych zagadnieniach, które dobry programista powinien znać. Gdy już zainspiruje do poznania jakiegoś tematu, wtedy trzeba będzie poszukać dalszych szczegółów w innych źródłach.


Polskie tłumaczenie miejscami troche kulawe i wymaga skupienia, by np. zrozumieć że oprzyrządowanie klas to instrumentacja ;-) Czasami użyte sformułowania co prawda sporadycznie występują w polskojęzycznej literaturze, ale nie są tak przyjęte w użyciu jak angielskie oryginały, przez co brzmią sztucznie i śmiesznie.. na przykład system usuwania nieużytków, albo otwarty szkielet sieciowy Struts.

Na końcu książki autor zapewnia, że nie chce pisać monologu, ale raczej porozmawiać o produktywności i dlatego utworzył wiki. W zamyśle ma się tam dalej toczyć dyskusja o narzędziach i sposobach poprawy produktywności programisty. Świetny pomysł, chętnie to zobaczę! - pomyślałem. Niestety podana strona productiveprogrammer.com już nie istnieje, a domena jest wystawiona na sprzedaż. Wechikuł czasu pokazuje, że strona nie istniała juz co najmniej od 2011. Szkoda. Za to przyznaję minus wydawcy.
A może znacie jakąś fajną stronę albo forum poświęcone produktywności w tworzeniu oprogramowania? Podzielcie się linkiem w komentarzu!

niedziela, 21 kwietnia 2013

Java 8 się spóźnia

W ostatnim poście Mark Reinhold (główny architekt projektu Javy w Oracle) ujawnił, że wcześniej planowany harmonogram wydania Javy 8 we wrześniu tego roku nie jest możliwy do spełnienia.
Ściągnięto ze strony http://www.gizmodo.com.au/2013/01/how-to-disable-java-in-your-browser/

Opóźnienie jest tłumaczone problemami w security Javy będącej już w użyciu (na przykład te wymienione tutaj), które wymagały czasu developerów Javy. W efekcie prace nad projektem Lambda się opóźniły. Według nowego harmonogramu GA Javy zostało przeniesione na Marzec 2014.

To nie pierwsza zmiana w releasie Java 8. W zeszłym roku z powodu problemów z harmonogramem lista nowej funkcjonalności planowanej w Java 8 została okrojona. Przede wszystkim projekt Jigsaw został przeniesiony do Java 9.
Wydawać by się mogło, że mamy powtórkę z tej historii. Na szczęście Oracle nie zdecydował się za wszelką cenę utrzymać dat, kosztem ograniczenia ograniczenia zakresu (czyli wywalenia projektu Lambda, najważniejszego i najbardziej wyczekiwanego ficzera Javy 8!).

Obydwie zmiany w planach są typowym przykładem problemu "za krótkiej kołderki" w projekcie, gdy okazuje się, że nie da się dostarczyć całej planowanej funkcjonalności w planowanym czasie. Co ciekawe, możemy obserwować inne rozwiązania z tych sytuacji - za pierwszym razem ucierpiał scope, za drugim harmonogram (pewnie dla tego, bo już w scop'ie nie było czego uciąć). W klasycznym "magicznym trójkącie" zarządzania projektami mówi się jeszcze o trzecim parametrze projektu, czyli koszcie.

Nie jestem pewien, czy w tym przypadku łatwo byłoby Oracle'owi utrzymać zakres i czas nawet gdyby zdecydował się na zwiększenie budżetu na Java 8. Prawdopodobnie prace nad Java 8 są już zbyt zaawansowane i pierwotny GA zbyt blisko, by udało się to bez utraty jakości. Jak wiadomo z Prawa Brooksa dodawanie ludzi do opóźnionego projektu tylko opóźni go jeszcze bardziej :-)
Chief Architect

sobota, 6 kwietnia 2013

Przyszłość w IT - po konferencji


Pare godzin temu wróciłem z konferencji Przyszłość w IT, więc mogę na gorąco podzielić się wrażeniami.

Najbardziej podobała mi się prezentacja Szczepana Fabera dotycząca Gradle, w którym jest core developerem. Było tam wszystko to, czego oczekuję od takich wykładów - ciekawy merytorycznie, inspirujący i poprowadzony na luzie.
Nigdy nie miałem wcześniej do czynienia z Gradle, ale po prezentacji poczułem że warto te braki nadrobić ;-)
Szkoda tylko, że ze względu na problemy techniczne z podłączeniem rzutnika nie udało się zaprezentować przykładów "na żywo", ale slajdy też dawały radę.

Wykład Piotra Łaskawca, autora javablog.eu też trzymał wysoki poziom. Głównym tematem była budowa i tuning JVM pod kątem wydajności - w szczególności kompilacja JIT, oraz garbage collection.

Mam wrażenie, że dla większości wykładów limit 40 minut był trochę ograniczający. Każdy z prezenterów miał w zanadrzu jeszcze kilka slajdów i wątków które chciałby jeszcze poruszyć.

Ale ogólnie wrażenia pozytywne - polecam osobom z innych miast gdzie odbędą się kolejne edycje. Jeśli we wrześniu w Krakowie będzie nowa agenda wykładów to na pewno rozważe ponowne uczestnictwo.



czwartek, 4 kwietnia 2013

Konferencja Przyszłość w IT

W najbliższą sobotę (6 kwietnia 2013) w Krakowie odbędzie się konferencja Przyszłość w IT. Właściwie to nie  konferencja tylko targi pracy połączone z wykładami - tak to określają sami organizatorzy. Zatem na pewno będzie dużo nachalnej promocji sponsorujących firm i łapanka rekrutacyjna, ale agenda wykładów mimo to wygląda ciekawie. Wykłady mają się odbyć równolegle po cztery w każdym z czterech bloków merytorycznych.

Dla miłośników Javy ciekawie zapowiada się wykład Piotra Łaskawca o szczegółach JVM. Chętnie zobaczę również wykład Szczepana Fabera o automatyzowaniu wszystkiego co się robi. Prelegent jest autorem Mockito, biblioteki do tworzenia mocków na potrzeby testów JUnit.

Myślę że warto pójść zobaczyć, tym bardziej że wstęp za darmo, a pogoda na zewnątrz nie oferuje nic ciekawszego. Nie wiem czy w Krakowie są jeszcze wolne miejsca (trzeba się zarejestrować przed konferencją), ale w kolejne weekendy ma być powtórka w innych miastach, więc zwracam uwagę ich mieszkańców na tę konferencję.