Jak zacząć z FreshMVVM

Jak zacząć z FreshMVVM w Xamarin Forms

W post 7 framework-ów MVVM jakie możecie wybrać przedstawiłem wam kilka możliwych opcji do wyboru jeżeli chodzi o MVVM. Dzisiaj chciałbym przedstawić jeden z nich FreshMVVM.

Jak zacząć z FreshMVVM w Xamarin Forms? FreshMVVM jest prostym i mały framework-iem stworzonym specjalnie na potrzeby Xamarin Forms. Jego autorem jest Michael Ridland.

Naszym przykładem jaki wykorzystam będzie prosta aplikacja Todo.

Jak zacząć z FreshMVVM w Xamarin Forms`

A więc zaczynamy.

FreshMVVM struktura

FreshMVVM stosuje koncepcję „Convetion over Configuration” dlatego też ważna jest struktura naszego projektu.

Koncepcje jakie są ważne to:

  • Page – nasza strona, którą tworzymy w XAML
  • PageModel – nasz ViewModel, który odpowiada za całą obsługę całej logiki aplikacji

A więc tworzymy nasz projekt przez File -> New -> Project lub CTRL+SHIFT+N, wybieramy szablon Blank Xaml App (Xamarin.Forms Portable).

Pobieramy z NuGet pakiety FreshMVVM i PropertyChanged.Fody. Uruchamiamy konsolę Package Manager Console i piszemy

Install-Package FreshMvvm -ProjectName FreshTodoApp
Install-Package PropertyChanged -ProjectName FreshTodoApp

Kolejnym krokiem jest stworzenie struktury projektu

Jak zacząć z FreshMVVM w Xamarin Forms - Struktura

Tworzymy katalogi Models, PageModels i Pages będą nam one potrzebne do trzymania się konwencji jaka jest używana w FreshMVVM.

  • Models – tutaj trzymamy nasze klasy POCO np. pobrane przez HTTP
  • PageModels – tutaj trzymamy nasze klasy VM
  • Pages – tutaj trzymamy nasze strony

Trochę kodu

A więc tworzymy naszą pierwszą stronę TodoItemPage wybieramy folder w Solution Explorer i Add -> New Item -> wybieramy szablon Forms Xaml Page lub CTRL + SHIFT + A.

Strona TodoItemPage wygląda jak na listingu

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FreshTodoApp.Pages.TodoItemPage">
  <StackLayout Margin="20" VerticalOptions="FillAndExpand">
    <Label Text="Name" />
    <Entry Text="{Binding Todo.Name}" />
    <Label Text="Note" />
    <Editor Text="{Binding Todo.Note}" VerticalOptions="FillAndExpand" />
    <Label Text="Done" />
    <Switch IsToggled="{Binding Todo.Done}" />
    <Button Text="Save" Command="{Binding SaveCommand}"/>
    <Button Text="Cancel" />
    <Button Text="Delete" />
  </StackLayout>
</ContentPage>

Jak widzicie mamy stworzone już Binding-i w naszym kodzie XAML. Teraz zajmiemy się naszym PageModel.

Jak poprzednio w katalogu PageModels dodajemy pustą klasę C# TodoItemPageModel, ważne jest tutaj nazewnictwo żeby zadziałał nam automatyczny binding. Musi ona dziedziczyć po FreshBasePageModel.

Klasa TodoItemPageModel listing

using FreshMvvm;
using FreshTodoApp.Models;
using Xamarin.Forms;
using PropertyChanged;

namespace FreshTodoApp.PageModels
{
    [ImplementPropertyChanged]
    public class TodoItemPageModel : FreshBasePageModel
    {
        public TodoItem Todo { get; set; }

        public Command SaveCommand
        {
            get
            {
                return new Command(async () =>
                {
                    await CoreMethods.DisplayAlert("Info", $"Create task with name {Todo.Name}", "Ok");
                });
            }
        }

        public override void Init(object initData)
        {
            Todo = initData as TodoItem;
            if (Todo == null)
                Todo = new TodoItem();
        }
    }
}

Dla formalności TodoItem wygląda następująco

using PropertyChanged;

namespace FreshTodoApp.Models
{
    [ImplementPropertyChanged]
    public class TodoItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Note { get; set; }
        public bool Done { get; set; }
    }
}

FreshPageModelResolver

Żeby to wszystko zadziałało z pomocą przychodzi nam FreshPageModelResolver. Odpowiada on za powiązanie PageModel z odpowiednim Page.
W App.xaml.cs dodajemy linijkę

MainPage = FreshMvvm.FreshPageModelResolver.ResolvePageModel<TodoItemPageModel>();

Więc jak widzicie w całkiem szybki sposób otrzymujemy działającą aplikację zgodną ze wzorcem MVVM. Pytanie takie do was czy używaliście gdzieś produkcyjnie FreshMVVM?

jaki framework MVVM wybrać

7 framework-ów MVVM jakie możecie wybrać

A więc jesteście na początku zaczynacie pisać swoją aplikacją w Xamarin Forms. Ale jaki framework MVVM wybrać?

Jaki framework MVVM wybrać?

Framework-ów MVVM jest tyle co ludzi na świecie prawie jak bibliotek JavaScript :). Dzisiaj pokrótce przedstawię te, które udało mi się znaleźć lub mam jakieś z nimi doświadczenia.

Prism

Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Windows 10 UWP, and Xamarin Forms.

Prism jest framework-iem do budowania aplikacji opartych o XAML (WPF, UWP, Xamarin Forms). Obecnie stabilna wersja dla Xamarin Forms to 6.2. Jest rozwijany niezależnie dla każdej platformy i oryginalnie wywodzi się z Microsoft patterns & practices. Od wersji 6.0 jest rozwijany jako open source i utrzymywany przez Brian Laguna’s. Więcej szczegółów możecie wyczytać na jego blogu.

FreshMVVM

FreshMvvm is a super light Mvvm Framework designed specifically for Xamarin.Forms. It’s designed to be Easy, Simple and Flexible.

FreshMVVM super lekki i super szybki. Zaprojektowany specjalnie na potrzeby Xamarin Forms. Jego twórcą jest Michael Ridland, który postawił sobie za cel przesiadkę z natywnych aplikacji Xamarin pisanych z użyciem MvvmCross na Xamarin Forms. W ten sposób pojawił się FreshMVVM. Nic dodać nic ująć. Lekko, szybko i przyjemnie.

Exrin

Enterprise Xamarin Forms MVVM Framework

Exrin stworzony na potrzeby „dużych” aplikacji (przynajmniej ja tak to czuję). Jego twórcą jest Adam Pedley i jak mówi jego autor konfiguracja zajmuje sporo czasu ale daje największe wartości gdy mamy zespół liczący kilku programistów.

Xamvvm

Simple, fast and lightweight MVVM Framework for Xamarin.Forms with fluent API

Xamvvm kolejny z małych lekkich i przyjemnych frameworków MVVM. Z zalet daje nam prostotę użycia, automatyczny Binding do DataContext, oraz Fluent API. To chyba takie największe zalety (sprawdzimy wkrótce ;).

MVVMCross

The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac.

MvvmCross jeden ze starszych framework-ów MVVM, oraz jeden z większych.Pozwala nam pisać aplikację natywne iOS, Android i Xamarin Forms. Posiada bardzo mocno rozwiniętą społeczność na StackOverflow lub na forum Xamarin. Bardzo bogaty w funkcjonalność ale w moim odczuciu również skomplikowany. Nadaje się bardziej do dużych projektów.

MVVMLight

The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in WPF, Silverlight, Windows Store, Windows Phone and Xamarin

MVVMLight jako jeden z nielicznych nie jest rozwijany na GitHub. Jest również jednym z moich ulubionych framework-ów ze względu na prostotę i łatwość użycia. MVVMLight jest rozwijany przez Laurent Bugnion. Na jego stronie możecie również znaleźć więcej szczegółów na temat MVVM i nie tylko.

MVVMHelpers

Collection of MVVM helper classes for any application

MVVMHelpers nie jest to framework w pełnym tego słowa znaczeniu. Jest to zestaw klas ułatwiających pracę z aplikacjami tworzonymi w XAML w architekturze MVVM. Autorem jest James Montemagno

Podsumowując jak widzicie jest z czego wybierać budując swoją aplikację w Xamarin Forms i nie tylko. W następnych artykułach będę chciał przybliżyć wam każdą z wymienionych bibliotek MVVM. A więc do zobaczenia?

Czy warto zaczynać dzień o 5 rano?

Czy warto zaczynać dzień o 5 rano?

Od pewnego czasu wstaję codziennie o 5 rano. Wyjątkiem są weekendy ale czy warto zaczynać dzień o 5 rano? Postaram się na to odpowiedzieć, oraz jak to wygląda u mnie.

W wakacje rozpocząłem eksperyment pod tytułem „Dzień o 5 rano” na początku było łatwo słońce świeciło było ciepło i przyjemnie. Wstawałem chętnie i przeważnie brałem się za swoje zajęcia. No właśnie przeważnie…

To chyba w tym wszystkim jest najważniejsze ale jeszcze do tego wrócimy.

Następnie przyszła jesień i zima. Już nie jest tak kolorowo jest szaro-buro i zimno, nie chce się wychodzić z łóżka. Chce się spać jak najdłużej.

Jak zacząć

Dla każdego zdrowego człowieka optymalnym czasem snu jest 7-8 godzin dziennie. Jeżeli śpimy dłużej to przesypiam masę czasu. Dla przykładu.

Sen ok 9 godzin, czyli dłuższe od podręcznikowego o około 2 godziny co daje nam. W skali miesiąca 60 godzin i aż 730 godzin rocznie. Prawda, że są to duże liczby?

No dobra ale podjąłem wyzwanie. Chce zacząć wstawać wcześnie. Jak się za to zabrać?

U mnie poszło w miarę łatwo po prostu przestawiłem budzik na 5:00 i zacząłem wstawać. Ale jeżeli chcemy to zrobić w mniej brutalny sposób to:

    1. Ustawiamy budzik na 4:40. Ten etap nie wymaga chyba dalszego wyjaśnienia. Po prostu przestawiamy budzik i tyle.
    2. Skracamy czas. Każdego dnia skracamy czas snu o 1-2 minuty aż dojdziemy do równej 5:00
    3. Nagradzamy się. W wyrabianiu nawyków ważne są nagrody po osiągnięciu jakiegoś celu, czyli np. Definiujemy zadanie „Przez tydzień będę wstawał o 5:00” jeżeli osiągniemy ten poziom to dajemy sobie nagrodę może to być butelka wina ale i najnowszy model iPhone 🙂

Co nam daje wczesne wstawanie? 4 przykłady

  1. Jesteśmy wypoczęci. Po dobrze przespanej nocy wstajemy wypoczęci nic dodać nic ująć.
  2. Mamy mnóstwo energii. Jak powyżej.
  3. Nikt nam nie przeszkadza. To jest bardzo ważny punkt wszyscy w domu jeszcze śpią, żona, dzieci, sąsiedzi i można popracować w pełnym skupieniu.
  4. Mamy mnóstwo nowych pomysłów. Po całej nocy wstajemy z wypoczętym mózgiem gotowym do pracy. Powinno na to dać możliwość wykorzystania wreszcie jego możliwości i wygenerowania trochę pomysłów.

Ale jak to wygląda u mnie?

Jestem wypoczęty ale zimą jest z tym różnie podobnie jak z energią. Mam ciszę i spokój. Niestety w moim przypadku mam duże pole do popisu jeżeli chodzi o pomysły i baranie się za pracę.

Niestety często poddaje się i tracę poranek na tzw. pierdoły Poczta, Facebook, Twitter. Nie poddaje się i od dzisiaj wprowadzam plan naprawczy. Wygląda on następująco.

Naprawa

  1. Przez 7 dni będę wstawał o 5 rano
  2. Poranek będę zaczynał od porannych ćwiczeń
  3. Ok 5:20 będę brał się za pracę
  4. Powtarzamy listę ale w proporcjach 30-90 dni

Jest to metoda, którą podpatrzyłem na blogu Patryka Leszczyńskiego, którego lekturę również polecam.

Podsumowanie

Jeżeli wstajemy przed wszystkimi mamy tak naprawdę mnóstwo czasu na swoje najważniejsze zadania, cele i marzenia. Mówi o tym Jeff Sanders w swoim podcast 5 AM Miracle Podcast.

Takie wczesne wstawanie daje nam dużego kopa energii i możemy się od razu zabrać za najciekawsze rzeczy, które sobie przygotowaliśmy.

Podsumowując uważam, że warto wstawać o 5 rano mi to dało mnóstwo czasu, który mogę spędzić razem z rodziną. W tygodniu owszem pracuję dużo ale weekendy staram się mieć w 100% dla rodziny.

Przyszłość .Net według Microsoft w pigułce

Przyszłość .Net według Microsoft w pigułce

Przyszłość .Net według Microsoft jest świetlana ale czy aby na pewno? Czy problemy jakie powstały przy powstawaniu .Net Core nie przekreśliły wszystkiego? Postaram się odpowiedzieć.

.Net Core

Microsoft wraz z pracami nad .Net Core przemyślał całość produktu i zostawił tylko to co jest niezbędne w dzisiejszych czasach. Dlatego w .Net Core głównie możemy tworzyć rozwiązania oparte o Web i chmurę, szerokiej maści API (WebAPI lub Nancy).

Również .Net Core daje nam wolność wyboru platformy na jakiej możemy pracować jako programiści lub uruchamiać nasze rozwiązania.

Powstają multi platformowe narzędzia takie jak Rider

JetBrains Rider

od JetBrains. Przez niektórych nazywany Visual Studio killer-em. Albo doskonały edytor

Visual Studio Code

Visual Studio Code

C#

C# jest używany przez miliony programistów na świecie. Jest jednym z najbardziej popularnych języków programowania. Wystarczy spojrzeć na wyniki na Stack Overflow. Można go używać na wielu platformach i do szerokiej gamy rozwiązań. Od pisania gier z użyciem Unity, poprzez aplikacje mobilne w Xamarin, aplikacje web w ASP.NET, aplikacje LOB lub .Net Core micro serwisy na Linux ie w chmurze Azure, AWS albo egzotycznie Google Cloud.

Przyszłość C#, czyli C# 7

Rozwój C# pędzi jak lokomotywa. Każda nowa wersja przynosi jakieś ciekawe zmiany C# 2 dał nam Generics, C# 3 Integrated Queries, C# 4 dynamic (to akurat nie jest według mnie najlepszym pomysłem), async w C# 5, null conditional w C# 6. C# 7 nie będzie wyjątkiem ma dać nam nowe unikalne usprawnienia jak pattern maching. Od C# 6 można śledzić rozwój na GitHub w repozytorium dotnet/csharplang lub dyskutować na liście mailingowej csharplang.

Visual Basic

Visual Basic jest również używany przez całe rzesze programistów na całym świecie. Głównie jest wykorzystywany do tworzenia aplikacji Windows Forms, rzadziej aplikacji web. Ankieta dla deweloperów Stack Overflow nie była łaskawa dla Visual Basic. Był to język numer jedne, który deweloperzy chcieli zmienić na inny.

Przyszłość VB, czyli VB 15

VB and C# Coevolution w marcu 2010 roku Microsoft ogłosił, że C# i VB będą rozwijane równolegle. Niestety po 6 latach okazało się, że C# był rozwijany zbyt agresywnie i jest za wiele różnic pomiędzy językami.

Do tej pory C# i VB dzieliły ze sobą wiele rozwiązań null-conditional, nameof, itd… ale również posiadały wiele drobnych różnic.

VB 15 będzie posiadał tylko część nowości jakie pojawią się w C# 7. Nie pojawią się takie rzeczy jak np. local functions, które mogłyby tylko przynieść więcej złego niż dobrego w czytelność kodu napisanego w VB.

Wszystkie zmiany związane z Visual Basic można śledzić na GitHub w repozytorium dotnet/vblang, oraz na liście mailingowej vblang.

F#

F# jest używany przez coraz większą grupę programistów. Według rankingu Stack Overflow jest trzecim najbardziej „uwielbianym” językiem programowania. Głównymi polami zastosowań są Web, usługi w chmurze, narzędzia i analiza danych.

F# ma zaskakująco duże wsparcie ze strony społeczności jest językiem, który od początku istnienia powstawał jako open source.

Przyszłość F#, czyli F# 4.1

F# 4.1 przyniesie nam dalszy rozwój narzędzi Visual Studio do pracy z językiem, wsparcie dla .Net Core i .Net Standard.

Rozwój języka można śledzić na GitHub w repozytorium visualfsharp.

Podsumowanie

Według mnie przyszłość .Net jest naprawdę warta uwagi i śledzenia.
Ruchy Microsoft związane z open source były naprawdę dobrymi posunięciami. Były one przemyślane i wprowadzone w życie w odpowiednim momencie.

W tej chwili my jako programiści .Net nie jesteśmy już „uwiązani” do jedynej słusznej platformy jaką jest Windows. Ba mało tego nie musimy używać Visual Studio ;). Możemy uruchomić .Net wszędzie i możemy używać różnych narzędzi do tworzenia.

A więc Microsoft tylko tak dalej, a czeka nas naprawdę super przyszłość i masę pracy. Może uda się pokonać Java na polskim rynku ;). Programiści zakasać rękawy i śledźcie dalsze poczynania Microsoft z .Net Core.

Do dzieła.

Daj się poznać 2017

A więc stało się. Daj się poznać 2017 czas zacząć i się zapisać

Daj się poznać 2017 jest drugą trzecią edycją konkursu organizowanego przez Maćka Aniserowicza z DevStyle.pl i ma na celu???
Wyciągnięcie programistów z ich piwnic i wyjście do ludzi/społeczności.

Daj się poznać 2017. Czym jest dla mnie???

Dla mnie jest to niesamowicie ważny krok na który zbierałem się od dawna. Dzisiaj pokonałem swój lęk i przestałem się bać tego, że ktoś wyśmieje to co robię. Kto wie może nauczę się prowadzenia prezentacji i pokonam kolejny lęk 🙂

Czego ja oczekuję???

  • Nauki i poznania naprawdę dobrze Xamarin, WebAPI z .Net Core oraz Docker (przynajmniej tak to sobie wymyśliłem)
  • Zbudowania marki (przy odrobinie szczęścia)
  • Sprawdzenia się

Podsumowanie

W skrócie klawiatura w dłoń koduj koduj i jeszcze raz koduj, a przy odrobinie szczęścia coś z tego będzie :). Największa satysfakcja to sam udział i dotarcie do końca.

Xamarin Forms i MVVMLight

Chcecie napisać aplikacje mobilną? Pokażę wam jak to zrobić w Xamarin Forms razem z MVVMLight

Witajcie cześć i czołem pytacie skąd się wziąłem… A na imię mi Xamarin Forms razem z MVVMLight i pokrótce chciałbym wam pokazać jak łatwo można użyć wzorca Model-View-ViewModel w aplikacji mobilnej.

Instalacja MVVMLight

MVVMLight jest pakietem NuGet, który może pobrać używając konsoli NuGet Package Manager Console.NuGet Package Manager Console

W tym celu w naszej aplikacji należy otworzyć konsolę NuGet Package Manager w Visual Studio, szukam pakietu MvvmLightLibs i instalujemy go w naszych wszystkich projektach.

Konfiguracja kontenera Inversion Of Control

Na początek czeka nas odrobina konfiguracji naszego nowego projektu. Na razie konfiguracja kontenera IoC wygląda na nadmiarową pracę ale zapewniam was, że później to zaprocentuje w postaci łatwego przełączania się pomiędzy kodem „produkcyjnym” i „mock”.

Na początek stwórzmy prosty ViewModel o nazwie MainViewModel, który będzie korzystał z interfejsu IAccountService.

MainViewModel

using Client_BankOfSanEscobar.Interfaces;
using Client_BankOfSanEscobar.Models;
using GalaSoft.MvvmLight;
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;

namespace Client_BankOfSanEscobar.ViewModels
{
    public class MainViewModel : ViewModelBase
    {
        private readonly IAccountService accountService;

        public string Title { get; set; }
        public ObservableCollection<Account> Accounts { get; set; }
        public float AvailableBalance { get; set; }
        
        public MainViewModel(IAccountService accountService)
        {
            if (accountService == null)
                throw new ArgumentNullException("accontService");

            this.accountService = accountService;

            Task.Run(() => Init());
        }

        public async Task Init()
        {
            if (Accounts != null)
                return;

            Accounts = new ObservableCollection<Account>(await accountService.GetAll());
            foreach (var balance in Accounts.Select(a => a.Balance))
                AvailableBalance += balance;
        }
    }
}

Teraz stwórzmy interfejs IAccountService

IAccountService

using Client_BankOfSanEscobar.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Client_BankOfSanEscobar.Interfaces
{
    public interface IAccountService
    {
        Task<IEnumerable<Account>> GetAll();
    }
}

oraz jego implementację w postaci obiektu „mock”

AccountServiceMock

using Client_BankOfSanEscobar.Interfaces;
using Client_BankOfSanEscobar.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Client_BankOfSanEscobar.Mock
{
    public class AccountServiceMock : IAccountService
    {
        public Task<IEnumerable<Account>> GetAll()
        {
            const int numberOfAccountsToGenerate = 4;
            return Task.Run(() => GenerateAccounts(numberOfAccountsToGenerate));
        }

        private IEnumerable<Account> GenerateAccounts(int numberOfAccounts)
        {
            var accounts = new List<Account>(numberOfAccounts);
            for (int i = 0; i < numberOfAccounts; i++)
            {
                accounts.Add(new Account(name: $"Account {i}", number: $"26200400001545234{i}", balance: 150.56f + i));
            }
            return accounts;
        }
    }
}

Uff prawie dobrnęliśmy do końca jeszcze tylko….Konfiguracja kontenera IoC.

W naszym kodzie użyjemy myśli technologicznej firmy Microsoft w postaci ServiceLocator, a implementacja wygląda następująco. Niektórzy twierdzą, że jest fajny The Service Locator Pattern, a inni twierdzą, że nie Antywzrorzec Service Locator.

Locator

using Client_BankOfSanEscobar.Interfaces;
using Client_BankOfSanEscobar.Mock;
using Client_BankOfSanEscobar.ViewModels;
using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;

namespace Client_BankOfSanEscobar
{
    public class Locator
    {
        public Locator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            //ViewModels
            SimpleIoc.Default.Register<MainViewModel>();

            //Services
            SimpleIoc.Default.Register<IAccountService, AccountServiceMock>();
        }

        public MainViewModel Main
        {
            get
            {
                return ServiceLocator.Current.GetInstance<MainViewModel>();
            }
        }
    }
}

Musimy jeszcze zainicjować nasz Locator możemy to zrobić w klasie App.cs

App

using Xamarin.Forms;

namespace Client_BankOfSanEscobar
{
    public partial class App : Application
    {
        private static readonly Locator locator = new Locator();

        public static Locator Locator
        {
            get
            {
                return locator;
            }
        }

        public App()
        {
            InitializeComponent();

            MainPage = new Views.MainPage();
        }
    }
}

Cała konfiguracja i robota papierkowa za nami teraz możemy dojść do mięcha.
Mięcho

Binding ViewModel do UI

A więc żeby użyć naszego nowego pachnącego ViewModel należy go „podłączyć” do naszego widoku. Robimy to poprzez odpowiednie skonfigurowanie BindingContext.

        public MainPage()
        {
            InitializeComponent();
            BindingContext = App.Locator.Main;
        }

Podsumowanie

A więc jak widzicie użycie MVVMLight i Xamarin Forms jest możliwe. Na początku konfiguracja i powiązanie wszystkiego zajmuje trochę czasu ale w przyszłości będzie miało to plusy. Cały kod źródłowy możecie znaleźć na GitHub

Nauka programowania od metalu czy od klawiatury

Nauka programowania od samego metalu czy od klawiatury

A więc stanęliśmy przed zadaniem nauki nowego adepta. Jak do tego podejść, jak zacząć?

Zanim pójdziemy dalej zdajmy sobie sprawę, że są dwa typy osób „Uczące się od metalu i od klawiatury”.

Pomysł jest taki poznajmy naszych uczniów, dowiedzmy się jaki styl nauki im najbardziej odpowiada.

Nauka od metalu

Wszystko zaczyna się od metalu, w końcu CPU powstał z metalu. Zaczynasz naukę od tego poziomu poznajesz zasadę działania procesora, pamięci. Idziesz dalej poznajesz assembler, C, dowiadujesz się o modelu OSI. Przechodzisz do języków wysokiego poziomu uczysz się Java, C#, Python, poznajesz JSON.

  • Jak wpisujesz allegro.pl jesteś w stanie powiedzieć co się dzieje pod spodem od adresu URL do serwera.
  • Otwierasz de-kompilator i grzebiesz w bebechach

Jesteś taką osobą? Lubisz zaglądać pod maskę? Jeżeli twoi uczniowie mają podobnie to jest ok i oboje wygrywacie.

Nauka od klawiatury

Wszystko zaczyna się od klawiatury. Rysujesz ekrany, piszesz scenariusze użycia i jak to wszystko ma wyglądać na ekranie. Masz świadomość istnienia CPU i jak to wszystko mniej więcej działa.

  • Jak wpisujesz allegro.pl wiesz jak jest tworzony interfejs i całe UX. Dalej to już są szczegóły implementacji o których zawsze możesz doczytać

Jesteś taką osobą? Wolisz szybko przejść do konkretnego zadania? Jeżeli twoi uczniowie mają podobnie to jest ok i oboje wygrywacie.

Podsumowanie

Każdy jest inny i uczy się w inny sposób. Jeżeli zaczynamy kogoś uczyć musimy o tym pamiętać.

Ja osobiście lubię wiedzieć co dzieje się pod spodem i jak to wszystko działa. Ale ktoś inny może już nie odczuwać takiej potrzeby i to jest ok.

Legacy code. Jak rozwijać i co można z nim zrobić?

Legacy code. Jak rozwijać i co można z nim zrobić?

Jak rozwijać legacy code, czyli jak dodawać nowe funkcjonalności w najmniej bolesny sposób. Opisuję tutaj swoje własne doświadczenia i przemyślenia na ten temat. A więc…

Czy jest legacy code

Według nomenklatury sprzedawców samochodów kod jest przestarzały po wyjechaniu za bramę salonu, a według Wikipedia przestarzały kod to

More recently, the software engineering communty has developed other interpretations for the term legacy code. Among the most prevalent are source code inherited from someone else and source code inherited from an older version of the software.

Jak rozwijać przestarzały kod?

Praca z zastanym kodem bywa często bardzo bolesna. Niestety w naszym dev-życiu najczęściej trafiamy w bagno aplikacji, którą dostaliśmy w utrzymanie od jakiegoś korporacyjnego klienta lub utrzymujemy nasz produkt napisany w czasach kiedy po świecie chodziły dinozaury. Co zrobić kiedy pojawia się wymaganie dodania nowej wypasionej funkcjonalności?

Można do tego podejść na kilka sposobów:

  • brnąć dalej w depresyjny kod napisany przez całe stado programistów
  • napisać bibliotekę/komponent/plugin (nie to może nie jest odpowiednie słowo :))

Brnięcie dalej

Kto z nas nie próbował pisać kolejnej funkcji w VB6? Ten nie wie jaki jest to czasami ból, a ten ból jest tym większy im więcej linijek kodu jest w funkcji w której musimy wywołać nasz nowy super kawałek kodu. Ot cała ta integracja oł jeee…

Napisać coś nowego

Można podejść do tego z drugiej strony i stworzyć jakiś komponent\moduł, który będzie posiadał zestaw funkcjonalności wymaganych przez aplikację.

Jest to według mnie lepsze podejście można użyć np. architektury micro-services i stworzyć komponent\moduł hostowany na IIS.

Podsumowanie

Technik radzenia sobie z legacy code jest tyle co programistów. Każdy ma jakieś swoje pomysły i sposoby. Dla mnie najciekawszym sposobem jest tworzenie komponentów w myśl architektury micro-services.

A wy jakie macie sposoby na radzenie sobie ze starymi systemami?

Programowanie cross-platform. Jak to zrobić inaczej?

Programowanie cross-platform. Jak to zrobić inaczej?

Programowanie cross-platform. Jak to zrobić inaczej? Dlaczego wybrałem React Native i w czym jest on lepszy od Xamarin Forms. Czas zacząć, a więc…

Czym jest programowanie cross-platform

In computing, cross-platform software (multi-platform, or platform independent software) is computer software that is implemented on multiple computing platforms.[1] Cross-platform software may be divided into two types; one requires individual building or compilation for each platform that it supports, and the other one can be directly run on any platform without special preparation, e.g., software written in an interpreted language or pre-compiled portable bytecode for which the interpreters or run-time packages are common or standard components of all platforms.[

Programowanie cross-platform w wypadku mobile jest to tworzenie jednej bazy kodu i UI, który będzie wyglądał i dostarczał tą samą funkcjonalność na każdej z platform. Ułatwia to później utrzymanie aplikacji, oraz dostarczanie nowej funkcjonalności dla użytkowników.

Największym benefitem jest łatwość utrzymania i zarządzania kodem. Tworzymy aplikację tylko raz od razu na wszystkie platformy.

Wprowadzenie, czyli czym jest React Native

Jest to biblioteka stworzona przez Facebook umożliwiająca pisanie aplikacji w JavaScript, używając tych samych technik co w React. Dzięki temu otrzymujemy aplikację zbudowaną z komponentów. Została ona oficjalnie zaprezentowana na konferencji React.js Conf w 2015 roku.

Co mnie przekonało do niej przekonało

Lubię React i jest to chyba jedne z nielicznych JS framework-ów, które polubiłem. Z benefitów, które mnie do niego przekonały to:

  • Debugowanie kodu w Chrome (kod, który jest uruchomiony na urządzeniu)
  • Live reload (aplikacja aktualizuje się na urządzenie wraz ze zmianami kodu aplikacji)
  • Łatwość tworzenia UI (dzięki komponentom React)
  • Możemy korzystać z natywnych modułów i elementów UI (możemy ładować elementy napisane w np. Objective-C, Swift, Java)

Jak zacząć

Najłatwiej jest zacząć instalując wymagane pakiety przy użyciu Chocolatey.

Jeżeli jeszcze nie mamy instalujemy Chocolatey, otwieramy konsolę PowerShell v3+ z prawami administratora. Należy się upewnić czy Get-ExecutionPolicy nie zwraca wartości Restricted. W innym wypadku odpalamy komendę

Set-ExecutionPolicy Unrestricted

Do czego jest to nam potrzebne? Aby wykonać skrypt PowerShell ściągnięty z Internetu 🙂 A więc odpalamy komendę

iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex

Mamy zainstalowane Chocolatey możemy teraz zainstalować Node i Python2 używając komend

choco install nodejs.install
choco install python2

Kolejnym krokiem jest instalacja The React Native CLI, używamy do tego Node Package Manager

npm install -g react-native-cli

A więc dotarliśmy do końca przygotowania środowiska. Czas zacząć pisać naszą pierwszą aplikację.

The Basics, czyli jak zrobić prostą aplikację

Naszym przykładem będzie prosta aplikacja prezentująca mapę dostarczaną przez Google Maps.

W celu stworzenia naszego pierwszego projektu w React Native uruchamiamy konsolę i piszemy

react-native init MapSample

następnie zmieniamy katalog i piszemy

cd MapsSample
react-native run-android

Strukturę naszego projektu mamy już gotową. Teraz pora podłączyć plugin mapy. W tym celu wykorzystamy plugin React Native Maps. Uruchamiamy konsolę i piszemy

npm install react-native-maps --save
react-native link

Co zrobić w razie problemów z kompilacją

Jeżeli pojawiają się nam jakieś problemy z kompilacją należy wykonać sekwencję poniższych komend.

npm cache clean
cd android
gradlew clean

Plus i minusy React Native vs Xamarin Forms

Oba środowiska dają nam na wyjściu kod natywny działający ze zbliżoną prędkością.

W mojej ocenie na plus Xamarin to możliwość pisania w C# lub F# używając naszego ulubionego IDE. Minusem jest niestety potrzeba kompilowania kodu żeby zobaczyć zmiany na UI.

Plusem React Native jest natomiast niewątpliwie Live reload. Minusem brak wsparcia dla rozwiązań monitorujących działania aplikacji w produkcji jak np. Xamarin App Insight.

Podsumowując nie ma jednoznacznego zwycięzcy. Oba rozwiązania mają swoje plusy i minusy, oraz dla obu można znaleźć miejsce w którym sprawdzą się lepiej.

Linki

Develop ReactNative apps in Visual Studio Code

React Native

Przykładowy kod

https://github.com/marcshilling/react-native-image-picker

https://github.com/lwansbrough/react-native-camera

https://github.com/airbnb/react-native-maps

Jak wyznaczać cele: Metoda SMART

Jak wyznaczać cele: Metoda SMART

A więc mamy nowy rok czas podejmowania decyzji, planowania i wyznaczania celów. Z pomocą przychodzi metoda SMART.

Definicja według Wikipedia

SMART criteria

SMART is a mnemonic acronym, giving criteria to guide in the setting of objectives, for example in project management, employee-performance management and personal development. The letters S and M usually mean specific and measurable. The other letters have meant different things to different authors, as described below. Additional letters have been added by some authors.

SMART criteria are commonly associated with Peter Drucker’s management by objectives concept.[1] The first-known use of the term occurs in the November 1981 issue of Management Review by George T. Doran.[2] The principal advantage of SMART objectives is that they are easier to understand and to know when they have been done.

Metoda SMART

Do wyznaczania celów możemy użyć metody SMART, czyli 5 angielskich słów Specific, Measurable, Achievable, Relevant, Time-bound.

Specific

Prosty – cel powinien być prosty i jasno zdefiniowany, nie może być zbyt ogólnikowy np. Więcej się uczyć.
Dobrze zdefiniowanym przykładem jest np. Chce przebiec maraton w 2018 roku. Naszym celem jest przebiec maraton w 2018 roku, czyli mamy czas do 31.12.2018.

Measurable

Mierzalny – cel powinno dać się łatwo określić liczbowo. Musimy wiedzieć kiedy zadanie ma się rozpocząć, kiedy zakończyć i jaki czas jest potrzebny na jego wykonanie. Powinniśmy również określić punkty w których będziemy sprawdzać stan wykonania zadania.

Wracając do przykładu z maratonem. Mamy jasno określony czas zakończenia 31.12.2018, musimy określić czas startu. Należy więc przeredagować zadanie np. Od stycznia 2017 chce zacząć się przygotowywać do maratonu w 2018 roku.

Achievable

Osiągalny – cel powinno dać się go wykonać. Powinien on być realistyczny nie przebiegniemy ultra maratonu jeżeli dopiero zaczynamy biegać. Cel zbyt ambitny podkopie nasze morale i w ogóle odpuścimy ten cel.

Relevant

Ważny – powinien on mieć dla nas znaczenie. Jego wykonanie spowoduje jakąś istotną dla nas zmianę np. Poprawę kondycji i samopoczucia.

Time-bound

Określony w czasie – gdy mamy harmonogram w którym widzimy początek, koniec i poszczególne etapy będzie nam łatwiej się trzymać tego celu i powoli małymi krokami dojdziemy do końca.

Podstawowym błędem jest zakładanie sobie nierealistycznych terminów i wrzucanie za dużo na barki.

Podsumowanie

Jakie wy macie cele na 2017 i jak podchodzicie do ich planowania? Czy używacie metody SMART, a może wystarcza wam po prostu GTD.