Dlaczego warto robi膰 wielokrotne backupy – case study

Dzi艣 b臋dzie wpis, kt贸ry nie b臋dzie dotyczy膰 programowania 馃檪

Kilka dni temu, oczekuj膮c a偶 pasek post臋pu pewnej d艂ugo trwaj膮cej operacji dojdzie do ko艅ca, przegl膮da艂em moje archiwa ze zdj臋ciami. Dane te (zdj臋cia) trzymam w dw贸ch miejscach: na dysku podstawowym WD Green, oraz na dysku backupowym WD Red. Gdy przejrza艂em ju偶 wszystkie zdj臋cia z 2008 oraz 2009 roku, u艣wiadomi艂em sobie, 偶e nigdzie nie widzia艂em zdj臋cia, kt贸re kiedy艣 mia艂em jako profilowe na wielu portalach. A przecie偶 dok艂adnie pami臋tam to zdj臋cie – zrobione podczas pr贸by u mnie w gara偶u, gdy akurat mia艂em chwil臋 przerwy w graniu na perkusji. Przez moment pomy艣la艂em, 偶e mo偶e pami臋膰 mnie zawodzi, 偶e mo偶e to zdj臋cie by艂o zrobione kiedy indziej – ostatecznie doszed艂em do wniosku, 偶e jednak z moj膮 pami臋ci膮 jest wszystko OK, a problem raczej le偶y po stronie maszyny, zwanej komputerem. Przyst膮pi艂em wi臋c do pr贸by odnalezienia innej wersji tego zdj臋cia – jako, 偶e to by艂 m贸j avatar na wielu forach, mia艂em je na dysku (w katalogu z obrobionymi zdj臋ciami) w wielu rozmiarach.

Bingo! Zdj臋cie si臋 znalaz艂o – ale tylko obrobione. Sur贸wki brak. Szybkie sprawdzenie danych w Exifie potwierdza m贸j stan pami臋ci – data zrobienia zdj臋cia 10 lipca 2009. W Exifie s膮 r贸wnie偶 informacje o pozosta艂ych parametrach zrobienia zdj臋cia. Ustali艂em, 偶e zdj臋cie zrobiono z ogniskow膮 135mm. Wyszuka艂em wi臋c wszystkie pliki JPG, na wszystkich dyskach, kt贸re w Exifie maj膮 ogniskow膮 o d艂ugo艣ci 135mm. Przegl膮d wynik贸w wyszukiwania nie przyni贸s艂 niestety oczekiwanych rezultat贸w – po艣r贸d wynik贸w by艂y tylko obrobione kopie poszukiwanego zdj臋cia – sur贸wki nadal brak.

Zacz膮艂em si臋 wi臋c zastanawia膰, czy dane Exif s膮 prawid艂owe. Przecie偶 rozpoczynaj膮c edycj臋 zdj臋cia A, a wklejaj膮c na p艂贸tno zdj臋cie B, w Exifie zostan膮 dane zdj臋cia A. Przez chwil臋 potraktowa艂em Exif jako fa艂szywy trop. Podj膮艂em nawet zupe艂nie oderwan膮 od rzeczywisto艣ci pr贸b臋 ustalenia wi臋kszej ilo艣ci szczeg贸艂贸w na temat mo偶liwej daty zrobienia tego zdj臋cia – dostrzeg艂em, 偶e w tle zdj臋cia wisi kalendarz. Pomimo tego, 偶e obrobione kopie zdj臋cia by艂y w niskiej rozdzielczo艣ci, uda艂o si臋 odczyta膰 rok kalendarza – 2008. Niewiele to da艂o – zdj臋cie mia艂o by膰 zrobione w 2009, kalendarz jest z 2008 – nie zaw臋偶y艂o to mo偶liwego zakresu dat.

(w mi臋dzyczasie pasek post臋pu, rzeczonej wcze艣niej d艂ugo trwaj膮cej operacji, wolno zmierza艂 ku 50%, wi臋c nadal mia艂em sporo czasu na moje analizy).

Analiza innych zdj臋膰 z dni otaczaj膮cych 10 lipca 2009 potwierdza艂a, 偶e to zdj臋cie mog艂o by膰 zrobione 10 lipca 2009 – u艂o偶enie przedmiot贸w w tle si臋 zgadza艂o. Niestety ostatnie zdj臋cie by艂o z 9 lipca, a kolejne dopiero z 12 lipca. Katalog z 9 lipca ko艅czy艂 si臋 na pliku z numerem 86, a katalog z 12 lipca zaczyna艂 si臋 od pliku z numerem 12. To, 偶e w mi臋dzyczasie formatowa艂em kart臋 i numeracja wyzerowa艂a si臋 jest OK. Ale dlaczego startuje od 12? Czy偶by mi brakowa艂o 11 zdj臋膰? Mo偶e w艂a艣nie tam jest to zdj臋cie, kt贸rego szukam. Tyle pyta艅, a 偶adnych odpowiedzi.

Uruchomi艂em wi臋c stary komputer. Przeszuka艂em ca艂y dysk, ale na nim kompletnie nie by艂o 艣ladu po tych zdj臋ciach. No tak – przecie偶 jaki艣 czas temu skasowa艂em je z tego komputera, bo by艂y tylko trzeci膮 kopi膮. Pierwsza i druga kopia by艂y na dw贸ch dyskach (WD Green oraz WD Red) nowego komputera, zatem nie by艂o sensu trzyma膰 trzeciej kopii.

