środa, 1 lipca 2015

Devoxx w Polsce - dzień 3 ostatni

Trzeci dzień Devoxxa zacząłem do prezentacji Christophera Batey’a: "Building fault tolerant microservices". Dopiero po jakimś czasie się zorientowałem, że już gdzieś to widziałem… I fakt byłem na tej prezentacji na Voxxed Days Vienna 15. A specjalnie przed pójściem sprawdzałem na blogu, czy to nazwisko nie jest mi znane, ale coś mi poszło nie tak :(

Nie będę opisywał wszystkich praktyk i narzędzi z których korzysta prelegent, tylko zmieszczę jego przykładowe projekty:
Z ciekawostek, to w Spring Boot’cie można za pomocą hystrix-javanica skorzystać z adnotacji @HystrixCommand i możemy metody opakowywać w komendy Hystixowe, bez całej ceremonii.

Na koniec było jeszcze jak sprzedawać takie zabawki biznesowi. Trzeba zrobić if’a w kodzie, który będzie odciążał nasz system w ciężkich chwilach i podpiąć guzik do tego. Jak będzie duże obciążenie i ktoś będzie do nas dzwonił, to musimy kazać mu wcisnąć przygotowany guzik i odciążyć serwery. Jak się będzie to powtarzać to w którymś momencie biznes się zapyta, czy nie da się tego zautomatyzować i wtedy wprowadzamy potrzebne zabawki.

Kolejną prezentacją, na którą się udałem była Pawła Szulca na temat: "Event Sourcing & Functional Programming - a pair made in heaven". Był mały problem z kodem, który na części slajdów był niepokolorowany i zapisanym małą czcionką. Prelegent polecał przeczytanie publikacji Why Functional Programming Matters.

Następnie Paweł tłumaczył jak działają monady, na co zeszło dużo czasu. Później było na temat Event Sourcing’u, czyli to o czym zawsze Greg Young opowiada. Na koniec pozostało 20 minut czasu na demo. Było ciekawe, bo „opowiadało” fabułę filmu. Prezentacja była dobra, trzymająca poziom. Więcej kodu następnym razem proszę.

Następnie byłem na 15sto minutówce, gdzie Roy van Rijn opowiadał o REPL’u w Javie 9: "Watch out, the REPL is coming". Była to prezentacja zgłoszona dzień wcześniej i na kolacji ze speakerami była jeszcze łatana przez speców z Oracle’a. Dali radę, bo na demo wszystko zadziałało. Jest to jeszcze wczesny development, więc jest jeszcze sporo błędów, które mogliśmy zobaczyć pod koniec wystąpienia. Jak na prezentację przygotowaną na spontanie to poszła bardzo fajnie.

Następnie byłem na prezentacji Grega Young’a: "8 Lines of Code". Greg pokazał parę wywołań, które w skrajnych przypadkach mogą powodować jakieś problemy, np: FileStream.Flush(), FileStream.Seek(). Nie powinniśmy ponadto tworzyć nieograniczonych kolejek i w momencie zaczynania projektu powinniśmy się zastanowić, jak będziemy chcieli debugować problemy na produkcji. Warto sobie w logach wypisywać wszystkie zmienne środowiskowe, aby można było odtworzyć środowisko, gdzie występuje błąd. Najciekawszych problemów wielowątkowych i tak nie jesteśmy w stanie debugować :(

Kolejną prezentacją na którą się udałem była Teda Newarda: "Busy Java Developer’s Guide to Three REST API Frameworks". Na początek Ted powiedział: „Chrząszcz brzmi w trzcinie” :)

Ted przedstawił 4 różne frameworki. Na pierwszy ogień poszedł SparkJava (nie mylić z Apache Spark). Jest on inspirowany Sinatrą ze świata Rubyiego. Wygląda on na bardzo małe i proste rozwiązanie, gdzie wiele składni Javy 8 jest wykorzystywane. Hello World:
import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}

Rozwiązanie to pozwala zarządzać sesją tak jak kontenery servletów. Rozwiązanie na pewno przydatne do małych rozwiązań i testów.

Następnie na tapetę poszedł Vert.x. Bazuje on na JVM, ale można z niego korzystać w Javie, JavaScripcie, Groovym i Rubym. Nie wiem jak to jest technicznie rozwiązane, ale brzmi bardzo ciekawie. Model współbieżności jest oparty na Aktorach i ma rozproszoną szynę zdarzeń. Dalej było parę przykładów jak wygląda kod dla różnych języków. Dla Javy poniżej:
public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}

Tworzenie współbieżnego kodu z Vert.x jest łatwe ze względu na pewne założenia. Kod który tworzymy jest jednowątkowy i każdy moduł (jakkolwiek go definiujemy) ma osobną pętlę z event’ami, która się nie blokuje.

