Skróty klawiaturowe w IDE IntelliJ IDEA

Dobry programista nie używa myszki. Nie zliczę ile razy spotkałem się z tym stwierdzeniem, pisał o tym Robert C. Martin, często słychać to podczas prelekcji na temat stylu pracy programisty. Dlatego chciałem pokazać tutaj moją listę skrótów, których używam najczęściej. U mnie jest ona wydrukowana i przyklejona na podstawce monitora. Kiedyś spotkałem się z tym, że ktoś pokolorował sobie klawiaturę w odpowiedni sposób, są na rynku firmy które mogę przygotować spersonalizowane naklejki na klawiaturę (swoją drogą, nigdy nie słyszałem o pracodawcy, który wymuszając korzystanie z jakiegoś narzędzia, przyozdobił by tak klawiatury. Koszt mały, a szansa wzrostu wydajności całkiem spora). Na początku wyszukiwanie skrótu na liście trwa trochę czasu, ale z czasem potrafi go naprawdę sporo zaoszczędzić. Przede wszystkim nie odrywa nas od klawiatury w poszukiwaniu innego kontrolera, pracuje się bardziej płynnie. Można dzięki temu stosować np pomodoro technique, wyciszając wszystkie powiadomienia na określony czas. Ale do rzeczy, oto lista skrótów które wg mnie są najpotrzebniejsze:

Build  CTRL + F9
Build and run SHIFT + F10
Debug SHFT + F9 
Line Comment or Uncomment CTRL + / 
Block Comment or Uncomment CTRL + SHIFT + / 
Command look-up CTRL + SHIFT + A 
Project quick fix ALT + ENTER 
Refactor/Rename SHFT + F6
Reformat code CTRL + ALT + L
Optimize imports CTRL + ALT + O 
Generate method ALT + INSERT
Code Completion CTRL + SPACE 
Surround code block CTRL + ALT + T 
Delete line CTRL + Y
Copy line CTRL + D
Navigate open tabs ALT + left-arrow ALT + right-arrow
Toggle project visibility ALT + 1
Close Active Tab CTRL + F4 
Find by symbol name CTRL + ALT + SHIFT + N
Find Class CTRL + N 
Find File CTRL + SHFT + N 
Search in path/project CTRL + SHIFT + F 
Lookup recent files CTRL + E 
Show Call hierarchy CTRL + ALT + H
Show parameters for method CTRL + P 
Quick documentation lookup CTRL + Q 
Safe Delete ALT + DELETE 
Go to previous/next method ALT + UP/DOWN 
Go to declaration CTRL + B 
Go to implementation CTRL + ALT + B 
Go to Type Declaration CTRL + SHIFT + B 
Go to Super CTRL + U 
Go to line CTRL + G 
Go to source F4 
Navigate to last edit location CTRL + SHIFT + BACKSPACE
public … main … {} psvm
System.out.println(); sout

Środowisko IntelliJ dostarcza również pełną listę skrótów do wydrukowania i korzystania, są one dostępne po wybraniu menu help -> Default Keymap Reference. Zostajemy wtedy przekierowani do pliku pdf na tą stronę internetową: IntelliJIDEA_ReferenceCard.pdf

Kiedyś była jeszcze całkiem przydatna wtyczka Key Promoter, służąca do zapamiętywania skrótów. Za każdym razem, kiedy kliknęliśmy myszką coś, co można było wykonać kombinacją klawiszy, wyświetlała w dymku powiadomienie o tym fakcie. Niestety nie jest już rozwijana i nie działa, nie mniej kod źródłowy jest dostarczany razem z nią, może ktoś kiedyś ją ożywi 😉

Swoją drogą, słyszałem kiedyś o developerze, który zaczynając pracę przynosił swoją listę i importował ją do środowiska. Od strony pracodawcy wygląda to na pewno profesjonalnie, tylko najprawdopodobniej ten człowiek wyuczył się skrótów korzystając z innego ide niż te, z którego aktualnie miał korzystać. Cóż, to też się zdarza, osobista decyzja, czy ktoś stworzy sobie swoje własne skróty, czy będzie korzystał z tych dostarczonych przez środowisko, zwłaszcza, że IntelliJ ma możliwość wybrania, czy nie chcemy korzystać np ze skrótów z Eclipse, czy NetBeans.