Ale…. Kopia pierwsza oraz druga (te z nowego komputera) zosta艂y utworzone z danych odczytanych z dysku zewn臋trznego Samsung. Dysku, kt贸ry jak si臋 p贸藕niej okaza艂o by艂 uszkodzony. Jednak zanim si臋 dowiedzia艂em, 偶e jest uszkodzony u偶ywa艂em go jako backupu. Przez d艂ugi czas. W momencie, gdy dysk ten zacz膮艂 szwankowa膰 nawet si臋 tym nie przej膮艂em, bo ca艂a jego zawarto艣膰 by艂a ju偶 bezpieczna na dw贸ch dyskach nowego komputera. Zaraz sami si臋 przekonacie, 偶e by艂o to bardzo z艂udne poczucie bezpiecze艅stwa.

Odk艂adaj膮c stary komputer na swoje miejsce do g艂owy przysz艂a mi jeszcze jedna my艣l – przecie偶 ja kiedy艣 te zdj臋cia nagra艂em na p艂yty! Szybkie przeszukanie archiw贸w i ju偶 mam w d艂oni p艂yt臋 podpisan膮 2009.07.10. Czuj臋 specyficzny zapach, charakterystyczny dla p艂yt. Wk艂adam kr膮偶ek DVD do komputera, a nap臋d powoli rozp臋dza si臋. Jak dawno nie s艂ysza艂em tego d藕wi臋ku. Na p艂ycie s膮 92 pliki. Plik z numerem 90 to zdj臋cie, kt贸rego szuka艂em. Super!

Tylko sk膮d ta r贸偶nica w zawarto艣ci katalog贸w? Teraz wszystko sta艂o si臋 jasne. Pierwszy backup (nagranie zdj臋膰 na p艂yt臋) wykona艂em jeszcze ze starego komputera. W艂a艣nie na ten komputer przegrywa艂em wtedy zdj臋cia bezpo艣rednio z aparatu. Za jaki艣 czas kupi艂em dysk zewn臋trzny Samsunga i zrobi艂em na nim backup zdj臋膰. Jednocze艣nie przesta艂em backupowa膰 zdj臋cia na p艂ytach. My艣la艂em, 偶e na dysku zewn臋trznym b臋d膮 bezpieczne. Dysk trzyma艂em w szufladzie, pod艂膮cza艂em go do komputera tylko, 偶eby skopiowa膰 na niego pliki. Nigdy nie wynosi艂em go poza mieszkanie. Teoretycznie wi臋c nic nie mog艂o mu si臋 sta膰, wydawa艂 si臋 by膰 pewnym no艣nikiem danych.

Jaki艣 czas p贸藕niej p贸藕niej kupi艂em nowy komputer. Jednak dane na nowy komputer nie by艂y przegrywane bezpo艣rednio ze starego komputera, ani z p艂yt – tylko z dysku zewn臋trznego. Gdy wszystkie pliki le偶a艂y bezpiecznie (jak mi si臋 wtedy wydawa艂o) w kilku miejscach na nowym komputerze, sformatowa艂em stary komputer.

Po jakim艣 czasie zacz臋艂y si臋 problemy z dyskiem zewn臋trznym Samsung. Jego pod艂膮czenie czasem zawiesza艂o komputer, bardzo wolno dzia艂a艂, a bywa艂o, 偶e nie da艂o si臋 odczyta膰 plik贸w. A wi臋c Samsung si臋 zepsu艂. Cz臋艣膰 plik贸w, kt贸re by艂y na nim zapisane by艂a wype艂niona zerami, a kolejna cz臋艣膰 plik贸w po prostu znikn臋艂a. Niestety – od czasu powstania tych uszkodze艅, do momentu ich odkrycia min臋艂o sporo czasu. Bo wszystko co skopiowa艂em z tego dysku na nowy komputer by艂o obci膮偶one wadami – zerami w niekt贸rych plikach lub niepe艂nymi katalogami. Jednak kopiuj膮c te dane na nowy komputer o tym nie wiedzia艂em – przed sformatowaniem starego komputera nie sprawdzi艂em checksum katalog贸w backup贸w – co by艂o moim b艂臋dem. Tak wi臋c backupowa艂em sobie dalej te uszkodzone pliki i katalogi z brakami, nie wiedz膮c o tym. Gorsze by艂o to, 偶e losowe sprawdzanie integralno艣ci danych (czyli po prostu przegl膮danie r贸偶nych 艣wie偶o skopiowanych plik贸w) nie wykaza艂o, 偶e s膮 problemy. Uszkodzenia by艂 zbyt ma艂e, i wybieraj膮c losowe zdj臋cia trafia艂em zawsze akurat na takie, kt贸re da艂o si臋 otworzy膰.

Ostatecznie wszystkie pliki, kt贸rych brakowa艂o w bie偶膮cych kopiach odzyska艂em – cz臋艣膰 z p艂yt, a cz臋艣膰 z innych archiw贸w, takich jak za艂膮czniki do maili czy chmury.