Kolejny był DropWizard. Jest to już trochę większy kombajn, który ma zintegrowane wiele bibliotek Javowych w sobie, aby można go było szybko wdrożyć na produkcję. Trochę jak Spring Boot. DropWizard ma wbudowanego Jetty’iego, korzysta z Jersey'a do RESTa, Jackson’aMetrics do zbierania statyskych z różnych części aplikacji, Guava, Logback, Hibernate ValidatorJDBI dla połączenia z bazą danych, Liquibase dla wersjonowania bazy, FreemarkerMustache dla frontendu, Joda Time i pewnie jeszcze wiele innych. I całość opędzona mavenem. Przykładowy kod poniżej:
public class HelloWorldApplication extends Application {
    public static void main(String[] args) throws Exception {
        new HelloWorldApplication().run(args);
    }

    @Override
    public String getName() {
        return "hello-world";
    }

}

Jako wynik dostajemy dużego JARa, którego odpalamy i działa. Możemy jako argument przekazać plik konfiguracyjny do aplikacji. Wygląda na całkiem ciekawy stos.

Ostatnim zaprezentowanym narzędziem był RestX, czyli lekki, modułowy, szybki… To co dostajemy to samoaktualizujący się shell, wstrzykiwanie zależności, wsparcie dla MongoDB, interaktywna dokumentacja RESTa, automatyczne testy, konsola admina. Konkretne endpoint’y RESTowe można generować w stylu testów BDD (Resource Spec) albo małych klass:
@Component @RestxResource
public class HelloResource {
    @GET("/message")
    public Message sayHello(String who) {
        return new Message().setMessage(String.format(
                "hello %s, it's %s",
                who, DateTime.now().toString("HH:mm:ss")));
    }
}

Po wystartowaniu otrzymujemy od razu dokumentację naszego API, konsolę admina i coś do monitorowania. Generalnie projekt zawiera w sobie DropWizard’a, wszystkie komponenty są bezstanowymi singletonami, architektura jest mocno zmodularyzowana i dev mode wspiera hot-recompile kodu źródłowego.

Na koniec było podsumowanie, że żaden framework nie jest najlepszy, tylko że każdy jest inny - i w sumie racja.

Na koniec całej konferencji zostało motywujące wystąpienie Jurgen Appelo o "The Creative Networker". Jurgen tłumaczył pewien wykres:


Wynika z niego bardzo wiele, a mianowicie, najwięcej uczymy się podczas eksperymentowania. W przypadku popełniania, błędów uczymy się nie wiele, ale nie powinniśmy się tym przejmować. W przypadku praktyk (czyli produkcji masowej), już nie wiele jest nauki, ale za to duży sukces. Zawsze świętujemy sukcesy (a w Polsce pijemy również przy porażkach), ale często nie świętujemy naszych eksperymentów - a powinniśmy.

Prelegent przedstawił siedem zasad dla kreatywnych:
  1. Szukanie wielu pomysłów - najpierw powinniśmy zbierać jak najwięcej pomysłów 
  2. Generowanie wielu pomysłów - później je jeszcze generować w myśl zasady: "The best way to have a good idea is to have a lot of ideas" - Linus Pauling
  3. Tworzenie połączeń - musimy naszym pomysłem podzielić się z innymi i wzajemnie się inspirować 
  4. Poszukiwanie kierunku - mindfulness i unfocus są najlepsze dla kreatywności 
  5. Wykonanie pomysłu - trzeba wizję zrealizować 
  6. Zrozumieć błędy - i wynieść naukę na przyszłość 
  7. Uczyć się na porażkach - w końcu wiele wynalazków powstało przez przypadek 



Omawiane techniki i praktyki nie są jakimś dużym wymysłem prelegenta, a raczej wnioskami z wielu książek i notatek.



Na koniec była jeszcze reklama książki Jurgena: Management 3.0. Był to bardzo motywujący wykład na koniec konferencji, bardzo motywujący do testowania swoich pomysłów i inspirujący do próbowania ze startup’ami.

Było jeszcze krótkie zakończenie konferencji, gdzie można było zobaczyć wszystkich organizatorów i wolontariuszy. Podsumowując 3 dni, to organizacyjnie konferencja była bardzo dobrze ogarnięta. Super miejsce na tak dużą konferencję, dobre nagłośnienie, rzutniki i jedzenie. Trochę brakowało ciastek w przerwach, aby dostarczyć cukru do kory przedczołowej, ale napojów było pod dostatkiem. Trochę mi zabrakło prezentacji najwyższych lotów, które by wywracały aktualne postrzeganie świata o 180 stopni. Mogło by być również więcej tych dobrych, albo ja trafiałem na wiele przeciętnych. Na pewno będę musiał jeszcze sporo prezentacji obejrzeć, jak będą dostępne.

Brak komentarzy:

Prześlij komentarz