Pozdrawiam!

Zmiana density (dpi) w androidzie bez roota

Dzisiaj opiszę jak zmienić DPI bez rootowania telefonu i utraty danych. Wbrew pozorom jest bardzo proste, ale miałem pewne problemy korzystając z tej metody z niektórymi aplikacjami(np. Swiftkey), z kolei klasycznie, przestawiając w pliku build.prop było w porządku. Cóż, ten sposób jest dobry, kiedy szukamy idealnego ustawienia dla siebie 😉 pozwala szybko się przestawiać. Nie mniej, warto ustawić interesujące nas DPI i uruchomić kilka aplikacji, zobaczyć, czy wyglądają i działają w porządku. Warto też pamiętać o tym, że widgety głupieją i czasem znikną z ekranu, tak samo jak foldery z aplikacjami (najczęściej zdarza się to przy zmianie w górę czyli z mniejszej cyfry na większą). Dla porządku napiszę, żadnej odpowiedzialności z mojej strony za cokolwiek. Zmiany na własną odpowiedzialność. Zaczynamy:

1. Aby zadziałało muszą być zainstalowane sterowniki adb, telefon musi mieć włączone debugowanie, oraz oczywiście musi być widoczny w systemie
2. Uruchamiamy wiersz polecenia jako administrator
3. Komenda adb devices zwraca nam informację o podłączonych urządzeniach, najlepiej, żeby podłączone było jedno i żadnych emulatorów
4. Wpisujemy: adb shell wm density 480 && adb reboot 
5. 480 możemy zastąpić liczbą dpi jakie nas interesuje
5. Jeśli zadziałało, telefon uruchomi się od nowa ze zmienionym dpi
5. Operację możemy powtarzać wielokrotnie, aż do uzyskania interesującego wyniku.
6. Jeśli się rozmyślimy i będziemy chcieli przywrócić standardowe dpi, czyli to zapisane w pliku build.prop: adb shell wm density reset && adb reboot

Tak wygląda cała instrukcja, łatwizna prawda? 😉 Efekty zmian można obejrzeć poniżej:

klasyczne DPI Nexus 5, czyli 480 (klasyczne fullHD)
dpi 350, jak widać zmieniła się nam siatka na 5 aplikacji w poziomie

 

dpi 400, ustawione w moim telefonie, wg mnie wygląda najlepiej na Nexusie 5.
Noo i na koniec, co tak właściwie oznacza DPI? Otóż jest to skrót od „dots per inch”, czyli punkty na cal. Oznacza jaka ilość pikseli przypada na cal powierzchni w naszym urządzeniu. Są do tego odpowiednie standardy, ale modyfikacja tych wartości naprawdę może poprawić wygląd i przyjemność korzystania z naszych urządzeń.
Pozdrawiam!

Android 6.0 Marshmallow, nowości, trzy zgrzyty + dwa fixy. Multiwindow, a także density.

Premiera finalnego wydania Androida Marshmallow już za nami, emocje opadły, dla porządku wrzucę główne nowości:

– nowa kontrola uprawnień (np można zainstalować facebooka i zabronić mu przeglądania kontaktów), a nie tak jak kiedyś, jeśli instalujesz aplikację, zgadzasz się na wszystko
– doze, czyli lepsze zarządzanie baterią, tzn telefon uczy się kiedy go nie używasz i w tym czasie nie zbiera powiadomień, znacznie ogranicza ruch w sieci i w ten sposób oszczędza baterię
– kopie zapasowe ustawień, w tym momencie więcej rzeczy jest przechowywanych na serwerze Google, wystarczy tylko zalogować się do aplikacji i dane się synchronizują.
– lepsza edycja tekstu, z poziomu zaznaczenia możliwość włączenia np. tłumacza
– natywne wsparcie czytnika linii papilarnych