Jak wiadomo ludzie dziel膮 si臋 na dwie grupy: na tych kt贸rzy robi膮 backupy oraz na tych kt贸rzy b臋d膮 robi膰 backupy. Jednak jak wida膰 na moim przyk艂adzie samo kopiowanie plik贸w nie zawsze wystarcza. Warto sprawdza膰 sumy kontrolne wszystkich backup贸w oraz danych 藕r贸d艂owych. Dane, kt贸re le偶膮 na dysku z backupem, maj膮 ten problem, 偶e rzadko do nich si臋gamy – bo zwykle korzystamy z danych 藕r贸d艂owych. Mog膮 si臋 wi臋c uszkodzi膰, i nawet si臋 o tym nie dowiemy. Robi膮c kopi臋 uszkodzonych danych, b臋dziemy 偶y膰 w prze艣wiadczeniu o bezpiecze艅stwie naszych plik贸w, ale b臋dzie to mia艂o dla nas zgubne skutki. Cz臋艣ciowym rozwi膮zaniem jest wi臋c robienie backup贸w zawsze tylko z danych 藕r贸d艂owych. Jak wida膰 backup backupu backupu mo偶e si臋 nie sprawdzi膰, je艣li ju偶 pierwszy z nich ma wady ukryte.

Obecnie posiadam backup zdj臋膰 w dw贸ch miejscach, a wszystkie sumy kontrolne s膮 zgodne. Wydaje si臋 wi臋c, 偶e wszystko jest OK. Jednak mimo wszystko zastanawiam si臋, czy nie zainwestowa膰 w kolejny spos贸b backupu, np. nagrywark臋 blu ray. Bo przecie偶 ka偶dy kolejny n backup, zwi臋ksza szanse na odzyskanie danych, je艣li poprzednie n-1 backup贸w zawiedzie.

Optymalizacja pracy – wykorzystanie skr贸t贸w klawiaturowych

Oto trzeci post z cyklu optymalizacji pracy. Dzi艣 porusz臋 temat wykorzystania skr贸t贸w klawiaturowych.
Zdecydowana wi臋kszo艣膰 czynno艣ci mo偶e by膰 wykonana za pomoc膮 skr贸t贸w klawiaturowych. Zwalnia nas to z konieczno艣ci klikania mysz膮, dzi臋ki czemu zaoszcz臋dzamy czas. Warto pami臋ta膰, 偶e jednak nie wszystkie narz臋dzia s膮 przystosowane do tego, aby pracowa膰 z nimi za pomoc膮 klawiatury. Na szcz臋艣cie w przypadku aplikacji dla developer贸w tw贸rcy oprogramowania nie zapominaj膮 o tym jak wa偶na jest mo偶liwo艣膰 swobodnej pracy z klawiatur膮.

Wszystkie skr贸ty u偶yte w przyk艂adach dotycz膮 systemu Windows. S膮 to jednak na tyle elementarne przyk艂ady, 偶e u偶ytkownicy innych system贸w nie powinni mie膰 problem贸w z translacj膮 skr贸t贸w na ich 艣rodowiska pracy,

Zanim przejdziemy dalej, warto wspomnie膰 o standardowych klawiszach, kt贸re z regu艂y maj膮 takie samo znaczenie w wi臋kszo艣ci aplikacji:

  • Ctrl+C, Ctrl+V, Ctrl+X – czyli kopiuj, wklej i wytnij
  • Page Up, Page Down – przewijanie ca艂ych stron
  • Home, End – przeniesienie na pocz膮tek i koniec (linii, strony, listy), z Ctrl przenosi na pocz膮tek/koniec dokumentu
  • Enter, Ctrl+Enter – zatwierdzenie – okna dialogowego, pytania
  • Delete – kasowanie znaku na lewo od kursora
  • Tab, Ctrl+Tab – zmiana focusu w formularzu, prze艂膮czanie kart (cz臋sto mylnie nazywanych zak艂adkami)
  • Esc – anulowanie pyta艅, wyj艣cie
  • Alt lewy oraz Alt prawy – wspomn臋 tylko, 偶e maj膮 zupe艂nie inne znaczenie i to nie jest ten sam klawisz

Klawisze obecnie niewykorzystywane (warto pomy艣le膰 nad przypisaniem do nich w艂asnej funkcji):

  • Scroll lock – znam tylko jedn膮 aplikacj臋, kt贸ra korzysta z tego klawisza – MS Excel. S艂u偶y on tam do blokady przewijania (kursory przewijaj膮 akrusz, zamiast przesuwa膰 aktywn膮 kom贸rk臋)
  • Pause – ja pod ten klawisz mam przypisan膮 pauz臋 w odtwarzaczu muzyki

Domy艣lam si臋, 偶e dla wi臋kszo艣ci z was wszystkie te klawisze s膮 doskonale znane, ale nie mog艂em ich pomin膮膰. Chocia偶 z drugiej strony… ci膮gle spotykam si臋 z nagminnym korzystaniem z myszy zamiast wykorzystania skr贸t贸w, nawet dla tak prostych operacji jak kopiowanie, wklejanie czy te偶 zaznaczanie tekstu. Je艣li ju偶 jeste艣my przy temacie zaznaczania tekstu – w przypadku kodu, warto skorzysta膰 tutaj z mo偶liwo艣ci jakie daje nam IDE. W IntelliJ za pomoc膮 Ctrl(+Shift)+W mo偶emy w bardzo prosty spos贸b zwi臋ksza膰 (zmniejsza膰) zaznaczenie kodu w kontek艣cie miejsca, w kt贸rym si臋 aktualnie znajdujemy.

