All posts by Michał.
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!
TextInputLayout, czyli animowany EditText
To już kolejny wpis o bibliotece:
Android Design Support Library
Dzisiaj chciałem skupić się na bardzo ładnie animowanym polu typu EditText, a mianowicie:
Prawda, że ładne? Zwłaszcza, że możemy dowolnie dobrać sobie te kolory. Ale do kodu. Aby uzyskać taki efekt potrzebujemy obudować nasze pole EditText czymś takim:
<android.support.design.widget.TextInputLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:theme=”@style/TextInputTheme”
android:id=”@+id/usernameTIL” >
<EditText
android:id=”@+id/usernameET”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:textSize=”23sp”
android:hint=”@string/username” />
</android.support.design.widget.TextInputLayout>
Oczywiście, o czym wspominałem w poprzednim wpisie, musimy dodać bibliotekę do gradle:
compile 'com.android.support:design:22.2.0′
Kod który wkleiłem wygląda jakby opisywał się sam, więc nie będę się nad nim rozwodził, ale pokażę w jaki sposób ustawić sobie kolory na takie, które nas interesują i pasują do projektu. Wszystko kryje w pliku styles.xml, dodajemy tam:
<style name=”TextInputTheme” parent=”TextAppearance.AppCompat”>
<item name=”android:textColorHint”>@color/primary</item>
<item name=”colorAccent”>@color/accent</item>
<item name=”colorControlNormal”>@color/controlNormal</item>
<item name=”colorControlActivated”>@color/controlActivated</item>
</style>
Tutaj również wszystko jest samo-opisowe, a jeśli nie jest, to zapraszam do dokumentacji, bądź samodzielnych prób. Te mają to do siebie, że czasem możemy zmienić inny element niż chcieliśmy, ale w efekcie osiągnąć coś innego, ciekawszego niż planowaliśmy. Przynajmniej mi, czasem się tak zdarza.
Ostatnią rzeczą o której chciałem powiedzieć jest efekt uzyskany po wykonaniu po stronie javy tego kodu:
setErrorEnabled(true);
setError(getString(R.string.error_message));
Dzięki temu, możemy ustalić, aby wymagane było uzupełnienie naszego pola. W przypadku jeśli ktoś przejdzie do następnego elementu, zostanie w polu EditText wyświetlona informacja zawarta w stringu error_message. Tutaj również pojawia się ładna animacja, zresztą, sprawdźcie sami.
Pozdrawiam!
Floating Action Button dzięki Android Design Support Library
Będzie dzisiaj o wyglądzie aplikacji na Android, a konkretnie bibliotece:
Android Design Support Library
Chciało by się powiedzieć: wreszcie. Google chciało promować Material Design, a na urządzeniach starszych niż Lollipop nie dało się go tak łatwo zaimplementować. Z sytuacją walczyli niezależni developerzy, tworząc biblioteki pozwalające na prostszą implementację niektórych elementów, ale co biblioteka od Google, to jednak od Google. Dzisiaj właśnie korzystałem z niej pierwszy raz do utworzenia czegoś, na co w skrócie mówi się FAB, czyli Floating Action Button. Chodzi konkretnie o ten button:
Cześć!
Mam na imię Michał i jestem początkującym programistą. W styczniu obroniłem tytuł inżyniera, od jakichś dwóch miesięcy pracuje, jeszcze krócej mieszkam we Wrocławiu. Swoją przygodę z programowaniem zacząłem na studiach, wcześniej nie do końca wiedziałem co chcę robić. Uczyłem się trochę C++, potem przesiadłem się na Javę, aby w końcu najbardziej jarać się Androidem. Nie pracuję w Androidzie, aktualnie pracuję w technologii GWT. To by było na tyle z mojej krótkiej historii.
Skąd pomysł, żeby zacząć pisać bloga? Ano z przedwczorajszej prezentacji, tak konkretnie to byłem na spotkaniu Software Talks: Java na ławę.
http://softwaretalks.pl/events/event/software-talks-java-na-lawe-wroclaw/
Wykłady były ciekawe, poznałem Tomasza Zielińskiego, twórcę Transportoida. Ale to Michał Bartyzel podczas swojej prezentacji zwrócił na coś moją uwagę. A mianowicie, myślałem już o tym wcześniej. Po przeczytaniu jakiejś książki, poznaniu nowej technologii, napisaniu kawałka kodu, jak dużo zostaje w głowie, a ile się ulatnia? I jak można temu zapobiec? Najlepiej poprzez syntezę wiedzy, czyli przemyślenie i ponowne wytłumaczenie, po swojemu, tego, czego się nauczyło. Żona przede mną ucieka, kiedy chcę jej tłumaczyć aspekty programistyczne 😉 Stąd właśnie pomysł, aby tym co sobie zsyntetyzuję, podzielić się ze społecznością. Myślę, że będzie to z obopólną korzyścią.
Jakich treści można się tutaj spodziewać? Myślę, że na każdy temat. Oczywiście będę starał się krążyć wokół tematów programistycznych. Ale nie tylko, mogą pojawić się lifechacki, które po prostu uwielbiam, a także jakieś opinie na temat książek. Może trochę nowości, ze świata programistów. Będę starał się to wszystko uporządkować jakimiś tagami, zobaczymy na ile mi się to uda. Mam nadzieję, że będzie ciekawie i pouczającą. W tym miejscu zapraszam również do aktywności i komentowania, będzie to dla mnie dodatkowy impuls, aby wrzucać tutaj jeszcze więcej treści.
Tyle tytułem wstępu, pozdrawiam i czekajcie na wpisy!