I w sumie..tyle. Zaraz, zaraz, czegoś tutaj brakuje:
W wersjach developerskich mieliśmy przecież multiwindow. A do tego był zapowiedziany Now on tap. Z rzeczy które mnie jeszcze osobiście denerwują jest density na poziomie 480. Wszystkie elementy designu są olbrzymie.

Co z Now on tap? Niestety, nie dostępne w naszym kraju. Szkoda, funkcja naprawdę fajna, natychmiastowe wyszukiwanie danych w zależności od kontekstu ekranu. Np, pytam żony, czy może pójdzie na pizzę, ona pyta gdzie, a ja przytrzymuję klawisz home i już wiem, gdzie są najbliżej zjem pizzę. Szkoda, niestety musimy poczekać.

Co z density? Cóż jest pewien sposób na zmianę, który działa zawsze, ale jest niestabilny (kiedyś go opiszę). Pozostaje edycja pliku build.prop.

A co z multiwindow? Otóż udało mi się znaleźć sposób, opisuje jak tego dokonać (oczywiście, nie biorę odpowiedzialności za ewentualne uszkodzenia itp, etc…).

Aby zacząć w komputerze muszą znajdować się sterowniki do fastboot, komputer musi być podłączony przez usb. Sposób nie wymaga roota.

1. Instalujemy Androida 6.0, (testowałem ten sposób na Nexusie 5)
2. Uruchamiamy telefon w trybie bootloader (POWER+VOL DOWN lub fastboot reboot-bootloader)
3. Instalujemy custom recovery, konkretnie TWRP, podaję link do TWRP dla Nexusa 5
3.1 Ważne, aby zaraz po zainstalowaniu, wybrać z menu Bootloadera opcję recovery, inaczej Google usunie nam naszego customowego i wrzuci swojego zaraz przy pierwszym uruchomieniu
3.2 Uwaga, po zakończeniu wszystkich operacji, po wychodzeniu z recovery twrp pyta się, czy zrootować telefon, cóż w wersji twrp-2.8.7.1 ta opcja powoduje bootloop (sprawdzone empirycznie)
4. W menu recovery wybieramy Mounts i klikamy na System
5. Jeśli nie odpalona to odpalamy konsolę, np klikając Shift+PPM i wybierając opcję: „otwórz okno polecenia tutaj”
6. W wierszu polecenia wywołujemy:
adb pull /system/build.prop
7. To polecenie skopiuje nam z telefonu do miejsca gdzie otwarliśmy konsolę plik build.prop, nie zamykamy konsoli
8. Edytujemy plik build.prop jak tekst (osobiście używam i polecam Notepad++)
9. Znajdujemy takie linie:
ro.sf.lcd_density=480
ro.build.type=user
10. Edycja pierwszej z nich pozwala na zmianę density (moja ulubiona wartość to 400)
11. Edycja drugiej z user na userdebug spowoduje, że w opcjach programistycznych, po włączeniu urządzenia pojawi się coś takiego (zwróćcie uwagę na inny kształt menu, tak się prezentuje density 400):


12. Zapisujemy plik
13. W konsoli wywołujemy po kolei:
adb push build.prop /system/
adb shell
cd system
chmod 644 build.prop
14. Uruchamiamy urządzenie normalnie
15. Po włączeniu w opcjach programistycznych cieszymy się multiwindow!

Należy pamiętać, że multiwindow jest w dalszym ciągu opcją rozwojową, w związku z tym mogą zdarzać się problemy (czytałem, że czasem battery drain).

Po tych poprawkach jest już trochę lepiej, nie mniej dalej brakuje motywów, czy możliwości edycji ikon na pasku. Cóż, czekamy na dalszy rozwój 😉

Pozdrawiam!

Snackbar vs Toast