Przyk艂ad:
Ustawiam si臋 w miejscu edycji – tam, gdzie jest widoczny kursor.
bm1

Naciskam Ctrl+W – zaznaczony zostaje najbli偶szy wyraz.
bm2

Ponowne naci艣ni臋cie Ctrl+W – zaznaczony zostaje ca艂y napis.
bm3

Naciskam kombinacj臋 Ctrl+W nadal – wida膰, 偶e zaznaczony obszar zwi臋ksza si臋.
bm4

Je艣li zaznaczy艂em zbyt du偶o – naci艣ni臋cie Ctrl+Shift+W zmniejszy obszar zaznaczenia o jeden krok.
bm5

Je偶eli nasze ulubione IDE nie posiada tej funkcji – nic straconego. Nadal mo偶emy si臋 sprawnie porusza膰 po edytorze korzystaj膮c z klawiszy Home, End, Page Up, Page Down oraz klawiszy kursora. Oczywi艣cie r贸wnie偶 w po艂膮czeniu z Ctrl i Shift (dla zaznaczania). Ctrl z regu艂y zwi臋ksza zasi臋g dzia艂ania. Przyk艂adowo: Home przenosi na pocz膮tek linii, Ctrl+Home przenosi na pocz膮tek pliku. Strza艂ka w lewo przesuwa si臋 o jeden znak w lewo, a razem z Ctrl przesuwa si臋 o ca艂y wyraz w lewo. Je艣li chodzi o zaznaczanie tekstu, wybieranie element贸w z listy, itd – jest jeszcze jedna rzecz – czasem szybciej jest przenie艣膰 si臋 na koniec (End lub Page Down) i stamt膮d rozpocz膮膰 zaznaczanie (Shift + kursory) ni偶 operowa膰 od pocz膮tku.
Przyk艂ad: mamy list臋, kt贸ra sk艂ada si臋 z 20 element贸w, i chcemy zaznaczy膰 17 i 18. Du偶o szybciej jest nacisn膮膰 Page Down (przeniesie na koniec listy), teraz strza艂k臋 w g贸r臋 i w odpowiednim momencie Shift, ni偶 strza艂k膮 w d贸艂 lecie膰 od pocz膮tku listy do prawie samego ko艅ca. Pami臋tajmy – czasem mimo wszystko szybciej b臋dzie zaznaczy膰 tekst myszk膮, ni偶 klika膰 klawiszami. Ale to taki wyj膮tek od regu艂y.
Uzytkownicy laptop贸w b臋d膮 jeszcze cz臋sto zmuszeni do nacisni臋cia jeszcze jednego klawisza – Fn. Nie wiem dlaczego tylu producent贸w decyduje si臋 na “ukrycie” podstawowych klawiszy, takich jak Home czy Page Up pod innym klawiszem – tak, 偶e trzeba naciska膰 Fn aby z nich skorzysta膰. Co gorsze – zauwa偶y艂em trend, 偶e niekt贸re modele nowych laptop贸w wcale nie posiadaj膮 ju偶 Page Up oraz Page Down. Warto zwr贸ci膰 na to uwag臋 podczas zakupu nowego sprz臋tu.

Rozpoznanie skr贸t贸w
Nie zawsze jeste艣my skazani na 偶mudne przegl膮danie menu w poszukiwaniu skr贸t贸w klawiaturowych. W przypadku IntelliJ warto skorzysta膰 z Ctrl+Shift+A – czyli z okna, kt贸re umo偶liwia dost臋p do wszystkiego, je艣li tylko znamy nazw臋 tego, co chcemy zrobi膰.

Wpisanie w okno s艂owa new wy艣wietli nam wszystkie operacje z tym zwi膮zane. Wida膰, 偶e opcja New… (tworz膮ca nowy plik/zas贸b/itd) ma przypisany skr贸t Alt+Insert. Niezale偶nie od tego czy skorzystamy ze skr贸tu, czy te偶 nie – zawsze mo偶na za pomoc膮 klawiszy kursor贸w pod艣wietli膰 wybran膮 opcj臋 i zatwierdzi膰 jej wykonanie klawiszem Enter.
ctrl shift a
Bardzo ceni臋 sobie t臋 funkcjonalno艣膰 IntelliJ – nie tylko pomgada odnale藕膰 skr贸ty, ale umo偶liwia te偶 szybki dost臋p do funkcji, kt贸re nie maj膮 skr贸t贸w – wystarczy wpisa膰 nazw臋, wybra膰 z listy i Enter. Jest to du偶o szybsze rozwi膮zanie, ni偶 偶mudne szukanie danej opcji w menu.

Kolejnym wartym odnotowania dodatkiem jest Key promoter dla IntelliJ (lub MouseFeed dla Eclipse). Je艣li klikniemy mysz膮 na funkcjonalno艣膰, dla kt贸rej istnieje przypisany skr贸t klawiaturowy – wy艣wietli si臋 okno informuj膮ce o tym, jaki to jest skr贸t. 艢wietny spos贸b na szybk膮 nauk臋 skr贸t贸w.
promoter

Zdecydowana wi臋kszo艣膰 aplikacji umo偶liwia przypisywanie w艂asnych skr贸t贸w do wybranych czynno艣ci. Warto z tego skorzysta膰.

