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.