Wraz z Androidem 5.0 pojawił się Material Design, a razem z nim API do krótkiego wyświetlania powiadomień o nazwie Snackbar. Można na nim łatwo zaimplementować przycisk, co w przypadku Toast nie było już takie proste. Jednak mimo to Toast nie otrzymało statusu @Deprecated, czyli można stosować obydwa elementy, najlepiej w zależności od kontekstu w którym chcemy użyć krótkiego powiadomienia. Po za kontekstem, ważny może być również design i ogólny ux podczas korzystania z aplikacji. Nie spotkałem się z dokładnym przedstawienie kiedy używać którego, podpowiedzią może być to, że Snackbara wystarczy przesunąć aby zniknął, z kolei Toast miał ograniczony czas widoczności i po prostu musi swoje na ekranie wisieć.

Najprostsza implementacja wygląda w ten sposób.

Snackbar:
Snackbar.make(rl, „Snackbar”, Snackbar.LENGTH_LONG).show();

gdzie rl to RelativeLayout na którym ma być wyświetlony Snackbar.

Toast:
Toast.makeText(getApplicationContext(), „Toast”, Toast.LENGTH_LONG).show();

Jak widać, różnic zbyt wielu nie ma, Snackbar odnosi się do layoutu, z kolei Toast do contentu.
Kod który tutaj wkleiłem to implementacja Snackbara z biblioteki AndroidDesignSupportLibrary, o której już wspominałem. Tak wygląda to w najprostszej postaci:

Projekt na githubie.

Pozdrawiam!

Jak zrobić piękną aplikację

Na pewno każdy już zauważył następującą tendencję, że im aplikacja jest ładniejsza, tym ma więcej pobrań. Content jest oczywiście bardzo ważny, ale o wiele lepiej nam korzystać z czegoś co jest przyciąga wzrok, nie jednokrotnie godząc się nawet z częściowym ukryciem potrzebnej funkcjonalności pod jakąś piękną animacją. Czasem jednak coś jest piękne, ale bezużyteczne. Ważne, aby znaleźć złoty środek pomiędzy tymi dwoma wartościami. Ale nie o tym chciałem pisać. Pytanie które chciałem dzisiaj zadać, to jak ważny jest design dla programisty Android? Odpowiedź: coraz ważniejszy. Nie każdy ma jednak talent plastyczny, aby stworzyć piękną grafikę. Ja osobiście, mam taki problem, często wychodzą mi jakieś niedopasowane kolorami i kształtami szkarady. Jednak jest na to sposób, gotowce. Użyłem jednego w swojej poprzedniej aplikacji, dlatego chciałem dzisiaj przedstawić kilka przykładów, oraz podać miejsca gdzie szukać inspiracji.
Zaczynamy od animacji której sam osobiście użyłem ostatnio, czyli:

Ten twórca stworzył jeszcze jedną, bardzo podobną:

Prawda, że są ładne? Znalazłem je na stronie android-arsenal. Godnym polecenia miejscem, gdzie możemy szukać jest również strona dribbble. O to dwa piękne cuda które tam znalazłem:

Implementacja tego typu rozwiązań jest najczęściej bardzo prosta. I stosunkowo niewielkim kosztem można naprawdę bardzo polepszyć wygląd swojej aplikacji. Przy czym jak pisałem we wstępie, nie należy zapominać o funkcjonalności 😉
Pozdrawiam!

Kontrola biletów Wrocław

Mieszkańcy Wrocławia! Tak właściwie, to dla Was jest skierowany ten wpis. Chciałbym mianowicie podzielić się swoim ostatnim dziełem jakim jest aplikacja „Kontrola biletów Wrocław”. Aplikacja nie jest szczególnie rozbudowana, ale wydaje mi się, że przydatna. Pobiera ze strony wroclaw.pl dane o aktualnych kontrolach MPK i prezentuje je w ładnej formie. Myślę, że każdemu taka informacja może się przydać 😉 Oto jak działa:
A tutaj link skąd można ją pobrać
Mam nadzieję, że się przyda, ja na pewno będę z niej korzystał 😉
Pozdrawiam!

Zrobię to, czyli motywacja programisty