Istnieje jeszcze jeden spos贸b na szybkie uzyskanie dost臋pu (bez u偶ycia myszy) do wybranych czynno艣ci, nawet tych g艂臋boko zakopanych w mneu – podkre艣lone litery. Aby z tego skorzysta膰, nale偶y nacisn膮c lewy Alt, a nast臋pnie podkre艣lon膮 liter臋 z nazwy menu, do kt贸rego chcemy si臋 dosta膰. Gdy menu si臋 otworzy – zn贸w mo偶emy nacisn膮膰 wybran膮 podkre艣lon膮 liter臋 z teog menu lub po prostu za pomoc膮 kursor贸w i klawisza enter wybra膰 偶膮dan膮 opcj臋.
podkreslenia

W trosce o nasz膮 efektywno艣膰 r贸wnie偶 niekt贸re aplikacje webowe definiuj膮 skr贸ty klawiature, np. Gmail. Zwr贸膰my na to uwag臋 i nauczmy si臋 r贸wnie偶 tych skr贸t贸w.

Czasem zdarza si臋, 偶e po u偶yciu jakiego艣 skr贸tu, zawsze pojawia si臋 okno z pytaniem (nie mo偶na wybra膰 “Nie pokazuj wi臋cej tego okna”), a co gorsze – okno nie reaguje na klawisz Enter. Ja sobi臋 z tym radz臋 w nast臋puj膮cy spos贸b – ustawiam kursor myszki na miejscu, gdzie za chwil臋 pojawi si臋 to okno, a dok艂adnie w miejscu gdzi臋 b臋dzie przycisk zatwierdzaj膮cy je. Nast臋pnie mog臋 bez czytania zawarto艣ci okna i k艂adzenia ca艂ej r臋ki na myszce klikn膮膰 jednym palcem (najmniejszym z prawej r臋ki) lewy przycisk myszy – okno si臋 zamknie, operacja si臋 wykona, a nie musia艂em korzysta膰 z myszy w spos贸b ci膮g艂y. Wykona艂em tylko jedno klikni臋cie jednym palcem. Ma to szczeg贸lne zastosowanie do powtarzalnych operacji, gdzie wspomniane problematyczne okno b臋dzie si臋 pojawia膰 wiele razy, zawsze w tym samym miejscu. Nagrywanie makr r贸wnie偶 jest bardzo dobr膮 praktyk膮 – ale zn贸w dochodzimy do tego, 偶e nie ka偶da aplikacja na to pozwala.

Prze艂膮czanie aplikacji
U偶ytkownicy Windowsa mog膮 skorzysta膰 z opcji przypi臋cia ulubionych aplikacji do paska zada艅.
W moim przypadku klawisz Windows+2 uruchamia Firefoxa, Windows+4 Winampa, a Windows+6 uruchamia konsol臋 Git Bash.
pasek zadan
Je艣li mamy otwartych wiele okien danej aplikacji – Windows+numer b臋d膮 cyklicznie pomi臋dzy nimi prze艂膮cza膰.

Podsumowanie
Korzystanie z klawiatury zamiast myszy pozytywnie wp艂ywa na nasz膮 efektywno艣膰. W wi臋kszo艣ci przypadk贸w skraca czas potrzebny na wykonanie danej czynno艣ci. Niestety nadal mo偶na spotka膰 aplikacje “odporne” na efektywno艣膰, gdzie bez przeklikania mysz膮 przez 1342 okienek i pyta艅 nie damy rady nic zdzia艂a膰, gdzie okna dialogowe na Enter dodaj膮 niewidoczn膮 lini臋 tekstu w polu jednolinijnym, a klawisz Tab przesuwa kursor poza szeroko艣膰 tego pola. Zwykle problem dotyczy starych aplikacji, oraz tych napisanych w spos贸b niechlujny. Jestem zwolennikiem korzystania z klawiatury tam gdzie jest to mo偶liwe i zwi臋ksza to moj膮 produktywno艣膰.

Optymalizacja pracy – pulpit i ekran

Pozostaj膮c w temacie optymalizacji pracy, warto wspomnie膰 o organizacji miejsca na pulpicie, lub te偶 og贸lnie – na ekranie. Cz臋sto lekcewa偶onym aspektem jest odpowiednie wykorzystanie powierzchni ekranu. Samo posiadanie monitora o du偶ej rozdzielczo艣ci nie oznacza, 偶e potrafimy umiej臋tnie wykorzysta膰 jego mo偶liwo艣ci. Z drugiej strony – dysponuj膮c ekranem o niezbyt du偶ej rozdzielczo艣ci mo偶emy sprawi膰, aby jego wykorzystanie by艂o efektywniejsze. W dzisiejszym wpisie postaram si臋 pokaza膰 kilka pomys艂贸w na usprawnienia.

