czwartek, 20 sierpnia 2020

Android Basics - User Interface

Tego kursu wcześniej nie słuchałam i jak teraz usłyszałam, że to dla kogoś, kto nigdy nie napisał ani jednej linijki kodu, to zaczęłam wątpić...

Ale dobrze, pomyślałam, przekonaj się, że to umiesz, a przy okazji może usłyszysz jakąś informację, o której nie wiesz. I tak dowiedziałam się o:

  • atrybucie android:textAppearance="?android:textAppearanceSmallInverse"  , którego mogę użyć, gdy nie będę wiedzieć jaki rozmiar czcionki wybrać
  • atrybucie layout_weight, który może wystąpić w LinearLayout przy layout_width="0dp", a jego wartość określa jaką częścią całości jest dany element (sumuje się wartości tego atrybutu u wszystkich dzieci rodzica i proporcjonalnie rozdysponowuje się miejsce)
  • RelativeLayout - gdy robiłam kurs mniej podstawowy, ten layout był pominięty, zastąpiony ConstraintLayout, okazuje się, że są bardzo podobne a atrybutem typu android:layout_toLeftOf lub  android:layout_below można ustawiać elementy obok siebie

Tak więc:
  • da się sensownie podzielić ekran bez wartości procentowych Guideline w ConstraintLayout
  • to, co ma być wyświetlane na ekranie nie musi być od razu w całoścu widoczne - mogę użyć ScrollView i wewnątrz niego zaprojektować ciekawy układ elementów

Liczyłam na to, że dowiem się coś ciekawego o projektowaniu ekranów. Początkowo byłam sceptyczna, bo nie jestem aż tak początkująca, ale ogólnie warto było obejrzeć, ponieważ pojawiło się wiele przykładów i często omawiane było, dlaczego warto zastosować takie a nie inne podejście.

Kurs, o którym piszę znajduje się tutaj.

środa, 19 sierpnia 2020

Jak dopasować style tekstu - wnioski z Material Design

Jak się okazuje, AndroidStudio ma zaimplementowane style wg Material Design, tylko nigdy nie dałam sobie czasu na to, żeby się w tym zorientować. To teraz już wiem :)
Planowałam te style przenieść do mojego projektu wpisując wszystkie dane, zgodnie z informacjami, a już nie muszę, bo tam wszystko jest. Tylko kroje czcionek zmieniłam.

I teraz wskazówki z tamtej strony (są tam też ciekawe, dobrze ilustrujące zagadnienia przykłady):

  • Nagłówki 
    • to krótkie, ważne teksty,
    • wyraźne, ciekawe kroje czcionek,
    • mniejsze nagłówki będą lepiej wyglądać w spokojniejszym kroju czcionki.
  • Podtytuły
    • mniejsze od nagłówków,
    • krókie teksty,
    • wyraźne kroje czcionek.
  • Treść
    • długa forma,
    • wyraźne kroje czcionek.
  • Podpisy
    • mogą być pod lub nad,
    • dotyczą tekstu, tytułu lub obrazu,
    • najmniejszy rozmiar czcionki,
    • proste, wyraźne kroje czcionek.
  • Przycisk
    • często allCaps,
    • często sans serif,
    • powinien być wyraźny, widoczny, dawać jasno do zrozumienia co robi.
  • Wyrównanie tekstu
    • Najczęściej do lewej
    • Cytaty wyśrodkowane, nie bardzo długie

O typografii z Material Design jest tutaj.

czwartek, 13 sierpnia 2020

Zmiana myślenia

Choć pozornie nie ma to nic wspólnego z programowaniem, od 4 tygodni realizuję program Droga Artysty. Bardzo polecam, to chyba najlepszy program rozwojowy, w jakim brałam udział. A możę pierwszy, za który wzięłam się na poważnie?

Tak czy inaczej - on oraz mój zespół Mastermind pomogli mi odkryć moją największą blokadę.

Ja NIE MOGĘ być programistą

Taka myśl, za każdym razem w mojej głowie. I nie chodzi o to, że nie będę dobrym programistą, czy idealnym, że nie w jakomś języku. Wcale. Nie mogę i już. Nie moja ścieżka, nie moje miejsce. NIE. Wstęp wzbroniony, możesz sobie siedzieć  IT, zajmować się czymkolwiek, ale tego nie wolno dotknąć. Jak Drzewo Poznania Dobra i Zła. A ja się słuchałam, nie moje, to nie. Czy kusiło? Nie wiem. Lubiłam inne rzeczy, lubiłam to, co robiłam.

Aż do środy, 3 tygodnie temu, kiedy uświadomiłam sobie, skąd to się wzięło i dlaczego to jest takie złe.

A zatem się z tego uwalniam, wróciłam do kursu, zaplanowałam kolejne. Wymyśliłam jak wykorzystam wiedzę w praktyce. 

Jest lepiej, serio. Jeśli Cię coś blokuje i nie masz z kim pogadać - napisz do mnie, zrozumiem Cię :)


Zapiszę sobie jeszcze co sobie przypomniałam powtarzając pierwszy moduł kursu (już to umiałam, tylko zapomniałam):

  • Używaj najprostrzego layoutu w kolejności:
    • Frame
    • Linear
    • Constrain
  • Ustawianie tekstu w TextView:
    • setText - wpisuje nową wartość
    • append - dodaje wartość do tego co już było

poniedziałek, 4 maja 2020

Dlaczego nie piszemy wymagań i testów w Wordzie (albo jakimś typowym edytorze tekstu)?

Zarządzanie wymaganiami i przypadkami testowymi zapisanymi w zwykłym pliku tekstowym jest bardzo trudne (wolałabym napisać niemożliwe, ale dla ludzi upartych i zdeterminowanych nie istnieją niemożliwe zadania).

Warto mieć powiązania między wymaganiami, testami, planami i wykonaniami testów, ponieważ:

  • łatwiej jest wszystko edytować w przypadku zmian
  • łatwiej zauważyć błędy i braki w dokumentacji
  • łatwiej przygotować podsumowanie, zobaczyć jak długo znajmuje testowanie, które testy są dla aplikacji problemowe.
Mineło dużo czasu odkąd ostatnio sensownie pracowałam nad testami i wymaganiami. Żałuję - to ważna praca, którą najchętniej odkłada się na kiedyś, a bywa, że "kiedyś" jednak nie nadchodzi. 

Teraz chciałam, żeby dokumentacja była ładna - byłam zachwycona całą ideą identyfikacji wizualnej marki, tak dużo radości dawało mi robienie rzeczy ładych, że dostały zbyt wysoki priorytet i dokumentacj powstała w Wordzie.

Na szczęście projekty są jeszcze małe, mają niewiele funkcji.

Chciałabym, żeby zdumiewały - i projekty, i wszystko co jest obok - dokumentacja też, więc jest ładna. Niemniej zaczęłam poszukiwania odpowiedniego dla mnie teraz narzędzia do zarządzania testaliami.

wtorek, 24 marca 2020

Czego nauczył mnie kompilator cz.1

  1. Gdy łączę tekst w pętli (np. z listy z bazy danych) to zamiast String (+) stosować StringBuilder (.append)
  2. Mogę zwrócić w funkcji wartość pętli if - nie muszę tam zapisywać true i false.

czwartek, 6 lutego 2020

Dobre praktyki - Lekcja 2

1. Commituj gdy kończysz pracę w danym momencie (nawet w wyniku przerwania).
2. Weryfikuj wywołania funkcji - czy na pewno tylko raz (rozsądne logi).
3. Porównuj Stringi przez .equals() a nie przez "=="