Słyszeliście kiedyś, że nie mówi się: „postaram się”, tylko „zrobię to!”. Pierwsze stwierdzenie zawiera taki mały sabotaż, że jeśli coś pójdzie nie tak, to trudno, mogę powiedzieć, że się starałem. Drugie nie pozostawia miejsca na interpretację, po prostu wykonam to zadanie, choćby nie wiem jak było trudne. Jak mówi Will Smith: „Jedyna różnica między nami jest taka, że jeżeli wejdziemy na bieżnie, to albo Ty zejdziesz z niej pierwszy, albo ja na niej umrę”.

Napiszę dzisiaj co nie co o swoim podejściu do zagadnienia motywacji, planowania, ponieważ są one tak naprawdę przynajmniej w moim przypadku: połączone. Co tzn? Że najbardziej zmotywowany jestem, kiedy coś wykonuję według planu. Najlepiej, żebym miał zadanie nie dłuższe niż pół godziny, dzięki temu, mogę je sobie odznaczyć na liście i przejść do następnego, widzę, że ich ubywa, że coś się zmienia. Ważne jest, aby lista zadań na każdy dzień była wykonywalna. Kiedy pracowaliśmy, ale zostało nam jeszcze mnóstwo zadań, na które brakło czasu, wtedy poziom motywacji się obniża. Kiedy o ustalonej godzinie skończymy wszystko i możemy zasiąść i poczytaj kawałek dobrej książki, o tak, to są dobre dni.
Jednak nawet przy takim planowaniu i trzymaniu się zadań, zdarza się, że mamy obsuwę, bo coś wypadnie, albo po prostu nam się nie chce.. Co wtedy? Na to również znalazł się cytat: „kiedy nie masz czasu, znajdź sobie dodatkowe zajęcie”. Dla mnie takim dniem, w którym spadała motywacja był czwartek, zauważyłem to po sobie, taki już jestem. Czwartki są straszne. Co pomogło? Dołączenie do grupy developerów i zobowiązanie się do dostarczenia kawałka kodu co czwartek. Teraz nie ma bólu, obiecałem, jestem im to winny. No dobra, ale co, jeśli motywacja spada w ciągu tygodnia? Ano tak, po pierwsze, ZAWSZE po pracy mam pół godziny przerwy, kiedy leżę i czytam, to jest moje pół godziny, moja regeneracja, nie odbiorę wtedy telefonu, nie sprawdzę maila, nie ma mnie. A potem biorę się za swoje projekty, które realizuję po za pracą. W gorszych momentach pomagają motywacyjne wykłady, bądź cytaty, w sieci trochę tego jest. Mam też ulubionych autorów, z polaków to np. Mateusz Grzesiak, Nikodem Marszałek. Do tego kanały na yt:
People are awesome
Architekci umysłu
Jest tego oczywiście więcej, ale te są chyba najczęściej używane. Ale żeby nie było, rozrywki najczęściej nie planuję. Jeśli zdecyduję, że gdzieś wychodzę, to najczęściej bawimy się spontanicznie. Warto jeszcze chyba wspomnieć, czego używam do planowania, mianowicie jest to narzędzie:
ToDoIst
Miałem kilka przygód z różnym narzędziami, to zostało jak najlepsze.

Na koniec najważniejsza rzecz. Trzeba naprawdę kochać to co się robi, a także mieć konkretny cel. Wtedy jest zdecydowanie łatwiej, chce się tego, ponieważ wiadomo gdzie człowiek dojdzie. Mam głęboko na komputerze zapisanego siebie, jaki będę za 5 lat. I zrobię to, będę właśnie taki.

Pozdrawiam!

Kurs programowania java na Kenis.pl

PSsssst – poniższe informacje są już dość mocno nieaktualne, po najświeższe kursy i wszystkie poprzednie, (płatne i darmowe) zapraszam tutaj: https://kursyandroid.pl/