Organizacja pojedynczego ekranu
Rozmieszczaj膮c okna na ekranie cz臋sto dochodzi do sytuacji, gdy spora ilo艣膰 miejsca marnuje si臋 – zwykle po bokach. Problem jest szczeg贸lnie widoczny podczas przegl膮dania stron w sieci, gdzie cz臋sto po lewej i prawej stronie strony mamy puste, niewype艂nione niczym miejsca. Obecnie webdeveloperzy zaczynaj膮 pisa膰 strony z uwzgl臋dnieniem wykorzystania ca艂ej dost臋pnej powierzchni. Cz臋stym zjawiskiem jest te偶 pisanie strony w taki spos贸b, aby dynamnicznie dostosowywa艂y si臋 do ekran贸w r贸偶nych rozmiar贸w – smarftfon, tablet czy te偶 PC. Jako przyk艂ad niech pos艂u偶y strona javaworld:
javaworld
艁atwo zauwa偶y膰, 偶e du偶o miejca si臋 marnuje.
Aby sobie z tym radzi膰 warto wypr贸bowa膰 narz臋dzia typu window layout manager. S艂u偶膮 one do tego, aby w prosty i 艂atwy spos贸b zmienia膰 rozmiar okien, uk艂ada膰 je w wyznaczonych miejscach na ekranie oraz przyci膮ga膰 do kraw臋dzi. Oczywi艣cie wszystko ma najwi臋kszy sens, gdy ka偶d膮 z tych operacji wykonujemy za pomoc膮 klawiatury – czyli z wykorzystaniem odpowiednich skr贸t贸w klawiaturowych. Wykonuj膮c tylko klika klinki臋膰 w klawiatur臋, bez problemu uda艂o mi si臋 uzyska膰 efekt jak na obrazku poni偶ej:
ekran podzielony
Javaworld zajmuje lew膮 po艂ow臋 ekranu, a prawa po艂owa zosta艂a podzielona na jeszcze dwie cz臋艣ci: na g贸rze widz臋 wpis na blogu, natomiast na dole mog臋 na bie偶膮co 艣ledzi膰 wpisy na lbn.sc.
W moim przypadku, podczas codziennej pracy, cz臋sto lew膮 cz臋艣膰 ekranu zajmuje testowana aplikacja webowa, a praw膮 – output z serwera apliakcji, tail z log贸w lub inna rzecz, kt贸r膮 chc臋 艣ledzi膰 na bie偶膮co.

Narz臋dzia: W przypadku wi臋kszo艣ci Linux贸w oraz Mac贸w – wszystko jest w standardzie. W Windowsie sprawdza si臋 aplikacja o nazwie WinSplit Revolution. W kontek艣cie Maca, warto wspomnie膰 tak偶e o http://www.irradiatedsoftware.com/sizeup/.

Wiele pulpit贸w
Kolejnym zagadniemie jest wiele pulpit贸w. Na ka偶dym z nich mo偶emy mie膰 otwarte r贸偶ne aplikacje, zwykle reprezentuj膮ce r贸偶ne konteksty tego, nad czym aktualnie pracujemy. Sens stosowania wielu pulpit贸w jest widoczny szczeg贸lnie wtedy, gdy nasza codzienna praca wymaga posiadania du偶ej liczby aplikacji otwartych jednocze艣nie. Wtedy zamiast 偶mudnego prze艂膮czania si臋 pomi臋dzy aplikacjami (alt+tab) mo偶emy zmienia膰 ca艂e pulpity (czyli konteksty naszej pracy). Przyk艂adowo: na pierwszym pulpicie uruchamiamy IDE, na drugim przegl膮dark臋 (do testowania naszej aplikacji webowej) kt贸ra dzieli ekran z tailem z log贸w, na trzecim program pocztowy, a na czwartym kolejn膮 przegl膮dark臋 (tym razem wykorzystywan膮 w celach researchowych, np. stack overflow). Przyk艂ad:
virtua win
Maj膮c do dyspozycji jeden ekran fizyczny, otrzymujemy wiele ekran贸w wirtualnych. Co艣 jak screen w terminalu 馃槈 Ja pracuj臋 zwykle na 4 takich ekranach, ale nic nie stoi na przeszkodzie aby skonfigurowa膰 ich wi臋cej. Oczywi艣cie ca艂a obs艂uga tego typu narz臋dzi mo偶e odbywa膰 si臋 za pomoc膮 klawiatury – do czego zach臋cam.

Narz臋dzia: Podobnie jak w poprzednim przypadku: dla wi臋kszo艣ci Linux贸w oraz Mac贸w – wszystko jest w standardzie, dla Windowsa trzeba skorzysta膰 z dodatkowej aplikacji (np. VirtuaWin).

Wiele ekran贸w
Ka偶dy dodatkowy monitor zwi臋ksza fizyczn膮 ilo艣膰 miejsca na ekranie. W po艂膮czeniu z mened偶erami okien oraz wieloma puplitami rezultaty mog膮 by膰 naprawd臋 imponuj膮ce. Drugi monitor wymaga jednak od nas po艣wi臋cenia nieco wi臋cej uwagi, przynajmniej na pocz膮tku. Du偶o wi臋cej dzieje si臋 na ekranie. Po pewnym czasie docenimy jednak dodatkow膮 powierzchni臋 pracy. Wtedy na sta艂e mo偶emy widzie膰 IDE, i inne wymagane do pracy narz臋dzia. Dodatkowy monitor sprawdza si臋 nawet je艣li nie jeste艣my programistami czy te偶 administratorami – doceni膮 go tak偶e osoby, kt贸re pisz膮 wiele maili, czy te偶 po prostu du偶o pracuj膮 z komputerem. Ka偶da chwila zaoszcz臋dzona na braku konieczno艣ci prze艂膮czania si臋 pomi臋dzy oknami mo偶e zosta膰 spo偶ytkowana w bardziej efektywny spos贸b.

