Android i Percent Support Library

Za to aby aplikacja androidowa wyświetlała się w oczekiwany sposób na różnych rozdzielczościach ekranu odpowiada programista. Musi on zadbać o odpowiednią responsywność widoków lub przygotowanie osobnych dla poszczególnych rozdzielczości. W dzisiejszym wpisie chciałbym przedstawić bibliotekę Percent Support Library, która pozwala zaoszczędzić trochę czasu podczas stylowania ekranów oraz znacznie uprościć kod XML’owy.

Czytaj dalej

Android i design time

Przygotowywanie wyglądu aplikacji mobilnej jest jednym z kluczowych etapów developmentu, który zajmuje czasami więcej czasu, niż zaprogramowanie logiki. W Androidzie etap ten jest dodatkowo wydłużony. Konieczne jest uwzględnienie wielu rozdzielczości ekranów, wielu wersji API oraz tysięcy urządzeń. Dla programisty oznacza to poświęcenie dodatkowego czasu na testowanie widoków. Bardzo często aby sprawdzić czy prawidłowo ostylowaliśmy nasz widok jesteśmy zmuszeni do uruchomienia aplikacji, bo wartość naszego TextView jest ustawiana dopiero w runtimie. Rozwiązaniem tego problemu jest przestrzeń nazw XML, dostępna w Androidzie: xmlns:tools=”http://schemas.android.com.tools”.

Przestrzeń ta jest automatycznie dołączana do każdego generowanego activity. Daje ona dostęp do narzędzi i atrybutów, które ułatwiają konstruowanie widoków oraz ich testowanie w trakcie projektowania interfejsu. Atrybuty te można określić jako design attributes. Oznacza to, że efekt ich zastosowania jest widoczny jedynie podczas projektowania. Są one interpretowane przez IDE i nie mają wpływu na działanie aplikacji w runtimie.

W tym wpisie przedstawię najistotniejsze atrybuty tej przestrzeni oraz proste przykłady ich zastosowania. Czytaj dalej

Java, gettery, settery i Project Lombok