Każdy kiedyś zaczynał. Dlatego chciałbym podzielić się przygotowanym przeze mnie we współpracy z kenis.pl kursem programowania. Kurs jest o javie, od instalacji środowiska, przez obiektowość, kończąc na nowościach w javie 8. Kurs jest dostępny za darmo, całkowicie i absolutnie, co zresztą jest ideą Kenis, żeby wiedza była była dostępna dla każdego. Nie przedłużam i podaję link do kursu:
Kurs programowania java na Kenis.pl

Podaję jeszcze link do githuba z zadaniami:
github KenisKursJava

Zapraszam serdecznie!

Pozdrawiam!

Animacja zmiany activity

Zauważyliście, że różni producenci stosują czasem różne animacje nowego activity w aplikacjach? Dzisiaj pokażę, jak ujednolicić animację, zwłaszcza wtedy kiedy tworzymy jakiś kreator, jest ona całkiem intuicyjna, zresztą, sami zobaczcie:

Dzisiejszy wpis będzie opowiadał o utworzeniu tej animacji od zera w nowym projekcie, tak aby początkujący poradzili sobie bez problemu, z kolei pro users, znajdą to, czego potrzebują.
Zaczynamy od utworzenia nowego projektu w AndroidStudio, ja pierwszą aktywność nazwałem FirstActivity.

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
    }

}

Po utworzeniu projektu, tworzymy następne Activity klikając File/New/Activity/Blank Activity. Nazwałem je SecondActivity. Kod jest analogiczny jak powyżej, oczywiście inna nazwa klasy i inny parametr metody setContentView. 

Teraz przechodzimy do layoutu i dodajemy, można przez przeciąganie, button. Layout dla pierwszego Activity wygląda tak:

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent”
    android:layout_height=”match_parent” android:paddingLeft=”@dimen/activity_horizontal_margin”
    android:paddingRight=”@dimen/activity_horizontal_margin”
    android:paddingTop=”@dimen/activity_vertical_margin”
    android:paddingBottom=”@dimen/activity_vertical_margin” tools:context=”.FirstActivity”>

    <TextView android:text=”@string/hello_world” android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:id=”@+id/textView2″ />

    <Button
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”@string/next”
        android:id=”@+id/nextBtn”
        android:onClick=”nextClick”
        android:layout_below=”@+id/textView2″
        android:layout_alignParentLeft=”true”
        android:layout_alignParentStart=”true” />

</RelativeLayout>

Layout dla drugiego Activity, jest oczywiście analogiczny, tylko tutaj zamiast next, mamy prev. Czyli pod wywołaniami onClick znajdują się metody nextClick i prevClick. Oto jak je zaimplementować:

public void nextClick(View view) {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
        overridePendingTransition(0, 0);
    }

Metoda overridePendingTransition, to właśnie ta metoda, która odpowiada za animacje pomiędzy Activity. Dokumentacja znajduje się tutaj:
overridePendingTransition doc
Jak widzimy, pod parametrami enter anim oraz exit anim mamy w tym momencie zero i zero. Oznacza to tyle, że nie będzie żadnej animacji przejścia, czyli taki oto efekt:

Ok, a teraz dodamy animacje przejścia ekranu.
Klikamy na folder res, wybieramy new i android resource directory. Nazwiemy sobie nasz katalog anim. Następnie, tworzymy w tym katalogu 4 pliki:

left_in.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”
     android:interpolator=”@android:anim/linear_interpolator”>
    <translate
        android:fromXDelta=”0″
        android:toXDelta=”100%p”
        android:duration=”300″/>
</set>  

left_out.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”
     android:interpolator=”@android:anim/linear_interpolator”>
    <translate
        android:fromXDelta=”0″
        android:toXDelta=”-100%p”
        android:duration=”300″/>
</set> 

right_in.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”
     android:interpolator=”@android:anim/linear_interpolator”>
    <translate
        android:fromXDelta=”100%p”
        android:toXDelta=”0″
        android:duration=”300″/>
</set>  