IDE
Poni偶ej wida膰 ekran, kt贸ry pojawia si臋 przy pierwszym starcie 艣rodowiska Eclipse:
eclipse by default
Po prawej stronie jest widok “Welcome” – zajmuje sporo miejsca. Je艣li nie b臋dziemy z niego korzysta膰 – zamknijmy go. Tak samo zr贸bmy z ka偶dym innym widokiem, kt贸rego nie musimy widzie膰 przez ca艂y czas.
W przypadku IntelliJ do szybkiego pokazywania/ukrywania widok贸w korzystamy ze skr贸t贸w postaci ALT+1, ALT+2, itp. Oczywi艣cie zawsze mo偶emy skorzysta膰 te偶 z CTRL+SHIFT+A, a nast臋pnie wpisa膰 nazw臋 widoku, kt贸ry nas interesuje. Jak wida膰 na poni偶szym obrazku: ALT+1 steruje widoczo艣ci膮 “Project”, natomiast ALT+7 steruje widoczno艣ci膮 “Structure”:
ij alt 1
W Eclipse za pomoc膮 “ALT+SHIFT+Q, Q” mo偶emy pokaza膰 widok, kt贸ry nas interesuje. Warto zaznaczy膰, 偶e od razu po pokazaniu si臋 okna focus jest ustawiony na polu do wpisania nazwy widoku. Mo偶na wi臋c od razu zacz膮膰 wpisywa膰 偶膮dany widok i zatwierdzi膰 enterem.
eclipse alt shift q q
Dalej korzytaj膮c z ALT(+SHIFT)+F7 mo偶emy prze艂膮cza膰 focus w prz贸d/ty艂 pomi臋dzy poszczeg贸lnymi widokami:eclipse ctrl f7
Skonfigurujmy IDE tak, aby艣my widzieli tylko to, co jest nam naprawd臋 potrzebne. Fakt, 偶e ca艂a szeroko艣膰 panoraminczego ekranu to przesada je艣li chodzi o d艂ugo艣膰 linii kodu, ale zoszcz臋dzone miejsce mo偶na spo偶ytkowa膰 inaczej, np. do wy艣wietlania outline klasy czy struktury projektu.

Podsumowanie
Umiej臋tne korzystanie z powy偶szych narz臋dzi po艂膮czone z odrobin膮 wprawy zdecydownaie poprawi nasze mo偶liwo艣ci. Mened偶ery uk艂adu okien oraz wiele pulpit贸w doceni膮 szczeg贸lnie posiadacze laptop贸w, kt贸rzy cz臋sto pracuj膮 w miejscach, gdzie nie mo偶na postawi膰 drugiego monitora. Jednak niezale偶nie od tego czy mamy netbooka, laptopa czy desktopa z wieloma monitorami – zawsze warto po艣wi臋ci膰 chwil臋 na konfiguracj臋 i wykorzystanie powy偶szych narz臋dzi. Z pewno艣ci膮 ka偶dy ma inne upodobania i inne zdanie na temat tego co chce widzie膰 akurat w danej chwili na ekranie. Zaryzukuj臋 jednak stwierdzenie, 偶e w zdecydowanej wi臋kszo艣ci przypadk贸w problemem nie jest brak miejsca na ekranie – problemem jest to, 偶e nie umiemy odpowiednio zagospodarowa膰 naszego miejsca pracy. Ci膮g艂e prze艂膮czanie kontekst贸w (aplikacji) powoduje spadek wydajno艣ci, zmniejsza nasz膮 produktywno艣膰. Dbajmy wi臋c o takie organizowanie powierzchni ekran贸w, aby sprzyja艂y wi臋kszej efektywno艣ci pracy. To pozwoli nam zaoszcz臋dzi膰 czas, kt贸ry po艣wi臋cimy na napisanie kolejnych linii dobrego kodu pokrytego testami 馃檪

Optymalizacja pracy – bash

Pomimo tego, 偶e na codzie艅 korzystam z IntelliJ, to jednak do wykonywania build贸w, obs艂ugi GITa i kilku innych czynno艣ci u偶ywam basha. Jest to dla mnie znacznie wygodniejsze rozwi膮zanie, szczeg贸lnie bior膮c pod uwag臋 moje zami艂owanie do korzystania z samej klawiatury dop贸ki to jest mo偶liwe. U偶ywanie myszki to osteczno艣膰 馃檪 Warto po艣wi臋ci膰 chwil臋, na zdefiniowanie alias贸w do czynno艣ci, kt贸re wykonujemy najcz臋艣ciej.

Tak wi臋c – je艣li korzystasz z mavena pomocne b臋d膮 napewno:
alias mci='mvn clean install'
alias mcist='mci -DskipTests'
alias mcp='mvn clean package'
alias mp='mvn package'
alias mvc='mvn clean'
alias mmt='mvn clean package org.pitest:pitest-maven:mutationCoverage'

Ostatnia opcja to odpalenie test贸w mutacyjnych. A co to s膮 testy mutacyjne? Do czego s艂u偶膮 i jak ich u偶ywa膰? O tym wszystkim mo偶esz pos艂ucha膰 na moim talku, link: http://www.youtube.com/watch?v=gMFNV1zeVmQ. Prezentacja odby艂a si臋 w ramach grupy lbn.sc, do kt贸rej zapraszam.