Zmiana języka programowania może być bezproblemowa (C# -> Java), lub może wymagać dużego nakładu czasu, zmiany podejścia a nawet nauki od zera (C# – > JavaScript) – generalnie 50/50. Niezależnie od tego w jakim języku pisaliśmy i na jaki go zmieniliśmy, na 100% w którymś momencie powiemy „w C#/Javie/Pythonie (itd.) było to lepiej rozwiązane”. Ja osobiście te słowa wypowiedziałem 10 minut po uruchomieniu Android Studio. Mimo tego, że C# i Java są bliźniaczymi językami, to w Javie brakuje kilku rzeczy, które są moim zdaniem ogromnym ułatwieniem jak np. Extension MethodOptional Parameters, czy var. I o ile do tych braków można się przyzwyczaić , to jest też kilka rzeczy które mi osobiście strasznie przeszkadzają – a pierwsze miejsce na tej liście zajmują gettery i settery. Gettery i settery w Javie idealnie wpisują się w definicje ‚boilerplate code‚ . Robert C. Martin w Czystym Kodzie (jeśli nie czytałeś/aś, to polecam) napisał o klasach:

Pierwsza zasada dotycząca klas mówi, że powinny być małe. Druga zasada – że powinny być mniejsze, niż są.

Wymaganie stworzenia gettera i settera dla każdego pola prywatnego według mnie narusza tę zasadę i powoduje, że klasy w Javie są po prostu za duże, przez co kod traci na czytelności. Na szczęście problem ten został dostrzeżony dość dawno i istnieje bardzo dobre rozwiązanie jakim jest Project Lombok, który pozwala na uniknięcie tworzenia niepotrzebnych metod w kodzie. W tym wpisie przedstawię w jaki sposób można wykorzystać to narzędzie w projekcie.

Czytaj dalej

Porównanie metod serializacji w C#

Serializacja jest procesem przekształcania obiektów, do postaci tekstowej lub binarnej. .NET framework zapewnia nam kilka klas, takich jak XMLSerializer, DataContractJsonSerializer czy BinaryFormatter, które umożliwiają serializację danych do różnych formatów. Ponadto, do dyspozycji mamy wiele bibliotek firm trzecich, przez co wybór najlepszej metody staje się o wiele trudniejszy. Generalnie, każde narzędzie, czy format posiada swoje wady i zalety, dlatego też wybierając rozwiązania do naszego projektu, powinniśmy kierować się wieloma rzeczami. Musimy brać pod uwagę prostotę użycia, dostępność na wielu platformach (Windows Phone, WPF, ASP.NET) czy wydajność. Bardzo często zależy nam właśnie na tym ostatnim – chcemy aby proces serializacji i deserializacji przebiegał jak najszybciej, a rozmiar zserializowanych danych był jak najmniejszy.  Jest to bardzo ważne gdyż większość obecnych aplikacji działa w oparciu o komunikację z różnego typu API – dane muszą zostać skonwertowane do postaci, które program będzie w stanie przetworzyć. Niewydajne przetwarzanie takich danych może spowolnić działanie samej aplikacji, co negatywnie wpłynie na user experience. W tym wpisie chciałbym przedstawić wyniki testów, które przeprowadziłem w celu znalezienia najwydajnieszego narzędzia.
Czytaj dalej

Visual Studio i GIT – alternatywne narzędzia do mergowania i porównywania plików – konfiguracja

Mergowanie bardzo często może stanowić poważny problem, szczególnie, gdy trzy inne osoby z teamu zaczynają nagle pracować nad tym samym plikiem… Nie sposób się ustrzec od konfliktów, których rozwiązywanie może być nieprzyjemne. Z tego względu dobrze jest mieć wygodne narzędzie do porównywania plików i rozwiązywania konfliktów – no chyba, że jesteśmy hipsterami i lubimy korzystać z notatnika. Narzędzia wbudowane w Visual Studio są moim zdaniem bardzo dobre i korzystam z nich na co dzień, jednak posiadają pewne wady które niektórym mogą przeszkadzać, jak np. brak możliwości edycji plików w trakcie porównywania. Jeżeli chcemy zmienić standardowe narzędzie to mamy szczęście, gdyż istnieje wiele alternatywnych programów które możemy wykorzystać podczas rozwiązywania konfliktów. W tym krótkim wpisie przedstawię listę darmowych narzędzi oraz zaprezentuję w jaki sposób można je zintegrować z Visual Studio i Microsoft GIT Providerem.

Czytaj dalej

Tombstoning w Windows Phone 8.0

Tombstoning jest to proces, podczas którego system operacyjny wyrzuca z pamięci podręcznej stan uśpionych aplikacji. Wielu developerów podczas pisania aplikacji zapomina o tombstoningu, przez co aplikacje nie działają prawidłowo. Developer powinien przygotować aplikację w taki sposób, aby odpowiednio wspierała wszystkie stany aplikacji. W tym krótkim poście chciałbym przedstawić, jak wygląda cykl życia aplikacji w systemie Windows Phone 8.0 oraz w jaki sposób można poradzić sobie z tombstoningiem.

Na wstępie zaznaczę, że post odnosi się do systemu WP 8.0. Aplikacje pisane pod Universal Apps i WP 8.1 posiadają zupełnie inny cykl życia, jak również „wbudowane” mechanizmy obsługi tombstoningu (generalnie jest to temat na osobny wpis).

Czytaj dalej

Startujemy!

Witam,

Po długim namyśle postanowiłem zacząć prowadzić blog techniczny. Blog będzie dotyczył przede wszystkim technologii .NET oraz programowania na platformy Windows Phone/Windows 8. Poza tym znajdą się tutaj artykuły o wzorcach projektowych oraz szeroko pojętym „czystym kodzie”.

Zachęcam do regularnego czytania!