right_out.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”
     android:interpolator=”@android:anim/linear_interpolator”>
    <translate
        android:fromXDelta=”-100%p”
        android:toXDelta=”0″
        android:duration=”300″/>
</set> 

Teraz tak, w metodzie nextClick zamieniamy parametry na:
overridePendingTransition(R.anim.right_in, R.anim.left_out);
Z kolei w metodzie prevClick:
overridePendingTransition(R.anim.right_out, R.anim.left_in);

I już, gotowe 😉 Animacja działa, możemy ją zwolnić lub przyspieszyć parametrem duration, u mnie trwa 300ms. Albo zmienić sposób rozchodzenia się obrazów metodami fromX oraz toX.
Podaję jeszcze link na githuba z tą właśnie animacją:
github migellal

Pozdrawiam!

Notepad++ czyli narzędzie oszczędzające cenny czas

Dostałem nie tak dawno w pracy zadanie, polegające na wyciągnięciu kilkunastu, kilkudziesięciu zdań z pliku xml. Plik miał jakieś wartości przed zdaniem, miał jakieś wartości po zdaniu, miałem wyciągać tylko te zdania, w których linii występowało <UserTask>. Mogłem oczywiście napisać odpowiedni parser, co zajęło by nie wiem, jakąś pewnie godzinę. Tylko tak naprawdę po co, skoro mamy idealne narzędzie do tego typu przekształceń tekstowych. Oto opis jak wykonywać tego typu zadania:

Skrótem klawiszowym ctrl+h otwieramy zaawansowane narzędzie zamieniania, w którym zaznaczamy wyrażenia regularne.
Dokumentacja wyrażeń regularnych znajduje się tutaj:
Notepad++ regular expressions
A tak wygląda polecenie zamiany wszystkich linii nie zawierających danego tekstu
(?!^.*usertask.*$)^.+
Zamieniamy oczywiście na pusty tekst. W miejsce usertask wpisujemy tekst, który jest kluczem do linii, które mają zostać nieruszone.
Polecenie zamiany wszystkiego przed danym tekstem, w każdej linii:
.*text
Zamieniamy również na pusty tekst.
Polecenie zamiany wszystkiego za danym tekstem, w każdej linii:
[text].*
Tutaj również na pusty tekst. Text to słowo klucz.

Okej mamy już wszystkie zdania, ale każde w nowej linii, niejednokrotnie z kilkoma liniami przerwy, a chcielibyśmy je po przecinku. Oto, jak to się robi:
Edycja/Operacje na liniach/Usuwanie pustych linii.
Teraz wystarczy zamienić znak nowej linii na przecinek. W tym celu zaznaczamy rozszerzony, zamiast wyrażenia regularne i wykonujemy taką operację:
rn
Zamieniamy na przecinek, albo to, czego potrzebujemy. I już, zadanie rozwiązane.
Teraz, do każdego pliku xml mamy takie 5 operacji.

Można szybciej 😉
Przed rozpoczęciem tych wszystkich operacji klikamy: Makra/Rozpocznij nagrywanie.
Wykonujemy wszystkie kroki.
Po zakończeniu klikamy: Makra/Zakończ nagrywanie.
Dla następnego pliku wystarczy już tylko Makra/Odtwórz
Zadanie rozwiązane.

Opowiem teraz dwa słowa o wyrażeniu rn. Tak naprawdę oznacza ono przejście do nowej linii, najprościej mówiąc enter. Symbol r to z angielskiego carriage return, i pochodzi jeszcze z czasów, kiedy zamiast ekranów były drukarki. Symbol ten oznaczał przejście na wysokość pierwszego znaku od lewej strony w drukarce, czyli do początku linii. Z kolei symbol n, czyli new line, to po prostu zejście poziom niżej. Jeżeli spotkalibyście się z określeniem CRLF to oznacza ono to samo. Nie wszystkie systemy jednak używają tego standardu, czasem wystarcza sam CR, czasem sam LF.

To tyle ciekawostek na dziś, mam nadzieję, że przydatny lifehack o notepadzie++! 😉

Pozdrawiam!