Kolejne aliasy, zaciekawi膮 wszystkich u偶ytkownik贸w GITa. W mojej ocenie wsparcie IntelliJ dla GITa nieco kuleje. W IJ moja praca GITem ogranicza si臋 do przegl膮dania historii pliku. Pozosta艂e komendy wol臋 wykonywa膰 z basha. Oto gitowe aliasy:
alias gl='git log --graph --pretty=format:"%h - %d %s (%cr) " --abbrev-commit'
alias glg='git log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue reverse)%Creset" --abbrev-commit'
alias gap='git add --patch'
alias gc='git checkout'
alias gs='git status'
alias gp='git pull'

Bardzo cz臋sto korzystam z glg kt贸re w szybki spos贸b pozwala sprawdzi膰 histori臋 ga艂臋zi:
glg

Mam r贸wnie偶 zdefiniowane aliasy cc, ci, cj, ce itp, kt贸re przenosz膮 mnie bezpo艣rednio do katalogu danego projektu. Wtedy zamiast pisac cd dluga/sciezka/do/projektu pisz臋 tylko ci i ju偶 jestem w odpowiednim katalogu.

Kolejn膮 rzecz膮 (i ostatni膮 na dzi艣) kt贸r膮 mam zdefiniowanym w swoim ~/.bash_profile jest kolorowanie outputu mavena. Bardzo wygodne, przydatne i do tego 艣wietnie wygl膮da 馃槈
# thanks to: http://blog.blindgaenger.net/colorize_maven_output.html
# Colorize Maven Output
alias maven="command mvn"
color_maven() {
maven $* | sed -e 's/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/Tests run: \1, Failures: \2, Errors: \3, Skipped: \4/g' \
-e 's/\(\[WARN\].*\)/\1/g' \
-e 's/\(WARN.*\)/\1/g' \
-e 's/\(\[INFO\].*\)/\1/g' \
-e 's/\(\[ERROR\].*\)/\1/g' \
-e 's/\(BUILD FAILURE.*\)/\1/g' \
-e 's/\(FAILURE!.*\)/\1/g' \
-e 's/\(BUILD SUCCESS.*\)/\1/g' \
-e 's/\(SUCCESS.*\)/\1/g'

}
alias mvn=color_maven

Nieudany build:
build-fail

Udany build:
build-success

B臋d膮c w temacie optymalizacji pracy koniecznie musz臋 wspomnie膰 o wykorzystaniu pot臋gi skr贸t贸w klawiszowych, kt贸rej wiele os贸b niedocenia. Ale to dosy膰 obszerny temat, kt贸remu po艣wi臋cony zostanie odr臋bny wpis 馃檪

Kr贸tka historia o GlassFish4 i BeanManager

W aplikacji Java EE6, nad kt贸r膮 pracuj臋, wykorzystuj臋 CQRS. W zwi膮zku z tym korzystam z dosy膰 rozbudowanej floty Command贸w i Handler贸w. Aplikacja na starcie wyszukuje wszystkie Handlery i zapisuje mapowanie Command na Handler. Aby uzyska膰 list臋 wszystkich handler贸w korzystam z BeanManagera. Samo pozyskanie instancji BeanManagera odbywa si臋 w nast臋puj膮cy spos贸b:

Gdy mamy ju偶 BeanManagera mo偶emy przej艣膰 do sedna sprawy. Oto CommandHandler:

Sama rejestracja handler贸w wygl膮da w ten spos贸b:

Kod bez problem贸w dzia艂a艂 na JBossie oraz Resinie. Po przesiadce na GlassFisha 4 zacz臋艂y si臋 schody – metoda getBeans zacz臋艂a zwraca膰 pusty zbi贸r.聽Korzystanie z aplikacji sta艂o si臋 niemo偶liwe, gdy偶 nie dzia艂a艂o nawet logowanie. Musia艂em wi臋c przyjrze膰 si臋 temu kodowi bli偶ej.

Klasa LoginHandler implementuje CommandHandler. Dodatkowo pami臋tamy, 偶e pocz膮tkiem wszystkiego w Javie jest klasa Object, tak wi臋c mamy tak膮 oto hierarchi臋:

Posi艂kuj膮c si臋 IntelliJ oraz debugiem za pomoc膮 getBeans(Object.class) uzyska艂em dost臋p do wszystkich zarejestrowanych bean贸w. Na tej li艣cie znalaz艂em tak偶e moje problematyczne beany.

Zag艂臋biaj膮c si臋 w problem natrafi艂em na to, 偶e metoda getTypes() rzeczonego handlera zwraca 3 warto艣ci:

debug-pt1

Pomimo obecno艣ci CommandHandler na pozycji pierwszej, nie jest ona brana pod uwag臋 podczas wo艂ania beanManager.getBeans(CommandHandler.class). Wynika to z tego, 偶e CommandHandler przyjmuje typy generyczne, a GlassFish4 inaczej ni偶 JBoss i Resin traktuje takie klasy.

Rozwi膮zanie, kt贸re uda艂o mi si臋 znale藕膰 to wprowadzenie typu nadrz臋dnego (bez generyk贸w) wobec CommandHandler.

h2

Teraz nale偶a艂o jeszcze zmodyfikowa膰 metod臋 odnajduj膮c膮 handlery:

I wszystko dzia艂a jak nale偶y.